?? rfc36.txt
字號:
組織:中國互動出版網(http://www.china-pub.com/)
RFC文檔中文翻譯計劃(http://www.china-pub.com/compters/emook/aboutemook.htm)
E-mail:ouyang@china-pub.com
譯者:王翌(mcsewang mcsewang@21cn.com)
譯文發布時間:2001-6-10
版權:本中文翻譯文檔版權歸中國互動出版網所有。可以用于非商業用途自由轉載,但必須
保留本文檔的翻譯及版權信息。
Network Working Group S.
Crocker
Request for Comments: 36 16 March 1970
協議注解
(RFC36 Protocol Notes)
I. 總的看法
---------------------------
網絡協議提供了三方面的便利性:
1. 連接的建立
2. 流控制
3. 再連接
“再連接”被從“連接建立”中分離出來,一方面是由于它的復雜性,另一方面是由于
我還沒有怎么接觸過一個完整的體現此概念的協議。
連接的建立
------------------------
連接建立的運作基本上與NWG/RFC#33中的一樣。最主要的變化就是提供了獨立于設施
的更加完善的交換方式,使得不包括交換過程的設施顯得更加簡單。
下面是連接建立的大概情況:
1. 主機A中的進程PA搶占套接口SA,并請求與套接口SB建立連接。進程PA通過一
個系統呼叫來完成此工作。
2. 與此同時,主機B中的進程PB搶占套接口SB,并請求與套接口SA建立連接
3. 在對進程PA的請求的回應中,主機A中的網絡協議程序(簡記為NCPA),發送一
個“請求--連接(RFC)”命令給主機B。B主機中的NCPB發送一個類似的命令給主
機A。沒有默認的順序,NCPB可以在從NCPA接收命令之前或之后向NCPA發送命令。
4. NCPA和NCPB都知道連接是在它們都收到了一個RFC命令而且都接收到了其發送出
的RFNM之后才確立的。然后它們分別通告進程PA和PB,連接已經確立。一個必
須堅持的原則就是或者是由SA作發送方接口,SB作接收方接口,或者是相反的情
況。這種狀況有時被稱為“SA和SB必須組成‘發送/接收’對”
5. 發送進程可以馬上進行。
流控制
------------------------
為了阻止發送進程導致接收進程的溢出,接收方進程能夠停止數據流就顯得很有必要了(*)。
流控制被集成到網絡RFNM處理中。當一個接收方主機希望限制一條單獨線路上的流傳輸時,
該主機發送一條專用消息給它的IMP,使那條鏈路上的下一個RFNM被修正。發送方主機將該
消息解釋為一條RFNM,當作是要求停止發送的請求。一條強制控制命令被返回。
當接收方主機準備好再次接收時,它發送一條命令(RSM)告訴發送方主機再次發送。
---------------------------------------------------
(*)BB&N堅持認為應該提供無限的緩沖機制。這當然可能成為一項適當的策略:但這與我
的思維方式完全相左,而且我對協議的設計是基于這樣的假設:在每個連接的接收端只提供
了一個很小的緩沖器。
再連接
-------------------------------
由于很多理由,需要能夠將一個(或兩個)連接的終端從一個端口轉換到另一個端口。這是
否易于實施,取決于在轉換進程上施加的種種限制。為最大的滿足一般性,我在此提出“動
態再連接”的方案,那意味著再連接過程即使是在流傳輸開始之后也能夠發生。在大多數情
況下,這種方案的成本比它實際需要的要高很多,要求有下面的優點:
1. 提供交換連接的所有不同窗體。
2. 再連接過程不引入通過一個連接發送的消息進程的額外開銷,也就是說,全部的開銷就
在實施協議過程中。
II.數據結構
--------------------------
1. 連接表
2. 進程表
3. 輸入鏈路表
4. 輸出鏈路表
5. 鏈路分配表
連接表
------------------
此表保存了屬于本地端口(SOCKET)的所有信息,無論它是否被某個連接占用,占用它的連
接正處于何種狀態。入口條目由本地端口鍵入,但其它表也有指向本表的指針。(參見進程
表,輸入鏈路表和輸出鏈路表。)
每個條目都包括以下信息:
a) 本地端口(鍵)
b) 外來端口
c) 鏈接
d) 連接狀態
e) 流狀態和緩沖控制
f) 指向用戶進程的指針
g) 再連接控制狀態
h) 等待呼叫隊列
本地端口是一個32位的數。如果某個特定端口的條目不存在,它會被生成為空值。
外來端口是一個40位的數。如果沒有連接被建立,這個字段將不會被賦值。
鏈接是一個8位的數,是數據從發送方發送到接收方所經過的鏈接。一個套接口當且盡當它
的低位為0時,它才是接收端口。
連接狀態指的是一條鏈接是否開放等等。下面是可能出現的情況:
a) 本地進程已經請求了一條鏈接
b) 異地進程已經請求了一條鏈接
c) 連接確立
d) 再連接進行中
e) 關閉等待
f) 再連接等待
流狀態和緩沖控制指的是核實RFNM的發送及認可終止,掛起和恢復命令,和保持對數據的
流入流出的跟蹤。
一個指向用戶進程的指針當該進程已經請求了一條連接時是必需的。
如果再連接正在進行,保持對事件順序的跟蹤就是必要的了。被再連接進程占用的端口或者
是一個端點或者是一個中間點。如果它是一個中間點,就有必要將其它的與其連在同一個進
程上的中間點的8位的名字都儲存起來,并記錄下END和RDY命令的接收。
最后,如果RFC(“請求---連接”命令)當端口被占用或沒有進程占用它時被接收到,RFC
將被按照“先進先出”的原則在命名的本地端口中壓入堆棧隊列。
進程表
----------------------
此表聯系起一個進程和一個套接字端口。它被用來進行系統調用。
輸入鏈路表
----------------------
此表將接收鏈路與本地套接字端口聯系起來。它用來判定引入的消息的去向。
輸出鏈路表
----------------------
此表將發送鏈路與本地套節字端口聯系起來。它用來解釋RFNM和RSM命令。
鏈路分配表
----------------------
鏈路是由接收方分配的。此表顯示哪些鏈路是空閑的。
III.控制命令
-----------------------
命 令 一 覽
0 <NOP>
1 <RFC> <me> <you> 或 <RFC> <me> <you> <link>
2 <CLS> <me> <you>
3 <RSM> <link>
4 <SPD> <link>
5 <FND> <me> <you> <asker>
6 <END> <link> <end>
7 <RDY> <link>
8 <ASG> <me> <you> <link>
命 令
無操作
格式: NOP
NOP 是 X '00'
用途: 此命令被包括進來是為了完整和方便。
請求連接
格式: <RFC> <my socket> <your socket>
或 <RFC> <my socket> <your socket> <link>
<RFC> 是 X'01'
<my socket>是一個32位的套接字端口號碼,屬于發送方
<your socket>是一個32位套接字端口號碼,屬于接收方
<link>是一個8位的鏈接號碼
<my socket>和<your socket>必須是發送/接收成對出現。
<link>被包括進來,當且僅當<my socket>是一個接收方套接字端口。
用途: 此命令用來初始化一個連接。 當兩個主機已經用同樣(顛倒)的方式交換了
RFC命令時,連接被確定。鏈路由接收方分配。
關閉
格式: <CLS> <my socket> <your socket>
<CLS> 是 X'02'
<my socket>和<your socket>對<RFC>而言是相同的
用途: 此命令用來阻斷一個連接。它還被用來中止一條連接的確立或用來拒絕一個請
求。這種情況發生在當被點名的兩個套接字端口之間沒有確立連接或是正在處
于被連接的進程中的時候。此時,<CLS>應該被丟棄。
恢復
格式: <RSM> <link>
<RSM> 是 X'03'
用途: 此命令由一個接收方主機發送以引起發送主機在已經指出名字的鏈路上恢復
傳輸。當一個發送主機接收到一條特殊的代表某種消息的RFNM時,它會延緩發
送。(特殊的RFNM是由接收方的IMP基于其主機的要求下生成的。)
暫停
格式: <SPD> <link>
<SPD> 是 X'04'
用途: 此命令由發送方主機發出,以確認它已經停止通過該指定鏈路發送。如果一個
<RSM>命令被接收到,傳輸將恢復。
最終終端
格式: <FND> <my socket> <your socket> <asker>
<FND> 是 X'05'
<my socket>是一個32位的套接字端口號碼,屬于發送方
<your socket>是一個32位的套接字端口號碼,屬于接收方
<my socket>和<your socket>組成一個發送/接收對。
在它們之間要確定一條連接。
<asker>是一個40位的與<my socket>類型相同的套接字端口號碼。
用途: 如果一個進程決定用將它的一個接收端口和一個發送端口連接起來的方法使
自身短路,NCP發送出兩個<FND>命令──每個方向一個。每個都擁有針對<my
socket>初始化的<asker>。
一旦接收到一個<FND>命令,NCP就檢查它的<your socket>。如果<your socket>
已經被一個再連接所占用,該命令就被傳遞到一個新的<my socket>和<your
socket>。但是,在它被傳遞前,<asker>要與新的<my socket>進行比較。如
果它們相等,就發現了一個循環,兩個端口都將被關閉。
如果<your socket>未被一個再連接占用,它就被標記為一個再連接鏈的端點,
而一個<END>會被發送回來。
如果被指名的連接沒在進行,一個<CLS>將被發送回來而<FND>會被丟棄。
終點找到
格式: <END> <link> <end socket>
<END> 是 X'06'
<link> 是個8位的鏈路號碼
<end socket> 是一個40位的端口號碼
用途: 此命令指明哪個端口是再連接鏈路的終點。它在<end socket>生成,并通過所
有的中間端口被回送到另一個終端端口。如果<end socket>是一個發送端口,
<link>指的就是發送方主機的發送端口和接收方主機的接收端口之間的一條
連接。如果<end socket>是一個接收端口,<link>指的就是接收方主機的發送
端口和發送方主機的接收端口之間的一條鏈路。(“發送”和“接收”指的是
此控制命令的傳輸。)
完備
格式: <RDY> <link>
<RDY> 是 X'07'
<link> 是一個8位的鏈路號碼
用途: 此命令被從一個發送端口發送到一個接收端口,以指明所有的消息都已經被傳
送到,“再連接”可能發生。
指派新鏈路
格式: <ASG> <my socket> <your socket> <link>
<ASG> 是 X'08'
用途: 此命令完善一個“再連接”。當接收端口已經收到一個<RDY>后它就被從一個
接收端口發送到一個發送端口。一個新的連接被指派并且傳輸開始。
[ This RFC was put into machine readable form for entry ]
[ into the online RFC archives by Marc Blanchett 3/00 ]
RFC36 Protocol Notes 協議注解
1
RFC文檔中文翻譯計劃
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -