현대 네트워크의 대부분은 패킷 네트워크이다. 패킷 네트워크란 데이터를 패킷이라는 작은 단위로 쪼개 보내는데 이런 기법으로 하나의 통신이 회선 전체를 점유하지 않고 동시에 여러 단말이 통신하도록 해주는 것을 말한다.
애플리케이션에서 데이터를 테이터 플로 계층으로 내려보내면서 패킷에 데이터를 넣을 수 있도록 분할하는데 이 과정을 인캡슐레이션이라고 한다.
- 4 계층부터 네트워크 전송을 위한 정보를 헤더에 붙여 넣고 3 계층으로 내려보낸다. 이때 헤더에는 Source Port, Destination Port, Sequence Number, Acknowledgement Number가 들어간다.
- 다시 3계층에서 필요한 헤더 정보를 추가한 후 2 계층으로 내려보낸다. 이때 헤더에는 Source IP Address, Destination IP Address가 들어간다.
- 다시 2계층에서 필요한 헤더 정보를 추가한 후 전기 신호로 변환해 수신자에게 전송한다. 이때 헤더에는 Destination MAC, Source MAC이 들어간다.
받는 쪽에서는 다시 하위계층에서 상위계층으로 데이터를 보내는데 이 과정을 디캡슐레이션이라고 한다.
- 받은 전기신호를 데이터 형태로 만들어 2 계층으로 올려 보낸다.
- 2 계층에서는 송신자가 작성한 2계층 헤더에 포함된 정보를 확인한다. 만약 목적지가 자신이 아니라면 패킷을 버린다. 자신이 맞다면 3 계층으로 이 정보를 보내준다.
데이터를 상위계층으로 올려 보낼 때 2 계층의 헤더 정보는 더 이상 필요 없으므로 벗겨낸다. - 3 계층에서는 똑같이 헤더 정보를 확인해 자신에게 온 것이 맞다면 3계층 헤더정보를 제거하고 4 계층으로 보낸다.
- 4 계층도 데이터 확인 후 애플리케이션으로 올려준다.
이때 헤더에 포함되어야 할 정보들은 현재 계층에서 정의하는 정보, 상위 프로토콜 지시자가 반드시 포함되어야 한다.
현재 계층에서 정의하는 정보란 Source Port, Destination IP Address 등의 정보를 말한다.
그럼 상위 프로토콜은 왜 필요할까?
각각 해당 계층에 맞는 프로토콜이 있는데 인캡슐레이션 과정시 프로토콜에 대한 정보가 없다면 어떤 프로토콜로 보내야 할지 구분할 수 없는 문제가 생기게 된다.
이런 문제가 발생하지 않도록 헤더에 상위 프로토콜 지시자 정보가 포함되어 있어야 한다.
<참고>
MSS(Maximum Segment Size) : 네트워크에서 수용할 수 있는 크기를 역산정해 데이터가 4 계층으로 내려올 때 적절한 크기로 쪼개질 수 있도록 하는 값
MTU(Maximum Transmission Unit) : 네트워크에서 한 번에 보낼 수 있는 데이터 크기