計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)及應(yīng)用(第二版)第8章-運(yùn)輸層要課件_第1頁
計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)及應(yīng)用(第二版)第8章-運(yùn)輸層要課件_第2頁
計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)及應(yīng)用(第二版)第8章-運(yùn)輸層要課件_第3頁
計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)及應(yīng)用(第二版)第8章-運(yùn)輸層要課件_第4頁
計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)及應(yīng)用(第二版)第8章-運(yùn)輸層要課件_第5頁
已閱讀5頁,還剩89頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第8章運(yùn)輸層計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)及應(yīng)用(第2版)第8章運(yùn)輸層計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)及應(yīng)用(第2版)18.1傳輸層概述運(yùn)輸層是整個(gè)網(wǎng)絡(luò)體系結(jié)構(gòu)中的關(guān)鍵層次之一,其根本任務(wù)是為兩個(gè)主機(jī)中的應(yīng)用進(jìn)程提供通信服務(wù)。在傳輸層中共有兩個(gè)協(xié)議,分別是TCP協(xié)議與UDP協(xié)議,TCP協(xié)議的控制機(jī)制非常復(fù)雜,從而保證了應(yīng)用進(jìn)程之間的可靠數(shù)據(jù)傳輸。8.1傳輸層概述運(yùn)輸層是整個(gè)網(wǎng)絡(luò)體系結(jié)構(gòu)中的關(guān)鍵層次之一,其28.1.1傳輸層的設(shè)計(jì)問題傳輸層的最高目標(biāo)是向其用戶(一般是指應(yīng)用層的進(jìn)程,即運(yùn)行著的應(yīng)用程序),提供有效、可靠且價(jià)格合理的服務(wù)。為了達(dá)到這一目標(biāo),傳輸層利用了網(wǎng)絡(luò)層所提供的服務(wù)。傳輸層完成這一工作的硬件和軟件稱為傳輸實(shí)體(transportentity)。傳輸實(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)系如圖8-1所示。8.1.1傳輸層的設(shè)計(jì)問題傳輸層的最高目標(biāo)是向其用戶(一般是3圖8-1網(wǎng)絡(luò)層、傳輸層和應(yīng)用層的邏輯關(guān)系圖8-1網(wǎng)絡(luò)層、傳輸層和應(yīng)用層的邏輯關(guān)系4傳輸層協(xié)議通常具有幾種責(zé)任。一種責(zé)任就是創(chuàng)建進(jìn)程到進(jìn)程的通信,通常使用端口號(hào)來完成這種功能。另一種責(zé)任是在傳輸層提供控制機(jī)制,比如差錯(cuò)控制、流量控制及擁塞控制等,UDP協(xié)議提供很簡(jiǎn)單的控制機(jī)制,而TCP卻要復(fù)雜很多,如使用確認(rèn)分組、超時(shí)和重傳來完成差錯(cuò)控制,使用滑動(dòng)窗口協(xié)議完成流量控制等。另外,傳輸層還應(yīng)當(dāng)負(fù)責(zé)為進(jìn)程建立連接機(jī)制,這些進(jìn)程應(yīng)當(dāng)能夠向傳輸層的發(fā)送數(shù)據(jù)流。傳輸層在發(fā)送站的責(zé)任應(yīng)當(dāng)是和接收站建立連接,把數(shù)據(jù)流分割成可傳輸?shù)膯卧?,把它們編?hào),然后逐個(gè)發(fā)送他們。傳輸層在接收端的責(zé)任應(yīng)當(dāng)是等待屬于同一個(gè)進(jìn)程的所有不同單元的到達(dá),檢查并傳遞那些沒有差錯(cuò)的單元,并把它們作為一個(gè)流,交付給接收進(jìn)程。當(dāng)整個(gè)流發(fā)送完畢后,傳輸層應(yīng)當(dāng)關(guān)閉這個(gè)連接。傳輸層協(xié)議通常具有幾種責(zé)任。一種責(zé)任就是創(chuàng)建進(jìn)程到進(jìn)程的通信5運(yùn)輸層的任務(wù)是為兩個(gè)主機(jī)中的應(yīng)用進(jìn)程提供通信服務(wù)。這與網(wǎng)絡(luò)層中的IP協(xié)議有什么區(qū)別呢?IP協(xié)議是負(fù)責(zé)計(jì)算機(jī)級(jí)的通信,換句話說,是提供主機(jī)到主機(jī)的通信服務(wù)。作為網(wǎng)絡(luò)層協(xié)議,IP協(xié)議只能將報(bào)文交付給目的計(jì)算機(jī)。但是,這是一種不完整的交付。這個(gè)報(bào)文還必須送交到正確的進(jìn)程。這正是傳輸層協(xié)議所要做的事。運(yùn)輸層的任務(wù)是為兩個(gè)主機(jī)中的應(yīng)用進(jìn)程提供通信服務(wù)。這與網(wǎng)絡(luò)層6圖8-2給出了IP協(xié)議與運(yùn)輸層協(xié)議作用范圍的區(qū)別。圖8-2給出了IP協(xié)議與運(yùn)輸層協(xié)議作用范圍的區(qū)別。7另外,除了在作用范圍上有所區(qū)別,傳輸層還比網(wǎng)絡(luò)層提供更可靠的傳輸服務(wù)。分組丟失、數(shù)據(jù)殘缺均會(huì)被傳輸層檢測(cè)到并采取相應(yīng)的補(bǔ)救措施。另外,除了在作用范圍上有所區(qū)別,傳輸層還比網(wǎng)絡(luò)層提供更可靠的88.1.2端口現(xiàn)在的操作系統(tǒng)都支持多用戶、多任務(wù)的運(yùn)行環(huán)境。一個(gè)計(jì)算機(jī)在同一時(shí)間可運(yùn)行多個(gè)進(jìn)程。在網(wǎng)絡(luò)上,主機(jī)是用IP地址來定義的。要定義主機(jī)上的某一個(gè)進(jìn)程,便需要第二個(gè)標(biāo)識(shí)符,叫做端口號(hào)。8.1.2端口現(xiàn)在的操作系統(tǒng)都支持多用戶、多任務(wù)的運(yùn)行環(huán)境9端口是個(gè)非常重要的概念,因?yàn)閼?yīng)用層的各種進(jìn)程是通過相應(yīng)的端口與運(yùn)輸實(shí)體進(jìn)行交互的。因此在運(yùn)輸協(xié)議數(shù)據(jù)單元的首部中都要寫入源端口號(hào)和目的端口號(hào)。當(dāng)運(yùn)輸層收到IP層交上來的數(shù)據(jù),就要根據(jù)其目的端口號(hào)來決定應(yīng)當(dāng)通過哪一個(gè)端口上交給目的應(yīng)用進(jìn)程。在TCP/IP協(xié)議族中,端口號(hào)由16位二進(jìn)制數(shù)表示,換算為十進(jìn)制,則是0-65536之間的整數(shù)。端口號(hào)只有本地意義,即端口號(hào)只是為標(biāo)志本計(jì)算機(jī)應(yīng)用層中的各進(jìn)程,不同計(jì)算機(jī)的相同端口號(hào)是沒有聯(lián)系的。端口是個(gè)非常重要的概念,因?yàn)閼?yīng)用層的各種進(jìn)程是通過相應(yīng)的端口10端口號(hào)分為兩類。一類是由因特網(wǎng)指派名字和號(hào)碼公司ICANN負(fù)責(zé)分配給一些常用的應(yīng)用層程序固定使用的熟知端口(well-knownport),其數(shù)據(jù)一般為0-1023,表8-1中便列出了部分常見的熟知端口。“熟知”就表示這些端口號(hào)是TCP/IP體系確定并公布的,因而是所有用戶進(jìn)程都知道的。當(dāng)一種新的應(yīng)用程序出現(xiàn)時(shí),必須為它指派一個(gè)熟知端口,否則其他的應(yīng)用進(jìn)程都無法和它進(jìn)行交互。在應(yīng)用層中的各種不同的服務(wù)器進(jìn)程不斷地檢測(cè)分配給它們的熟知端口,以便發(fā)現(xiàn)是否有某個(gè)客戶進(jìn)程要和它通信。另一類是一般端口,用來隨時(shí)分配給請(qǐng)求通信的客戶進(jìn)程,一般來說,客戶進(jìn)程所使用的端口號(hào)都是臨時(shí)產(chǎn)生的,通信完成后便釋放,所以又稱短暫端口號(hào)。端口號(hào)分為兩類。一類是由因特網(wǎng)指派名字和號(hào)碼公司ICANN負(fù)11表8-1常見的熟知端口協(xié)議端口說明FTP21文件傳輸協(xié)議TELNET23遠(yuǎn)程登錄協(xié)議SMTP25簡(jiǎn)單郵件傳輸協(xié)議DNS53域名解析協(xié)議DHCP67動(dòng)態(tài)主機(jī)配置協(xié)議TFTP69快速文件傳輸協(xié)議HTTP80超文本傳輸協(xié)議SNMP161簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議表8-1常見的熟知端口協(xié)議端口說明FTP21文件傳輸協(xié)議T12為了在通信時(shí)能確定唯一主機(jī)的唯一進(jìn)程,就必須把端口號(hào)和主機(jī)的IP地址結(jié)合起來一起使用,稱為套接字地址(socketaddress),或直接稱為SOCKET。在實(shí)際通信過程中,我們需要一對(duì)套接字地址:客戶套接字地址和服務(wù)器套接字地址,客戶套接字地址惟一定義了客戶進(jìn)程,而服務(wù)器套接字唯一地定義了服務(wù)器進(jìn)程。這四種信息分別是IP首部與運(yùn)輸協(xié)議數(shù)據(jù)單元首部中的一部分。為了在通信時(shí)能確定唯一主機(jī)的唯一進(jìn)程,就必須把端口號(hào)和主機(jī)的13圖8-3套接字的組成圖8-3套接字的組成148.3用戶數(shù)據(jù)報(bào)協(xié)議UDP8.3.1UDP概述用戶數(shù)據(jù)報(bào)協(xié)議UDP是傳輸層協(xié)議之一,其實(shí)現(xiàn)功能較為簡(jiǎn)單,但由于其靈活、開銷小等特點(diǎn),使得它更適合某些應(yīng)用。UDP提供無連接的服務(wù)。這表示UDP發(fā)送出的每一個(gè)用戶數(shù)據(jù)報(bào)都是獨(dú)立的數(shù)據(jù)報(bào)。用戶數(shù)據(jù)報(bào)并不進(jìn)行編號(hào),也沒有建立連接和釋放連接的過程,每一個(gè)用戶數(shù)據(jù)報(bào)可以走不同的路徑。8.3用戶數(shù)據(jù)報(bào)協(xié)議UDP8.3.1UDP概述15UDP是一個(gè)不可靠的傳輸層協(xié)議。它沒有流量控制,因而當(dāng)?shù)絹淼膱?bào)文太多時(shí),接收端可能溢出。除檢驗(yàn)和外,UDP也沒有差錯(cuò)控制機(jī)制。這表示發(fā)送端并不知道報(bào)文是丟失了還是重復(fù)地交付了。當(dāng)接收端使用檢驗(yàn)和并檢測(cè)出差錯(cuò)時(shí),就悄悄地將這個(gè)用戶數(shù)據(jù)報(bào)丟掉。缺少流量控制和差錯(cuò)控制就表示使用UDP的進(jìn)程必須要提供這些機(jī)制。UDP是一個(gè)不可靠的傳輸層協(xié)議。它沒有流量控制,因而當(dāng)?shù)絹淼?68.3.2UDP用戶數(shù)據(jù)報(bào)UDP分組叫做用戶數(shù)據(jù)報(bào),有8個(gè)字節(jié)的固定首部。圖8-4給出了用戶數(shù)據(jù)報(bào)的格式。8.3.2UDP用戶數(shù)據(jù)報(bào)UDP分組叫做用戶數(shù)據(jù)報(bào),有817在用戶數(shù)據(jù)報(bào)首部中的字段有以下幾個(gè):源端口號(hào):這是在源主機(jī)上運(yùn)行的進(jìn)程所使用的端口號(hào)。有16位長(zhǎng),這就是表示端口號(hào)的范圍為0-65535。若源主機(jī)是客戶端(當(dāng)客戶進(jìn)程發(fā)送請(qǐng)求時(shí)),則在大多數(shù)情況下,這個(gè)端口是短暫端口號(hào);若源主機(jī)是服務(wù)器端,則在大多數(shù)情況下這個(gè)端口號(hào)是熟知端口號(hào)。目的端口號(hào):這是在目的主機(jī)上運(yùn)行的進(jìn)程使用的端口號(hào)。也是16位長(zhǎng)。若目的主機(jī)是客戶端(當(dāng)客戶進(jìn)程發(fā)送請(qǐng)求時(shí)),則在大多數(shù)情況下,這個(gè)端口是短暫端口號(hào);反之,若目的主機(jī)是服務(wù)器端,則在大多數(shù)情況下這個(gè)端口號(hào)是熟知端口號(hào)。在用戶數(shù)據(jù)報(bào)首部中的字段有以下幾個(gè):源端口號(hào):這是在源主機(jī)上18總長(zhǎng)度:是用戶數(shù)據(jù)報(bào)的總長(zhǎng)度,即首部加上數(shù)據(jù)后的總長(zhǎng)度,也是16位長(zhǎng)。這表示總長(zhǎng)度最長(zhǎng)為65535字節(jié),但最小長(zhǎng)度不是0字節(jié),而是8字節(jié),它指出用戶數(shù)據(jù)報(bào)只有首部而無數(shù)據(jù)。檢驗(yàn)和:這個(gè)字段用來檢驗(yàn)整個(gè)用戶數(shù)據(jù)報(bào)出現(xiàn)的差錯(cuò)總長(zhǎng)度:是用戶數(shù)據(jù)報(bào)的總長(zhǎng)度,即首部加上數(shù)據(jù)后的總長(zhǎng)度,也是19用戶數(shù)據(jù)報(bào)數(shù)據(jù)部分則是從應(yīng)用層繼承下來的,數(shù)據(jù)的長(zhǎng)度可從0到65507(即65535-20-8)字節(jié)(20字節(jié)的IP首部和8字節(jié)的UDP首部)用戶數(shù)據(jù)報(bào)數(shù)據(jù)部分則是從應(yīng)用層繼承下來的,數(shù)據(jù)的長(zhǎng)度可從0到20UDP用戶數(shù)據(jù)首部中檢驗(yàn)和的計(jì)算機(jī)方法有些特殊。在計(jì)算檢驗(yàn)和時(shí),要在UDP用戶數(shù)據(jù)報(bào)之前增加12個(gè)字節(jié)的偽首部。所謂“偽首部”是因?yàn)檫@種偽首部并不是UDP用戶數(shù)據(jù)報(bào)真正的首部。偽首部共六個(gè)字段:源IP地址、目的IP地址、全0(為補(bǔ)偶數(shù)個(gè)字節(jié)用)、協(xié)議號(hào)、UDP長(zhǎng)度,大部分字段都是從IP數(shù)據(jù)報(bào)首部中提取出來的。只是在計(jì)算檢驗(yàn)和時(shí),臨時(shí)和UDP用戶數(shù)據(jù)報(bào)連接在一起,得到一個(gè)過渡的UDP用戶數(shù)據(jù)報(bào)。檢驗(yàn)和就是按照這個(gè)過渡的UDP用戶數(shù)據(jù)報(bào)來計(jì)算的。偽首部的存在僅為了計(jì)算機(jī)檢驗(yàn)和。UDP用戶數(shù)據(jù)首部中檢驗(yàn)和的計(jì)算機(jī)方法有些特殊。在計(jì)算檢驗(yàn)21UDP計(jì)算檢驗(yàn)和是將首部和數(shù)據(jù)部分一起檢驗(yàn)。在發(fā)送端,首先是先將全零放入檢驗(yàn)和字段。再將偽首部以及UDP用戶數(shù)據(jù)報(bào)看成是由許多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)無差錯(cuò)時(shí)其結(jié)果應(yīng)為全1。否則就表明有差錯(cuò)出現(xiàn),接收端就應(yīng)將此UDP用戶數(shù)據(jù)報(bào)丟棄。UDP計(jì)算檢驗(yàn)和是將首部和數(shù)據(jù)部分一起檢驗(yàn)。在發(fā)送端,首先是228.4傳輸控制協(xié)議TCP8.4.1TCP概述與UDP不同,TCP是一種面向流的協(xié)議。在UDP中,進(jìn)行把一塊數(shù)據(jù)發(fā)送給UDP以便進(jìn)行傳遞。UDP在這塊數(shù)據(jù)上添加自己的首部,這就構(gòu)成了數(shù)據(jù)報(bào),然后再把它傳遞給IP來傳輸。這個(gè)進(jìn)程可以一連傳遞好幾個(gè)塊數(shù)據(jù)給UDP,但UDP對(duì)每一塊數(shù)據(jù)都是獨(dú)立對(duì)待,而并不考慮它們之間的任何聯(lián)系。8.4傳輸控制協(xié)議TCP8.4.1TCP概述23TCP則允許發(fā)送進(jìn)程以字節(jié)流的形式來傳遞數(shù)據(jù),而接收進(jìn)程也把數(shù)據(jù)作為字節(jié)流來接收。TCP創(chuàng)建了一種環(huán)境,它使得兩個(gè)進(jìn)程好像被一個(gè)假想的“管道”所連接,而這個(gè)管道在Internet上傳送兩個(gè)進(jìn)程的數(shù)據(jù),發(fā)送進(jìn)程產(chǎn)生字節(jié)流,而接收進(jìn)程消耗字節(jié)流。由于發(fā)送進(jìn)程和接收進(jìn)程產(chǎn)生和消耗數(shù)據(jù)的速度并不一樣,因此TCP需要緩存來存儲(chǔ)數(shù)據(jù)。在每一個(gè)方向上都有緩存,即發(fā)送緩存和接收緩存。另外,除了用緩存來處理這種速度的差異,在發(fā)送數(shù)據(jù)前還需要一種重要的方法,即將字節(jié)流分割為報(bào)文段(Segment)。報(bào)文段是TCP處理的最小數(shù)據(jù)單元。報(bào)文段的長(zhǎng)度可以是不等的。TCP則允許發(fā)送進(jìn)程以字節(jié)流的形式來傳遞數(shù)據(jù),而接收進(jìn)程也把24TCP發(fā)送與接收數(shù)據(jù)過程的示意圖如圖8-5所示。圖8-5TCP發(fā)送與接收數(shù)據(jù)過程TCP發(fā)送與接收數(shù)據(jù)過程的示意圖如圖8-5所示。圖8-5T25TCP提供全雙工服務(wù),即數(shù)據(jù)可在同時(shí)間雙向流動(dòng),每一個(gè)TCP都有發(fā)送緩存和接收緩存,而兩個(gè)方向都可以發(fā)送報(bào)文段。TCP是面向連接協(xié)議,它有連接建立、數(shù)據(jù)傳輸、連接釋放三個(gè)過程。TCP是可靠的傳輸協(xié)議,它使用確認(rèn)機(jī)制來檢查數(shù)據(jù)是否安全和完整地到達(dá)。TCP提供全雙工服務(wù),即數(shù)據(jù)可在同時(shí)間雙向流動(dòng),每一個(gè)TCP268.4.2TCP報(bào)文段TCP報(bào)文段同樣由首部和數(shù)據(jù)兩部分組成。但其首部要比UDP復(fù)雜的多,其首部前20個(gè)字節(jié)是固定的,后面有4N字節(jié)是根據(jù)需要而增加的選項(xiàng)(N為整數(shù))。因此,TCP首部長(zhǎng)度在20-60字節(jié)之間。8.4.2TCP報(bào)文段TCP報(bào)文段同樣由首部和數(shù)據(jù)兩部分組27圖8-6TCP報(bào)文段格式圖8-6TCP報(bào)文段格式28源端口和目的端口字段:各占2字節(jié)。端口是運(yùn)輸層與應(yīng)用層的服務(wù)接口。運(yùn)輸層的復(fù)用和分用功能都要通過端口才能實(shí)現(xiàn)。序號(hào)字段:占4字節(jié)。TCP連接中傳送的數(shù)據(jù)流中的每一個(gè)字節(jié)都編上一個(gè)序號(hào)。序號(hào)字段的值則指的是本報(bào)文段所發(fā)送的數(shù)據(jù)的第一個(gè)字節(jié)的序號(hào)。確認(rèn)號(hào)字段:占4字節(jié),是期望收到對(duì)方的下一個(gè)報(bào)文段的數(shù)據(jù)的第一個(gè)字節(jié)的序號(hào)。數(shù)據(jù)偏移:占4bit,它指出TCP報(bào)文段的數(shù)據(jù)起始處距離TCP報(bào)文段的起始處有多遠(yuǎn)。“數(shù)據(jù)偏移”的單位不是字節(jié)而是32bit字(4字節(jié)為計(jì)算單位)。源端口和目的端口字段:各占2字節(jié)。端口是運(yùn)輸層與應(yīng)用層的29保留字段:占6bit,保留為今后使用,但目前應(yīng)置為0。緊急比特URG:當(dāng)URG1時(shí),表明緊急指針字段有效。它告訴系統(tǒng)此報(bào)文段中有緊急數(shù)據(jù),應(yīng)盡快傳送(相當(dāng)于高優(yōu)先級(jí)的數(shù)據(jù))。確認(rèn)比特ACK:只有當(dāng)ACK1時(shí)確認(rèn)號(hào)字段才有效。當(dāng)ACK0時(shí),確認(rèn)號(hào)無效。推送比特PSH(PuSH):接收TCP收到推送比特置1的報(bào)文段,就盡快地交付給接收應(yīng)用進(jìn)程,而不再等到整個(gè)緩存都填滿了后再向上交付。保留字段:占6bit,保留為今后使用,但目前應(yīng)置為0。30復(fù)位比特RST(ReSeT):當(dāng)RST1時(shí),表明TCP連接中出現(xiàn)嚴(yán)重差錯(cuò)(如由于主機(jī)崩潰或其他原因),必須釋放連接,然后再重新建立運(yùn)輸連接。同步比特SYN:同步比特SYN置為1,就表示這是一個(gè)連接請(qǐng)求或連接接受報(bào)文。終止比特FIN(FINal):用來釋放一個(gè)連接。當(dāng)FIN1時(shí),表明此報(bào)文段的發(fā)送端的數(shù)據(jù)已發(fā)送完畢,并要求釋放運(yùn)輸連接。窗口字段:占2字節(jié)。窗口字段用來控制對(duì)方發(fā)送的數(shù)據(jù)量,單位為字節(jié)。TCP連接的一端根據(jù)設(shè)置的緩存空間大小確定自己的接收窗口大小,然后通知對(duì)方以確定對(duì)方的發(fā)送窗口的上限。復(fù)位比特RST(ReSeT):當(dāng)RST1時(shí),表31檢驗(yàn)和:占2字節(jié)。檢驗(yàn)和字段檢驗(yàn)的范圍包括首部和數(shù)據(jù)這兩部分。在計(jì)算檢驗(yàn)和時(shí),要在TCP報(bào)文段的前面加上12字節(jié)的偽首部。緊急指針字段:占16bit。緊急指針指出:在本報(bào)文段中緊急數(shù)據(jù)共有多少個(gè)字節(jié)(緊急數(shù)據(jù)放在本報(bào)文段數(shù)據(jù)的最前面)。選項(xiàng)字段:長(zhǎng)度可變。TCP只規(guī)定了一種選項(xiàng),即最大報(bào)文段長(zhǎng)度MSS(MaximumSegmentSize)。MSS告訴對(duì)方TCP:“我的緩存所能接收的報(bào)文段的數(shù)據(jù)字段的最大長(zhǎng)度是MSS個(gè)字節(jié)。”填充字段:這是為了使整個(gè)首部長(zhǎng)度是4字節(jié)的整數(shù)倍。檢驗(yàn)和:占2字節(jié)。檢驗(yàn)和字段檢驗(yàn)的范圍包括首部和數(shù)據(jù)這兩328.4.3TCP的可靠性TCP是一種可靠的傳輸協(xié)議。其可靠性體現(xiàn)在它可保證數(shù)據(jù)按序、無丟失、無重復(fù)的到達(dá)目的端。TCP報(bào)文段首部的數(shù)據(jù)編號(hào)與確認(rèn)字段為這種可靠傳輸提供了保障。TCP將所要傳送的整個(gè)報(bào)文看成一個(gè)個(gè)字節(jié)組成的數(shù)據(jù)流,并使每一個(gè)字節(jié)對(duì)應(yīng)于一個(gè)序號(hào)。在連接建立時(shí),雙方要商定初始序號(hào)。TCP每次發(fā)送的報(bào)文段的首部中的序號(hào)字段數(shù)值表示該報(bào)文段中的數(shù)據(jù)部分的第一個(gè)字節(jié)的序號(hào)。8.4.3TCP的可靠性TCP是一種可靠的傳輸協(xié)議。其可靠33接收站點(diǎn)在收到發(fā)送方發(fā)來的數(shù)據(jù)后依據(jù)序號(hào)重新組裝所收到的報(bào)文段。為什么要依靠序號(hào)來重組報(bào)文段呢?因?yàn)樵谝粋€(gè)高速鏈路與低速鏈路并存的網(wǎng)絡(luò)上,可能會(huì)出現(xiàn)高速鏈路上的報(bào)文段比低速鏈路上的報(bào)文段提前到達(dá)的情況,此時(shí)就必須依靠序列號(hào)來重組報(bào)文段,以保證數(shù)據(jù)可以按序上交應(yīng)用進(jìn)程。這就是序列號(hào)的作用之一。接收站點(diǎn)在收到發(fā)送方發(fā)來的數(shù)據(jù)后依據(jù)序號(hào)重新組裝所收到的報(bào)文34TCP的確認(rèn)是對(duì)接收到的數(shù)據(jù)的最高序號(hào)(即收到的數(shù)據(jù)中的最后一個(gè)序號(hào))進(jìn)行確認(rèn)。但返回的確認(rèn)序號(hào)ACK是已收到的數(shù)據(jù)的最高序號(hào)再加1,該確認(rèn)號(hào)既表示對(duì)已收數(shù)據(jù)的確認(rèn),同時(shí)表示期望下次收到的第一個(gè)數(shù)據(jù)字節(jié)的序號(hào)。TCP的確認(rèn)是對(duì)接收到的數(shù)據(jù)的最高序號(hào)(即收到的數(shù)據(jù)中的最后35圖8-7顯示了TCP報(bào)文段傳輸時(shí)SEQ和ACK所扮演的角色。圖8-7顯示了TCP報(bào)文段傳輸時(shí)SEQ和ACK所扮演的角色。36在實(shí)際通信中,存在著超時(shí)和重傳兩種現(xiàn)象。如果在傳輸過程中丟失了某個(gè)序號(hào)的報(bào)文段,導(dǎo)致發(fā)送端在給定的時(shí)間段內(nèi)得不到相應(yīng)的確認(rèn)序號(hào),那么就確認(rèn)該報(bào)文段已被丟失并要求重傳。已發(fā)送的TCP報(bào)文段會(huì)被保存在發(fā)送端的緩沖區(qū)中,直到發(fā)送端接收到確認(rèn)序號(hào)才會(huì)消除緩沖區(qū)中的這個(gè)報(bào)文段。這種機(jī)制稱為肯定確認(rèn)和重新傳輸(PositiveAcknowledgementandRetransmission,PAR),它是許多通信協(xié)議用來確??尚哦鹊囊环N技術(shù),工作過程如圖8-8所示。在實(shí)際通信中,存在著超時(shí)和重傳兩種現(xiàn)象。如果在傳輸過程中丟失37圖8-8超時(shí)和重傳過程中序號(hào)與確認(rèn)號(hào)的作用圖8-8超時(shí)和重傳過程中序號(hào)與確認(rèn)號(hào)的作用38序號(hào)的另一個(gè)作用是消除網(wǎng)絡(luò)中的重復(fù)包(同步復(fù)制)。例如在網(wǎng)絡(luò)阻塞時(shí),發(fā)送端遲遲沒有收到接收端發(fā)來的對(duì)于某個(gè)報(bào)文段的ACK信息,它可能會(huì)認(rèn)為這個(gè)序號(hào)的報(bào)文段丟失了。于是它會(huì)重新發(fā)送這一報(bào)文段,這種情況將會(huì)導(dǎo)致接收端在網(wǎng)絡(luò)恢復(fù)正常后收到兩個(gè)同樣序號(hào)的報(bào)文段,此時(shí)接收端會(huì)自動(dòng)丟棄重復(fù)的報(bào)文段。序號(hào)和確認(rèn)號(hào)為TCP提供了一種糾錯(cuò)機(jī)制,提高了TCP的可靠性。序號(hào)的另一個(gè)作用是消除網(wǎng)絡(luò)中的重復(fù)包(同步復(fù)制)。例如在網(wǎng)絡(luò)398.4.4TCP連接管理TCP是面向連接的協(xié)議。面向連接的協(xié)議在源端和目的端之間建立一條虛路徑。屬于一個(gè)報(bào)文的所有報(bào)文段都沿著這條虛路徑發(fā)送。在TCP通信中,整個(gè)過程分為三個(gè)階段:連接建立、數(shù)據(jù)傳送和連接釋放。8.4.4TCP連接管理TCP是面向連接的協(xié)議。面向連接的401.建立連接TCP以全雙工方式傳送數(shù)據(jù)。當(dāng)兩個(gè)機(jī)器中的兩個(gè)TCP進(jìn)程建立連接后,它們應(yīng)當(dāng)都能夠同時(shí)向?qū)Ψ桨l(fā)送報(bào)文段。主動(dòng)發(fā)起連接建立的應(yīng)用進(jìn)程叫做客戶方,而被動(dòng)等待連接建立的應(yīng)用進(jìn)程叫做服務(wù)器方。在連接建立過程中要解決以下三個(gè)問題:(1)要使每一方能夠確知對(duì)方的存在。(2)要允許雙方協(xié)商一些參數(shù)(如最大報(bào)文段長(zhǎng)度,最大窗口大小,服務(wù)質(zhì)量等)。(3)能夠?qū)\(yùn)輸實(shí)體資源(如緩存大小,連接表中的項(xiàng)目等)進(jìn)行分配。1.建立連接TCP以全雙工方式傳送數(shù)據(jù)。當(dāng)兩個(gè)機(jī)器中的兩個(gè)T41連接建立采用的這種過程叫做三次握手(又叫三向握手),如圖8-9所示。連接建立采用的這種過程叫做三次握手(又叫三向握手),如圖8-422.釋放連接傳輸數(shù)據(jù)的雙方中的任何一方都可以關(guān)閉連接。當(dāng)一個(gè)方向的連接被終止時(shí),另外一方還可繼續(xù)向?qū)Ψ桨l(fā)送數(shù)據(jù)。因此,要在兩個(gè)方向都關(guān)閉連接就需要四個(gè)動(dòng)作,被釋放連接的過程被稱為四向握手。2.釋放連接傳輸數(shù)據(jù)的雙方中的任何一方都可以關(guān)閉連接。當(dāng)一個(gè)43圖8-10釋放連接過程中的“四向握手”圖8-10釋放連接過程中的“四向握手”448.4.5滑動(dòng)窗口與流量控制利用滑動(dòng)窗口進(jìn)行流量控制的方法在數(shù)據(jù)鏈路層協(xié)議中就采用過。為了提高報(bào)文段的傳輸效率,TCP采用大小可變的滑動(dòng)窗口進(jìn)行流量控制。窗口大小的單位是字節(jié)。在TCP報(bào)文段首部的窗口字段寫入的數(shù)值就是當(dāng)前給對(duì)方設(shè)置的發(fā)送窗口數(shù)值的上限。發(fā)送窗口在連接建立時(shí)由雙方商定。但在通信過程中,接收端可根據(jù)自己的資源情況,隨時(shí)動(dòng)態(tài)地調(diào)整對(duì)方的發(fā)送窗口上限值。8.4.5滑動(dòng)窗口與流量控制利用滑動(dòng)窗口進(jìn)行流量控制的方法在45滑動(dòng)窗口允許發(fā)送方在收到接收方的確認(rèn)信息之前發(fā)送多個(gè)數(shù)據(jù)段。窗口大小決定了在收到確認(rèn)信息之前,一次可以傳送的數(shù)據(jù)段的最大數(shù)目。窗口越大,主機(jī)一次可以傳輸?shù)臄?shù)據(jù)段就越多。當(dāng)主機(jī)發(fā)送完窗口允許的最大數(shù)量的數(shù)據(jù)段后,就必須等待確認(rèn)信息。在接收到確認(rèn)信息后才可以再發(fā)送下面的數(shù)據(jù)段。例如,當(dāng)窗口大小為1時(shí),則發(fā)送完1個(gè)數(shù)據(jù)段后,必須經(jīng)過確認(rèn)才可以發(fā)送下一個(gè)數(shù)據(jù)段;當(dāng)窗口大小等于3時(shí),發(fā)送方可以一次發(fā)送3個(gè)數(shù)據(jù)段,再等待對(duì)方的確認(rèn)信息,每收到一個(gè)數(shù)據(jù)段的確認(rèn)信息,窗口便可向前滑動(dòng)一個(gè)報(bào)文段的位置,當(dāng)然,接收方也可采用接收到多個(gè)連續(xù)的報(bào)文段,再一次性發(fā)送對(duì)最后一個(gè)接收?qǐng)?bào)文段的確認(rèn)信息的策略,從而節(jié)省確認(rèn)信息的開銷。正如前所說,窗口的大小并非一成不變的,接收端可根據(jù)自己的資源情況,動(dòng)態(tài)地調(diào)整發(fā)送方的發(fā)送窗口大小?;瑒?dòng)窗口允許發(fā)送方在收到接收方的確認(rèn)信息之前發(fā)送多個(gè)數(shù)據(jù)段。46大小可變的滑動(dòng)窗口應(yīng)用如圖8-11所示。圖8-11大小可變的滑動(dòng)窗口在通信中的應(yīng)用大小可變的滑動(dòng)窗口應(yīng)用如圖8-11所示。圖8-11大小可變47第8章運(yùn)輸層計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)及應(yīng)用(第2版)第8章運(yùn)輸層計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)及應(yīng)用(第2版)488.1傳輸層概述運(yùn)輸層是整個(gè)網(wǎng)絡(luò)體系結(jié)構(gòu)中的關(guān)鍵層次之一,其根本任務(wù)是為兩個(gè)主機(jī)中的應(yīng)用進(jìn)程提供通信服務(wù)。在傳輸層中共有兩個(gè)協(xié)議,分別是TCP協(xié)議與UDP協(xié)議,TCP協(xié)議的控制機(jī)制非常復(fù)雜,從而保證了應(yīng)用進(jìn)程之間的可靠數(shù)據(jù)傳輸。8.1傳輸層概述運(yùn)輸層是整個(gè)網(wǎng)絡(luò)體系結(jié)構(gòu)中的關(guān)鍵層次之一,其498.1.1傳輸層的設(shè)計(jì)問題傳輸層的最高目標(biāo)是向其用戶(一般是指應(yīng)用層的進(jìn)程,即運(yùn)行著的應(yīng)用程序),提供有效、可靠且價(jià)格合理的服務(wù)。為了達(dá)到這一目標(biāo),傳輸層利用了網(wǎng)絡(luò)層所提供的服務(wù)。傳輸層完成這一工作的硬件和軟件稱為傳輸實(shí)體(transportentity)。傳輸實(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)系如圖8-1所示。8.1.1傳輸層的設(shè)計(jì)問題傳輸層的最高目標(biāo)是向其用戶(一般是50圖8-1網(wǎng)絡(luò)層、傳輸層和應(yīng)用層的邏輯關(guān)系圖8-1網(wǎng)絡(luò)層、傳輸層和應(yīng)用層的邏輯關(guān)系51傳輸層協(xié)議通常具有幾種責(zé)任。一種責(zé)任就是創(chuàng)建進(jìn)程到進(jìn)程的通信,通常使用端口號(hào)來完成這種功能。另一種責(zé)任是在傳輸層提供控制機(jī)制,比如差錯(cuò)控制、流量控制及擁塞控制等,UDP協(xié)議提供很簡(jiǎn)單的控制機(jī)制,而TCP卻要復(fù)雜很多,如使用確認(rèn)分組、超時(shí)和重傳來完成差錯(cuò)控制,使用滑動(dòng)窗口協(xié)議完成流量控制等。另外,傳輸層還應(yīng)當(dāng)負(fù)責(zé)為進(jìn)程建立連接機(jī)制,這些進(jìn)程應(yīng)當(dāng)能夠向傳輸層的發(fā)送數(shù)據(jù)流。傳輸層在發(fā)送站的責(zé)任應(yīng)當(dāng)是和接收站建立連接,把數(shù)據(jù)流分割成可傳輸?shù)膯卧?,把它們編?hào),然后逐個(gè)發(fā)送他們。傳輸層在接收端的責(zé)任應(yīng)當(dāng)是等待屬于同一個(gè)進(jìn)程的所有不同單元的到達(dá),檢查并傳遞那些沒有差錯(cuò)的單元,并把它們作為一個(gè)流,交付給接收進(jìn)程。當(dāng)整個(gè)流發(fā)送完畢后,傳輸層應(yīng)當(dāng)關(guān)閉這個(gè)連接。傳輸層協(xié)議通常具有幾種責(zé)任。一種責(zé)任就是創(chuàng)建進(jìn)程到進(jìn)程的通信52運(yùn)輸層的任務(wù)是為兩個(gè)主機(jī)中的應(yīng)用進(jìn)程提供通信服務(wù)。這與網(wǎng)絡(luò)層中的IP協(xié)議有什么區(qū)別呢?IP協(xié)議是負(fù)責(zé)計(jì)算機(jī)級(jí)的通信,換句話說,是提供主機(jī)到主機(jī)的通信服務(wù)。作為網(wǎng)絡(luò)層協(xié)議,IP協(xié)議只能將報(bào)文交付給目的計(jì)算機(jī)。但是,這是一種不完整的交付。這個(gè)報(bào)文還必須送交到正確的進(jìn)程。這正是傳輸層協(xié)議所要做的事。運(yùn)輸層的任務(wù)是為兩個(gè)主機(jī)中的應(yīng)用進(jìn)程提供通信服務(wù)。這與網(wǎng)絡(luò)層53圖8-2給出了IP協(xié)議與運(yùn)輸層協(xié)議作用范圍的區(qū)別。圖8-2給出了IP協(xié)議與運(yùn)輸層協(xié)議作用范圍的區(qū)別。54另外,除了在作用范圍上有所區(qū)別,傳輸層還比網(wǎng)絡(luò)層提供更可靠的傳輸服務(wù)。分組丟失、數(shù)據(jù)殘缺均會(huì)被傳輸層檢測(cè)到并采取相應(yīng)的補(bǔ)救措施。另外,除了在作用范圍上有所區(qū)別,傳輸層還比網(wǎng)絡(luò)層提供更可靠的558.1.2端口現(xiàn)在的操作系統(tǒng)都支持多用戶、多任務(wù)的運(yùn)行環(huán)境。一個(gè)計(jì)算機(jī)在同一時(shí)間可運(yùn)行多個(gè)進(jìn)程。在網(wǎng)絡(luò)上,主機(jī)是用IP地址來定義的。要定義主機(jī)上的某一個(gè)進(jìn)程,便需要第二個(gè)標(biāo)識(shí)符,叫做端口號(hào)。8.1.2端口現(xiàn)在的操作系統(tǒng)都支持多用戶、多任務(wù)的運(yùn)行環(huán)境56端口是個(gè)非常重要的概念,因?yàn)閼?yīng)用層的各種進(jìn)程是通過相應(yīng)的端口與運(yùn)輸實(shí)體進(jìn)行交互的。因此在運(yùn)輸協(xié)議數(shù)據(jù)單元的首部中都要寫入源端口號(hào)和目的端口號(hào)。當(dāng)運(yùn)輸層收到IP層交上來的數(shù)據(jù),就要根據(jù)其目的端口號(hào)來決定應(yīng)當(dāng)通過哪一個(gè)端口上交給目的應(yīng)用進(jìn)程。在TCP/IP協(xié)議族中,端口號(hào)由16位二進(jìn)制數(shù)表示,換算為十進(jìn)制,則是0-65536之間的整數(shù)。端口號(hào)只有本地意義,即端口號(hào)只是為標(biāo)志本計(jì)算機(jī)應(yīng)用層中的各進(jìn)程,不同計(jì)算機(jī)的相同端口號(hào)是沒有聯(lián)系的。端口是個(gè)非常重要的概念,因?yàn)閼?yīng)用層的各種進(jìn)程是通過相應(yīng)的端口57端口號(hào)分為兩類。一類是由因特網(wǎng)指派名字和號(hào)碼公司ICANN負(fù)責(zé)分配給一些常用的應(yīng)用層程序固定使用的熟知端口(well-knownport),其數(shù)據(jù)一般為0-1023,表8-1中便列出了部分常見的熟知端口?!笆熘本捅硎具@些端口號(hào)是TCP/IP體系確定并公布的,因而是所有用戶進(jìn)程都知道的。當(dāng)一種新的應(yīng)用程序出現(xiàn)時(shí),必須為它指派一個(gè)熟知端口,否則其他的應(yīng)用進(jìn)程都無法和它進(jìn)行交互。在應(yīng)用層中的各種不同的服務(wù)器進(jìn)程不斷地檢測(cè)分配給它們的熟知端口,以便發(fā)現(xiàn)是否有某個(gè)客戶進(jìn)程要和它通信。另一類是一般端口,用來隨時(shí)分配給請(qǐng)求通信的客戶進(jìn)程,一般來說,客戶進(jìn)程所使用的端口號(hào)都是臨時(shí)產(chǎn)生的,通信完成后便釋放,所以又稱短暫端口號(hào)。端口號(hào)分為兩類。一類是由因特網(wǎng)指派名字和號(hào)碼公司ICANN負(fù)58表8-1常見的熟知端口協(xié)議端口說明FTP21文件傳輸協(xié)議TELNET23遠(yuǎn)程登錄協(xié)議SMTP25簡(jiǎn)單郵件傳輸協(xié)議DNS53域名解析協(xié)議DHCP67動(dòng)態(tài)主機(jī)配置協(xié)議TFTP69快速文件傳輸協(xié)議HTTP80超文本傳輸協(xié)議SNMP161簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議表8-1常見的熟知端口協(xié)議端口說明FTP21文件傳輸協(xié)議T59為了在通信時(shí)能確定唯一主機(jī)的唯一進(jìn)程,就必須把端口號(hào)和主機(jī)的IP地址結(jié)合起來一起使用,稱為套接字地址(socketaddress),或直接稱為SOCKET。在實(shí)際通信過程中,我們需要一對(duì)套接字地址:客戶套接字地址和服務(wù)器套接字地址,客戶套接字地址惟一定義了客戶進(jìn)程,而服務(wù)器套接字唯一地定義了服務(wù)器進(jìn)程。這四種信息分別是IP首部與運(yùn)輸協(xié)議數(shù)據(jù)單元首部中的一部分。為了在通信時(shí)能確定唯一主機(jī)的唯一進(jìn)程,就必須把端口號(hào)和主機(jī)的60圖8-3套接字的組成圖8-3套接字的組成618.3用戶數(shù)據(jù)報(bào)協(xié)議UDP8.3.1UDP概述用戶數(shù)據(jù)報(bào)協(xié)議UDP是傳輸層協(xié)議之一,其實(shí)現(xiàn)功能較為簡(jiǎn)單,但由于其靈活、開銷小等特點(diǎn),使得它更適合某些應(yīng)用。UDP提供無連接的服務(wù)。這表示UDP發(fā)送出的每一個(gè)用戶數(shù)據(jù)報(bào)都是獨(dú)立的數(shù)據(jù)報(bào)。用戶數(shù)據(jù)報(bào)并不進(jìn)行編號(hào),也沒有建立連接和釋放連接的過程,每一個(gè)用戶數(shù)據(jù)報(bào)可以走不同的路徑。8.3用戶數(shù)據(jù)報(bào)協(xié)議UDP8.3.1UDP概述62UDP是一個(gè)不可靠的傳輸層協(xié)議。它沒有流量控制,因而當(dāng)?shù)絹淼膱?bào)文太多時(shí),接收端可能溢出。除檢驗(yàn)和外,UDP也沒有差錯(cuò)控制機(jī)制。這表示發(fā)送端并不知道報(bào)文是丟失了還是重復(fù)地交付了。當(dāng)接收端使用檢驗(yàn)和并檢測(cè)出差錯(cuò)時(shí),就悄悄地將這個(gè)用戶數(shù)據(jù)報(bào)丟掉。缺少流量控制和差錯(cuò)控制就表示使用UDP的進(jìn)程必須要提供這些機(jī)制。UDP是一個(gè)不可靠的傳輸層協(xié)議。它沒有流量控制,因而當(dāng)?shù)絹淼?38.3.2UDP用戶數(shù)據(jù)報(bào)UDP分組叫做用戶數(shù)據(jù)報(bào),有8個(gè)字節(jié)的固定首部。圖8-4給出了用戶數(shù)據(jù)報(bào)的格式。8.3.2UDP用戶數(shù)據(jù)報(bào)UDP分組叫做用戶數(shù)據(jù)報(bào),有864在用戶數(shù)據(jù)報(bào)首部中的字段有以下幾個(gè):源端口號(hào):這是在源主機(jī)上運(yùn)行的進(jìn)程所使用的端口號(hào)。有16位長(zhǎng),這就是表示端口號(hào)的范圍為0-65535。若源主機(jī)是客戶端(當(dāng)客戶進(jìn)程發(fā)送請(qǐng)求時(shí)),則在大多數(shù)情況下,這個(gè)端口是短暫端口號(hào);若源主機(jī)是服務(wù)器端,則在大多數(shù)情況下這個(gè)端口號(hào)是熟知端口號(hào)。目的端口號(hào):這是在目的主機(jī)上運(yùn)行的進(jìn)程使用的端口號(hào)。也是16位長(zhǎng)。若目的主機(jī)是客戶端(當(dāng)客戶進(jìn)程發(fā)送請(qǐng)求時(shí)),則在大多數(shù)情況下,這個(gè)端口是短暫端口號(hào);反之,若目的主機(jī)是服務(wù)器端,則在大多數(shù)情況下這個(gè)端口號(hào)是熟知端口號(hào)。在用戶數(shù)據(jù)報(bào)首部中的字段有以下幾個(gè):源端口號(hào):這是在源主機(jī)上65總長(zhǎng)度:是用戶數(shù)據(jù)報(bào)的總長(zhǎng)度,即首部加上數(shù)據(jù)后的總長(zhǎng)度,也是16位長(zhǎng)。這表示總長(zhǎng)度最長(zhǎng)為65535字節(jié),但最小長(zhǎng)度不是0字節(jié),而是8字節(jié),它指出用戶數(shù)據(jù)報(bào)只有首部而無數(shù)據(jù)。檢驗(yàn)和:這個(gè)字段用來檢驗(yàn)整個(gè)用戶數(shù)據(jù)報(bào)出現(xiàn)的差錯(cuò)總長(zhǎng)度:是用戶數(shù)據(jù)報(bào)的總長(zhǎng)度,即首部加上數(shù)據(jù)后的總長(zhǎng)度,也是66用戶數(shù)據(jù)報(bào)數(shù)據(jù)部分則是從應(yīng)用層繼承下來的,數(shù)據(jù)的長(zhǎng)度可從0到65507(即65535-20-8)字節(jié)(20字節(jié)的IP首部和8字節(jié)的UDP首部)用戶數(shù)據(jù)報(bào)數(shù)據(jù)部分則是從應(yīng)用層繼承下來的,數(shù)據(jù)的長(zhǎng)度可從0到67UDP用戶數(shù)據(jù)首部中檢驗(yàn)和的計(jì)算機(jī)方法有些特殊。在計(jì)算檢驗(yàn)和時(shí),要在UDP用戶數(shù)據(jù)報(bào)之前增加12個(gè)字節(jié)的偽首部。所謂“偽首部”是因?yàn)檫@種偽首部并不是UDP用戶數(shù)據(jù)報(bào)真正的首部。偽首部共六個(gè)字段:源IP地址、目的IP地址、全0(為補(bǔ)偶數(shù)個(gè)字節(jié)用)、協(xié)議號(hào)、UDP長(zhǎng)度,大部分字段都是從IP數(shù)據(jù)報(bào)首部中提取出來的。只是在計(jì)算檢驗(yàn)和時(shí),臨時(shí)和UDP用戶數(shù)據(jù)報(bào)連接在一起,得到一個(gè)過渡的UDP用戶數(shù)據(jù)報(bào)。檢驗(yàn)和就是按照這個(gè)過渡的UDP用戶數(shù)據(jù)報(bào)來計(jì)算的。偽首部的存在僅為了計(jì)算機(jī)檢驗(yàn)和。UDP用戶數(shù)據(jù)首部中檢驗(yàn)和的計(jì)算機(jī)方法有些特殊。在計(jì)算檢驗(yàn)68UDP計(jì)算檢驗(yàn)和是將首部和數(shù)據(jù)部分一起檢驗(yàn)。在發(fā)送端,首先是先將全零放入檢驗(yàn)和字段。再將偽首部以及UDP用戶數(shù)據(jù)報(bào)看成是由許多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)無差錯(cuò)時(shí)其結(jié)果應(yīng)為全1。否則就表明有差錯(cuò)出現(xiàn),接收端就應(yīng)將此UDP用戶數(shù)據(jù)報(bào)丟棄。UDP計(jì)算檢驗(yàn)和是將首部和數(shù)據(jù)部分一起檢驗(yàn)。在發(fā)送端,首先是698.4傳輸控制協(xié)議TCP8.4.1TCP概述與UDP不同,TCP是一種面向流的協(xié)議。在UDP中,進(jìn)行把一塊數(shù)據(jù)發(fā)送給UDP以便進(jìn)行傳遞。UDP在這塊數(shù)據(jù)上添加自己的首部,這就構(gòu)成了數(shù)據(jù)報(bào),然后再把它傳遞給IP來傳輸。這個(gè)進(jìn)程可以一連傳遞好幾個(gè)塊數(shù)據(jù)給UDP,但UDP對(duì)每一塊數(shù)據(jù)都是獨(dú)立對(duì)待,而并不考慮它們之間的任何聯(lián)系。8.4傳輸控制協(xié)議TCP8.4.1TCP概述70TCP則允許發(fā)送進(jìn)程以字節(jié)流的形式來傳遞數(shù)據(jù),而接收進(jìn)程也把數(shù)據(jù)作為字節(jié)流來接收。TCP創(chuàng)建了一種環(huán)境,它使得兩個(gè)進(jìn)程好像被一個(gè)假想的“管道”所連接,而這個(gè)管道在Internet上傳送兩個(gè)進(jìn)程的數(shù)據(jù),發(fā)送進(jìn)程產(chǎn)生字節(jié)流,而接收進(jìn)程消耗字節(jié)流。由于發(fā)送進(jìn)程和接收進(jìn)程產(chǎn)生和消耗數(shù)據(jù)的速度并不一樣,因此TCP需要緩存來存儲(chǔ)數(shù)據(jù)。在每一個(gè)方向上都有緩存,即發(fā)送緩存和接收緩存。另外,除了用緩存來處理這種速度的差異,在發(fā)送數(shù)據(jù)前還需要一種重要的方法,即將字節(jié)流分割為報(bào)文段(Segment)。報(bào)文段是TCP處理的最小數(shù)據(jù)單元。報(bào)文段的長(zhǎng)度可以是不等的。TCP則允許發(fā)送進(jìn)程以字節(jié)流的形式來傳遞數(shù)據(jù),而接收進(jìn)程也把71TCP發(fā)送與接收數(shù)據(jù)過程的示意圖如圖8-5所示。圖8-5TCP發(fā)送與接收數(shù)據(jù)過程TCP發(fā)送與接收數(shù)據(jù)過程的示意圖如圖8-5所示。圖8-5T72TCP提供全雙工服務(wù),即數(shù)據(jù)可在同時(shí)間雙向流動(dòng),每一個(gè)TCP都有發(fā)送緩存和接收緩存,而兩個(gè)方向都可以發(fā)送報(bào)文段。TCP是面向連接協(xié)議,它有連接建立、數(shù)據(jù)傳輸、連接釋放三個(gè)過程。TCP是可靠的傳輸協(xié)議,它使用確認(rèn)機(jī)制來檢查數(shù)據(jù)是否安全和完整地到達(dá)。TCP提供全雙工服務(wù),即數(shù)據(jù)可在同時(shí)間雙向流動(dòng),每一個(gè)TCP738.4.2TCP報(bào)文段TCP報(bào)文段同樣由首部和數(shù)據(jù)兩部分組成。但其首部要比UDP復(fù)雜的多,其首部前20個(gè)字節(jié)是固定的,后面有4N字節(jié)是根據(jù)需要而增加的選項(xiàng)(N為整數(shù))。因此,TCP首部長(zhǎng)度在20-60字節(jié)之間。8.4.2TCP報(bào)文段TCP報(bào)文段同樣由首部和數(shù)據(jù)兩部分組74圖8-6TCP報(bào)文段格式圖8-6TCP報(bào)文段格式75源端口和目的端口字段:各占2字節(jié)。端口是運(yùn)輸層與應(yīng)用層的服務(wù)接口。運(yùn)輸層的復(fù)用和分用功能都要通過端口才能實(shí)現(xiàn)。序號(hào)字段:占4字節(jié)。TCP連接中傳送的數(shù)據(jù)流中的每一個(gè)字節(jié)都編上一個(gè)序號(hào)。序號(hào)字段的值則指的是本報(bào)文段所發(fā)送的數(shù)據(jù)的第一個(gè)字節(jié)的序號(hào)。確認(rèn)號(hào)字段:占4字節(jié),是期望收到對(duì)方的下一個(gè)報(bào)文段的數(shù)據(jù)的第一個(gè)字節(jié)的序號(hào)。數(shù)據(jù)偏移:占4bit,它指出TCP報(bào)文段的數(shù)據(jù)起始處距離TCP報(bào)文段的起始處有多遠(yuǎn)?!皵?shù)據(jù)偏移”的單位不是字節(jié)而是32bit字(4字節(jié)為計(jì)算單位)。源端口和目的端口字段:各占2字節(jié)。端口是運(yùn)輸層與應(yīng)用層的76保留字段:占6bit,保留為今后使用,但目前應(yīng)置為0。緊急比特URG:當(dāng)URG1時(shí),表明緊急指針字段有效。它告訴系統(tǒng)此報(bào)文段中有緊急數(shù)據(jù),應(yīng)盡快傳送(相當(dāng)于高優(yōu)先級(jí)的數(shù)據(jù))。確認(rèn)比特ACK:只有當(dāng)ACK1時(shí)確認(rèn)號(hào)字段才有效。當(dāng)ACK0時(shí),確認(rèn)號(hào)無效。推送比特PSH(PuSH):接收TCP收到推送比特置1的報(bào)文段,就盡快地交付給接收應(yīng)用進(jìn)程,而不再等到整個(gè)緩存都填滿了后再向上交付。保留字段:占6bit,保留為今后使用,但目前應(yīng)置為0。77復(fù)位比特RST(ReSeT):當(dāng)RST1時(shí),表明TCP連接中出現(xiàn)嚴(yán)重差錯(cuò)(如由于主機(jī)崩潰或其他原因),必須釋放連接,然后再重新建立運(yùn)輸連接。同步比特SYN:同步比特SYN置為1,就表示這是一個(gè)連接請(qǐng)求或連接接受報(bào)文。終止比特FIN(FINal):用來釋放一個(gè)連接。當(dāng)FIN1時(shí),表明此報(bào)文段的發(fā)送端的數(shù)據(jù)已發(fā)送完畢,并要求釋放運(yùn)輸連接。窗口字段:占2字節(jié)。窗口字段用來控制對(duì)方發(fā)送的數(shù)據(jù)量,單位為字節(jié)。TCP連接的一端根據(jù)設(shè)置的緩存空間大小確定自己的接收窗口大小,然后通知對(duì)方以確定對(duì)方的發(fā)送窗口的上限。復(fù)位比特RST(ReSeT):當(dāng)RST1時(shí),表78檢驗(yàn)和:占2字節(jié)。檢驗(yàn)和字段檢驗(yàn)的范圍包括首部和數(shù)據(jù)這兩部分。在計(jì)算檢驗(yàn)和時(shí),要在TCP報(bào)文段的前面加上12字節(jié)的偽首部。緊急指針字段:占16bit。緊急指針指出:在本報(bào)文段中緊急數(shù)據(jù)共有多少個(gè)字節(jié)(緊急數(shù)據(jù)放在本報(bào)文段數(shù)據(jù)的最前面)。選項(xiàng)字段:長(zhǎng)度可變。TCP只規(guī)定了一種選項(xiàng),即最大報(bào)文段長(zhǎng)度MSS(MaximumSegmentSize)。MSS告訴對(duì)方TCP:“我的緩存所能接收的報(bào)文段的數(shù)據(jù)字段的最大長(zhǎng)度是MSS個(gè)字節(jié)。”填充字段:這是為了使整個(gè)首部長(zhǎng)度是4字節(jié)的整數(shù)倍。檢驗(yàn)和:占2字節(jié)。檢驗(yàn)和字段檢驗(yàn)的范圍包括首部和數(shù)據(jù)這兩798.4.3TCP的可靠性TCP是一種可靠的傳輸協(xié)議。其可靠性體現(xiàn)在它可保證數(shù)據(jù)按序、無丟失、無重復(fù)的到達(dá)目的端。TCP報(bào)文段首部的數(shù)據(jù)編號(hào)與確認(rèn)字段為這種可靠傳輸提供了保障。TCP將所要傳送的整個(gè)報(bào)文看成一個(gè)個(gè)字節(jié)組成的數(shù)據(jù)流,并使每一個(gè)字節(jié)對(duì)應(yīng)于一個(gè)序號(hào)。在連接建立時(shí),雙方要商定初始序號(hào)。TCP每次發(fā)送的報(bào)文段的首部中的序號(hào)字段數(shù)值表示該報(bào)文段中的數(shù)據(jù)部分的第一個(gè)字節(jié)的序號(hào)。8.4.3TCP的可靠性TCP是一種可靠的傳輸協(xié)議。其可靠80接收站點(diǎn)在收到發(fā)送方發(fā)來的數(shù)據(jù)后依據(jù)序號(hào)重新組裝所收到的報(bào)文段。為什么要依靠序號(hào)來重組報(bào)文段呢?因?yàn)樵谝粋€(gè)高速鏈路與低速鏈路并存的網(wǎng)絡(luò)上,可能會(huì)出現(xiàn)高速鏈路上的報(bào)文段比低速鏈路上的報(bào)文段提前到達(dá)的情況,此時(shí)就必須依靠序列號(hào)來重組報(bào)文段,以保證數(shù)據(jù)可以按序上交應(yīng)用進(jìn)程。這就是序列號(hào)的作用之一。接收站點(diǎn)在收到發(fā)送方發(fā)來的數(shù)據(jù)后依據(jù)序號(hào)重新組裝所收到的報(bào)文81TCP的確認(rèn)是對(duì)接收到的數(shù)據(jù)的最高序號(hào)(即收到的數(shù)據(jù)中的最后一個(gè)序號(hào))進(jìn)行確認(rèn)。但返回的確認(rèn)序號(hào)ACK是已收到的數(shù)據(jù)的最高序號(hào)再加1,該確認(rèn)號(hào)既表示對(duì)已收數(shù)據(jù)的確認(rèn),同時(shí)表示期望下次收到的第一個(gè)數(shù)據(jù)字節(jié)的序號(hào)。TCP的確認(rèn)是對(duì)接收到的數(shù)據(jù)的最高序號(hào)(即收到的數(shù)據(jù)中的最后82圖8-7顯示了TCP報(bào)文段傳輸時(shí)SEQ和ACK所扮演的角色。圖8-7顯示了TCP報(bào)文段傳輸時(shí)SEQ和ACK所扮演的角色。83在實(shí)際通信中,存在著超時(shí)和重傳兩種現(xiàn)象。如果在傳輸過程中丟失了某個(gè)序號(hào)的報(bào)文段,導(dǎo)致發(fā)送端在給定的時(shí)間段內(nèi)得不到相應(yīng)的確認(rèn)序號(hào),那么就確認(rèn)該報(bào)文段已被丟失并要求重傳。已發(fā)送的TCP報(bào)文段會(huì)被保存在發(fā)送端的緩沖區(qū)中,直到發(fā)送端接收到確認(rèn)序號(hào)才會(huì)消除緩沖區(qū)中的這個(gè)報(bào)文段。這種機(jī)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論