版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第八章運(yùn)輸層運(yùn)輸層概述
運(yùn)輸層是OSI參考模型的七層中比較特殊的一層,同時(shí)也是整個(gè)網(wǎng)絡(luò)體系結(jié)構(gòu)中十分關(guān)鍵的一層。它是通信部分的最高層,又是用戶功能中的最低層運(yùn)輸層功能 根據(jù)下面通信子網(wǎng)的特性最佳的利用網(wǎng)絡(luò)資源,并以可靠和經(jīng)濟(jì)的方式在兩端主機(jī)的進(jìn)程之間,建立一條運(yùn)輸連接,以透明地傳送報(bào)文,也就是說(shuō),運(yùn)輸層向上一層進(jìn)行通信的兩個(gè)進(jìn)程之間提供一個(gè)可靠的端到端的服務(wù),使它們看不見(jiàn)運(yùn)輸層以下的數(shù)據(jù)通信細(xì)節(jié)。在通信子網(wǎng)內(nèi)的各個(gè)交換節(jié)點(diǎn)以及連接各通信子網(wǎng)的路由器都沒(méi)有運(yùn)輸層。運(yùn)輸層只能存在于通信子網(wǎng)外面的主機(jī)中。運(yùn)輸層以上的各層就不再關(guān)心信息傳輸問(wèn)題了。運(yùn)輸層功能為什么需要運(yùn)輸層1、在一個(gè)網(wǎng)絡(luò)連接上復(fù)用多對(duì)進(jìn)程的通信。2、解決多互連的通信子網(wǎng)的通信協(xié)議的差異和提供的服務(wù)功能的不同。3、解決網(wǎng)絡(luò)層及下兩層自身不能解決的傳輸錯(cuò)誤。運(yùn)輸層與上下層之間的關(guān)系
運(yùn)輸層與上下層之間的關(guān)系運(yùn)輸層中向應(yīng)用層提供傳輸服務(wù)的是運(yùn)輸實(shí)體。使用運(yùn)輸服務(wù)的是運(yùn)輸服務(wù)用戶(也就是應(yīng)用層中的各種應(yīng)用進(jìn)程,或應(yīng)用層實(shí)體)。運(yùn)輸層中的兩個(gè)對(duì)等運(yùn)輸實(shí)體之間的通信遵循著運(yùn)輸協(xié)議。運(yùn)輸協(xié)議保證了運(yùn)輸層能夠向應(yīng)用層提供運(yùn)輸服務(wù)。運(yùn)輸層提供的運(yùn)輸服務(wù)也使用了下面網(wǎng)絡(luò)層向上提供的網(wǎng)絡(luò)服務(wù)。TSAP和NSAP分別是運(yùn)輸層和網(wǎng)絡(luò)層的服務(wù)訪問(wèn)點(diǎn)。TCP/IP體系中的運(yùn)輸層協(xié)議
TCP/IP的運(yùn)輸層有兩個(gè)不同的協(xié)議
UDP(UserDatagramProtocol)——用戶數(shù)據(jù)報(bào)協(xié)議:提供面向無(wú)連接的服務(wù)TCP(TransmissionControlProtocol)——傳輸控制協(xié)議:提供面向連接的服務(wù)
UDP和TCP都使用IP協(xié)議,也就是說(shuō),這兩個(gè)協(xié)議在發(fā)送數(shù)據(jù)時(shí),其協(xié)議數(shù)據(jù)單元PDU都作為下面IP數(shù)據(jù)報(bào)中的數(shù)據(jù)。在接收數(shù)據(jù)時(shí),將IP首部去掉后,根據(jù)上層使用的什么運(yùn)輸協(xié)議,把數(shù)據(jù)部分交給上層的UDP或TCP。TCP/IP體系中的運(yùn)輸層協(xié)議
面向連接和面向無(wú)連接面向連接:面向連接服務(wù)是電話系統(tǒng)服務(wù)模式的抽象,即每一次完整的數(shù)據(jù)傳輸都要經(jīng)過(guò)建立連接,使用連接,終止連接的過(guò)程。面向無(wú)連接:無(wú)連接服務(wù)是郵政系統(tǒng)服務(wù)的抽象,每個(gè)分組都攜帶完整的目的地址,各分組在系統(tǒng)中獨(dú)立傳送。無(wú)連接服務(wù)不能保證分組的先后順序,不進(jìn)行分組出錯(cuò)的恢復(fù)與重傳,不保證傳輸?shù)目煽啃?。端口的概念按照OSI七層協(xié)議的描述,傳輸層與網(wǎng)絡(luò)層最大的區(qū)別是傳輸層提供進(jìn)程通信能力。從這個(gè)意義上講,網(wǎng)絡(luò)通信的最終地址就不僅是主機(jī)地址了,還包括可以描述進(jìn)程的某種標(biāo)識(shí)。為此TCP/IP協(xié)議提出了協(xié)議端口的概念,用于標(biāo)識(shí)通信的進(jìn)程。UDP和TCP都使用端口與上層的應(yīng)用進(jìn)程進(jìn)行通信。端口是什么?端口是一種抽象的軟件結(jié)構(gòu),包括一些數(shù)據(jù)結(jié)構(gòu)和I/O緩沖區(qū)。應(yīng)用程序即進(jìn)程通過(guò)系統(tǒng)調(diào)用與某端口建立連接(binding綁定)后,傳輸層傳給該端口的數(shù)據(jù)都被相應(yīng)的進(jìn)程所接收,相應(yīng)進(jìn)程發(fā)給傳輸層的數(shù)據(jù)都從該端口輸出。在TCP/IP協(xié)議的實(shí)現(xiàn)中,端口操作類似于一般的I/O操作,進(jìn)程獲取一個(gè)端口,相當(dāng)于獲取本地唯一的I/O文件,可以用一般的讀寫原語(yǔ)訪問(wèn)。端口號(hào)每個(gè)端口都擁有一個(gè)叫端口號(hào)的整數(shù)描述符,以區(qū)別不同端口。由于TCP/IP傳輸層的兩個(gè)協(xié)議TCP和UDP是兩個(gè)完全獨(dú)立的軟件模塊,因此各自的端口號(hào)也相互獨(dú)立。如TCP有一個(gè)255號(hào)端口,UDP也可以有一個(gè)255號(hào)端口,兩者并不沖突。端口從1開始分配,超出255的部分通常被本地主機(jī)作為私有用途。1-255之間的號(hào)碼被用于遠(yuǎn)程應(yīng)用程序所請(qǐng)求的進(jìn)程和網(wǎng)絡(luò)服務(wù)。端口號(hào)的分配有兩種基本分配方式:第一種叫全局分配這是一種集中分配方式,由一個(gè)公認(rèn)的中央機(jī)構(gòu)根據(jù)用戶需要盡行統(tǒng)一分配,并將結(jié)果公布于眾。第二種是本地分配,又稱動(dòng)態(tài)連接,即進(jìn)程需要訪問(wèn)傳輸層服務(wù)時(shí),向本地操作系統(tǒng)提出申請(qǐng),操作系統(tǒng)返回本地唯一的端口號(hào),進(jìn)程再通過(guò)合適的系統(tǒng)調(diào)用,將自己和該端口連接起來(lái)(綁定)。TCP/IP端口號(hào)的分配綜合了兩種方式。TCP/IP將端口號(hào)分為兩部分,少量的作為保留端口,以全局方式分配給服務(wù)進(jìn)程。因此,每一個(gè)標(biāo)準(zhǔn)服務(wù)器都擁有一個(gè)全局公認(rèn)的端口叫周知口(well-knownport),即使在不同的機(jī)器上,其端口號(hào)也相同。剩余的為自由端口,以本地方式進(jìn)行分配。Linux的/etc/services文件分析連接、半相關(guān)、全相關(guān)和插口
連接:兩個(gè)進(jìn)程間的通信鏈路稱為連接。連接在內(nèi)部表現(xiàn)為一些緩沖區(qū)和一組協(xié)議機(jī)制,在外部表現(xiàn)出比無(wú)連接高的可靠性。半相關(guān):網(wǎng)絡(luò)中用一個(gè)三元組可以在全局中唯一標(biāo)是一個(gè)進(jìn)程:(協(xié)議,本機(jī)地址,本地端口號(hào))這樣一個(gè)三元組,叫做一個(gè)半相關(guān),他指定連接的每半部分。全相關(guān):一個(gè)完整的網(wǎng)間進(jìn)程通信需要有兩個(gè)進(jìn)程組成,并且只能使用同一種高層協(xié)議。也就是說(shuō)TCP和UDP沒(méi)法通信。因此一個(gè)完整的網(wǎng)間進(jìn)程通信需要一個(gè)五元組來(lái)標(biāo)識(shí):(協(xié)議,本機(jī)地址,本地端口號(hào),遠(yuǎn)地地址,遠(yuǎn)地端口號(hào)),這樣一個(gè)五元組叫做一個(gè)全相關(guān)。示例*執(zhí)行端口掃描程序,檢測(cè)一臺(tái)機(jī)器開放的端口套接字和API套接字又叫插口:包括IP地址和端口號(hào) 如(3,500)和(5,25)應(yīng)用編程接口API:運(yùn)輸層與應(yīng)用層之間的接口的通用名稱。 現(xiàn)在流行的API有兩類: Berkeleysocket——起源于Berkeley的加州大學(xué) TLI(運(yùn)輸層接口)——由AT&T公司開發(fā)用戶數(shù)據(jù)報(bào)協(xié)議(UDP)UDP采用無(wú)連接的方式提供高層協(xié)議間的事務(wù)處理服務(wù),允許它們之間互相發(fā)送數(shù)據(jù)。因?yàn)閁DP是一種無(wú)連接的數(shù)據(jù)報(bào)投遞服務(wù),它就不保證可靠投遞。它跟遠(yuǎn)程的UDP實(shí)體不建立端到端的連接,而只是將數(shù)據(jù)報(bào)送上網(wǎng)絡(luò),或者從網(wǎng)上接收數(shù)據(jù)報(bào)。UDP根據(jù)端口號(hào)對(duì)若干個(gè)應(yīng)用程序進(jìn)行多路復(fù)用,并能利用檢驗(yàn)和檢查數(shù)據(jù)的完整性。UDPUDP保留應(yīng)用程序定義的報(bào)文邊界,它從不把兩個(gè)應(yīng)用程序報(bào)文組合在一起,也不把單個(gè)應(yīng)用報(bào)文劃分成幾個(gè)部分。也就是說(shuō),當(dāng)應(yīng)用程序把一塊數(shù)據(jù)交給UDP發(fā)送時(shí),這塊數(shù)據(jù)將作為獨(dú)立的單元到達(dá)對(duì)方的應(yīng)用程序。例如,如果應(yīng)用程序把5個(gè)報(bào)文交給本地UDP端口發(fā)送,那么接收方的應(yīng)用程序就需從接收方的UDP端口讀5次,而且接收方收到的每個(gè)報(bào)文的大小和發(fā)出的大小完全一樣。UDP不具備諸如接收保證和避免重復(fù)等有序投遞功能,UDP數(shù)據(jù)報(bào)格式
UDP數(shù)據(jù)報(bào)格式源端口目的端口UDP數(shù)據(jù)報(bào)的長(zhǎng)度校驗(yàn)和:要增加偽首部常見(jiàn)的使用UDP的服務(wù)DNS:DNS用的是53端口。域名解析服務(wù)。snmp:簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議,使用161端口,是用來(lái)管理網(wǎng)絡(luò)設(shè)備的。聊天軟件Oicq:Oicq的程序既接受服務(wù),又提供服務(wù),這樣兩個(gè)聊天的人才是平等的。oicq用的是無(wú)連接的協(xié)議,其服務(wù)器使用8000端口,偵聽(tīng)是否有信息到來(lái);客戶端使用4000端口,向外發(fā)送信息。如果上述兩個(gè)端口正在使用(有很多人同時(shí)和幾個(gè)好友聊天),就順序往上加。TFTP:端口號(hào)69RPC:端口號(hào)111傳輸控制協(xié)議(TCP)TCP協(xié)議是TCP/IP協(xié)議簇中的另一個(gè)運(yùn)輸層協(xié)議,是面向連接的,因而可提供可靠的、按序傳送數(shù)據(jù)的服務(wù)。TCP提供的連接是雙向的,即全雙工的。TCP的數(shù)據(jù)傳送單位稱為“報(bào)文段”,記為TPDU。兩個(gè)應(yīng)用程序通過(guò)TCP連接來(lái)交換8bit字節(jié)構(gòu)成的字節(jié)流,TCP不在字節(jié)流中插入記錄標(biāo)志符。我們將這稱為字節(jié)流服務(wù)(bytestreamservice)。如果一方的應(yīng)用程序先傳10字節(jié),又傳20字節(jié),在傳50字節(jié),連接另一方將無(wú)法了解發(fā)放每次發(fā)送了多少自己。收方可以分4次接收這80個(gè)字節(jié),每次接收20字節(jié)。一端將字節(jié)流放到TCP連接上,同樣的字節(jié)流將出現(xiàn)在TCP連接的另一端。另外,TCP對(duì)字節(jié)流的內(nèi)容不作任何解釋,對(duì)字節(jié)流的解釋由TCP連接雙方的應(yīng)用層解釋。TCP的編號(hào)與確認(rèn)機(jī)制
TCP不是按傳送的報(bào)文段來(lái)編號(hào)。TCP將所要傳送的整個(gè)報(bào)文(這可能包括許多個(gè)報(bào)文段)看成是一個(gè)一個(gè)字節(jié)組成的數(shù)據(jù)流,然后對(duì)每一個(gè)字節(jié)編號(hào)。在連接建立時(shí),雙方要商定初始序號(hào)。TCP就將每一次所傳送的報(bào)文段的第一個(gè)數(shù)據(jù)字節(jié)的序號(hào)放在TCP首部的序號(hào)字段中。TCP的確認(rèn)是對(duì)接收到的數(shù)據(jù)的最高序號(hào)(即收到的數(shù)據(jù)流中的最后一個(gè)序號(hào))表示確認(rèn)。但返回的確認(rèn)序號(hào)是已收到的數(shù)據(jù)的最高序號(hào)加1。也就是說(shuō),確認(rèn)序號(hào)表示期望下次收到的第一個(gè)數(shù)據(jù)字節(jié)的序號(hào)。由于TCP能提供全雙工通信,因此通信中的每一方都不必專門發(fā)送確認(rèn)報(bào)文段,而可以在傳送數(shù)據(jù)時(shí)順便把確認(rèn)信息捎帶傳送,這樣作可以提高傳輸效率,因?yàn)榇_認(rèn)報(bào)文沒(méi)有傳輸數(shù)據(jù)。應(yīng)適當(dāng)推遲發(fā)回確認(rèn)報(bào)文,并盡量使用捎帶確認(rèn)的方法。Nagle算法
若數(shù)據(jù)是逐個(gè)字節(jié)地到達(dá)發(fā)送端,那么發(fā)送端不是逐個(gè)字節(jié)的發(fā)送數(shù)據(jù),而是先將第一個(gè)字符發(fā)送出去,將后面到達(dá)的字符都緩存起來(lái)。當(dāng)收到對(duì)第一個(gè)字符的確認(rèn)后,再將緩沖區(qū)中的所有字符裝成一個(gè)報(bào)文段發(fā)送出去,同時(shí)繼續(xù)對(duì)到達(dá)的字符進(jìn)行緩存。只有在收到確認(rèn)后才繼續(xù)發(fā)送下一個(gè)報(bào)文段。當(dāng)字符到達(dá)較快而網(wǎng)絡(luò)速度較慢時(shí),用這樣的方法可明顯地減少所用的網(wǎng)絡(luò)帶寬。算法還規(guī)定,當(dāng)?shù)竭_(dá)的字符已達(dá)窗口大小的一半或已達(dá)到報(bào)文段的最大長(zhǎng)度時(shí),就立即發(fā)送一個(gè)報(bào)文段。在實(shí)時(shí)性要求較高的情況下不宜采用Nagle算法:例如在Internet上使用X-window,要將鼠標(biāo)移動(dòng)的信息傳到遠(yuǎn)地主機(jī)。若采用Nagle算法會(huì)使用戶感到無(wú)法忍受。這時(shí)最好關(guān)閉這個(gè)算法。糊涂窗口綜合癥描述:接收端的緩沖區(qū)已滿,而交互式的應(yīng)用進(jìn)程一次只從緩沖區(qū)中讀取一個(gè)字符(這樣就在緩沖區(qū)產(chǎn)生1個(gè)字節(jié)的空位子),然后向發(fā)送端發(fā)送確認(rèn),并通知窗口大小為1個(gè)字符(但發(fā)送的數(shù)據(jù)報(bào)是40字節(jié)長(zhǎng)),接著發(fā)送端又發(fā)來(lái)1個(gè)字符(但發(fā)來(lái)的數(shù)據(jù)報(bào)是41字節(jié)長(zhǎng))。接收端發(fā)回確認(rèn),仍然通知窗口為1個(gè)字節(jié)。這樣下去就使網(wǎng)絡(luò)的效率很低。解決辦法:讓接收端等待一段時(shí)間,使得或者緩沖區(qū)已能有足夠的空間容納一個(gè)最長(zhǎng)報(bào)文段,或者緩沖區(qū)已有一半的空間處于空的狀態(tài)。只要出現(xiàn)這兩種中的一種,就發(fā)出確認(rèn)報(bào)文,并向發(fā)送端通知當(dāng)前的窗口大小。此外,發(fā)送端也不要發(fā)送太小的報(bào)文段,而是將數(shù)據(jù)積累成足夠大的報(bào)文段,或達(dá)到接收端緩沖區(qū)的空間的一半大小。超時(shí)與重發(fā)
若發(fā)送方在規(guī)定的設(shè)置時(shí)間內(nèi)沒(méi)有收到確認(rèn),就要將未被確認(rèn)的報(bào)文段重新發(fā)送。接收方若收到有差錯(cuò)的報(bào)文段,則丟棄次報(bào)文段(不發(fā)送否認(rèn)信息)。若收到重復(fù)的報(bào)文段,也要將其丟棄,但要發(fā)回(或捎帶發(fā)送)確認(rèn)信息,也就是對(duì)該重復(fù)報(bào)文的確認(rèn)。超時(shí)定時(shí)器的重發(fā)時(shí)間計(jì)算
采用自適應(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í)延T。每測(cè)量到一個(gè)新的往返時(shí)延樣本,就按下式重新計(jì)算一次平均往返時(shí)延:平均往返時(shí)延T=α(舊的往返時(shí)延樣本T)+(1-α)(新的往返時(shí)延樣本)Karn算法在計(jì)算平均往返時(shí)延時(shí),只要報(bào)文段重發(fā)了,就不采用器往返時(shí)延樣本。這樣得出的平均往返時(shí)延和重發(fā)時(shí)間就會(huì)比較準(zhǔn)確。Karn算法的修正: 新的重發(fā)時(shí)間=r(舊的重發(fā)時(shí)間) 系數(shù)r的典型值是2TCP的流量控制
TCP采用可變發(fā)送窗口的方式進(jìn)行流量控制。窗口的大小是以字節(jié)為單位的。在TCP報(bào)文段首部的窗口字段寫入的數(shù)據(jù)就是當(dāng)前設(shè)定的接收窗口數(shù)值。發(fā)送窗口在連接建立時(shí)由雙方商定。但在通信的過(guò)程中,接收端可根據(jù)自己的資源情況,隨時(shí)動(dòng)態(tài)地調(diào)整自己的接收窗口(可增大或減?。缓蟾嬖V對(duì)方,使對(duì)方的發(fā)送和自己的接收窗口一致。這是一種由接收端控制發(fā)送端的做法滑動(dòng)窗口表示發(fā)送端要發(fā)送的數(shù)據(jù)共9個(gè)報(bào)文段,每個(gè)報(bào)文段100字節(jié)長(zhǎng),而接收端許諾的發(fā)送窗口為500字節(jié)。發(fā)送窗口當(dāng)前的位置表示有兩個(gè)報(bào)文段(其字節(jié)序號(hào)為1-200)已經(jīng)發(fā)送過(guò)并已收到了接收端的確認(rèn)。發(fā)送端在當(dāng)前的情況下,可連續(xù)發(fā)送5個(gè)報(bào)文段而不必收到確認(rèn)。假定發(fā)送端已發(fā)送了兩個(gè)報(bào)文段但未收到確認(rèn),那么它還能發(fā)送3個(gè)報(bào)文段。發(fā)送端在收到接收端發(fā)來(lái)的確認(rèn)后,就可將發(fā)送窗口向前移動(dòng)了?;瑒?dòng)窗口
使用TCP滑動(dòng)窗口協(xié)議時(shí),接收方不必確認(rèn)每一個(gè)收到的分組。在TCP中,ACK是積累的——它們表示接收方已經(jīng)正確收到了一直到確認(rèn)序號(hào)減1的所有字節(jié)。
利用可變窗口進(jìn)行流量控制TCP報(bào)文段格式
源端口和目的端口
每個(gè)TCP段都包含源端和目的端的端口號(hào),用于尋找發(fā)端和收端應(yīng)用進(jìn)程。這兩個(gè)值加上IP首部中的源端和目的端IP地址唯一確定一個(gè)TCP連接。發(fā)送序號(hào)占4個(gè)字節(jié),是本報(bào)文段所發(fā)送的數(shù)據(jù)部分第一個(gè)字節(jié)的序號(hào),該序號(hào)用來(lái)標(biāo)志從TCP發(fā)端向TCP收端發(fā)送的數(shù)據(jù)字節(jié)流,如果將字節(jié)流看作在兩個(gè)應(yīng)用程序間的單向流動(dòng),則TCP用序號(hào)對(duì)每個(gè)字節(jié)進(jìn)行計(jì)數(shù)。序號(hào)到達(dá)2**32-1后又從0開始。確認(rèn)序號(hào)
占4字節(jié),是期望收到對(duì)方下次發(fā)送的數(shù)據(jù)的第一個(gè)字節(jié)的序號(hào),也就是上次成功收到的數(shù)據(jù)字節(jié)最后的序號(hào)加1。只有ACK標(biāo)志為1時(shí)確認(rèn)序號(hào)字段才有效。發(fā)送ACK無(wú)需任何代價(jià),因?yàn)?2位的確認(rèn)序號(hào)字段和ACK標(biāo)志一樣,總是TCP首部的一部分。因此,我們看到一旦一個(gè)連接建立起來(lái),這個(gè)字段總是被設(shè)置,ACK標(biāo)志也總是被設(shè)置為1。TCP為應(yīng)用層提供全雙工服務(wù)。這意味著數(shù)據(jù)能在兩個(gè)方向上獨(dú)立地進(jìn)行傳輸。因此,連接的每一端必須保持每個(gè)方向的傳輸數(shù)據(jù)序號(hào)。數(shù)據(jù)偏移占4位,它指出數(shù)據(jù)開始的地方離TCP報(bào)文段的起始處有多遠(yuǎn),實(shí)際也就是TCP報(bào)文段首部的長(zhǎng)度。這是由于首部有長(zhǎng)度不固定的選項(xiàng)字段?!皵?shù)據(jù)偏移”的單位為32bit,而不是字節(jié)或比特。其后還有6個(gè)bit是保留字段,供今后使用,但目前應(yīng)置為0。6比特標(biāo)志字段緊急比特URG位:URG=1時(shí)表示此報(bào)文段應(yīng)盡快傳送(相當(dāng)于加速數(shù)據(jù)),而不要按原來(lái)的排隊(duì)順序來(lái)傳送。比如:要傳送中斷信號(hào)。它使一端可以告訴另一端有些具有某種方式的“緊急數(shù)據(jù)”已經(jīng)放置在普通的數(shù)據(jù)流中,由接收方?jīng)Q定如何處理。此時(shí)與后面的“緊急指針”相結(jié)合,該緊急指針被置為一個(gè)正的偏移量,表示緊急數(shù)據(jù)的長(zhǎng)度,該偏移量必須與TCP首部中的序號(hào)字段相加,以便得出緊急數(shù)據(jù)的最后一個(gè)字節(jié)的序號(hào)。即使窗口大小為0時(shí)也可以發(fā)送緊急數(shù)據(jù)。標(biāo)志字段確認(rèn)比特ACK:只有當(dāng)ACK=1時(shí),確認(rèn)序號(hào)字段才有意義。當(dāng)ACK=0時(shí),確認(rèn)字段沒(méi)有意義。急迫比特PSH(PuSH):當(dāng)PSH=1時(shí),表明請(qǐng)求遠(yuǎn)地TCP將本報(bào)文段立即傳送給其應(yīng)用層,而不要等到整個(gè)緩沖區(qū)都填滿了后再向上交付。從而防止因等待額外數(shù)據(jù)而使已提交數(shù)據(jù)在緩存中滯留。重建比特RST(ReSeT):當(dāng)RST=1時(shí),表明出現(xiàn)嚴(yán)重差錯(cuò)(如由于主機(jī)崩潰或其他原因),必須釋放連接,然后再重建運(yùn)輸連接。重建比特還用來(lái)拒絕一個(gè)非法的報(bào)文段或拒絕打開一個(gè)連接。標(biāo)志字段同步比特SYN:在連接建立時(shí)使用。當(dāng)SYN=1而ACK=0時(shí)表明這是一個(gè)連接請(qǐng)求報(bào)文。對(duì)方若同意建立連接,則應(yīng)在發(fā)回的報(bào)文段中使SYN=1和ACK=1。因此,同步比特SYN置1,就表示這是一個(gè)連接請(qǐng)求或連接接受報(bào)文。而ACK比特的值用來(lái)區(qū)分到底是連接請(qǐng)求還是連接接受報(bào)文。終止比特FIN(FINal):用來(lái)釋放一個(gè)連接。當(dāng)FIN=1時(shí),表明欲發(fā)送的字節(jié)串已經(jīng)發(fā)送完,并要求釋放運(yùn)輸連接。窗口
是報(bào)文發(fā)送方的接收窗口,用來(lái)實(shí)現(xiàn)TCP的流量控制。窗口大小是一個(gè)16bit字段,因而窗口大小最大為2**16-1。窗口的單位為字節(jié)。通過(guò)此窗口告訴對(duì)方,“在未收到我的確認(rèn)時(shí),你能發(fā)送的數(shù)據(jù)的字節(jié)數(shù)至多是此窗口的大小?!睓z驗(yàn)和占2字節(jié)。檢驗(yàn)的范圍包括首部和數(shù)據(jù)兩部分。但和UDP一樣,在計(jì)算檢驗(yàn)和時(shí),要在TCP報(bào)文段的前面加上一個(gè)12字節(jié)的偽首部。其中協(xié)議字段改為6,長(zhǎng)度為TCP長(zhǎng)度。選項(xiàng)
長(zhǎng)度可變的字段。TCP只規(guī)定了一種選項(xiàng),即最長(zhǎng)報(bào)文段MSS(MaximumSegmentSize)。MSS告訴對(duì)方的TCP:“我的緩沖區(qū)所能接收的報(bào)文段的最大長(zhǎng)度是MSS”。窗口和MSS的區(qū)別:MSS是一個(gè)報(bào)文的最大長(zhǎng)度。而窗口則是所能發(fā)送的所有數(shù)據(jù)總數(shù),它可以是多個(gè)報(bào)文段,但每個(gè)報(bào)文段必須滿足MSS的限制,同時(shí)其數(shù)據(jù)總和不能超過(guò)窗口大小。MSS的選擇
如果太小,則網(wǎng)絡(luò)的利用率低,比如一次一個(gè)字節(jié),利用率只有1/41。如果太大,超過(guò)了路徑MTU,將導(dǎo)致該報(bào)文段在IP層會(huì)被分成多個(gè)IP數(shù)據(jù)包,如果某個(gè)包發(fā)生錯(cuò)誤,整個(gè)都要重傳,這些都會(huì)使開銷增大。原則:MSS應(yīng)盡可能大,只要在IP層傳輸時(shí)不需再分片就行。
由于雙方都有MSS,傳送時(shí)取較小者。如果主機(jī)未填寫該項(xiàng),則MSS默認(rèn)值是536字節(jié)的凈負(fù)荷,因此在Internet上的主機(jī)都應(yīng)能接受的報(bào)文段長(zhǎng)度為536+20=556字節(jié)。TCP連接的建立
連接建立過(guò)程要解決的問(wèn)題:要使每一方都能夠確知對(duì)方的存在。要允許雙方協(xié)商一些參數(shù)(如,最大報(bào)文段長(zhǎng)度,最大窗口大小,服務(wù)質(zhì)量等)。能夠?qū)\(yùn)輸實(shí)體資源(如緩沖區(qū)大小,連接表中的項(xiàng)目等)進(jìn)行分配。主動(dòng)打開和被動(dòng)打開在客戶機(jī)/服務(wù)器模式下,連接的建立請(qǐng)求是由客戶機(jī)發(fā)起的,它執(zhí)行“主動(dòng)打開”,而服務(wù)器執(zhí)行“被動(dòng)打開”,并對(duì)客戶機(jī)的連接請(qǐng)求被動(dòng)響應(yīng)。
在服務(wù)器進(jìn)程的實(shí)現(xiàn)中,首先讓服務(wù)器執(zhí)行“被動(dòng)打開”,告訴其TCP要準(zhǔn)備接受客戶進(jìn)程的連接請(qǐng)求。然后服務(wù)器進(jìn)程就處于“聽(tīng)(listen)”的狀態(tài),不斷檢測(cè)是否有客戶進(jìn)程要發(fā)起連接請(qǐng)求。如有,即作出響應(yīng)。連接的建立過(guò)程——三次握手三次握手第一次:主機(jī)A的TCP向主機(jī)B的TCP發(fā)出連接請(qǐng)求報(bào)文,其首部中的比特同步SYN置為1,同時(shí)選擇一個(gè)序號(hào)x,該序號(hào)稱為初始序號(hào)ISN(InitialSequenceNumber)。第二次:主機(jī)B的TCP收到連接請(qǐng)求報(bào)文后,如同意,則發(fā)回確認(rèn)。在確認(rèn)報(bào)文中將SYN置為1,確認(rèn)序號(hào)為x+1,同時(shí)也為自己選擇一個(gè)序號(hào)y。第三次:主機(jī)A的TCP收到此報(bào)文段后,還要向B給出確認(rèn),其確認(rèn)序號(hào)為y+1。
然后客戶機(jī)A就可以通知上層應(yīng)用進(jìn)程,連接已經(jīng)建立。
當(dāng)B收到A的確認(rèn)后也通知上層應(yīng)用進(jìn)程,連接已經(jīng)建立?!叭挝帐帧笔怯蛇B接雙方的TCP完成的,應(yīng)用程序只要一個(gè)簡(jiǎn)單的connect調(diào)用即可。比如執(zhí)行telnet命令,當(dāng)出現(xiàn)login時(shí)連接已建立,建立的過(guò)程TCP協(xié)議實(shí)體在后臺(tái)進(jìn)行。Tcpdump結(jié)果顯示A.1037>B.135:s1415531521:1415531521(0)win4096<mss1024>B.135>A.1037:s1823083521:1823083521(0)ack1415531522win4096<mss1024>A.1037>B.135:.ack1823083522win4096這三個(gè)報(bào)文中沒(méi)有任何數(shù)據(jù)“三次握手”的必要性
原因一:防止已失效的連接請(qǐng)求報(bào)文段突然又傳送到了主機(jī)B,因而產(chǎn)生錯(cuò)誤。原因二:是安全性的考慮,防止TCP欺騙,三次握手相當(dāng)于驗(yàn)證過(guò)程。TCP連接的終止——半關(guān)閉半關(guān)閉的概念:半關(guān)閉有的地方叫做半打開(halfopen)——它就是關(guān)閉一個(gè)方向上的數(shù)據(jù)傳送,而另一個(gè)方向可以傳輸數(shù)據(jù)的一種狀態(tài)。這是因?yàn)橐粋€(gè)TCP連接是全雙工,每個(gè)方向都可以獨(dú)立的傳輸數(shù)據(jù),因此每個(gè)方向必須單獨(dú)地進(jìn)行關(guān)閉。這原則就是當(dāng)一方完成它的數(shù)據(jù)發(fā)送任務(wù)后就能發(fā)送一個(gè)FIN來(lái)終止這個(gè)方向的連接。當(dāng)一端收到一個(gè)FIN,它必須通知應(yīng)用層另一端已經(jīng)終止了那個(gè)方向的數(shù)據(jù)傳送。TCP連接關(guān)閉的四次握手前兩次握手——第一個(gè)半關(guān)閉當(dāng)主機(jī)A沒(méi)有數(shù)據(jù)向B發(fā)送時(shí),主機(jī)A向主機(jī)B發(fā)送一個(gè)終止連接的TCP報(bào)文,將報(bào)文首部的終止比特FIN置1,其序號(hào)x等于前面已傳送過(guò)的數(shù)據(jù)的最后一個(gè)字節(jié)的序號(hào)加1。主機(jī)B的TCP收到釋放連接的通知后,即發(fā)出確認(rèn),其序號(hào)為x+1。(這是因?yàn)榻K止報(bào)文沒(méi)有數(shù)據(jù)部分),同時(shí)通知高層的應(yīng)用進(jìn)程。這樣,從A到B的連接就釋放了,連接處于半關(guān)閉狀態(tài)。這種狀態(tài)相當(dāng)于主機(jī)A對(duì)主機(jī)B說(shuō):“我已經(jīng)沒(méi)有數(shù)據(jù)要發(fā)送了。但你如果還發(fā)送數(shù)據(jù),我仍接收”。后兩次握手——完全關(guān)閉在主機(jī)B向主機(jī)A的數(shù)據(jù)發(fā)送結(jié)束后,其應(yīng)用進(jìn)程就通知TCP釋放連接。主機(jī)B發(fā)出的連接釋放報(bào)文段必須將終止比特FIN置1,并使序號(hào)y等于前面已傳送過(guò)的數(shù)據(jù)的最后一個(gè)字節(jié)的序號(hào)加1,還必須重復(fù)上次已發(fā)送過(guò)的ACK=x+1。主機(jī)A必須對(duì)此發(fā)出確認(rèn),給出ACK=y+1。這樣才將從B到A的反方向連接釋放掉。主機(jī)A的TCP再向其應(yīng)用進(jìn)程報(bào)告,整個(gè)連接已全部釋放。連接釋放過(guò)程和連接建立過(guò)程的三次握手本質(zhì)上是一致的。Tcpdump結(jié)果觀察A.1037>B.25:F1415531522:1415531522(0)ack1823083522win4096B.25>A.1037:.ack1415531523win4096B.25>A.1037:F1823083522:1823083522(0)ack1415531523win4096A.1037>B.25:.ack1823083523win4096擁塞控制實(shí)現(xiàn)流量控制并非僅僅為了使接收端來(lái)得及接收。如果發(fā)送端發(fā)出的報(bào)文過(guò)多會(huì)使網(wǎng)絡(luò)負(fù)荷過(guò)重。因此會(huì)引起報(bào)文段的時(shí)延增大,將使主機(jī)不能及時(shí)的收到確認(rèn),因此會(huì)重發(fā)更多的報(bào)文段,而這又會(huì)進(jìn)一步加劇網(wǎng)絡(luò)的擁塞。為了避免發(fā)生擁塞,主機(jī)應(yīng)當(dāng)降低發(fā)送速率。
可見(jiàn)發(fā)送端的主機(jī)在發(fā)送數(shù)據(jù)時(shí),既要考慮到接收端的接收能力,又要使網(wǎng)絡(luò)不要發(fā)生擁塞。發(fā)送窗口大小發(fā)送窗口=Min[通知窗口,擁塞窗口]其中:通知窗口:接收端根據(jù)其接收能力許諾的窗口值,是來(lái)自接收端的流量控制。接收端將通知窗口的值放在TCP報(bào)文的首部中,傳送給發(fā)送端。
擁塞窗口:是發(fā)送端根據(jù)網(wǎng)絡(luò)擁塞情況得出得窗口值,是來(lái)自發(fā)送端的流量控制。
在未發(fā)生擁塞的穩(wěn)定情況下,接收端通知的窗口和擁塞窗口是一致的。擁塞控制算法擁塞的判別:由于通信線路帶來(lái)的誤碼而使得分組丟失的概率很?。ㄟh(yuǎn)小于1%)。因此,只要出現(xiàn)分組丟失或延遲過(guò)長(zhǎng)而引起超時(shí)重發(fā),就意味著在網(wǎng)絡(luò)中的某個(gè)地方出現(xiàn)了擁塞。慢啟動(dòng)算法
該算法通過(guò)觀察新的分組進(jìn)入網(wǎng)絡(luò)的速率應(yīng)該與另一端返回確認(rèn)的速率相同而進(jìn)行工作。慢啟動(dòng)將擁塞窗口初始化為1個(gè)報(bào)文段(即另一端通告的報(bào)文段大?。?。每收到一個(gè)ACK,擁塞窗口就增加一個(gè)報(bào)文段大?。▽?shí)際上是字節(jié)數(shù)),發(fā)送方取擁塞窗口和通告窗口中的最小值作為發(fā)送上限。顯然擁塞窗口以指數(shù)級(jí)增長(zhǎng):1個(gè),2個(gè)(收到1個(gè)ACK),4個(gè)(收到擁塞窗口為2時(shí)的兩個(gè)報(bào)文的2個(gè)ACK),8個(gè)(收到擁塞窗口為4時(shí)的兩個(gè)報(bào)文的4個(gè)ACK)。。。。。。源端向網(wǎng)絡(luò)中發(fā)送的數(shù)據(jù)量將急劇增加。擁塞避免算法擁塞避免算法:與慢啟動(dòng)類似,只是將擁塞窗口每次增加1個(gè)報(bào)文段大小,而不是以指數(shù)增加。這樣可以減慢數(shù)據(jù)包進(jìn)入網(wǎng)絡(luò)的速率。慢啟動(dòng)的門
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 華師大版數(shù)學(xué)八年級(jí)上冊(cè)12.5《因式分解》(第1課時(shí))聽(tīng)評(píng)課記錄
- 現(xiàn)場(chǎng)服務(wù)協(xié)議書(2篇)
- 生活小家電代理銷售合同(2篇)
- 粵人版地理七年級(jí)上冊(cè)《第三節(jié) 聚落的發(fā)展變化》聽(tīng)課評(píng)課記錄7
- 蘇州市公開課蘇教版六年級(jí)數(shù)學(xué)下冊(cè)《確定位置》聽(tīng)評(píng)課記錄+教學(xué)反思
- 人教版數(shù)學(xué)八年級(jí)上下冊(cè)聽(tīng)評(píng)課記錄(全冊(cè))
- 人教版部編歷史八年級(jí)上冊(cè)《第19課 七七事變與全民族抗戰(zhàn)》聽(tīng)課評(píng)課記錄3
- 五年級(jí)上冊(cè)數(shù)學(xué)聽(tīng)評(píng)課記錄《4.3 探索活動(dòng):平行四邊形的面積》(18)-北師大版
- 新版華東師大版八年級(jí)數(shù)學(xué)下冊(cè)《16分式復(fù)習(xí)》聽(tīng)評(píng)課記錄15
- 人教版數(shù)學(xué)七年級(jí)下冊(cè)第16課時(shí)《6.1平方根(第1課時(shí))》聽(tīng)評(píng)課記錄
- 【正版授權(quán)】 ISO 15978:2002 EN Open end blind rivets with break pull mandrel and countersunk head - AIA/St
- 2024時(shí)事政治考試題庫(kù)(基礎(chǔ)題)
- 2024山西文旅投資集團(tuán)招聘117人公開引進(jìn)高層次人才和急需緊缺人才筆試參考題庫(kù)(共500題)答案詳解版
- 小學(xué)校本課程教材《趣味數(shù)學(xué)》
- 干細(xì)胞療法推廣方案
- (2024年)電工安全培訓(xùn)(新編)課件
- mil-std-1916抽樣標(biāo)準(zhǔn)(中文版)
- 《社區(qū)康復(fù)》課件-第七章 腦癱患兒的社區(qū)康復(fù)實(shí)踐
- 城鄉(xiāng)環(huán)衛(wèi)一體化內(nèi)部管理制度
- 廣匯煤炭清潔煉化有限責(zé)任公司1000萬(wàn)噸年煤炭分級(jí)提質(zhì)綜合利用項(xiàng)目變更環(huán)境影響報(bào)告書
- 小學(xué)數(shù)學(xué)六年級(jí)解方程練習(xí)300題及答案
評(píng)論
0/150
提交評(píng)論