中南大學計算機網(wǎng)絡課件 計算機網(wǎng)絡(第六章 傳輸層)_第1頁
中南大學計算機網(wǎng)絡課件 計算機網(wǎng)絡(第六章 傳輸層)_第2頁
中南大學計算機網(wǎng)絡課件 計算機網(wǎng)絡(第六章 傳輸層)_第3頁
中南大學計算機網(wǎng)絡課件 計算機網(wǎng)絡(第六章 傳輸層)_第4頁
中南大學計算機網(wǎng)絡課件 計算機網(wǎng)絡(第六章 傳輸層)_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

計算機網(wǎng)絡原理第六章傳輸層傳輸層是整個協(xié)議層次結(jié)構(gòu)的核心。傳輸服務傳輸協(xié)議要素傳輸服務提供給高層的服務服務質(zhì)量傳輸服務原語伯克利套接字提供給高層的服務傳輸層的最終目標是向其用戶——一般是指應用層的進程,提供有效、可靠且價格合理的服務。為了達到這一目標,傳輸層利用了網(wǎng)絡層所提供的服務。傳輸實體:傳輸層中完成上述工作的實體。傳輸實體可能在操作系統(tǒng)內(nèi)核中,或在一個單獨的用戶進程內(nèi),也可能包含在網(wǎng)絡應用的程序庫中,或是位于網(wǎng)絡接口卡上。網(wǎng)絡層、傳輸層、應用層的邏輯關系在網(wǎng)絡層,有兩種網(wǎng)絡服務:面向連接、無連接在傳輸層,也有兩種服務:面向連接的傳輸服務,無連接的傳輸服務兩層的面向連接服務在很多方面類似:都包括三個階段:建立連接、數(shù)據(jù)傳輸、釋放連接尋址和流量控制方式也類似。兩層的無連接服務也類似。為什么要區(qū)分這兩層?由于用戶無法對子網(wǎng)加以控制,因此他們便不能通過換用更好的路由器或增強數(shù)據(jù)鏈路層的糾錯能力來解決網(wǎng)絡層服務質(zhì)量低劣問題。有了傳輸層,用于各種網(wǎng)絡的應用程序便能采用一個標準的原語集來編寫,而不必擔心不同的子網(wǎng)接口和不可靠的數(shù)據(jù)傳輸。傳輸層起著將子網(wǎng)的技術(shù)、設計和各種缺陷與上層相隔離的關鍵作用。服務質(zhì)量從另一個角度來看,可以將傳輸層的主要功能看作是增強網(wǎng)絡層提供的服務質(zhì)量若網(wǎng)絡服務很完備,則傳輸層的工作就很容易若網(wǎng)絡服務很差,則傳輸層必須彌補傳輸用戶的要求與網(wǎng)絡層提供的服務之間的差別。傳輸服務允許用戶在建立連接時對各種服務參數(shù)指定希望的、可接受的最低限度的值。傳輸層根據(jù)網(wǎng)絡服務的種類或它能夠獲得的服務來檢查這些參數(shù),決定能否提供所要求的服務。傳輸層服務質(zhì)量的典型參數(shù)連接建立延時:從傳輸服務用戶要求建立連接到收到連接確認之間所經(jīng)歷的時間。包括遠端傳輸實體的處理時間。連接建立失敗的概率:在最大連接建立延時時間內(nèi)連接未能建立的可能性。吞吐率:每秒傳輸?shù)挠脩魯?shù)據(jù)的字節(jié)數(shù)。傳輸延時:從源端機器傳輸用戶發(fā)送報文開始到目的機器傳輸用戶接收到報文為止所經(jīng)歷的時間。殘余誤碼率:用于測量丟失或錯亂報文數(shù)占整個發(fā)送的報文數(shù)的百分比。(安全)保護:為傳輸用戶提供了一種方法,讓傳輸層提供保護,以防止未經(jīng)授權(quán)的第三方讀取或修改數(shù)據(jù)。優(yōu)先級:為傳輸用戶提供了一種用以表明哪些連接更為重要的方法,當發(fā)生擁塞事件時,確保高優(yōu)先級的連接較低優(yōu)先級的連接先獲得服務。恢復功能:給出了當出現(xiàn)內(nèi)部問題或擁塞情況下,傳輸層本身自發(fā)終止連接的可能性。服務質(zhì)量參數(shù)是傳輸用戶在請求建立連接時設定的。表明了希望值和最小可接受的值。在某些情況下,傳輸層通過檢查服務質(zhì)量參數(shù)可以發(fā)現(xiàn)其中某些值是無法達到的,這時,傳輸層甚至不去與目的機器連接,便直接通知傳輸用戶連接請求失敗。選項協(xié)商:在遠端機器不能處理源機器建議的值,但可以處理高于最小可接受值的值時,就可進行協(xié)商,這一過程稱選項協(xié)商。傳輸服務原語傳輸服務原語允許傳輸用戶(如應用程序)訪問傳輸服務。每種傳輸服務均有各自的訪問原語。雖然傳輸服務與網(wǎng)絡服務類似,但也存在一些顯著差別:網(wǎng)絡服務傾向于將實際網(wǎng)絡提供的服務模型化。由于網(wǎng)絡可能會丟失數(shù)據(jù)分組,所以網(wǎng)絡服務一般不太可靠。相反,面向連接的傳輸服務則是可靠的。雖然實際的網(wǎng)絡傳輸可能存在差錯,但在不可靠的網(wǎng)絡之上提供可靠的服務正是傳輸層要實現(xiàn)的目標。另一方面,傳輸層提供的服務也可能不可靠,但這種情況發(fā)生的概率很小。網(wǎng)絡層與傳輸層的另一區(qū)別:服務對象不同網(wǎng)絡服務只用于傳輸實體,用戶或程序很少能看到網(wǎng)絡服務,但可以看到傳輸原語。一個實例:一臺服務器與多臺遠程客戶的應用例子。首先,服務器執(zhí)行一條偵聽(LESTEN)原語,一般地是通過調(diào)用一個庫例程,從而引發(fā)一系統(tǒng)調(diào)用以阻塞服務器直至一客戶服務請求出現(xiàn)。當一客戶試圖與服務器對話時,它便執(zhí)行一條連接(CONNECT)原語。傳輸實體在執(zhí)行這條原語時要阻塞該客戶并向服務器發(fā)送一個數(shù)據(jù)分組。客戶的連接請求TPDU被傳送到服務器。當該TPDU到達后,傳輸實體檢查服務器是否阻塞于偵聽狀態(tài),若是,則喚醒服務器并向發(fā)出連接請求的客戶回送一個接受連接TPDU;當該TPDU到達后,客戶被喚醒,連接即告建立。連接建立后,就可用SEND,RECEIVE原語交換數(shù)據(jù)。連接的釋放:非對稱,對稱非對稱釋放:任何一方均可執(zhí)行DISCONNECT原語,向?qū)Ψ絺鬏攲嶓w發(fā)送釋放連接的TPDU,一旦該TPDU到達,連接即被釋放。對稱釋放:連接的每一方單獨關閉,相互獨立。當一方執(zhí)行了DISCONNECT后,意味著它不再發(fā)送數(shù)據(jù),但仍能接收數(shù)據(jù)。只有當連接的雙方均執(zhí)行了DISCONNECT原語時,才能釋放連接。伯克利套接字套接字程序設計的例子(客戶端)

p415~419#defineSERVER_PORT12345#defineBUF_SIZE4096intmain(intargc,char**argv){intc,s,bytes;charbuf[BUF_SIZE];structhostent*h;/*infoaboutserver*/structsockaddr_inchannel;/*holdsIP

address*/if(argc!=3)fatal(“Usage:clientserver-namefile-name”);h=gethostbyname(argv[1]);/*lookup

host’sIPaddress*/if(!h)fatal(“gethostbynamefailed”);

s=socket(“PF_INET,SOCK_STREAM,IPPROTO_TCP”);if(s<0)fatal(“socket”);memset(&channel,0,sizeof(channel));channel.sin_family=AF_INET;memcpy(&channel.sin_addr.s_addr,h->h_addr,h->h_length);channel.sin_port=htons(SERVER_PORT);c=connect(s,(structsockaddr*)&channel,sizeof(channel));if(c<0)fatal(“connectfailed”);/*Connectionisnowestablished.Sendfilenameincluding0bybyteatend.*/write(s,argv[2],strlen(argv[2]+1));while(1){bytes=read(s,buf,BUF_SIZE);

/*readfromsocket*/if(bytes<=0)exit(0);

/*checkforendoffile*/write(1,buf,bytes);

/*writetostandardoutput*/}}套接字程序設計的例子(服務器端)(1)#defineQUEUE_SIZE10intmain(intargc,char*argv[]){ints,b,l,fd,sa,bytes,on=1;charbuf[BUF_SIZE];structsockaddr_inchannel;memset(&channel,0,sizeof(channel));channel.sin_family=AF_INET;channel.sin_addr.s_addr=htonl(INADDR_ANY);channel.sin_port=htons(SERVER_PORT);s=socket(“AF_INET,SOCK_STREAM,IPPROTO_TCP”);if(s<0)fatal(“socketfailed”);setsockopt(s,SOL_SOCKET,SO_REUSEADDR,(char*)&on,sizeof(on));b=bind(s,(structsockaddr*)&channel,sizeof(channel));if(b<0)fatal(“bindfailed”);套接字程序設計的例子(服務器端)(2)

l=listen(s,QUEUE_SIZE);if(l<0)fatal(“l(fā)istenfailed”);while(1){sa=accept(s,0,0);if(sa<0)fatal(“acceptfailed”);read(sa,buf,BUF_SIZE);/*readfilenamefromsocket*/fd=open(buf,O_RDONLY);/*openthefiletobesentback*/if(fd<0)fatal(“openfailed”);while(1){bytes=read(fd,buf,BUF_SIZE);/*readfromfile*/if(bytes<=0)break;/*checkforendoffile*/write(sa,buf,bytes);/*writebytestosocket*/}close(fd);}close(sa);}傳輸協(xié)議要素傳輸服務是通過建立連接的兩個傳輸實體之間所用的傳輸協(xié)議來實現(xiàn)的。在某些方面,傳輸協(xié)議類似于數(shù)據(jù)鏈路層協(xié)議。兩者都必須解決差錯控制、分組順序、流量控制等問題。但兩者也存在顯著的差異:主要由協(xié)議運行的環(huán)境造成的。在鏈路層,兩個路由器通過物理通道直接通信;而在傳輸層,這個物理通道由整個子網(wǎng)所取代。首先,在數(shù)據(jù)鏈路層,不必為一個路由器指明它要與哪個路由器通話,而在傳輸層則需要顯示指出。其次,在數(shù)據(jù)鏈路層,建立連接的過程很簡單,而在傳輸層,初始連接的建立要復雜得多。再次,子網(wǎng)的存儲能力。數(shù)量上的差別:在兩層中都需要有數(shù)據(jù)緩沖和流量控制,但在傳輸層中出現(xiàn)的大量的、動態(tài)變化的連接要求可能需要使用與在數(shù)據(jù)鏈路層中不同的處理方法。尋址當一個應用程序希望與一個遠程應用程序建立連接時,必須指定與哪個應用程序相連,一般采用的方法是定義進程可以偵聽連接請求的傳輸?shù)刂?。在因特網(wǎng)中,這些端點是(IP地址,本地端口)對。在傳輸層,中性術(shù)語:傳輸服務訪問點TSAP在網(wǎng)絡層,中性術(shù)語:NSAP,IP地址就是NSAP在因特網(wǎng)中的例子。建立連接初看起來,一個傳輸實體似乎只需向目的機器發(fā)送一個連接請求,并等待對方接受連接的應答就足夠了,但當網(wǎng)絡可能丟失、存儲、出現(xiàn)重復分組時,問題會變得復雜。問題會變得復雜的例子P378問題的關鍵是由于子網(wǎng)中存在著延時的重復分組。解決的方法:1、廢棄使用過的傳輸?shù)刂贰?、給每個連接分配一個連接標識符。三次握手的方法三次握手主機1選擇一個序號X并向主機2發(fā)送一包含了該序號的連接請求TPDU;接著,主機2回應一個接受連接TPDU,確認X并聲明自己所選用的初始序號Y;最后,主機1在其發(fā)送的第一個數(shù)據(jù)TPDU中確認主機2所選擇的初始序號。第一個TPDU是來自于一個已經(jīng)釋放的連接的延時重復的連接請求,該TPDU在主機1毫不知曉的情況下到達主機2。主機2通過向主機1發(fā)送一個接受連接TPDU來響應該TPDU,而該接受連接TPDU的真正目的是要證實主機1確實試圖建立一個新的連接。當主機1拒絕接受主機2時,主機2便明白是重復分組。主機2收到了一個延時的CR和一個對ACC的確認并做了確認應答。主機2已經(jīng)建議使用Y作為從主機2到主機1進行數(shù)據(jù)傳輸?shù)某跏夹蛱枺虼酥鳈C2清楚以后不會再出現(xiàn)有序號Y或?qū)進行確認的TPDU。當?shù)诙€延時的TPDU到達主機2時,主機2根據(jù)它應確認的是序號Z而不是Y知道這是一個過時的重復TPDU。釋放連接終止連接有兩種方式:對稱、非對稱非對稱釋放很突然,因而可能導致丟失數(shù)據(jù)當連接建立后,主機1發(fā)送了一個數(shù)據(jù)TPDU并正確抵達主機2,接著,主機1發(fā)送了另一個數(shù)據(jù)TPDU,這次很不幸,主機2在收到第二個TPDU之前先發(fā)出了DISCONNECT,結(jié)果連接被釋放,數(shù)據(jù)被丟失。流量控制和緩沖策略在考察了連接的建立及釋放之后,接下來討論連接在使用時是如何管理的。首先要討論的一個關鍵性問題是流量控制。傳輸層中的流量控制問題在某些方面與數(shù)據(jù)鏈路層相同,但在另外一些方面有區(qū)別?;鞠嗨浦帲壕璨捎没瑒哟翱诨蚱渌麢C制。主要區(qū)別:路由器通常只有相對較少的連接線路,而主機則可以有很多個連接。這一區(qū)別決定了不可能在傳輸層中采用數(shù)據(jù)鏈路層中實施的緩沖策略。在第3章的數(shù)據(jù)鏈路層協(xié)議中,各幀在發(fā)送端路由器和接收端路由器中被緩沖起來。例如,在協(xié)議6中,發(fā)送方和接收方都需要為每條連接線預留MaxSeq+1個緩沖區(qū),其中一半用于輸入,一半用于輸出。對于一臺最多連接數(shù)目為64,序號長4比特的主機,采用這種協(xié)議需要1024個緩沖區(qū)。在數(shù)據(jù)鏈路層,發(fā)送方必須要將發(fā)出的幀暫時存起來,因為這些幀有可能重發(fā)。若子網(wǎng)提供數(shù)據(jù)報服務,發(fā)送方的傳輸實體也必須對數(shù)據(jù)進行緩存。若接收方知道發(fā)送方暫存了所有未被確認的TPDU,那么接收方可以根據(jù)需要,或為特定的連接預留一定數(shù)目的緩沖區(qū),或不預留。舉例接收方可以建立一個緩沖池供所有連接共享。當一個TPDU到達后,便動態(tài)申請一個新的緩沖區(qū)。若申請到了,該TPDU便被接受;否則將其丟棄。因為發(fā)送方隨時準備重發(fā)被子網(wǎng)丟棄的TPDU,所以接收方丟棄TPDU不會造成任何危害,僅僅是浪費了一些資源。發(fā)送方不斷重發(fā)數(shù)據(jù)直到它們收到確認為止。若網(wǎng)絡服務不可靠,則發(fā)送方必須像鏈路層一樣緩存所發(fā)送的TPDU。在可靠的網(wǎng)絡服務下,可采取其他的折衷方案。若發(fā)送方知道接收方總是有緩存空間時,則它便無須再保存所發(fā)送的TPDU的備份。若接收方不能保證對每個到達的TPDU均予以接受,則發(fā)送方無論如何都得保存所發(fā)出的TPDU。在后一種情況下,發(fā)送方不能相信網(wǎng)絡層的確認信息,因為該確認只是表明TPDU到達了目的地,而不表明它被接受了。流控和緩存(FlowControlandBuffering)緩存:由于網(wǎng)絡層服務是不可靠的,傳輸層實體必須緩存所有連接發(fā)出的TPDU,而且為每個連接單獨做緩存,以便用于錯誤情況下的重傳。接收方的傳輸層實體既可以做也可以不做緩存。緩存區(qū)的設計有三種。流控:傳輸層利用可變滑動窗口協(xié)議來實現(xiàn)流控。所謂可變滑動窗口協(xié)議,是指發(fā)送方的發(fā)送窗口大小是由接收方根據(jù)自己的實際緩存情況給出的。為了避免控制TPDU丟失導致死鎖,主機應該周期性的發(fā)送TPDU。多路復用在連接、虛電路及物理鏈路上,多路復用幾組對話的方法在網(wǎng)絡結(jié)構(gòu)的許多層上都有一定的作用。在傳輸層中對多路復用技術(shù)的需要表現(xiàn)在很多方面。例如,子網(wǎng)內(nèi)部使用虛電路的網(wǎng)絡中,每個接通的連接在連接的整個階段均需占據(jù)路由器中的一些表空間。若緩沖區(qū)是被分配給每個路由器中的虛電路的,則登陸到遠程機器上的用戶離開終端去做別的事時,他仍然在耗費著昂貴的資源。為減輕上述資源浪費,使不同的傳輸連接復用到同一網(wǎng)絡連接上的技術(shù)便很有吸引力。這種形式的多路復用成為向上多路復用。P390;新P434若用戶需要高帶寬的連接時,可采用向下多路復用。若子網(wǎng)需要n位序號作為一個滑動窗口的流量控制,則當有2n-1個分組未被確認,用戶就必須停止發(fā)送,等待這些分組到達遠端主機并得到確認。若物理連接是通過衛(wèi)星相連,則用戶便被嚴格限制在每540ms傳送2n-1個分組的速率上。例如,當n=8,并且分組大小為128字節(jié)時,可用帶寬大約是484kb/s,即使物理通道帶寬比它高出100倍,也是枉然。若向下復用K條網(wǎng)絡連接,則有效帶寬將增加K倍。因特網(wǎng)的傳輸層UDPUDP計算檢驗和的方法和計算IP數(shù)據(jù)報首部檢驗和的方法相似。在發(fā)送端,首先是先將全零放入檢驗和字段。再將偽首部以及UDP用戶數(shù)據(jù)報(現(xiàn)在要包括數(shù)據(jù)字段)看成是由許多16BIT的字串接起來。若UDP用戶數(shù)據(jù)報的數(shù)據(jù)部分不是偶數(shù)個字節(jié),則要填入一個全零字節(jié)(但此字節(jié)不發(fā)送)。然后按二進制反碼計算出這些16BIT字的和。將此和的二進制反碼寫入檢驗和字段后,發(fā)送此UDP用戶數(shù)據(jù)報。在接收端,將收到的UDP用戶用戶數(shù)據(jù)報連同偽首部(以及可能性的填充全零字節(jié))一起,按二進制反碼求這些16BIT字的和。當無差錯時其結(jié)果應為全1。兩個數(shù)進行二進制反碼求和的運算規(guī)則:從低位到高位逐列進行計算。0和0相加是0,0和1相加是1,1和1相加是0但要產(chǎn)生一個進位1,加到下一列。若最高位相加后產(chǎn)生進位,則最后得到的結(jié)果要加1。TCP協(xié)議傳輸?shù)目煽渴怯捎谑褂昧诵蛱柡痛_認。當TCP發(fā)送一報文段時,它同時也在重傳隊列中放入一個副本。若收到確認,則刪除此副本。若在計時器時間到之前沒有收到確認,則重傳此報文段。TCP的確認并不保證數(shù)據(jù)已交付給端用戶。這是接收TCP的責任。源端口和目的端口:各占2個字節(jié)。16BIT的端口號加上32BIT的IP地址,構(gòu)成了插口(SOCKET),它相當于傳輸層服務訪問點TSAP的地址(總共是48BIT)。這些端口用來將若干高層協(xié)議向下復用,也用來將傳輸層協(xié)議向上分用。

序號:占4字節(jié)。TCP傳送的報文可看成為連續(xù)的數(shù)據(jù)流,其中每一個字節(jié)都對應于一個序號。首部中的“序號”則指的是本報文段所發(fā)送的數(shù)據(jù)中第一個字節(jié)的序號。例如,某報文段的序號字段的值是301,而攜帶的數(shù)據(jù)共100字節(jié),則本報文段的數(shù)據(jù)的第一個字節(jié)的序號是301,而最后一個字節(jié)的序號是400。這樣,下一個報文段的數(shù)據(jù)序號應當從401開始,因而下一個報文段的序號字段的值應為401。確認序號:占4字節(jié),是期望收到對方的下一個報文段的數(shù)據(jù)的第一個字節(jié)的序號,也就是期望收到的下一個報文段首部的序號字段的值。正確收到了一個報文段,其序號字段的值是501,而數(shù)據(jù)長度是200字節(jié),這就表明序號在501~700之間的數(shù)據(jù)均已正確收到

。因此在響應的報文段中應將確認序號置為701。數(shù)據(jù)偏移:占4BIT,它指出數(shù)據(jù)開始的地方離TCP報文段的起始處有多遠。這實際上就是TCP報文段首部的長度?!皵?shù)據(jù)偏移”的單位不是字節(jié)而是32BIT字(即4字節(jié)字)。由于4BIT能夠表示的最大十進制數(shù)字是15,因此數(shù)據(jù)偏移的最大值是60字節(jié),這也是TCP首部的最大長度。保留:占6BIT,保留為今后使用,但目前應置為0。緊急比特URG(URGENT)當URG=1時,表明緊急指針字段有效。當使用緊急比特并將URG置1時,發(fā)送應用進程應告訴發(fā)送TCP這兩個字符是緊急數(shù)據(jù)。緊急指針指出在本報文段中的緊急數(shù)據(jù)的最后一個字節(jié)的序號。確認比特ACK只有當ACK=1時確認序號字段才有效。當ACK=0時,確認序號無效。推送比特PSH(PUSH)當兩個應用進程進行交互式的通信時,有時在一端的應用進程希望在鍵入一個命令后立即就能夠收到對方的響應。這時,發(fā)送端TCP將推送比特PSH置1,并立即創(chuàng)建一個報文段發(fā)送出去。接收TCP收到推送比特置1的報文段,就盡快交付給接收應用進程,而不再等到整個緩存都填滿了后再向上交付。復位比特RST(RESET)當RST=1時,表明TCP連接中出現(xiàn)嚴重差錯(如由于主機崩潰或其他原因),必須釋放連接,然后再重新建立傳輸連接。還用來拒絕一個非法的報文段或拒絕打開一個連接。同步比特SYN在連接建立時用來同步序號。當SYN=1而ACK=0時,表明這是一個連接請求報文段。對方若同意建立連接,則應在響應的報文段中使SYN=1和ACK=1。因此,同步比特SYN置為1,就表示這是一個連接請求或連接接受報文。終止比特FIN(FINAL)用來釋放一個連接。當FIN=1時,表明此報文段的發(fā)送端的數(shù)據(jù)已發(fā)送完畢,并要求釋放傳輸連接。窗口

占2字節(jié)。窗口字段用來控制對方發(fā)送的數(shù)據(jù)量,單位為字節(jié)。TCP連接的一端根據(jù)自己緩存的空間大小再確定自己的接收窗口大小,然后通知對方來確定對方的發(fā)送窗口。檢驗和

占2字節(jié)。檢驗和字段檢驗的范圍包括首部和數(shù)據(jù)這兩部分。和UDP用戶數(shù)據(jù)報一樣,在計算檢驗和時,要在TCP報文段的前面加上12字節(jié)的偽首部。但應將偽首部第四個字段中的17改為6,將第五字段中的UDP長度改為TCP長度。選項長度可變。TCP只規(guī)定了一種選項,即最大報文段長度MSS(MAXIMUMSEGMENTSIZE)。MSS的選擇并不簡單。若選擇較小的MSS長度,網(wǎng)絡的利用率就降低。設想在極端的情況下,當TCP報文段只含有1字節(jié)的數(shù)據(jù)時,在IP層傳輸?shù)臄?shù)據(jù)報的開銷至少有40字節(jié)(包括TCP報文段的首部和IP數(shù)據(jù)報的首部)。這樣,對網(wǎng)絡的利用率就不會超過1/41。到了數(shù)據(jù)鏈路層還要加上一些開銷。但反過來,若TCP報文段非常長,那么在IP層傳輸時就有可能要分解成多個短數(shù)據(jù)報片。在目的站要將收到的各個短數(shù)據(jù)報片裝配成原來的TCP報文段。當傳輸出錯時還要進行重傳。這些也都會使開銷增大。一般認為,MSS應盡可能大些,只要在IP層傳輸時不需要再分片就行。則MSS的默認值是536字節(jié)長。MSS是TCP報文段中的數(shù)據(jù)字段的最大長度。在連接建立時,雙方要商定初始序號。TCP每次所發(fā)送的報文段的首部中的序號字段數(shù)值表示該報文段中的數(shù)據(jù)部分的第一個字節(jié)的序號。TCP的確認是對接收到的數(shù)據(jù)的最高序號(即收到的數(shù)據(jù)流中的最后一個序號)表示確認。但接收端返回的確認序號是已收到的數(shù)據(jù)的最高序號加1。不必專門發(fā)送報文段,而可以在傳送數(shù)據(jù)時順便把確認信息捎帶傳送。TCP流量控制利用可變窗口大小進行流量控制,雙方確定的窗口值是400TCP定時器設置由于TCP的下層是一個互連網(wǎng)環(huán)境,IP數(shù)據(jù)報所選擇的路由變化很大。因而傳輸層的往返時延的方差也很大。

往返時延的自適應算法:記錄每一個報文段發(fā)出的時間,以及收到相應的確認報文段的時間。這兩個時間之差就是報文段的往返時延。將各個報文段的往返時延樣本加權(quán)平均,就得出報文段的平均往返時延RTT。每測量到一個新的往返時延樣本,就按下式重新計算一次平均往返時延RTT:平均往返時延RTT=α×(舊的RTT)+(1-α)×(新的往返時延樣本)0≤α<1(Jacobson算法)典型的α值為7/8。超時重傳時間RTO(RetransmissionTime-Out):計時器的RTO應略大于上面得出的RTT,即RTO=β×RTT。這里β是個大于1的系數(shù)。若取β很接近于1,發(fā)送端可及時地重傳丟失的報文段,因此效率得到提高。但若報文段并未丟失而僅僅是增加了一點時延,那么過早地重傳反而會加重網(wǎng)絡的負擔。TCP原先的標準推薦將β值取為2。更復雜也更精確的超時重傳時間(或超時間隔)計算公式:P471TCP連接管理TCP傳輸連接管理:傳輸連接就有三個階段,即:連接建立數(shù)據(jù)傳送連接釋放傳輸連接的管理就是使傳輸連接的建立和釋放都能正常地進行。連接建立過程中要解決以下三個問題:要使每一方能夠確知對方的存在要允許雙方協(xié)商一些參數(shù)(如最大報文段長度,最大窗口大小,服務質(zhì)量等)能夠?qū)鬏攲嶓w資源(如緩存大小,連接表中的項目等)進行分配TCP的正常的連接建立和關閉:(狀態(tài)的解釋見P463)

TCP擁塞控制當加載到某個網(wǎng)絡上的載荷超過其處理能力時,擁塞現(xiàn)象便會出現(xiàn)。盡管網(wǎng)絡層也在設法控制擁塞現(xiàn)象的發(fā)生,但這項任務大部分是由TCP來完成的,因為對擁塞現(xiàn)象最切實的辦法是降低數(shù)據(jù)傳輸率。理論上,擁塞現(xiàn)象借用物理層的規(guī)則便可以得到控制:分組保持規(guī)則。意思是只有當一個老的分組離開網(wǎng)絡后(即被發(fā)送出去)再向網(wǎng)絡中注入新的分組。TCP試圖通過動態(tài)地控制滑動窗口的大小來達到這一目的??刂茡砣牡谝徊绞且獧z測它。以前,檢測擁塞很困難。無法分清分組丟失的兩個原因:傳輸線路噪聲干擾,擁塞。現(xiàn)在,有線傳輸介質(zhì)非??煽浚虼?,大多數(shù)超時現(xiàn)象都是由于擁塞造成的。因特網(wǎng)上所有的TCP算法都假設分組傳輸超時是由擁塞引起的,并且以監(jiān)控定時器超時作為出現(xiàn)問題的信號。怎樣防止擁塞現(xiàn)象出現(xiàn)?在建立一個連接鏈路時,連接雙方已經(jīng)選定了一個合適的滑動窗口大小。接收方可以根據(jù)其緩沖區(qū)大小指定窗口大小。若發(fā)送方按照這個窗口大小發(fā)送數(shù)據(jù),則在接收端不會由于緩沖區(qū)溢出而引起問題,但還可能由于網(wǎng)絡的內(nèi)部擁塞而引發(fā)。P415頁圖所示對于因特網(wǎng)來說是要意識到存在兩個潛在的問題——網(wǎng)絡的容量和接收方的容量——并分別進行處理。為此,每個發(fā)送方均保持兩個窗口:接收方承認的窗口和擁塞窗口。每個窗口都反應出發(fā)送方可以傳輸?shù)淖止?jié)數(shù)。取最小值作為可以發(fā)送的字節(jié)數(shù)。有效窗口為發(fā)送方和接收方分別認為合適的窗口中最小的那個。快網(wǎng)絡小緩存接收者慢網(wǎng)絡大緩存接收者導致網(wǎng)絡擁塞的兩個潛在因素是:網(wǎng)絡能力和接收能力。當建立連接時,發(fā)送方將擁塞窗口大小初始化為該連接所用的最大數(shù)據(jù)段的長度值,并隨后發(fā)送一個最大長度的數(shù)據(jù)段。若該數(shù)據(jù)段在定時器超時之前得到確認,那么發(fā)送方會在原擁塞窗口的基礎上再增加一個數(shù)據(jù)段的字節(jié)數(shù),使其為兩倍最大數(shù)據(jù)段的大小,然后再發(fā)送兩個數(shù)據(jù)段。當這些數(shù)據(jù)段中的每一個都被確認后,擁塞窗口大小就再增加一個最大數(shù)據(jù)段的長度。每次成功,都會是擁塞窗口大小加倍。擁塞窗口保持指數(shù)規(guī)律增大,直到數(shù)據(jù)傳輸超過或達到接收方設定的窗口大小。若發(fā)送的數(shù)據(jù)長度序列,如1024,2048,4096字節(jié)都工作正常,但發(fā)送8192字節(jié)出現(xiàn)超時,那么擁塞窗口應設置為4096以避免出現(xiàn)擁塞。這種算法稱為慢啟動,但它并不慢,因為是按指數(shù)規(guī)律增加的。所有的TCP實現(xiàn)都必須支持這種方法。因特網(wǎng)的擁塞控制算法它需要三個參數(shù)。其中第三個是臨界值(threshold),初始化為64KB;另外兩個為接收方窗口和擁塞窗口。若發(fā)生數(shù)據(jù)傳輸超時,將臨界值設置為當前擁塞窗口大小的1/2,并使擁塞窗口恢復為最大數(shù)據(jù)段的大小。慢速啟動除了決定當窗口大小達到臨界值時使其停止按指數(shù)增加外,還決定網(wǎng)絡在此以后如何進行。從達到臨界值這點開始,成功的數(shù)據(jù)傳輸要求擁塞窗口按線性進行增加(對每個字符組按最大數(shù)據(jù)段的值增加),而非

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論