본문 바로가기

Network

패킷분해 #1 한 패킷의 크기(MTU)는 얼마나 될까?

 종종 네트워크 포렌식에서 네트워크 정보를 카빙할 때, 패킷의 크기를 알아야 하는 경우가 있다. 프로토콜에서 데이터 단위를 PDU (Protocol data unit) 라고 하고 각 계층마다 단위는 다르게 불린다.

The Layer 1 (Physical Layer) PDU is the bit or, more generally, symbol
The Layer 2 (Data Link Layer) PDU is the frame
The Layer 3 (Network Layer) PDU is the packet or datagram
The Layer 4 (Transport Layer) PDU is the segment (e.g. TCP segment)

 여기서 이야기하고자 하는 패킷의 크기는 TCP segment의 크기를 의미한다. (※ 일반적으로 DATA를 TCP에 담아 보내기 때문에 세그먼트 크기가 전체 패킷에 미치는 영향이 크기 때문이다.)
 MTU는 Maximum Transmission Unit 의 약자로서 하나의 프레임이나 패킷이 한번에 전송가능한 데이터의 크기이다. 프로토콜에 따라 최대 크기는 달라진다. Path MTU Discovery RFC 

65535  Official maximum MTU
17914  16Mb IBM Token Ring
1500   Ethernet Networks
68      Official minimum MTU

 Ethernet Header IP Header     TCP Header      TCP Segment Ethernet Trailer 
 14byte 20 byte  20 byte  1460 byte   
                                    1500 byte                                

 일반적으로 이더넷을 사용하기 때문에 최대 MTU 사이즈는 1500 바이트 이다. 이것은 TCP, IP 나 어플리케이션에서 가능한 데이터를 의미하며 이더넷의 헤더와 트레일러는 제외한 것이다. 이 1500바이트에서 보통 20바이트씩 각 IP,TCP 헤더를 제외하면  1460바이트이다.

  RFC1323에 정의된 Timestamp 옵션이 사용된다면 TCP 헤더는 12바이트가 더 늘어나며, 남는것은 1448 바이트이다. 점보 프레임 (8kb) 나 토큰링(4kb)를 사용하는 기가비트 이더넷을 이용하는 미디어 데이터가 아니라면 말이다. 그리고 터널링과 같이 특정 기술을 이용하는 경우 페이로드가 1380 바이트로 감소할 수 있다. 그리고 X.25 PDN과 같이 게이트로 다른 네트워크 인프라를 이용하는 경우, 페이로드 사이즈가 줄어들 수 있다. 
 TCP 프로토콜은 SYN 패킷 옵션에 MSS(최대 세그멘트 크기)값을 설정하여 한 패킷당 받을 수 있는 최대 크기를 정한다. (0x0204 0x05b4(1460)) 



TCP 프로토콜을 기준으로 위와같이 살펴보았다. 참고로 UDP 프로토콜은 헤더는 8바이트 밖에 되지 않고, 타임 스탬프나 MSS 옵션이 없다. 

참고) http://networking.ittoolbox.com/documents/maximum-size-for-tcp-data-12321