왜 UDP는 단편화를 피해야 할까?
TCP는 누락된 패킷 재전송과 패킷 재정렬 메커니즘이 있는 연결지향(stream-oriented) 프로토콜이기 때문에 단편화가 발생하는 경우 성능 저하가 발생할 순 있지만 단편화로 인한 직접적인 패킷 손실은 발생하지 않는다.
반면 UDP는 연결성이 없고(message-oriented) 안정성을 추구하지 않는 프로토콜로 재전송이나 재정렬 메커니즘이 없기 때문에 패킷이 손실되지 않도록 하려면 단편화를 피해야 한다.
Maximum safe UDP payload
RFC 1122 문서 상 IPv4에서 reassemble 가능한 최소 MTU 권고값을 576 byte로 명시하고 있다.
실제로 네트워크상에 최소 규격만을 만족하는 장비가 있을 가능성을 배제할 수는 없고, 하나의 fragment가 누락되면 전체 패킷이 drop되므로 단편화를 피하기 위한 안전한 IPv4 packet(데이터그램)은 576 byte이며,
따라서 Maximum safe UDP payload는 508 byte 이다.
508 = 57 - 60 (Maximum IPv4 header) - 8 (UDP header)
단, 일반적인 경우 IPv4 header는 20 byte이므로 이보다 좀 커도 상관 없다.
일반적으로 2의 거듭제곱으로 떨어지는 512 byte를 채택하는 듯 하다. DNS도 512 byte의 제한을 두고 있다.
MTU와의 차이
https://goziro.com/udp-fragmentation-why-should-you-avoid-it/
https://en.wikipedia.org/wiki/Maximum_transmission_unit
'임베디드 개발 > 펌웨어' 카테고리의 다른 글
CAN Bus Load 계산 (0) | 2023.03.20 |
---|---|
메모리 인터페이스, SDRAM 인터페이스 (0) | 2023.03.20 |
UML State Machine (0) | 2023.02.27 |
터미널 제어문자 ANSI escape code / 터미널에 글자색 배경색 입히기 (0) | 2023.02.20 |
CAN FD 프로토콜 (0) | 2023.02.20 |