Почему фрагментация выполняется по IP, а не по TCP / UDP - PullRequest
2 голосов
/ 24 июня 2009

Я ищу причину, почему фрагментация выполняется на уровне IP, но не для TCP / UDP.

Предположим, что мой кадр выглядит следующим образом | MAC | IP | TCP | Payload | FCS. полный размер, скажем, например: 1600. PathMTU происходит здесь, почему фрагментация реализована на уровне IP - мой вопрос, и почему не реализована на уровне / коде TCP / UDP.

Спасибо заранее.

Ответы [ 5 ]

11 голосов
/ 24 июня 2009

Это именно то, для чего предназначены несколько уровней в стеке TCP / IP и в модели ISO / OSI. TCP / UDP являются транспортными протоколами, и они не должны заботиться о фрагментации - это не их проблема. Уровень IP связан с сетью и имеет дело с фрагментацией, так как размер фрагмента зависит от свойств сети. Слой, который имеет наилучшие условия для решения проблемы, решает ее.

3 голосов
/ 19 августа 2010

Слой-4 (TCP / UDP) входит в изображение только в конечных точках (отправитель / получатель). Уровень 3 (IP) входит в картину на основе скачка.

MTU является свойством ссылки, но фрагментация на основе этого свойства ссылки (MTU) всегда выполняется на уровне IP на маршрутизаторе (прыжок)

Теперь связь между каждым прыжком может иметь разную полосу пропускания, поэтому на каждом прыжке необходимо решить, как переслать пакет в пункт назначения. Поскольку MTU - это максимальный объем данных, который может быть передан на канал, и если он меньше размера пакета, который нужно отправить, нужно разбить его на более мелкие куски, чтобы разместить на ссылке.

Поскольку фрагментация и повторная сборка имеет много недостатков, таких как 1. небольшое увеличение ресурсов процессора и памяти 2. больше накладных расходов на пакет из-за добавления заголовков фрагментов 3. В случае потери одного фрагмента отправитель должен передать весь пакет

Для решения вышеуказанных вопросов, 1. Path MTU Discovery можно использовать. 2. На уровне 4 может использоваться TCP MSS-зажим.

3 голосов
/ 24 июня 2009

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

2 голосов
/ 08 июля 2010

Если фрагментация была выполнена на более высоких уровнях (TCP, UDP и т. Д.), То это привело бы к избыточной реализации фрагментации / повторной сборки (один раз для протокола); если фрагментация была выполнена на более низком уровне (Ethernet, ATM и т. д.), то для этого потребуется фрагментация / повторная сборка, выполняемая на каждом этапе (может быть довольно дорогостоящей) и избыточно реализованная (один раз для протокола канального уровня). Поэтому уровень IP является наиболее эффективным для фрагментации.

0 голосов
/ 21 июня 2010

Фрагментировать TCP имеет меньше смысла, чем фрагментировать UDP. Поскольку TCP обеспечивает надежный механизм сегментации / повторной сборки / повторной передачи, можно просто отправлять меньшие сегменты TCP и избегать всей необходимости фрагментации (именно об этом говорит d3jones).

Однако в UDP фрагментация все еще имеет смысл. Вы можете отправить один сегмент UDP больше по длине, чем MTU. Уровень IP будет фрагментировать его правильно и незаметно. Разработчик приложения не должен определять MTU или что-либо в сети, чтобы кодировать протокол уровня приложения.

...