專利名稱:多處理器環(huán)境的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及多處理器環(huán)境,特別涉及到運行于此種環(huán)境中的進(jìn)程間數(shù)據(jù)傳送的設(shè)置。在復(fù)雜系統(tǒng)中,例如電話網(wǎng)絡(luò),“智能”在許多不同的點上都有體現(xiàn)。若干個控制處理器提供了網(wǎng)絡(luò)的主要功能,但是,在中央處理單元以外的一些單元中也有一定的處理能力。
特別地,一些智能化的外圍設(shè)備,如包含數(shù)據(jù)處理決策能力的外圍設(shè)備,將在距離用戶更近的地方出現(xiàn)。
由智能外圍設(shè)備提供的這些功能可能不需要經(jīng)由特定網(wǎng)絡(luò)建立物理連接。因此,某些這樣的智能化外圍設(shè)備可能代表幾個不同網(wǎng)絡(luò)中的一個節(jié)點。另外,當(dāng)一個網(wǎng)絡(luò)包括若干臺主機時,某臺主機上的一個進(jìn)程可能需要與另一臺主機上的某個進(jìn)程直接交互。
所以,運行于不同主機上進(jìn)程間的交互處理通信必須可靠。
當(dāng)進(jìn)程間的永久鏈路有較高的可靠性時,就意味著要大量的投資且不夠靈活。因此通過共享的公共網(wǎng)絡(luò)如Internet主機將會更頻繁地被訪問。
Interet提供一種簡單的數(shù)據(jù)報功能,使數(shù)據(jù)在主進(jìn)程之間相互傳送。傳送中使用Internet提供的簡單的用戶數(shù)據(jù)報協(xié)議(UDP)。這種協(xié)議在諸如Postel,J的APRANET工作組的請求(編號768)中作了說明。當(dāng)進(jìn)程間進(jìn)行數(shù)據(jù)傳輸時,UCP數(shù)據(jù)報不是一種可靠的進(jìn)行固定的或PSTN鏈路中的數(shù)據(jù)傳輸方法。
以前的數(shù)據(jù)報傳輸功能,包括廣為人知的TCP.,會導(dǎo)致數(shù)據(jù)報中數(shù)據(jù)的分解,因為它不保留消息邊界而且將花很多時間來通報傳輸中的任何失敗,如果這種通報是可能的話。
因此,本發(fā)明尋求提供一種方法在Internet這樣的網(wǎng)絡(luò)上進(jìn)行可靠的數(shù)據(jù)傳輸。
根據(jù)本發(fā)明,提供一種方法,在由眾多可被訪問的主機(從眾多的網(wǎng)絡(luò)節(jié)點地址)構(gòu)成的多處理器環(huán)境中運行的進(jìn)程間可以傳輸數(shù)據(jù)包。這種方法包括為每一個被尋址的進(jìn)程創(chuàng)建一個目的主機標(biāo)識號和目的主機端口號;為每一個目的主機標(biāo)識號創(chuàng)建一個由眾多相應(yīng)的網(wǎng)絡(luò)節(jié)點地址構(gòu)成的地址列表;為兩個節(jié)點間傳輸?shù)拿恳粋€數(shù)據(jù)包循環(huán)地從目的主機相對應(yīng)的地址列表中選擇下一個網(wǎng)絡(luò)節(jié)點地址直到最后一個地址;在數(shù)據(jù)包前加一個頭來定義所選擇的網(wǎng)絡(luò)節(jié)點地址和目的端口號;監(jiān)視數(shù)據(jù)包應(yīng)答的返回數(shù)據(jù)并對任何未被確認(rèn)的數(shù)據(jù)包重新傳給地址列表中的下一個網(wǎng)絡(luò)節(jié)點地址。
進(jìn)程間傳輸?shù)拿恳粋€消息頭可能包含一個消息順序編號,它由發(fā)送處理器累加,這樣接收處理器就能將接收到的多個消息以正確的順序重新組裝起來,并據(jù)此判斷接收到的一系列消息中缺少的一條或多條消息。
對于較長的數(shù)據(jù)包,頭可能還包含有與將被傳輸?shù)奶囟〝?shù)據(jù)包相對應(yīng)的塊序號。在第一臺主機上多于一個的進(jìn)程與第二臺主機上的一個或多個進(jìn)程交互的情況下,順序編號代表節(jié)點間傳輸?shù)南?,它可能不再與塊序號相一致,這里塊序號代表進(jìn)程間傳送的一系列端口消息,以便使得在接收用戶進(jìn)程消息之前能夠?qū)φ麄€消息進(jìn)行再次確認(rèn)。
現(xiàn)在參考下面的附圖僅以舉例的形式來說明利用本發(fā)明的分布式多處理器網(wǎng)絡(luò),其中附圖如下
圖1所示為遠(yuǎn)程通信系統(tǒng)的示意圖部分;圖2所示為分布式多處理器網(wǎng)絡(luò)示意方塊圖;圖3所示為與圖2中的網(wǎng)絡(luò)的通信進(jìn)程的進(jìn)程交互示意圖;圖4所示為協(xié)議中使用的數(shù)據(jù)和頭信息的示意圖;圖5為發(fā)端處理器動作的狀態(tài)轉(zhuǎn)換圖;圖6為接收端處理器動作的狀態(tài)轉(zhuǎn)換圖;圖7到圖9為表明在圖1的設(shè)置下發(fā)送節(jié)點的一個模塊(圖3)的操作流程圖;及圖11到圖13為接收節(jié)點中模塊(如圖3所示)的部分操作流程圖。
首先參考圖1,一個典型的通信布置中,中央交換機包括若干個控制處理器1(圖中只顯示一個)和資源2,它提供諸如交換選擇、遙測和其他的基于網(wǎng)絡(luò)的服務(wù)。
這樣,當(dāng)通過運行應(yīng)用軟件3,控制處理器識別出待用的一個特定的資源2來執(zhí)行請求的功能,對控制處理器1來說必須按照消息的格式向資源2發(fā)送信息。
為完成這種操作,控制處理器要包含通信軟件(如4所示)和若干通信輸出端口5。遠(yuǎn)程通信端口5通過一個或多個網(wǎng)絡(luò)連接到所要求的資源上,這些網(wǎng)絡(luò)由如圖1中的消息接口6所示。后面將對消息傳輸操作的細(xì)節(jié)問題作更清晰的描述。
資源2中相應(yīng)的通信端口7用于接收來自于不同網(wǎng)絡(luò)的消息。
再參考圖2,若干個節(jié)點10-1n通過相應(yīng)的通信端口10a、10b、10c等連接到若干個網(wǎng)絡(luò)20-2m上,這些端口用來表示圖1中的通信端口5和7。應(yīng)該注意的是節(jié)點10-1n的連接模式是變化的, 不是所有節(jié)點都連接到所有的網(wǎng)絡(luò)上。例如節(jié)點10通過其相應(yīng)的端口連接到網(wǎng)絡(luò)20、21和2m上,而節(jié)點11沒有連接到網(wǎng)絡(luò)21但連接到網(wǎng)絡(luò)22上。
如上面參考的內(nèi)容,網(wǎng)絡(luò)20-2m的通信鏈路有時類似于Internet中所提供的簡單的數(shù)據(jù)報傳輸協(xié)議如UDP。在用戶數(shù)據(jù)報協(xié)議(UPP)中,存在用于應(yīng)用程序向其他程序發(fā)送消息的過程。待傳送的消息被集中為一定數(shù)目的數(shù)據(jù)字節(jié),通信協(xié)議為其加上源標(biāo)識號、目的標(biāo)識號、長度和校驗和字節(jié)。UDP軟件模塊利用源和目的地址形成Internet的消息頭并實現(xiàn)兩個處理器間的數(shù)據(jù)消息的傳輸。圖4a中所示的一個典型的UDP消息將在后面說明。
現(xiàn)在參考圖1和圖3,圖1中控制資源2的軟件和控制處理器1的應(yīng)用軟件3由用戶進(jìn)程31-3p代表。如果一個用戶進(jìn)程31-3p要向同一個或不同處理器上的另一個用戶進(jìn)程31-3p傳送信息,它將把目的頭與要傳送的數(shù)據(jù)組裝成一個數(shù)據(jù)報。
再參考圖4a,已知系統(tǒng)中的數(shù)據(jù)報40和頭42中的目的節(jié)點(Internet地址)、端口地址一起被傳給處理器上的UDP進(jìn)程41。UDP進(jìn)程41使用頭42中的Internet地址并將另外一些附加信息加入到它自己的頭43中。附加信息包括源進(jìn)程31-3p的端口地址44、從數(shù)據(jù)報40中獲取的長度字節(jié)45和校驗和字節(jié)46,目的節(jié)點可以利用這個校驗和來檢查傳輸中是否有錯誤發(fā)生。
UDP進(jìn)程41將把整個UDP數(shù)據(jù)報47傳送給Internet協(xié)議模塊48,此模塊再通過到網(wǎng)絡(luò)上的(如20)適當(dāng)?shù)尿?qū)動器49將數(shù)據(jù)包傳送到目的進(jìn)程。在目的端,從網(wǎng)絡(luò)20接收到的數(shù)據(jù)再通過相應(yīng)的驅(qū)動器49經(jīng)由Internet模塊48傳送到UDP模塊41,這樣就可以傳送到目的進(jìn)程31-3p。
在本發(fā)明的系統(tǒng)中,在用戶進(jìn)程31-3p和UDP進(jìn)程41間引入了另一個進(jìn)程。這個進(jìn)程為RDP驅(qū)動器50,它通過操作系統(tǒng)接口51-5p從用戶進(jìn)程31-3p接收數(shù)據(jù)報40。當(dāng)系統(tǒng)協(xié)議使用UDP進(jìn)程41時,這些接口可以用來傳輸數(shù)據(jù);在為此而指定的內(nèi)存區(qū)域中,這些接口可以有效地作為用于各進(jìn)程的數(shù)據(jù)傳輸?shù)臄?shù)據(jù)存儲區(qū)域?,F(xiàn)在參考圖4b,這種情況下頭42轉(zhuǎn)發(fā)RDP節(jié)點61和RDP端口62的地址。
在一些系統(tǒng)中,用戶進(jìn)程31-3p在由用戶進(jìn)程分配的內(nèi)存區(qū)域中將待傳送的數(shù)據(jù)報進(jìn)行編輯。接下來,通過操作系統(tǒng)接口51-5p,所存儲的數(shù)據(jù)報的地址傳送給RDP模塊50,然后該模塊從指定區(qū)域內(nèi)恢復(fù)數(shù)據(jù)報以便進(jìn)一步處理。在另外一些情況中,組裝的數(shù)據(jù)報可通過操作系統(tǒng)接口51-5p直接被傳送。
在接收節(jié)點上,RDP模塊50一旦接收到數(shù)據(jù)報就將此數(shù)據(jù)報放置到用于接收進(jìn)程31-3p的端口隊列而分配的內(nèi)存區(qū)。
在RDP驅(qū)動器50中,根據(jù)查詢表來確定是哪一個網(wǎng)絡(luò)連接了源節(jié)點和目的節(jié)點。
這樣,考慮圖2、3和4如果運行在節(jié)點10上的進(jìn)程31要傳送一個數(shù)據(jù)報40給運行在節(jié)點12上的進(jìn)程32,則兩個節(jié)點均通過以太網(wǎng)20和21連接。因此RDP驅(qū)動器50將從這些網(wǎng)絡(luò)中選擇一個并將目的節(jié)點地址(16)以16比特的一個DN字節(jié)傳送出去。源節(jié)點(SN)和源端口(SP)被識別為相似時,目的端口也被組裝到一個16位的字節(jié)(DP)中。
為了免除疑問,應(yīng)當(dāng)注意相對于目的進(jìn)程來說用戶進(jìn)程31-3p僅使用一個節(jié)點地址,而且節(jié)點地址61也被UDP使用,RDP模塊50所做的到幾個Internet地址之一的轉(zhuǎn)換對用戶是透明的。
同時還應(yīng)注意,即使在向該邏輯節(jié)點傳送數(shù)據(jù)包的過程當(dāng)中,邏輯(RDP)地址的地址列表可以由用戶進(jìn)行修正,以指定附加的或替代的地址。從地址列表中刪除地址也是允許的,這樣向目的節(jié)點傳送后續(xù)數(shù)據(jù)報時將使用修改過的地址列表。這使得在節(jié)點端口間傳送數(shù)據(jù)報時,用戶可在不丟失任何數(shù)據(jù)報的前提下修復(fù)網(wǎng)絡(luò)。
應(yīng)當(dāng)注意的是,節(jié)點間每個傳輸都使用地址列表中下一個可使用的地址,除非這個地址被標(biāo)明為失效。這樣,當(dāng)一個邏輯(RDP)地址具有多于一個的與其相關(guān)的Internet地址時,Internet地址可以被循環(huán)地使用。
RDP頭63中的其他字節(jié)包括一個8位的錯誤域(E)、一個標(biāo)識域(FL)、塊序號和順序編號(分別是FRAG和SEQ)和一個數(shù)據(jù)長度域。后三個域每個都是32位。標(biāo)識(FL)字節(jié)的每位的含義如下位1 第一段當(dāng)數(shù)據(jù)報被分開時,它表明這是數(shù)據(jù)的第一段,同時段序號(在FRAG域中)被標(biāo)識為第一段;位2 最后一段 表示被分開的數(shù)據(jù)報的最后一段;位3 設(shè)置順序 用于初使化兩節(jié)點間順序編號的消息;位4應(yīng)答上一個接收的數(shù)據(jù)報的應(yīng)答;位5上一個數(shù)據(jù)報的否定應(yīng)答;位6測試指示器;位7高優(yōu)先級指示器;位8 通告位用于指示由于進(jìn)程隊列沒有空間目的RDP進(jìn)程不能發(fā)送一個有效的數(shù)據(jù)報。
為了進(jìn)下理解本項發(fā)明,可以考慮一個用戶進(jìn)程與另一個用戶進(jìn)程之間的數(shù)據(jù)報傳輸。待傳送的數(shù)據(jù),即由用戶進(jìn)程(比方說31)提供的數(shù)據(jù),在RDP的數(shù)據(jù)報內(nèi)被打包,同時RDP本身又在UDP的數(shù)據(jù)報中被打包,也就是說,整個RDP數(shù)據(jù)報(包括頭)看作如圖4a中所示形式的數(shù)據(jù)報,其上增加了適當(dāng)?shù)腢DP頭43。
目的節(jié)點標(biāo)識符DN被轉(zhuǎn)換成相應(yīng)的Internet目的地址,且數(shù)據(jù)報被傳送到其目的節(jié)點。傳輸RDP進(jìn)程開始作超時判斷處理,如果是兩個節(jié)點間的第一條消息,而不考慮數(shù)據(jù)報起始的節(jié)點中的端口,設(shè)置順序標(biāo)識S將被置入FL字節(jié)且順序編號字節(jié)(SEQ)也將包含一個編號。此時,可方便地暫時忽略與數(shù)據(jù)報的該塊有關(guān)的那些字節(jié)。上述的UDP模塊41將如前面描述的那樣發(fā)送包含有RDP頭的數(shù)據(jù)報到目的節(jié)點。在目的節(jié)點UDP頭被剝離,于是數(shù)據(jù)報被傳送到目的節(jié)點12的RDP驅(qū)動器50中。在原發(fā)節(jié)點10的RDP驅(qū)動器50中啟動的超時判斷處理等待接收目的節(jié)點12發(fā)來的數(shù)據(jù)報。
目的節(jié)點12的RDP驅(qū)動器50接收第一條消息后,按它的數(shù)據(jù)報接收的順序編號設(shè)置其順序編號到順序字節(jié)中指定的順序值中,用于接收來自SN字節(jié)標(biāo)識的相應(yīng)源節(jié)點的數(shù)據(jù)報。接收RDP驅(qū)動器將返回一個內(nèi)含順序編號的數(shù)據(jù)報和設(shè)定在標(biāo)識域中的應(yīng)答位(A)。
發(fā)送節(jié)點10和目的節(jié)點12之間傳送的第一個數(shù)據(jù)報通常不含有任何來自用戶進(jìn)程的數(shù)據(jù),盡管它可以包含來自用戶進(jìn)程的數(shù)據(jù)。數(shù)據(jù)長度這節(jié)將被設(shè)置為0,后面不跟有數(shù)據(jù)。在當(dāng)前的系統(tǒng)開發(fā)中,傳送的第一個數(shù)據(jù)報用于修改一個滑動窗口,該窗口決定應(yīng)答消息發(fā)送之前發(fā)送節(jié)點與目的節(jié)點間可能傳送的數(shù)據(jù)報的數(shù)目。
在這種情況下,當(dāng)發(fā)送節(jié)點10開始第一次傳送時,節(jié)點中將包含一個值,它表示發(fā)送端能夠正常工作的窗口最大值。接收消息后的目的節(jié)點12如果處于其容易范圍內(nèi),則接收發(fā)送方提供的這個值。但如果接收節(jié)點12的最大容量(窗口)小于發(fā)送節(jié)點10所提供的值,則在返回給發(fā)送節(jié)點一個ACK(應(yīng)答信號),目的節(jié)點12提出其最大值。調(diào)整后的值即被發(fā)送節(jié)點10采用。
如果第一個節(jié)點10的RDP進(jìn)程在超時之前未接收到第一次傳送的應(yīng)答消息,其RDP驅(qū)動器50將試圖從另一個網(wǎng)絡(luò)(如21)再發(fā)送一個相同的數(shù)據(jù)報,并將標(biāo)出第一個RDP的轉(zhuǎn)換即那個標(biāo)明節(jié)點12與網(wǎng)絡(luò)20的連接失敗。如果向由RDP轉(zhuǎn)換確定的某一特定地址的重發(fā)努力失敗一預(yù)定的數(shù)目后,則RDP模塊41可以將其標(biāo)識為鏈路故障并將該鏈路標(biāo)記為失效,直到測度數(shù)據(jù)報成功地標(biāo)出鏈路已經(jīng)重新建立為止。
應(yīng)當(dāng)注意在節(jié)點10與12之間,可能同時有多于一個的進(jìn)程在傳送數(shù)據(jù),一旦第一次數(shù)據(jù)已被成功傳送且最初的發(fā)送節(jié)點10已經(jīng)收到了包含正確順序編號和A標(biāo)志設(shè)置的有效返回數(shù)據(jù)報后,這些數(shù)據(jù)將依次被傳送。后續(xù)的數(shù)據(jù)報將由源節(jié)點10發(fā)送,其中不設(shè)置S標(biāo)志。
RDP進(jìn)程50制定一個在源節(jié)點10和目的節(jié)點12間試圖多次重發(fā)一個數(shù)據(jù)報的次數(shù),而且會通過不同的網(wǎng)絡(luò)地址來連續(xù)地試圖傳送這個數(shù)據(jù)報直到預(yù)先設(shè)定的重試次數(shù)為止。進(jìn)行一個預(yù)先設(shè)定的重發(fā)次數(shù)的努力后,則根據(jù)接收節(jié)點失敗這一事實返回一條失敗消息到源節(jié)點上的起始進(jìn)程。如想在兩個節(jié)點間還要試圖建立一條路由,則要通過用上面所述的新的順序編號來初始化兩節(jié)點間的數(shù)據(jù)報傳送來執(zhí)行。
應(yīng)用確認(rèn)信息、重發(fā)信息、順序編號和多個以太網(wǎng)絡(luò)互連,不同節(jié)點上的進(jìn)程間的數(shù)據(jù)傳送的可靠性可以得以保正。作為一個節(jié)點上的一個端口的發(fā)送進(jìn)程(31-3p)與作為另一個節(jié)點上端口的接收進(jìn)程31-3p之間的鏈路是非連接的。所以,一個發(fā)達(dá)進(jìn)程可以同時向不同的接收進(jìn)程發(fā)達(dá)一系列數(shù)據(jù)報,同樣,一個接收進(jìn)程可能接收來自于若干個不同發(fā)送進(jìn)程的數(shù)據(jù)報。
建立完一個帶有應(yīng)答順序編號的數(shù)據(jù)傳送通路后,從源節(jié)點向目的節(jié)點發(fā)送數(shù)報及依次增大的順序編號。RDP驅(qū)動器50保持所有已傳送消息的拷貝直到接收到所發(fā)送數(shù)據(jù)的應(yīng)答消息為止。一旦接收到了一個應(yīng)答消息后,其后續(xù)消息僅從第一個節(jié)點向第二個節(jié)點發(fā)送。然而在上文提及的較好的操作方法中,在接收到應(yīng)答消息以前,“N”消息的窗口是可接收的,這樣消息可以順序地被傳送直到最大數(shù)目的未完成等待ACK的數(shù)據(jù)報被發(fā)送。因此,對每一個被傳送的數(shù)據(jù)報,其順序編號是由發(fā)送節(jié)點RDP驅(qū)動器50遞增,如果未接收到應(yīng)答消息則對其復(fù)位。接收RDP驅(qū)動器50收到每個數(shù)據(jù)報后檢查消息的順序編號。接收節(jié)點12的RDP驅(qū)動器50能有效接收的順序編號是有限的,如果驅(qū)動程序接收到一個不正確的超過了其最大允許值或有某種其它錯誤(例如數(shù)據(jù)報頭所指明的端口對接收RDP驅(qū)動程度來說是未知的)的順序編號,它將返回一個帶有“N”標(biāo)識的數(shù)據(jù)報,于是使發(fā)送RDP模塊或者重發(fā)初始數(shù)據(jù)報或者根據(jù)錯誤原因?qū)⒋藬?shù)據(jù)報返回給起始進(jìn)程。
這里注意,通過快速識別任何故障和立即經(jīng)由傳送節(jié)點返回一否定應(yīng)答(NACK)信號,可接收任何故障的快速通知。
接收節(jié)點12的RDP進(jìn)程50期望按順序接收一個數(shù)據(jù)報,然而假如接收的數(shù)據(jù)報的順序編號在滑動窗口的限制之內(nèi),這樣接收的數(shù)據(jù)報與最后接收和應(yīng)答的數(shù)據(jù)報相比不會大于N,于是,這個模塊將保留最新接收的早期編號的數(shù)據(jù)報的未完成回執(zhí)。如果接收模塊中出現(xiàn)超時或者新近接收的數(shù)據(jù)報順序編號比以前接收的數(shù)據(jù)報的順序編號要大,則接收模塊將傳送與最近連續(xù)接收的順序已編號的數(shù)據(jù)報相對應(yīng)的應(yīng)答。這個應(yīng)答過程也向發(fā)送模塊確認(rèn)所有以前順序編號的數(shù)據(jù)報。這樣,傳送節(jié)點10的RDP進(jìn)程50接收到應(yīng)答消息后,能根據(jù)接收節(jié)點12最新接收的應(yīng)答數(shù)據(jù)報的內(nèi)容復(fù)置它的傳送窗口。如果當(dāng)前傳送的順序編號數(shù)據(jù)報與最后應(yīng)答的順序編號的數(shù)據(jù)報的差達(dá)到“N”,則超時了。更多的數(shù)據(jù)報被傳送直到接收到一個應(yīng)答,否則重新傳送以前的數(shù)據(jù)報。
如上所述,發(fā)送的未收到應(yīng)答的數(shù)據(jù)報的數(shù)量可以在起始節(jié)點10和接收節(jié)點12之間協(xié)商。此外,在將要發(fā)送失敗的數(shù)據(jù)報后面的數(shù)據(jù)報的應(yīng)答之前,可以利用另外的安全措施將由接收驅(qū)動器發(fā)送的帶有“N”標(biāo)志的數(shù)據(jù)報由起始RDP驅(qū)動器50來應(yīng)答。這樣,如果系統(tǒng)正在工作,帶有一個順序編號窗口10,則如果先前數(shù)據(jù)報1、2、4、5等的順序編號已經(jīng)被接收,而數(shù)據(jù)報3尚未被接收,則接收節(jié)點12的RDP驅(qū)動器模塊50將發(fā)送數(shù)據(jù)報2的應(yīng)答。發(fā)送RDP模塊50將重新傳送數(shù)據(jù)報3。
接收到數(shù)據(jù)報3后,接收節(jié)點12的RDP模塊50可能傳送帶有更大的順序編號的以前所接收的數(shù)據(jù)報的應(yīng)答消息。這樣數(shù)據(jù)報8的應(yīng)答可能是對數(shù)據(jù)報3重新傳送的響應(yīng)。
當(dāng)接收節(jié)點12上的目的用戶進(jìn)程接受數(shù)據(jù)報的速度不如它們的數(shù)據(jù)報被接收的速度那樣快時,RDP模塊50將把每個接收到的數(shù)據(jù)報放到隊列中。如果主機的隊列大小有限且接收排隊的數(shù)據(jù)變得太大的話,則目的RDP模塊50試圖再次將數(shù)據(jù)加入隊列的同時,短期內(nèi)不再給發(fā)送節(jié)點10以應(yīng)答。將數(shù)據(jù)報加入到隊列可以請求一定次數(shù),但當(dāng)最大的重試次數(shù)耗盡后,一個否定應(yīng)答將隨著數(shù)據(jù)報返回給起始節(jié)點10,使得此節(jié)點的用戶進(jìn)程重新傳送該失敗的數(shù)據(jù)報。
正常情況下,RDP模塊不向用戶進(jìn)程傳送任何數(shù)據(jù)報發(fā)送的確認(rèn)信息,因為從可靠性角度看用戶進(jìn)程不希望接收這種應(yīng)答。但是用戶進(jìn)程可能特別地要求確認(rèn),這時從接收節(jié)點接收應(yīng)答后,RDP模塊將通過操作系統(tǒng)接口51-50轉(zhuǎn)發(fā)傳輸確認(rèn)信息。
如果RDP驅(qū)動器50接收的帶有順序編號的應(yīng)答消息與任何一個已發(fā)送送但尚未確認(rèn)的數(shù)據(jù)報都不相符合,則將忽略這個應(yīng)答。超時發(fā)生后,所有從源到目的的失敗傳送都將被更正。
在接收節(jié)點中,RDP模塊能接受接收的帶有順序編號在(n-s)到(n+s-1)范圍內(nèi)的數(shù)據(jù)報,這里n為已接收但未確認(rèn)的最小順序編號,S為發(fā)送模塊在未接收應(yīng)答時可發(fā)送的數(shù)據(jù)報個數(shù)。在這種情況下,返回的應(yīng)答將帶有最近按順序接收的數(shù)據(jù)報的順序編號。這種情況可能發(fā)生在接收RDP驅(qū)動器給以前接收的數(shù)據(jù)報發(fā)送一個應(yīng)答消息且遞增其順序編號,但返回的應(yīng)答消息沒有被源節(jié)點接收時。隨著第一個RDP驅(qū)動器超時,源節(jié)點10上的第一個RDP驅(qū)動程序50將試圖重發(fā)。
應(yīng)當(dāng)注意,當(dāng)兩個節(jié)點之間要建立一條新的傳送路徑時,設(shè)置的順序標(biāo)識和順序編號從源節(jié)點傳送到目的節(jié)點。當(dāng)數(shù)據(jù)交換在兩個方向同時發(fā)生時,這兩個傳送是獨立進(jìn)行的,也就是說源節(jié)點,比方說是10,初始化設(shè)置發(fā)送給目的節(jié)點12的第一條消息的順序號,同時一個獨立的消息序列也將開始從節(jié)點12(作為源節(jié)點)向節(jié)點10(作為目的節(jié)點)傳送。第一個方向即從節(jié)點10到節(jié)點12上的數(shù)據(jù)傳送可能使用與節(jié)點12到節(jié)點10傳送不同的網(wǎng)絡(luò)。
現(xiàn)在考慮段字節(jié)FRAG和第一個及最后一個段的標(biāo)識F和L。如果一個從用戶進(jìn)程31-3p接收的數(shù)據(jù)報40的長度很大,則可能需要該數(shù)據(jù)報以一系列的段來發(fā)送。這樣兩個節(jié)點間的第一次傳送將指明本數(shù)據(jù)段是第一段F,其段編號可以等于或不等于1。在數(shù)據(jù)報40的后續(xù)每一段的傳送時,段編號FRAG都累加1直到數(shù)據(jù)報40的最后一段被傳送完,即L標(biāo)識被置位為此。
整個數(shù)據(jù)報40可以在目的節(jié)點重新組裝起來,即使數(shù)據(jù)報中的某些段不是按順序接收的,這是由于傳送數(shù)據(jù)包括一個說明哪一段是第一段哪一段是最后一段的信息,并且使用FRAG中的順序編號策略。
注意當(dāng)用戶進(jìn)程數(shù)據(jù)報不需要分段時,如可能是定長,為分段進(jìn)程而分配的字節(jié)和位可以用于其他目的或根本不使用。當(dāng)分段方案被采用時,兩節(jié)點間傳送的未被分段的數(shù)據(jù)包可在標(biāo)識(FL)字節(jié)中設(shè)置第一段與最后一段的對應(yīng)位(F和L),頭其他室閑字節(jié)可以用于以后系統(tǒng)功能的擴展,這可以在兩節(jié)點間傳送的最初設(shè)置中指定。
可以理解,若運行在一個特定節(jié)點的不同端口上的若干個進(jìn)程在與運行在同一目的節(jié)點上的不同端口上的一個或多個進(jìn)程通信,則兩個節(jié)點數(shù)據(jù)的交換可能不再是一個數(shù)據(jù)報的連續(xù)數(shù)據(jù)段。
任何時候當(dāng)RDP模塊50處理多個數(shù)據(jù)報時,數(shù)據(jù)報要排成隊等待從發(fā)送節(jié)點向接收節(jié)點傳送。任何由用戶進(jìn)程31-3p通過在FL字節(jié)中設(shè)置P位而聲明為高優(yōu)無級的數(shù)據(jù)報將由模塊50優(yōu)先于處理其他數(shù)據(jù)報進(jìn)行處理。當(dāng)多個高優(yōu)先級的數(shù)據(jù)報排成隊時,RDP模塊50將按照接收的順序發(fā)送這些高優(yōu)先級的數(shù)據(jù)報。
在如上面描述的情況下,當(dāng)確認(rèn)一個特定RDP目的節(jié)點的特定目的地址不再有效時,RDP進(jìn)程可以在該失敗的路由上發(fā)送測試消息,直到接收到此消息的應(yīng)答為止。這種消息是通過在標(biāo)識域中設(shè)置T標(biāo)識來標(biāo)明的。一旦成功地發(fā)送了一個或多個測試消息,標(biāo)明地址失效的標(biāo)志就被廢棄?;顒拥臄?shù)據(jù)是不能用來測試失敗路由的。
當(dāng)?shù)谝淮螛?biāo)注地址列表中的一個特定目的地址為失效時,RDP模塊50可以通知本節(jié)點上的一個端口這個特定的地址鏈路發(fā)生故障,本特定地址處于失效狀態(tài)。在端口處運行的進(jìn)程可以利用這個通知來提醒用戶注意節(jié)點間單Internet鏈路故障,否則用戶將感覺不到該鏈路故障。
應(yīng)當(dāng)注意,因為RDP驅(qū)動器50具有識別未到達(dá)目的節(jié)點的數(shù)據(jù)報,以及在數(shù)據(jù)報中數(shù)據(jù)段未按特定順序接收時重建數(shù)據(jù)報的能力,它保證了在可靠性方面比通常的UDP進(jìn)程有很大的提高。這樣,網(wǎng)絡(luò)20-2m之一的任何故障都被RDP進(jìn)程克服,同時進(jìn)程間僅由UDP互連接的反復(fù)重試也可以取消。
現(xiàn)在參考圖5,通過提供目的節(jié)點等的地址列表,發(fā)送狀態(tài)機完成初始化,然后它就自等待發(fā)送設(shè)置順序狀態(tài)。自用戶進(jìn)程收到一有效的數(shù)據(jù)報后,再參考圖7和圖4b,圖3中的RDP進(jìn)程50暫時將此數(shù)據(jù)報存儲起來(700步),然后準(zhǔn)備好從地址列表中取出的一個與指定目的節(jié)點相對應(yīng)的新的網(wǎng)絡(luò)目的節(jié)點地址的待發(fā)送的數(shù)據(jù)報。數(shù)據(jù)報的DN域被設(shè)置為給定地址。在715步時將目的端口地址傳送到目的端口域DP中,在第720步中將SN位設(shè)置為當(dāng)前傳送過程中的消息順序編號。最后,在730步啟動定時器之前,RDP頭63中FL域的S標(biāo)志被置為1,這個重新傳送定時器近似地等于與此節(jié)點有關(guān)的任何地址向接收節(jié)點傳送一個數(shù)據(jù)報到接收到應(yīng)答后所花的最大時間與應(yīng)答窗口大小加2的積。現(xiàn)在在735步處,為了向Internet上傳送,完整的RDP數(shù)據(jù)報和從地址列表中獲得的目的節(jié)點的循環(huán)地址(從205步獲取)一起傳給圖3中的UDP模塊41。然后RDP模塊50進(jìn)入等待設(shè)置窗口狀態(tài)80。
圖8中對等待設(shè)置窗口狀態(tài)80作了更為詳細(xì)的說明。當(dāng)用圖3中的UDP模塊41從接收節(jié)點接收一個數(shù)據(jù)報時,則生成第一條出口通路。在810步RDP進(jìn)程50通過查詢空白域來決定“S”位是否被設(shè)定。如果S位被設(shè)定則在815步順序編號位將被檢查以確定它是0,還是等于初始的消息編號。
如果順序編號是0,它代表接收端有能力處理以非順序的方式接收的數(shù)據(jù)報且最大的窗口尺寸將保持在數(shù)據(jù)報部分40中。如果數(shù)據(jù)報40中保持的N不超過適合于發(fā)送節(jié)點工作的最大N值(如在第820步中確定的)則在825步中將窗口值設(shè)置為N,否則在830步中將窗口設(shè)置為發(fā)送端能處理的最大值。然后設(shè)置窗口應(yīng)答數(shù)據(jù)報被發(fā)送到接收端。它包括一個含有一個應(yīng)答的數(shù)據(jù)報,flag域中的設(shè)置位被設(shè)定,順序編號設(shè)置為0且數(shù)據(jù)報設(shè)置成825步和830步由傳送節(jié)點選定的窗口的尺寸。接下來RDP模塊進(jìn)入等待設(shè)定順序應(yīng)答狀態(tài)100。
但是,如果在815步中確定順序編號不為0時,則在805步中查詢應(yīng)答位。如果這個應(yīng)答位被置位,它代表接收端要求任何時刻只能傳送一條消息。假設(shè)805步?jīng)]有設(shè)置應(yīng)答位,則在840步斷否定應(yīng)答是否被置位,如果沒被置位,則???窗口不退出。但如在840步中否定應(yīng)答被置位,它代表通信嘗試中發(fā)生了錯誤,在845步任何準(zhǔn)備傳送給特定目的節(jié)點和端口的數(shù)據(jù)報將帶有錯誤標(biāo)識返回給用戶,這些都是在進(jìn)入“等待發(fā)送設(shè)定順序”前完成,并重新初始化發(fā)送和接收節(jié)點間的通信。
現(xiàn)在轉(zhuǎn)到圖9,在等待應(yīng)答狀態(tài)中識別以下事件以前設(shè)置的超時、來自于UDP模塊41的數(shù)據(jù)報含有在頭63的標(biāo)識域中設(shè)置的應(yīng)答位以及接收來自用戶進(jìn)程的其它的數(shù)據(jù)報。
首先考慮接收包含應(yīng)答標(biāo)志的數(shù)據(jù)報的情況,在第900步中,應(yīng)答順序編號以前保持的所有消息都被廢棄,因為最近接收的消息的應(yīng)答意味著以前傳送的消息瑞無需再保存。在第905步中,以前設(shè)置的計時器被復(fù)位,用于確定特定節(jié)點的地址列表中失敗的地址重試計數(shù)器也被復(fù)位。
在第910步中作續(xù)后的數(shù)據(jù)是否位于發(fā)送隊列的判斷,如果不是,則在915步中,檢查是否所有前面?zhèn)魉瓦^的數(shù)據(jù)報都被應(yīng)答過,如果所有以前接收的數(shù)據(jù)報都已被應(yīng)答過且以后再沒有數(shù)據(jù)報要發(fā)送,則RDP模塊50進(jìn)入空閑狀態(tài)等待來自用戶或來自接收端的其它動作。
如果在910步中檢測出在發(fā)送隊列中有續(xù)后的數(shù)據(jù)報,則在第920步中判斷下一個要發(fā)送的數(shù)據(jù)報是否落在先前設(shè)置的窗口(N)中。如果它在允許的未完成應(yīng)答的數(shù)目之內(nèi),則在此時生成消息頭,接下來在第930步最近的消息被傳送給UDP模塊41以進(jìn)一步傳送到網(wǎng)絡(luò)上。此時系統(tǒng)可能檢查是否還有數(shù)據(jù)報要發(fā)送。
在第935步中從一個用戶進(jìn)程接收到一個新的數(shù)據(jù)報后,這個接收的消息被加入到存放的待發(fā)送的消息的隊列中。接下來參見上面描述的第920步中后續(xù)需要傳送的數(shù)據(jù)報。
如果在等待接收方的應(yīng)答時發(fā)生了超時重新傳送,則已被存儲的最早的數(shù)據(jù)報,也就是最早接收的但未被應(yīng)答的數(shù)據(jù)報在第940步中被恢復(fù),并且用來發(fā)送數(shù)據(jù)報的地址列表中的目的節(jié)點地址被標(biāo)注為失效-如果這個指定地址對應(yīng)的重發(fā)數(shù)據(jù)報的次數(shù)超過的話(圖中未顯示此步)。在第945步中,如對應(yīng)于指定數(shù)據(jù)報的數(shù)據(jù)傳送重成計數(shù)器超過設(shè)定值,則所請求的目的節(jié)點的地址列表中幾個或所有地址將依次試驗,這個目的可以被假定認(rèn)為失效。這導(dǎo)致返回給用戶進(jìn)程一個出錯信息(帶有所有后續(xù)的未發(fā)送的數(shù)據(jù)包)。假定重試計數(shù)器沒有超過設(shè)定值,則重試計數(shù)器在950步中被修訂,在第955步中,做進(jìn)一步的嘗試以向地址列表中的不同地址發(fā)送最早的數(shù)據(jù)報。
對空閑狀態(tài)進(jìn)一步詳細(xì)的描述對于本發(fā)明的實現(xiàn)來說不是必需的,除了注意從用戶進(jìn)程接收一個有效的數(shù)據(jù)報后RDP模塊50將返回到935步以發(fā)送這個數(shù)據(jù)報(如上所述)。
關(guān)于等待設(shè)定順序應(yīng)答狀態(tài)100,當(dāng)如圖8中805-860步中所示出的那樣接收到設(shè)定順序應(yīng)答后,系統(tǒng)將進(jìn)入等待應(yīng)答狀態(tài)90?;蛘?,例如如果一個否定應(yīng)答如圖8的第840步中確定或通過發(fā)生在圖7中740-745步中所設(shè)置的方式下的超時而被發(fā)送,則設(shè)定順序應(yīng)答系統(tǒng)將導(dǎo)致系統(tǒng)復(fù)位以再從等待發(fā)送設(shè)定順序狀態(tài)開始。
現(xiàn)在參見圖6,圖3中的RDP模塊50的接收單元一方初始時處于等待設(shè)定順序狀態(tài)200。另外再參見圖10,當(dāng)從UDP模塊41接收到一個FL域的“S”位被設(shè)定的數(shù)據(jù)報后,將導(dǎo)致此模塊從此狀態(tài)轉(zhuǎn)移到檢查接收到的數(shù)據(jù)報狀態(tài)。
在210步,保存在RDP頭63中的順序編號被存儲起來,對頭做進(jìn)一步檢查,以確認(rèn)圖2中的傳送節(jié)點10是否有能力處理多于一個的未完成應(yīng)答。這樣,在第215步如果多個未完成的數(shù)據(jù)報是允許的,則在在第220步中接收節(jié)點12所能處理的最大數(shù)目的未完成消息從存儲器中被恢復(fù)。在第225步中,這個值被傳給RDP數(shù)據(jù)報的消息部分,應(yīng)答位被清除,頭63標(biāo)志域FL的設(shè)置位被置位且順序編號被消除來向傳送節(jié)點表明這是一個設(shè)置窗口請求消息。在第230步中,這個值被傳給RDP數(shù)據(jù)報的消息部分,應(yīng)答位被清除,頭63標(biāo)志域FL的設(shè)置位被置位且順序編號被清除來向傳送節(jié)點表明這是一個設(shè)置窗口請示消息。在第230步中,這個數(shù)據(jù)報被傳送給UDP模塊41以將其傳送到Internet網(wǎng)上。
在第235步中定時器被啟動,這個定時器被設(shè)置成應(yīng)答窗口的尺寸乘以發(fā)送節(jié)點10和接收節(jié)點12之間最壞往返時間所得的積。接下來,模塊50進(jìn)入等待設(shè)定窗口應(yīng)答狀態(tài)300。
現(xiàn)在在第215步中,如果確定傳送節(jié)點10沒有能力處理滑動窗口協(xié)議,則在第240步中接收窗口被置位以確保未完成的沒有確認(rèn)的數(shù)據(jù)報是不允許的,同時應(yīng)答窗口被置位以確保所有數(shù)據(jù)報在接收到順序號后被應(yīng)答。
現(xiàn)在在第250步中,已建立一個數(shù)據(jù)報,其應(yīng)答位被置位但設(shè)置窗口應(yīng)答不被請求。這樣返回的數(shù)據(jù)報包括存儲且接收的順序編號,A位置位,“S”位清零,接下來在第255步這個數(shù)據(jù)報被傳送給用戶數(shù)據(jù)報協(xié)議模塊41,RDP模塊50的接收端進(jìn)入空閑狀態(tài)以接收后面的數(shù)據(jù)報。
最后參考圖10,在等待設(shè)定順序200的動作中,如果接收到一個無效的數(shù)據(jù)報,在第260步中返回一個包含否定應(yīng)答的錯誤消息,以及“N”位和接收的順序編號在第265步通過用戶數(shù)據(jù)報協(xié)議返回。這種情況中RDP模塊50保持在初始狀態(tài),也就是說處于等待設(shè)置順序中狀態(tài)200。
再參考圖6,在處于等待設(shè)置窗口應(yīng)答狀態(tài)300時,圖3中的RDP模塊50等待前面在第230步傳送的窗口尺寸設(shè)置消息的應(yīng)答。如果從此模塊接收的應(yīng)答數(shù)據(jù)報中含有與該數(shù)據(jù)報中存有的N值不同的N值且“S”位已經(jīng)置位,則接收的窗口尺寸被調(diào)整到新的N值,同時在RDP模塊進(jìn)入空閑狀態(tài)等待接收從傳送節(jié)點發(fā)送的其它數(shù)據(jù)報之前,設(shè)定順序應(yīng)答被設(shè)置成如圖10中250和255步那樣的方式。
另外,如果在第235步設(shè)定的定時器超時,則RDP模塊可能返回到等待設(shè)定順序狀態(tài)200,或者再次接收到設(shè)定順序請示時,進(jìn)程從圖10中的210步開始重復(fù)執(zhí)行。
在空閑狀態(tài)400時,退出是通過來自網(wǎng)絡(luò)的數(shù)據(jù)報作出的。參考圖11,此使接收到數(shù)據(jù)報后的第一步是從頭63中獲取消息的順序編號,在第405步中,此順序編號從頭中剝離,并在第410步中進(jìn)行比較以確保它處在(n-s)和((n+s)-1)之間,此外n是已接收但尚未被應(yīng)答的最小的順序編號,S是發(fā)送模塊在尚未接收到應(yīng)答消息時可以發(fā)送的數(shù)據(jù)報的數(shù)目。這是第410步,如果此消息的順序編號超出范圍則該數(shù)據(jù)報就被廢棄,同時模塊50保持在空閑狀態(tài)。假設(shè)此順序編號在規(guī)定的范圍之內(nèi),則在第415步要檢查是否這是一個重復(fù)的數(shù)據(jù)報。這樣,如果接收到的消息順序編號與以前接收到的消息的順序編號相同,則表明與此數(shù)據(jù)報相關(guān)的應(yīng)答消息尚未被發(fā)送節(jié)點10接收到,則在第415步中要重發(fā)送此應(yīng)答消息。
如果在第415步中認(rèn)定這不是一個重復(fù)消息,則在第430步中要進(jìn)行檢查以確保只有按順序編號的消息才傳送到目的隊列。這樣,如果象第430步描述的那樣所有以前編號的消息已被接收并傳到了端口隊列,且在第435步中確定指定端口的隊列中還有空閑空間存放此消息,則在第440步中這條消息被傳送然后進(jìn)入等待發(fā)送應(yīng)答狀態(tài)。
但是,如果一個數(shù)據(jù)報丟失的話,也就是說順序編號中出現(xiàn)了空缺,則在第450步中將這個接收到的數(shù)據(jù)報暫時存放起來然后進(jìn)入等待丟失消息的狀態(tài)。相同地,如果在第435步中端口隊列充滿的話,即表明目的進(jìn)程不能充分迅速地處理這些消息,則在第460步中將這些消息暫時存儲起來。在第465步中設(shè)置重新發(fā)送次數(shù)計數(shù)器,然后系統(tǒng)進(jìn)入等待重新傳送狀態(tài)-如果端口隊列有空間的話。
現(xiàn)在參考圖12,如果在等待發(fā)送應(yīng)答消息的狀態(tài)時,從UDP模塊41中又接收到一個數(shù)據(jù)報,則圖11的消息處理進(jìn)程繼續(xù)。從消息處理進(jìn)程返回后,在第510步中RDP模塊50判斷是否最大數(shù)目的可允許接收但不應(yīng)答的數(shù)據(jù)報已被接收。如果這步中,接收到但沒有應(yīng)答的順序接收的數(shù)據(jù)報沒有達(dá)到最大數(shù)目時,則此模塊在等待回送應(yīng)答消息狀態(tài)保持不動。但如果已接收但尚未被應(yīng)答的數(shù)據(jù)報的數(shù)目超過了第510步所設(shè)定的值,或者在靜止?fàn)顟B(tài)中第一個接收但尚未被應(yīng)答的消息的定時超過時,則在第515步中將向發(fā)送節(jié)點傳送一個應(yīng)答消息,接下來在第520和525步中將分別調(diào)整接收窗口和應(yīng)答窗口的值。
此處很容易注意到,發(fā)送與接收節(jié)點間的數(shù)據(jù)報流的控制處在對三個窗口限制的控制之下,即在發(fā)送狀態(tài)機上的發(fā)送窗口和接收狀態(tài)機上的接收和應(yīng)答窗口。發(fā)送狀態(tài)機上的發(fā)送窗口限制未送完的接收和應(yīng)答窗口。發(fā)送狀態(tài)機上的發(fā)送窗口限制未發(fā)送完的數(shù)據(jù)報的數(shù)目,即那些已經(jīng)發(fā)送的但尚未被應(yīng)答的數(shù)據(jù)報。當(dāng)數(shù)據(jù)報被應(yīng)答后,它們將從發(fā)送隊列中刪除,發(fā)送窗口也隨著順序編號相應(yīng)調(diào)整以接收后面要傳送的數(shù)據(jù)報。注意,發(fā)送窗口不能比接收窗口大。
接收窗口限制可以接收并存儲的數(shù)據(jù)報的數(shù)目,即可以被RDP模塊50組裝的數(shù)據(jù)報的數(shù)目,因此限制了在丟失的數(shù)據(jù)報后可以被接收的數(shù)據(jù)報的數(shù)目。應(yīng)答窗口限制可以按順序接收并在發(fā)送應(yīng)答前存儲在接收隊列中的數(shù)據(jù)報的數(shù)目。
翻到圖13,在等待重發(fā)處狀態(tài)600,如果應(yīng)答消息定時器超時或如605步中指出的那樣消息中包含的順序編號在以前接收的消息中已經(jīng)存在,則系統(tǒng)向發(fā)送節(jié)點發(fā)一個特殊的標(biāo)識消息,以此來指示不必象接收進(jìn)程31-3p沒有處理以前排隊的數(shù)據(jù)報那樣重新傳送內(nèi)含掛起的應(yīng)答或否定應(yīng)答信息的數(shù)據(jù)報,但在第605步如果接收到一個有效的數(shù)據(jù)報,則將其添加在暫存區(qū)中等待發(fā)送。
如果重發(fā)送定時器發(fā)生超時,則進(jìn)入第三種狀態(tài),在這種情況下,在第620步檢查進(jìn)程隊列,如果未滿,則在第625步中重新試圖向用戶進(jìn)程隊列發(fā)送最早的未完成的數(shù)據(jù)報。在第630步中發(fā)送完最早的數(shù)據(jù)報后要檢查一下是否還有后續(xù)的數(shù)據(jù)報等待傳送,如果沒有,并且所有以前接收的數(shù)據(jù)報都已被應(yīng)答,則RDP模塊50進(jìn)入空閑狀態(tài)。
如果在第630步中判定有后續(xù)的數(shù)據(jù)報等待傳送,則在由620、625和630步構(gòu)成的循環(huán)中將試圖發(fā)送這些數(shù)據(jù)報。
如果在第620步中判定隊列已滿且重試計數(shù)器尚未到達(dá)最大值,則重發(fā)超時在645步重新啟動。
如果通過查詢重發(fā)計數(shù)器判定向此隊列的重發(fā)次數(shù)表示用戶進(jìn)程已經(jīng)失效,在第650步中發(fā)達(dá)一個否定應(yīng)答,并且系統(tǒng)等待發(fā)送的此否定應(yīng)答的應(yīng)答。
從最近接收的數(shù)據(jù)報識別為未按正確的順序的狀態(tài)進(jìn)入到等待丟失的數(shù)據(jù)報的狀態(tài)。此狀態(tài)后面接著圖11中開始的一系列執(zhí)行步驟直到所有已接收的數(shù)據(jù)報都處于一個正確的順序為止。
為避免疑問,注意在任何時候設(shè)定順序請示被接收,任何未完成的接收數(shù)據(jù)報都被忽略且發(fā)送節(jié)點與接收節(jié)點間的通信要重新被初始化。也要注意一旦兩個節(jié)點間通信建立起來以后,除非網(wǎng)絡(luò)完全失效,一個重復(fù)設(shè)定順序請示信號是不可能被發(fā)送的。
權(quán)利要求
1.一種由多臺主機構(gòu)成的且每臺主機都可以從多個網(wǎng)絡(luò)地址被訪問的多處理器環(huán)境中運行的進(jìn)程間的數(shù)據(jù)包傳送方法,這個方法包括為每個被尋址的進(jìn)程建立一個目的主機標(biāo)識號和一個目的主機端口號;為每個目的主機標(biāo)識號建立一個包含多個相應(yīng)網(wǎng)絡(luò)節(jié)點地址的地址列表;為兩個節(jié)點間傳輸?shù)拿恳粋€數(shù)據(jù)包循環(huán)地從目的主機相對應(yīng)的地址列表中選擇下一個網(wǎng)絡(luò)節(jié)點直到最后一個地址;為數(shù)據(jù)包加一個頭來定義選擇的網(wǎng)絡(luò)地址和目的端口號;監(jiān)測數(shù)據(jù)包應(yīng)答的返回數(shù)據(jù)和向地址列表中下一個網(wǎng)絡(luò)節(jié)點地址重新傳送任何未被應(yīng)答的數(shù)據(jù)包。
2.如權(quán)利要求1的傳送數(shù)據(jù)包的方法,其特征在于進(jìn)程間傳送的每個消息頭都包括一個消息順序編號,它由傳送節(jié)點進(jìn)行增加,使接收節(jié)點可以識別消息列中缺少的一條或多條消息。
3.如權(quán)利要求2中的傳送數(shù)據(jù)包的方法,其特征在于傳送節(jié)點對來自于接收節(jié)點的應(yīng)答消息的順序編號進(jìn)行增加。
4.如權(quán)利要求2或權(quán)利要求3的傳送數(shù)據(jù)包的方法,其特征在于接收節(jié)點保持最后接收到的順序編號的記錄并且收到包含正確順序編號的數(shù)據(jù)包,即返回給傳送節(jié)點應(yīng)答消息并增加其順序編號。
5.如權(quán)利要求4的傳送數(shù)據(jù)包的方法,其特征在于在檢測到非正確的順序編號比正確的順序編號小1時,接收節(jié)點返回給傳送節(jié)點一個應(yīng)答消息。
6.如權(quán)利要求4或5的傳送數(shù)據(jù)包的方法,其特征在于在正確接收的順序編號缺少時,接收節(jié)點將返回一個帶有接收順序編號的消息,同時附帶一個表明接收了一個不附合順序的數(shù)據(jù)包的標(biāo)志位。
7.如權(quán)利要求1到6中任一項的傳送數(shù)據(jù)包的方法,其特征在于頭包含一個段號,它表示這個傳送的數(shù)據(jù)包僅是待在發(fā)送進(jìn)程與接收進(jìn)程間傳送的整個數(shù)據(jù)包的一部分,而且接收節(jié)點要將傳送給該接收進(jìn)程的若干個傳送數(shù)據(jù)包的整個數(shù)據(jù)包的各段重新組裝。
8.如上述權(quán)利要求中任一項的傳送數(shù)據(jù)包的方法,其特征在于相應(yīng)地址列表中的任何網(wǎng)絡(luò)地址,超過事先定義的數(shù)據(jù)包失效次數(shù)后,將從地址到表中刪除。
9.如權(quán)利要求8的傳送數(shù)據(jù)包的方法,其特征在于以周期性的間隔時間多次試圖建議連接以刪除網(wǎng)絡(luò)節(jié)點地址。
10.如權(quán)利要求2到6中任一項的傳送數(shù)據(jù)包的方法,其特征在于從消息列中識別出一個缺少的消息后,接收節(jié)點保持來自于傳送節(jié)點的應(yīng)答消息。
11.如權(quán)利要求10的傳送數(shù)據(jù)包的方法,其特征在于在一個預(yù)先定義的時間段內(nèi)缺少應(yīng)答消息時,傳送節(jié)點將重發(fā)那些以前已被發(fā)送但尚未被應(yīng)答的消息。
12.如權(quán)利要求2或3的傳送數(shù)據(jù)包的方法,其特征在于接收節(jié)點從發(fā)送節(jié)點接收多個數(shù)據(jù)包并且在接收到預(yù)先定義好數(shù)目的數(shù)據(jù)包或預(yù)先定義的時間段超時(不論哪一個先發(fā)生)發(fā)送一個應(yīng)答。
13.如權(quán)利要求12的傳送數(shù)據(jù)包的方法,其特征在于接收到一個包含特定消息順序編號的應(yīng)答消息后,傳送節(jié)點確定所有以前編號的數(shù)據(jù)包都已被接收。
14.如權(quán)利要求13的傳送數(shù)據(jù)包的方法,其特征在于接收一個超出順序消息編號的數(shù)據(jù)包時,接收節(jié)點將此數(shù)據(jù)包存儲起來直到在發(fā)送此數(shù)據(jù)包應(yīng)答前所有以前編好號的數(shù)據(jù)都已被接收。
15.如權(quán)利要求14的傳送數(shù)據(jù)包的方法,其特征在于如果最后接收到的數(shù)據(jù)包的接收節(jié)點消息順序編號超過還未在預(yù)先定義的次數(shù)內(nèi)接收的最低消息順序編號時,接收節(jié)點傳送帶有最大消息順序編號的最后接收的數(shù)據(jù)包的應(yīng)答消息。
全文摘要
在一個多處理器環(huán)境中(圖2),由若干個網(wǎng)絡(luò)(10,21,22)連接起來的眾多節(jié)點中(10、11、12),每一個都運行著若干個用戶進(jìn)程(31、32等,圖3),各進(jìn)程之間傳送的消息是經(jīng)由用于待發(fā)送的每個數(shù)據(jù)報的不同的網(wǎng)絡(luò)從發(fā)送節(jié)點向接收節(jié)點順序發(fā)送的。
文檔編號H04L29/08GK1169224SQ9519671
公開日1997年12月31日 申請日期1995年12月8日 優(yōu)先權(quán)日1994年12月9日
發(fā)明者理查德·約翰·巴克, 安德魯·邁克爾·勒金, 詹姆斯·克里斯托弗·泰德·查普曼 申請人:英國電訊有限公司