日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Linux服务器TIME_WAIT进程的解决与原因

發(fā)布時(shí)間:2023/12/13 综合教程 38 生活家
生活随笔 收集整理的這篇文章主要介紹了 Linux服务器TIME_WAIT进程的解决与原因 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

linux服務(wù)器上tcp有大量time_wait狀態(tài)的解決方法和原因解釋

毫無疑問,TCP中有關(guān)網(wǎng)絡(luò)編程最不容易理解的是它的TIME_WAIT狀態(tài),TIME_WAIT狀態(tài)存在于主動(dòng)關(guān)閉socket連接的一方。

TIME_WAIT狀態(tài)存在的理由:
TCP/IP協(xié)議就是這樣設(shè)計(jì)的,是不可避免的。主要有兩個(gè)原因:
1)可靠地實(shí)現(xiàn)TCP全雙工連接的終止
TCP協(xié)議在關(guān)閉連接的四次握手過程中,最終的ACK是由主動(dòng)關(guān)閉連接的一端(后面統(tǒng)稱A端)發(fā)出的,如果這個(gè)ACK丟失,對方(后面統(tǒng)稱B端)將重發(fā)出最終的FIN,因此A端必須維護(hù)狀態(tài)信息(TIME_WAIT)允許它重發(fā)最終的ACK。如果A端不維持TIME_WAIT狀態(tài),而是處于CLOSED 狀態(tài),那么A端將響應(yīng)RST分節(jié),B端收到后將此分節(jié)解釋成一個(gè)錯(cuò)誤。
因而,要實(shí)現(xiàn)TCP全雙工連接的正常終止,必須處理終止過程中四個(gè)分節(jié)任何一個(gè)分節(jié)的丟失情況,主動(dòng)關(guān)閉連接的A端必須維持TIME_WAIT狀態(tài) 。
2)允許老的重復(fù)分節(jié)在網(wǎng)絡(luò)中消逝
TCP分節(jié)可能由于路由器異常而“迷途”,在迷途期間,TCP發(fā)送端可能因確認(rèn)超時(shí)而重發(fā)這個(gè)分節(jié),迷途的分節(jié)在路由器修復(fù)后也會被送到最終目的地,這個(gè)遲到的迷途分節(jié)到達(dá)時(shí)可能會引起問題。在關(guān)閉“前一個(gè)連接”之后,馬上又重新建立起一個(gè)相同的IP和端口之間的“新連接”,“前一個(gè)連接”的迷途重復(fù)分組在“前一個(gè)連接”終止后到達(dá),而被“新連接”收到了。為了避免這個(gè)情況,TCP協(xié)議不允許處于TIME_WAIT狀態(tài)的連接啟動(dòng)一個(gè)新的可用連接,因?yàn)門IME_WAIT狀態(tài)持續(xù)2MSL,就可以保證當(dāng)成功建立一個(gè)新TCP連接的時(shí)候,來自舊連接重復(fù)分組已經(jīng)在網(wǎng)絡(luò)中消逝。

MSL為最長分節(jié)生命期,任何TCP實(shí)現(xiàn)都必須為MSL選擇一個(gè)值,RFC 1122的建議值是2分鐘,不過Berkeley的實(shí)現(xiàn)傳統(tǒng)上改用30秒這個(gè)值,這意味著TIME_WAIT狀態(tài)的持續(xù)時(shí)間在1分鐘到4分鐘之間。MSL是任何IP數(shù)據(jù)報(bào)能夠在因特網(wǎng)中存活的最長時(shí)間。

在檢查服務(wù)器時(shí),發(fā)現(xiàn)有很多連接超時(shí)情況出現(xiàn),用netstat命令查看,tcp的time_wait狀態(tài)較多,需要進(jìn)行優(yōu)化。
1、 看一下現(xiàn)在time_wait的數(shù)量 netstat -an | grep TIME_WAIT | wc -l
2、發(fā)現(xiàn)系統(tǒng)存在大量TIME_WAIT狀態(tài)的連接,通過調(diào)整內(nèi)核參數(shù)解決,在 /etc/sysctl.conf中加入
net.ipv4.tcp_tw_recycle = 1 (表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認(rèn)為0,表示關(guān)閉)
net.ipv4.tcp_fin_timeout=30 (修改系統(tǒng)默認(rèn)的 TIMEOUT 時(shí)間)

 然后執(zhí)行 /sbin/sysctl -p 讓參數(shù)生效。
3、看看系統(tǒng)的tcp參數(shù)情況
sysctl -a|grep tcp

修改生效后,time_wait數(shù)會明顯下降。
TIME_WAIT狀態(tài)存在的理由:
主動(dòng)關(guān)閉的Socket端會進(jìn)入TIME_WAIT狀態(tài),并且持續(xù)2MSL時(shí)間長度,MSL就是maximum segment lifetime(最大分節(jié)生命期),這是一個(gè)IP數(shù)據(jù)包能在互聯(lián)網(wǎng)上生存的最長時(shí)間,超過這個(gè)時(shí)間將在網(wǎng)絡(luò)中消失。MSL在RFC 1122上建議是2分鐘,而源自berkeley的TCP實(shí)現(xiàn)傳統(tǒng)上使用30秒,因而,TIME_WAIT狀態(tài)一般維持在1-4分鐘。
明明就已經(jīng)主動(dòng)關(guān)閉連接了為啥還要保持資源一段時(shí)間呢?這個(gè)是TCP/IP的設(shè)計(jì)者規(guī)定的,主要出于以下兩個(gè)方面的考慮:
1、防止上一次連接中的包,迷路后重新出現(xiàn),影響新連接(經(jīng)過2MSL,上一次連接中所有的重復(fù)包都會消失)
2、可靠的關(guān)閉TCP連接。在主動(dòng)關(guān) 閉方發(fā)送的最后一個(gè) ack(fin) ,有可能丟失,這時(shí)被動(dòng)方會重新發(fā)fin, 如果這時(shí)主動(dòng)方處于 CLOSED 狀態(tài) ,就會響應(yīng) rst 而不是 ack。所以主動(dòng)方要處于 TIME_WAIT 狀態(tài),而不能是 CLOSED 。另外這么設(shè)計(jì)TIME_WAIT 會定時(shí)的回收資源,并不會占用很大資源的,除非短時(shí)間內(nèi)接受大量請求或者受到攻擊。

參考文章: http://blog.csdn.net/shootyou/article/details/6622226

總結(jié)

以上是生活随笔為你收集整理的Linux服务器TIME_WAIT进程的解决与原因的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。