본문 바로가기

전공/네트워크

네트워크 계층 - IP에 대한 모든 것 #3. IPv4의 단편화[Fragment]

반응형

앞선 포스팅에서 IPv4의 패킷 구조를 설명하였고, 패킷 내에 "ID, Flags, Offset" 란 이름을 가진 필드가 세 개 존재하는 것을 배웠다. 해당 필드가 존재하는 이유는, 송신자[Sender]가 전송하고자 하는 데이터그램의 크기와 물리적인 링크에서 수용할 수 있는 데이터의 크기가 다르기 때문이다.

네트워크에 존재하는 링크는 각각 마다 해당 링크를 통해 전송할 수 있는 데이터 사이즈가 다르다. 이를 링크의 최대 전송 사이즈[MTU]라고 부른다. 만약 링크가 수용할 수 있는 최대 전송 사이즈는 500Byte인데 보내야 하는 데이터의 크기는 1000Byte라면 해당 데이터 그램을 전송하지 못하는 상황이 온다. 

이를 해결할 수 있는 방법이 단편화[Fragmentation]이다. "데이터가 크면 링크에 맞춰서 짜르자"란 개념이다. 1000Byte의 데이터를 링크에 맞춰 500Byte, 500Byte 로 쪼갠 후 목적지로 전송한다. 그 후 쪼개졌던 두 개의 500Byte를 재결합하여 다시 원래와 같은 1000Byte의 데이터를 만들 수 있다.

단편화를 위해 세 개의 필드들은 다음과 같이 활용된다.

필드 이름 설명
ID 하나의 데이터그램에서 쪼개진 여러 조각들은, 같은 데이터그램으로부터 왔다는 표시를 해줘야 한다. 따라서 ID를 통해서 하나의 데이터그램에서 왔다는 것을 알린다.
Flags '1' 값을 가지면 자신이 마지막 조각이 아니라는 뜻
'0' 값을 가지면 자신이 마지막 조각이라는 뜻
Offset 내가 원래 데이터에서 몇 번째로 시작하는 Byte였는지를 의마한다. 이는 Header가 제거된 Payload 만을 기반으로 한다.

 

예시를 통해서 단편화의 방식과 앞서 언급한 세 개의 필드가 어떻게 활용되는지 알아보자.

예시. 데이터그램의 크기= 4000Byte 이고 MTU= 1500 Byte다. 이때 전송되는 데이터 구조를 살펴보자.

데이터그램의 크기가 4000Byte는 (IP 헤더의 20Byte + Payload 3980 Byte)라고 이해할 수 있다. 이 데이터그램이 최대 1500Byte로 쪼개져야 한다. 그러나 1500Byte로 쪼개진 각 데이터그램에도 "헤더"가 각각 붙어야 한다. 따라서 1500Byte는 (헤더 20바이트 + Payload 1480 바이트)로 구성되어야 한다. 

4000 Byte를 1480 Byte로 쪼갠다면 1480, 1480, 1040 Payload 크기를 가진 데이터그램 세 조각으로 나눌 수 있다. 세 조각으로 나누어진 데이터그램 하나하나를 자세히 살펴보자.

첫 번째 데이터그램의 Length는 1480+20(헤더)가 붙은 1500이 된다. ID는 특정 값인 'X'를 가지며 마지막 조각이 아니기 때문에 Flag의 값은 '1'이 된다. 첫 번째 데이터그램이기 때문에 Offset은 0이다.

두 번째 데이터그램의 Length는 1480+20(헤더)가 붙은 1500이 된다. ID는 특정 값인 'X'를 가지며 마지막 조각이 아니기 때문에 Flag의 값은 '1'이 된다. 첫번째 데이터그램에서 이미 원래 데이터그램인 1480Byte를 전송했다. 두번째 데이터그램의 시작 부분은 1480부터이다. 그러나 표현할 때는 1480이라 표현하지 않고 이를 8로 나눈 수인 1480/8=185로 표현한다. (8로 나누는 이유는 그냥 오프셋 단위가 8이기 때문이다.)

세 번째 데이터그램의 Length는 1040+20(헤더)가 붙은 1060이 된다. ID는 특정 값인 'X'를 가지며 마지막 조각이기 때문에 Flag의 값은 '0'이다. 앞선 데이터그램에서 2960 Byte를 전송했다. 세 번째 데이터그램은 2960Byte를 표현하기 위해 2960/8=370이 된다.

이렇게 세 개의 조각을 받은 수신자는 이를 Offset 순서에 맞춰 재결합하여 원래의 데이터그램으로 복원시킨다.

 

문제를 풀 때, 해당 각각 쪼개지는 데이터그램에 각각 헤더를 붙여야 하기 때문에 MTU-20Byte를 해줘야한다는 사실을 꼭 염두해 둔 후 문제를 풀어나가자.

 

 

 

반응형