青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

面對(duì)現(xiàn)實(shí),超越自己
逆水行舟,不進(jìn)則退
posts - 269,comments - 32,trackbacks - 0

Author : Kevin Lynx

主要部分,四次握手:

斷開連接其實(shí)從我的角度看不區(qū)分客戶端和服務(wù)器端,任何一方都可以調(diào)用close(or closesocket)之類
的函數(shù)開始主動(dòng)終止一個(gè)連接。這里先暫時(shí)說(shuō)正常情況。當(dāng)調(diào)用close函數(shù)斷開一個(gè)連接時(shí),主動(dòng)斷開的
一方發(fā)送FIN(finish報(bào)文給對(duì)方。有了之前的經(jīng)驗(yàn),我想你應(yīng)該明白我說(shuō)的FIN報(bào)文時(shí)什么東西。也就是
一個(gè)設(shè)置了FIN標(biāo)志位的報(bào)文段。FIN報(bào)文也可能附加用戶數(shù)據(jù),如果這一方還有數(shù)據(jù)要發(fā)送時(shí),將數(shù)據(jù)附
加到這個(gè)FIN報(bào)文時(shí)完全正常的。之后你會(huì)看到,這種附加報(bào)文還會(huì)有很多,例如ACK報(bào)文。我們所要把握
的原則是,TCP肯定會(huì)力所能及地達(dá)到最大效率,所以你能夠想到的優(yōu)化方法,我想TCP都會(huì)想到。

當(dāng)被動(dòng)關(guān)閉的一方收到FIN報(bào)文時(shí),它會(huì)發(fā)送ACK確認(rèn)報(bào)文(對(duì)于ACK這個(gè)東西你應(yīng)該很熟悉了)。這里有個(gè)
東西要注意,因?yàn)門CP是雙工的,也就是說(shuō),你可以想象一對(duì)TCP連接上有兩條數(shù)據(jù)通路。當(dāng)發(fā)送FIN報(bào)文
時(shí),意思是說(shuō),發(fā)送FIN的一端就不能發(fā)送數(shù)據(jù),也就是關(guān)閉了其中一條數(shù)據(jù)通路。被動(dòng)關(guān)閉的一端發(fā)送
了ACK后,應(yīng)用層通常就會(huì)檢測(cè)到這個(gè)連接即將斷開,然后被動(dòng)斷開的應(yīng)用層調(diào)用close關(guān)閉連接。

我可以告訴你,一旦當(dāng)你調(diào)用close(or closesocket),這一端就會(huì)發(fā)送FIN報(bào)文。也就是說(shuō),現(xiàn)在被動(dòng)
關(guān)閉的一端也發(fā)送FIN給主動(dòng)關(guān)閉端。有時(shí)候,被動(dòng)關(guān)閉端會(huì)將ACK和FIN兩個(gè)報(bào)文合在一起發(fā)送。主動(dòng)
關(guān)閉端收到FIN后也發(fā)送ACK,然后整個(gè)連接關(guān)閉(事實(shí)上還沒(méi)完全關(guān)閉,只是關(guān)閉需要交換的報(bào)文發(fā)送
完畢),四次握手完成。如你所見,因?yàn)楸粍?dòng)關(guān)閉端可能會(huì)將ACK和FIN合到一起發(fā)送,所以這也算不上
嚴(yán)格的四次握手---四個(gè)報(bào)文段。

在前面的文章中,我一直沒(méi)提TCP的狀態(tài)轉(zhuǎn)換。在這里我還是在猶豫是不是該將那張四處通用的圖拿出來(lái),
不過(guò),這里我只給出斷開連接時(shí)的狀態(tài)轉(zhuǎn)換圖,摘自<The TCP/IP Guide>:

 

給出一個(gè)正常關(guān)閉時(shí)的windump信息:

14:00:38.819856 IP cd-zhangmin.1748 > 220.181.37.55.80: F 1:1(0) ack 1 win 65535
14:00:38.863989 IP 220.181.37.55.80 > cd-zhangmin.1748: F 1:1(0) ack 2 win 2920
14:00:38.864412 IP cd-zhangmin.1748 > 220.181.37.55.80: . ack 2 win 65535 

 

補(bǔ)充細(xì)節(jié):

關(guān)于以上的四次握手,我補(bǔ)充下細(xì)節(jié):
1. 默認(rèn)情況下(不改變socket選項(xiàng)),當(dāng)你調(diào)用close( or closesocket,以下說(shuō)close不再重復(fù))時(shí),如果
發(fā)送緩沖中還有數(shù)據(jù),TCP會(huì)繼續(xù)把數(shù)據(jù)發(fā)送完。
2. 發(fā)送了FIN只是表示這端不能繼續(xù)發(fā)送數(shù)據(jù)(應(yīng)用層不能再調(diào)用send發(fā)送),但是還可以接收數(shù)據(jù)。
3. 應(yīng)用層如何知道對(duì)端關(guān)閉?通常,在最簡(jiǎn)單的阻塞模型中,當(dāng)你調(diào)用recv時(shí),如果返回0,則表示對(duì)端
關(guān)閉。在這個(gè)時(shí)候通常的做法就是也調(diào)用close,那么TCP層就發(fā)送FIN,繼續(xù)完成四次握手。如果你不調(diào)用
close,那么對(duì)端就會(huì)處于FIN_WAIT_2狀態(tài),而本端則會(huì)處于CLOSE_WAIT狀態(tài)。這個(gè)可以寫代碼試試。
4. 在很多時(shí)候,TCP連接的斷開都會(huì)由TCP層自動(dòng)進(jìn)行,例如你CTRL+C終止你的程序,TCP連接依然會(huì)正常關(guān)
閉,你可以寫代碼試試。

特別的TIME_WAIT狀態(tài):

從以上TCP連接關(guān)閉的狀態(tài)轉(zhuǎn)換圖可以看出,主動(dòng)關(guān)閉的一方在發(fā)送完對(duì)對(duì)方FIN報(bào)文的確認(rèn)(ACK)報(bào)文后,
會(huì)進(jìn)入TIME_WAIT狀態(tài)。TIME_WAIT狀態(tài)也稱為2MSL狀態(tài)。

什么是2MSL?MSL即Maximum Segment Lifetime,也就是報(bào)文最大生存時(shí)間,引用<TCP/IP詳解>中的話:“
它(MSL)是任何報(bào)文段被丟棄前在網(wǎng)絡(luò)內(nèi)的最長(zhǎng)時(shí)間。”那么,2MSL也就是這個(gè)時(shí)間的2倍。其實(shí)我覺(jué)得沒(méi)
必要把這個(gè)MSL的確切含義搞明白,你所需要明白的是,當(dāng)TCP連接完成四個(gè)報(bào)文段的交換時(shí),主動(dòng)關(guān)閉的
一方將繼續(xù)等待一定時(shí)間(2-4分鐘),即使兩端的應(yīng)用程序結(jié)束。你可以寫代碼試試,然后用netstat查看下。

為什么需要2MSL?根據(jù)<TCP/IP詳解>和<The TCP/IP Guide>中的說(shuō)法,有兩個(gè)原因:
其一,保證發(fā)送的ACK會(huì)成功發(fā)送到對(duì)方,如何保證?我覺(jué)得可能是通過(guò)超時(shí)計(jì)時(shí)器發(fā)送。這個(gè)就很難用
代碼演示了。
其二,報(bào)文可能會(huì)被混淆,意思是說(shuō),其他時(shí)候的連接可能會(huì)被當(dāng)作本次的連接。直接引用<The TCP/IP Guide>
的說(shuō)法:The second is to provide a “buffering period” between the end of this connection
and any subsequent ones. If not for this period, it is possible that packets from different
connections could be mixed, creating confusion.

TIME_WAIT狀態(tài)所帶來(lái)的影響:

當(dāng)某個(gè)連接的一端處于TIME_WAIT狀態(tài)時(shí),該連接將不能再被使用。事實(shí)上,對(duì)于我們比較有現(xiàn)實(shí)意義的
是,這個(gè)端口將不能再被使用。某個(gè)端口處于TIME_WAIT狀態(tài)(其實(shí)應(yīng)該是這個(gè)連接)時(shí),這意味著這個(gè)TCP
連接并沒(méi)有斷開(完全斷開),那么,如果你bind這個(gè)端口,就會(huì)失敗。

對(duì)于服務(wù)器而言,如果服務(wù)器突然crash掉了,那么它將無(wú)法再2MSL內(nèi)重新啟動(dòng),因?yàn)閎ind會(huì)失敗。解決這
個(gè)問(wèn)題的一個(gè)方法就是設(shè)置socket的SO_REUSEADDR選項(xiàng)。這個(gè)選項(xiàng)意味著你可以重用一個(gè)地址。

對(duì)于TIME_WAIT的插曲:

當(dāng)建立一個(gè)TCP連接時(shí),服務(wù)器端會(huì)繼續(xù)用原有端口監(jiān)聽,同時(shí)用這個(gè)端口與客戶端通信。而客戶端默認(rèn)情況
下會(huì)使用一個(gè)隨機(jī)端口與服務(wù)器端的監(jiān)聽端口通信。有時(shí)候,為了服務(wù)器端的安全性,我們需要對(duì)客戶端進(jìn)行
驗(yàn)證,即限定某個(gè)IP某個(gè)特定端口的客戶端。客戶端可以使用bind來(lái)使用特定的端口。

對(duì)于服務(wù)器端,當(dāng)設(shè)置了SO_REUSEADDR選項(xiàng)時(shí),它可以在2MSL內(nèi)啟動(dòng)并listen成功。但是對(duì)于客戶端,當(dāng)使
用bind并設(shè)置SO_REUSEADDR時(shí),如果在2MSL內(nèi)啟動(dòng),雖然bind會(huì)成功,但是在windows平臺(tái)上connect會(huì)失敗。
而在linux上則不存在這個(gè)問(wèn)題。(我的實(shí)驗(yàn)平臺(tái):winxp, ubuntu7.10)

要解決windows平臺(tái)的這個(gè)問(wèn)題,可以設(shè)置SO_LINGER選項(xiàng)。SO_LINGER選項(xiàng)決定調(diào)用close時(shí),TCP的行為。
SO_LINGER涉及到linger結(jié)構(gòu)體,如果設(shè)置結(jié)構(gòu)體中l(wèi)_onoff為非0,l_linger為0,那么調(diào)用close時(shí)TCP連接
會(huì)立刻斷開,TCP不會(huì)將發(fā)送緩沖中未發(fā)送的數(shù)據(jù)發(fā)送,而是立即發(fā)送一個(gè)RST報(bào)文給對(duì)方,這個(gè)時(shí)候TCP連
接就不會(huì)進(jìn)入TIME_WAIT狀態(tài)。

如你所見,這樣做雖然解決了問(wèn)題,但是并不安全。通過(guò)以上方式設(shè)置SO_LINGER狀態(tài),等同于設(shè)置SO_DONTLINGER
狀態(tài)。

斷開連接時(shí)的意外:
這個(gè)算不上斷開連接時(shí)的意外,當(dāng)TCP連接發(fā)生一些物理上的意外情況時(shí),例如網(wǎng)線斷開,linux上的TCP實(shí)現(xiàn)
會(huì)依然認(rèn)為該連接有效,而windows則會(huì)在一定時(shí)間后返回錯(cuò)誤信息。

這似乎可以通過(guò)設(shè)置SO_KEEPALIVE選項(xiàng)來(lái)解決,不過(guò)不知道這個(gè)選項(xiàng)是否對(duì)于所有平臺(tái)都有效。

總結(jié):

個(gè)人感覺(jué),越寫越爛。接下來(lái)會(huì)講到TCP的數(shù)據(jù)發(fā)送,這會(huì)涉及到滑動(dòng)窗口各種定時(shí)器之類的東西。我真誠(chéng)
希望各位能夠多提意見。對(duì)于TCP連接的斷開,我們只要清楚:
1. 在默認(rèn)情況下,調(diào)用close時(shí)TCP會(huì)繼續(xù)將數(shù)據(jù)發(fā)送完畢;
2. TIME_WAIT狀態(tài)會(huì)導(dǎo)致的問(wèn)題;
3. 連接意外斷開時(shí)可能會(huì)出現(xiàn)的問(wèn)題。
4. maybe more...

本文轉(zhuǎn)自:http://m.shnenglu.com/kevinlynx/archive/2008/05/14/49825.html

posted on 2012-09-20 13:00 王海光 閱讀(529) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 網(wǎng)絡(luò)編程
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩一级大片网址| 美女91精品| 国内成+人亚洲| 国产一区 二区 三区一级| 国产精品自拍一区| 国产午夜久久| 亚洲精品乱码久久久久久蜜桃麻豆 | 国产精品国产三级欧美二区| 久久免费精品视频| 美女黄色成人网| 欧美激情精品久久久久| 欧美日韩一区二区视频在线观看| 欧美日韩亚洲一区三区| 国产私拍一区| 亚洲午夜影视影院在线观看| 久久国产精品第一页| 欧美激情精品久久久六区热门| 欧美国产亚洲精品久久久8v| 亚洲三级影院| 麻豆9191精品国产| 欧美日韩视频在线一区二区观看视频| 欧美调教vk| 亚洲国产99| 香蕉国产精品偷在线观看不卡| 裸体丰满少妇做受久久99精品 | 国产精品美女诱惑| 亚洲国产欧美日韩精品| 久久国产日韩欧美| 一区二区三区四区国产| 亚洲一区在线免费观看| 欧美肥婆在线| 老鸭窝毛片一区二区三区| 国产视频综合在线| 先锋a资源在线看亚洲| 亚洲特级毛片| 国产精品久久久久久久久久直播| 91久久久久久久久| 亚洲第一黄色网| 欧美激情一区二区在线| 亚洲国产导航| 亚洲人成绝费网站色www| 欧美gay视频激情| 一区二区三区高清不卡| 中文久久精品| 国产午夜精品理论片a级大结局| 欧美一区二区三区在线| 香蕉视频成人在线观看| 悠悠资源网亚洲青| 亚洲国产成人av| 国产精品亚洲网站| 欧美电影在线观看完整版| 欧美老女人xx| 久久久久久成人| 欧美激情视频一区二区三区在线播放 | 99re6这里只有精品| 亚洲精一区二区三区| 国产精品高精视频免费| 久久阴道视频| 国产精品丝袜白浆摸在线| 国产日韩在线播放| 亚洲第一区中文99精品| 国产精品色午夜在线观看| 蜜臀久久99精品久久久画质超高清 | 久久成人av少妇免费| 欧美成人性网| 欧美不卡高清| 一区二区三区在线高清| 亚洲一区二区在线免费观看| 亚洲国产导航| 麻豆精品一区二区综合av| 欧美一区二区三区视频在线| 欧美激情一二三区| 蜜桃视频一区| 国产欧美日韩精品专区| 99伊人成综合| 亚洲欧美一区二区在线观看| 欧美日产国产成人免费图片| 亚洲国产三级| 中文在线不卡视频| 欧美午夜精品久久久| 亚洲午夜一区二区三区| 午夜日韩av| 国产一区二区在线观看免费播放| 亚洲在线1234| 老牛国产精品一区的观看方式| 国产午夜精品久久| 你懂的视频一区二区| 一区二区冒白浆视频| 久久久久国产一区二区三区四区| 狠狠噜噜久久| 欧美日韩另类字幕中文| 香蕉成人啪国产精品视频综合网| 久久影视精品| 亚洲图片激情小说| 在线精品视频在线观看高清| 免费亚洲一区二区| 亚洲欧美激情视频在线观看一区二区三区 | 亚洲高清视频在线观看| 欧美日韩国产另类不卡| 亚洲尤物在线| 亚洲第一区中文99精品| 欧美在线一级va免费观看| 亚洲精品一区二区三区蜜桃久| 国产精品久久久久久久久动漫| 久久久久久久久久看片| 亚洲小说欧美另类婷婷| 亚洲精品一区二区三区不| 欧美成人情趣视频| 免费观看日韩| 免费日韩成人| 老牛嫩草一区二区三区日本| 羞羞答答国产精品www一本 | 国产一区二区中文| 国产欧美一区二区在线观看| 欧美日韩在线精品一区二区三区| 免费人成网站在线观看欧美高清| 欧美一区二区三区的| 午夜精品亚洲一区二区三区嫩草| 亚洲免费播放| 亚洲一区二区三区精品视频| 亚洲一区二区三区在线看| 一区二区三区视频免费在线观看| 夜夜嗨av一区二区三区四季av| 一区二区久久| 欧美伊人久久| 欧美精品在线播放| 国产精品亚洲一区| 伊人精品成人久久综合软件| 亚洲国产成人久久综合| 99国产精品久久久久久久| 亚洲主播在线观看| 国产区日韩欧美| 欧美激情综合亚洲一二区| 欧美高清视频一区二区| 欧美日韩精品在线| 国内精品一区二区三区| 99亚洲精品| 欧美成人午夜激情视频| 亚洲天堂av在线免费| 蜜臀va亚洲va欧美va天堂| 国产精品日韩欧美一区二区| 在线免费观看日韩欧美| 亚洲综合不卡| 亚洲每日在线| 欧美精品入口| 亚洲精品久久久久久一区二区 | 欧美综合第一页| 亚洲精品中文字| 另类天堂视频在线观看| 国产一区二区你懂的| 销魂美女一区二区三区视频在线| 欧美大片网址| 欧美成人午夜激情在线| 亚洲人成久久| 亚洲国产专区校园欧美| 欧美不卡高清| 一区二区激情视频| 99国产精品国产精品毛片| 欧美区亚洲区| 久久成人国产| 久久深夜福利免费观看| 亚洲国产精品ⅴa在线观看| 欧美福利在线观看| 欧美精品一区二区三区蜜臀| 亚洲日本欧美日韩高观看| 亚洲国产精品久久久久秋霞不卡| 蜜臀av一级做a爰片久久| 亚洲美女av网站| 亚洲专区一二三| 在线观看欧美激情| 一区二区三区蜜桃网| 一区二区三区日韩| 国产精品一区二区视频| 久久久久网址| 欧美大片18| 久久亚洲综合色一区二区三区| 欧美高清在线播放| 久久精品免费播放| 欧美日韩免费高清| 男女av一区三区二区色多| 国产精品乱子久久久久| 日韩视频在线观看免费| 日韩一级在线观看| 国产精品久久久久久久久久免费| 亚洲精品孕妇| 久久国产黑丝| 日韩视频精品| 国产一区二区高清不卡| 免费在线欧美黄色| 亚洲午夜视频| 久久精品夜色噜噜亚洲aⅴ| 久久深夜福利免费观看| 亚洲欧美精品在线观看| 欧美韩日高清| 亚洲日本aⅴ片在线观看香蕉| 亚洲第一福利在线观看| 欧美高清视频| 亚洲午夜电影| 欧美电影电视剧在线观看| 亚洲国产专区校园欧美|