为什么我在 HTTP 服务器中看不到 TCP 握手?

为什么我在 HTTP 服务器中看不到 TCP 握手?

当我创建一个简单的 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 握手在哪里?

答案1

我认为您对 SYN 等应该可见的期望是错误的。这些只是 TCP 数据包上的标志,不是实际应用程序负载的一部分。但 netcat 只显示实际负载。要查看 TCP 级别的详细信息,您需要使用数据包捕获工具,如 tcpdump 或 wireshark。

相关内容