
CONNECTION_RESET如何解決?
開發(fā)過程中經(jīng)常會出現(xiàn)Connection reset問題,包括http調(diào)用,數(shù)據(jù)庫連接等場景。出現(xiàn)Connection reset的原因很多,本文從tcp層面簡單介紹下Connection reset出現(xiàn)的原因,以及在實(shí)際開發(fā)過程中如何排查這類問題。
1、什么是Connection reset
在TCP首部中有6個標(biāo)志位,其中一個標(biāo)志位為RST,用于 復(fù)位 的。無論何時一個報文 段發(fā)往基準(zhǔn)的連接( referenced connection)出現(xiàn)錯誤,TCP都會發(fā)出一個復(fù)位報文段。如果雙方需要繼續(xù)建立連接,那么需要重新進(jìn)行三次握手建立連接。
2、出現(xiàn)RST的原因2.1 RST攻擊、干擾
上面簡單介紹了RST標(biāo)志位的作用,很容易想到這樣一個場景,如果中間網(wǎng)絡(luò)節(jié)點(diǎn)想要破壞一個tcp連接,那么它只要偽造成其中一方發(fā)送RST報文到另一方,即可讓雙方連接失效。
上圖中,三次握手建立了tcp連接,由于是https連接,需要進(jìn)行加密操作。這時,對方發(fā)送RST,雙方并沒有進(jìn)行 四次揮手 ,而是連接直接失效。這時客戶端發(fā)起重拾,重新建立連接,但是很快又被 對方 重置了。和客戶端連接tcp連接以及發(fā)送RST報文的,都不一定是真正的服務(wù)端,而可能是中間節(jié)點(diǎn)。我們使用HTTPS可以避免受到中間人攻擊。對方無法使用中間人攻擊,但是想阻止我們訪問,所以可以通過RST來重置連接。
2.2 請求一個不存在的端口
當(dāng)客戶端訪問服務(wù)端一個沒有監(jiān)聽的端口時,服務(wù)端會發(fā)送RST報文。
如上圖所示,客戶端(192.168.2.192)訪問了服務(wù)端(192.168.2.1)一個未監(jiān)聽的端口(9090),服務(wù)端發(fā)送了RST報文。
2.3 異常終止一個連接
終止一個連接的正常方式是一方發(fā)送 FIN。有時這也稱為有序釋放(orderly release),因?yàn)樵谒信抨?duì)數(shù)據(jù)都已發(fā)送之后才發(fā)送 FIN,正常情況下沒有任何數(shù)據(jù)丟失。但也有可能發(fā)送一個復(fù)位報文段而不是 FIN來中途釋放一個連接。有時稱這為異常釋放 (abortive release)。
上圖,當(dāng)客戶端連接redis后,我們手動關(guān)閉redis服務(wù),redis服務(wù)端會發(fā)送RST來強(qiáng)制終止一個連接??蛻舳送ǔJ盏竭@樣的錯誤:Connection reset by peer,或者:遠(yuǎn)程主機(jī)強(qiáng)迫關(guān)閉了一個現(xiàn)有的連接。
2.4 半打開連接
如果一方已經(jīng)關(guān)閉或異常終止連接而另一方卻還不知道,我們將這樣的TCP連接稱為半打開(Half-Open)的。只要不打算在半打開 連接上傳輸數(shù)據(jù),仍處于連接狀態(tài)的一方就不會檢測另一方已經(jīng)出現(xiàn)異常。
3、排查思路
實(shí)際開發(fā)過程中,前面三個問題比較容易識別和解決。最困難的是最后一種半打開連接,原因往往很難發(fā)現(xiàn)。因?yàn)榫W(wǎng)絡(luò)正常的情況下,都會通過正常關(guān)閉或者2.3的方式來關(guān)閉連接。現(xiàn)在客戶端和服務(wù)端的網(wǎng)絡(luò)非常復(fù)雜,有各種nat,代理,防火墻等設(shè)備,這些中間設(shè)備可能配置了一些安全策略,導(dǎo)致斷開連接而不通知。
通過查詢客戶端日志,定位出現(xiàn)異常的時間。查詢服務(wù)端日志,查詢有無連接斷開日志;查詢連接是否存在;如果不存在,查詢斷開的時間。通過這些可以判斷是不是由于半打開連接導(dǎo)致的問題。半打開連接一般是由于中間設(shè)備或者網(wǎng)絡(luò)問題斷開連接,而客戶端不知道。
解決方案就是找到對應(yīng)的設(shè)備,配置連接,避免長連接斷開。
臨時方案就是,開啟keep-live;減少長連接存活時間;連接異常時進(jìn)行重試。
[超站]友情鏈接:
四季很好,只要有你,文娛排行榜:https://www.yaopaiming.com/
關(guān)注數(shù)據(jù)與安全,洞悉企業(yè)級服務(wù)市場:https://www.ijiandao.com/

隨時掌握互聯(lián)網(wǎng)精彩
- 1 “花兒為什么這樣紅” 7904672
- 2 70萬一針救命藥進(jìn)醫(yī)保 7808429
- 3 用1分錢做“暗號”的食堂阿姨火了 7712492
- 4 去新疆的100個理由 7619069
- 5 霸總要沒了?廣電出手規(guī)范管理短劇 7522207
- 6 小熊電器回應(yīng)養(yǎng)生壺爆炸 7428314
- 7 老人用手機(jī)哄5歲孫子 致1000度近視 7327736
- 8 日本網(wǎng)友贊嘆福建艦:真的太帥了 7237035
- 9 中國今年出了三位A類影后 7141474
- 10 官方回應(yīng)“唐飛機(jī)直播時墜機(jī)身亡” 7046454