Pergunta

Eu preciso saber o que o maior pacote UDP que eu posso enviar para outro computador é, sem fragmentação.

Este tamanho é comumente conhecido como o MTU (Maximum Transmission Unit). Supostamente, entre 2 computadores, haverá muitos roteadores e modems que podem ter MTUs diferentes.

Eu li que a implementação TCP no Windows encontra automaticamente o máximo de MTU em um caminho.

Eu também estava experimentando, e eu descobri que o MTU máximo do meu computador para um servidor era 57712 bytes + cabeçalho. Tudo o que acima foi descartado. Meu computador está em uma LAN, não é o MTU suposto ser cerca de 1500 bytes?

Foi útil?

Solução

O seguinte não responder à sua pergunta diretamente, mas você pode achar que é interessante; diz-se que os pacotes IP pode ser desmontado / reagregadas, e, portanto, maior do que o limite para os meios subalterno (por exemplo, 1500 byte Ethernet): Resolve IP fragmentação, MTU, MSS, e Questões PMTUD com GRE e IPSEC


Mais sobre este tema:

Eu não sei sobre a geração de ICMP através de uma API no Windows: uma vez como uma API foi proposto, e foi controversa porque as pessoas argumentaram que tornaria mais fácil para software de gravação que implementos de negação de serviço funcionalidade de geração uma enxurrada de mensagens ICMP.

Não, parece que ele é implementadas: ver, por exemplo Winsock do programador FAQ Exemplos: Ping:. Raw Método Sockets

Assim, para descobrir MTU, gerar pacotes de ping com o 'não fragmentar' bandeira.

Talvez haja uma API mais fácil do que isso, eu não sei; mas eu espero que eu te dei a entender o protocolo subjacente [s].

Outras dicas

Além de todas as respostas anteriores, citando o clássico :

IPv4 e IPv6 definir mínimo remontagem tamanho do buffer , o tamanho mínimo de datagramas que são garantidos qualquer apoio à implementação obrigação. Para IPv4, este é de 576 bytes. IPv6 levanta isso para 1.280 bytes.


Esta praticamente significa que você deseja limitar o seu tamanho datagrama para menos de 576 se você trabalhar internet sobre público e que você controla apenas um lado da bolsa - que é o que a maioria dos protocolos baseados em UDP padrão fazer.
Observe também que PMTU é uma propriedade dinâmica do caminho. Esta é uma das coisas TCP lida com para você. A menos que você está pronto para voltar a implementar lotes de sequenciamento, o tempo ea lógica de retransmissão, use TCP para qualquer rede crítica. De referência, teste, perfil, ou seja, provar que o TCP é o gargalo, só então considerar UDP.

Este é um tema interessante para mim. Talvez alguns resultados práticos possam ser de interesse na entrega de dados UDP robustas em torno da verdadeira internet mundo via UDP, e com uma taxa de transmissão de 1 pacote um segundo, dados continua a transformar-se com o mínimo de perda de pacotes até cerca de 2K. Sobre isso e você começar a correr em problemas, mas regularmente entregamos 1600+ bytes pacotes sem sofrimento - este é através de GPRS redes móveis, bem como mundo WAN de largura. Na ~ 1K assumindo o sinal é estável (não é!), Obtém baixa perda de pacotes.

Curiosamente a sua não o pacote estranho, mas muitas vezes uma tempestade de pacotes por alguns segundos -. O que presumivelmente é por isso chamadas VoIP apenas colapso ocasionalmente

A sua própria MTU está disponível no registro , mas a MTU na prática, está indo para o menor MTU no caminho entre sua máquina e do destino. Sua tanto variável e só pode ser determinada empiricamente. Há uma série de RFCs mostrando como determiná-lo.

LAN pode ter internamente valores muito grandes MTU, uma vez que o hardware de rede geralmente é homogênea ou pelo menos centralmente administrado.

Para aplicações UDP tem de lidar com MTU end-to-end a si mesmo se você quiser evitar a fragmentação IP ou pacotes descartados. A abordagem recomendada para qualquer aplicação é fazer o seu melhor para usar PMTU para escolher o seu datagrama máximo, ou enviar datagramas

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

Diretrizes de Uso Unicast UDP para Aplicação Designers "não deve enviar datagramas que excedem o PMTU, deve descobrir PMTU ou datagramas de envio

Windows parece configurações e acesso a informações PMTU via de TI de opções básicas de tomada de interface:

Você pode ter certeza de PMTU descoberta está em via IP_MTU_DISCOVER, e você pode ler a MTU via IP_MTU.

https://docs.microsoft .com / en-us / janelas / desktop / winsock / ipproto-ip-soquete-opções

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top