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 握手在哪裡?
我認為您對 SYN 等應該可見的地方有錯誤的期望。這些只是 TCP 數據包上的標誌,而不是實際應用程序有效負載的一部分。但 netcat 只顯示實際的有效載荷。要查看 TCP 級別的詳細資訊,您需要使用 tcpdump 或 wireshark 等數據包擷取工具。