Tamanho máximo do segmento UDP

Tamanho máximo do segmento UDP

Ambiente: estou escrevendo um aplicativo cliente-servidor UDP. o caminho MTU entre cliente e servidor é de 1.500 bytes (com apenas um link sem fio entre eles, portanto esse valor é praticamente estável). Meu conjunto de sistema não fragmenta bits por padrão e, tanto no cliente quanto no servidor, SO_SENDBUF é 16384 e SO_RECVBUF = 87380.

Pergunta: O cliente usa sendto para enviar 8.192 bytes ao servidor de uma vez. Eu uso o Wireshark para ver como esses 8.192 bytes serão enviados em muitos pacotes e descubro que cada pacote contém apenas 1.023 bytes de dados UDP no máximo. Mas dado o caminho MTU = 1500, não deveria ser capaz de enviar 1500-20(cabeçalho IP)-8(cabeçalho UDP) = 1472 bytes de dados em cada pacote? Quando faço a mesma coisa com o TCP, o resultado é o que eu esperava. Cada pacote TCP pode conter até 1448 bytes, que é 1500-20 (cabeçalho IP) -32 (cabeçalho TCP com opção de carimbo de data / hora). Minha pergunta é: por que o UDP não coloca 1472 bytes em cada pacote, em vez de 1023 bytes? São apenas pequenos detalhes de implementação? Ou ignorei algumas restrições do sistema?

Observação: O mesmo resultado pode ser observado mesmo quando faço o experimento na mesma máquina (com 127.0.0.1 na interface loopback).

Responder1

Você está apenas deduzindo a sobrecarga das camadas L4 (UDP) e L3 (IP). Suponho que a sobrecarga no quadro Ethernet (L2) com preâmbulo, endereçamento MAC, campo de tipo e soma de verificação seria responsável pelo resto?

http://www.doc.ic.ac.uk/~nd/surprise_97/journal/vol4/mhl/ether01.gif

informação relacionada