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

Скрывает ли MSS TCP несоответствие MTU внутри LAN?

Я пытаюсь понять, как несовпадающие MTU ведут себя в сети.

Предположим, два хоста могут общаться друг с другом через сеть на базе Ethernet. Сеть и хост A настроены для больших кадров, но не включая коммутатор в локальной сети, на котором находится хост B и сам хост B. Насколько я понимаю в отношении TCP, трехстороннее рукопожатие в начале каждого сеанса TCP объявляет MSS каждого соответствующего хоста другому хосту. Учитывая, что хост B будет объявлять 1460-байтовый MSS после вычитания заголовков IP и TCP, и, поскольку они будут использовать меньший из двух объявленных MSS, будет ли любой TCP-диалог между этими двумя хостами работать без проблем?

С другой стороны, поскольку UDP не имеет MSS, будут ли большие нефрагментированные пакеты UDP, отправленные хостом A, отбрасываться хостом B?

TCP обнаруживает MTU пути, чтобы избежать фрагментации, которая может привести к увеличению потерь пакетов. У приложений, использующих UDP, есть два варианта.

Они могут просто разрешить фрагментацию своих дейтаграмм. В этом случае они не будут отброшены, но если какие-либо фрагменты будут отброшены, вся дейтаграмма не будет получена. Это может увеличить уровень потери пакетов.

Они также могут самостоятельно определять MTU пути, установив бит «не фрагментировать» в своих дейтаграммах. Им придется обнаруживать потерю дейтаграммы и обрабатывать возможность изменения MTU пути.

Типичные приложения UDP просто сохраняют свои дейтаграммы ниже 1500 байт и позволяют им фрагментировать при необходимости. Это приведет к отсутствию фрагментации наиболее распространенных ссылок и необходимости определения MTU пути.