Интересно, почему мы используем трехстороннее рукопожатие, почему мы просто устанавливаем соединение с двухсторонним рукопожатием.

1
user3137879 3 Янв 2014 в 18:45

2 ответа

Лучший ответ

Из Ответ :

ACK сопровождается порядковыми номерами. RFC довольно четко описывает рукопожатие:

1) A -> B SYN мой порядковый номер X

2) A <- B ACK, ваш порядковый номер - X

3) A <- B SYN мой порядковый номер Y

4) A -> B ACK, ваш порядковый номер - Y

Шаги 2 и 3 объединены в один пакет.

Дело в том, что шаг 4 также используется для перемещения окна TCP.
Включая этот шаг, вы используете обычный протокол в процесс инициализации. По сути, это просто обнуление окон передачи.

Вам не заблокирована отправка данных вместе с шагом 4.

Вы можете отправить данные с вашим первым ACK, если хотите, по сути говоря: «Я получил пакеты до Y, вот некоторые данные».

enter image description here

Как мы видим на изображении выше, соединение на стороне клиента завершается, когда клиент получает ACK от сервера, но соединение на стороне сервера все еще остается в незавершенном состоянии, пока сервер не получит ACK со стороны клиента.

Как сказано в комментарии @EJP, нам нужны два порядковых номера, поскольку общие порядковые номера приводят ко многим несоответствиям.

0
a.m. 5 Янв 2014 в 08:52

«Потому что, если сервер B никогда не получает ответа от клиента A, откуда сервер B знает, что клиент A может« слышать »то, что он говорит?»

http://forums.anandtech.com/showthread.php?t=2000522

0
Adel Bibi 10 Янв 2014 в 22:10