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

下載本文檔

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

文檔簡(jiǎn)介

1、 1第 3 章 運(yùn)輸層主要內(nèi)容:運(yùn)輸層服務(wù)運(yùn)輸層和網(wǎng)絡(luò)層的關(guān)系兩個(gè)實(shí)體如何可靠地通信擁塞控制技術(shù) 位于應(yīng)用層和網(wǎng)絡(luò)層之間。 為主機(jī)上的應(yīng)用進(jìn)程提供直接的通信服務(wù)。 接受網(wǎng)絡(luò)層提供的服務(wù)應(yīng)用層運(yùn)輸層網(wǎng)絡(luò)層鏈路層物理層 23.1 運(yùn)輸層服務(wù)3.2 復(fù)用與分解3.3 無(wú)連接傳輸: UDP3.4 可靠數(shù)據(jù)傳輸?shù)脑?.5 面向連接的傳輸: TCP3.6 擁塞控制的原理3.7 TCP擁塞控制小結(jié)主要章節(jié) 33.1 運(yùn)輸層服務(wù)運(yùn)輸層協(xié)議:為運(yùn)行在不同主機(jī)上的應(yīng)用進(jìn)程提供邏輯通信功能(主機(jī)好像直接相連)。即端到端傳輸。進(jìn)程之間使用邏輯通信功能彼此發(fā)送報(bào)文,無(wú)需考慮具體物理鏈路。應(yīng)用層運(yùn)輸層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物

2、理層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層應(yīng)用層運(yùn)輸層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層邏輯端到端傳輸進(jìn)程進(jìn)程 4運(yùn)輸層協(xié)議運(yùn)行在端系統(tǒng),不在路由器中。發(fā)送方:將應(yīng)用進(jìn)程的報(bào)文劃分成若干段,封裝后傳給網(wǎng)絡(luò)層。接收方:將網(wǎng)絡(luò)層上傳的報(bào)文段,重新裝配為報(bào)文,傳向應(yīng)用層。路由器只根據(jù)網(wǎng)絡(luò)層字段而動(dòng)作。應(yīng)用層運(yùn)輸層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層應(yīng)用層運(yùn)輸層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層邏輯端到端傳輸3.1.1 運(yùn)輸層和網(wǎng)絡(luò)層的關(guān)系3.1.2 運(yùn)輸層概

3、述 53.1.1 運(yùn)輸層和網(wǎng)絡(luò)層的關(guān)系 運(yùn)輸層位于網(wǎng)絡(luò)層上。網(wǎng)絡(luò)層提供主機(jī)之間的邏輯通信。運(yùn)輸層為運(yùn)行在不同主機(jī)上的進(jìn)程之間提供邏輯通信;依賴、強(qiáng)化網(wǎng)絡(luò)層服務(wù)應(yīng)用層運(yùn)輸層網(wǎng)絡(luò)層鏈路層物理層 6家庭通信類比兩個(gè)家庭的多個(gè)堂兄弟姐妹之間互相通信。每家有一個(gè)孩子負(fù)責(zé)收發(fā)郵件,分別為Ann和Bill。每封信通過(guò)傳統(tǒng)的郵政服務(wù)發(fā)送。郵政服務(wù)為兩個(gè)家庭間提供邏輯通信:將信件從一家送往另一家。Ann和Bill為堂兄弟姐妹之間提供邏輯通信:向兄弟姐妹收取或交付信件。Ann和Bill是端到端交付過(guò)程的一部分(即端系統(tǒng)部分),是郵件服務(wù)。 7與網(wǎng)絡(luò)術(shù)語(yǔ)對(duì)比 應(yīng)用報(bào)文 = 信進(jìn)程 = 多個(gè)孩子運(yùn)輸協(xié)議 = Ann和

4、Bill網(wǎng)絡(luò)層協(xié)議 = 郵政服務(wù)(運(yùn)輸車)應(yīng)用層運(yùn)輸層網(wǎng)絡(luò)層鏈路層物理層 主機(jī) = 家庭 8說(shuō)明 Ann和Bill 在各自家里工作,不參與郵件分揀及傳遞:運(yùn)輸層協(xié)議工作在端系統(tǒng)中,將來(lái)自應(yīng)用進(jìn)程的報(bào)文移動(dòng)到網(wǎng)絡(luò)邊界(網(wǎng)絡(luò)層),不考慮報(bào)文在網(wǎng)絡(luò)核心如何傳遞;中間路由器既不處理也不識(shí)別運(yùn)輸層加在報(bào)文上的任何信息。 Ann和Bill 外出,其他人接替工作,服務(wù)方式、效果可能不同。 計(jì)算機(jī)網(wǎng)絡(luò)中有多種運(yùn)輸層協(xié)議,每種協(xié)議為應(yīng)用程序提供不同的服務(wù)模型。 9說(shuō)明 Ann和Bill能夠提供的服務(wù)要受到郵政服務(wù)提供服務(wù)的限制。 運(yùn)輸層協(xié)議所能提供的服務(wù)受底層網(wǎng)絡(luò)協(xié)議服務(wù)模型的限制。如,時(shí)延和帶寬保證。 某些特

5、定服務(wù)既使底層網(wǎng)絡(luò)協(xié)議不提供,運(yùn)輸層協(xié)議也能提供。 如,當(dāng)?shù)讓泳W(wǎng)絡(luò)協(xié)議是不可靠的(分組丟失、混亂和重復(fù)),運(yùn)輸層同樣能為應(yīng)用程序提供可靠的傳輸服務(wù)。 103.1.2 因特網(wǎng)運(yùn)輸層概述因特網(wǎng)運(yùn)輸層協(xié)議:UDP(用戶數(shù)據(jù)報(bào)協(xié)議):為應(yīng)用程序提供不可靠、無(wú)連接的服務(wù)。TCP(傳輸控制協(xié)議):為應(yīng)用程序提供可靠的、面向連接的服務(wù)。術(shù)語(yǔ):報(bào)文段(segment):運(yùn)輸層分組。數(shù)據(jù)報(bào)(datagram):網(wǎng)絡(luò)層分組。 11因特網(wǎng)網(wǎng)絡(luò)層IP(網(wǎng)際協(xié)議):為主機(jī)之間提供邏輯通信。IP服務(wù)模型:盡力交付服務(wù)。 盡最大的努力在通信的主機(jī)之間交付報(bào)文段,但不保證按序交付或數(shù)據(jù)的完整性。屬于不可靠服務(wù)。IP地址:主機(jī)

6、的網(wǎng)絡(luò)層地址。每臺(tái)主機(jī)有一個(gè)。 12UDP和TCP的服務(wù)模型將兩個(gè)端系統(tǒng)間IP的交付服務(wù)擴(kuò)展為運(yùn)行在兩個(gè)端系統(tǒng)上的進(jìn)程之間的交付服務(wù)。 即主機(jī)間交付擴(kuò)展到進(jìn)程間的交付。可提供完整性檢查。UDP是不可靠服務(wù)。TCP提供可靠數(shù)據(jù)傳輸及擁塞控制。 運(yùn)輸層的多路復(fù)用與分解 133.2 多路復(fù)用與分解 將網(wǎng)絡(luò)層所提供的主機(jī)到主機(jī)交付服務(wù)擴(kuò)展到在主機(jī)上運(yùn)行的應(yīng)用程序到應(yīng)用程序的交付服務(wù)。 主機(jī)上可以有多個(gè)應(yīng)用進(jìn)程運(yùn)行。 當(dāng)運(yùn)輸層從底層網(wǎng)絡(luò)接收數(shù)據(jù)時(shí),應(yīng)能正確地定向到相應(yīng)的一個(gè)進(jìn)程(套接字)HTTPTelnetFTPTelnet運(yùn)輸層數(shù)據(jù)報(bào) 14套接字從網(wǎng)絡(luò)向進(jìn)程傳遞數(shù)據(jù),或從進(jìn)程向網(wǎng)絡(luò)傳遞數(shù)據(jù)的門(mén)戶。運(yùn)輸

7、層和應(yīng)用進(jìn)程通過(guò)套接字來(lái)傳遞數(shù)據(jù)。主機(jī)上的套接字可以有多個(gè),每個(gè)套接字都有惟一的標(biāo)識(shí)符(格式取決于UDP或TCP)。 應(yīng)用層運(yùn)輸層網(wǎng)絡(luò)層鏈路層物理層P2P1= 進(jìn)程= 套接字 15多路復(fù)用與分解過(guò)程多路復(fù)用(發(fā)送主機(jī)): 從不同套接字收集數(shù)據(jù)塊,并為每個(gè)數(shù)據(jù)塊封裝上首部信息,生成報(bào)文段,傳遞到網(wǎng)絡(luò)層。多路分解(接收主機(jī)): 將報(bào)文段中的數(shù)據(jù)交付到正確的套接字。即接收方運(yùn)輸層從報(bào)文段的多個(gè)字段中,識(shí)別出套接字,并將報(bào)文段定向到該套接字。例圖3-2,進(jìn)程P3向進(jìn)程P1發(fā)送。 16應(yīng)用層運(yùn)輸層網(wǎng)絡(luò)層鏈路層物理層P1應(yīng)用層運(yùn)輸層網(wǎng)絡(luò)層鏈路層物理層應(yīng)用層運(yùn)輸層network鏈路層物理層P2P3P4P1主

8、機(jī)1主機(jī)2主機(jī)3 主機(jī)1:運(yùn)輸層收集套接字輸出的數(shù)據(jù),形成運(yùn)輸層報(bào)文段,將其傳遞給下面的網(wǎng)絡(luò)層(多路復(fù)用) 主機(jī)2:運(yùn)輸層將從其網(wǎng)絡(luò)層收到的報(bào)文段多路分解后通過(guò)相應(yīng)的套接字交給其上的P1進(jìn)程。例圖3-2,進(jìn)程P3向進(jìn)程P1發(fā)送。 17目的主機(jī)的分解過(guò)程當(dāng)報(bào)文段到達(dá)主機(jī)時(shí),運(yùn)輸層檢查報(bào)文段中的目的端口號(hào),將其定向到相應(yīng)的套接字。報(bào)文段中的數(shù)據(jù)通過(guò)套接字進(jìn)入其所連接的進(jìn)程。 18報(bào)文段格式端口號(hào):主機(jī)上的每個(gè)套接字分配一個(gè)端口號(hào)。16位(065535)。01023為周知端口號(hào),保留給固定的應(yīng)用程序。開(kāi)發(fā)一個(gè)新應(yīng)用時(shí),需選擇一個(gè)端口號(hào)。源端口 #目的端口 #32 bits應(yīng)用數(shù)據(jù)(報(bào)文)其他首部字段

9、TCP/UDP 段格式 191、無(wú)連接的多路復(fù)用與分解創(chuàng)建UDP套接字:兩種方法自動(dòng)為該套接字分配一個(gè)端口號(hào)。如 DatagramSocket mySocke = new DatagramSocket() 從102465535的號(hào)碼中分配一個(gè)主機(jī)尚未使用的UDP端口號(hào)。直接為套接字指定一個(gè)特定的端口號(hào)。 如 DatagramSocket mySocke = new DatagramSocket (19157) 客戶機(jī)端:自動(dòng)分配端口號(hào)服務(wù)器端:分配一個(gè)特定的端口號(hào)。若使用“周知協(xié)議”,必須分配一個(gè)相應(yīng)的周知端口號(hào)。 20發(fā)送方多路復(fù)用: 運(yùn)輸層創(chuàng)建一個(gè)報(bào)文段(數(shù)據(jù)、源端口號(hào)、目的端口號(hào)) 傳遞

10、到網(wǎng)絡(luò)層; 網(wǎng)絡(luò)層將該報(bào)文段封裝到IP報(bào)文中,并盡力交付給接收主機(jī)接收方多路分解:UDP報(bào)文段到達(dá)接收方通過(guò)報(bào)文段中的目的端口號(hào),將報(bào)文段定向(多路分解)到相應(yīng)的套接字并交給相應(yīng)進(jìn)程。 21例ClientIP:BP2client IP: AP1P1P3serverIP: CSP: 6428DP: 9157SP: 6428DP: 5775SP: 5775DP: 6428SP 提供 “返回地址”915764285775兩對(duì)通信:AC、BCSP: 9157DP: 6428 22說(shuō)明UDP套接字組成(標(biāo)識(shí)目的套接字): 二元組(目的IP地址,目的端口號(hào))具有不同源套接字,但具有相同目的套接字的UDP報(bào)

11、文段,接收端可通過(guò)相同套接字定向到相同的目的進(jìn)程(多對(duì)一)。源端口號(hào)的用途:目的方回發(fā)報(bào)文段中的“返回地址”。 232、面向連接的多路復(fù)用與分解TCP套接字(標(biāo)識(shí)目的套接字) : 四元組 (源IP地址,源端口號(hào),目的IP地址,目的端口號(hào))目的主機(jī)使用全部四個(gè)值來(lái)將收到的TCP報(bào)文段定向(分解)到相應(yīng)的套接字。兩個(gè)具有不同源套接字的TCP報(bào)文段,將被定向到兩個(gè)不同的套接字。 24TCP連接及分解服務(wù)器應(yīng)用程序在某個(gè)端口上等待TCP客戶機(jī)連接建立請(qǐng)求。如 ServerSocket welcomeSocke = new serverSocket(6789)TCP客戶機(jī)在相應(yīng)端口上產(chǎn)生一個(gè)連接建立請(qǐng)求

12、報(bào)文段。 Socket clientSocke = new Socket (serverHostName,6789)當(dāng)服務(wù)器收到客戶機(jī)的連接請(qǐng)求后,通知服務(wù)器進(jìn)程,并創(chuàng)建一個(gè)連接套接字。如, Socket connectionSocket = WelcomeSocket.accept()連接套接字通過(guò)4個(gè)值來(lái)標(biāo)識(shí)。TCP連接完成后,客戶機(jī)和服務(wù)器可相互發(fā)送數(shù)據(jù)。當(dāng)一個(gè)TCP報(bào)文段到達(dá)主機(jī)時(shí),根據(jù)4個(gè)字段值的來(lái)定向(多路分解)到相應(yīng)的套接字。 25說(shuō)明一個(gè)web服務(wù)器可以同時(shí)與多個(gè)客戶機(jī)連接,并產(chǎn)生多個(gè)進(jìn)程。每個(gè)進(jìn)程都有自己的連接套接字,通過(guò)這些套接字可以收到HTTP請(qǐng)求和發(fā)送HTTP響應(yīng)。高性

13、能Web服務(wù)器通常只使用一個(gè)進(jìn)程,可以為每個(gè)新連接創(chuàng)建一個(gè)新線程(一個(gè)輕量級(jí)的子進(jìn)程)。 26例客戶機(jī)IP:CP1客戶機(jī) IP: AP1P2P4服務(wù)器IP: BSP: 9157DP: 80SP: 9157DP: 80P5P6P3D-IP:BS-IP: AD-IP:BS-IP: CSP: 5775DP: 80D-IP:BS-IP: C主機(jī)C向服務(wù)器B發(fā)起兩個(gè)HTTP會(huì)話;主機(jī)A向服務(wù)器B發(fā)起一個(gè)HTTP會(huì)話。產(chǎn)生三個(gè)進(jìn)程 27例:多線程Web服務(wù)器客戶機(jī)IP:BP1客戶機(jī) IP: AP1P2服務(wù)器IP: CSP: 9157DP: 80SP: 9157DP: 80P4P3D-IP:CS-IP: A

14、D-IP:CS-IP: BSP: 5775DP: 80D-IP:CS-IP: B一個(gè)進(jìn)程三個(gè)線程 283.3 無(wú)連接運(yùn)輸:UDP“盡力而為”服務(wù),UDP段可能:丟包對(duì)應(yīng)用程序交付失序無(wú)連接:在UDP發(fā)送方和接收方之間無(wú)握手每個(gè)UDP段獨(dú)立處理 29使用 UDP協(xié)議的原因無(wú)連接創(chuàng)建:減少時(shí)延。簡(jiǎn)單:無(wú)連接段首部?。簜鬏旈_(kāi)銷小。無(wú)擁塞控制: UDP能夠盡可能快地傳輸。 30主要應(yīng)用如圖3-6。流式多媒體DNSSNMP 經(jīng)UDP的可靠傳輸 :在應(yīng)用層增加可靠性,實(shí)現(xiàn)特定的差錯(cuò)恢復(fù)! 313.3.1 UDP報(bào)文段結(jié)構(gòu)源端口#目的端口#32 bits應(yīng)用數(shù)據(jù)(報(bào)文)UDP 段格式長(zhǎng)度檢查和UDP段的長(zhǎng)度

15、,包括首部,以字節(jié)計(jì) 323.3.2 UDP檢查和發(fā)送方:將數(shù)據(jù)的每?jī)蓚€(gè)字節(jié)當(dāng)作一個(gè)16位的整數(shù),可分成若干整數(shù);將所有16 位的整數(shù)求和對(duì)得到的和逐位取反,作為檢查和,放在報(bào)文段首部,一起發(fā)送。 用于檢查所傳輸?shù)膱?bào)文段中的比特差錯(cuò) (如比特翻轉(zhuǎn))。 接收方:對(duì)接收到的信息 (不包括檢查和)求和核對(duì)計(jì)算的檢查和并取反是否等于檢查和字段的值對(duì)接收到的信息 (包括檢查和)求和全“1”:數(shù)據(jù)無(wú)錯(cuò);其中有“0”:數(shù)據(jù)出錯(cuò) 33 0 1 1 0 0 1 1 0 0 1 1 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 0 0 1 1 1 1 0 0 0 0

16、1 1 0 0 1 0 1 0 0 1 0 1 0 1 1 0 0 0 0 0 1 0 1 0 0 1 0 1 0 1 1 0 0 0 0 1 0 例子注意作加法時(shí),最高位的進(jìn)位要回加到結(jié)果中。例,有三個(gè)16 比特的字:回卷 和檢查和(取反)無(wú)差錯(cuò),和為: 1 0 1 1 0 1 0 1 0 0 1 1 1 1 0 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 343.4 可靠數(shù)據(jù)傳輸?shù)脑砜煽繑?shù)據(jù)傳輸?shù)膯?wèn)題在運(yùn)輸層、鏈路層及應(yīng)用層都會(huì)出現(xiàn)。最重要的10個(gè)網(wǎng)絡(luò)主題中之一!可靠數(shù)據(jù)傳輸?shù)目蚣?,圖3-8。 35提供給上層的服務(wù)數(shù)據(jù)通過(guò)一條可靠的信道傳輸。即傳輸?shù)臄?shù)據(jù)不出錯(cuò)、丟失

17、,并按照發(fā)送順序傳送。應(yīng)用層網(wǎng)絡(luò)層運(yùn)輸層可靠傳輸 36服務(wù)實(shí)現(xiàn)設(shè)計(jì)可靠數(shù)據(jù)傳輸協(xié)議低層信道不太可靠,通過(guò)使用可靠數(shù)據(jù)傳輸協(xié)議來(lái)保證可靠的數(shù)據(jù)傳輸。分別設(shè)計(jì)可靠數(shù)據(jù)傳輸協(xié)議的發(fā)送方和接收方。網(wǎng)絡(luò)層運(yùn)輸層不可靠傳輸 37發(fā)送方:通過(guò)rdt_send()函數(shù)調(diào)用可靠數(shù)據(jù)傳輸協(xié)議的發(fā)送方(rdt表示“可靠數(shù)據(jù)傳輸”協(xié)議)。udt_send()用來(lái)發(fā)送分組給對(duì)方(udt表示“不可靠數(shù)據(jù)傳輸”)。接收方:當(dāng)一個(gè)分組從信道抵達(dá)時(shí),調(diào)用rdt_rcv()接收;調(diào)用deliver_data()將數(shù)據(jù)交付給上層。rdt_send()udt_send()rdt_rcv()deliver_data() 38說(shuō)明只考慮

18、單向數(shù)據(jù)傳輸,數(shù)據(jù)傳輸從發(fā)送方到接收方發(fā)送方和接收方可以來(lái)回交換控制分組。使用有限狀態(tài)機(jī) (FSM)來(lái)定義發(fā)送方和接收方。3.4.1 構(gòu)造可靠的數(shù)據(jù)傳輸協(xié)議3.4.2 流水線可靠數(shù)據(jù)傳輸協(xié)議3.4.3 Go-Back-N(GBN)3.4.4 選擇性重傳 (SR)Finite State Machine 39有限狀態(tài)機(jī) (FSM)箭頭:表示協(xié)議從一個(gè)狀態(tài)變遷到另一個(gè)狀態(tài)。橫線上方:表示引起變遷的事件;橫線下方:表示事件發(fā)生時(shí)所采取的動(dòng)作;:表示沒(méi)有事件或未采取動(dòng)作虛線:表示FSM的初始狀態(tài)。狀態(tài)1狀態(tài)2引起狀態(tài)變遷的事件狀態(tài)變遷所采取的行動(dòng)狀態(tài): 當(dāng)位于這個(gè)“狀態(tài)時(shí)”,下個(gè)狀態(tài)惟一地由下個(gè)事件決

19、定事件動(dòng)作 403.4.1 構(gòu)造可靠的數(shù)據(jù)傳輸協(xié)議完全可靠信道上的可靠數(shù)據(jù)傳輸具有比特差錯(cuò)信道上的可靠的數(shù)據(jù)傳輸 具有比特差錯(cuò)的丟包信道上的可靠的數(shù)據(jù)傳輸 停止等待協(xié)議流程 411、經(jīng)可靠信道上的可靠數(shù)據(jù)傳輸:rdt 1.0假設(shè):底層信道完全可靠:數(shù)據(jù)傳送不出錯(cuò)不丟失;收發(fā)雙方速率匹配:接收方接收數(shù)據(jù)的速率和發(fā)送方發(fā)送數(shù)據(jù)一樣快。所有的分組都是從發(fā)送方流向接收方。接收方不需反饋信息給發(fā)送方,因?yàn)椴粫?huì)發(fā)生任何差錯(cuò)。rdt1.0發(fā)送和接收方的有限狀態(tài)機(jī) FSM,如圖3-9。 42發(fā)送方:將數(shù)據(jù)發(fā)向底層信道 從上層接受數(shù)據(jù)rdt_send(data) 封裝成分組make_pkt(data) 將分組發(fā)

20、送到信道中udt_send(packet)接收方:從底層信道讀取數(shù)據(jù) 從底層信道接收一個(gè)分組rdt_rcv(packet) 解封取出數(shù)據(jù)extract(packet,data) 數(shù)據(jù)傳給上層deliver_data(data)等待上層調(diào)用packet = make_pkt(data)udt_send(packet)rdt_send(data)extract (packet,data)deliver_data(data)rdt_rcv(packet)發(fā)送方接收方等待下層調(diào)用封裝解封上傳 432、比特差錯(cuò)信道上的可靠數(shù)據(jù)傳輸:rdt2.0信道不完全可靠,有可能產(chǎn)生比特錯(cuò),但不丟包所有分組按發(fā)送順序

21、被接收(有些比特可能出錯(cuò))。類比例:打電話傳遞一條長(zhǎng)信息,收聽(tīng)者: 聽(tīng)清每句話后說(shuō)“OK”(肯定確認(rèn)); 聽(tīng)到不清楚的話,要求對(duì)方重復(fù)說(shuō)“請(qǐng)重復(fù)一遍”(否定確認(rèn))。如何從錯(cuò)誤中恢復(fù)? 44肯定、否定確認(rèn)作用肯定確認(rèn): 告訴發(fā)送方內(nèi)容被正確接收。否定確認(rèn):告訴發(fā)送方內(nèi)容出錯(cuò)需要重傳。 基于重傳機(jī)制的可靠數(shù)據(jù)傳輸協(xié)議稱為自動(dòng)重傳請(qǐng)求協(xié)議ARQ(Automatic Repeat request) 45ARQ協(xié)議處理比特差錯(cuò)機(jī)制差錯(cuò)檢測(cè): 使接收方檢測(cè)出是否出現(xiàn)比特差錯(cuò)。如采用差錯(cuò)檢測(cè)和糾錯(cuò)技術(shù),使接收方能夠進(jìn)行差錯(cuò)檢測(cè)并糾正。需要給分組附加額外的比特一起發(fā)送。如rdt2.0協(xié)議,分組增加檢驗(yàn)和che

22、cksum字段。 46ARQ協(xié)議處理比特差錯(cuò)機(jī)制接收方反饋: 使發(fā)送方知道發(fā)送的分組是否被正確接收。通過(guò)接收方回送肯定確認(rèn)(ACK)和否定確認(rèn)(NAK) 分組完成。如rdt2.0協(xié)議,接收方將向發(fā)送方回送ACK(“1”比特)或NAK(“0”比特)分組。 重傳: 接收方收到有差錯(cuò)的分組時(shí),通知發(fā)送方重傳該分組。 47rdt_rcv(rcvpkt) & isNAK(rcvpkt) 等待來(lái)自上面的調(diào)用snkpkt = make_pkt(data, checksum)udt_send(sndpkt)rdt_rcv(rcvpkt) & isACK(rcvpkt)udt_send(sndpkt) 等待AC

23、K 或NAK發(fā)送方rdt_send(data)L等待上層數(shù)據(jù) 上層數(shù)據(jù)傳來(lái)rdt_send(data) 計(jì)算校驗(yàn)和,封裝成分組make_pkt(data,checksum) 發(fā)送分組udt_send(sndpkt)收到ACK分組 rdt_rcv(rcvpkt) & is ACK(rcvpkt) 返回初始狀態(tài) 收到NAK分組rdt_rcv(rcvpkt) & is NAK(rcvpkt) 重傳上次發(fā)送的分組udt_send(sndpkt) 等待ACK或NAKrdt2.0的FSM采用了差錯(cuò)檢測(cè)、肯定確認(rèn)與否定確認(rèn)及重傳。 48說(shuō)明 當(dāng)發(fā)送方在等待ACK或NAK狀態(tài)時(shí),不能從上層得到數(shù)據(jù),直到收到A

24、CK離開(kāi)該狀態(tài)。 發(fā)送方在收到ACK分組之前,不會(huì)發(fā)送任何新數(shù)據(jù),直到收到ACK分組為止。 rdt2.0協(xié)議稱為停等協(xié)議。停等(stop-and-wait)協(xié)議:發(fā)送方發(fā)完一個(gè)分組后停止,等待對(duì)方回答。 49接收方 從底層接收一個(gè)分組,檢查校驗(yàn)和分組出錯(cuò) rdt_rcv(rcvpkt) & corrupt(rcvpkt) 丟棄分組 返回NAK 分組udt_send(NAK)分組無(wú)錯(cuò) rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) 從分組中取出數(shù)據(jù)extract(rcvpkt,data) 將數(shù)據(jù)傳給上層deliver_data(data) 返回ACK 分組udt_sen

25、d(ACK)extract(rcvpkt,data)deliver_data(data)udt_send(ACK)rdt_rcv(rcvpkt) & notcorrupt(rcvpkt)udt_send(NAK)rdt_rcv(rcvpkt) & corrupt(rcvpkt) 等待來(lái)自下面的調(diào)用分組出錯(cuò)分組無(wú)錯(cuò) 50rdt2.0: 無(wú)差錯(cuò)時(shí)的操作 等待來(lái)自上面的調(diào)用snkpkt = make_pkt(data, checksum)udt_send(sndpkt)extract(rcvpkt,data)deliver_data(data)udt_send(ACK)rdt_rcv(rcvpkt)

26、 & notcorrupt(rcvpkt)rdt_rcv(rcvpkt) & isACK(rcvpkt)udt_send(sndpkt)rdt_rcv(rcvpkt) & isNAK(rcvpkt)udt_send(NAK)rdt_rcv(rcvpkt) & corrupt(rcvpkt) 等待 ACK 或NAK 等待來(lái)自下面的調(diào)用rdt_send(data)L 51rdt2.0: 有差錯(cuò)時(shí)的情況 等待來(lái)自上面的調(diào)用snkpkt = make_pkt(data, checksum)udt_send(sndpkt)extract(rcvpkt,data)deliver_data(data)udt

27、_send(ACK)rdt_rcv(rcvpkt) & notcorrupt(rcvpkt)rdt_rcv(rcvpkt) & isACK(rcvpkt)udt_send(sndpkt)rdt_rcv(rcvpkt) & isNAK(rcvpkt)udt_send(NAK)rdt_rcv(rcvpkt) & corrupt(rcvpkt)等待ACK 或NAK 等待來(lái)自下面的調(diào)用rdt_send(data)L 52rdt2.0協(xié)議特點(diǎn)可以解決數(shù)據(jù)分組出錯(cuò)的問(wèn)題。缺陷: 若返回的ACK或NAK分組受損,發(fā)送方無(wú)法知道接收方是否正確接收了上一塊數(shù)據(jù)。 53處理受損ACK和NAK的可能方法 收發(fā)雙方互

28、不理解對(duì)方回答的含義使對(duì)話不能正常進(jìn)行。解決方法: 增加足夠的檢驗(yàn)和比特(可糾錯(cuò)):使接收方不僅可以檢測(cè)差錯(cuò),還可進(jìn)行恢復(fù)。適用于會(huì)產(chǎn)生差錯(cuò)但不丟失分組的信道。當(dāng)發(fā)送方收到含糊不清的ACK或NAK分組時(shí): 只簡(jiǎn)單地重發(fā)當(dāng)前數(shù)據(jù)分組。 產(chǎn)生冗余分組(duplicate packets):同一個(gè)分組收到兩次。接收方無(wú)法知道收到的是新的分組還是重傳的分組。 54解決冗余分組的方法 給分組添加一個(gè)序號(hào)字段。發(fā)送方:給發(fā)送的數(shù)據(jù)分組編號(hào),并將其序號(hào)放入“序號(hào)字段”。 每發(fā)送一個(gè)新的分組“序號(hào)加1”。接收方:通過(guò)檢查序號(hào),確定收到的分組是不是重復(fù)傳送。 按序號(hào)接收,若本次接收到的分組序號(hào)與前一次收到的分組

29、的序號(hào)相同,即為重復(fù)分組,將該重復(fù)分組丟棄。序號(hào)數(shù)據(jù) 55序號(hào)位數(shù)選擇停等協(xié)議:只需用一個(gè)比特,即“0”和“1”兩種不同的序號(hào)。 序號(hào)通過(guò)模2運(yùn)算向前移動(dòng),可以區(qū)分前后相鄰的兩幀。0、1、0、1、說(shuō)明:ACK和NAK分組不需要指明要確認(rèn)的序號(hào)。因?yàn)榧僭O(shè)信道不丟失分組。發(fā)送方知道所接收的ACK和NAK分組是對(duì)最近發(fā)送分組的響應(yīng)。 56rdt2.1協(xié)議FSM rdt2.0的改進(jìn),可處理重復(fù)分組。如圖3-11和3-12。指出正發(fā)送或準(zhǔn)備接收的分組的序號(hào)。發(fā)送或期望接收0號(hào)分組的狀態(tài)中的動(dòng)作與發(fā)送或期望接收1號(hào)分組的狀態(tài)中的動(dòng)作相似,只是序號(hào)處理方法不同。使用從接收方到發(fā)送方的肯定和否定確認(rèn)。 57收

30、到錯(cuò)誤分組或NAKrdt2.1: 發(fā)送方, 處理受損的ACK/NAK等待來(lái)自上面的調(diào)用0sndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)rdt_send(data)等待 ACK 或 NAK 0udt_send(sndpkt)rdt_rcv(rcvpkt) & ( corrupt(rcvpkt) |isNAK(rcvpkt) )sndpkt = make_pkt(1, data, checksum)udt_send(sndpkt)rdt_send(data)rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & isA

31、CK(rcvpkt) udt_send(sndpkt)rdt_rcv(rcvpkt) & ( corrupt(rcvpkt) |isNAK(rcvpkt) )rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & isACK(rcvpkt) 等待來(lái)自上面的調(diào)用1等待 ACK 或NAK 1LL上層取數(shù) 發(fā)0# 分組上層取數(shù) 發(fā)1# 分組收到錯(cuò)誤分組或NAK重發(fā)1#收到ACK收到ACK重發(fā)0# 58rdt2.1: 接收方收到受損的分組:丟棄,并回發(fā)一個(gè)否定確認(rèn)(NAK )。收到亂序的分組:是重復(fù)分組,丟棄,并回發(fā)一個(gè)肯定確認(rèn)( ACK ) 。 591#無(wú)錯(cuò)對(duì)序取數(shù)據(jù)發(fā)ACK0

32、#無(wú)錯(cuò)對(duì)序取數(shù)據(jù)發(fā)ACKrdt2.1: 接收方等待來(lái)自下面的調(diào)用0sndpkt = make_pkt(NAK, chksum)udt_send(sndpkt)rdt_rcv(rcvpkt) & not corrupt(rcvpkt) & has_seq0(rcvpkt)rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & has_seq1(rcvpkt) extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(ACK, chksum)udt_send(sndpkt)等待來(lái)自下面的調(diào)用1rdt_rcv(rcvpkt)

33、 & notcorrupt(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) & not corrupt(rcvpkt) & has_seq1(rcvpkt)rdt_rcv(rcvpkt) & (corrupt(rcvpkt)sndpk

34、t = make_pkt(ACK, chksum)udt_send(sndpkt)sndpkt = make_pkt(NAK, chksum)udt_send(sndpkt)0#出錯(cuò)丟棄發(fā)NAK1#出錯(cuò)丟棄發(fā)NAK0#無(wú)錯(cuò),失序(由于發(fā)送的ACK出錯(cuò)導(dǎo)致發(fā)送方重發(fā))丟棄(重復(fù)分組)發(fā)ACK1#無(wú)錯(cuò),失序(由于發(fā)送的ACK出錯(cuò)導(dǎo)致發(fā)送方重發(fā))丟棄(重復(fù)分組)發(fā)ACK 60進(jìn)一步改進(jìn)接收方收到受損的分組時(shí),丟棄,不發(fā)送NAK,改為發(fā)送一個(gè)對(duì)前一個(gè)正確接收分組的ACK。發(fā)送方接收到對(duì)同一個(gè)分組的兩個(gè)ACK(接收冗余ACK)后,可知道接收方?jīng)]有正確接收到跟在被確認(rèn)兩次的分組后面的分組。rdt2.2實(shí)現(xiàn)

35、無(wú)NAK的可靠數(shù)據(jù)傳輸;rdt2.2與rdt2.1區(qū)別:接收方回發(fā)帶確認(rèn)號(hào)的ACK, 發(fā)方: isACK(rcvpkt,0/1) 收方: make_pkt(ACK,0/1,checksum) 61rdt2.2: 發(fā)送方上層取數(shù)發(fā)0# 分組收到錯(cuò)誤分組或ACK1重發(fā)0#收到ACK0上層取數(shù) 發(fā)1# 分組收到錯(cuò)誤分組或ACK0重發(fā)1#收到ACK1等待來(lái)自上層的調(diào)用0等待來(lái)自上層的調(diào)用1等待ACK0等待ACK1 62rdt2.2: 接收方0#正確取數(shù)據(jù)發(fā)ACK01#錯(cuò)或失序丟棄發(fā)ACK01#正確取數(shù)據(jù)發(fā)ACK10#錯(cuò)或失序丟棄發(fā)ACK1等待來(lái)自下層的0等待來(lái)自下層的1會(huì)出現(xiàn)bug 633、具有比特差

36、錯(cuò)的丟包信道上的可靠的數(shù)據(jù)傳輸:rdt3.0會(huì)出現(xiàn)比特差錯(cuò):會(huì)丟包:發(fā)送的數(shù)據(jù)分組丟失,或接收方回發(fā)的ACK丟失。 64發(fā)送方如何發(fā)現(xiàn)丟包及如何處理超時(shí)重發(fā):由發(fā)送方負(fù)責(zé)檢測(cè)丟包和恢復(fù),即 發(fā)送方發(fā)送一個(gè)數(shù)據(jù)分組后,等待一定時(shí)間,如果該段時(shí)間內(nèi)沒(méi)有收到ACK,則重傳分組。時(shí)間選擇:通常為“從發(fā)送方發(fā)出分組到收到接收方應(yīng)答所需的平均時(shí)間(RTT+接收方處理時(shí)延)”。 產(chǎn)生冗余分組:一個(gè)分組在網(wǎng)絡(luò)中經(jīng)歷了一個(gè)特別大的時(shí)延,使發(fā)送方超時(shí)重傳(該數(shù)據(jù)分組或ACK并未丟失),可通過(guò)序號(hào)解決(rdt2.2已解決)。 65重傳的實(shí)現(xiàn)設(shè)置一個(gè)“遞減(倒)計(jì)數(shù)定時(shí)器”,給定時(shí)間過(guò)期后,中斷發(fā)送方。要求發(fā)送方:每

37、發(fā)送一個(gè)分組(包括第一次和重發(fā)的分組),啟動(dòng)一個(gè)定時(shí)器;響應(yīng)定時(shí)器中斷:采取適當(dāng)?shù)膭?dòng)作;終止定時(shí)器。 66收到ACK 1停定時(shí)超時(shí)重發(fā)0#定時(shí)rdt3.0發(fā)送方sndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)start_timerrdt_send(data)等待 ACK0rdt_rcv(rcvpkt) & ( corrupt(rcvpkt) |isACK(rcvpkt,1) )等待來(lái)自上面的調(diào)用1sndpkt = make_pkt(1, data, checksum)udt_send(sndpkt)start_timerrdt_send(

38、data)rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & isACK(rcvpkt,0) rdt_rcv(rcvpkt) & ( corrupt(rcvpkt) |isACK(rcvpkt,0) )rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & isACK(rcvpkt,1) stop_timerstop_timerudt_send(sndpkt)start_timertimeoutudt_send(sndpkt)start_timertimeoutrdt_rcv(rcvpkt) 等待來(lái)自上面的調(diào)用0等待 ACK1Lrdt_rcv(r

39、cvpkt)LLL上層取數(shù) 發(fā)0# 分組啟動(dòng)定時(shí)分組錯(cuò)或收到ACK 1收到ACK 0停定時(shí)收到分組上層取數(shù) 發(fā)1# 分組啟動(dòng)定時(shí)分組錯(cuò)或收到ACK 0超時(shí)重發(fā)1定時(shí)收到分組丟失分組:數(shù)據(jù)分組ACK分組見(jiàn)注釋 67rdt3.0 運(yùn)行情況無(wú)丟包時(shí)的運(yùn)行 分組丟失發(fā)送方發(fā)送方接收方接收方 68rdt3.0運(yùn)行情況ACK丟失 過(guò)早超時(shí) 發(fā)送方發(fā)送方接收方接收方重復(fù)分組丟棄無(wú)動(dòng)作保證可靠數(shù)據(jù)傳輸協(xié)議的要點(diǎn): 檢驗(yàn)和、序號(hào)、定時(shí)器、重傳、肯定和否定確認(rèn)。也稱為比特交替協(xié)議(分組序號(hào)在0和1之間交替)重復(fù)分組丟棄 694、 停止等待協(xié)議流程N(yùn)(S):發(fā)送序號(hào)變量,當(dāng)前傳送分組的編號(hào),發(fā)送新分組時(shí),N (S)

40、+1; V(R):接收序號(hào)變量,當(dāng)前準(zhǔn)備(希望)接收的分組序號(hào),每收到一個(gè)新分組時(shí),V(R)+1;判斷重復(fù)分組(接收方):N(S)V(R),收到的是新數(shù)據(jù)分組;N(S) V(R),收到的是重復(fù)分組。23 70NAK/ACK重 新 發(fā) 送NAKACKYYNNN(S)0從上層取數(shù)裝配成分組 N(S)發(fā)送啟動(dòng)定時(shí)應(yīng)答到超時(shí)取新數(shù)N(S)N (S)+1發(fā)送方 71出 錯(cuò) 丟 棄重 復(fù) 丟 棄NYYYYNNV(R)0接收分組取數(shù)送上層分組到達(dá)正確分組N(S)=V(R)V(R)V(R)+1發(fā)ACK發(fā)NAK或上一分組ACK接收方 72停等協(xié)議的性能 能夠正常工作,但效率不高。發(fā)送方(信道)利用率Usende

41、r : 傳輸時(shí)延L/R發(fā)送方從發(fā)送分組開(kāi)始,到收到對(duì)方ACK分組,所需的時(shí)間。 發(fā)送方將比特發(fā)送到信道的時(shí)間 發(fā)送時(shí)間 73例 :兩臺(tái)端主機(jī)之間進(jìn)行理想的通信兩個(gè)端系統(tǒng)之間的光速往返傳播時(shí)延RTT約 30ms信道傳輸速率 R=1Gb/s(109bit/s) 分組長(zhǎng) L = 1000字節(jié) 傳輸時(shí)延: 74傳輸分組的最后一個(gè)比特, t = L / R傳輸分組的第一個(gè)比特, t = 0發(fā)送方接收方RTT 分組第一個(gè)比特到達(dá)傳輸最后一個(gè)比特到達(dá),發(fā)送ACKACK 到達(dá),發(fā)送下一個(gè)分組, t = RTT + L / R發(fā)送時(shí)間:L/R +RTT30.008ms RTT/2 75發(fā)送方只有0.027%的時(shí)

42、間忙。發(fā)送方在30.008ms內(nèi)只能發(fā)送l000byte,有效的吞吐量(速率)僅為267kbit/s(l000*8/(30.008*10-3),即使有1Gbit/s的鏈路可用)簡(jiǎn)單改進(jìn)方法: 允許發(fā)送方連續(xù)發(fā)送多個(gè)分組而無(wú)需等待確認(rèn),稱為流水線技術(shù)(眾多分組可看成是填充到一條流水線中)。 76流水線協(xié)議利用率N為連續(xù)發(fā)送分組個(gè)數(shù)。 77傳輸?shù)谝粋€(gè)分組比特, t = 0發(fā)送者接收者RTT 傳輸最后一個(gè)比特, t = L / R第一個(gè)分組比特到達(dá)分組最后一個(gè)比特到達(dá),發(fā)送 ACKACK 到達(dá), 發(fā)送下一個(gè)分組, t = RTT + L / R第二個(gè)分組最后比特到達(dá),發(fā)送ACK第三個(gè)分組最后比特到達(dá)

43、,發(fā)送ACK利用率增加3倍!例發(fā)送方在等待確認(rèn)之前連續(xù)發(fā)送3個(gè)報(bào)文。 78技術(shù)要點(diǎn)增加序號(hào)范圍: 由于可連續(xù)發(fā)送多個(gè)分組,每個(gè)分組有唯一序號(hào),可能有多個(gè)在傳輸中的未確認(rèn)報(bào)文。需要緩存多個(gè)分組:發(fā)送方至少能緩沖已發(fā)送但沒(méi)有確認(rèn)的分組;接收方緩存已正確接收的分組。序號(hào)范圍和對(duì)緩存的要求: 取決于數(shù)據(jù)傳輸協(xié)議處理丟失、差錯(cuò)及過(guò)度延時(shí)分組的方式。 79流水線協(xié)議類型回退N步 (Go-Back-N, GBN協(xié)議)選擇性重傳 (Selective Repeat, SR協(xié)議) 80GBN基本思想發(fā)送方:連續(xù)發(fā)送多個(gè)數(shù)據(jù)分組,停止等待收到確認(rèn)ACK,繼續(xù)發(fā)送后面分組;超時(shí),未收到應(yīng)答,從出錯(cuò)分組開(kāi)始重發(fā)接收方

44、:按序號(hào)接收數(shù)據(jù)分組正確:接收處理,發(fā)確認(rèn)ACK;出錯(cuò):將出錯(cuò)分組及后面分組均丟棄,不發(fā)任何應(yīng)答。 81工作示意圖 82說(shuō)明連續(xù)發(fā)送的分組個(gè)數(shù)不能太多:增加序號(hào)字段位數(shù);出錯(cuò)時(shí),要重傳很多數(shù)據(jù)分組,影響效率。連發(fā)個(gè)數(shù)受流水線中未確認(rèn)的分組數(shù)限制,不能超過(guò)最大允許數(shù)N。 通過(guò)設(shè)置發(fā)送窗口和接收窗口來(lái)分別控制連續(xù)發(fā)送和接收的分組個(gè)數(shù)。 831、發(fā)送窗口控制發(fā)送方連續(xù)發(fā)送的個(gè)數(shù)。 實(shí)際是允許連續(xù)發(fā)送的序號(hào)表,只有落在發(fā)送窗口所含序號(hào)之內(nèi)的,才能不等待應(yīng)答發(fā)送。已確認(rèn) 已發(fā)未確認(rèn) 準(zhǔn)備發(fā)送 不能發(fā)送基序號(hào) :最早的未確認(rèn)分組的序號(hào) 下一個(gè)序號(hào):最小的未使用序號(hào)(即下一個(gè)待發(fā)分組的序號(hào)) 84序號(hào)范圍分

45、割成4部分:0,base-1:已經(jīng)發(fā)送并確認(rèn)過(guò)的分組。base,nextseqnum-1:已經(jīng)發(fā)送但未被確認(rèn)分組nextseqnum,base+N-1:用于將立即發(fā)送的分組base+N:不能使用,直到當(dāng)前流水線中未被確認(rèn)的分組得到確認(rèn)(序號(hào)為base的分組)。已確認(rèn) 已發(fā)未確認(rèn) 準(zhǔn)備發(fā)送 不能發(fā)送 85發(fā)送窗口大小 WTWT = N,即序號(hào)范圍base,base+N-1,包括已發(fā)送未被確認(rèn)的分組、以及準(zhǔn)備發(fā)送的分組。隨著協(xié)議的運(yùn)行,發(fā)送的分組陸續(xù)被確認(rèn),發(fā)送窗口在序號(hào)空間內(nèi)向前滑動(dòng)。GBN協(xié)議常被稱為滑動(dòng)窗口協(xié)議(sliding-window protocol)已確認(rèn) 已發(fā)未確認(rèn) 準(zhǔn)備發(fā)送 不

46、能發(fā)送 862、序號(hào)取值范圍 如果分組序號(hào)字段的位數(shù)是k,則序號(hào)范圍是0,2k-1。即序號(hào)在02k-1的范圍循環(huán): 0,1,2k-1,0, 如: 停等協(xié)議序號(hào)字段的位數(shù)是1,序號(hào)范圍是0,1。 873、發(fā)送方擴(kuò)展有限狀態(tài)機(jī)FSM圖3-22給出了GBN協(xié)議過(guò)程(先看此演示效果);圖3-20給出了一個(gè)基于ACK、無(wú)NAK的GBN協(xié)議。響應(yīng)的事件: 上層的調(diào)用:上層調(diào)用rdt_send()檢查發(fā)送窗口是否已滿(是否有N個(gè)已發(fā)送、但未被確認(rèn)的分組)窗口未滿:創(chuàng)建一個(gè)分組并將其發(fā)送,更新變量窗口已滿:將數(shù)據(jù)返回給上層,以后再試。收到ACK: 對(duì)序號(hào)為 n的分組的確認(rèn)使用累積確認(rèn),即表明接收方已正確接收到

47、序號(hào)為n及以前的所有分組(從接收方來(lái)說(shuō),如果n分組以前有一個(gè)分組沒(méi)有正確收到,接收方是不會(huì)發(fā)出n分組的確認(rèn)的;所以發(fā)送方只要收到n的確認(rèn)即說(shuō)明n及以前分組接收方都正確收到了,但是發(fā)送方不一定能收到所有n及以前分組的確認(rèn),因?yàn)橛行┐_認(rèn)分組可能丟掉了)。 883、發(fā)送方擴(kuò)展FSM超時(shí):設(shè)置定時(shí)器處理“數(shù)據(jù)或確認(rèn)分組丟失”情況 只使用一個(gè)定時(shí)器,作為最早的已發(fā)送但未被確認(rèn)的分組的定時(shí)(每次窗口滑動(dòng)后,還有已發(fā)未確認(rèn)分組時(shí),定時(shí)器都重新開(kāi)始對(duì)窗口中基序號(hào)分組進(jìn)行倒計(jì)時(shí),即基序號(hào)變化且還有已發(fā)未確認(rèn)分組時(shí)將重啟定時(shí)器)。產(chǎn)生超時(shí):發(fā)送方重發(fā)所有已發(fā)未確認(rèn)分組。收到一個(gè)ACK:仍有已發(fā)送但未被確認(rèn)的分組,

48、重新啟動(dòng)定時(shí)器。沒(méi)有未確認(rèn)報(bào)文,終止定時(shí)器。 891、重啟(啟動(dòng))定時(shí)器:當(dāng)base=nextseqnum,且上層有要發(fā)送數(shù)據(jù)時(shí);(發(fā)送后初始化啟動(dòng))窗口滑動(dòng)了(重啟) ;超時(shí)后(重啟) ;2、停止定時(shí)器:當(dāng)base=nextseqnum,且上層無(wú)要發(fā)送數(shù)據(jù)時(shí); 90GBN: 發(fā)送方擴(kuò)展的 FSM等待start_timerudt_send(sndpktbase)udt_send(sndpktbase+1)udt_send(sndpktnextseqnum-1)超時(shí)rdt_send(data) if (nextseqnum 1,即只要序號(hào)落在接收窗口內(nèi)的正確分組都可接收。 101 102某個(gè)時(shí)刻

49、的發(fā)送方、 接收方窗口a. 發(fā)送方看到的序號(hào)b. 接收方看到的序號(hào)窗口長(zhǎng)度N窗口長(zhǎng)度N已發(fā)送 1031、發(fā)送方的事件與動(dòng)作從上層收到數(shù)據(jù): 當(dāng)從上層接收到數(shù)據(jù)后,發(fā)送方檢查下一個(gè)可用于該分組的序號(hào)。若序號(hào)在發(fā)送方窗口內(nèi),則將數(shù)據(jù)打包并發(fā)送否則:與GBN一樣,將數(shù)據(jù)緩存,或?qū)⑵浞祷亟o上層,以后再傳。超時(shí): 每個(gè)分組有自己的定時(shí)器,超時(shí)后只能發(fā)送一個(gè)分組。 104收到ACK: 將被確認(rèn)的分組標(biāo)記為已接收(若該分組序號(hào)在窗口內(nèi))。如果該分組的序號(hào)等于發(fā)送基序號(hào)send_base,則窗口基序號(hào)向前移動(dòng)到具最小序號(hào)的未確認(rèn)分組處。窗口移動(dòng)后,仍有序號(hào)落在窗口內(nèi)的未發(fā)送分組,繼續(xù)發(fā)送。收到ACK 1052

50、、接收方的事件與動(dòng)作接收方接收正確分組不管其是否有序。失序分組:先被緩存,直到所有丟失分組(序號(hào)更小的分組)被收到為止,才可將一批分組按序交付給上層。 106序號(hào)在接收窗口內(nèi)的分組被正確接收: 收到的分組落在rcv_base,rcv_base+N-1內(nèi),接收并回發(fā)一個(gè)ACK。該分組以前沒(méi)收到過(guò):被緩存;該分組的序號(hào)等于接收基序號(hào):則該分組及已緩存的序號(hào)連續(xù)的分組交付(起始于基序號(hào))給上層。接收窗口按交付的分組數(shù)量向前移動(dòng)。收到 107收到序號(hào)在接收基序號(hào)以前的分組: 該分組是接收方以前已確認(rèn)過(guò)的分組。生成一個(gè)ACK, 并回發(fā)給發(fā)送方。 如果接收方不確認(rèn),發(fā)送方窗口不能向前滑動(dòng)。其他情況:忽略該

51、分組。例:發(fā)送窗口、接收窗口大小均為4。 108SR協(xié)議的發(fā)送方和接收方窗口不總一致連發(fā)4個(gè)分組窗口不變超時(shí)連續(xù)滑動(dòng)4個(gè)序號(hào)窗口不變窗口不滑動(dòng) 1093、窗口最大尺寸 若序號(hào)位數(shù)k位,SR協(xié)議,發(fā)送窗口和接收窗口尺寸最大是2k-1,不是2k-1。即序號(hào)空間一半。反例說(shuō)明: 設(shè)序號(hào)2位,則序號(hào)空間為0#3#,發(fā)送窗口和接收窗口尺寸最大是2,不是3。 110(1)WT= WR =3發(fā)方發(fā)送0#2#共3分組,停止等待應(yīng)答;收方全部正確收到,發(fā)應(yīng)答,窗口滑動(dòng),允許接收3#、0#、1#分組; 應(yīng)答全部到達(dá):發(fā)方發(fā)送3個(gè)新分組3#、0#、1#,協(xié)議正確進(jìn)行;應(yīng)答全部丟失:發(fā)方超時(shí),重新發(fā)送0#2#共3舊分

52、組,與準(zhǔn)備接收序號(hào)重疊,出現(xiàn)重復(fù)分組接收,協(xié)議錯(cuò)誤。發(fā)送方: 0 1 2 3 0 1 2 3 接收方: 0 1 2 3 0 1 2 3 準(zhǔn)備接收 111(2)WT= WR =2發(fā)方發(fā)送0#1#共2分組,停止等待應(yīng)答;收方全部正確收到,發(fā)應(yīng)答,窗口滑動(dòng),允許接收2#3#分組;應(yīng)答全部到達(dá):發(fā)方發(fā)送2個(gè)新分組2#3#,協(xié)議正確進(jìn)行;應(yīng)答全部丟失:發(fā)方超時(shí),重新發(fā)送2個(gè)舊分組0#1#,序號(hào)不在接收窗口內(nèi),拒絕接收,丟棄。 發(fā)送方: 0 1 2 3 0 1 2 3 接收方: 0 1 2 3 0 1 2 3 準(zhǔn)備接收 1124、三種協(xié)議比較停等協(xié)議GBN協(xié)議SR協(xié)議發(fā)送方發(fā)1個(gè)重發(fā)出錯(cuò)分組連發(fā)n個(gè)從出錯(cuò)

53、分組開(kāi)始重發(fā)連發(fā)n個(gè)只重發(fā)出錯(cuò)分組接收方按序號(hào)接收出錯(cuò)、重復(fù)分組丟棄按序號(hào)接收從出錯(cuò)分組開(kāi)始丟棄不按序號(hào)接收只丟棄出錯(cuò)分組窗口大小WT = WR = 11 WT 2k-1WR = 11 WT、WR 2k-1 1135、可靠傳輸機(jī)制及用途總結(jié)校驗(yàn)和:檢測(cè)分組傳輸中的比特錯(cuò)誤。定時(shí)器:用于檢測(cè)分組超時(shí)及重傳分組 分組或ACK丟失;一個(gè)分組被延時(shí)但未丟失(過(guò)早超時(shí)),或ACK丟失,接收方可能會(huì)收到重復(fù)分組。序號(hào):發(fā)送的數(shù)據(jù)分組按順序編號(hào)。 接收方可檢測(cè)分組丟失(序號(hào)間的空隙)或重復(fù)(相同序號(hào)的分組)。 1145、可靠傳輸機(jī)制及用途總結(jié)確認(rèn):接收方用其告訴發(fā)送方某個(gè)分組或一組分組已被正確地接收。 確認(rèn)

54、報(bào)文包含被確認(rèn)的分組或多個(gè)分組的序號(hào)??梢允侵饌€(gè)的或累計(jì)。否認(rèn):接收方告訴發(fā)送方某個(gè)分組尚未正確地接收。包含未被正確接收的分組的序號(hào)。窗口、流水線:發(fā)送方可以連續(xù)發(fā)送序號(hào)落在發(fā)送窗口序號(hào)范圍內(nèi)的分組,可以不用逐個(gè)確認(rèn)。 115存在問(wèn)題 即使發(fā)送方或接收方的窗口中都沒(méi)有包含x,但可能會(huì)出現(xiàn)一個(gè)具有序號(hào)或確認(rèn)號(hào)x的分組的舊拷貝。為確保序號(hào)不被重新使用,需要發(fā)送方“確信”任何先前發(fā)送的序號(hào)為x的分組都不再在網(wǎng)絡(luò)中為止。規(guī)定分組最長(zhǎng)的壽命:分組在網(wǎng)絡(luò)中“生存”的時(shí)間不會(huì)超過(guò)某個(gè)固定的最長(zhǎng)時(shí)間。 如在TCP中假定為大約3分鐘。 1163.5 面向連接的傳輸: TCP 采用:差錯(cuò)檢測(cè)、重傳、累積確認(rèn)、定時(shí)

55、、序號(hào)和確認(rèn)序號(hào)。3.5.1 TCP連接3.5.2 TCP報(bào)文段結(jié)構(gòu) 1173.5.1 TCP連接面向連接:數(shù)據(jù)交換前,發(fā)送方與接收方進(jìn)行握手(交換控制信息)。連接狀態(tài)與端系統(tǒng)有關(guān),不為路由器所知。 全雙工數(shù)據(jù):同一連接上的雙向數(shù)據(jù)流點(diǎn)對(duì)點(diǎn):一個(gè)發(fā)送方和一個(gè)接收方之間的連接多播:一個(gè)發(fā)送方同時(shí)傳給多個(gè)接收方。流量控制:發(fā)送方發(fā)送速率不能超過(guò)接收方能力 擁塞控制:網(wǎng)絡(luò)擁塞時(shí)遏制發(fā)送方速率。 118進(jìn)程通信過(guò)程建立TCP連接:三次握手。 進(jìn)程通信:通過(guò)套接字發(fā)送及接收。 封裝成報(bào)文段傳輸。套接字TCP發(fā)送數(shù)據(jù)緩存報(bào)文段進(jìn)程寫(xiě)數(shù)據(jù)進(jìn)程讀數(shù)據(jù)套接字TCP接收數(shù)據(jù)緩存 119TCP 報(bào)文段結(jié)構(gòu)源端口 #

56、目的端口 #32 bits應(yīng)用層數(shù)據(jù) (變長(zhǎng))序號(hào)確認(rèn)號(hào)接收窗口緊急數(shù)據(jù)指針檢查和FSRPAU首部長(zhǎng)度未用選項(xiàng) (變長(zhǎng))URG: 緊急數(shù)據(jù) (為1時(shí)緊急數(shù)據(jù)指針字段有效)ACK: ACK 序號(hào)(為1時(shí)確認(rèn)號(hào)字段有效)PSH: 立即提交數(shù)據(jù)(給上層,一般不用)RST, SYN, FIN:重置(出現(xiàn)重大錯(cuò)誤)同步(連接請(qǐng)求或響應(yīng)幀)完成(拆連)接收方允許的字節(jié)數(shù)流量控制(接收方還有多少可用的緩存空間)對(duì)數(shù)據(jù)字節(jié)計(jì)數(shù)(并非對(duì)報(bào)文段計(jì)數(shù)!)因特網(wǎng)檢查和(同 UDP一樣) 120TCP序號(hào)和確認(rèn)號(hào)報(bào)文段是可靠、有序的字節(jié)流。序號(hào):報(bào)文段中第1個(gè)數(shù)據(jù)字節(jié)在字節(jié)流中的位置編號(hào)。確認(rèn)號(hào):期望從對(duì)方收到下一個(gè)字

57、節(jié)的序號(hào)累計(jì)應(yīng)答TCP提供全雙工服務(wù),每個(gè)方向上的數(shù)據(jù)傳輸有獨(dú)立的序號(hào)。01100019992000報(bào)文段1報(bào)文段2報(bào)文段3文件 121例:telnet回顯字符主機(jī)A主機(jī) BSeq=42, ACK=79, data = CSeq=79, ACK=43, data = CSeq=43, ACK=80用戶鍵入C主機(jī)對(duì)接收到的C回顯給出確認(rèn)主機(jī)對(duì)收到的C給出確認(rèn), 回顯 C時(shí)間簡(jiǎn)單的telnet情況捎帶確認(rèn)主機(jī)A:起始序號(hào)42主機(jī)B:起始序號(hào)79主機(jī)A期待接收的序號(hào)為79用戶主機(jī)A將鍵入的字符發(fā)給遠(yuǎn)程主機(jī)B,主機(jī)B再回送給主機(jī)A。 1223.6 擁塞控制原理?yè)砣禾嗟脑窗l(fā)送太多太快的數(shù)據(jù),使網(wǎng)絡(luò)來(lái)

58、不及處理。表現(xiàn):丟包 (路由器緩沖區(qū)溢出)長(zhǎng)時(shí)延 (路由器緩沖區(qū)中排隊(duì))對(duì)丟失的分組重傳,不能解決網(wǎng)絡(luò)擁塞問(wèn)題。網(wǎng)絡(luò)擁塞時(shí)需要遏制發(fā)送方。 網(wǎng)絡(luò)中的10大主要問(wèn)題之一! 123主要研究?jī)?nèi)容網(wǎng)絡(luò)擁塞如何從上層得到的服務(wù)中反映出來(lái);如何避免網(wǎng)絡(luò)擁塞,或?qū)ζ渥鞒龇磻?yīng)。3.6.1 擁塞原因與開(kāi)銷(代價(jià))3.6.2 擁塞控制方法3.6.3 網(wǎng)絡(luò)輔助擁塞控制例 1243.6.1 擁塞原因與開(kāi)銷(代價(jià))擁塞原因:資源未被充分利用。擁塞的代價(jià):端系統(tǒng)得到很差的服務(wù)性能。分別討論三種擁塞的情況:從簡(jiǎn)單到復(fù)雜。討論重點(diǎn): 隨著主機(jī)增加發(fā)送速率使網(wǎng)絡(luò)變得擁塞時(shí),會(huì)產(chǎn)生什么影響。 125情況1:兩個(gè)發(fā)送方、一個(gè)無(wú)限緩

59、存路由器 一個(gè)路由器: 無(wú)限緩沖區(qū)(兩個(gè)連接共享,單跳路由)不重傳無(wú)限緩存:不丟失分組無(wú)限的共享式輸出鏈路緩沖主機(jī)Alin : 原始數(shù)據(jù)主機(jī)Blout :吞吐量主機(jī)D主機(jī)C兩個(gè)發(fā)送方, 兩個(gè)接收方: 兩個(gè)連接。 126假設(shè):主機(jī)A(B):平均發(fā)送速率in B/s,無(wú)差錯(cuò)恢復(fù)、流量控制或擁塞控制。向路由器提供流量的速率是in B /s。路由器:無(wú)限的緩存空間存儲(chǔ)輸入的分組。主機(jī)A和B的分組通過(guò)同一個(gè)路由器,在容量為R的共享式鏈路上傳輸(RB/s)。無(wú)限的共享式輸出鏈路緩沖主機(jī)Alin : 原始數(shù)據(jù)主機(jī)D主機(jī)Clout :吞吐量主機(jī)B 127主機(jī)發(fā)送速率與吞吐量的關(guān)系吞吐量out:接收方每秒接收的

60、字節(jié)數(shù)。每個(gè)連接的吞吐量是連接發(fā)送速率的函數(shù)。發(fā)送速率在0R/2之間:out = in(有一定時(shí)延)發(fā)送速率超過(guò)R/2:out =R/2(不管發(fā)送速率多快,由于兩個(gè)連接共享鏈路容量)。 128主機(jī)發(fā)送速率與平均時(shí)延關(guān)系發(fā)送速率越接近R/2,平均時(shí)延越大。發(fā)送速率超過(guò)R/2,平均時(shí)延變成無(wú)窮大(路由器中的平均排隊(duì)分組數(shù)無(wú)限增長(zhǎng))說(shuō)明: 吞吐量角度:運(yùn)行在總吞吐量接近R的狀態(tài)是一個(gè)理想狀態(tài)(鏈路被充分利用)。 時(shí)延角度:不是一個(gè)理想狀態(tài)(時(shí)延大)。網(wǎng)絡(luò)擁塞代價(jià):當(dāng)分組到達(dá)速率接近鏈路容量時(shí),分組排隊(duì)時(shí)延非常大。 129情況2:兩個(gè)發(fā)送方,一個(gè)有限緩存路由器 有限緩沖路由器:分組到達(dá)已滿的緩存時(shí)會(huì)被

溫馨提示

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

評(píng)論

0/150

提交評(píng)論