CIP 传输协议


CIP 传输协议 摘要
本文主要说明用于传输CIP请求/响应,索引对象,实现它们在TCP,邮件和HTTP上传输的三个协议 。相关的资料请在其它资料中查询 。
1. 协议
本节说明用于传输CIP索引对象和维护网结构 。本文主要定义定义消息格式,传输机制 。CIP协议的设计思想是一种块设计思想 。它不依靠于许多于协议定义工具,或文本编码方式,而是利用现有的协议技术进行设计 。这样可以使设计和实现简化 。这也是利用现有的Internet技术实现应用层服务的方法 。
2 MIME消息交换机制
CIP的消息交互是通过交换MIME消息进行的 。消息在双向可靠传输的基础上进行 。本文利用TCP,HTTP和邮件传输进行消息传输 。CIP服务器开始连接,它称为发送CIP,而响应发送CIP的服务器称为接收CIP 。
2.1 流传输
CIP在双向TCP连接上通过简单文本协议传输,它的操作可以在任何TCP端口上进行,因此配置信息也包括了主机名和端口号 。发送CIP的动作由接收CIP的响应码加以确定 。这些码的格式见下文 。为了进行向后兼容Whois服务器,CIPv3发送CIP必须首先确定支持新协议 。通过发送下面非法的Whois系统命令完成上述功能:"# CIP-Version: 3" 。在现在的Whois服务器上,假如实现了CIP版本1或2,就会导致500系列的响应,服务器中断连接,假如服务器实现了CIPv3,它会响应300 。这个300中的3代表版本3,以后的版本也可以利用这种方法 。下面是一个交换的例子:
注重:假如发送CIP能够确定服务器实现了CIPv3,它可以发送"# CIP-Version: 3"串,然后跟一个CIPv3请求,这个优化在已知的同构CIP网结构中是有用的,这样可以避免等待 。
一旦发送CIP确定服务器支持CIPv3请求,它可以以MIME格式发送请求,每个请求以""结束 。
Cip-Req = Req-Hdrs CRLF Req-Body
Req-Hdrs = *( Version-HdrReq-Cntnt-Hdr )
Req-Body = Body ; format of request body as in [CIP-MIME]
Body = Data CRLF "." CRLF
Data = https://www.rkxy.com.cn/dnjc/; data with CRLF"." CRLF replaced by CRLF ".." CRLF
Version-Hdr = "Mime-Version:" "1.0" CRLF
Req-Cntnt-Hdr = "Content-Type:" Req-Content CRLF
Req-Content = ; format is specified in [CIP-MIME]
Cip-Rsp = Rsp-Code CRLF [ Rsp-Hdrs CRLF Rsp-Body ] [ Indx-Cntnt-Hdr CRLF Index-Body ]
Rsp-Code = DIGIT DIGIT DIGIT Comment
Comment = ; any chars except CR and LF
Rsp-Hdrs = *( Version-HdrRsp-Cntnt-Hdr )
Rsp-Cntnt-Hdr = "Content-Type:" Rsp-Content CRLF
Rsp-Content = ; format is specified in [CIP-MIME]
Rsp-Body = Body ; format of response body as in [CIP-MIME]
Indx-Cntnt-Hdr = "Content-Type:" Indx-Obj-Type CRLF
Indx-Obj-Type = ; any registered index object"s MIME-type the format is specified in [RFC2045]
Index-Body = Body ; format defined in each index specifications
CRLF = CR LF ; Internet standard newline
CR = %x0D ; carriage return
LF = %x0A ; linefeed
DIGIT = %x30-39
消息以SMTP形式结束,数据以字节传输,除了看到1*["."],这种情况下要加一个句号 。在数据传输结束时以"."表示 。接收方要将结束标记略过 。接收方的响应分为200,400和500系列 。响应也以SMTP形式的消息界定 。在返回响应后,接收CIP必须预备接收下一个请求,将状态返回到发送CIP刚刚确定版本时的状态 。假如发送CIP不再发请求,则可以关闭连接 。作为响应,接收CIP必须广放弃读入消息,并预备新的发送CIP连接 。下面是一个例子,这里的行结束显式给出 。中间的空间只为可读性而设置,注释在大括号内 。
{ 发送CIP连接到接收CIP }
<<< % 220 Example CIP server ready
>>> # CIP-Version: 3
<<< % 300 CIPv3 OK!
>>> Mime-Version: 1.0
>>> Content-type: application/index.cmd.datachanged; type=

推荐阅读