計算機(jī)網(wǎng)絡(luò)第三章運(yùn)輸層_第1頁
計算機(jī)網(wǎng)絡(luò)第三章運(yùn)輸層_第2頁
計算機(jī)網(wǎng)絡(luò)第三章運(yùn)輸層_第3頁
計算機(jī)網(wǎng)絡(luò)第三章運(yùn)輸層_第4頁
計算機(jī)網(wǎng)絡(luò)第三章運(yùn)輸層_第5頁
已閱讀5頁,還剩119頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1第三章運(yùn)輸層Chapter3TransportLayer

ComputerNetworking

ATop-DownApproach2第三章:運(yùn)輸層目標(biāo):

理解運(yùn)輸層服務(wù):復(fù)用/分解復(fù)用可靠數(shù)據(jù)傳輸流量控制擁塞控制學(xué)習(xí)因特網(wǎng)的運(yùn)輸層協(xié)議:UDP:無連接傳輸TCP:面向連接傳輸TCP擁塞控制3第三章提綱3.1運(yùn)輸層服務(wù)3.2多路復(fù)用和多路分解3.3無連接傳輸:UDP3.4可靠數(shù)據(jù)傳輸原理3.5面向連接傳輸:TCP報文段結(jié)構(gòu)可靠數(shù)據(jù)傳輸流量控制連接管理3.6擁塞控制原理3.7TCP擁塞控制4回顧:運(yùn)輸層服務(wù)和協(xié)議在兩個不同的主機(jī)上運(yùn)行的應(yīng)用程序之間提供邏輯通信

運(yùn)輸層協(xié)議運(yùn)行在端系統(tǒng)

發(fā)送方:將應(yīng)用程序報文分解成數(shù)據(jù)段,加上運(yùn)輸層首部后傳遞給網(wǎng)絡(luò)層接受方:將數(shù)據(jù)段重新組裝成報文傳遞到應(yīng)用層運(yùn)輸層協(xié)議:TCP和UDP應(yīng)用層運(yùn)輸層網(wǎng)絡(luò)層鏈路層物理層應(yīng)用層運(yùn)輸層網(wǎng)絡(luò)層鏈路層物理層networkdatalinkphysicalnetworkdatalinkphysicalnetworkdatalinkphysicalnetworkdatalinkphysicalnetworkdatalinkphysical邏輯的端到端傳輸5運(yùn)輸層和網(wǎng)絡(luò)層的關(guān)系運(yùn)輸層位于網(wǎng)絡(luò)層之上運(yùn)輸層協(xié)議提供的某些服務(wù)受到網(wǎng)絡(luò)層協(xié)議的限制。比如,時限和帶寬保證。運(yùn)輸層也提供自己的特殊服務(wù)。比如,可靠數(shù)據(jù)傳輸服務(wù),安全性服務(wù)。網(wǎng)絡(luò)層:兩個主機(jī)之間的邏輯通信運(yùn)輸層:兩個進(jìn)程之間的邏輯通信6Internet運(yùn)輸層協(xié)議傳輸控制協(xié)議(TCP)通過流量控制、序號、確認(rèn)和定時器等確保數(shù)據(jù)可靠按序遞交,會涉及到擁塞控制流量控制連接建立用戶數(shù)據(jù)報協(xié)議(UDP)采用best-effortdeliveryserviceIP服務(wù)的直接擴(kuò)展,提供不可靠的無序傳遞applicationtransportnetworkdatalinkphysicalapplicationtransportnetworkdatalinkphysicalnetworkdatalinkphysicalnetworkdatalinkphysicalnetworkdatalinkphysicalnetworkdatalinkphysicalnetworkdatalinkphysicallogicalend-endtransport7第三章提綱3.1運(yùn)輸層服務(wù)3.2多路復(fù)用和多路分解3.3無連接傳輸:UDP3.4可靠數(shù)據(jù)傳輸原理3.5面向連接傳輸:TCP報文段結(jié)構(gòu)可靠數(shù)據(jù)傳輸流量控制連接管理3.6擁塞控制原理3.7TCP擁塞控制8問題引入網(wǎng)絡(luò)層是主機(jī)之間的通信,運(yùn)輸層是應(yīng)用進(jìn)層之間的通信。如何實(shí)現(xiàn)將主機(jī)之間的通信轉(zhuǎn)換為進(jìn)程之間的通信呢?解決辦法:運(yùn)輸層提供多路復(fù)用(multiplexing)多路分解(demultiplexing)9多路復(fù)用和多路分解進(jìn)程1進(jìn)程2多路復(fù)用器網(wǎng)絡(luò)接口進(jìn)程1進(jìn)程2多路分解器網(wǎng)絡(luò)接口怎樣實(shí)現(xiàn)呢?10實(shí)現(xiàn)方法通過套接字(socket)來實(shí)現(xiàn)多路復(fù)用與分解套接字相當(dāng)于從網(wǎng)絡(luò)向進(jìn)程傳遞數(shù)據(jù)和從進(jìn)層向網(wǎng)絡(luò)傳遞數(shù)據(jù)的門戶套接字有唯一的標(biāo)識符11定義多路復(fù)用:Thejobofgatheringdatachunksatthesourcehostfromdifferentsockets,encapsulatingeachdatachunkwithheaderinformationtocreatesegments,andpassingthesegmentstothenetworklayer多路分解:Thejobofdeliveringthedatainatransport-layersegmenttothecorrectsocket12多路復(fù)用/多路分解applicationtransportnetworklinkphysicalP1applicationtransportnetworklinkphysicalapplicationtransportnetworklinkphysicalP2P3P4P1host1host2host3=進(jìn)程=套接字將接收到的數(shù)據(jù)段傳遞到正確的套接字接收主機(jī)多路分解:從多個套接字收集數(shù)據(jù),用首部封裝數(shù)據(jù),然后將報文段傳遞到網(wǎng)絡(luò)層發(fā)送主機(jī)多路復(fù)用:13多路分解如何工作主機(jī)上每個套接字分配一個端口號端口號是16比特的數(shù)字,大小在

0~65535之間。0~1023的端口號是眾所周知的端口號,是受嚴(yán)格限制的。比如HTTP80當(dāng)報文段到達(dá)主機(jī)(1)運(yùn)輸層檢查報文段的目的端口號(2)將目的端口號定向到相應(yīng)套接字(3)報文段中的數(shù)據(jù)通過套接字進(jìn)入所連接的進(jìn)程主機(jī)用IP地址和端口號指明數(shù)據(jù)段屬于哪個合適的套接字源端口#目的端口#32bits應(yīng)用程序數(shù)據(jù)(報文)其他首部域TCP/UDP報文段格式14UDP多路復(fù)用與分解用端口號創(chuàng)建套接字:自動分派端口號:DatagramSocketServerSocket1=newDatagramSocket();應(yīng)用程序指定端口號:DatagramSocketServerSocket2=newDatagramSocket(9922);UDP套接字由目的IP地址和目的端口號來標(biāo)識具有不同的源IP地址且/或源端口號,但具有相同的目的IP地址和目的端口號的IP數(shù)據(jù)報,則指向同樣的套接字(m:1)15P2(續(xù))ClientIP:BclientIP:AP1P1P3serverIP:CSP:6428DP:9157SP:9157DP:6428SP:6428DP:5775SP:5775DP:6428請求報文段中提供返回地址(包括IP地址和端口號)端口號9157端口號5775端口號642816TCP的多路復(fù)用與分解TCP套接字由4部分指定:(源IP地址,源端口號,目的IP地址,目的端口號)接收主機(jī)使用所有四個值將數(shù)據(jù)段定位到合適的套接字(1:1)服務(wù)器主機(jī)支持很多同時的TCP套接字:每個套接字用4部分來表示例:Web服務(wù)器對每個連接的客戶都有不同的套接字,而非持久HTTP將對每個請求有一個不同的套接字17套接字建立過程(1)TCP服務(wù)器進(jìn)程在端口(比如80)上等待TCP客戶機(jī)的連接建立請求。(2)TCP客戶機(jī)產(chǎn)生一條連接建立請求并創(chuàng)建客戶機(jī)套接字Socketclientsocket=newsocket(“服務(wù)器主機(jī)名”,80)(3)服務(wù)器接收到80端口請求報文后,定位服務(wù)器進(jìn)程,創(chuàng)建一個連接套接字Socketconsocket=welcomesocket.accept()(4)新創(chuàng)建的套接字通過(源IP地址,源端口號,目的IP地址,目的端口號)值來標(biāo)識。若后續(xù)報文與這四個值相同,則多路分解到這個套接字。18(續(xù))ClientIP:BP1clientIP:AP1P2P4serverIP:CSP:9157DP:80SP:9157DP:80P5P6P3D-IP:CS-IP:AS-IP:BSP:5775DP:80D-IP:CS-IP:BD-IP:C19第三章提綱3.1運(yùn)輸層服務(wù)3.2多路復(fù)用和多路復(fù)用3.3無連接傳輸:UDP3.4可靠數(shù)據(jù)傳輸原理3.5面向連接傳輸:TCP報文段結(jié)構(gòu)可靠數(shù)據(jù)傳輸流量控制連接管理3.6擁塞控制原理3.7TCP擁塞控制20UDP:用戶數(shù)據(jù)報協(xié)議[RFC768]UDP僅提供:多路復(fù)用/分解功能輕型的差錯檢測UDP是無連接的:在UDP接收者發(fā)送者之間沒有握手每個UDP數(shù)據(jù)段的處理獨(dú)立于其他數(shù)據(jù)段UDP采用“盡最大努力”服務(wù),導(dǎo)致UDP數(shù)據(jù)段可能:丟失會傳遞失序的報文到應(yīng)用程序21有些應(yīng)用為什么采用UDP?應(yīng)用層能更好地控制要發(fā)送的數(shù)據(jù)和時間,容忍數(shù)據(jù)丟失無需連接建立(減少延遲)無連接狀態(tài)很小的數(shù)據(jù)段首部(8字節(jié))TCP不容數(shù)據(jù)丟失,有擁塞和確認(rèn)控制,在擁堵鏈路會耗費(fèi)很多時間TCP需三次握手建立連接TCP需維護(hù)連接狀態(tài),包括緩存、擁塞控制參數(shù)、序號和確認(rèn)號參數(shù)等TCP有20個字節(jié)首部22注意以下描述:UDP只在IP數(shù)據(jù)報服務(wù)之上增加了很少一點(diǎn)的功能,即端口的功能和差錯檢測的功能。UDP用戶數(shù)據(jù)報只提供不可靠交付,但UDP在某些方面有其特殊的優(yōu)點(diǎn)。UDP是無連接的,即發(fā)送數(shù)據(jù)之前不需要建立連接。UDP使用盡最大努力交付,即不保證可靠交付,同時也不使用擁塞控制。UDP沒有擁塞控制,很適合多媒體通信的要求。UDP支持一對一、一對多、多對一和多對多的交互通信。23(續(xù))UDP的首部開銷小,只有8個字節(jié)。UDP是面向報文的。24UDP是面向報文的IP分組的數(shù)據(jù)部分IP首部IP層UDP首部UDP用戶數(shù)據(jù)報的數(shù)據(jù)部分運(yùn)輸層應(yīng)用層報文應(yīng)用層253.3.1UDP的首部格式源端口目的端口長度檢驗(yàn)和數(shù)據(jù)首部IP分組2222字節(jié)數(shù)據(jù)首部UDP用戶數(shù)據(jù)報用戶數(shù)據(jù)報UDP有兩個字段:數(shù)據(jù)字段和首部字段。首部字段有8個字節(jié),由4個字段組成,每個字段都是兩個字節(jié)。長度是首部和數(shù)據(jù)的總長度26在計算檢驗(yàn)和時,臨時把“偽首部”和UDP用戶數(shù)據(jù)報連接在一起。偽首部僅僅是為了計算檢驗(yàn)和。偽首部源端口目的端口長度檢驗(yàn)和數(shù)據(jù)首部UDP長度源IP地址目的IP地址017IP分組字節(jié)44112122222字節(jié)數(shù)據(jù)首部UDP用戶數(shù)據(jù)報校驗(yàn)和273.2.2UDP校驗(yàn)和發(fā)送方:將數(shù)據(jù)看成16bit的整數(shù)序列校驗(yàn)和:數(shù)據(jù)段內(nèi)容相加(1的補(bǔ)碼和)發(fā)送者將校驗(yàn)和值放入UDP的校驗(yàn)和域接收方:計算接收到數(shù)據(jù)段的校驗(yàn)和檢查計算的校驗(yàn)和是否等于校驗(yàn)和域中的值:NO–

檢測到錯誤YES–

沒有檢測到錯誤目標(biāo):

檢測傳輸?shù)臄?shù)據(jù)段的“錯誤”如bit丟失)28差錯檢測注意:錯誤檢測不是100%可靠!協(xié)議有可能漏掉一些錯誤,但很少大的校驗(yàn)信息域能提供更好的檢錯能力用戶數(shù)據(jù)校驗(yàn)信息傳輸信道用戶數(shù)據(jù)差錯檢測算法用戶數(shù)據(jù)校驗(yàn)信息用戶數(shù)據(jù)差錯檢測算法是否相等是錯誤處理否29Internet校驗(yàn)和例子11100110011001101101010101010101101110111011101111011101110111100累加和0100010001000011校驗(yàn)和變反求和回卷求和時產(chǎn)生的進(jìn)位必須回卷加到結(jié)果上最后的累加和必須按位變反才是校驗(yàn)和30第三章提綱3.1運(yùn)輸層服務(wù)3.2多路復(fù)用和多路分解3.3無連接傳輸:UDP3.4可靠數(shù)據(jù)傳輸原理3.5面向連接傳輸:TCP報文段結(jié)構(gòu)可靠數(shù)據(jù)傳輸流量控制連接管理3.6擁塞控制原理3.7TCP擁塞控制31可靠數(shù)據(jù)傳輸原理服務(wù)模型和服務(wù)實(shí)現(xiàn)不可靠信道的特性將決定可靠數(shù)據(jù)傳輸協(xié)議(rdt)的復(fù)雜性rdt:reliabledatatransferudt:unreliabledatatransfer32可靠數(shù)據(jù)傳輸:發(fā)送方接受方rdt_send():上層應(yīng)用調(diào)用該函數(shù)要求可靠傳輸數(shù)據(jù)到接收者udt_send():可靠傳輸協(xié)議調(diào)用該函數(shù),在不可靠的信道上傳輸數(shù)據(jù)給接收者rdt_rcv():接收方接收到數(shù)據(jù)后,調(diào)用該函數(shù)完成可靠傳輸deliver_data():可靠傳輸協(xié)議調(diào)用該函數(shù)將數(shù)據(jù)傳給上層應(yīng)用333.4.1可靠數(shù)據(jù)傳輸構(gòu)造:我們將逐步開發(fā)發(fā)送方和接收方的可靠數(shù)據(jù)傳輸協(xié)議(rdt)僅考慮單向數(shù)據(jù)傳輸,即數(shù)據(jù)傳輸僅從發(fā)送方到接收方,但控制信息將雙向流動!有限狀態(tài)機(jī)(FSM)

來標(biāo)示發(fā)送方和接收方發(fā)送方和接收方有各自的FSM箭頭指示協(xié)議從一個狀態(tài)變遷到另一個狀態(tài)狀態(tài)可變遷到其自身引起變遷的事件顯示在表示變遷的橫線上方,所采取的動作顯示在橫線下方。如果對一個事件沒有采取動作,或沒有事件發(fā)生則在橫線下方或上方用符號^初始狀態(tài)用虛線表示34FSM實(shí)例狀態(tài)1狀態(tài)2導(dǎo)致狀態(tài)轉(zhuǎn)換的事件狀態(tài)轉(zhuǎn)換時執(zhí)行的動作狀態(tài):在一個狀態(tài)時,由事件唯一確定狀態(tài)的轉(zhuǎn)換事件動作初始狀態(tài)35Rdt1.0:完全可靠信道上的可靠數(shù)據(jù)傳輸假設(shè):在完美可靠的信道上沒有bit錯誤沒有分組丟失發(fā)送方,接收方分離的FSMs:發(fā)送方發(fā)送數(shù)據(jù)到下層信道接收方從下層信道接收數(shù)據(jù)等待來自上層的調(diào)用packet=make_pkt(data)udt_send(packet)rdt_send(data)extract(packet,data)deliver_data(data)等待來自下層的調(diào)用rdt_rcv(packet)senderreceiver36Rdt2.0:具有bit錯誤的信道假設(shè):下層信道可能讓傳輸分組中的bit受損校驗(yàn)和將檢測到bit錯誤問題:檢測到錯誤,該如何從錯誤中恢復(fù)呢?確認(rèn)(ACKs):

接收方明確告訴發(fā)送方分組接收正確否認(rèn)(NAKs):接收方明確告訴發(fā)送方分組接收出錯發(fā)送方收到NAK后重發(fā)這個分組在rdt2.0的新機(jī)制

(在rdt1.0中沒有的):差錯檢測接收方反饋:控制信息(ACK,NAK)37rdt2.0:FSM規(guī)范extract(rcvpkt,data)deliver_data(data)udt_send(ACK)rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)udt_send(NAK)rdt_rcv(rcvpkt)&&corrupt(rcvpkt)WaitforcallfrombelowreceiverWaitforcallfromabovesnkpkt=make_pkt(data,checksum)udt_send(sndpkt)rdt_rcv(rcvpkt)&&isACK(rcvpkt)udt_send(sndpkt)rdt_rcv(rcvpkt)&&isNAK(rcvpkt)WaitforACKorNAKsenderrdt_send(data)L38rdt2.0:沒有錯誤時的操作Waitforcallfromabovesnkpkt=make_pkt(data,checksum)udt_send(sndpkt)extract(rcvpkt,data)deliver_data(data)udt_send(ACK)rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)rdt_rcv(rcvpkt)&&isACK(rcvpkt)udt_send(sndpkt)rdt_rcv(rcvpkt)&&isNAK(rcvpkt)udt_send(NAK)rdt_rcv(rcvpkt)&&corrupt(rcvpkt)WaitforACKorNAKWaitforcallfrombelowrdt_send(data)L39rdt2.0:錯誤場景Waitforcallfromabovesnkpkt=make_pkt(data,checksum)udt_send(sndpkt)extract(rcvpkt,data)deliver_data(data)udt_send(ACK)rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)rdt_rcv(rcvpkt)&&isACK(rcvpkt)udt_send(sndpkt)rdt_rcv(rcvpkt)&&isNAK(rcvpkt)udt_send(NAK)rdt_rcv(rcvpkt)&&corrupt(rcvpkt)WaitforACKorNAKWaitforcallfrombelowrdt_send(data)L40rdt2.0有一個致命缺陷!ACK/NAK發(fā)生錯誤會發(fā)生什么呢?發(fā)送方并不知道接收方發(fā)生了什么!不能正確重發(fā):可能導(dǎo)致重復(fù)分組解決辦法-序號:

發(fā)送方給每個分組加一個序號在ACK/NAK錯誤時發(fā)送方重發(fā)當(dāng)前分組接收方丟棄重復(fù)的分組(并不向上傳遞)Sendersendsonepacket,thenwaitsforreceiverresponsestopandwait41rdt2.1:發(fā)送方處理混亂的ACK/NAKs等待來自上層的調(diào)用0sndpkt=make_pkt(0,data,checksum)udt_send(sndpkt)rdt_send(data)等待ACK或NAK0udt_send(sndpkt)rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||isNAK(rcvpkt))sndpkt=make_pkt(1,data,checksum)udt_send(sndpkt)rdt_send(data)rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&isACK(rcvpkt)udt_send(sndpkt)rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||isNAK(rcvpkt))rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&isACK(rcvpkt)

等待來自上層的調(diào)用1等待

ACK或NAK1LL42rdt2.1:接收方處理混亂的ACK/NAKssndpkt=make_pkt(NAK,chksum)udt_send(sndpkt)等待來自下層的0rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&has_seq0(rcvpkt)rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&has_seq1(rcvpkt)

extract(rcvpkt,data)deliver_data(data)sndpkt=make_pkt(ACK,chksum)udt_send(sndpkt)等待來自下層的1rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&has_seq0(rcvpkt)extract(rcvpkt,data)deliver_data(data)sndpkt=make_pkt(ACK,chksum)udt_send(sndpkt)rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)sndpkt=make_pkt(ACK,chksum)udt_send(sndpkt)rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&has_seq1(rcvpkt)rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)sndpkt=make_pkt(ACK,chksum)udt_send(sndpkt)sndpkt=make_pkt(NAK,chksum)udt_send(sndpkt)43rdt2.1:討論發(fā)送方:序號加到分組上兩個序號(0,1)就可以滿足.必須檢查是否收到錯誤的ACK/NAK必須記住當(dāng)前的報文是1號還是0號接收方:必須檢查是否接收到重復(fù)的報文狀態(tài)指示0或者1是否為希望收到的報文序號注意:接收方并不知道它的上一個ACK/NAK是否被發(fā)送方正確收到44rdt2.2:無NAK的協(xié)議同rdt2.1一樣的功能,只用ACKs不用NAK,如果上個報文接收正確,接收方發(fā)送ACK接收方必須明確包含被確認(rèn)的報文的序號發(fā)送方收到重復(fù)ACK將導(dǎo)致和NAK一樣的處理:重發(fā)當(dāng)前報文45rdt2.2:無NAK發(fā)送方等待來自上層的調(diào)用0sndpkt=make_pkt(0,data,checksum)udt_send(sndpkt)rdt_send(data)等待ACK0udt_send(sndpkt)rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||isACK(rcvpkt,1))sndpkt=make_pkt(1,data,checksum)udt_send(sndpkt)rdt_send(data)rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&isACK(rcvpkt,0)udt_send(sndpkt)rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||isACK(rcvpkt,0))rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&isACK(rcvpkt,1)

等待來自上層的調(diào)用1等待

ACK1LL46rdt2.2:無NAK接收方等待來自下層的0rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||has_seq0(rcvpkt))rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&has_seq1(rcvpkt)

extract(rcvpkt,data)deliver_data(data)sndpkt=make_pkt(ACK,1,chksum)udt_send(sndpkt)等待來自下層的1rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&has_seq0(rcvpkt)extract(rcvpkt,data)deliver_data(data)sndpkt=make_pkt(ACK,0,chksum)udt_send(sndpkt)oncethru=1udt_send(sndpkt)rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||has_seq1(rcvpkt))If(oncethru==1)udt_send(sndpkt)oncethru=0L47rdt3.0:具有出錯和丟失的信道新假設(shè):

下層信道可能發(fā)生分組丟失,比如數(shù)據(jù)或者ACKs該怎么辦呢?倒計數(shù)定時器countdowntimer方法:

發(fā)送者等待“合理的”確認(rèn)時間,如果在這個時間內(nèi)沒有收到確認(rèn)就重發(fā)發(fā)送方需要:每發(fā)送一個分組啟動定時器超時:響應(yīng)定時器中斷收到ACK:終止定時器48rdt3.0發(fā)送方sndpkt=make_pkt(0,data,checksum)udt_send(sndpkt)start_timerrdt_send(data)等待ACK0rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||isACK(rcvpkt,1))等待來自上層的調(diào)用1sndpkt=make_pkt(1,data,checksum)udt_send(sndpkt)start_timerrdt_send(data)rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&isACK(rcvpkt,0)

rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||isACK(rcvpkt,0))rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&isACK(rcvpkt,1)

stop_timerstop_timerudt_send(sndpkt)start_timertimeoutudt_send(sndpkt)start_timertimeoutrdt_rcv(rcvpkt)等待來自上層的調(diào)用0等待ACK1Lrdt_rcv(rcvpkt)LLL49rdt3.0運(yùn)行過程50(續(xù))51rdt3.0:停等協(xié)議首個分組的第1個比特被傳輸,t=0發(fā)送方接收方RTT

首個分組的最后1比特被傳輸,t=L/R首個分組的第1個比特到達(dá)首個分組的最后1比特到達(dá)發(fā)送ACKACK到達(dá),發(fā)送下一個分組,t=RTT+L/R52rdt3.0的性能Ttransmit=8kb/pkt10^9b/sec=8microsec每30.008msec發(fā)送一個1K字節(jié)的報文,由此可見在1Gbps的鏈路上,其有效吞吐量只有267kbpsL(packetlengthinbits)R(transmissionrate,bps)=例如:1Gbps鏈路,15ms端到端傳輸延遲,1K字節(jié)報文,計算網(wǎng)絡(luò)利用率?53解決辦法不使用停等方式,允許發(fā)送方發(fā)送多個分組而無需等待確認(rèn)流水線技術(shù)pipelining54性能分析首個分組的第1個比特被傳輸,t=0senderreceiverRTT首個分組的最后1比特被傳輸,t=L/R首個分組的第1比特到達(dá)首個分組的最后1比特到達(dá),發(fā)送ACKACK到達(dá),發(fā)送下一個分組,t=RTT+L/R第2分組的最后1比特到達(dá),發(fā)送ACK第3分組的最后1比特到達(dá),發(fā)送ACK利用率提高了3倍553.4.2流水線技術(shù)流水線:允許發(fā)送多個沒有確認(rèn)的分組“在路上的”序號數(shù)目必須增加在發(fā)送方/接收方必須有緩沖區(qū)兩個方法:go-Back-N,選擇重傳56Go-Back-N(GBN)選擇重傳發(fā)送方:在流水線中允許N個unACKed分組發(fā)送方:在流水線中允許N個unACKed分組接收方:累積確認(rèn)ACKs接收方:每個分組單獨(dú)確認(rèn)發(fā)送方:只有最早unACKed分組有一個定時器發(fā)送方:

每個unACKed分組有一個定時器若超時:

重傳所有unACKed分組若超時:僅重傳unACKed分組573.4.2Go-Back-N:

發(fā)送方序號:在分組頭中規(guī)定一個k位的序號窗口:

允許的連續(xù)未確認(rèn)的報文,大小為NACK(n):

確認(rèn)所有的報文直到(包含)序號n-“累積ACK”定時:對第一個發(fā)送未被確認(rèn)的報文定時超時(n):

重發(fā)窗口中的報文n及以上更高序號的報文(只有一個定時器記錄最早的未被確認(rèn)報文的發(fā)送時間)58已確認(rèn)分組已發(fā)送,但未收到確認(rèn)可用分組序號,但還沒發(fā)送不可用分組序號59Go-Back-N:

接收方ACK-only:

總是為正確接收的最高序號的分組發(fā)送ACK。可能生成重復(fù)的ACKs只需要記住被期待接收的序號expectedseqnum接收到失序分組:丟棄(不緩沖)->沒有接收緩沖區(qū)!重發(fā)最高序號分組的ACK60GBN:senderextendedFSMWaitstart_timerudt_send(sndpkt[base])udt_send(sndpkt[base+1])…udt_send(sndpkt[nextseqnum-1])timeoutrdt_send(data)

if(nextseqnum<base+N){sndpkt[nextseqnum]=make_pkt(nextseqnum,data,chksum)udt_send(sndpkt[nextseqnum])if(base==nextseqnum)start_timernextseqnum++}elserefuse_data(data)base=getacknum(rcvpkt)+1If(base==nextseqnum)stop_timerelsestart_timerrdt_rcv(rcvpkt)&¬corrupt(rcvpkt)base=1nextseqnum=1rdt_rcv(rcvpkt)&&corrupt(rcvpkt)

LL61GBN:receiverextendedFSMWaitudt_send(sndpkt)defaultrdt_rcv(rcvpkt)&¬currupt(rcvpkt)&&hasseqnum(rcvpkt,expectedseqnum)extract(rcvpkt,data)deliver_data(data)sndpkt=make_pkt(expectedseqnum,ACK,chksum)udt_send(sndpkt)expectedseqnum++expectedseqnum=1sndpkt=make_pkt(0,ACK,chksum)L62GBN操作63GBN的問題當(dāng)窗口長度和帶寬時延很大時,流水線中會有很多分組;單個分組的差錯可能引起GBN大量分組重傳。選擇重傳64選擇性重傳(SR)接收方分別確認(rèn)已經(jīng)收到的分組必要時,緩沖報文,最后按序提交給上層發(fā)送者只重發(fā)沒有收到確認(rèn)的分組對每個沒有確認(rèn)的報文發(fā)送者都要啟動一個定時器發(fā)送窗口N個連續(xù)序號限制被發(fā)送的未確認(rèn)的分組數(shù)量65選擇性重傳:發(fā)送者,接收者窗口66選擇性重傳從上層接收數(shù)據(jù)

:如果下一個可用的序號在發(fā)送方窗口內(nèi),則將數(shù)據(jù)打包并用此序號發(fā)送,啟動定時器超時(n):重發(fā)分組n,重啟定時器收到ACK(n)位于

[sendbase,sendbase+N]標(biāo)記分組n被接收如果n是最小的未確認(rèn)分組,則增加窗口基序號到下一個未被確認(rèn)的序號發(fā)送方分組n的序號位于[rcvbase,rcvbase+N-1]發(fā)送ACK(n)失序分組:緩沖有序分組:交付上層(包括已經(jīng)緩沖的有序分組),移動窗口到下一個沒有接收的分組分組n的序號位于[rcvbase-N,rcvbase-1]發(fā)送ACK(n)其他:

忽略接收方67選擇性重傳的操作68選擇性重傳:兩難選擇例子:序號:0,1,2,3windowsize=3在(a)(b)兩種情況下接收方感覺是等同的!重傳第一個分組初傳第五個分組69Q:

序號大小和窗口大小有什么關(guān)系?窗口長度必須小于或等于序號空間大小的一半70第三章提綱3.1運(yùn)輸層服務(wù)3.2多路復(fù)用和多路復(fù)用3.3無連接傳輸:UDP3.4可靠數(shù)據(jù)傳輸原理3.5面向連接傳輸:TCP報文段結(jié)構(gòu)可靠數(shù)據(jù)傳輸流量控制連接管理3.6擁塞控制原理3.7TCP擁塞控制713.5.1TCP:概述RFCs:793,1122,1323,2018,2581點(diǎn)到點(diǎn):一個發(fā)送者,一個接收者可靠按序的字節(jié)流:沒有“信息邊界”流水線:TCP擁塞和流量控制設(shè)置窗口大小收發(fā)緩沖區(qū)全雙工服務(wù):同一個連接上的雙向數(shù)據(jù)流MSS:最大報文段長面向連接:三次握手:在數(shù)據(jù)交換前握手(交換控制信息)初始化狀態(tài)流量控制:發(fā)送方不會淹沒接收方72TCP:概述RFCs:793,1122,1323,2018,2581TCP發(fā)送數(shù)據(jù)緩存報文段TCP接收數(shù)據(jù)緩存進(jìn)程寫數(shù)據(jù)套接字進(jìn)程讀數(shù)據(jù)套接字收發(fā)緩沖區(qū)73TCP首部20字節(jié)的固定首部目的端口數(shù)據(jù)偏移檢驗(yàn)和選項(xiàng)(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FIN32位SYNRSTPSHACKURG位08162431填充TCP數(shù)據(jù)部分TCP首部TCP報文段IP數(shù)據(jù)部分IP首部3.5.2TCP報文段的首部格式74TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗(yàn)和選項(xiàng)(長度可變)源端口序號緊急指針窗口確認(rèn)號保留FINSYNRSTPSHACKURG位08162431填充源端口和目的端口字段——各占2字節(jié)。端口是運(yùn)輸層與應(yīng)用層的服務(wù)接口。運(yùn)輸層的復(fù)用和分用功能都要通過端口才能實(shí)現(xiàn)。序號字段——占4字節(jié)。TCP連接中傳送的數(shù)據(jù)流中的每一個字節(jié)都編上一個序號。序號字段的值則指的是本報文段所發(fā)送的數(shù)據(jù)的第一個字節(jié)的序號。確認(rèn)號字段——占4字節(jié),是期望收到對方的下一個報文段的數(shù)據(jù)的第一個字節(jié)的序號。數(shù)據(jù)偏移(即首部長度)——占4位,它指出TCP報文段的數(shù)據(jù)起始處距離TCP報文段的起始處有多遠(yuǎn)。“數(shù)據(jù)偏移”的單位是32位字(以4字節(jié)為計算單位)。保留字段——占6位,保留為今后使用,但目前應(yīng)置為0。緊急URG(URGent)——當(dāng)URG

1時,表明緊急指針字段有效。它告訴系統(tǒng)此報文段中有緊急數(shù)據(jù),應(yīng)盡快傳送(相當(dāng)于高優(yōu)先級的數(shù)據(jù))。確認(rèn)ACK(ACKnowledgment)——只有當(dāng)ACK

1時確認(rèn)號字段才有效。當(dāng)ACK

0時,確認(rèn)號無效。推送PSH(PuSH)——發(fā)送方收到push指示后快速發(fā)送該數(shù)據(jù)及其之前的數(shù)據(jù),接收TCP收到PSH=1的報文段,就盡快地交付接收應(yīng)用進(jìn)程,而不再等到整個緩存都填滿了后再向上交付。復(fù)位RST(ReSeT)——當(dāng)RST

1時,表明TCP連接中出現(xiàn)嚴(yán)重差錯(如由于主機(jī)崩潰或其他原因),必須釋放連接,然后再重新建立運(yùn)輸連接。同步SYN(SYNchronize)——同步SYN=1表示這是一個連接請求或連接接受報文。終止FIN(FINis)——用來釋放一個連接。FIN

1表明此報文段的發(fā)送端的數(shù)據(jù)已發(fā)送完畢,并要求釋放運(yùn)輸連接。窗口字段——占2字節(jié),用來讓對方設(shè)置發(fā)送窗口的依據(jù),單位為字節(jié)。檢驗(yàn)和——占2字節(jié)。檢驗(yàn)和字段檢驗(yàn)的范圍包括首部和數(shù)據(jù)這兩部分。在計算檢驗(yàn)和時,要在TCP報文段的前面加上12字節(jié)的偽首部。緊急指針字段——占16位,指出在本報文段中緊急數(shù)據(jù)共有多少個字節(jié)(緊急數(shù)據(jù)放在本報文段數(shù)據(jù)的最前面)。

選項(xiàng)字段——長度可變。TCP最初只規(guī)定了一種選項(xiàng),即最大報文段長度

MSS。MSS告訴對方TCP:“我的緩存所能接收的報文段的數(shù)據(jù)字段的最大長度是MSS個字節(jié)?!碧畛渥侄巍@是為了使整個首部長度是4字節(jié)的整數(shù)倍。75TCP序號和確認(rèn)序號:建立在字節(jié)流上,按字節(jié)編號數(shù)據(jù)段中第一個字節(jié)在數(shù)據(jù)流中的位置編號確認(rèn):期望收到的下一個字節(jié)的序號累計ACK,確認(rèn)至第一丟失字節(jié)為止的字節(jié)問:接收方如何處理失序的數(shù)據(jù)段?答:TCP規(guī)范沒有明確規(guī)定,由編程人員處理實(shí)踐中,接收方保留失序的字節(jié)并等待缺少的字節(jié)以填補(bǔ)。76例:Telnet假設(shè)客戶機(jī)和服務(wù)器的起始序號是42和79用戶輸入字符“C”,并在用戶屏幕上顯示此字符HostAHostBSeq=42,ACK=79,data=‘C’Seq=79,ACK=43,data=‘C’Seq=43,ACK=80Usertypes‘C’hostACKsreceiptofechoed‘C’hostACKsreceiptof‘C’,echoesback‘C’timesimpletelnetscenario773.5.3TCP往返時延的估計和超時問:

如何設(shè)置TCP超時值?必須大于往返時延RTT,但RTT是變化的太短:導(dǎo)致不必要的重傳太長:對數(shù)據(jù)段丟失響應(yīng)慢

解決兩個問題:

估計RTT和設(shè)置超時間隔78估計RTT上述均值計算被稱為:指數(shù)加權(quán)移動平均典型的:a=0.125問:

如何估計RTT?樣本RTT(SampleRTT):測量從報文段發(fā)送到收到確認(rèn)的時間忽略重傳樣本RTT會變化,因此需要一個樣本RTT均值(EstimatedRTT),以下公式進(jìn)行均值處理EstimatedRTT=(1-a)*EstimatedRTT+a*SampleRTT79RTT估計例子:80設(shè)置超時間隔設(shè)置RTT偏差DevRTT:用于估算SampleRTT偏離EstimatedRTT的程度DevRTT=(1-b)*DevRTT+b*|SampleRTT-EstimatedRTT|(典型地,b=0.25)設(shè)置超時時間間隔:TimeoutInterval=EstimatedRTT+4*DevRTT81第三章提綱3.1運(yùn)輸層服務(wù)3.2多路復(fù)用和多路分解3.3無連接傳輸:UDP3.4可靠數(shù)據(jù)傳輸原理3.5面向連接傳輸:TCP報文段結(jié)構(gòu)可靠數(shù)據(jù)傳輸流量控制連接管理3.6擁塞控制原理3.7TCP擁塞控制82TCP可靠數(shù)據(jù)傳輸TCP在IP不可靠服務(wù)之上創(chuàng)建可靠數(shù)據(jù)傳輸服務(wù)保證接收得到非損壞、無間隔、非冗余和按序的數(shù)據(jù)流流水線技術(shù)處理報文段累積確認(rèn)TCP使用單個重發(fā)定時器觸發(fā)重發(fā):超時事件重復(fù)確認(rèn)83TCP發(fā)送方事件:1.從應(yīng)用程序接收數(shù)據(jù)用序號封裝一個報文段,序號是數(shù)據(jù)段中第一個數(shù)據(jù)字節(jié)在字節(jié)流中的位置編號如果沒有啟動定時器,則啟動定時器設(shè)置超時間隔:TimeOutInterval2.超時重發(fā)超時的數(shù)據(jù)段重新啟動定時器3.收到確認(rèn)更新還沒有確認(rèn)的狀態(tài)若還有未完成的數(shù)據(jù)段,重新啟動定時器84TCP

發(fā)送方

(簡化的)

NextSeqNum=InitialSeqNumSendBase=InitialSeqNumloop(forever){switch(event)

event:datareceivedfromapplicationabovecreateTCPsegmentwithsequencenumberNextSeqNumif(timercurrentlynotrunning)starttimerpasssegmenttoIPNextSeqNum=NextSeqNum+length(data)

event:timertimeoutretransmitnot-yet-acknowledgedsegmentwithsmallestsequencenumberstarttimer

event:ACKreceived,withACKfieldvalueofyif(y>SendBase){SendBase=yif(therearecurrentlynot-yet-acknowledgedsegments)starttimer}}/*endofloopforever*/注意:SendBase-1:lastcumulativelyack’edbyteExample:SendBase-1=71;y=73,sothercvrwants73+;

y>SendBase,sothatnewdataisacked85TCP:重發(fā)場景HostASeq=100,20bytesdataACK=100time過早的超時設(shè)置HostBSeq=92,8bytesdataACK=120Seq=92,8bytesdataSeq=92timeoutACK=120HostASeq=92,8bytesdataACK=100losstimeout丟失ACK的情況HostBXSeq=92,8bytesdataACK=100timeSeq=92timeoutSendBase=100SendBase=120SendBase=120Sendbase=10086TCP重發(fā)場景HostASeq=92,8bytesdataACK=100losstimeout累積ACK的情況HostBXSeq=100,20bytesdataACK=120timeSendBase=120累積避免了第一個報文段的重傳87快速重傳超時觸發(fā)重傳存在問題:超時周期往往太長導(dǎo)致重傳丟失報文之前要等待很長時間,因此增加了網(wǎng)絡(luò)時延解決辦法:冗余ACK檢測發(fā)送方在超時之前通過重復(fù)的ACK檢測丟失報文段發(fā)送方常常一個接一個地發(fā)送很多報文段如果報文段丟失,則發(fā)送方將可能接收到很多重復(fù)的ACKs.如果發(fā)送方收到3個對同樣報文段的確認(rèn),則發(fā)送方認(rèn)為該報文段之后的數(shù)據(jù)已經(jīng)丟失。啟動快速重傳:

在定時器超時之前重發(fā)丟失的報文段88HostAtimeoutHostBtimeXresendseqX2seq#x1seq#x2seq#x3seq#x4seq#x5ACKx2ACKx2ACKx2ACKx2tripleduplicateACKs89

event:ACKreceived,withACKfieldvalueofyif(y>SendBase){SendBase=yif(therearecurrentlynot-yet-acknowledgedsegments)starttimer}else{incrementcountofdupACKsreceivedforyif(countofdupACKsreceivedfory=3){resendsegmentwithsequencenumbery}

快速重傳算法:aduplicateACKforalreadyACKedsegmentfastretransmit90TCPACK的產(chǎn)生

[RFC1122,RFC2581]接收方的事件期望序號的報文段按序到達(dá).所有在期望序號以前的報文段都被確認(rèn)期望序號的報文段按序到達(dá).另一個按序報文段等待發(fā)送ACK收到一個失序的報文段,高于期望的序號,檢測到縫隙到達(dá)的報文段部分地或者完全地填充接收數(shù)據(jù)間隔TCP接收方行為延遲ACK.等到500ms看是否有下一個報文段,如果沒有,發(fā)送ACK立即發(fā)送單個累積ACK,確認(rèn)兩個有序的報文段立即發(fā)送重復(fù)ACK,指出期望的序號立即發(fā)送ACK,證實(shí)縫隙低端的報文段已經(jīng)收到91第三章提綱3.1運(yùn)輸層服務(wù)3.2多路復(fù)用和多路復(fù)用3.3無連接傳輸:UDP3.4可靠數(shù)據(jù)傳輸原理3.5面向連接傳輸:TCP數(shù)據(jù)段結(jié)構(gòu)可靠數(shù)據(jù)傳輸流量控制連接管理3.6擁塞控制原理3.7TCP擁塞控制92TCP流量控制TCP連接的接收邊有一個接收緩沖區(qū):速度匹配服務(wù):發(fā)送速率和接收應(yīng)用程序的提取速率匹配應(yīng)用程序可能從這個緩沖區(qū)讀出數(shù)據(jù)很慢發(fā)送方不能發(fā)送的太多太快,讓接收緩沖區(qū)溢出流量控制93TCP流控:如何工作(假設(shè)TCP接收方丟棄失序的報文段)流量控制使用接收窗口:接收緩沖區(qū)的剩余空間接收方在報文段中宣告接收窗口的剩余空間發(fā)送方限制沒有確認(rèn)的數(shù)據(jù)不超過接收窗口保證接收緩沖區(qū)不溢出94第三章提綱3.1運(yùn)輸層服務(wù)3.2多路復(fù)用和多路復(fù)用3.3無連接傳輸:UDP3.4可靠數(shù)據(jù)傳輸原理3.5面向連接傳輸:TCP數(shù)據(jù)段結(jié)構(gòu)可靠數(shù)據(jù)傳輸流量控制連接管理3.6擁塞控制原理3.7TCP擁塞控制95TCP連接管理回憶:

TCP在交換數(shù)據(jù)報文段之前在發(fā)送方和接收方之間建立連接初始化TCP變量:序號緩沖區(qū)流控信息如,接收窗口客戶:

連接發(fā)起者

SocketclientSocket=newSocket("hostname","portnumber");

服務(wù)器:

等待客戶聯(lián)系

SocketconnectionSocket=welcomeSocket.accept();三次握手協(xié)議96連接建立:三次握手Step1:

客戶發(fā)送TCPSYN報文段到服務(wù)器指定初始的序號沒有數(shù)據(jù)Step2:

服務(wù)器接收SYN,回復(fù)SYNACK報文段服務(wù)器分配緩沖區(qū)指定服務(wù)器的初始序號Step3:

客戶接收SYNACK,回復(fù)ACK報文段,可能包含數(shù)據(jù)SYN=1,seq=client_isnSYN=0,seq=client_isn+1,ack=server_isn1連接請求連接允許AB客戶服務(wù)器SYN=1,seq=server_isn,ack=client_isn197關(guān)閉連接:客戶關(guān)閉套接字:

clientSocket.close()Step1:

客戶發(fā)送TCPFIN控制報文段到服務(wù)器

Step2:

服務(wù)器接收FIN,回復(fù)ACK.半關(guān)閉連接,并發(fā)送FIN到客戶Step3:

客戶接收FIN,回復(fù)ACK.進(jìn)入“timedwait”等待結(jié)束時釋放連接資源Step4:

服務(wù)器接收ACK.連接關(guān)閉.clientFINserverACKACKFINclosecloseclosedtimedwait98TCP連接–客戶端有限自動機(jī)描述TCP客戶端狀態(tài)轉(zhuǎn)換圖99TCP連接-服務(wù)器端有限自動機(jī)描述TCP服務(wù)器端狀態(tài)轉(zhuǎn)換圖100第三章提綱3.1運(yùn)輸層服務(wù)3.2多路復(fù)用和多路復(fù)用3.3無連接傳輸:UDP3.4可靠數(shù)據(jù)傳輸原理3.5面向連接傳輸:TCP數(shù)據(jù)段結(jié)構(gòu)可靠數(shù)據(jù)傳輸流量控制連接管理3.6擁塞控制原理3.7TCP擁塞控制101擁塞控制原理原因:Toomanysourcessendingtoomuchdata

toofastfor

networktohandle(太多主機(jī)發(fā)送太多的數(shù)據(jù),速度太快以至于網(wǎng)絡(luò)來不及處理)表現(xiàn):丟失分組

-路由器的緩沖區(qū)溢出長時延

-在路由器的緩沖區(qū)排隊(duì)102擁塞的原因和代價:場景1–理想情況

假設(shè):兩個發(fā)送者,兩個接收者一個路由器,無限緩沖區(qū)不執(zhí)行重發(fā)鏈路帶寬為C每個主機(jī)最大可達(dá)吞吐量C/2,總的吞吐量為C擁塞時延在C/2達(dá)到無限大unlimitedsharedoutputlinkbuffersHostAlin:originaldataHostBloutlin:originaldata103擁塞的原因和代價:場景2

假設(shè):一個路由器,有限緩沖區(qū)發(fā)送方重發(fā)丟失的報文有限的共享式輸出鏈路緩存HostAλin:原始數(shù)據(jù)HostBλoutλ’in:原始數(shù)據(jù)加重發(fā)數(shù)據(jù)104擁塞的原因和代價:場景2情況a:總是情況b:僅當(dāng)數(shù)據(jù)丟失時才重發(fā):情況c:超時而沒有丟失的報文重發(fā),導(dǎo)致同樣的需要比更大的linlout=linlout>linloutR/2R/2linloutb.R/2R/2linlouta.R/2R/2linloutc.R/4R/3105問:

在和增加的時候什么會發(fā)生?擁塞的原因和代價:場景3

假設(shè):四個發(fā)送方多跳路徑超時/重發(fā)linlin有限共享輸出鏈路HostAHostDloutlin:原始數(shù)據(jù)l‘in:原始數(shù)據(jù)加重發(fā)數(shù)據(jù)HostCHostBR1R3R4R2106擁塞的原因和代價:場景3

當(dāng)分組沿路徑被丟失后,任何上游路由器的傳輸容量都被浪費(fèi)了!HostAHostBlout107擁塞控制的方法端到端擁塞控制:網(wǎng)絡(luò)層沒有為運(yùn)輸層擁塞控制提供顯式支持端系統(tǒng)必須觀察網(wǎng)絡(luò)行為,如分組丟失或延遲來推斷擁塞TCP采用的方法網(wǎng)絡(luò)輔助的擁塞控制:路由器給端系統(tǒng)提供顯式反饋單bit指示網(wǎng)絡(luò)擁塞(SNA,DECnet)ATM允許路由器顯式通知發(fā)送者輸出鏈路支持的傳輸速率108*情況分析:ATMABR擁塞控制(自學(xué))ABR:可用比特率:“彈性服務(wù)”

如果發(fā)送方通道“低載”

:發(fā)送方應(yīng)該利用有效帶寬如果發(fā)送方通道擁塞:發(fā)送方應(yīng)該調(diào)節(jié)到保證速率RM(資源管理)信元:發(fā)送方發(fā)送,點(diǎn)綴在數(shù)據(jù)信元中RM信元中的bit是交換機(jī)設(shè)置(網(wǎng)絡(luò)輔助)NIbit:

速率不要增加(輕度擁塞)CIbit:

擁塞指示接收方不改變RM信元的bit,將其返回給發(fā)送者

109情況分析:ATMABR擁塞控制RM信元的兩個字節(jié)的ER(明確速率)域擁塞的交換機(jī)可能降低信元中的ER值發(fā)送方的發(fā)送速率因此調(diào)整到通道支持的最低速率數(shù)據(jù)信元中的EFCI位:在擁塞的交換機(jī)中設(shè)置為1如果數(shù)據(jù)信元有EFCI,比RM先到,發(fā)送方設(shè)置

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論