본문 바로가기
정보/ITx일상

[IT정보] 최적의 UDP 패킷 크기

by 호군 2011. 7. 22.
반응형
원문 : http://blog.naver.com/gal_yong?Redirect=Log&logNo=20013662600


 UNIX Network Programming Volume 1 Second Edition 한국어판 2.9절 47쪽에 다음과 같은 내용이 있습니다. 참고로 아래 글에서 떠돌이는 datagram을 말합니다;

인용:
IPv4와 IPv6에서 최소 재결합용 버퍼 크기를 정의한다. 이 크기는 모든 구현에서 통용되는 최소 떠돌이 크기이다. IPv4에서 이는 576바이트이고 IPv6에서는 이를 1500바이트로 늘렸다. 예를 들면, IPv4에서 577바이트의 떠돌이를 목적지에서 받을 수 있는지는 알 수가 없다. 그러므로 UDP를 사용하는 많은 IPv4 응용(DNS, RIP, TFTP, BOOTP, SNMP)은 이 크기보다 큰 IP 떠돌이를 만들 수 없도록 되어 있다.

다음은 위의 내용을 뒷받침하는, RFC 791에서 IPv4 header의 total length 부분을 설명하는 부분입니다. 3.1절의 13쪽인데 그 부분만 link가 안 돼서 인용합니다.

인용:
Total Length is the length of the datagram, measured in octets,
including internet header and data. This field allows the length of
a datagram to be up to 65,535 octets. Such long datagrams are
impractical for most hosts and networks. All hosts must be prepared
to accept datagrams of up to 576 octets (whether they arrive whole
or in fragments). It is recommended that hosts only send datagrams
larger than 576 octets if they have assurance that the destination
is prepared to accept the larger datagrams.

The number 576 is selected to allow a reasonable sized data block to
be transmitted in addition to the required header information. For
example, this size allows a data block of 512 octets plus 64 header
octets to fit in a datagram. The maximal internet header is 60
octets, and a typical internet header is 20 octets, allowing a
margin for headers of higher level protocols.


위의 내용을 고려해 볼 때 IPv4에서 사용자가 보내면 좋은, 순수 UDP data의 최대 크기는 다음과 같이 계산할 수 있습니다.
576(모든 host에서 지원되는 datagram의 최대 크기) - 60(IPv4 header의 최대 크기) - 8(UDP header의 크기) = 508 byte. 단, IPv4 header의 일반적인 크기는 20 byte이므로 순수 data의 크기가 좀 더 커도 될 듯합니다.

Packet의 크기가 MTU보다 커지면 속도뿐만 아니라 전송 성공률에도 영향을 주게 됩니다. Packet의 크기가 MTU보다 커지면 커질수록 조각화가 많이 발생합니다. 그리고 조각화된 것 중 하나라도 전송에 실패하면 전체 UDP packet의 전송이 실패합니다. 따라서 packet이 MTU보다 커지면 커질수록 전송 실패 확률도 높아집니다.

반응형