Назад | Перейти на главную страницу

Максимальный размер сегмента UDP

Среда: я пишу клиент-серверное приложение UDP. MTU пути между клиентом и сервером составляет 1500 байтов (между ними есть только беспроводное соединение, поэтому это значение в значительной степени стабильно). Мой системный набор по умолчанию не фрагментирует бит, и как на клиенте, так и на сервере, SO_SENDBUF составляет 16384, а SO_RECVBUF = 87380.

Вопрос: Клиент использует sendto для одновременной отправки 8192 байта на сервер. Я использую Wireshark, чтобы посмотреть, как эти 8192 байта будут отправлены в уменьшенном количестве пакетов, и обнаружил, что каждый пакет содержит не более 1023 байтов данных UDP. Но с учетом пути MTU = 1500, разве я не могу отправлять 1500-20 (IP-заголовок) -8 (UDP-заголовок) = 1472 байта данных в каждом пакете? Когда я делаю то же самое с TCP, результат оказывается тем, чего я ожидал. Каждый пакет TCP может содержать до 1448 байтов, что составляет 1500-20 (IP-заголовок) -32 (TCP-заголовок с опцией временной метки). Мой вопрос: почему UDP не помещает 1472 байта в каждый пакет вместо 1023 байта? Это всего лишь мелочь в реализации? Или я пропустил какие-то системные ограничения?

Примечание: тот же результат может наблюдаться даже тогда, когда я провожу эксперимент на той же машине (с 127.0.0.1 на интерфейсе обратной связи).

Вы просто вычитаете накладные расходы для уровней L4 (UDP) и L3 (IP). Я предполагаю, что накладные расходы в кадре Ethernet (L2) с преамбулой, MAC-адресацией, полем типа и контрольной суммой будут учитывать все остальное?

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