Plan 9
取消
显示结果 
搜索替代 
您的意思是: 

分享我的技巧 : Bell实验室的Plan 9-IL协议

mybabys
本科生

分享我的技巧 : Bell实验室的Plan 9-IL协议

IL协议

Dave Presotto

Phil Winterbottom





presotto,philw@plan9.bell-labs.com



摘要

为了传输 Plan 9 文件系统9P协议的远程过程调用消息,我们要实现一个新的网络协议,叫做IL。它是面向连接的,用IP封装的,携带自带寻址地址的数据包(datagrams)的轻量级传输协议。IL提供丢失消息的重新传输,而且支持无序(in-sequence)传输, 但是IL没有流量控制同时不会盲目的重新传输。



介绍

Plan 9 使用一个文件系统协议,被叫做的 9P ,采用了无序的、可靠的、带界限的消息传输以支持远程过程调用(RPC)请求和响应。 没有一种标准的IP协议合适在一个以太网或英特网上的传输 9P 消息。TCP代价太高同时不保证界限。UDP在廉价和保证界限的时候,却不提供可靠的顺序传输。当我们在我们的系统中实现IP,TCP,和UDP的时候,我们试着选择一种协议来传输9P。我们需要的特性是:







*可靠的携带自带寻址地址的数据包(datagrams)服务



*无序传输



*在网络中使用 IP



*低的复杂度, 高的性能



*适当的超时值







没有一种标准协议符合我们的需要,因此我们设计了一种新的协议, 叫做IL(Internet Link).



IL是一种用IP封装的轻量级协议。它是面向连接的并且提供可靠的顺序的消息传输。协议在设计的时候,对于客户和服务器之间传输 RPC 消息,没有提供流量控制,而是采用固有的流量限制的结构。 只用一个小的窗口存储突出的消息(outstanding messages)避免了太多被接纳(incoming)的消息(因为不能被处理而)被缓冲;在窗口外面的消息被丢弃而且一定被重新传输。连接设置(Connection setup)使用一个双向的握手(协议),在每次(握手)连接结束时产生初始的序列号;后来的数据消息增加这个序列号以允许(消息)接收方重新排序已经乱序的消息。与其他的协议相比,IL 避免盲目的重新传输。这对拥挤的网络中的性能有所帮助。在那里,盲目的重新传输可以引起进一步的拥塞。就象TCP,IL有适合的超时值,因此这个协议不论在英特网还是在局域网都运行得很好。一个来回旅程(round-trip)定时器用来计算回复确认和重新传输的时间以匹配网络速度。



连接

一个 IL 连接是在二个终点之间的数据流。 当保持连接的时候,一边的数据以相同的顺序被发送到另一边。 一个连接的功能用图 1 中的状态机器描述, 图中展现状态(圆周)和在他们之间的传输(弧)。每个传输被用一系列可以引起传输的事件标记,消息的发送或接收就在这样被一个水平线分开的传输上(运行)。这论文的其余部分是这个状态机器的讨论。



















ackok 在 id0 和下一次包含之间的任意序列号



!x 除了 x 以外的任意数值



- 任意的数值











图 1- IL 传输状态



IL 状态机器有五个状态: 已关闭(Closed),发起同步(Syncer), 接收同步(Syncee), 已确定(Established), 和关闭中(Closing)。 在每一端,连接用 IP 地址和端口值(port number)识别。IP 协议表头装载着地址,而端口是 18 个字节的 IL 表头的部份。本地变量可识别的连接状态是:



state 任意一种状态



laddr 32位的本地 IP 地址



lport 16位的本地 IL 端口



raddr 32位的远程 IP 地址



rport 16位的远程 IL 端口



id0 本地方开始的32位序列号



rid0 远程方开始的32位序列号



next 本地方发送的下一个消息的序列号



rcvd 从远程方收到的最後一个无序消息



unacked 第一个未应答消息的序列号



不用的连接放在Closed状态中,有着未指派的地址或端口。二种情况开启一个连接: 消息接收方的地址和端口在已开启的连接中没有匹配,或一个用户正在明确地打开一个连接。在第一情况中,消息的源地址和端口中变成连接的远程地址和端口,而且消息的目标地址和端口变成本地的地址和端口。连接状态被设定成Syncee,而且消息被处理。在第二个情况中,用户指定本地的和远程的地址和端口。连接的状态被设定成Syncer,而且一个sync消息被发送到远程一边。IP实现时本地的地