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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

溫馨提示

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

最新文檔

評論

0/150

提交評論