OSI 7계층의 상위 계층 -> 하위 계층으로 데이터를 보내면 물리 계층에서 전기 신호 형태로 네트워크를 통해 신호를 보냅니다. 그리고 다시 하위 계층 -> 상위 계층으로 데이터를 보냅니다.
이와 같이 데이터를 보내는 과정을 인캡슐레이션(Encapsulation)
, 받는 과정을 디캡슐레이션(Decapsulation)
이라고 부릅니다.
현대의 네트워크는 패킷 기반 네트워크
이며, 패킷 네트워크라는 것은 데이터를 패킷이라는 작은 단위로 쪼개 보내는데 하나의 통신이 회선 전체를 점유하지 않고 동시에 여러 단말이 통신하도록 해줍니다.
애플리케이션에서 데이터를 하위 계층(1 ~ 4계층)으로 내려보내면서 패킷에 데이터를 넣을 수 있도록 분할하는데 이 과정을 인캡슐레이션
이라고 합니다. 4계층인 전송 계층부터 네트워크 전송을 위해서 정보를 헤더에 붙여 넣습니다.
헤더 정보는 각 계층에서 자신이 필요한 정보를 추가하면서 내려보냅니다.
이 정보는 미리 정의된 비트(0 또는 1)로 씁니다. 데이터 한 개를 전송하는 작업은 복잡해서 하위 계층에서만 3개의 헤더 정보가 추가됩니다.
이제 받는 쪽에서 디캡슐레이션
과정을 수행합니다.
물리 계층에서 보낸 전기 신호를 받아 데이터 형태로 만들어 2계층인 데이터 링크 계층으로 올려보냅니다.
데이터 링크 계층에서는 송신자가 작성한 데이터 링크 계층 헤더에 포함된 정보를 확인합니다. 정보를 확인하여 목적지가 자신이 아니라면 자신에게 온 패킷이 아니므로 버립니다. 이 역할은 랜 카드가 담당합니다.
목적지가 맞으면? 3계층인 네트워크 계층으로 올려보내며, 데이터를 상위 계층으로 보낼 때는 2계층의 헤더 정보는 더 이상 필요없으므로 벗겨내고 올려보냅니다.
이 데이터를 3계층에서 받아 헤더 정보를 확인하여 자신에게 온 것이 맞는지 확인하고 맞으면 헤더 정보를 제거하고 4계층인 전송 계층으로 보냅니다. 이와 같은 과정으로 애플리케이션에 올려보냅니다.
실제 데이터는 상위 게층 -> 하위 계층(인캡슐레이션), 하위 계층 -> 상위 계층(디캡슐레이션)으로 전달되고 헤더 정보는 각 계층끼리 전달됩니다.
인캡슐레이션하는 과정에서 헤더에 넣는 정보들이 많아서 모두 이해하기 힘들지만 규칙이 있으며, 이 헤더에 두 가지 정보는 반드시 포함되어야 합니다.
OSI 7계층의 각 계층에서의 목적에 맞는 정보들이 포함됩니다.
예를 들어, 4계층인 전송 계층
의 목적은 큰 데이터를 분할하여 받는 쪽에서는 잘 조립하는 것입니다.
그러다 보니 잘 분할하고 잘 조립하도록 데이터에 순서를 정하고 받은 패킷의 순서가 맞는지, 빠진 패킷은 없는지 점검하는 역할이 중요하며 이 정보를 헤더에 적어 넣게 됩니다.
TCP/IP의 4계층 프로토콜인 TCP에서는 시퀀스(Sequence)
, 에크(Acknowledgement)
번호 필드로 이 데이터를 표현합니다.
네트워크 계층에서는 논리적인 주소인 출발지 IP
, 도착지 IP
주소를 헤더에 적어 넣습니다.
데이터 링크 계층에서는 물리적인 주소인 출발지 MAC
, 도착지 MAC
주소를 헤더에 넣습니다.
프로토콜 스택은 상위 계층으로 올라갈수록 종류가 많아집니다.
네트워크 계층의 프로토콜인 IP
는 전송 계층에서는 다시 TCP
와 UDP
로 나뉘고 그보다 더 상위 계층에서는 FTP
, HTTP
, SMTP
, POP3
등 더 다양한 프로토콜로 다시 나뉩니다.
인캡슐레이션 과정에서는 문제가 없지만 디캡슐레이션하는 목적지 쪽에서는 헤더에 아무 정보가 없으면 어떤 상위 프로토콜로 올려보내 주어야 할지 결정할 수 없습니다.
예를 들어, 네트워크 계층에서 목적지 IP 주소를 확인하고 전송 계층으로 데이터를 올려보낼 때 헤더에 상위 프로토콜 정보가 없다면 TCP로 보내야 할지, UDP로 보내야 할지 구분할 수 없습니다.
이런 문제가 발생하지 않도록 인캡슐레이션하는 쪽에서는 헤더에 상위 프로토콜 지시자 정보를 포함해야 합니다.
애플리케이션에서 데이터를 만들어 보낼 때 하위 계층에서 네트워크 상황에 맞게 데이터를 잘 쪼개 상대방에게 전달합니다. 네트워크에서 수용할 수 있는 크기를 역산정해 데이터가 전송 계층
으로 내려올 때 적절한 크기로 쪼개질 수 있도록 유도하는데 이 값을 MSS(Maximum Segment Size)
라고 부릅니다.
네트워크에서 한 번에 보낼 수 있는 데이터 크기를 MTU(Maximum Transmission Unit)
라고 부르며 일반적인 이더넷에서 수용할 수 있는 크기는 1,500 바이트입니다.
MTU
와 MSS
는 모두 데이터 크기를 지정하는 것이므로 MTU
값은 데이터 링크 계층의 데이터 값, MSS
는 전송 계층에서 가질 수 있는 최대 데이터 값입니다.
데이터 링크 계층에서는 헤더들의 크기를 제외한 데이터 크기를 MTU
크기라고 부릅니다. IP 헤더
와 TCP 헤더
의 표준 헤더 크기는 일반적으로 각각 20바이트이므로 일반 이더넷인 경우, MSS 값을 1,460 바이트로 사용합니다.
이상으로 인캡슐레이션과 디캡슐레이션에 대해서 간단히 알아봤습니다.