標(biāo)題: TCP數(shù)據(jù)流穩(wěn)定性--TCP分片,重組及亂序 [打印本頁(yè)]

作者: 51黑tt    時(shí)間: 2016-3-6 02:14
標(biāo)題: TCP數(shù)據(jù)流穩(wěn)定性--TCP分片,重組及亂序
1、IP分片的情況。IP軟件包有一個(gè)[分片]和[重組]模塊,一個(gè)IP數(shù)據(jù)報(bào)在傳輸中可以被ip軟件包的[分片]模塊分片,在目的接收端B的IP軟件包 的[重組]模塊重新組合。接收端B的IP軟件包如果收到亂序的IP報(bào)文,是不會(huì)把這個(gè)包交付到高層TCP協(xié)議的,直到收到同一個(gè)IP報(bào)文的全部分片。所 以,如果發(fā)送端的FIN被分片,接收端B在收到完整的此IP數(shù)據(jù)報(bào)之前,TCP模塊不會(huì)收到這個(gè)包的任何分片。

2、發(fā)送端A發(fā)送了一個(gè)FIN,這僅代表發(fā)送端A想終止傳輸,并不代表另一端B想終止。這就是說(shuō),終止雙向鏈接需要4次握手?jǐn)嚅_(kāi)(也有3次握手?jǐn)嚅_(kāi),類(lèi)似 3次握手鏈接),比如,發(fā)送端A向發(fā)送端B發(fā)一個(gè)查詢(xún)請(qǐng)求,發(fā)送端A已經(jīng)沒(méi)有更多的數(shù)據(jù)要發(fā)送了,因此可以發(fā)送FIN請(qǐng)求一端斷開(kāi),也稱(chēng)為半斷開(kāi),然后, 另一端B則需要時(shí)間處理請(qǐng)求,再把查詢(xún)結(jié)果返回給A,最后B發(fā)送FIN。
1)首先是A發(fā)送FIN,然后收到來(lái)自B的對(duì)這個(gè)FIN的確認(rèn),此時(shí),發(fā)送端A將不能發(fā)送任何數(shù)據(jù)包,但可以接受B發(fā)來(lái)的數(shù)據(jù)包(這是非常常見(jiàn)的傳輸模式,客戶(hù)端發(fā)完,終止鏈接)。
2)發(fā)送端B仍舊可以繼續(xù)發(fā)送數(shù)據(jù)包,直到高層沒(méi)有更多的數(shù)據(jù),發(fā)送端B發(fā)送FIN,A收到后發(fā)送對(duì)這個(gè)FIN的確認(rèn)。此時(shí),雙方都不能再傳輸任何數(shù)據(jù)了。

3、TCP協(xié)議規(guī)定,對(duì)于收到的亂序報(bào)文并不丟棄,而是緩存下來(lái)(這樣做是為了減少更多的重傳),立即發(fā)送希望接受的報(bào)文確認(rèn)。例如:發(fā)送端A發(fā)送了以下幾個(gè)包:第一個(gè):1001-1100,第二個(gè)1101-1200,第三個(gè)FIN包(序列號(hào)是1201,一個(gè)虛字節(jié))。
1)第二個(gè)包在傳輸?shù)倪^(guò)程中丟失了,接收端收到第三個(gè)包后并不丟棄,而是緩存下來(lái),然后,立即發(fā)送一個(gè)ACK,確認(rèn)號(hào)是1101(這樣做的目的是不必等到發(fā)送端A的第二個(gè)包超時(shí)后重傳,發(fā)送端A收到3個(gè)同樣的ACK后立即重傳,這是快速重傳的概念)。
2)當(dāng)發(fā)送端A收到3個(gè)確認(rèn)號(hào)都是1101或者第二個(gè)包的超時(shí)計(jì)時(shí)器到時(shí)間后,立即重新發(fā)送第二個(gè)包(之所以可以重傳,是因?yàn)門(mén)CP協(xié)議在接收端和發(fā)送端都各自建立了兩個(gè)發(fā)送、接收緩存)。
3)這樣,當(dāng)接收端B收到來(lái)自A的第二個(gè)包后,緩存中的數(shù)據(jù)都是按序的了。
4)對(duì)于按序包,接收端B對(duì)序列號(hào)的最后一個(gè)字節(jié)+1,也就是發(fā)送確認(rèn)號(hào)是1202的ACK包。
5)發(fā)送端A收到確認(rèn)號(hào)是1202后,便不能再發(fā)送任何數(shù)據(jù)了。

TCP 的傳輸機(jī)構(gòu)有多個(gè)定時(shí)器。當(dāng)一個(gè)包發(fā)送時(shí),重發(fā)定時(shí)器開(kāi)始計(jì)數(shù);當(dāng)收到確認(rèn)信號(hào)后,重發(fā)定時(shí)器停止計(jì)數(shù)。如果超過(guò)設(shè)定時(shí)間段還沒(méi)有收到確認(rèn)信號(hào),就 重發(fā)該包。一個(gè)比較棘手的問(wèn)題是如何設(shè)置該時(shí)間段。如果太長(zhǎng),當(dāng)網(wǎng)絡(luò)傳輸錯(cuò)誤增加時(shí)將導(dǎo)致不必要的等待時(shí)間;如果太短,就會(huì)產(chǎn)生過(guò)多的重復(fù)包從而降低網(wǎng)絡(luò) 的反應(yīng)時(shí)間,F(xiàn)代TCP協(xié)議根據(jù)實(shí)際情況對(duì)重發(fā)定時(shí)器進(jìn)行動(dòng)態(tài)設(shè)定。
     不 管重發(fā)過(guò)程執(zhí)行得多么有效,很少的丟失包就能?chē)?yán)重地降低TCP連接的流量。每個(gè)未收到的包或包的片段只會(huì)在重發(fā)定時(shí)器超時(shí)的時(shí)候才會(huì)丟失。在數(shù)據(jù)重發(fā) 時(shí),接收過(guò)程一直在遞送這些重發(fā)的數(shù)據(jù),這樣就使總體的數(shù)據(jù)傳輸陷于停頓,直到丟失的數(shù)據(jù)被取代為止。這些重發(fā)過(guò)程導(dǎo)致基于TCP的連接有時(shí)處于不穩(wěn)定狀 態(tài)。

IP丟包:
1。接受方:在以太網(wǎng)上,服務(wù)端有可能響應(yīng)不過(guò)來(lái)(大量客戶(hù)端有讀寫(xiě)需求),服務(wù)端訪(fǎng)問(wèn)密集,丟棄包在所難免
2。 發(fā)送方:大量客戶(hù)端同時(shí)請(qǐng)求服務(wù)器發(fā)送數(shù)據(jù),并且通告窗口很大,那么服務(wù)器會(huì)很快的把分組送到網(wǎng)卡上,考慮一種比較極端的情況,網(wǎng)絡(luò)中還有大量流量占用帶寬,致使 服務(wù)器不能迅速將數(shù)據(jù)發(fā)送出去,而網(wǎng)卡可以緩存的分組數(shù)是有一定限制的,那么肯定會(huì)有數(shù)據(jù)在未發(fā)送前就被丟棄了!而接收方對(duì)這種情況毫無(wú)所知,不會(huì)更改通 告窗口的大小,即流量控制不會(huì)起作用






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1