는 방법을 찾기 위해 최 UDP 패킷을 보낼 수 있습 없이 조각화하는 방법?

StackOverflow https://stackoverflow.com/questions/900697

  •  23-08-2019
  •  | 
  •  

문제

나는 알아야 할 무엇이 가장 큰 UDP 패킷을 보낼 수 있는 다른 컴퓨터가 없는 조각.

이 크기는 일반적으로 알려진 MTU(최대 전송 단위).가정으로,사이에는 2 대의 컴퓨터가 될 것입니다 많은 라우터 및 모뎀을 가질 수 있는 다른 Mtu.

내가 읽는 TCP 구현에서 윈도우 자동으로 찾아서 최대 MTU 에서 경로.

또한 실험,그리고 나는 것을 발견 최대 MTU 에서 내 컴퓨터를 서버의 57712bytes+헤더가 있습니다.아무것도 위에는 폐기됩니다.내 컴퓨터에서는 LAN,지 않 MTU 있어야 주변에 1500bytes?

도움이 되었습니까?

해결책

다음은 귀하의 질문에 직접 답변하지 않지만 흥미로울 수 있습니다. IP 패킷은 분해/재 조립 될 수 있으므로 언더 링 미디어 (예 : 1500 바이트 이더넷)의 한계보다 큽니다. GRE 및 IPSEC의 IP 파편화, MTU, MSS 및 PMTUD 문제 해결


이 주제에 대한 자세한 내용 :

  • Re : UDP 단편화 UDP 대신 ICMP를 사용하여 MTU를 발견해야한다고 말합니다.
  • 경로 MTU 발견 TCP 연결에는 ICMP를 통한 암시 적 MTU 협상이 포함될 수 있다고합니다.

나는 Windows에서 API를 통해 ICMP를 생성하는 것에 대해 모른다 : 한 번에 그러한 API가 제안되었고, 사람들은 홍수를 생성하여 서비스 거부 기능을 구현하는 소프트웨어를 쉽게 작성할 수 있다고 주장했기 때문에 논란의 여지가 있었다. ICMP 메시지.

아니요, 그랬어요 ~이다 구현 : 예를 들어 참조하십시오 Winsock 프로그래머의 FAQ 예제 : Ping : Raw Sockets Method.

따라서 MTU를 발견하려면 'Fragment Do Fragment'플래그와 함께 Ping 패킷을 생성하십시오.

아마도 이것보다 더 쉬운 API가있을 수도 있습니다. 그러나 나는 당신에게 기본 프로토콜을 이해하기를 바랍니다.

다른 팁

또한 이전의 모든 답변을 인용 클래식:

IPv4 와 IPv6 을 정의 최소 reassembly 버퍼 크기, 최소 데이터그램의 크기는 우리가 보는 모든 구현이 지원해야 합니다.IPv4,이 576 바이트입니다.IPv6 에서 이 이 1,280 바이트입니다.


이 꽤 많은 수단을 제한하려는 귀하의 데이터그램이 크기에서 576 작업하는 경우 당해 공중 인터넷 및 제어만 한쪽의 교환에는 무엇 대부분의 표준 UDP 기반의 프로토콜 않습니다.

또한 PMTU 동적 재산의 경로입니다.이것은 하나의 일 TCP 룬다.당신은 다시 구현을 많이 시퀀싱,타이밍,전송 논리,TCP 를 사용하여 어떤 중요합니다.벤치마크,테스트,프로필,즉 증명 는 TCP 은 당신의 병목 현상,다음을 고려 UDP.

이것은 저에게 흥미로운 주제입니다. 아마도 UDP를 통해 실제 인터넷 주위에 청키 한 UDP 데이터를 전달할 때 일부 실제 결과가 중요 할 수 있으며, 전송 속도 1 패킷이 1 초 동안 최소 2K로 최소 패킷 손실로 데이터가 계속 나타납니다. 이를 통해 문제가 발생하기 시작하지만 정기적으로 고통없이 1600 개 이상의 바이트 패킷을 전달했습니다. 이는 GPRS 모바일 네트워크와 WAN 전세계 WAN을 초과합니다. ~ 1k에서 신호가 안정적이라고 가정하면 (그렇지 않습니다!) 패킷 손실이 낮습니다.

흥미롭게도 홀수 패킷이 아니라 종종 몇 초 동안 패킷이 종종 있습니다. 아마도 VoIP 호출이 때때로 붕괴되는 이유입니다.

귀하의 MTU는 기재, 그러나 실제로 MTU는 기계와 목적지 사이의 경로에서 가장 작은 MTU로갑니다. 둘 다 변수이며 경험적으로 만 결정될 수 있습니다. 여러 가지가 있습니다 RFC 그것을 결정하는 방법을 보여줍니다.

네트워크 하드웨어는 일반적으로 균질하거나 적어도 중앙에서 관리되기 때문에 LAN은 내부적으로 매우 큰 MTU 값을 가질 수 있습니다.

UDP 애플리케이션의 경우 IP 단편화 또는 삭제 된 패킷을 피하려면 엔드 투 엔드 MTU를 직접 처리해야합니다. 모든 애플리케이션에 권장되는 접근 방식은 PMTU를 사용하여 최대 데이터 그램을 선택하거나 데이터 그램을 보내는 데 최선을 다하는 것입니다. <최소 PMTU

https://tools.ietf.org/html/rfc5405#section-3.2

애플리케이션 디자이너에 대한 Unicast UDP 사용 지침 "PMTU를 초과하는 데이터 그램을 보내지 않아야합니다. PMTU를 발견하거나 데이터 그램을 보내야합니다 <최소 PMTU

Windows는 기본 소켓 옵션 인터페이스를 통해 PMTU 정보 설정 및 액세스에 나타납니다.

PMTU Discover가 IP_MTU_DISCOVER을 통해 켜져 있는지 확인하고 IP_MTU를 통해 MTU를 읽을 수 있습니다.

https://docs.microsoft.com/en-us/windows/desktop/winsock/ipproto-ip-socket-options

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top