더북(TheBook)

분열 오프셋 필드(13비트): 오프셋을 8바이트 블록 단위로 나타내며, 원래 패킷의 시작 지점부터 따졌을 때 이 조각의 위치를 가리킨다. 각 조각의 숫자는 서로 모두 달라야 한다. 바로 다음에 설명할 분열 플래그의 3비트를 제하고 13비트로 오프셋을 표현해야 하는데, 최대 65,535바이트11까지 오프셋을 가리킬 수 있어야 하므로, 다소 계산하기 복잡하지만 8바이트 블록 단위로 표기한다. 따라서 여기에 적힌 값은 항상 8로 곱해서 사용해야 하며, 결과적으로 8의 배수가 아닌 값은 오프셋으로 지정할 수 없다.

분열 플래그 필드(3비트): 마지막 조각을 제외한 모든 조각에 0x04로 지정한다. 이 숫자를 MF 플래그(more fragments flag)라 하는데, 아직 남은 조각이 더 있다는 뜻이다. 이 플래그가 켜진 패킷을 받은 호스트는 남아있는 다른 조각을 모두 받을 때까지 처리를 미뤄두었다가 다 받은 후에서야 패킷을 다시 조립해 윗단 계층으로 넘겨야 한다. 맨 마지막 조각에는 이 플래그가 필요치 않다. 왜냐하면, 분열 오프셋 필드 값이 0이 아니기 때문이다. 오프셋이 0이 아니므로 굳이 플래그를 쓰지 않아도 분열된 패킷의 일부라는 것을 알 수 있다. 오히려 마지막 조각의 플래그는 항상 꺼져 있어야 하는데, 그래야 원래 패킷에 더 이상 남은 조각이 없다는 걸 수신 측에 알려줄 수 있다.

Note ≣

분열 플래그 필드에는 다른 용도도 있다. IP 패킷의 원 발신자가 이 값을 0x02로 정하면 DF(don’t fragment), 즉 분열 금지 플래그가 된다. 분열 금지는 어떤 상황에서건 패킷을 분열해선 안 된다는 뜻이다. 패킷 크기보다 MTU 크기가 작은 링크로 패킷을 전달하려 하면 IP 모듈은 DF 플래그가 설정된 패킷의 경우 분열하는 대신 그냥 걸러버린다.12

 


 

11  역주 실제로는 0~8191이 되므로 오프셋의 최댓값은 8191×8 = 65528이다.

 

12  역주 RFC 791 명세에 따르면 분열 플래그는 세 개의 비트로 나누어져 하위부터 0번 비트: (항상 0), 1번: DF, 2번: MF 식으로 되어 있다. 이 경우 DF와 MF가 동시에 설정된 0x06 등의 값도 가능하긴 하다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.