Почему трехстороннее рукопожатие TCP влияет на порядковый номер при подтверждении? - PullRequest
5 голосов
/ 24 июля 2011

Почему трехстороннее рукопожатие TCP изменяет порядковый номер при подтверждении во время первоначального рукопожатия? Как это лучше, чем просто оставить номер подтверждения равным порядковому номеру?

Соединение установлено с

Client sends SYN,A
Server responds with SYN-ACK,A+1,B
Client confirms with ACK,B+1

Как это лучше, чем

Client sends SYN,A
Server responds with SYN-ACK,A,B
Client confirms with ACK,B

1 Ответ

4 голосов
/ 24 июля 2011

Это потому, что поле ACK означает это, когда установлен флаг ACK:

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

Если он не установлен в (начальный порядковый номер + 1), это будет непоследовательно означать как ack'ing SYN (оба флага SYN и ACK должны быть установлены в этом пакете), так и произнесение этого снова ожидает этот порядковый номер (т.е. не получил его).

...