앞선 게시물에서 이야기했듯이, Protocol은 네트워크에서 통신을 위해 약속한 규약이다.
하지만 한 번에 동작을 하면 유지, 보수하기는 어렵고 확장도 어렵게 된다.
따라서 프로토콜 단위로 계층화시켰다.
한 계층은 정해진 특정한 작업만을 수행하고, 이웃해 있는 계층과 데이터를 주고 받는다.
이렇게 프로토콜별로 계층을 나눈 것을 Protocol Layer라고 하며, 흔히 TCP/IP 5계층이라고 표현한다.

Physical Layer에서는 물리적 통신 매체(케이블, 무선 채널 등)를 통해 데이터를 주고 받는다.
통신 단위는 bit이며, 데이터를 어떻게 보낼 것인지에 대한 프로토콜이 있어야 한다.
네트워크를 통해 노드들 간에 데이터를 정확히 주고받기 위한 프로토콜을 정의한다.
통신 단위는 패킷이고, frame이라고도 한다. 패킷은 header와 payload로 구성되어있다.
Data Link Layer에서는 물리 계층에서 실제로 데이터가 전송되는 중에 오류가 발생하면 어떻게 알아차리고 해당 에러를 어떻게 리커버리를 하느냐에 대한 프로토콜이 정의되어있어야 한다.
송신자와 수신자 간의 데이터 처리 속도가 차이가 날 경우 Packet loss를 막기 위해서 흐름 제어를 하기도 한다.
다른 노드의 네트워크 계층으로 데이터를 보낸다.
데이터 단위는 IP Datagram이다.
라우터를 통해 목적지까지의 경로를 설정하는 Routing 알고리즘을 보유하고 있다.
Network Layer에서 IP 주소를 부여하고, 올바른 경로에 따라 패킷을 전달해준다.
다른 노드로부터 받은 데이터를 재정렬하고 오류를 검출한다.
패킷 단위로 쪼개져서 온 데이터들을 다시 재정렬한다. 이 과정에서 일련번호를 붙이는 그러한 프로토콜이 필요하다.
IP 주소를 보고 컴퓨터에 데이터가 도착하며 이 데이터를 사용할 프로세스가 무엇인지를 알아야 하는데 이 때 포트 번호가 필요하다. TCP와 UDP가 전송 계층에 속한다.
통신 단위는 TCP 일 때 Segment이고, UDP 일 때 Datagram이다.
많은 응용 프로그램들이 이 곳에 속한다.
보낼 데이터를 프로토콜 양식에 맞추어 만든다.
파일을 송수신하는 FTP, 전자 우편을 주고받는 SMTP, 하이퍼텍스트를 지원하는 HTTP 등 다양한 네트워크 서비스들이 있다.
통신 단위는 message이다.
Encapsulation(캡슐화)라는 개념과, Decapsulation(역캡슐화)라는 개념이 있다.
캡슐화는 각 계층 사이에서 데이터를 주고 받을 때 데이터의 신뢰성 유지 및 오류 검출 등의 작업을 위해 추가적인 정보를 붙여서 보내야 한다.
이러한 추가 정보들은 패킷의 헤더에 이어 붙는다. 우리는 이렇게 정보를 덧붙여서 보내는 것을 캡술화라고 하고, 특정 계층이 이러한 데이터를 받은 후에 필요했었던 정보를 제거하는 작업을 역캡슐화라고 한다.