Кто-нибудь может объяснить, как получатель узнает, принадлежат ли два непоследовательных сегмента TCP одному и тому же пакету? - PullRequest
1 голос
/ 12 сентября 2011

Кто-нибудь может объяснить, как получатель узнает, принадлежат ли два непоследовательных сегмента TCP одному и тому же или разным пакетам? И как он узнает, является ли следующий сегмент последними сегментами в пакете?

Ответы [ 2 ]

2 голосов
/ 12 сентября 2011

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

Возможно ли, что вы ожидаете, что результат подсчета системного вызова read() принимающего приложения будет соответствовать системному вызову write() отправляющего приложения? Если это так, вы будете разочарованы. Потоки TCP являются байтовыми, а не пакетными потоками. Они не сохраняют и не соблюдают границы отправляющих системных вызовов.

1 голос
/ 12 сентября 2011

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

Вы можете посмотреть:
Протокол управления передачей
Интернет-протокол

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...