Почему UDP имеет поле длины в заголовке, а TCP - нет?

Почему UDP имеет поле длины в заголовке, а TCP - нет?

Я предполагаю, что длина сегмента в TCP выводится из заголовка IP, но можно сделать то же самое для дейтаграммы UDP.

2 ответа

В соответствии с Иллюстрированным томом TCP/IP 1 поле длины является избыточным. Это все, что Стивенс говорит по этому вопросу.

Я лично считаю, что это должно было сделать длину заголовка UDP (в битах) делимой на 32:)

Существует 96-битный псевдозаголовок, концептуально префиксированный к заголовку TCP, который уже содержит информацию.

Описание поля контрольной суммы из этого источника дает ответ:

Контрольная сумма: 16 бит

Поле контрольной суммы является 16-битным дополнением к сумме дополнения всех 16-битных слов в заголовке и тексте. Если сегмент содержит нечетное количество заголовков и текстовых октетов для контрольной суммы, последний октет дополняется нулями справа, чтобы сформировать 16-битное слово для целей контрольной суммы. Пэд не передается как часть сегмента. При вычислении контрольной суммы само поле контрольной суммы заменяется нулями.

Контрольная сумма также охватывает 96-битный псевдозаголовок, концептуально префиксированный к заголовку TCP. Этот псевдозаголовок содержит адрес источника, адрес назначения, протокол и длину TCP. Это обеспечивает защиту TCP от ошибочно перенаправленных сегментов. Эта информация передается по интернет-протоколу и передается через интерфейс TCP/Network в аргументах или результатах вызовов TCP по IP.

      +--------+--------+--------+--------+
      |           Source Address          |
      +--------+--------+--------+--------+
      |         Destination Address       |
      +--------+--------+--------+--------+
      |  zero  |  PTCL  |    TCP Length   |
      +--------+--------+--------+--------+

Информация не требуется на уровне TCP, так как TCP является потоковым протоколом.

Просто так изначально был указан UDP. UDP может работать без поля длины в заголовке так же, как TCP.

Как определяется длина каждого сегмента в TCP? Это действительно зависит от конкретной реализации (ОС). В RFC для TCP просто говорится:

Любой протокол более низкого уровня должен будет предоставить поля адреса источника, адреса назначения и протокола, а также способ определения "длины TCP", [...]

Я подумал: поскольку TCP - это протокол, основанный на потоках, нормально, если его сегмент будет фрагментирован. UDP ориентирован на транзакции, если его сообщения фрагментированы на уровне IP, нам нужна его длина для его восстановления.

Извините за мой плохой английский.

Другие вопросы по тегам