版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、internet中的傳輸控制協(xié)議tcp張翱翔信息學(xué)院570228學(xué)號(hào) 2000714063aoxiang803摘要:tcp控制協(xié)議保證數(shù)據(jù)傳輸可靠,按序,無(wú)丟失和無(wú)重復(fù)的機(jī)制關(guān)鍵字:tcp的編號(hào),確認(rèn),流量控制,重發(fā)機(jī)制,報(bào)文格式,運(yùn)輸連接管理。abstract :tcp is responsible for verifying the correct delivery ofdata from client to server. data can be lost in the intermediate network. tcp adds support to detect errors or
2、lost data and to trigger retransmission until the data is correctly and completely received.1. tcp的歷史在六十年代末和七十年代初,因特網(wǎng)開(kāi)始以稱為arpanet的廣域網(wǎng)形式漸 現(xiàn)雛形。arpanet是由美國(guó)國(guó)防部高級(jí)研究規(guī)劃局(darpa)出資建設(shè)的。從 1969年開(kāi)始,它包括用實(shí)驗(yàn)性的分組交換系統(tǒng)建立和連接的計(jì)算機(jī)。開(kāi)始,這 個(gè)系統(tǒng)采用了一種客戶機(jī)/服務(wù)器關(guān)系,但后來(lái)決定采用主機(jī)對(duì)主機(jī)協(xié)議會(huì)好一 些。這種協(xié)議稱為網(wǎng)絡(luò)控制協(xié)議(ncp)o到1972年,進(jìn)行了一些驗(yàn)試,具中,許多終端在不同的遠(yuǎn)程鏈路
3、上被連接 到不同的主機(jī)上。隨著這種實(shí)驗(yàn)的繼續(xù),有一種不斷增加的需求,就是必須對(duì)許 多不同類型計(jì)算機(jī)進(jìn)行互聯(lián)的過(guò)程進(jìn)行簡(jiǎn)化。那時(shí)每個(gè)計(jì)算機(jī)廠商都使用不同的 碩件和軟件來(lái)互聯(lián)它們的系統(tǒng)。它的1=1標(biāo)就是開(kāi)發(fā)一種互聯(lián)方式,使得能夠在不 同類型的傳輸方式上(包括低速、高速和無(wú)線連接)支持不同類型的計(jì)算機(jī)。傳輸控制協(xié)議(tcp)的開(kāi)發(fā)始于1973年,由darpa和vinton ceif進(jìn)行, 然后在斯坦福大學(xué)進(jìn)行。到1978年,它已經(jīng)基本完成了,并在此之后被稱為傳 輸控制協(xié)議/ internet協(xié)議(tcp /ip),這時(shí)因?yàn)樾枰獙cp協(xié)議分解成順序的、 面向連接的協(xié)議(tcp)和一種高效的、端點(diǎn)對(duì)端
4、點(diǎn)無(wú)連接協(xié)議(ip)o在七十年代末的某個(gè)時(shí)候,有一種將tcp / ip協(xié)議組集成到開(kāi)放式系統(tǒng)互 聯(lián)(osi)協(xié)議的努力,但是這個(gè)努力失敗了。darpa已經(jīng)資助uc berkeley將 tcp / ip集成到它的unix版本屮。這個(gè)集成后的產(chǎn)品取得了巨大的商業(yè)成功, 并推助tcp /ip成為在美國(guó)選擇的網(wǎng)絡(luò)互聯(lián)標(biāo)準(zhǔn)。2. tcp的原理tcp協(xié)議主要為了在主機(jī)間實(shí)現(xiàn)高可靠性的包交換傳輸協(xié)議。本文將描述協(xié) 議標(biāo)準(zhǔn)和實(shí)現(xiàn)的一些方法。因?yàn)橛?jì)算機(jī)網(wǎng)絡(luò)在現(xiàn)代社會(huì)屮已經(jīng)是不可缺少的了, tcp協(xié)議主要在網(wǎng)絡(luò)不可靠的時(shí)候完成通信,對(duì)軍方可能特別有用,但是對(duì)于政 府和商用部門也適用。tcp是而向連接的端到端的可靠
5、協(xié)議。它支持多種網(wǎng)絡(luò)應(yīng) 用程序。tcp對(duì)下層服務(wù)沒(méi)有多少要求,它假定下層只能提供不可靠的數(shù)據(jù)報(bào)服 務(wù),它可以在多種硬件構(gòu)成的網(wǎng)絡(luò)上運(yùn)行。下面的圖是tcp在層次式結(jié)構(gòu)中的 位置,它的下層是ip協(xié)議,tcp可以根據(jù)ip協(xié)議提供的服務(wù)傳送大小不定的數(shù) 據(jù),ip協(xié)議負(fù)責(zé)對(duì)數(shù)據(jù)進(jìn)行分段,重組,在多種網(wǎng)絡(luò)中傳送。tcp的上面就是應(yīng)用程序,下面是ip協(xié)議,上層接口包扌舌一系列類似于操網(wǎng)絡(luò)層次+作系統(tǒng)中斷的調(diào)用。對(duì)于上層應(yīng)用程序來(lái)說(shuō),tcp應(yīng)該能夠異步傳送數(shù)據(jù)。下層 接口我們假定為ip協(xié)議接口。為了在并不可靠的網(wǎng)絡(luò)上實(shí)現(xiàn)面向連接的可靠的 傳送數(shù)據(jù),tcp必須解決可靠性,流量控制的問(wèn)題,必須能夠?yàn)樯蠈討?yīng)用程序提
6、 供多個(gè)接口,同時(shí)為多個(gè)應(yīng)用程序提供數(shù)據(jù),同時(shí)tcp必須解決連接問(wèn)題,這 樣tcp才能稱得上是而向連接的,最后,tcp也必須能夠解決通信安全性的問(wèn) 題。網(wǎng)絡(luò)環(huán)境包括由網(wǎng)關(guān)(或其它設(shè)備)連接的網(wǎng)絡(luò),網(wǎng)絡(luò)可以是局域網(wǎng)也可以 是一些城域網(wǎng)或廣域網(wǎng),但無(wú)論它們是什么,它們必須是基于包交換的。主機(jī)上 不同的協(xié)議有不同的端口號(hào),一對(duì)進(jìn)程通過(guò)這個(gè)端口號(hào)進(jìn)行通信。這個(gè)通信不包 括計(jì)算機(jī)內(nèi)的i/o操作,只包括在網(wǎng)絡(luò)上進(jìn)行的操作。網(wǎng)絡(luò)上的計(jì)算機(jī)被看作包 傳送的源和目的結(jié)點(diǎn)。特別應(yīng)該注意的是:計(jì)算機(jī)中的不同進(jìn)程可能同時(shí)進(jìn)行通 信,這時(shí)它們會(huì)用端口號(hào)進(jìn)行區(qū)別,不會(huì)把發(fā)向a進(jìn)程的數(shù)據(jù)出b進(jìn)程接收的。進(jìn)程為了傳送數(shù)據(jù)會(huì)調(diào)
7、用tcp,將數(shù)據(jù)和相應(yīng)的參數(shù)傳送給tcp,于是tcp 會(huì)將數(shù)據(jù)傳送到f1的tcp那里,當(dāng)然這是通過(guò)將tcp包打包在ip包內(nèi)在網(wǎng)絡(luò)上 傳送達(dá)到的。接收方tcp在接收到數(shù)據(jù)后會(huì)通信上層應(yīng)用程序,tcp會(huì)保證接 收數(shù)據(jù)順序的正確性。雖然下層協(xié)議可能不會(huì)保證順序是正確的。這里需要說(shuō)明 的是網(wǎng)關(guān)在接收到這個(gè)包后,會(huì)將包解開(kāi),看看是不是已經(jīng)到冃的地了,如果沒(méi) 有到,應(yīng)該走什么路由達(dá)到冃的地,在決定后,網(wǎng)關(guān)會(huì)根據(jù)下一個(gè)網(wǎng)絡(luò)內(nèi)的協(xié)議 情況再次將tcp包打包傳送,如果需耍,還耍把這個(gè)包再次分成兒段再傳送。 這個(gè)落地檢查的過(guò)程是一個(gè)耗時(shí)的過(guò)程。從上面,我們可以看出tcp傳送的基 木過(guò)程,當(dāng)然具體過(guò)程可能要復(fù)雜得多
8、。3 tcp的實(shí)現(xiàn)3.1 tcp實(shí)現(xiàn)控制原理在實(shí)現(xiàn)tcp的主機(jī)上,tcp可以被看成是一個(gè)模塊,和文件系統(tǒng)區(qū)別不大,tcp也可以調(diào)用一些操作系統(tǒng)的功能,tcp不直接和網(wǎng)絡(luò)打交道,控制網(wǎng)絡(luò)的 任務(wù)由專門的設(shè)備驅(qū)動(dòng)模塊完成。tcp只是調(diào)用ip接口,ip向tcp提供所有 tcp需要的服務(wù)。通過(guò)下圖我們可以更清楚地看到tcp協(xié)議的結(jié)構(gòu)。itelnet| | ftp | |voice|tcp | rtp4-+應(yīng)用層主機(jī)層internet protocol & icmp勵(lì)關(guān)層本地網(wǎng)絡(luò)協(xié)議i 網(wǎng)絡(luò)層+網(wǎng)絡(luò)層次聯(lián)系圖上面已經(jīng)說(shuō)過(guò)了,tcp連接是可靠的,而且保證了傳送數(shù)據(jù)包的順序,保證順序 是用一個(gè)序號(hào)來(lái)
9、保證的。響應(yīng)包內(nèi)也包括一個(gè)序列號(hào),表示接收方準(zhǔn)備好這個(gè)序 號(hào)的包。在tcp傳送一個(gè)數(shù)據(jù)包時(shí),它同時(shí)把這個(gè)數(shù)據(jù)包放入重發(fā)隊(duì)列中,同 時(shí)啟動(dòng)記數(shù)器,如果收到了關(guān)于這個(gè)包的確認(rèn)信息,將此包從隊(duì)列中刪除,如果 計(jì)時(shí)超時(shí)則需要重新發(fā)送此包。請(qǐng)注意,從tcp返回的確認(rèn)信息并不保證最終 接收者接收到數(shù)據(jù),這個(gè)責(zé)任由接收方負(fù)責(zé)。侮個(gè)用于傳送tcp的通道都有一個(gè)端口標(biāo)記,因?yàn)檫@個(gè)標(biāo)記是由每個(gè)tcp 終端確定的,因此tcp可能不唯一,為了保證這個(gè)數(shù)值的唯一,要使用網(wǎng)絡(luò)地 址和端口號(hào)的組合達(dá)到唯一標(biāo)識(shí)的目的,我們稱這個(gè)為了套接字(socket), 個(gè)連接由連接兩端的套接字標(biāo)識(shí),本地的套接字可能和不同的外部套接字通信
10、, 這種通信是全雙工的。3. 2 tcp包頭格式ip包頭傳送不同的信息域,包括源地址和冃的地址。tcp頭跟在internet包 頭后面,提供了一些專用于tcp協(xié)議的信息。下圖是tcp包頭格式圖:源端口 source port : 16 位;h 的端口 destination port: 16 位序列碼sequence number: 32位 當(dāng)syn出現(xiàn),序列碼實(shí)際上是初始序列碼(isn),而第一個(gè)數(shù)據(jù)字節(jié)是isn+1;確認(rèn)碼acknowledgment number: 32位,如果設(shè)置了 ack控制位,這個(gè)值表示一個(gè)準(zhǔn) 備接收的包的序列碼;數(shù)據(jù)偏移m data offset: 4位,指示何處
11、數(shù)據(jù)開(kāi)始;保留reserved: 6位,這些位必須是0;控制位urg: 6位;窗口 window: 16位;校驗(yàn)位checksum: 16位;優(yōu)先指針urgent pointer: 16位,指向后血是優(yōu)先數(shù)據(jù)的字節(jié);選項(xiàng)options:長(zhǎng)度不定;但長(zhǎng)度必須以字節(jié)記;選項(xiàng)的具體內(nèi)容我們結(jié)介具體命令來(lái)看; 填充padding:不定長(zhǎng),填充的內(nèi)容必須為0,它是為了保證包頭的結(jié)合和數(shù)據(jù)的開(kāi)始處 偏移量能夠被32整除;0 101234567890123451-11i1- -1-1-1-1-1-1 -i267890123345678901111f 11f f f f f 111111source port
12、1111111111111111廠destination portn1111廠 1111111111111111111sequence numberi1111111r111111111111 i i i i i i i i i i i i i 1acknowledgment number1| data |u|a|p|r|s|f| offsetl reserved |r|c|s|s|y|1111|g|k|h|t|n|n|11window|11checksumurgentpointeroptions1padding|data4-4-4- 41-+-411111-4-4-4-4-4-4-4-4-4-
13、4-4-4-h1h4- 4-4-4- 4-4-4-+tcp包頭格式3 .3 tcp連接狀態(tài)3.3.1當(dāng)前段變量seg.seq -段序列號(hào)seg.ack -段確認(rèn)標(biāo)記seg.len -段長(zhǎng)seg.wnd段窗口seg.up段緊急指針seg.prc -段優(yōu)先級(jí)連接進(jìn)程是通過(guò)一系列狀態(tài)表示的,這些狀態(tài)有:listen, syn-sent, syn-received, established, fin-wait-1, fin-wait-2, close-wait, closing, last-ack, time-wait 和 closedo closed 表示沒(méi)有連接,3.3.2各個(gè)狀態(tài)的意義如下:li
14、sten偵聽(tīng)來(lái)口遠(yuǎn)方tcp端口的連接請(qǐng)求;被動(dòng)open創(chuàng)建tcb接收syn1h 發(fā)送 syn, ackil<|syn|rcvd |<接收syn的ackclosei發(fā)送fin| closed |i+<i+i listen |1+接收syn發(fā)送ackclose刪除tcbsend 創(chuàng)建tcb發(fā) isynclose刪除tcb |發(fā)送syn>1i| syn | -| sent |/ 接收 syn, ackii發(fā)送ackvvestabclose發(fā)送ack接收f(shuō)in|finwait-2|df發(fā)送ack |v| closing |d+接收f(shuō)in的ack |發(fā)送fin v+i last-
15、ack|+接收f(shuō)in的ack |接收f(shuō)in發(fā)送acki timeout=2mslv h+刪除tcb-|time wait|4+tcp連接狀態(tài)圖x+>| closed |+| fin|<>| close |i wait-1 |i wait |發(fā)送fin /接收f(shuō)in 接收f(shuō)in的ackclose |syn-sent在發(fā)送連接請(qǐng)求后等待匹配的連接請(qǐng)求;syn-received在收到和發(fā)送一個(gè)連接請(qǐng)求后等待對(duì)連接請(qǐng)求的確認(rèn);established代表一個(gè)打開(kāi)的連接,數(shù)據(jù)可以傳送給用戶;fin-wait-i -等待遠(yuǎn)程tcp的連接屮斷請(qǐng)求,或先前的連接屮斷請(qǐng)求的確認(rèn);fin-wait
16、-2從遠(yuǎn)程tcp等待連接屮斷請(qǐng)求;close-wait等待從木地用戶發(fā)來(lái)的連接屮斷請(qǐng)求;closing等待遠(yuǎn)程tcp對(duì)連接中斷的確認(rèn);last-ack等待原來(lái)發(fā)向遠(yuǎn)程tcp的連接中斷請(qǐng)求的確認(rèn);time-wait等待足夠的時(shí)間以確保遠(yuǎn)程tcp接收到連接屮斷請(qǐng)求的確認(rèn);closed -沒(méi)有任何連接狀態(tài);tcp連接過(guò)程是狀態(tài)的轉(zhuǎn)換,促使發(fā)生狀態(tài)轉(zhuǎn)換的是用戶調(diào)用:open, send, receive, close, abort和status;傳送過(guò)來(lái)的數(shù)據(jù)段,特別那些包括以 下標(biāo)記的數(shù)據(jù)段syn, ack, rst和fin;還有超時(shí),上面所說(shuō)的都會(huì)時(shí)tcp 狀態(tài)發(fā)生變化。上面的圖表示了 tcp狀態(tài)
17、的轉(zhuǎn)換,但這圖屮沒(méi)有包括錯(cuò)誤的情況和錯(cuò)誤處理, 不要把這幅圖看成是總說(shuō)明了。34 tcp的運(yùn)輸連接管理3.4.1序列號(hào)tcp連接屮發(fā)送的字節(jié)都有一個(gè)序列號(hào)。因?yàn)榫幜颂?hào),所以可以確認(rèn)它們的 收到。對(duì)序列號(hào)的確認(rèn)是累積性的,也就是說(shuō),如果用戶收到對(duì)x的確認(rèn)信息, 這表示在x以前的數(shù)據(jù)(不包括x)都收到了。在每個(gè)段中字節(jié)是這樣安排的: 第一個(gè)字節(jié)在包頭后面,按這個(gè)順序排列。我們需要認(rèn)記實(shí)際的序列空間是有限 的,雖然很大,但是還是有限的,它的范圍是0到2的32次方減1。我想熟悉 編程的一定知道為什么要在計(jì)算兩個(gè)段是不是相繼的時(shí)候要使用2的32次方為 模了。tcp必須進(jìn)行的序列號(hào)比較操作種類包括以下幾種
18、:(a) 決定一些發(fā)送了的但未確認(rèn)的序列號(hào);(b) 決定所有的序列號(hào)都已經(jīng)收到了;(c) 決定下一個(gè)段中應(yīng)該包括的序列號(hào)。對(duì)于發(fā)送的數(shù)據(jù)tcp耍接收確認(rèn),處理確認(rèn)時(shí)必須進(jìn)行比較操作:3.4.2網(wǎng)絡(luò)三次握手連接協(xié)議對(duì)于特定連接被垂復(fù)使用沒(méi)有什么限制。連接是由一對(duì)套接字定義的。 新的連接實(shí)例被定義為連接的另一次恢復(fù),這就帶來(lái)了問(wèn)題:tcp如果確定多個(gè) 數(shù)據(jù)段是從以前連接的另一次恢復(fù)屮取得的呢?這個(gè)問(wèn)題在連接迅速打開(kāi)和關(guān) 閉,或因?yàn)閮?nèi)存原因被關(guān)閉然后乂迅速建立后顯示特別突出。為了避免混亂,用戶必須避免因此恢復(fù)使用某一連接,而使序列號(hào)發(fā)生混亂。 我們必須保證序列號(hào)的正確性,即使tcp失敗,根本不知道以
19、前的序列號(hào)是什 么的悄況卜-也要保證序列號(hào)的正確性。當(dāng)新的連接被創(chuàng)建時(shí),產(chǎn)生一個(gè)新的初始 序列號(hào)(isn)產(chǎn)生子,它用來(lái)選擇一個(gè)新的32位isno產(chǎn)生子和32位時(shí)鐘的 低度位字節(jié)相關(guān),低位字節(jié)的刷新頻率大概是4微秒,因此isn的循環(huán)時(shí)間大 概是4.55小時(shí)。因此我們把網(wǎng)絡(luò)包的最長(zhǎng)生存時(shí)間(msl)小于4.55小時(shí),因 此我們可以認(rèn)為isn是唯一的。對(duì)于每個(gè)連接都有發(fā)送序列號(hào)和接收序列號(hào), 初始發(fā)送序列號(hào)(iss)由發(fā)送tcp選擇,而初始接收序列號(hào)是在連接建立過(guò)程 中產(chǎn)生的。對(duì)于將要連接或初始化的連接,兩個(gè)tcp必須和對(duì)方的初始序列號(hào)同步。這 通過(guò)交換一個(gè)控制位syn和初始序列號(hào)完成。我們把帶有
20、syn的數(shù)據(jù)段稱為 ”syns”。同步的獲得過(guò)程這里就不重復(fù)了,每方必須發(fā)送自己的序列號(hào)并返回 對(duì)對(duì)方序列號(hào)的確認(rèn)。1) a->b syn木方序列號(hào)是x2) a <-back本方序列號(hào)被確認(rèn)3) a<-b syn對(duì)方序列號(hào)是y4) a -> b ack確認(rèn)對(duì)方序列號(hào)上面的第2步和第3步可以合并,這時(shí)可以成為3階段,所以我們可以稱它為三 消息握手。這個(gè)過(guò)程是必須的,因?yàn)樾蛄刑?hào)不和全局時(shí)鐘關(guān)聯(lián),tcp也可以有不 同的機(jī)制選擇isno接收到第一個(gè)syn的接收方不可能知道這個(gè)數(shù)據(jù)段是不是 被延時(shí),除非它記住了在連接上使用的最近的序列號(hào)(這通常是不可能的),因 此它必須要求發(fā)送者
21、確認(rèn)。為了保證tcp獲得的確認(rèn)是剛才發(fā)送的段產(chǎn)生的,而不是仍然在網(wǎng)絡(luò)中的老 數(shù)據(jù)段產(chǎn)生的,因此tcp必須在msl時(shí)間之內(nèi)保持沉默。在木文屮,我們假設(shè) msl=2小時(shí),這是出于工程的需要,如果用戶覺(jué)得可以,他可以改變msl。請(qǐng) 注意如果tcp重新初始化,而內(nèi)存中的序列號(hào)正在使用,不需要等待,但必須 確認(rèn)使用的序列號(hào)比當(dāng)前使用的要大。如果一臺(tái)主機(jī)在未保留任何序列號(hào)的情況下失敗,那么它應(yīng)該在msl時(shí)間之 內(nèi)不發(fā)出任何數(shù)據(jù)段。下面將會(huì)這一情況進(jìn)行說(shuō)明。tcp的實(shí)現(xiàn)可以不遵守這個(gè) 規(guī)定,但是這會(huì)造成老數(shù)據(jù)被當(dāng)成新數(shù)據(jù)接收,而新數(shù)據(jù)被當(dāng)成老數(shù)據(jù)拒絕的情 況。每當(dāng)數(shù)據(jù)段形成并進(jìn)入輸出隊(duì)列,tcp會(huì)為它指定序
22、列空間中的一個(gè)值。tcp 中多復(fù)木檢測(cè)和序列算法都依賴于這個(gè)地址空間,在對(duì)方發(fā)送或接收之前不會(huì)超 過(guò)2的32次方個(gè)包存在于輸出隊(duì)列中。所有多余的數(shù)據(jù)段都會(huì)被刪除。如果沒(méi) 有這個(gè)規(guī)定,會(huì)出現(xiàn)多個(gè)數(shù)據(jù)段被指定同一個(gè)序列號(hào)的情況,會(huì)造成混亂。數(shù)據(jù) 段屮序列號(hào)的多少和數(shù)據(jù)段屮的字節(jié)數(shù)一樣多。在通常情況下,tcp保留下一個(gè)耍發(fā)送的序列號(hào)和述未確認(rèn)的最老的序列號(hào), 不要在沒(méi)有確認(rèn)的時(shí)候就再次使用,這樣會(huì)有些風(fēng)險(xiǎn),也正是因?yàn)檫@樣的目的, 所以序列空間很大。對(duì)于2m的網(wǎng)絡(luò),要4.5小時(shí)來(lái)耗盡序列空間,因?yàn)橐粋€(gè)數(shù) 據(jù)段可能的最大生存時(shí)間也不過(guò)十兒分z秒,這就留下了足夠的空間;而在 100m的網(wǎng)絡(luò)上需耍5.4分鐘
23、,雖然少了點(diǎn),但也可以了。如呆在實(shí)現(xiàn)tcp時(shí)沒(méi)有為保存序列號(hào)留下空間,那清除多余的包可能就不能 實(shí)現(xiàn)了,因此推薦這種類型的tcp實(shí)現(xiàn)最好在失敗后等待msl時(shí)間,這樣保證 多余的包被刪除。這種情況有時(shí)候也可能會(huì)出現(xiàn)在保留序列號(hào)的tcp實(shí)現(xiàn)中。 如果tcp在選擇一個(gè)另一個(gè)tcp連接正在使用的序列號(hào)時(shí),這臺(tái)主機(jī)突然失敗 了,這就產(chǎn)生了問(wèn)題。這個(gè)問(wèn)題的實(shí)質(zhì)在于主機(jī)不知道它失敗了多久,也不知道 多余的復(fù)本是不是還在網(wǎng)絡(luò)中。處理這種問(wèn)題的方法是等待msl時(shí)間,如果不這樣就要冒著對(duì)方錯(cuò)誤接收數(shù) 據(jù)的危險(xiǎn),要等待的時(shí)間也就稱為“沉默時(shí)間”。實(shí)現(xiàn)者可以讓用戶選擇是不是 等待,但是無(wú)論用戶如何也不見(jiàn)得非要等待ms
24、l時(shí)間。4 tcp控制下的數(shù)據(jù)通信建立了連接以后就是傳送數(shù)據(jù)了,tcp通過(guò)重新傳送保證每個(gè)數(shù)據(jù)段到達(dá)對(duì) 方,因?yàn)橛辛酥匦聜魉?,所以?duì)方可能接收到兩個(gè)相同的包,那就必須根據(jù)內(nèi)部 的序列號(hào)判斷哪個(gè)數(shù)據(jù)段是可以接收的。發(fā)送方通過(guò)使用snd.nxt跟蹤下一個(gè) 要發(fā)送的數(shù)據(jù)段,而接收方則跟蹤rcv.nxt來(lái)知道下一個(gè)要接收的數(shù)據(jù)段。發(fā) 送方要還未確認(rèn)的最老的序列號(hào)保存于snd.unao當(dāng)發(fā)送方形成數(shù)據(jù)段并發(fā)送它后snd.nxt增大;當(dāng)接收方接收到數(shù)據(jù)段后 rcv.nxt增大并發(fā)送確認(rèn);當(dāng)發(fā)送方接收到確認(rèn)后snd.una增大。它們?nèi)?在不同的時(shí)間增人,這是因?yàn)閭魉蜁r(shí)延造成的。而增大多少則由數(shù)據(jù)段中數(shù)據(jù)的
25、 人小決沱。注意:連接進(jìn)入established狀態(tài)后,所有的段必須包括當(dāng)前的 確認(rèn)信息。而close用戶操作的性質(zhì)類型于推操作,這和在接收到的數(shù)據(jù)段中 的fin標(biāo)記一樣。4. 1重發(fā)超時(shí)因?yàn)榫W(wǎng)絡(luò)中有不類型的網(wǎng)絡(luò),而使用tcp的范i韋i乂很廣,因此垂傳超時(shí)必須 動(dòng)態(tài)決定。下面給出一個(gè)例子,通過(guò)例子可以看出確定重傳超時(shí)的過(guò)程。下面有 兩個(gè)變量說(shuō)明時(shí)延的問(wèn)題,一個(gè)是環(huán)路時(shí)間(rtt),它是由一個(gè)序列碼得到的, 這個(gè)序列碼在發(fā)送時(shí)給出,在接收到確認(rèn)時(shí)被覆蓋;另一個(gè)平滑環(huán)路時(shí)間 (srtt):srtt = (alpha * srtt) + (1-alpha) * rtt)通過(guò)上面的式子,可以得到重傳超
26、時(shí)(rto):rto = minubound,maxlbound,(beta*srtt)j其中ubound是超時(shí)的上界(如洌),lbound是超時(shí)的下界(如1秒中),alpha是平滑因子(女n0.8到0.9), beta是延時(shí)變量(如1.3到2.0)。4. 1. 1用戶超時(shí)對(duì)于任何一種狀態(tài),用戶超時(shí)的情況下,發(fā)送隊(duì)列屮的數(shù)據(jù),返回”error: connection aborted due to user timeout",刪除 tcb,進(jìn)行 closed 狀態(tài)并返回。4. 1. 2重發(fā)超時(shí)在任何狀態(tài)下,如果重發(fā)隊(duì)列中的數(shù)據(jù)段發(fā)送超時(shí),將它再次放到隊(duì)列首部重新 發(fā)送。time-wai
27、t 超時(shí) 如果time-wait超時(shí),刪除tcb,進(jìn)行close狀態(tài)并返回。4. 2傳送緊急消息tcp的緊急機(jī)制是允許發(fā)送者使接收者接收一些緊急消息,并止接收方在接 收到這-消息后立刻通知用戶。這種機(jī)制是在數(shù)據(jù)流是加入一個(gè)點(diǎn),指出這是緊 急數(shù)據(jù)的結(jié)束點(diǎn),當(dāng)接收方要接收到這個(gè)點(diǎn)之前,它會(huì)通知用戶進(jìn)入緊急狀態(tài), 在接收到這個(gè)點(diǎn)的數(shù)據(jù)后,它會(huì)通知用戶進(jìn)入通常狀態(tài)。如果這個(gè)緊急點(diǎn)在用戶 進(jìn)入緊急狀態(tài)時(shí)更新,這個(gè)更新必須對(duì)用戶透明。應(yīng)用一個(gè)緊急域的方法可以達(dá)到上述1=1的,而urg控制標(biāo)記則指明緊急域 是否被使用,而且在數(shù)據(jù)段屮必須加入指示緊急點(diǎn)的序列號(hào),如果沒(méi)有這個(gè)標(biāo)記 則說(shuō)明沒(méi)有緊急點(diǎn)。如果需要發(fā)送
28、緊急數(shù)據(jù),發(fā)送方必須起碼發(fā)送一個(gè)字節(jié)。5 tcp流量控制對(duì)窗口管理tcp屮每個(gè)數(shù)據(jù)段都包括下一個(gè)希望接收到的序列號(hào)。窗口比較大會(huì)提高傳 送速度,如果傳送過(guò)來(lái)的數(shù)據(jù)超過(guò)的窗口大小,數(shù)據(jù)會(huì)被拋棄。這樣會(huì)加重網(wǎng)絡(luò) 負(fù)擔(dān)。如果tcp開(kāi)始時(shí)的接收窗口比較大,而到最后這個(gè)窗口縮小了,這種作 法可不是好辦法。對(duì)于健壯的tcp來(lái)說(shuō),最好不要自己縮小窗口,但要做耍準(zhǔn) 備對(duì)方的tcp縮小窗口。即使發(fā)送窗口大小為零,發(fā)送tcp也必須做好準(zhǔn)備接收數(shù)據(jù)并月.可以發(fā)送至 少一位新數(shù)據(jù)。即使接收窗口為零,發(fā)送方也會(huì)重發(fā),重發(fā)間的間隔時(shí)間一般為 兩分鐘。當(dāng)接收tcp的接收窗口為零時(shí),在它接收到數(shù)據(jù)時(shí),它依然會(huì)返回確 認(rèn),其中包括希望收到的序列碼和當(dāng)前窗口人?。榱悖?。發(fā)送tcp將數(shù)據(jù)打成符合當(dāng)前大小的包,但在重新傳送隊(duì)列中可能垂新打包。 這種重新打包并不是必須的,但是會(huì)很有好處。如果一個(gè)連接只有單向數(shù)據(jù)流, 窗口信息可以在確認(rèn)信息中得到,這些的序列號(hào)都是一個(gè),因此沒(méi)法區(qū)別出誰(shuí)先 誰(shuí)后。但這并不是一個(gè)嚴(yán)重的問(wèn)題。改進(jìn)的
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 企事業(yè)單位電氣安全協(xié)議
- 礦山環(huán)保音樂(lè)項(xiàng)目施工合同樣本
- 醫(yī)師授權(quán)與醫(yī)療安全
- 深圳影視制作公司租賃合同模板
- 鄉(xiāng)村物業(yè)管理員勞動(dòng)合同模板
- 湖南省娛樂(lè)經(jīng)紀(jì)人管理政策
- 活動(dòng)帳篷租賃合同
- 水上樂(lè)園管理規(guī)章
- 別墅戶外排球場(chǎng)施工協(xié)議
- 產(chǎn)品發(fā)布包車租賃合同
- SPC培訓(xùn)資料_2
- 壓力表使用警示標(biāo)識(shí)
- 小學(xué)英語(yǔ)課堂教學(xué)策略與方法探討
- ADS創(chuàng)建自己的元件庫(kù)
- MATLAB仿真三相橋式整流電路(詳細(xì)完美)
- 2019年重慶普通高中會(huì)考通用技術(shù)真題及答案
- DB44 T 552-2008 林業(yè)生態(tài) 術(shù)語(yǔ)
- 天秤座小奏鳴曲,Libra Sonatine;迪安斯,Roland Dyens(古典吉他譜)
- 光纜施工規(guī)范及要求
- 三國(guó)志11全人物信息(五維、特技、生卒年等)
- 第六章 氣體射流
評(píng)論
0/150
提交評(píng)論