Tcp

為什麼我在 HTTP 伺服器中看不到 TCP 握手?

  • February 3, 2020

當我創建一個簡單的 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 或 wireshark 等數據包擷取工具。

引用自:https://serverfault.com/questions/1001504