IP 데이터그램의 형식은 다음과 같다.
데이터 그램은 transport layer의 세그먼트에 header로 감싸 만든 것이라고 배웠다.
그래서 보다싶이 데이터 그램의 data에 해당하는 부분이 segment이고 나머지 부분이 header가 된다.
IP fragmentation
만약 IP 데이터 그램의 사이즈가 크다면 여러 데이터 그램을 쪼개게 되는데 이러한 과정을 IP fragmentation이라고 한다.
아래 그림과 같이 라우터에서 라우터로 이동할 때는 link layer를 거치게 되는데 link layer는 MTU(Maximum Transmission Unit)이라는 최대 전송 단위를 가지고 있다.
만약 데이터 그램의 사이즈가 link layer의 MTU보다 크다면 network layer에서 link layer로 거치기 전에 여러 개의 데이터 그램으로 쪼개서 보내게 된다.
이후 최종 목적지에 도착하게 되면 나눠진 데이터 그램들이 합쳐진다.
만약 IP 데이터 그램의 크기가 4000Bytes이고 network link 의 MTU가 1500Bytes이라면 데이터 그램은 총 3개로 나눠질 것이다.
여기서 각 데이터 그램의 크기가 1500, 1500, 1000이라고 착각하기 쉬운데 실제로는 그렇지 않다.
나눠진 각 데이터 그램들은 원본 데이터 그램과 동일한 header를 가지고 있어야 하기 때문이다.
데이터 그램의 header가 20Bytes라고 하자.
그러면 원본 데이터 그램의 data 크기는 3980Bytes가 될 것이다.
MTU가 1500Bytes라고 가정했는데 실제 header 20bytes가 포함되어 있으므로 실제 보낼 수 있는 최대 data의 크기는 1480Bytes이다.
그러므로 실제 각 데이터 그램의 크기는 다음과 같다.
참고로 데이터 그램이 나눠질 때 같은 데이터 그램으로부터 나왔다는 사실을 알 수 있는 비트가 identifier bit이다.
나눠진 데이터 그램의 id는 원본 데이터 그램의 id와 같다.
이 식별자를 사용하여 목적지에서 데이터 그램들이 하나의 데이터 그램으로 합쳐지게 된다.
flag는 3비트로 되어있는데 위치마다 다음의 의미를 지니고 있다.
- 첫 번째 비트 : 0으로 고정
- 두 번째 비트 : 1이면 나누지 않는다. (MTU보다 크면 보내지 않는다.) 0이면 나눈다.
- 세 번째 비트 : 0이면 더 이상 나눠진 데이터 그램이 없다는 뜻이고 1이면 더 있다는 뜻이다.
flag가 000이라면 더 이상 데이터 그램을 나누지 않는다는 뜻이고 더 이상 나눠진 데이터 그램이 없다는 뜻(마지막 frag)이다.
또한 offset은 8로 나눈다.
'공부 > Network' 카테고리의 다른 글
[Network] DHCP와 NAT (0) | 2023.06.06 |
---|---|
[Network] IP addressing (0) | 2023.06.04 |
[Network] Network layer(네트워크 레이어)와 Router (0) | 2023.05.29 |
[Network] TCP RDT (0) | 2023.04.27 |
[Network] RDT (Reliable Data Transfer protocol) (0) | 2023.04.22 |
댓글