TCP關(guān)閉問題詳細(xì)介紹
摘要: 三次握手,四次揮手
意思是tcp建立連接時需要三次交互來完成,A發(fā)起連接
A --- SYN --> B A <-- SYN + ACK --- B (1) A --- ACK --> B
而關(guān)閉tcp連接需要四次交互,A發(fā)起關(guān)閉
A --- FIN --> B A <-- ACK --- B (1) A <-- FIN --- B A --- ACK --> B (2)
這里在(1)時B開始處于CLOSE_WAIT狀態(tài),一直到收到ACK后B才轉(zhuǎn)為CLOSED ,而A就處于TIME_WAIT狀態(tài),一直到2MSL(Max Segament Lifetime)才轉(zhuǎn)為CLOSED
為什么需要2MSL才真正轉(zhuǎn)為CLOSED?是因為需要緩沖時間萬一B丟失ACK重發(fā)FIN的話還可以回復(fù)ACK,還有就是2MSL后“迷失”在網(wǎng)絡(luò)上的包全部失效
大量的 TIME_WAIT 和 CLOSE_WAIT 會造成服務(wù)器的連接資源被浪費(fèi)甚至占滿后導(dǎo)致服務(wù)器服務(wù)拒絕,怎么解決?
解決TIME_WAIT
net.ipv4.tcp_tw_recycle = 1 #開啟快速回收,默認(rèn)0 net.ipv4.tcp_tw_reuse = 1 #開啟重用,默認(rèn)0 net.ipv4.tcp_fin_timeout = 30 # 減小fin_timeout,默認(rèn)60,單位s
系統(tǒng)參數(shù)的配置可以解決time_wait,但是close_wait就沒那么簡單了
解決CLOSE_WAIT
一般都是服務(wù)端的代碼問題。
絕大多數(shù)都是客戶端發(fā)起關(guān)閉,這樣可知HTTP服務(wù)器應(yīng)該會有很多TIME_WAIT,不過當(dāng)http使用keep-alive后服務(wù)端會主動斷連。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
解決使用commit提交大文件無法推送到遠(yuǎn)程庫問題及git rebase使用詳解
這篇文章主要介紹了解決使用commit提交大文件無法推送到遠(yuǎn)程庫問題及git rebase使用詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07wkhtmltopdf 最好用Html轉(zhuǎn)pdf的工具
這篇文章主要介紹了wkhtmltopdf 最好用Html轉(zhuǎn)pdf的工具,需要的朋友可以參考下2017-09-09