簡體   English   中英

對等方的TCP連接重置,並且傳輸端點未連接

[英]TCP Connection Reset by peer and Transport End Point is not connected

我們在同一台機器上運行TCP服務器客戶端體系結構,客戶端在127.0.0.1:30008上連接服務器。 我們看到的是服務器將TCP連接重置了一段時間。 我們可以清楚地看到,在tcpdump跟蹤中,RST標志是由服務器發送的。 客戶端代碼在python中,服務器代碼在C中。

  1. 是什么導致服務器發送此RST組件? ,此設置已運行了幾個月,沒有任何問題,因此我們很驚訝地看到現在正在發生什么。

  2. TCP服務器通過另一個UDP端口從其他服務器獲取數據,並通過TCP端口30008傳輸到客戶端,客戶端在while循環中監聽服務器端口。 想知道,UDP的連接不會發生Connection RST問題嗎?

  3. 一段時間后,我們可以看到服務器正在關閉套接字,因此客戶端收到異常“傳輸端點關閉”的信息,這是導致這種情況發生的原因。 客戶與此問題有關系嗎?

我檢查了互聯網以查看解決方案,我只能看到這可能是由於服務器和客戶端之間有一些路由器所致,但就我而言,情況並非如此。

請幫助我弄清楚服務器發生了什么。

編輯-這是示例tcptrace(“ tcpdump -r Actuall_trace.pcap”的輸出)。 tcpdump.log-您可以在文件末尾看到RST標志。 該文件包括一個完整的從頭到尾的通信跟蹤。

謝謝。

您的客戶端localhost.36291正在使用零大小的接受窗口進行響應,這表明服務器localhost.30008無法接收任何數據。

15:52:59.766558 IP localhost.30008 > localhost.36291: Flags [P.], seq 218350:227950, ack 23328, win 768, options [nop,nop,TS val 2017821166 ecr 2017821158], length 9600
15:52:59.767766 IP localhost.36291 > localhost.30008: Flags [P.], seq 23328:23362, ack 227950, win 0, options [nop,nop,TS val 2017821167 ecr 2017821166], length 34

這可能是因為您已經在客戶端中填充了接收緩沖區,並且可能是因為直到清空后才從接收緩沖區中讀取。

在您的python代碼中,當select指示文件描述符上有數據時,您必須從文件描述符中讀取,直到沒有數據返回(清空緩沖區)為止。 將套接字設置為非阻塞,直到讀取EAGAIN / EWOULDBLOCK

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM