У меня есть сервер, с которого я передаю данные. У нас были некоторые проблемы, которые были связаны с тем фактом, что сервер отправляет кадры большого размера, несмотря на то, что ifconfig
сообщает, что MTU составляет 1500. Как это возможно? Коробка работает под управлением CentOs 5, это происходит через ipv4.
Как я могу сказать серверу, чтобы он прекратил рассылку пакетов размером больше 1500?
Отключение разгрузки большой отправки может исправить это. Я видел 15k и даже 30k пакетов, независимо от MTU.
Если вы захватываете пакеты на сервере, вы можете увидеть, что TCP отправляет сегменты большего размера, чем MTU. Однако пакеты на проводе будут иметь размер только MTU. Вы можете проверить это, захватив на сетевом устройстве (коммутаторе) и т. Д. В качестве альтернативы захват пакетов на удаленном (клиентском) компьютере покажет, что каждый пакет имеет <= MTU.
Такое поведение связано с тем, что при включенном TSO / GSO сегмент TCP разбивается на пакеты размером MTU аппаратным обеспечением NIC. Поскольку tcpdump выполняет захват на программном уровне, он видит сегменты, превышающие MTU, которые отправляются на карту NIC для дальнейшей передачи.
Если вы отключите tso / gso для сетевого адаптера, вы увидите, что все исходящие пакеты будут иметь размер <= MTU (более вероятно, размер pMTU).
Сервер фрагментирует пакеты так, чтобы они были кусками по 1500 байт. Возможно, где-то в сети что-то имеет MTU меньше 1500, что может быть причиной проблемы. Вы можете пинговать другой конец с размером 1500?
ping -s 1500 <ip>
Вы также должны иметь возможность отправлять пакеты большего размера. Если вы, удаленный конец или что-то среднее между ними фильтруете пакеты ICMP, то, скорее всего, он блокирует Обнаружение MTU пакеты.
Вам нужно будет разрешить пакеты ICMP Fragmentation Needed (Type 3, Code 4) через брандмауэр.