Значение байта TCP FIN? - PullRequest
       88

Значение байта TCP FIN?

1 голос
/ 14 апреля 2020

Мой вопрос на самом деле состоит из двух частей:

С точки зрения отправителя,

  1. в дополнение к флагу FIN заголовка TCP, верно ли, что уровень TCP внедряет (или больше напоминает добавление) поскольку он должен находиться в конце потока) искусственный байт в потоке, что означает, что этот байт является частью полезной нагрузки TCP?
  2. если да, каково значение этого байта?

С точки зрения получателя,

и уровень TCP, и приложение должны знать этот флаг / байт FIN. Так верно ли, что уровень TCP смотрит только на флаг FIN без специальной обработки байта в потоке? Как уведомляется приложение? С помощью флага FIN, ИЛИ, с помощью этого специального байта в потоке? Когда приложение уведомляется? Прямо после того, как уровень TCP получает сегмент с флагом FIN, ИЛИ, когда этот сегмент в конечном итоге пузырится в буфере TCP получателя? Если приложение не получает специального уведомления, пока сегмент, который имеет флаг FIN, в конечном итоге не всплывет Буфер TCP означает, что уровень TCP должен каким-то образом пометить буфер, поскольку заголовок TCP уже должен быть удален. Так как же это отметить FIN?

1 Ответ

3 голосов
/ 14 апреля 2020

в дополнение к флагу FIN заголовка TCP, верно ли, что уровень TCP внедряет (или, более того, добавляет, так как он должен быть в конце потока) искусственный байт в потоке, означая, что этот байт является частью полезная нагрузка TCP?

Нет. Фактического введенного байта нет, но только порядковый номер TCP увеличивается, так что становится ясно, что ACK предназначен для FIN, а не для некоторых предыдущих данных.

Это также означает, что при получении FIN никакой специальный байт не помещается в буфер сокета и не доставляется приложению, но этот буфер сокета помечается как выполненный. Чтение приложением в пустом и «готовом» буфере сокета вернет, что в буфере больше нет данных, и никогда не будет, и, таким образом, приложение знает, что узел прекратил отправку (т.е. отключение сокета для записи или закрытие сокета) .

...