分享
 
 
 

RFC协议注解

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

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><mysocket><yoursocket>

或<RFC><mysocket><yoursocket><link>

<RFC>是X'01'

<mysocket>是一个32位的套接字端口号码,属于发送方

<yoursocket>是一个32位套接字端口号码,属于接收方

<link>是一个8位的链接号码

<mysocket>和<yoursocket>必须是发送/接收成对出现。

<link>被包括进来,当且仅当<mysocket>是一个接收方套接字端口。

用途: 此命令用来初始化一个连接。当两个主机已经用同样(颠倒)的方式交换了

RFC命令时,连接被确定。链路由接收方分配。

关闭

格式:<CLS><mysocket><yoursocket>

<CLS>是X'02'

<mysocket>和<yoursocket>对<RFC>而言是相同的

用途: 此命令用来阻断一个连接。它还被用来中止一条连接的确立或用来拒绝一个请

求。这种情况发生在当被点名的两个套接字端口之间没有确立连接或是正在处

于被连接的进程中的时候。此时,<CLS>应该被丢弃。

恢复

格式: <RSM><link>

<RSM>是X'03'

用途: 此命令由一个接收方主机发送以引起发送主机在已经指出名字的链路上恢复

传输。当一个发送主机接收到一条非凡的代表某种消息的RFNM时,它会延缓发

送。(非凡的RFNM是由接收方的IMP基于其主机的要求下生成的。)

暂停

格式:<SPD><link>

<SPD>是X'04'

用途: 此命令由发送方主机发出,以确认它已经停止通过该指定链路发送。假如一个

<RSM>命令被接收到,传输将恢复。

最终终端

格式:<FND><mysocket><yoursocket><asker>

<FND>是X'05'

<mysocket>是一个32位的套接字端口号码,属于发送方

<yoursocket>是一个32位的套接字端口号码,属于接收方

<mysocket>和<yoursocket>组成一个发送/接收对。

在它们之间要确定一条连接。

<asker>是一个40位的与<mysocket>类型相同的套接字端口号码。

用途: 假如一个进程决定用将它的一个接收端口和一个发送端口连接起来的方法使

自身短路,NCP发送出两个<FND>命令──每个方向一个。每个都拥有针对<my

socket>初始化的<asker>。

一旦接收到一个<FND>命令,NCP就检查它的<yoursocket>。假如<yoursocket>

已经被一个再连接所占用,该命令就被传递到一个新的<mysocket>和<your

socket>。但是,在它被传递前,<asker>要与新的<mysocket>进行比较。如

果它们相等,就发现了一个循环,两个端口都将被关闭。

假如<yoursocket>未被一个再连接占用,它就被标记为一个再连接链的端点,

而一个<END>会被发送回来。

假如被指名的连接没在进行,一个<CLS>将被发送回来而<FND>会被丢弃。

终点找到

格式: <END><link><endsocket>

<END>是X'06'

<link>是个8位的链路号码

<endsocket>是一个40位的端口号码

用途: 此命令指明哪个端口是再连接链路的终点。它在<endsocket>生成,并通过所

有的中间端口被回送到另一个终端端口。假如<endsocket>是一个发送端口,

<link>指的就是发送方主机的发送端口和接收方主机的接收端口之间的一条

连接。假如<endsocket>是一个接收端口,<link>指的就是接收方主机的发送

端口和发送方主机的接收端口之间的一条链路。(“发送”和“接收”指的是

此控制命令的传输。)

完备

格式: <RDY><link>

<RDY>是X'07'

<link>是一个8位的链路号码

用途: 此命令被从一个发送端口发送到一个接收端口,以指明所有的消息都已经被传

送到,“再连接”可能发生。

指派新链路

格式: <ASG><mysocket><yoursocket><link>

<ASG>是X'08'

用途: 此命令完善一个“再连接”。当接收端口已经收到一个<RDY>后它就被从一个

接收端口发送到一个发送端口。一个新的连接被指派并且传输开始。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有