Назад | Перейти на главную страницу

Почему я не вижу подтверждения TCP на HTTP-сервере?

Когда я создаю простой HTTP-сервер (сокет, прослушивающий порт), я не вижу фактического установления связи TCP. Это почему? Почему это скрыто от меня?

Например, если я запускаю сервер на порту 9822 следующим образом:

nc -l 9822

Затем я открываю свой веб-браузер и перехожу по этому адресу, я вижу только HTTP-запрос, но не TCP-рукопожатие с ACK, SYN

liga@linux:~$ nc -l 9822
GET / HTTP/1.1
Host: 192.168.1.10:9822
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,lv;q=0.8,tr;q=0.7

Но подождите, а где же TCP-рукопожатие?

Я думаю, у вас неправильные ожидания относительно того, где должен быть виден SYN и т. Д. Это только флаги TCP-пакетов, которые не являются частью фактической полезной нагрузки приложения. Но netcat показывает только фактическую полезную нагрузку. Чтобы увидеть детали уровня TCP, вам нужно использовать инструмент захвата пакетов, например tcpdump или wirehark.