Почему Linux Server отвечает TCP-пакетами больше, чем MSS, запрошенный клиентом - PullRequest
2 голосов
/ 03 ноября 2011

Ну, я вижу странную вещь, которая не соответствует ожиданиям согласно теории TCP. Во время рукопожатия клиент устанавливает MSS (максимальный размер сегмента) 1360 и размер окна 64 КБ, но сервер Linux отправляет TCP-пакеты, содержащие 4 КБ, 7 КБ, некоторые пакеты размером 8 КБ, что превышает 1360, и я ожидал, что быть меньше 1360 байт

Я заметил это, выполнив tcpdump, а затем увидел его в WireShark

Я не ожидал, что Сервер отправит более 1360 байтов на пакет TCP, Я ошибаюсь где-то в своем теоретическом понимании работы TCP?

Ответы [ 3 ]

2 голосов
/ 05 ноября 2011

Прежде всего, как заявлено @fernacolo, не путайте MSS и MTU.

Возможно, generic-segmentation-offload вашего интерфейса включен - для получения дополнительной информации прочитайте здесь .

0 голосов
/ 23 сентября 2014

Если вы захватываете пакеты на сервере, вы можете увидеть, что TCP отправляет сегменты большего размера, чем MTU. Пакеты на проводе, однако, будут иметь размер только MTU. Вы можете проверить это путем захвата на сетевом устройстве (коммутаторе) и т. Д. В качестве альтернативы захват пакетов на удаленном (клиентском) компьютере покажет, что каждый пакет <= MTU. </p>

Такое поведение связано с тем, что при включенном TSO / GSO сегмент TCP разделяется на пакеты размера MTU с помощью оборудования NIC. Так как tcpdump захватывает на программном уровне, он видит сегменты, больше чем MTU, отправляемые на карту NIC для дальнейшей передачи.

Если вы отключите tso / gso для сетевого адаптера, вы увидите, что все исходящие пакеты будут иметь размер <= MTU (более вероятно, размер pMTU). </p>

0 голосов
/ 04 ноября 2011

Проверьте, не путаете ли вы MSS с MTU.Размер пакета ограничен MTU, а не MSS.Полный пакет TCP содержит заголовок MAC, заголовок IP, заголовок TCP, параметры TCP и полезную нагрузку.Таким образом, пакет TCP может быть больше, чем MSS.

...