SAP: 10054: WSAECONNRESET: Connection reset by peer

因爲Connection reset by peer這個錯誤是與網絡/TCP協議相關,

所以對於他的診斷, 無論是java還是.net, 等等都適用.

 

具體到這個例子, 我們是一個sap系統, dev_disp裏面有一條形如下面這樣的log

 

***LOG Q0I=> NiIRead: P=10.50.XXX.XXX:3900; L=10.50.XXX.XXX:XXXXX: recv (10054: WSAECONNRESET: Connection reset by peer) [nixxi.cpp 5087]
*** ERROR => NiIRead: SiRecv failed for hdl 17/sock 2420
(SI_ECONN_BROKEN/10054; I4; ST; P=10.50.XXX.XXX:3900; L=10.50.XXX.XXX:XXXXX) [nixxi.cpp 5087]
*** ERROR => MsINiRead: NiBufReceive failed (NIECONN_BROKEN) [msxxi.c 2829]

*****************************************************************************
*
* LOCATION SAP-Dispatcher XXX on host XXX
* ERROR Reading data from the message server (XXX / 3900)
* failed.
* Please check the trace file of the message server.
*
* TIME Sun Apr 21 11:38:00 2013
* RELEASE 720
* COMPONENT MS (message handling interface, multithreaded)
* VERSION 4
* RC -36
* MODULE msxxi.c
* LINE 2848
* COUNTER 12
*
*****************************************************************************

 

顯然, 出了一個叫做10054: WSAECONNRESET: Connection reset by peer的錯誤.

那麼什麼是Connection reset by peer呢?

簡單的說, 如果兩個地址A和B他們在進行TCP通信, 如果A說他遇到了一個Connection reset by peer的問題, 那麼着意味着, 他收到了一個B發給他的一個叫做RST的控制位. 或者B沒有按照協議中定義的,正常的握手方法結束會話, 而是被強制或者異常終止.

 

那麼什麼時候, 爲了什麼B要給A發一個RST控制字符呢?

簡單的說, 當B認爲自己遇到了一些無法恢復的錯誤時.

具體的話, 可以參照TCP協議標準RFC 793,

 

如果你和我一樣, 有刨根問底的"壞習慣的話", 我還推薦你看下面這兩個鏈接.

這兩個連接中對RST有更詳細的闡述.

他們還解釋了諸如, 爲什麼一個abnormal close(也叫slamming the connection shut)將會導致一個RST?

爲什麼一個連接都被關閉, 或者異常終止了他還會發出RST(實際是TCP stack所爲)?, 等等問題.

RST - tracing @WireShark
Winsock Programmer’s FAQ:  Debugging TCP/IP

 

 既然這是一個tcp的error, 所以, 不僅僅是sap, 對於java,.net也同樣適用,

只要出現了這個錯誤, 如果不是明顯程序的bug, 那麼從網絡方面查查, 總是明智的選擇.

 

關於這個錯誤提示信息, 可以參考這個note:

SAP note 1519484

這個note裏面也有提到, 某些防火牆設置, 也會導致這個錯誤,

比如, 某些防火牆, 我們可以配置, 在檢測到一些連接, 超過一定時間沒有發生通信時,

會對這個連接的雙方做timeout處理, 比如給雙方發一個RST控制位.

這也是爲什麼很多程序都有keepalive的功能與配置.

ps. 我並不是防火牆的專家, 所以更詳細的內容請自行google

但在我調查的範圍, 上述情況並不是防火牆發送RST的唯一原因,

而且不同的防火牆軟件也通常都具備不同的功能,

但是從理論上講, 如果我想拒絕, 阻塞或者中斷一個連接的話, 我都可以發送一個RST控制位.

(這聽起來和防火牆做的事情有點像...)

 

 下面是SCN上面的一些連接(第一個連接, 提問者聲稱通過調整網絡, 基本解決了這個問題):

http://scn.sap.com/message/6467523

http://scn.sap.com/thread/1571790
https://scn.sap.com/thread/1295138

 

下面是關於這個error的其他的一些連接.

同樣, 在第一個連接裏面, 也有人聲稱, 他也通過調整firewall設置(這些設置會影響網絡), 解決了這個問題.

http://www.sapfans.com/forums/viewtopic.php?f=12&t=90143

http://stackoverflow.com/questions/1434451/what-does-connection-reset-by-peer-mean

http://www.saptechies.com/winnt-connection-reset-by-peer/
http://h30499.www3.hp.com/t5/Networking/10054-WSAECONNRESET-Connection-reset-by-peer/td-p/3436931

 

 

發佈了112 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章