Как часто IP-пакеты фрагментируются на исходном хосте?
Я знаю, что если полезная нагрузка IP> MTU, то маршрутизаторы обычно фрагментируют IP-пакет. Наконец, все фрагментированные пакеты собираются в месте назначения с использованием полей IP-ID, смещений фрагментов IP и флагов фрагментации. Максимальная длина полезной нагрузки IP составляет 64K. Таким образом, вполне вероятно, что L4 передаст полезную нагрузку 64 КБ. Если протокол L2 является Ethernet, что часто имеет место, то MTU будет около 1600 байтов. Следовательно, IP-пакет будет фрагментирован на самом узле-источнике. Однако быстрый поиск по реализации IP в Linux говорит мне, что в последних ядрах протоколы L4 дружественны к фрагментам, т.е. они пытаются сохранить работу фрагментации для IP, передавая буферы размера, близкого к MTU.
Учитывая эти два факта, мне интересно, как часто IP-пакет фрагментируется на самом узле-источнике. Это происходит иногда / редко / никогда? Кто-нибудь знает, есть ли исключения из правила фрагментации в ядре Linux (т.е. есть ли ситуации, когда протоколы L4 не являются дружественными фрагментам)? Как это обрабатывается в других распространенных ОС, таких как Windows? Вообще как часто IP-пакеты фрагментируются?
1 ответ
Хотя технически не должно быть никаких протоколов, которые бы неправильно обрабатывали фрагментацию IP, есть пара (например, NFS), которые значительно выигрывают от отсутствия фрагментации.
То, как часто вы видите фрагментированные пакеты, во многом зависит от вашей сетевой среды. Инкапсуляция пакетов для VPN, плохо спроектированные или реализованные протоколы UDP и протоколы L1/L2, которые опускают сквозной MTU ниже значений конечной точки, могут вызвать фрагментацию IP.
Большинство современных хостов реализуют PTMUD, который автоматически определяет размер MTU, если не задействованы несовместимые устройства или сверхпараноидальные брандмауэры. В эти дни Ethernet Everywhere я не ожидаю, что они будут особенно распространены в Интернете в целом.