2016-08-07 1 views
1

우리 모두가 완벽하게 알고 있듯이 UDP는 다른 것들과 함께 재전송을 지원하지 않습니다.UDP의 경우 MTU 재전송은 어떻게 작동합니까?

우리는 또한 기본적으로 다음과 같은 방식으로 작동하는 MTU 같은 것을 알고 있습니다. 출발지와 목적지 지점 사이의 경로에있는 네트워크 장치 중 하나가 일정 크기의 패킷을 지원하지 않으면 방금 중단합니다.

TCP의 경우 문제가되지 않습니다. 핸드 셰이크 후 MSS를 항상 알고 MTU (항상 맞습니까?)보다 낮기 때문에 MTU보다 큰 패킷을 보낼 가능성이 없습니다.

그러나 UDP의 경우 어떻게 작동합니까? 이미 말했듯이이 프로토콜에는 재전송이 없으며 MSS와 같은 것은 없습니다. MTU를 초과하여 패킷이 삭제되면 어떻게됩니까?

또는 MTU 특성 (실제로는 UDP 또는 TCP와 같은 전송 계층 프로토콜이 아닌 IP 계층에 속함) 때문에 작동합니까? 따라서 IP 계층은 손실 된 패킷을 더 작은 단위로 재구성하여 다시 전송합니다.

+0

그게 바로 ICMP입니다. MTU로 인해 패킷을 삭제하는 라우터는 보낸 사람에게 ICMP 오류 메시지를 다시 보냅니다. –

+0

@Ron Maupin 그러면 어떻게됩니까? – FrozenHeart

+0

메시지를 무시하거나 MTU를 조정할 수 있습니다. 왜 당신이 MTU에 대해 너무 걱정하는지 모르겠습니다. 혼잡 및 혼잡 방지 메카니즘으로부터 패킷을 잃을 것입니다. 예를 들어 RED (Random Early Detection)는 버퍼가 채워지지 않도록 패킷을 임의로 삭제합니다. 버퍼가 가득 차면 그 안에 들어가는 모든 것이 버려 지므로 TCP에 심각한 문제가 발생할 수 있습니다. –

답변

0

우선 로컬 링크의 MTU 인 로컬 MTU와 로컬 링크의 가장 작은 MTU 인 경로 MTU (PMTU)를 구별해야합니다. 라우터 B가 전달할 필요 크기 (1500)의 패킷을 수신 한 경우

가 가
1500  1480  1500 
A -------- B -------- C -------- D 

단지 1480

가 는 DF 비트가

다음의 로컬 MTU 1500되지만 PMTU은 : 다음의 토폴로지를 고려 이 경우에는 다음 홉의 MTU 인 1480을 사용하여 ICMP 패킷을 보낸 사람에게 보냅니다. 보낸 사람은 패킷 크기를 줄일 수 있습니다.

TCP에서 이것은 네트워크 스택에 의해 투명하게 수행됩니다. UDP에서는 응용 프로그램이이를 처리해야합니다. 이를 수행하는 세 가지 방법이 있습니다.

  1. 항상 충분히 작은 패킷을 보냅니다. 1024는 IPv6보다 항상 안전하고 512는 일반적으로 IPv4보다 안전합니다 (항상 그런 것은 아닙니다).

  2. 연결된 UDP 소켓을 사용하고 패킷 크기를 줄임으로써 EMSGSIZE 오류에 대응하십시오. 또는

  3. 모든 종류의 UDP 소켓을 사용하고 PMTU 보조 데이터를 요청하고 제공된 데이터를 사용하십시오.

기술 (3)이 가장 효율적입니다. IPv6의 경우, Section 11.3 of RFC 3542에 설명되어 있습니다.

+0

576은 IPv4에서 항상 안전합니다. – EJP

+0

답변 해 주셔서 감사합니다. DF 비트가 설정되지 않으면 어떻게됩니까? – FrozenHeart

+0

@EJP 576은 DF 비트가 설정되지 않은 경우 IPv4에서만 안전합니다. 최소 576 개의 MTU가 허용되지만 (최소 68 개) 모든 노드는 576 옥텟 패킷을 재구성 할 수 있어야합니다. FrozenHeart, DF 비트가 설정되어 있지 않으면 라우터 B가 보낸 사람에게 투명하게 패킷을 조각화합니다. 이것은 비효율적이며 현대 응용 프로그램에서 사용해서는 안됩니다. – jch

관련 문제