[네트워크] IP fragmentation, reassembly | IP 단편화

블로그 이사했습니다.

아래에서 확인 가능합니다.

 

https://code-lab1.com/ip-%EB%8B%A8%ED%8E%B8%ED%99%94/

 

[네트워크] IP fragmentation, reassembly, IP 단편화 - 코드 연구소

IP 단편화는 IP datagram을 여러 조각의 datagram으로 쪼개서 전송하고 최종 목적지에서 재결합(reassembly) 된다. IP 헤더를 통해 본래 하나의 datagram이었는지 구분하고 순서를 확인하게 된다.

code-lab1.com

 

 

IP 단편화(fragmentation)

network links는 MTU(Max Transfer Size)를 가진다. 링크 계층 프로토콜마다 다른 링크 타입과 MTU를 가지므로 네트워크는 큰 IP datagram을 분할할 필요성이 있다. 이러한 IP datagram을 여러 조각의 datagram으로 쪼개서 전송하고 최종 목적지에서 재결합(reassembly) 된다. IP 헤더를 통해 본래 하나의 datagram이었는지 구분하고 순서를 확인하게 된다.

 

IP fragment
IP fragmentation 예시

 

4000byte datagram을 3개의 datagram으로 쪼개서 전송했다고 하자. 각 datagram은 헤더가 20byte씩을 차지한다. 즉 처음 datagram도 헤더가 20byte를 차지하므로 data field는 3980이다. 또한 MTU는 1500byte이므로 1500, 1500, 1040으로 쪼개서 보내는 게 효율적이다. 1500+1500+1040은 4040인데 계산이 잘못된 거 아니냐고 할 수 있지만, 각 datagram이 모두 20byte의 헤더를 포함한다는 것을 생각하면 된다. 처음 datagram의 datafield가 3980이므로 1480+1480+1020=3980으로 딱 맞는다.  

 

offset은 시작주소를 나타내는데 가장 첫 번째 datagram은 주소가 0부터 시작하며, 두 번째 datagram의 주소는 이전 datagram의 datafield 다음을 가리켜야 하므로, 1480/8=185이다. (주소는 8byte를 기준으로 한다). 3번째 datagram의 주소는 185+1480/8 = 370이다. 이런 시작 주소가 왜 필요할까? 바로 재결합을 위해서다. 

 

reassembly
reassembly 예시

3개로 쪼개진 datagram을 다시 합치면 위와 같이 된다. 이 때 offset을 이용해 순서를 알 수 있다. 

반응형

댓글

Designed by JB FACTORY