time_wait與close_wait

為什么要有TIME_WAIT呢慈俯?

1.可靠地實(shí)現(xiàn)TCP全雙工連接的終止栏尚。
A發(fā)送FIN到B起愈,B收到FIN后發(fā)送ACK到A,然后再發(fā)送FIN到A,A最后發(fā)送ACK到B抬虽,之后進(jìn)入到TIME_WAIT狀態(tài)官觅。如果A到B的ACK丟失了,B沒有接到會(huì)怎樣阐污?這個(gè)時(shí)候A處于TIME_WAIT狀態(tài)休涤,B沒有接到ACK將會(huì)重新發(fā)送FIN,然后A重新發(fā)送ACK笛辟。
2.使得老的重復(fù)分節(jié)在網(wǎng)絡(luò)中消逝功氨。
假設(shè)在IP1的端口1和IP2的端口2之間有一個(gè)TCP連接,我們關(guān)閉這個(gè)連接手幢,過一會(huì)兒重連這個(gè)連接捷凄。需要知道的是TCP不允許已關(guān)閉連接的重復(fù)分節(jié)再出現(xiàn),所以需要TIME_WAIT围来,使得這些重復(fù)分節(jié)徹底消逝跺涤。(TCP中是可靠的服務(wù),當(dāng)數(shù)據(jù)包丟失會(huì)重傳管钳,當(dāng)有數(shù)據(jù)包迷路的情況下钦铁,如果不等待2MSL時(shí),當(dāng)客戶端以同樣地方式重新和服務(wù)建立連接后才漆,上一次迷路的數(shù)據(jù)包這時(shí)可能會(huì)到達(dá)服務(wù)牛曹,這時(shí)會(huì)造成舊包被重新讀取)

image.png

close_wait

close_wait產(chǎn)生的原因是當(dāng)某一端發(fā)送FIN醇滥,本端接收到就進(jìn)入close_wait狀態(tài)黎比,直到本端發(fā)送FIN。
所以說time_wait是主動(dòng)關(guān)閉的一方會(huì)經(jīng)歷的狀態(tài)鸳玩,close_wait是被動(dòng)關(guān)閉一方會(huì)經(jīng)歷的狀態(tài)阅虫。

什么情況下會(huì)產(chǎn)生大量的close_wait呢?

當(dāng)服務(wù)器端fork許多子進(jìn)程不跟,在這些子進(jìn)程中接收/發(fā)送颓帝,父進(jìn)程一直監(jiān)聽新的連接,sockfd套接字計(jì)數(shù)就會(huì)很大窝革,如果客戶端發(fā)送FIN過來购城,服務(wù)器端子進(jìn)程調(diào)用close使sockfd引用計(jì)數(shù)減1(沒有發(fā)送FIN給客戶端),但是不會(huì)關(guān)閉這個(gè)套接字虐译,這個(gè)時(shí)候就進(jìn)入了close_wait狀態(tài)瘪板。
或者是
對(duì)方發(fā)送FIN,我方忙于讀或者寫漆诽,沒有關(guān)閉連接侮攀。

如何避免time_wait?

使用SO_REUSEADDR選項(xiàng)锣枝,
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (const voidvoid )&opt, sizeof(opt));
SO_REUSEADDR允許啟動(dòng)一個(gè)監(jiān)聽服務(wù)器并捆綁其眾所周知的端口,即使以前建立的將該端口用作他們的本地端口的連接仍存在兰英。也就是說
允許某一個(gè)端口復(fù)用撇叁。*

如何避免close_wait?

主要思想是判斷對(duì)方是否關(guān)閉了這個(gè)套接字。

方法1:使用SO_KEEPALIVE套接字選項(xiàng)箭昵。
1税朴、client端連接正常,返回一個(gè)ACK.server端收到ACK后重置計(jì)時(shí)器,在2小時(shí)后在發(fā)送探測(cè).如果2小時(shí)內(nèi)連接上有數(shù)據(jù)傳輸,那么在該時(shí)間的基礎(chǔ)上向后推延2小時(shí)發(fā)送探測(cè)包;
2、客戶端異常關(guān)閉,或網(wǎng)絡(luò)斷開家制。client無(wú)響應(yīng),server收不到ACK,在一定時(shí)間(75秒)后重發(fā)keepalive packet, 并且重發(fā)一定次數(shù)(9次);
3、客戶端曾經(jīng)崩潰,但已經(jīng)重啟.server收到的探測(cè)響應(yīng)是一個(gè)RST,server端終止連接泡一。

方法2:我們也可以自己寫一個(gè)發(fā)送心跳包的線程颤殴,定期發(fā)送心跳包,如果對(duì)方關(guān)閉了套接字鼻忠,則我們會(huì)收到RST涵但。

如果服務(wù)器出了異常,百分之八九十都是下面兩種情況:

1.服務(wù)器保持了大量TIME_WAIT狀態(tài)
2.服務(wù)器保持了大量CLOSE_WAIT狀態(tài)
查看當(dāng)前狀態(tài)的命令: netstat -nat

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末帖蔓,一起剝皮案震驚了整個(gè)濱河市矮瘟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌塑娇,老刑警劉巖澈侠,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異埋酬,居然都是意外死亡哨啃,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門写妥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拳球,“玉大人,你說我怎么就攤上這事珍特∽>” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵扎筒,是天一觀的道長(zhǎng)莱找。 經(jīng)常有香客問我,道長(zhǎng)砸琅,這世上最難降的妖魔是什么宋距? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮症脂,結(jié)果婚禮上谚赎,老公的妹妹穿的比我還像新娘淫僻。我一直安慰自己,他們只是感情好壶唤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布雳灵。 她就那樣靜靜地躺著,像睡著了一般闸盔。 火紅的嫁衣襯著肌膚如雪悯辙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天迎吵,我揣著相機(jī)與錄音躲撰,去河邊找鬼。 笑死击费,一個(gè)胖子當(dāng)著我的面吹牛拢蛋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蔫巩,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼谆棱,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了圆仔?” 一聲冷哼從身側(cè)響起垃瞧,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎坪郭,沒想到半個(gè)月后个从,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡截粗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年信姓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绸罗。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡意推,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出珊蟀,到底是詐尸還是另有隱情菊值,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布育灸,位于F島的核電站腻窒,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏磅崭。R本人自食惡果不足惜儿子,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望砸喻。 院中可真熱鬧柔逼,春花似錦蒋譬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至维咸,卻和暖如春剂买,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背癌蓖。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工瞬哼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人费坊。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓倒槐,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親附井。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容