2013년 11월 27일 수요일

MTU / 패킷 재조립 - 1




MTU란 ?

Maximum Transmission Unit = 최대 전송 단위

즉 MTU란 하나의 패킷이 가질 수 있는 최대 크기를 말한다.

크기를 이렇게 나누어 놓은 이유는 데이터를 쪼개지 않고 하나의 커다란 덩어리로 전송을 하게 된다면
전송 과정 중 데이터에 손실을 입게 될 경우 그 데이터는 쓸모가 없어지기 때문이다.

하지만 데이터를 나누어서 전송을 한다면 손실된 부분만 다시 요청을 하여 그 부분만 다시 전송 받을 수 있으므로 신뢰성 있는 통신을 할 수 있다.


비슷한 예로 우리가 평소에 인도에서 흔히 볼 수 있는 보도블럭을 생각 해 보자.

만일 보도블럭이 나누어져 있지 않고 합쳐져 있다면 파손되었을 경우 전체를 교체해야 하지만
보도블럭이 나누어져 있으면 파손된 부분만 교체를 하면 되기 때문이다.



일단 패킷이 분할되는 크기를 보기 위하여 사진을 첨부하겠다.
< Source = 192.168.0.48 // Destination = 192.168.0.44 >

-l [n] = 전송할 byte 지정
-n [n] = count




Ping 전송시 패킷이 캡쳐된 부분의 패킷 길이를 보면 1514 byte 이다.
저 크기에서 Ethernet header 크기인 14 byte를 빼면 1500 byte가 나오는데, 이 값이 Ethernet 환경에서 기본 MTU 값이다.


근데 위의 스샷에서 Ping 전송시 -l 옵션을 주어 2000 byte를 전송 하였는데 왜 길이가 1514+562 
= 2076 byte 일까?

그 이유는 바로 패킷/프레임에 포장된 헤더 크기 때문이다.


우선 Ethernet 헤더부터 살펴 보겠다.


< Ethernet II Header >

1. Destination MAC address ( 6 byte ) = 송신지의 MAC 주소
2. Source MAC address ( 6 byte ) = 수신지의 MAC 주소
3. Type ( 2 byte ) = 상위 타입 ( 0x0800은 IP /// 0x0806은 ARP 등등...)

이더넷 헤더의 총 크기는 14 Byte 이다.



다음은 IPv4 헤더를 살펴 보겠다.




1. version ( 1 byte ) = IP 헤더에 사용된 IP 버전 정보 
2. Header length ( 1 byte ) = IP 헤더의 길이 
3. Differentiated Services Field ( 1 byte ) = 서비스 유형
4. Total Length ( 2 byte ) = IP 헤더 + 패킷에 포함된 데이터 크기
.
.
.
생략 ( IPv4 헤더를 따로 포스팅 할 예정...)

IPv4 헤더의 Header length 필드의 값이 IP 헤더의 길이를 나타낸다.
총 20 Byte 임을 알 수 있다.


첫번째 패킷에서의 데이터 크기는 1480 byte 임을 알 수 있다.
[ 총 크기(1514) - Ethernet Header(14) - IPv4 Header(20) = 1480 byte]



두번째 패킷도 Ethernet header 크기는 같다. 
하지만 다음 계층의 헤더 정보가 다르므로 한번 살펴보겠다.



[ 총 크기(562) - Ethernet Header(14) - IPv4 Header(20) = 528 byte]
데이터 크기가 528 byte 라는 것을 알 수 있다.

첫번째 패킷의 1480 byte + 두번째 패킷의 528 byte = 2008 byte ???
2008 byte가 나오는 이유는 ICMP 헤더 크기 때문이다.





ICMP 헤더의 크기는 총 8 byte 이므로 ICMP 헤더 크기를 빼주면 데이터 크기가 2000 byte 임을 
알 수 있다.



[출처] MTU / 패킷 재조립 - 1|작성자 육육

댓글 없음:

댓글 쓰기