
我正在開發一個 C# 應用程序,處理 TCP 套接字。
我有一個伺服器應用程式(赫拉克勒斯)在遠端機器上,試圖保持套接字開啟。
我的機器上有我的應用程序,訂閱該打開的套接字。
我在用著微軟的TCPViewer跟踪正在發生的事情。
幾分鐘後,我看到套接字從已建立狀態變成時間等待狀態,然後套接字連線中斷。
我一直在兩台電腦的事件檢視器中查找所有常規位置(Windows 日誌/應用程式、/安全性、/設定、/系統和/轉發事件)中的事件 ID 4227,但我什麼也沒找到。
我應該怎麼做才能知道哪台機器實際上正在關閉 TCP 套接字以及為什麼?
答案1
我應該怎麼做才能知道哪台機器實際上正在關閉 TCP 套接字
為了找出哪一方關閉了連接,您需要進行資料包擷取。看https://wiki.wireshark.org/TCP-4-times-close.md連接關閉在 Wireshark 中的外觀。發送初始 FIN 的一方是關閉連線的一方。
……為什麼?
光看流量是無法判斷這一點的。連接可能會關閉,因為應用程式層協定期望或允許它這樣做。它可能會因為客戶端或伺服器崩潰而關閉。它可能會因違反協議而被一方關閉,即如果另一方的行為與預期不同......因此,為了找出原因,您需要了解應用程式協議,查看日誌文件,檢查是否正在運行等