Chapter 2 : Application layer
네트워크 애플리케이션은 cliend-server 와 peer-to-peer(p2p) 의 두 가지 구조를 갖는다.
커뮤니케이션을 하는 실질적은 주체는 프로그램이다. 그 프로그램이 있는 호스트가 client-server일 때, 서버에 있는 호스트는 언제나 on 되어있는 호스트이다. 또 영구적인 ip 주소를 갖고 있으며 또 많은 클라이언트를 응대하기 위해 데이터 센터 형태를 갖고 있다. 클라이언트는 언제와 서버와 통신한다. 또한 연결이 되었다가 안되었다가 한다. 또한 인터넷에 연결이 될 때마다 변경이 가능한 다이나믹 ip주소를 갖는다.
p2p 는 커뮤니케이션 하는 두 프로세스가 모두 유저 호스트에 있다. 따라서 항상 서버에 있지 않다. 엔드 시스템끼라 통신한다. 이 유저 호스트를 peer라 한다. 서로 서비스를 제공하고 제공 받는 관계이다. p2p에는 별도의 서버가 없고 peer들간 서비스를 주고받는다. 따라서 한 peer가 시스템에 조인하면 request만 갖고 들어오는 것이 아니라 서비스를 제공하기 때문에 시스템의 규모가 커지더라도 괜찮다.
peer는 연결이 항상 되어있지 않고 다이나믹ip주소를 가지므로 관리가 복잡하다.
실행 중인 프로그램을 프로세스라 한다. 네트워크에서는 서로 다른 호스트끼리 메세지를 교환하는 것을 의미한다. 프로세스는 클라이언트와 서버 프로세스로 나뉘는데 ,클라이언트는 커뮤니케이션을 시작하고 서버 프로세스는 클라이언트의 요청에 응답하는 것이다.
소켓은 애플리케이션 계층과 transport 계층의 문과 같은 것이다. 내보내거나 받는 메세지 모두 소켓을 통한다.
커뮤니케이션은 두개의 호스트 안의 프로세스에서 이뤄지는 것이다. 따라서 메세지의 최종 목적지는 프로세스이기 때문에 호스트 주소의 ip만 가지고는 정확한 목적지 식별이 힘들다. 따라서 포트 번호를 사용하는데 이것은 호스트 안의 프로세스를 식별하는 번호이다. http 서버의 포트번호는 80으로 고정되어 있고 메일의 경우 25로 고정되어 있는데 이를 웰노운 포트번호라 한다. 매우 보편적으로 사용되기에 여러 클라이언트가 컨택하기 쉽게 하기 위해서다.
어떤 transport 서비스를 원할까? data integrity가 매우 중요하다. 어떤 파일을 전달받거나 웹 트랙잭션의 경우 데이터에 오류가 없고 신뢰할 만 해야 한다. 그러나 오디오와 같은 경우 어느 정도의 손실을 용인한다. 또한 딜레이가 작은 것이 매우 중요하다(low delay). 이는 timing 이라 한다. 또한 최소한 양의 throughput이 보장되는 것이 중요하다. 하지만 throughput이 필요하지 않는 경우가 있는데 이를 elastic apps라 한다. 또한 보안 문제도 중요하다.
위 사진은 각 매체의 경우 필요로 하는 transport 서비스를 정리한 것이다. time sensitive는 데이터가 얼마나 딜레이 없이 즉각적으로 전송되냐를 의미한다.
인터넷에서 tranport 프로토콜 서비스를 제공하는 것은 tcp와 udp가 있다. tcp는 신뢰할 만한 transport서비스를 제공한다. 오류 없이 순서대로 잘 도착하는 것이다. 그러나 udp는 신뢰할 만하지 않다. tcp는 상대방의 tcp와 통신하여 커넥션을 형성하고 데이터를 주고받는다. 이 커넥션을 통해 flow control을 제공하는데, 보내는 tcp와 받는 tcp에서 보내는 tcp가 데이터를 빠르고 많이 보내 받는 tcp의 버퍼가 넘치지 않기 위해 커넥션을 통해 속도를 낮추는 요청을 하는 것을 의미한다. 또한 네트워크의 congestion을 피하기 위해 컨트롤하기도 한다. 이 모든 서비스를 udp에서는 제공하지 않는다. 그러나 tcp는 커넥션을 셋업하고 관리하는 과정에서 오버헤드가 더 발생하므로 빠른 udp를 사용하기도 하는 것이다. 또한 애플리케이션 자체에서 data integrity를 확인하기 위해 더 심플한 udp를 사용하기도 하고, tcp의 flow나 congestion컨트롤 때문에 데이터 결함 시 tcp의 경우 transport계층 버퍼에서 애플리케이션으로부터의 다음 데이터 전송을 막아버릴 수 있다. 이런 경우 데이터를 바로바로 네트워크로 내보내 단위 시간당 딜리버리가 빠른 udp를 선호하기도 한다.
위 사진은 보편적인 애플리케이션이 어떠한 애플리케이션 layer와 transport 프로토콜을 사용하는지 보여준다. TCP를 사용하는 애플리케이션은 data integrity가 중요한 것이다.UDP를 겸하여 사용하는 애플리케이션은 타이밍과 minimum throughput까지도 중요하다.
다음은 애플리케이션 프로토콜에서 정의되어야 하는 요소들이다. 먼저 교환하는 메세지의 종류를 정의하고, 메세지의 신택스(필드,구분,구획)을 정의하고, 메세지의 semantics, 즉 메세지의 해석을 정의한다. 또한 언데 메세지를 받고 응답할지의 룰을 정의한다. app-layer 프로토콜을 open과 proprietary 두 가지가 있는데 proprietary는 open이 아니므로 어떻게 동작하는지 알 수 없고 짐작할 수만 있다.