版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、傳輸控制協(xié)議(r)協(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)是不可缺少的了,協(xié)議主要在網(wǎng)絡(luò)不可靠的時(shí)候完成通信,對軍方可能特別有用,但是對于政府和商用部門也適用。是面向連接的端到端的可靠協(xié)議。它支持多種網(wǎng)絡(luò)應(yīng)用程序。對下層服務(wù)沒有多少要求,它假定下層只能提供不可靠的數(shù)據(jù)報(bào)服務(wù),它可以在多種硬件構(gòu)成的網(wǎng)絡(luò)上運(yùn)行。下面的圖是在層次式結(jié)構(gòu)中的位置,它的下層是協(xié)議,可以根據(jù)協(xié)議提供的服務(wù)傳送大小不定的數(shù)據(jù),協(xié)議負(fù)責(zé)對數(shù)據(jù)進(jìn)行分段,重組,在多種網(wǎng)絡(luò)中傳送。勵(lì)貉層次TOC o 1-5 h zI+I咼層丨H+ HYPERLINK l b
2、ookmark8|TCP|H1-IIPI_11_ HYPERLINK l bookmark16I借輸剛絡(luò)|q1_的上面就是應(yīng)用程序,下面是協(xié)議,上層接口包括一系列類似于操作系統(tǒng)中斷的調(diào)用。對于上層應(yīng)用程序來說,應(yīng)該能夠異步傳送數(shù)據(jù)。下層接口我們假定為協(xié)議接口。為了在并不可靠的網(wǎng)絡(luò)上實(shí)現(xiàn)面向連接的可靠的傳送數(shù)據(jù),必須解決可靠性,流量控制的問題,必須能夠?yàn)樯蠈討?yīng)用程序提供多個(gè)接口,同時(shí)為多個(gè)應(yīng)用程序提供數(shù)據(jù),同時(shí)必須解決連接問題,這樣才能稱得上是面向連接的,最后,也必須能夠解決通信安全性的問題。網(wǎng)絡(luò)環(huán)境包括由網(wǎng)關(guān)(或其它設(shè)備)連接的網(wǎng)絡(luò),網(wǎng)絡(luò)可以是局域網(wǎng)也可以是一些城域網(wǎng)或廣域網(wǎng),但無論它們是什么
3、,它們必須是基于包交換的。主機(jī)上不同的協(xié)議有不同的端口號,一對進(jìn)程通過這個(gè)端口號進(jìn)行通信。這個(gè)通信不包括計(jì)算機(jī)內(nèi)的操作,只包括在網(wǎng)絡(luò)上進(jìn)行的操作。網(wǎng)絡(luò)上的計(jì)算機(jī)被看作包傳送的源和目的結(jié)點(diǎn)。特別應(yīng)該注意的是:計(jì)算機(jī)中的不同進(jìn)程可能同時(shí)進(jìn)行通信,這時(shí)它們會(huì)用端口號進(jìn)行區(qū)別,不會(huì)把發(fā)向進(jìn)程的數(shù)據(jù)由進(jìn)程接收的。進(jìn)程為了傳送數(shù)據(jù)會(huì)調(diào)用,將數(shù)據(jù)和相應(yīng)的參數(shù)傳送給,于是會(huì)將數(shù)據(jù)傳送到目的那里,當(dāng)然這是通過將包打包在包內(nèi)在網(wǎng)絡(luò)上傳送達(dá)到的。接收方在接收到數(shù)據(jù)后會(huì)通信上層應(yīng)用程序,會(huì)保證接收數(shù)據(jù)順序的正確性。雖然下層協(xié)議可能不會(huì)保證順序是正確的。這里需要說明的是網(wǎng)關(guān)在接收到這個(gè)包后,會(huì)將包解開,看看是不是已經(jīng)到
4、目的地了,如果沒有到,應(yīng)該走什么路由達(dá)到目的地,在決定后,網(wǎng)關(guān)會(huì)根據(jù)下一個(gè)網(wǎng)絡(luò)內(nèi)的協(xié)議情況再次將包打包傳送,如果需要,還要把這個(gè)包再次分成幾段再傳送。這個(gè)落地檢查的過程是一個(gè)耗時(shí)的過程。從上面,我們可以看出傳送的基本過程,當(dāng)然具體過程可能要復(fù)雜得多。在實(shí)現(xiàn)的主機(jī)上,可以被看成是一個(gè)模塊,和文件系統(tǒng)區(qū)別不大,也可以調(diào)用一些操作系統(tǒng)的功能,不直接和網(wǎng)絡(luò)打交道,控制網(wǎng)絡(luò)的任務(wù)由專門的設(shè)備驅(qū)動(dòng)模塊完成。只是調(diào)用接口,向提供所有需要的服務(wù)。通過下圖我們可以更清楚地看到協(xié)議的結(jié)構(gòu)。上面已經(jīng)說過了,連接是可靠的,而且保證了傳送數(shù)據(jù)包的順序,保證順序是用一個(gè)序號來保證的。響應(yīng)包內(nèi)也包括一個(gè)序列號,表示接收方準(zhǔn)
5、備好這個(gè)序號的包。在傳送一個(gè)數(shù)據(jù)包時(shí),它同時(shí)把這個(gè)數(shù)據(jù)包放入重發(fā)隊(duì)列中,同時(shí)啟動(dòng)記數(shù)器,如果收到了關(guān)于這個(gè)包的確認(rèn)信息,將此包從隊(duì)列中刪除,如果計(jì)時(shí)超時(shí)則需要重新發(fā)送此包。請注意,從返回的確認(rèn)信息并不保證最終接收者接收到數(shù)據(jù),這個(gè)責(zé)任由接收方負(fù)責(zé)。每個(gè)用于傳送的通道都有一個(gè)端口標(biāo)記,因?yàn)檫@個(gè)標(biāo)記是由每個(gè)終端確定的,因此可能不唯一,為了保證這個(gè)數(shù)值的唯一,要使用網(wǎng)絡(luò)地址和端口號的組合達(dá)到唯一標(biāo)識(shí)的目的,我們稱這個(gè)為了套接字(),一個(gè)連接由連接兩端的套接字標(biāo)識(shí),本地的套接字可能和不同的外部套接字通信,這種通信是全雙工的。通過向本地端口發(fā)送命令及外部套接字參數(shù)建立連接,返回一個(gè)標(biāo)記這個(gè)連接的名稱,以
6、后如果用戶需要使用這個(gè)名稱標(biāo)記這個(gè)連接。為了保存這個(gè)連接的信息,我們假設(shè)有一個(gè)稱為傳輸控制塊(,)的東西來保存。命令還指定這個(gè)連接的建立是主動(dòng)請求還是被動(dòng)等待請求。下面我們要涉及具體的功能了,段以數(shù)據(jù)報(bào)的形式傳送。包頭傳送不同的信息域,包括源地址和目的地址。頭跟在包頭后面,提供了一些專用于協(xié)議的信息。下圖是包頭格式圖:01230123456739012345S78501234E)7830111111111111111111111111111111111ScuresPort|111111111111111111111Destination1111111111111Port|11111111111
7、1SequenceNumberLl1111111111111J1111111111111AcknaivledgmentNumbex111111IData|tn1i11111111111|U|A|P|R|S|F|n11i1111111111|Offset|Reserved|K|C|S|S|Y|I|Window1I.,!GKHTir|NJ111111Checksum.|UxgentFainter|1111111111111111111111111Options1IIIIIIIIIIIIII1111111111111n11111rPadding|1IIiiiidata1TH-1-HUH-1-HUHH
8、TCP包頭格式源端口:16位;目的端口:16位序列碼:位,當(dāng)出現(xiàn),序列碼實(shí)際上是初始序列碼(),而第一個(gè)數(shù)據(jù)字節(jié)是確認(rèn)碼:位,如果設(shè)置了控制位,這個(gè)值表示一個(gè)準(zhǔn)備接收的包的序列碼;數(shù)據(jù)偏移量:4位,指示何處數(shù)據(jù)開始;保留:6位,這些位必須是0;控制位:6位;窗口:16位;校驗(yàn)位:16位;優(yōu)先指針:16位,指向后面是優(yōu)先數(shù)據(jù)的字節(jié);選項(xiàng):長度不定;但長度必須以字節(jié)記;選項(xiàng)的具體內(nèi)容我們結(jié)合具體命令來看;填充:不定長,填充的內(nèi)容必須為0,它是為了保證包頭的結(jié)合和數(shù)據(jù)的開始處偏移量能夠被32整除;我們前面已經(jīng)說過有一個(gè)的東西了,里有存儲(chǔ)了包括發(fā)送方,接收方的套接字,用戶的發(fā)送和接收的緩沖區(qū)指針等變量
9、。除了這些還有一些變量和發(fā)送接收序列號有關(guān):發(fā)送序列變量發(fā)送未確認(rèn)發(fā)送下一個(gè)發(fā)送窗口發(fā)送優(yōu)先指針用于最后窗口更新的段序列號用于最后窗口更新的段確認(rèn)號初始發(fā)送序列號接收序列號接收下一個(gè)接收下一個(gè)接收優(yōu)先指針初始接收序列號下圖會(huì)幫助您了解發(fā)送序列變量間的關(guān)系:表示沒有連EO和;,還有超時(shí),上面所當(dāng)前段變量段序列號段確認(rèn)標(biāo)記段長段窗口段緊急指針段優(yōu)先級連接進(jìn)程是通過一系列狀態(tài)表示的,這些狀態(tài)有:T,AA,T,和接,各個(gè)狀態(tài)的意義如下:偵聽來自遠(yuǎn)方端口的連接請求;在發(fā)送連接請求后等待匹配的連接請求;在收到和發(fā)送一個(gè)連接請求后等待對連接請求的確認(rèn);代表一個(gè)打開的連接,數(shù)據(jù)可以傳送給用戶;等待遠(yuǎn)程的連接中
10、斷請求,或先前的連接中斷請求的確認(rèn);從遠(yuǎn)程等待連接中斷請求;等待從本地用戶發(fā)來的連接中斷請求;等待遠(yuǎn)程對連接中斷的確認(rèn);等待原來發(fā)向遠(yuǎn)程的連接中斷請求的確認(rèn);等待足夠的時(shí)間以確保遠(yuǎn)程接收到連接中斷請求的確認(rèn);沒有任何連接狀態(tài);連接過程是狀態(tài)的轉(zhuǎn)換,促使發(fā)生狀態(tài)轉(zhuǎn)換的是用戶調(diào)用:E,;傳送過來的數(shù)據(jù)段,特別那些包括以下標(biāo)記的數(shù)據(jù)段,和說的都會(huì)時(shí)狀態(tài)發(fā)生變化。下面的圖表示了了。狀態(tài)的轉(zhuǎn)換,但這圖中沒有包括錯(cuò)誤的情況和錯(cuò)誤處理,不要把這幅圖看成是總說明_11_主動(dòng)OPENICLOSED|H+創(chuàng)建TCB發(fā)I“II送5訕TOC o 1-5 h z被動(dòng)OPEM|CLOSE創(chuàng)產(chǎn)TCBII刪除TCBV|h+C
11、LOSE|LISTEN|+刪除TCB|接收SYN|SEND|IVq1-笈送SYN,ACKJ發(fā)送SYN+I11I|SYN|接收SYN|SYN|RCVD|TIMEWAIT|xV_11_-|CLOSED|11發(fā)送憂K1111Hh接收Syn的iCK/接收沁ACK111發(fā)送ACK1VV|CLOSE_1+|ESTAB|1發(fā)送FINH十1CLOSE|接收FINV|Hb發(fā)送FIN發(fā)送ACKH一十|FIN|CLOSE1|WAIT1|WAIT1Hb接收FINH_十|接收FUI的朋E|CLOSE|炭送ACK|VKV發(fā)迸FiliV十十-十TCP連接狀態(tài)圖序.列號請注意,我們在連接中發(fā)送的字節(jié)都有一個(gè)序列號。因?yàn)榫幜颂?/p>
12、,所以可以確認(rèn)它們的收到。對序列號的確認(rèn)是累積性的,也就是說,如果用戶收到對的確認(rèn)信息,這表示在以前的數(shù)據(jù)(不包括)都收到了。在每個(gè)段中字節(jié)是這樣安排的:第一個(gè)字節(jié)在包頭后面,按這個(gè)順序排列。我們需要認(rèn)記實(shí)際的序列空間是有限的,雖然很大,但是還是有限的,它的范圍是0到2的32次方減1。我想熟悉編程的一定知道為什么要在計(jì)算兩個(gè)段是不是相繼的時(shí)候要使用的次方為模了。必須進(jìn)行的序列號比較操作種類包括以下幾種:決定一些發(fā)送了的但未確認(rèn)的序列號;決定所有的序列號都已經(jīng)收到了;決定下一個(gè)段中應(yīng)該包括的序列號。對于發(fā)送的數(shù)據(jù)要接收確認(rèn),處理確認(rèn)時(shí)必須進(jìn)行下面的比較操作:最老的確認(rèn)了的序列號;下一個(gè)要發(fā)送的序
13、列號;接收的確認(rèn),接收期待的下一個(gè)序列號;一個(gè)數(shù)據(jù)段的第一個(gè)序列號;數(shù)據(jù)段中包括的字節(jié)數(shù);數(shù)據(jù)段的最后一個(gè)序列號。請注意下面的關(guān)系:如果一個(gè)數(shù)據(jù)段的序列號小于等于確認(rèn)號的值,那么整個(gè)數(shù)據(jù)段就被確認(rèn)了。而在接收數(shù)據(jù)時(shí)下面的比較操作是必須的:期待的序列號和接收窗口的最低沿;最后一個(gè)序列號和接收窗口的最高沿;接收到的第一個(gè)序列號;接收到的最后一個(gè)序列號;上面幾個(gè)量有如下關(guān)系:或測試的第一部分是檢查數(shù)據(jù)段的開始部分是否在接收窗口中,第二部分是檢查數(shù)據(jù)段的結(jié)束部分是否也在接收窗口內(nèi);上面兩個(gè)檢查通過任何一個(gè)就說明它包括窗口要求的數(shù)據(jù)。實(shí)際中的情況會(huì)更復(fù)雜一些,因?yàn)橛辛愦翱诤土銛?shù)據(jù)段長,因此我們有下面四種
14、情況:段長度接收窗口測試不可接受或請注意接收窗口的大小可以為零,在窗口為零時(shí)它只用來接收信息,因此對于一個(gè)來說,它可以使用零大小窗口在發(fā)送數(shù)據(jù)的同時(shí)接收數(shù)據(jù)。即使接收窗口的大小為零,必須處理所有接收到信息的和域。我們也應(yīng)用計(jì)數(shù)的方式保護(hù)了一些特定的控制信息,這是通過隱式地使用一些控制標(biāo)記使數(shù)據(jù)段能夠可靠地重新發(fā)送(或確認(rèn))為達(dá)到的。控制信息并不在段數(shù)據(jù)空間中傳送,因此,我們必須采用隱式指定序列號進(jìn)行控制。和是需要保護(hù)的控制量,這兩個(gè)控制量也只在連接打開和關(guān)閉時(shí)使用。被認(rèn)為是在第一個(gè)實(shí)際數(shù)據(jù)之間的數(shù)據(jù),而是最后一個(gè)實(shí)際數(shù)據(jù)之后的數(shù)據(jù)。段長度()包括數(shù)據(jù)和序列號空間,如果出現(xiàn)了,那么是的序列號。初
15、始序列號選擇協(xié)議對于特定連接被重復(fù)使用沒有什么限制。連接是由一對套接字定義的。新的連接實(shí)例被定義為連接的另一次恢復(fù),這就帶來了問題:如果確定多個(gè)數(shù)據(jù)段是從以前連接的另一次恢復(fù)中取得的呢?這個(gè)問題在連接迅速打開和關(guān)閉,或因?yàn)閮?nèi)存原因被關(guān)閉然后又迅速建立后顯示特別突出。為了避免混亂,用戶必須避免因此恢復(fù)使用某一連接,而使序列號發(fā)生混亂。我們必須保證序列號的正確性,即使失敗,根本不知道以前的序列號是什么的情況下也要保證序列號的正確性。當(dāng)新的連接被創(chuàng)建時(shí),產(chǎn)生一個(gè)新的初始序列號()產(chǎn)生子,它用來選擇一個(gè)新的位S產(chǎn)生子和位時(shí)鐘的低度位字節(jié)相關(guān),低位字節(jié)的刷新頻率大概是微秒,因此的循環(huán)時(shí)間大概是小時(shí)。因此
16、我們把網(wǎng)絡(luò)包的最長生存時(shí)間()小于小時(shí),因此我們可以認(rèn)為是唯一的。對于每個(gè)連接都有發(fā)送序列號和接收序列號,初始發(fā)送序列號()由發(fā)送選擇,而初始接收序列號是在連接建立過程中產(chǎn)生的。對于將要連接或初始化的連接,兩個(gè)必須和對方的初始序列號同步。這通過交換一個(gè)控制位和初始序列號完成。我們把帶有的數(shù)據(jù)段稱為。同步的獲得過程這里就不重復(fù)了,每方必須發(fā)送自己的序列號并返回對對方序列號的確認(rèn)。本方序列號是本方序列號被確認(rèn)對方序列號是確認(rèn)對方序列號上面的第2步和第3步可以合并,這時(shí)可以成為3階段,所以我們可以稱它為三消息握手。這個(gè)過程是必須的,因?yàn)樾蛄刑柌缓腿謺r(shí)鐘關(guān)聯(lián),也可以有不同的機(jī)制選擇。接收到第一個(gè)的接
17、收方不可能知道這個(gè)數(shù)據(jù)段是不是被延時(shí),除非它記住了在連接上使用的最近的序列號(這通常是不可能的),因此它必須要求發(fā)送者確認(rèn)。為了保證獲得的確認(rèn)是剛才發(fā)送的段產(chǎn)生的,而不是仍然在網(wǎng)絡(luò)中的老數(shù)據(jù)段產(chǎn)生的,因此必須在時(shí)間之內(nèi)保持沉默。在本文中,我們假設(shè)小時(shí),這是出于工程的需要,如果用戶覺得可以,他可以改變。請注意如果重新初始化,而內(nèi)存中的序列號正在使用,不需要等待,但必須確認(rèn)使用的序列號比當(dāng)前使用的要大。如果一臺(tái)主機(jī)在未保留任何序列號的情況下失敗,那么它應(yīng)該在時(shí)間之內(nèi)不發(fā)出任何數(shù)據(jù)段。下面將會(huì)這一情況進(jìn)行說明。的實(shí)現(xiàn)可以不遵守這個(gè)規(guī)定,但是這會(huì)造成老數(shù)據(jù)被當(dāng)成新數(shù)據(jù)接收,而新數(shù)據(jù)被當(dāng)成老數(shù)據(jù)拒絕的情
18、況。每當(dāng)數(shù)據(jù)段形成并進(jìn)入輸出隊(duì)列,會(huì)為它指定序列空間中的一個(gè)值。中多復(fù)本檢測和序列算法都依賴于這個(gè)地址空間,在對方發(fā)送或接收之前不會(huì)超過2的32次方個(gè)包存在于輸出隊(duì)列中。所有多余的數(shù)據(jù)段都會(huì)被刪除。如果沒有這個(gè)規(guī)定,會(huì)出現(xiàn)多個(gè)數(shù)據(jù)段被指定同一個(gè)序列號的情況,會(huì)造成混亂。數(shù)據(jù)段中序列號的多少和數(shù)據(jù)段中的字節(jié)數(shù)一樣多。在通常情況下,保留下一個(gè)要發(fā)送的序列號和還未確認(rèn)的最老的序列號,不要在沒有確認(rèn)的時(shí)候就再次使用,這樣會(huì)有些風(fēng)險(xiǎn),也正是因?yàn)檫@樣的目的,所以序列空間很大。對于的網(wǎng)絡(luò),要小時(shí)來耗盡序列空間,因?yàn)橐粋€(gè)數(shù)據(jù)段可能的最大生存時(shí)間也不過十幾分之一秒,這就留下了足夠的空間;而在10的網(wǎng)絡(luò)上需要分鐘
19、,雖然少了點(diǎn),但也可以了。如果在實(shí)現(xiàn)時(shí)沒有為保存序列號留下空間,那清除多余的包可能就不能實(shí)現(xiàn)了,因此推薦這種類型的實(shí)現(xiàn)最好在失敗后等待時(shí)間,這樣保證多余的包被刪除。這種情況有時(shí)候也可能會(huì)出現(xiàn)在保留序列號的實(shí)現(xiàn)中。如果在選擇一個(gè)另一個(gè)連接正在使用的序列號時(shí),這臺(tái)主機(jī)突然失敗了,這就產(chǎn)生了問題。這個(gè)問題的實(shí)質(zhì)在于主機(jī)不知道它失敗了多久,也不知道多余的復(fù)本是不是還在網(wǎng)絡(luò)中。處理這種問題的方法是等待時(shí)間,如果不這樣就要冒著對方錯(cuò)誤接收數(shù)據(jù)的危險(xiǎn),要等待的時(shí)間也就稱為“沉默時(shí)間”。實(shí)現(xiàn)者可以讓用戶選擇是不是等待,但是無論用戶如何也不見得非要等待時(shí)間。建立一個(gè)連接建立連接應(yīng)用的是三消息握手。如果雙方同時(shí)都
20、發(fā)送也沒有關(guān)系,雙方會(huì)發(fā)現(xiàn)這個(gè)中沒有確認(rèn),于是就知道了這種情況,通常來說,應(yīng)該發(fā)送一個(gè)段來解決這種情況。三消息握手減少了連接失敗的可能性。下面就是一個(gè)例子,在尖括號是的就是數(shù)據(jù)段中的內(nèi)容和標(biāo)記。其它的就不多說了。TCPATCPBCLOSEDLISTENSYJT-EEITTSYIT-EECEIVEDESTABLISHEDESTABLISHEDESTABLISHEDESTABLISHED基匣三消息同歩在第行,發(fā)送初始化序列號,表示它要使用序列號;第行中,給出確認(rèn),并且期待著的帶有序列號的數(shù)據(jù)段;第行,給出確認(rèn),而在第行,它也給出確認(rèn),并發(fā)送了一些數(shù)據(jù),注意第行的序列號與第號的一樣,因?yàn)樾畔⒉徽加眯?/p>
21、列號空間內(nèi)的序列號。同時(shí)產(chǎn)生請求的情況如下圖所示,只復(fù)雜一點(diǎn)。TCPBCLOSEDSYK-KECEIVEDESTABLISHEDTCPA2.3.5.6.CLOSEDSY1I-SENTS-DECEIVEDSTN-DECEIVEDESTABLISHED同時(shí)連接同步使用三消息握手的主要原因是為了防止使用過期的數(shù)據(jù)段。為了這個(gè)目的,必須引入新的控制消息,如果接收處理非同步狀態(tài),在接收到后返回到狀態(tài)。如果處理下面幾種狀態(tài)LAA-S-時(shí),放棄連接并通過用戶。我們下面就詳細(xì)說明后一種情況。TCPBTCPAI3.5.6.8.CLOSEDSY1I-SENTtduplicate)SY-SENTSYI-SENTST
22、N-SENTESTABLISHEDLISTEN.SEQ=90XCTL=SW-SYN-RECEIVEDSYR-RECEIVEDLISTEN-SYIf-RECEIVEDSYK-EECEIVEDESTABLISHED過期SYN的恢震通過上面的例子,我們可以看出連接是如何從過期數(shù)據(jù)段的干擾下恢復(fù)的。請注意第行和第行中的(信號)。半開連接和其它非正常狀態(tài)如果連接已經(jīng)不存在,而發(fā)送來的消息又不是,那么要返回。如果想拒絕對不存在的連接如果一方在未通過另一方的情況下關(guān)閉連接,或雙方雖然失敗而不同步的情況我們稱為半開連接狀態(tài)。在一方試圖發(fā)送數(shù)據(jù)時(shí)連接會(huì)自動(dòng)。然而這種情況畢竟屬于不正常情況。應(yīng)該做出相應(yīng)的處理。如
23、果處的連接已經(jīng)關(guān)閉,處并不知道。當(dāng)希望發(fā)送數(shù)據(jù)到時(shí),就會(huì)收到信號,表示這個(gè)連接有誤,要中止當(dāng)前連接。假設(shè)和兩個(gè)進(jìn)程相互通信的時(shí)候的發(fā)生了失敗,依靠操作系統(tǒng)支持的存在,通常這種情況下會(huì)有恢復(fù)機(jī)制起作用,當(dāng)重新恢復(fù)的時(shí)候,可能希望從恢復(fù)點(diǎn)開始工作。這樣可能會(huì)試圖連接,然后在這個(gè)它認(rèn)為還是打開的連接上傳送數(shù)據(jù),這時(shí)會(huì)從本地(也就是的)上獲得錯(cuò)誤消息“未打開連接”。的將發(fā)送包括的數(shù)據(jù)段。下面的例子將顯示這一過程:3.5.6.TCPA(CRASH)CLOSEDSYN-SEWT(!J)SYN-SEWTSYN-SEWTTCPB(send300jreceive100)TOC o 1-5 h zESTABLIS
24、HED(?)ESTABLISHED(Aboit!J)CLOSED一半開連接檢測上面這個(gè)例子中,方收到的信息并沒有確認(rèn)任何東西,這時(shí)候發(fā)現(xiàn)出了問題,于是發(fā)送了控制信息。另一種情況是發(fā)生在失敗,而方仍然試圖發(fā)送數(shù)據(jù)時(shí),下面的例子可以表示這種情況,請注意第行中對發(fā)送來的信息不知所云。TCPATCPB(send300jieceive100)(?)(ABORT)主動(dòng)方引起半開連接檢測在下面的例子中,方和方進(jìn)行的被動(dòng)連接,它們都在等待信息。過期的包傳送到方使回應(yīng)了,而收到回應(yīng)的卻發(fā)現(xiàn)不對頭,傳送控制信息,方返回被動(dòng)狀態(tài)。TCPATCPBLISTENLISTED.SYIT-KECEIVED(?)Cretuz
25、ntoLISTEN)E.LISTENLISTED過期SYN在兩個(gè)被動(dòng)?xùn)私幼稚祥_始RESET現(xiàn)實(shí)中的情況太多了,我們列舉一些產(chǎn)生控制信息的規(guī)則如下:通常情況下,在收到的信息不是期待的信息時(shí)產(chǎn)生。如果在不能確定時(shí)不要輕易發(fā)送控制信息。下面有三類情況:進(jìn)行,可以使用這種辦法。如果到達(dá)的信息有一個(gè)域,返回的信息可以從域中取得序列號,如果沒有這個(gè)域,就把的序列號設(shè)置為,域被設(shè)備為序列號和到達(dá)段長度之和。連接仍然處于狀態(tài)。如果連接處于非同步狀態(tài)(T,),而且收到的確認(rèn)是對未發(fā)出包的確認(rèn)或是接收到數(shù)據(jù)段的安全級別與不能連接要求的相一一致時(shí),就發(fā)送。如果未被確認(rèn)時(shí),而且收到的數(shù)據(jù)段的優(yōu)先級比要求的優(yōu)先級要高,
26、那么要么提高本地優(yōu)先級(得事先征得用戶和系統(tǒng)的許可)要么發(fā)送;如果接收數(shù)據(jù)段的優(yōu)先級比要求的優(yōu)先級低,就算是匹配了,當(dāng)然如果對方發(fā)現(xiàn)優(yōu)先級不對提高了優(yōu)先級,在下一個(gè)包中提高了優(yōu)先級,這就不算是匹配了。如果連接已經(jīng)進(jìn)入,那么接收到數(shù)據(jù)段的優(yōu)先級必須和本地優(yōu)先級一樣,否則發(fā)送。如果到達(dá)的信息有一個(gè)域,返回的信息可以從域中取得序列號,如果沒有這個(gè)域,就把的序列號設(shè)置為,域被設(shè)備為序列號和到達(dá)段長度之和。連接仍然處于與原來相同的狀態(tài)。如果連接處于同步狀態(tài)(,-)w任何超出接收窗口的序列號的數(shù)據(jù)段都產(chǎn)生如下結(jié)果:發(fā)出一個(gè)空確認(rèn)數(shù)據(jù)段,此段中包括當(dāng)前發(fā)送序列號,另外還包括一個(gè)確認(rèn)指出希望接收的下一個(gè)數(shù)據(jù)段
27、的序列號,連接仍然保存在原來的狀態(tài)。如果因?yàn)榘踩?,?yōu)先級之類的問題,那就發(fā)送信號然后進(jìn)入狀態(tài)。過程除了狀態(tài)外的其它狀態(tài)中,所有的數(shù)據(jù)段可以通過檢查域查明。如果序列號在接收窗口中,是有效的。當(dāng)連接處于狀態(tài)時(shí),如果域確認(rèn),那么也是合法的。的接收方首先確認(rèn)它的合法性,然后進(jìn)行狀態(tài)轉(zhuǎn)換。如果接收方處于狀態(tài),它就忽略包。如果接收方處于狀態(tài),而且以前處于狀態(tài),接收方返回狀態(tài),否則接收方關(guān)閉連接進(jìn)入狀態(tài)。當(dāng)接收方處于其它狀態(tài)時(shí),直接關(guān)閉連接回到狀態(tài)。關(guān)閉連接是一個(gè)操作,它的意思就是“本方已經(jīng)有數(shù)據(jù)發(fā)送”。由于是全雙工的,所以會(huì)造成一些麻煩,因?yàn)榻邮辗綄τ谔幚斫邮辗降倪B接有點(diǎn)麻煩。我們以一種簡單的方式對待,
28、發(fā)送的一方在接收到對方的之前,還要繼續(xù)接收數(shù)據(jù)。因此程序可以在一個(gè)之后初始化幾個(gè),然后開始E直到接收到對方的而失敗為止。我們假設(shè)可以通知用戶連接關(guān)閉,即使仍在也可以,這樣用戶就可以正常關(guān)閉了。這樣,可以在連接關(guān)閉前可靠地發(fā)送數(shù)據(jù)。下面列舉了三種基本情況:情況1:本地用戶關(guān)閉這種情況下,可以建立一個(gè)段放入發(fā)送隊(duì)列。不再接收用戶的指令,進(jìn)入狀態(tài)。在這種狀態(tài)下是允許的。所有數(shù)據(jù)段和在未接收到確認(rèn)以前會(huì)一直發(fā)送。當(dāng)另一個(gè)確認(rèn),并發(fā)送自己的后,本地的可以確認(rèn)這個(gè)了。請注意,也可以在確認(rèn)時(shí)不返回自己的,直到用戶關(guān)閉連接時(shí)再返回自己的,如果連接已經(jīng)不存在,而發(fā)送來的消息又不是,那么要返回。如果想拒絕對不存在
29、的連接情況:從網(wǎng)絡(luò)上接收到一個(gè)如果在沒有請求的情況下收到I可以返回并通知用戶連接已經(jīng)關(guān)閉。用戶可以以響應(yīng),在發(fā)送完剩下的數(shù)據(jù)后發(fā)送自己的I然后等待對這個(gè)的確認(rèn),在接收到后,它關(guān)閉連接。如果確認(rèn)超時(shí),可以關(guān)閉連接并通知用戶完事。情況:雙方同時(shí)關(guān)閉3.6優(yōu).先和安全的操作必須在兩個(gè)優(yōu)先級相同的端口間進(jìn)行。使用的優(yōu)先和安全參數(shù)在協(xié)議中定義。我們這里所說的安全間隔就是指的中定義的優(yōu)先,用戶組和處理規(guī)定。如果不符合則發(fā)送S這些內(nèi)容請大家看上一節(jié)中的敘述。在操作過程中也會(huì)檢查接收數(shù)據(jù)段的優(yōu)先級,還可以在操作中提高優(yōu)先級。雖然運(yùn)行在無安全環(huán)境中,主機(jī)也必須能夠處理安全參數(shù)。:.7數(shù).據(jù)通信建立了連接以后就是
30、傳送數(shù)據(jù)了,通過重新傳送保證每個(gè)數(shù)據(jù)段到達(dá)對方,因?yàn)橛辛酥匦聜魉?,所以對方可能接收到兩個(gè)相同的包,那就必須根據(jù)內(nèi)部的序列號判斷哪個(gè)數(shù)據(jù)段是可以接收的。發(fā)送方通過使用跟蹤下一個(gè)要發(fā)送的數(shù)據(jù)段,而接收方則跟蹤來知道下一個(gè)要接收的數(shù)據(jù)段。發(fā)送方要還未確認(rèn)的最老的序列號保存于。當(dāng)發(fā)送方形成數(shù)據(jù)段并發(fā)送它后增大;當(dāng)接收方接收到數(shù)據(jù)段后增大并發(fā)送確認(rèn);當(dāng)發(fā)送方接收到確認(rèn)后增大。它們?nèi)咴诓煌臅r(shí)間增大,這是因?yàn)閭魉蜁r(shí)延造成的。而增大多少則由數(shù)據(jù)段中數(shù)據(jù)的大小決定。注意:連接進(jìn)入狀態(tài)后,所有的段必須包括當(dāng)前的確認(rèn)信息。而用戶操作的性質(zhì)類型于推操作,這和在接收到的數(shù)據(jù)段中的標(biāo)記一樣。重傳超時(shí)因?yàn)榫W(wǎng)絡(luò)中有不類型
31、的網(wǎng)絡(luò),而使用的范圍又很廣,因此重傳超時(shí)必須動(dòng)態(tài)決定。下面給出一個(gè)例子,通過例子可以看出確定重傳超時(shí)的過程。下面有兩個(gè)變量說明時(shí)延的問題,一個(gè)是環(huán)路時(shí)間(),它是由一個(gè)序列碼得到的,這個(gè)序列碼在發(fā)送時(shí)給出,在接收到確認(rèn)時(shí)被覆蓋;另一個(gè)平滑環(huán)路時(shí)間():通過上面的式子,可以得到重傳超時(shí)(R,)O:其中是超時(shí)的上界(如分鐘),是超時(shí)的下界(如秒鐘),是平滑因子(如到)9是延時(shí)變量(如到)。傳送緊急消息的緊急機(jī)制是允許發(fā)送者使接收者接收一些緊急消息,并讓接收方在接收到這一消息后立刻通知用戶。這種機(jī)制是在數(shù)據(jù)流是加入一個(gè)點(diǎn),指出這是緊急數(shù)據(jù)的結(jié)束點(diǎn),當(dāng)接收方要接收到這個(gè)點(diǎn)之前,它會(huì)通知用戶進(jìn)入緊急狀態(tài)
32、,在接收到這個(gè)點(diǎn)的數(shù)據(jù)后,它會(huì)通知用戶進(jìn)入通常狀態(tài)。如果這個(gè)緊急點(diǎn)在用戶進(jìn)入緊急狀態(tài)時(shí)更新,這個(gè)更新必須對用戶透明。應(yīng)用一個(gè)緊急域的方法可以達(dá)到上述目的,而控制標(biāo)記則指明緊急域是否被使用,而且在數(shù)據(jù)段中必須加入指示緊急點(diǎn)的序列號,如果沒有這個(gè)標(biāo)記則說明沒有緊急點(diǎn)。如果需要發(fā)送緊急數(shù)據(jù),發(fā)送方必須起碼發(fā)送一個(gè)字節(jié)。管理窗口如果我們學(xué)習(xí)過網(wǎng)絡(luò)基礎(chǔ),我們一定知道有一個(gè)窗口協(xié)議,中每個(gè)數(shù)據(jù)段都包括下一個(gè)希望接收到的序列號。窗口比較大會(huì)提高傳送速度,如果傳送過來的數(shù)據(jù)超過的窗口大小,數(shù)據(jù)會(huì)被拋棄。這樣會(huì)加重網(wǎng)絡(luò)負(fù)擔(dān)。如果開始時(shí)的接收窗口比較大,而到最后這個(gè)窗口縮小了,這種作法可不是好辦法。對于健壯的來說
33、,最好不要自己縮小窗口,但要做要準(zhǔn)備對方的縮小窗口。即使發(fā)送窗口大小為零,發(fā)送也必須做好準(zhǔn)備接收數(shù)據(jù)并且可以發(fā)送至少一位新數(shù)據(jù)。即使接收窗口為零,發(fā)送方也會(huì)重發(fā),重發(fā)間的間隔時(shí)間一般為兩分鐘。當(dāng)接收的接收窗口為零時(shí),在它接收到數(shù)據(jù)時(shí),它依然會(huì)返回確認(rèn),其中包括希望收到的序列碼和當(dāng)前窗口大?。榱悖?。發(fā)送將數(shù)據(jù)打成符合當(dāng)前大小的包,但在重新傳送隊(duì)列中可能重新打包。這種重新打包并不是必須的,但是會(huì)很有好處。如果一個(gè)連接只有單向數(shù)據(jù)流,窗口信息可以在確認(rèn)信息中得到,這些的序列號都是一個(gè),因此沒法區(qū)別出誰先誰后。但這并不是一個(gè)嚴(yán)重的問題。改進(jìn)的方法是在數(shù)據(jù)段中加入最新的期待序列號,這樣就可以區(qū)別出誰先
34、誰后了。窗口管理對傳送效率有很大影響,下面是一些建議:當(dāng)使用更少的大數(shù)據(jù)而要獲得高效率時(shí)分配非常小的窗口使數(shù)據(jù)以許多小段傳送。對于發(fā)送者來說要避免在發(fā)送小數(shù)據(jù)段時(shí)必須等到窗口大到一定程度再進(jìn)行。確認(rèn)不要被延時(shí)。接收窗口如果大小為零時(shí),要傳送的數(shù)據(jù)段可能被分成越來越小的段。如果發(fā)送僅僅發(fā)送窗口允許大小的數(shù)據(jù)段,可能這些數(shù)據(jù)段會(huì)被換成比這個(gè)段大(或者小)的數(shù)據(jù)段發(fā)送。接收方時(shí)不時(shí)地進(jìn)行窗口大小調(diào)整會(huì)使大數(shù)據(jù)段分為小段,而不成對。盡量把小的窗口合成大的窗口。接口網(wǎng)絡(luò)協(xié)議的分層結(jié)構(gòu)決定了有兩個(gè)接口,向上的用戶接口和下面的接口。對下層接收口的描述不是很清楚,這個(gè)工作由下層協(xié)議來描述,但是這里我們也描述一
35、些要使用要的參數(shù)。用戶接口下面描述一些命令,這些命令是功能性的,因各系統(tǒng)不同具體實(shí)現(xiàn)可能不同。最后,我們必須清楚,不同的實(shí)現(xiàn)可能有不同的用戶接口,但是有一些功能是最基本的,本節(jié)描述的功能便是這個(gè)基本功能集。用戶命令下面定義的命令與其它高級語言中定義的方法差不多,但有些陷井操作需要的,如,。下面只是一個(gè)功能介紹,具體實(shí)現(xiàn)可能大為不同,如有些系統(tǒng)會(huì)把這里的多條命令結(jié)合成一條命令使用。為了實(shí)現(xiàn)通信功能,不能只會(huì)接收命令,而且能夠返回消息給它服務(wù)的進(jìn)程,這些消息包括:關(guān)于連接的通常消息,如中斷,遠(yuǎn)程關(guān)閉等等;對用戶命令做出應(yīng)答,是成功還是失敗。格式:我們假定本地注意到它所服務(wù)的進(jìn)程標(biāo)記,而且將檢查進(jìn)程
36、的認(rèn)證。因?qū)崿F(xiàn)不同,本地網(wǎng)絡(luò)和源地址的認(rèn)證可能由進(jìn)行也可以由下層協(xié)議進(jìn)行(如協(xié)議)。這些考慮主要是基于安全性的考慮。如果標(biāo)記設(shè)置為,會(huì)檢測到達(dá)的連接請求,它是被動(dòng)的,被動(dòng)的連接可以有一個(gè)完全指定的外套接字用于等待特定的連接或未指定的外套接字來等待任何呼叫。一個(gè)完全定義的被動(dòng)呼叫可以通過執(zhí)行一系列的命令而變?yōu)橹鲃?dòng)的。創(chuàng)建一個(gè)傳輸控制塊(),其中一部分參數(shù)是由命令參數(shù)而來。在主動(dòng)時(shí),會(huì)立刻開始同步連接。如果給出參數(shù),會(huì)允許呼叫者應(yīng)用于所有數(shù)據(jù)。如果在規(guī)定的時(shí)間內(nèi)還未把數(shù)據(jù)送到目的地,就關(guān)閉連接,一般的默認(rèn)值是分鐘。參數(shù)或是用于規(guī)范用戶對某一連接的安全性的,如果沒有指定則使用默認(rèn)值。會(huì)匹配這兩個(gè)參數(shù)
37、,只有在一致而且接收到的小于等于要求的時(shí)才會(huì)打開連接。當(dāng)連接的大于要求的值時(shí),從接收到的數(shù)據(jù)段中取得這一值,并在連接中一直使用這個(gè)比較大的值。具體實(shí)現(xiàn)時(shí)可以給用戶權(quán)力控制的決定過程。例如,用戶可以要求必須安全一致,或在提升時(shí)要通知用戶。本地連接名()由返回用戶,它可以代替本地套接字,外套接字標(biāo)記一個(gè)連接。格式:這個(gè)命令使指定緩沖區(qū)內(nèi)的數(shù)據(jù)發(fā)向指定連接,如果連接未打開則返回一個(gè)錯(cuò)誤,一些實(shí)現(xiàn)中可能在打開連接以前調(diào)用,由自動(dòng)打開連接。如果設(shè)置了標(biāo)記,數(shù)據(jù)必須立刻傳送給接收者,而且位在緩沖區(qū)中的最后一個(gè)段是必須設(shè)置。如果沒有設(shè)置,此數(shù)據(jù)段就會(huì)因?yàn)樾实目紤]而和下一個(gè)命令傳送的數(shù)據(jù)一起傳送。如果設(shè)置了
38、標(biāo)記,那就必須象上面所述的一樣緊急處理。傳送方設(shè)置的數(shù)目不一定非要等于通知接收方用戶的次數(shù)。如果在中沒有指定外套接字,那緩沖區(qū)數(shù)據(jù)會(huì)被發(fā)送到隱式外套接字。未使用外套接字打開連接的用戶仍然可以,而不用知道外套接字地址。但是,如果在指定外套接字前進(jìn)行,則會(huì)出錯(cuò)。用戶可以使用確定連接狀態(tài)。如果指定了,對于當(dāng)前連接的當(dāng)前用戶會(huì)更改為新的連接。最簡單的實(shí)現(xiàn)方法就是在沒有把數(shù)據(jù)發(fā)送完畢以前,不把控制權(quán)交給發(fā)送進(jìn)程,但是這樣可能會(huì)造成死鎖(例如,雙方都試圖,而不準(zhǔn)備)I效率也不好。好的實(shí)現(xiàn)方法是在發(fā)送一段數(shù)據(jù)后返回控制權(quán)給發(fā)送進(jìn)程,當(dāng)然如果能夠多個(gè)同時(shí)發(fā)送,那更好不過了。有多個(gè)需要服務(wù)時(shí)一般采取先來先服務(wù)。
39、對于本地來說,我們現(xiàn)在假定的是在發(fā)送數(shù)據(jù)后會(huì)產(chǎn)生類似中斷的東西告訴發(fā)送進(jìn)程數(shù)據(jù)發(fā)送的情況;當(dāng)然也可以在發(fā)送完后立刻告知進(jìn)行數(shù)據(jù)發(fā)送的情況。我們可以樂觀地認(rèn)為發(fā)送是成功的,如果發(fā)送失敗,連接會(huì)因?yàn)槌瑫r(shí)而關(guān)閉。在實(shí)現(xiàn)中,即使是同步返回情況,也需要一些異步信號,但這些異步信號是用于處理連接的,而不是用于處理數(shù)據(jù)發(fā)送的。既然允許多個(gè)同時(shí)工作,因此有必要區(qū)別返回的信息是哪一個(gè)的。具體的情況下面會(huì)討論到。格式:此命令分配一個(gè)接收緩沖區(qū)給指定的連接。如果下面不是一個(gè)命令或者此調(diào)用進(jìn)行未被授權(quán)使用此連接返回錯(cuò)誤。最簡單的實(shí)現(xiàn)方法是在緩沖區(qū)沒有填充完以前不返回控制權(quán),但這樣可能會(huì)造成嚴(yán)重的死鎖。更復(fù)雜的實(shí)現(xiàn)方法
40、允許同時(shí)存在多個(gè),這樣會(huì)提高效率。這樣是在控制復(fù)雜的情況下取得了高效率。如果在之前的數(shù)據(jù)已經(jīng)填滿緩沖區(qū),那么對于的響應(yīng)中就不用設(shè)置位了。緩沖區(qū)會(huì)容納盡可能多的數(shù)據(jù),如果在緩沖區(qū)填充滿以前看到位,將返回緩沖區(qū)中的數(shù)據(jù)并設(shè)置S在處理緊急狀態(tài)時(shí),如果有標(biāo)記,還有緊急數(shù)據(jù);如果沒有標(biāo)記了,就返回所有緊急數(shù)據(jù),用戶也離開緊急狀態(tài)。請注意,在緊急指針指向的點(diǎn)以后的那些數(shù)據(jù)不能和緊急數(shù)據(jù)一起返回,即使它們在同一個(gè)緩沖區(qū)內(nèi),當(dāng)然,如果用戶指定要這么做例外。為了區(qū)別多個(gè)并保證緩沖區(qū)不被充滿,返回的數(shù)據(jù)中也要包括緩沖區(qū)指針和一個(gè)計(jì)數(shù)器指明現(xiàn)在接收了多少數(shù)據(jù)??梢杂凶约簩S昧司彌_區(qū),也可以和用戶共享一個(gè)緩沖區(qū)。格式
41、:本地連接名此命令關(guān)閉連接,如果連接未打開,或未授權(quán)可以關(guān)閉連接返回錯(cuò)誤。在關(guān)閉的時(shí)候應(yīng)該注意正常關(guān)閉,讓所有的發(fā)送都發(fā)送完數(shù)據(jù),也可以如上所說在后面加上幾個(gè),這就要求用戶在收到后仍然要進(jìn)行接收。因此,意指“我沒有更多的數(shù)據(jù)要發(fā)了”,并不代表“我不再發(fā)送任何數(shù)據(jù)了”。關(guān)閉方也可能在超時(shí)前不能發(fā)出所有數(shù)據(jù),這種情況下,要由轉(zhuǎn)入狀態(tài)。用戶可以自己決定在任何時(shí)間關(guān)閉連接,也可以根據(jù)返回的提示關(guān)閉。因此關(guān)閉操作要和外進(jìn)行通信,因此在關(guān)閉狀態(tài)可能要呆一會(huì)兒,在沒有返回前調(diào)用打開,會(huì)返回錯(cuò)誤。格式本地連接名這個(gè)命令和具體的實(shí)現(xiàn)有關(guān),而且有可能會(huì)有負(fù)作用。返回的信息通常來自有連接相關(guān)的。返回的數(shù)據(jù)塊中包括下
42、面的信息:本地套接字,外套接字,本地連接名,接收窗口,發(fā)送窗口,連接狀態(tài),等待確認(rèn)的緩沖區(qū)數(shù),等待接收的緩沖區(qū)數(shù),緊急狀態(tài),優(yōu)先級,和傳輸超時(shí)。因此實(shí)現(xiàn)不同,所以上述數(shù)據(jù)項(xiàng)中可能有幾項(xiàng)沒有意義或根本不存在。如果調(diào)用進(jìn)程沒有被授權(quán)使用這一連接,返回錯(cuò)誤。這一點(diǎn)會(huì)防止未被授權(quán)的進(jìn)程獲得連接狀態(tài)。格式本地連接名此命令中止所有和,刪除,將發(fā)送特殊的信息到對方。具體的返回信息會(huì)因?qū)崿F(xiàn)不同而不同。到用戶信息假定操作系統(tǒng)提供一種可以使異步傳送信息到用戶程序的機(jī)制。當(dāng)確實(shí)通知用戶程序時(shí)會(huì)返回一些特定的信息。通常在這些信息中也會(huì)有錯(cuò)誤信息,在其它情況下會(huì)有關(guān)于完成或或其它用戶調(diào)用的相關(guān)信息。會(huì)提供下面的幾種消息
43、:本地連接名都提供響應(yīng)串都提供緩沖區(qū)地址發(fā)送和接收字節(jié)記數(shù)接收標(biāo)記接收標(biāo)記接收和下層接口實(shí)際上調(diào)用下層服務(wù)才能在網(wǎng)絡(luò)上傳輸數(shù)據(jù),在互聯(lián)網(wǎng)上我們通常認(rèn)為的下層是協(xié)議。如果下層是層,它提供一些類于服務(wù)類型和生存時(shí)間的參數(shù)。使用這些參數(shù)的如下設(shè)置:或是數(shù)字00000。000一分鐘,或是數(shù)字1請注意:假定的最大數(shù)據(jù)段的生存時(shí)間為分鐘,這里人為指定為分鐘。如果下層是而且使用源地址路由,接口必須允許路由信息的通信。這對建立連接和進(jìn)行路由是十分重要的。當(dāng)然也可以不使用協(xié)議作為的底層協(xié)議,但無論下層協(xié)議是什么,都必須提供源地址,目的地址和協(xié)議域,以及一些決定長度的域,總之一句話,要能夠提供類似于的功能。事件處
44、理下面說明的過程是可能的實(shí)現(xiàn),其它實(shí)現(xiàn)和本例的過程可能有一點(diǎn)點(diǎn)不同,但只在細(xì)節(jié),而決不在結(jié)果。的活動(dòng)可以總結(jié)為對事件的響應(yīng)。事件可以分為三類:用戶調(diào)用,接收數(shù)據(jù)段和超時(shí)。下面描述的是對具體事件的響應(yīng),在許多情況下,相關(guān)的動(dòng)作(響應(yīng))要和連接狀態(tài)相關(guān)。用戶調(diào)用的有:接收數(shù)據(jù)段的有:超時(shí)的有:對用戶的響應(yīng)可能是立即的也可能是延時(shí)的。錯(cuò)誤信息以字符串的形式給出。下面就是一個(gè)具體的錯(cuò)誤信息:。另外,請記住序列號空間大小為的次方。處理數(shù)據(jù)段的順序?yàn)槭紫冉邮?,再檢查序列號,如果是要接收的就放入接收隊(duì)列。另外,沒有說明狀態(tài)轉(zhuǎn)移時(shí),保持原來的狀態(tài)。調(diào)用狀態(tài)創(chuàng)建新的保存連接狀態(tài)信息,填充本地套接字標(biāo)記,外套接字
45、,優(yōu)先級,和用戶超時(shí)信息。注意一部分外套接字在被動(dòng)中可能未說明。如果是主動(dòng)的,而外套接字未指定,返回,如果是主動(dòng)的,而外套接字指定了,發(fā)送一個(gè)數(shù)據(jù)段。選擇初始發(fā)送序列號。數(shù)據(jù)段的格式如下,設(shè)置為,為,進(jìn)行狀態(tài),然后返回。如果調(diào)用者不能訪問指定的本地套接字,返回。如果沒有空間接收新的連接,返回。狀態(tài)如果處于主動(dòng)狀態(tài),指定了外套接字,可以將連接從被動(dòng)改為主動(dòng),并選擇。發(fā)送一個(gè)數(shù)據(jù)段,設(shè)置為,為。進(jìn)入狀態(tài)。和一起的數(shù)據(jù)可以和數(shù)據(jù)段一起發(fā)送,也可以在進(jìn)入狀態(tài)后發(fā)送。如果沒有空間接收請求,返回r如果未指定外套接字,返回。如果處于以下狀態(tài):狀態(tài),狀態(tài),狀態(tài),狀態(tài),狀態(tài),狀態(tài),狀態(tài)或狀態(tài)時(shí)返回。調(diào)用狀態(tài)如果
46、用戶無權(quán)訪問連接,返回。否則返回狀態(tài)TOC o 1-5 h z如果指定了外套接字,可以將連接從被被動(dòng)改為主動(dòng),選擇一個(gè)。發(fā)送數(shù)據(jù)段,設(shè)置為s為。進(jìn)入狀態(tài)。和一起的數(shù)據(jù)可以和數(shù)據(jù)段一起發(fā)送,也可以在進(jìn)入狀態(tài)后發(fā)送。如果沒有空間接收請求,返回,如果未指定外套接字,則返回。狀態(tài)和時(shí)在進(jìn)入狀態(tài)后將需要傳送的數(shù)據(jù)加入隊(duì)列。如果隊(duì)列已無空間,則返回狀態(tài)和狀態(tài)將緩沖區(qū)分段,發(fā)送緩沖區(qū)數(shù)據(jù),并使它帶有確認(rèn)值。如果沒有空間保存緩沖區(qū),則返回。如果設(shè)置了緊急標(biāo)記,那么,并設(shè)置緊急指針指向發(fā)送數(shù)據(jù)段中的相應(yīng)位置。在A,和狀態(tài)時(shí)返回,不理會(huì)請求。調(diào)用狀態(tài)如果用戶沒有權(quán)利訪問這個(gè)連接,返回。如果有權(quán)利,則返回。在,和狀
47、態(tài)下在進(jìn)入狀態(tài)后,將數(shù)據(jù)放入隊(duì)列準(zhǔn)備處理。如果隊(duì)列中沒有空間,返回在,和狀態(tài)下如果沒有接收到足夠的數(shù)據(jù)段滿足請求,將請求放入隊(duì)列。如果隊(duì)列中沒有空間記錄,返回,重新將接收數(shù)據(jù)段放入接收緩沖區(qū),并返回給用戶。在這種情況下,可以設(shè)置標(biāo)記。如果比現(xiàn)在傳送給用戶的要大,通知用戶有緊急數(shù)據(jù)。狀態(tài)如果連接已經(jīng)不存在,而發(fā)送來的消息又不是,那么要返回。如果想拒絕對不存在的連接因?yàn)檫h(yuǎn)方已經(jīng)發(fā)送了I必須由現(xiàn)在在緩沖區(qū)但還未傳送給用戶的數(shù)據(jù)滿足。如果沒有數(shù)據(jù)了,會(huì)得到的響應(yīng)。在,和狀態(tài)下返回調(diào)用狀態(tài)如果用戶沒有權(quán)利訪問這個(gè)連接,返回。如果有權(quán)利,則返回。狀態(tài)存在著的任何都會(huì)返回的響應(yīng)。刪除,然后進(jìn)入狀態(tài)并返回。狀
48、態(tài)刪除并返回響應(yīng)給任何在隊(duì)列中的或。狀態(tài)如果沒有發(fā)送,而且沒有等待發(fā)送的數(shù)據(jù)了,則形成并發(fā)送數(shù)據(jù)段,進(jìn)入狀態(tài);否則在進(jìn)入狀態(tài)后將命令保存在隊(duì)列中等待處理。狀態(tài)將這一命令保存在隊(duì)列中,直到所有正在進(jìn)行的完成后,形成并發(fā)送數(shù)據(jù)段,然后進(jìn)入狀態(tài)。在和狀態(tài)下嚴(yán)格地說,這將會(huì)是個(gè)錯(cuò)誤,會(huì)收到。只要第二個(gè)沒有發(fā)出,也可以收到一個(gè)響應(yīng)。狀態(tài)直到所有命令完成后再將這個(gè)請求放入隊(duì)列;然后發(fā)送數(shù)據(jù)段,進(jìn)入狀態(tài)。-和狀態(tài)下返回調(diào)用狀態(tài)如果用戶沒有權(quán)利訪問這個(gè)連接,返回。如果有權(quán)利,則返回。狀態(tài)任何存在的都應(yīng)該返回,刪除,進(jìn)入狀態(tài),然后返回。狀態(tài)對于所有在隊(duì)列中的和,都返回rcetsie,o刪除,進(jìn)入狀態(tài),然后返回。
49、在,LA和狀態(tài)發(fā)送數(shù)據(jù)段,對于所有在隊(duì)列中的和,都返回,;所有要進(jìn)行傳送或重新傳送的數(shù)據(jù)段立刻進(jìn)行,刪除,進(jìn)入狀態(tài),然后返回。在,和狀態(tài)下返回,刪除,進(jìn)入狀態(tài),然后返回。調(diào)用狀態(tài)e如果有權(quán)利,如果用戶沒有權(quán)利訪問這個(gè)連接,返回則返回狀態(tài)返回和指針。狀態(tài)返回和指針。返回狀態(tài)和指針。返回和指針。狀態(tài)返回和指針。狀態(tài)返回和指針。狀態(tài)返回和指針。狀態(tài)返回和指針。狀態(tài)返回和指針。狀態(tài)返回和指針。接收到數(shù)據(jù)段如果處于狀態(tài),所有到達(dá)的數(shù)據(jù)都被拋棄。包括的也不例外。如果接收到的數(shù)據(jù)段不包括,則返回一個(gè)。對于發(fā)送要選擇它可以認(rèn)知的確認(rèn)和序列號。如果關(guān)閉位,則序列號為0格式如下如果打開位,格式如下:如果處于狀態(tài),
50、首先檢查,接收到的應(yīng)該被忽略。下來應(yīng)該檢查,如果連接處于TOC o 1-5 h z狀態(tài)下,任何都是錯(cuò)誤的,應(yīng)該返回段,它的格式如下:。第三步應(yīng)該檢查,如果位設(shè)置了,檢查安全性,如果接收數(shù)據(jù)段中的與中的不能匹配,返回段,格式如下:。在大于的情況下,如果用戶和系統(tǒng)允許,則設(shè)置,如果用戶和系統(tǒng)不允許,發(fā)送段并返回。其格式如下:。如果小于,繼續(xù)進(jìn)行。設(shè)置為,為,指用.中,的指值,其它控制信息和數(shù)據(jù)以后處理。應(yīng)該選擇和,并發(fā)送,段,其格式如下:。設(shè)置為,設(shè)置為的值,連接狀態(tài)改為,其它控制信息和數(shù)據(jù)將在狀態(tài)中處理,但以于和的處理不應(yīng)該狀態(tài)狀態(tài)重復(fù)。如果未完全指定域,現(xiàn)在就應(yīng)該指定了。第四步是處理其它數(shù)據(jù)和
51、控制信息。其它的數(shù)據(jù)段(不包括)應(yīng)該有,因此不要對它進(jìn)行處理。如果接收到段,則它是非法的。如果確實(shí)接收到了,拋棄它,直接返回。TOC o 1-5 h z如果處于狀態(tài)。首先檢查位,如果設(shè)置了位,而且或,發(fā)送S(除非設(shè)置了位,如果這樣,拋棄這個(gè)數(shù)據(jù)段直接返回)。段的格式如下:K不用理會(huì)收到的數(shù)據(jù)段,直接返回。如果,那么是可以接受的。下一步檢查位。在設(shè)置了的情況下,如果是可以接受的,通知用戶,拋棄接收到的數(shù)據(jù)段并進(jìn)入狀態(tài),刪除并返回。如果不能接受,拋棄數(shù)據(jù)段返回。第三步檢查安全性和優(yōu)先級。如果和中的不匹配,發(fā)送段。在發(fā)送段的時(shí)候,如果已經(jīng)有了,格式為:,如果沒有,格式為。在沒有發(fā)現(xiàn)不匹配的時(shí)候,如果
52、有,段中的優(yōu)先級必須和中的匹配,如果不匹配,發(fā)送,其格式為:;如果未發(fā)現(xiàn)不匹配,而且沒有的情況下,如果接收到的數(shù)據(jù)段中的優(yōu)先級高于中的優(yōu)先級,在得到用戶和系統(tǒng)許可的情況下可以將中的優(yōu)先級升高,如果用戶或系統(tǒng)不許可,提高,然后以如下格式發(fā)送:,如果接收數(shù)據(jù)段中的優(yōu)先級小于中的優(yōu)先級則繼續(xù)。在發(fā)送了后,拋棄數(shù)據(jù)段并返回。第四步檢查位。只有在位是合法或沒有而且數(shù)據(jù)段中不包括的情況下才能進(jìn)行這一步。如果設(shè)置了位,而且和優(yōu)先級合法,那么設(shè)為:設(shè)為。應(yīng)該增加和相等,在重新發(fā)送隊(duì)列中原來等待確認(rèn)而現(xiàn)在已經(jīng)被確認(rèn)的數(shù)據(jù)段也被清除。如果,改變連接狀態(tài)為,形成下面格式的段并發(fā)送:。隊(duì)列中用于發(fā)送的數(shù)據(jù)的控制信息也一起發(fā)送,如果段中沒有數(shù)據(jù)或控制信息,則進(jìn)行第六步,否則返回。如果不成立,形成,段,格式如下:,并發(fā)送它。如果在段中沒有數(shù)據(jù)或控制
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度環(huán)保材料印刷委托協(xié)議范本3篇
- 2025版牙齒矯正教育培訓(xùn)機(jī)構(gòu)合作合同3篇
- 二零二五年度個(gè)人掛靠公司教育培訓(xùn)合作協(xié)議3篇
- 二零二五版私人學(xué)校物業(yè)設(shè)施租賃及管理合同3篇
- 機(jī)械設(shè)備行業(yè)員工需求
- 服裝行業(yè)生產(chǎn)工藝安全
- 藥學(xué)科護(hù)士協(xié)助藥劑配制
- 二零二五年度個(gè)人股權(quán)轉(zhuǎn)讓代持協(xié)議書(股權(quán)代持與退出機(jī)制)16篇
- 二零二五年度行政合同訂立流程與模板指南3篇
- 二零二五年度婚禮視頻拍攝制作合同2篇
- 課題申報(bào)書:數(shù)智賦能高職院校思想政治理論課“金課”實(shí)踐路徑研究
- H3CNE認(rèn)證考試題庫官網(wǎng)2022版
- 感統(tǒng)訓(xùn)練培訓(xùn)手冊(適合3-13歲兒童)
- ??停?024年智能制造校園招聘白皮書
- 海員的營養(yǎng)-1315醫(yī)學(xué)營養(yǎng)霍建穎等講解
- 2023年廣東省招聘事業(yè)單位人員考試真題及答案
- 幼兒平衡車訓(xùn)練課程設(shè)計(jì)
- 梁山伯與祝英臺(tái)小提琴譜樂譜
- 我國全科醫(yī)生培訓(xùn)模式
- DBJ51-T 188-2022 預(yù)拌流態(tài)固化土工程應(yīng)用技術(shù)標(biāo)準(zhǔn)
- 《長津湖》電影賞析PPT
評論
0/150
提交評論