MTU (Maximum Transmission Unit)
1. MTU(Maximum Transmission Unit)이란…
MTU란 TCP/IP네트웍 등과 같이 패킷 또는 프레임 기반의 네트웍에서 전송될 수 있는 최대 크기의 패킷 또는 프레임을 말합니다
한번에 전송할 수 있는 최대 전송량(Byte)인 MTU 값은 매체에 따라 달라집니다.
예를 들어 Ethernet 환경이라면 MTU default 값은 1500 이고 FDDI 인 경우 FDDI는 4000 정도 되고, X.25는 576, Gigabit MTU는 9000 정도 등 매체 특성에 따라 한번에 전송량이 결정됩니다.
2. ADSL에서의 MTU값
ADSL은 PPPOE와 PPPOA를 사용합니다. 외장형모뎀과 PC Lan 카드를 사용하는 형태는 PPPOE(PPP over Ethernet)라고 합니다
PC에서 만들어진 Ethernet frame 이 ADSL serial 구간을 그냥 통과하지 못하기 때문에 이더넷 Frame 안에 PPP frame을 포함해서 전송하기 때문에 1500 보단 작아야 합니다.
참고로 접속프로그램중 Winpoet은 MTU를 1420으로 설정하고 Ethernet 프로그램은 MTU를 1416 정도로 설정합니다.
<일반적인 Ethernt 에서의 TCP/IP 패킷 >
Ethernet Header
|
IP Header
|
TCP Header
|
Data
|
< PPPOE 에서의 TCP/IP 패킷 >
Ethernet Header
|
PPPoE Header
|
IP Header
|
TCP Header
|
Data
|
3. MTU값 계산
MTU는 Ethernet Frame을 제외한 IP datagram 의 최대 크기를 의미합니다.
즉 MTU 가 1500 이라고 할 때 IP Header의 크기 20 byte 와 TCP Header의 크기 20byte를 제외하면 실제 사용자 data는 최대 1460까지 하나의 패킷으로 전송 될 수 있습니다.
Windows 계열에서는 PC의 기본 MTU가 1500으로 설정되어 있습니다. 레지스터리에 특정 값을 적어주지 않으면 자신의 MTU값을 1500으로 설정됩니다. 그러나 Win2000부터 Media의 특성을 인식하여 dynamic하게 MTU를 설정됩니댜.
4. MTU값 조정
Unix, Linux 계열에서는 ifconfig 명령어로 쉽게 변경할 수 있습니다.
예) ifconfig hme0 mtu 1400
ifconfig eth0 mtu 1300
Windows 계열은 레지스터리를 수정하면 되며 OS 버전에 따라 설정값이 달라집니다
w
MSS (Maximum Segment Size)
-> 최대 전송 사이즈를 의미
MSS 를 1000 으로 설정할 경우, 데이터 전송시 최대값 1000 byte 이내에서 데이터를 나누어 전송하게 됩니다.
1500 byte의 데이터 전송시 988 byte 전송 이후 512 byte만 전송
MSS 에서 user data( 12byte ) 를 제외한 데이터 988 byte가 실질적인 데이터 전송 사이즈가 됩니다.
User data ( The 12 byte of user data contain a sequence number that is incremented each time a datagram is sent, a copy of the outgoing TTL,
And the time at which the datagram was sent )
MSS는 Maximum Segment Size의 약어로 TCP상( TCP/UDP 가 아니라 그냥 TCP입니다 )에서의 전송할 수 있는 사용자 데이타의 최대크기입니다.
MSS 값은 기본적으로 설정된 MTU 값에 의해 결정됩니다.
MSS= MTU-(IP header크기) - (TCP header크기)
그러므로 Ethernet 일 경우, MTU 1500에 IP 헤더크기 20byte TCP 헤더 크기 20byte를 제외하면 1460 이 MSS 값으로 됩니다.
TCP로 통신할 때는 통신 양단간에 서로 MSS값을 주고 받습니다.
TCP는 3-way 핸드쉐이킹으로 session을 establish 하며 이 과정 중에 상대방에게 자신의 MSS 값을 알려 주게 됩니다.
< 3-way Hand shaking 과정 >
Client Server
< SYN, MSS=1380 >
( MTU 1420 ) -------------------------------------> ( MTU 1500 )
< SYN,ACK, MSS=1460>
<-------------------------------------
< ACK >
------------------------------------->
위의 그림처럼 Client 의 MTU 가 1420 이고 Server 의 MTU가 1500 라고 가정할때 클라이언트가 초기 TCP 세션을 성립하기 위해 Syn패킷을 서버로 보낼때 TCP Header의 option 필드에 MSS값을 설정하여 서버로 전달합니다.
그러면 서버는 SYN, ACK 를 보내면서 역시 TCP 헤더 옵션에 자신의 MSS 값을 보냅니다. 그러면 세션이 성립되어 패킷을 전달할때 실제 단위 패킷의 사이즈가 1420을 초과하지 않게 패킷을 나누어서 전송하게 됩니다.
서버는 자신의 MTU가 1500 이라고 해서 패킷을 1500 단위로 나누지 않습니다. 만약 패킷을 1500 크기로 보내면 client에서는 자신의 용량을 초과하기 때문에 데이타를 수신할 수 없게 됩니다.