TCP 3-х сторонний вопрос о рукопожатии - PullRequest
2 голосов
/ 23 февраля 2011

Таким образом, клиент запускает TCP-соединение, отправляя пакет SYN на сервер с помощью команды seq.# X. Затем сервер отвечает SYN + ACK для X + 1.То же самое относится и к пакету FIN, когда принят протокол закрытого соединения.

Так что мой вопрос: почему сервер ACK для X + 1 вместо просто X?Я думал, что пакеты SYN и FIN не совмещают никаких данных.Есть ли другая причина для этого?Я не понимаю, почему сервер будет ACK X + 1 вместо X.

1 Ответ

3 голосов
/ 23 февраля 2011

Отправляемый порядковый номер является следующим ожидаемым порядковым номером.Если он не был увеличен, то в ответе будет указано, что пакет не был принят.Это закончится бесконечным циклом.

SYN - это особый случай, который сам по себе передает информацию.(Он инициализирует полученный счетчик в месте назначения.) ACK будет для следующего ожидаемого байта (SYN + 1).

Счетчик ACK не всегда увеличивается и может увеличиваться более чем на 1. Учитывайте этообмен, где пакет 2 задерживается и поступает вне последовательности.

Received    ACK
  1          2
  3          2
  4          2
  2          5
...