Первоначально клиент отправляет флаг SYN и устанавливает SEQ 0, поскольку это первое сообщение. Затем сервер видит это сообщение и отвечает сервером ACK, также отправляя шаблон SYN. Каждый раз, когда сервер отправляет SYN-клиент, он должен подтвердить это. На данный момент эта связь между клиентом и сервером установлена.

обновление окна

Либо на стороне клиента, либо на стороне сервера, когда они общаются, они используют размер окна (сколько байтов можно получить до заполнения буфера). Если буфер заполнен, он отправит флаг другой стороне, чтобы больше не отправлять. Когда освободится буферное пространство, обновите окно и скажите, что теперь можно отправить.

Другая сторона вычисляет, что следующее число будет текущим числом + длина этого байта. Глядя на эти последовательности, они могут увидеть, сколько байтов и длину сообщений они передают в этих сообщениях. Когда сервер отправляет сообщение, клиент должен подтвердить его.

Теперь ACK равен 13, потому что текущий = 1, а длина символов равна 12. Теперь отправка завершена.

Чтобы закрыть сервер соединений, установите для флага FIN значение 1. Клиент говорит, что я собираюсь закрыть, затем сервер говорит «ОК», и сервер говорит, что я собираюсь закрыть, затем клиент говорит «ОК».

Теперь связь осуществляется после того, как сервер отправляет ACK обратно клиенту.

Создайте 2 простых клиентских и серверных файла js, которые устанавливают связь между собой.

server.js — сервер работает на порту 42181. Когда клиент подключается, он говорит привет, клиент, а затем отключает его.

client.js — когда вы запускаете клиент, он подключается к порту 42181 на сервере, а когда происходит отключение, он отключается.

И откройте wireshark и отфильтруйте его по tcp.port==42181, потому что у нас есть порт 42181. Когда мы запускаем сервер, в wirehark ничего не происходит. Но когда мы запускаем клиент, wireshark что-то укажет.

Ниже показано, что покажет wireshark.

Первоначально вы можете видеть, что он отправляет пакет SYN, а Seq установлен на 0.

Здесь вы можете увидеть флаги. Вы можете видеть, что Syn установлен на 1.

Во 2-й строке показан обратный трафик, он просто показывает ACK, а также отправляет SYN. Здесь 42181 — это порт сервера, а динамический порт 50121 — для клиента. В 3-й строке показано, что ACK отправляется на сервер.

В дампе TCP вы можете увидеть, что сервер отправляет сообщение клиенту под названием «hello client». После этого клиент отправляет ACK на сервер в строке 18. После этого вы можете увидеть, как сервер завершает соединение в строке 19 по FIN.

Ниже вы можете видеть, что FIN установлен

После этого вы можете увидеть, что клиент подтверждает это в строке 20. После этого в строке 21 клиент отправляет флаг FIN на сервер. И, наконец, в строке 22 сервер отправляет ACK клиенту.

Так происходит трехстороннее рукопожатие TCP.