프로토콜은 네트워크 상의 호스트 사이에 데이터를 주고 받기 위해 약속한 구조와 방식을 말합니다. 프로토콜을 이해하기 위해 수평 통신과 수직 통신을 살펴봅시다.
수평 통신은 같은 계층의 엔터티간의 통신을 말하며 프로토콜 스택을 이용하여 약속합니다. 수직 통신은 N계층에서 N-1 계층의 서비스를 사용하는 것을 말합니다.
수직 통신은 N-1 계층에서 N계층에게 제공하는 서비스입니다.
따라서 하위계층에서 제공하는 서비스를 상위 계층에서 이용하여 메시지를 패킷화하여 물리계층의 프레임 형태로 만들어집니다. 이러한 네트워크 프레임은 라우터를 통해 목적하는 호스트까지 전달합니다. 목적하는 호스트에서는 하위 계층의 프로토콜 스택을 확인하여 상위계층에 수신한 프레임을 패킷화하여 응용 프로그램에 메시지로 전달합니다.
패킷은 상위 계층에서 전달한 메시지를 자신의 계층의 프로토콜 스택으로 감싸는 과정으로 생성합니다.
N계층에서는 보낼 데이터(SDU)에 프로토콜 스택 헤더(PDI)와 오류가 아님을 증명할 제어 정보(ICI)를 N-1계층에 보냅니다. N-1계층에서는 N 계층에서 받은 ICI 정보로 오류가 있는지 확인합니다.
그리고 N 계층에서 전달받은 ICI 정보는 버립니다. 그리고 N 계층에서 받은 데이터(SDU)와 프로토콜 스택(PDI)는 N-1계층에서는 패킷 데이터(SDU)입니다.
여기에 N-1 계층의 프로토콜 스택 헤더(PDI)와 제어 정보(ICI)를 붙여 N-2계층에 보냅니다.
이러한 과정은 하위 계층으로 내려가면서 반복합니다. 그리고 PDI와 SDU를 합쳐서 PDU라고 부르며 PDU가 실질적인 패킷입니다.
통신에 사용하는 데이터는 계층에 따라 부르는 이름이 다릅니다. 응용에서 전달한 데이터는 메시지라 부릅니다. 그리고 메시지를 프로토콜 스택으로 감싼 데이터를 패킷이라 부릅니다. 그리고 물리 계층에서 주고 받는 데이터를 프레임이라 부릅니다.
이와 같은 과정은 운영체제와 소켓 라이브러리에서 수행합니다. 이 책은 소켓 라이브러리를 이용하여 통신 프로그래밍을 작성하는 방법에 관해 다루기 때문에 이러한 과정을 직접 구현하지는 않습니다. 하지만 통신 프로그래밍 학습 이후에 통신 시스템이나 보안 등을 다루기 위해서는 이러한 내용은 필수적으로 필요합니다.