摘要
本文主要说明用于传输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<cr><lf>"。在现在的Whois++服务器上,如果实现了CIP版本1或2,就会导致500系列的响应,服务器中断连接,如果服务器实现了CIPv3,它会响应300。这个300中的3代表版本3,以后的版本也可以利用这种方法。下面是一个交换的例子:
注意:如果发送CIP能够确定服务器实现了CIPv3,它可以发送"# CIP-Version: 3"串,然后跟一个CIPv3请求,这个优化在已知的同构CIP网结构中是有用的,这样可以避免等待。
一旦发送CIP确定服务器支持CIPv3请求,它可以以MIME格式发送请求,每个请求以"<cr><lf>"结束。
Cip-Req = Req-Hdrs CRLF Req-Body
Req-Hdrs = *( Version-Hdr | Req-Cntnt-Hdr )
Req-Body = Body ; format of request body as in [CIP-MIME]
Body = Data CRLF "." CRLF
Data = ; 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-Hdr | Rsp-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形式结束,数据以字节传输,除了看到<cr><lf>1*["."]<cr><lf>,这种情况下要加一个句号。在数据传输结束时以"<cr><lf>.<cr><lf>"表示。接收方要将结束标记略过。接收方的响应分为200,400和500系列。响应也以SMTP形式的消息界定。在返回响应后,接收CIP必须准备接收下一个请求,将状态返回到发送CIP刚刚确定版本时的状态。如果发送CIP不再发请求,则可以关闭连接。作为响应,接收CIP必须广放弃读入消息,并准备新的发送CIP连接。下面是一个例子,这里的行结束显式给出。中间的空间只为可读性而设置,注释在大括号内。
{ 发送CIP连接到接收CIP }
<<< % 220 Example CIP server ready<cr><lf>
>>> # CIP-Version: 3<cr><lf>
<<< % 300 CIPv3 OK!<cr><lf>
>>> Mime-Version: 1.0<cr><lf>
>>> Content-type: application/index.cmd.datachanged; type=
>>> x-tagged-index-1; dsi=1.2.752.17.5.10<cr><lf>
>>> <cr><lf>
>>> updatetype: incremental tagbased<cr><lf>
>>> thisupdate: 855938804<cr><lf>
>>> lastupdate: 855940000<cr><lf>
>>> .<cr><lf>
<<< % 200 Good MIME message received
>>> MIME-Version: 1.0<cr><lf>
>>> Content-Type: application/index.obj.tagged;
>>> dsi=1.2.752.17.5.10;
>>> base-uri="ldap://ldap.umu.se/dc=umu,dc=se"<cr><lf>
>>> <cr><lf>
>>> version: x-tagged-index-1<cr><lf>
>>> updatetype: incremental<cr><lf>
>>> lastupdate: 855940000<cr><lf>
>>> thisupdate: 855938804<cr><lf>
>>> BEGIN IO-schema<cr><lf>
>>> cn: TOKEN<cr><lf>
>>> sn: FULL<cr><lf>
>>> title: FULL<cr><lf>
>>> END IO-Schema<cr><lf>
>>> BEGIN Update Block<cr><lf>
>>> BEGIN Old<cr><lf>
>>> title: 3/testpilot<cr><lf>
>>> END Old<cr><lf>
>>> BEGIN New<cr><lf>
>>> title: 3/chiefpilot<cr><lf>
>>> END New<cr><lf>
>>> END Update Block<cr><lf>
>>> .<cr><lf>
<<< % 200 Good MIME message received
{ 发送CIP关闭写套接字 }
<<< % 222 Connection closing in response to sender-CIP shutdown
{ 接收CIP关闭,重新设置状态并等待新的发送CIP连接 }
如果版本不对,则会出现下面的情况:
{ 发送CIP连接到接收CIP }
<<< % 220 Whois++ server ready<cr><lf>
>>> # CIP-Version: 3<cr><lf>
<<< % 500 Syntax error<cr><lf>
{ 服务器关闭连接 }
发送CIP可以会尝试以版本1或2进行连接,而失败的结果会被缓冲以避免以后的失败。
2.1.1 传输特定的响应码
下面的响应码用于流传输:
Code
|
描述文本
|
发送CIP动作
|
200
|
MIME请求的接收和处理
|
无输出,继续会话
|
201
|
MIME请求的接收,处理与输出
|
请入以SMTP格式界定边界的响应
|
220
|
紧跟初始服务器标记信息
|
继续Whois++交互,或核对CIP版本
|
222
|
关闭连接
|
完成操作
|
300
|
接收请求的CIP版本
|
在特定的版本下继续操作
|
400
|
暂时不能处理请求
|
过一会儿再试。可以用于表示服务器现在没有资源接收索引
|
500
|
错误的MIME格式
|
以正确格式重试
|
501
|
未知或丢失请求
|
以正确的命令重试
|
502
|
请求没有需要的CIP属性
|
以正确的属性重试
|
520
|
因不明原因中断连接
|
通知本地管理员
|
530
|
请求需要合法的签名
|
对请求签名,如果可能重试,如果不能则向管理员报告问题
|
531
|
无效签名
|
报告管理员
|
532
|
无法检查签名
|
通知本地管理员,由他和远程的管理员协商处理问题
|
2.2 以邮件系统进行传输
除了TCP流以外,可以利用现有的邮件系统进行CIP操作。这样可以减少对叶子服务器的压力,在进行TCP连接时叶子服务器中包括一个数据库和一个检索程序。这样还可以有效地利用现有的网络技术。因为使用MIME消息,而MIME也可以用邮件进行传输,这样我们就可以利用与TCP完全不同的方法完成CIP传输。在使用邮件时基本请求和响应也是支持的。下面会说明一些特定的情况,在这些情况下,应该对邮件传输CIP对象另加考虑。通常,所有的邮件协议和邮件格式均可用于CIP邮件传输。
2.2.1 确定CIP版本
因为在MIME信息中未说明使用的CIP版本,所以要在信件头中包括这一消息。因此使用邮件传输时,必须包括CIP版本行,它的格式如下:
DIGIT = %x30-39
number = 1*DIGIT
cipversion = "CIP-Version:" <sp> number["." number]
2.2.2 返回路径
在双向流中进行CIP操作时,返回响应和错误是隐式的。使用邮件对于确定接收者就有困难。因为从信头有时不能确定谁发的信。CIP要求发送方必须接收一个返回地址,如果没有,CIP服务器将忽略这一请求,只会在日志里记一笔。接收方不能从信件的其它地方获得返回地址。如果响应不能返回给请求,发送方应该将地址包括在<>之内也放在返回地址中。我们不应该利用不能返回使错误信息不能返回,但有时这也是简化系统的一个好方法。
2.3 HTTP传输
HTTP也可用于传输CIP对象,操作可以使用POST方法进行,发送一个application/index.cmd,在HTTP应答中返回application/index.response或application/index.obj。URL是POST的目标,它也是CIP发送者和接收CIP之间配置参数的传输方法。下面是一个例子:
{ 客户打开连接发送POST }
>>> POST / HTTP/1.1<cr><lf>
>>> Host: cip.some.corp<cr><lf>
>>> Content-type: application/index.cmd.noop<cr><lf>
>>> Date: Thu, 6 Jun 1997 18:16:03 GMT<cr><lf>
>>> Content-Length: 2<cr><lf>
>>> Connection: close<cr><lf>
>>> <cr><lf>
{ 服务器处理请求 }
<<< HTTP/1.1 204 No Content<cr><lf>
{ 服务器关闭连接 }
利用HTTP时可以同时利用它的安全机制和其它属于HTTP的特点。CIP客户可以利用Accept-Charset和Accept-Language HTTP头来指定索引以特定的字符集返回。也可以使用Accept-Encoding来表示它可以处理压缩响应。也可以利用If-Modified-Since来防止在索引未改变的情况下再次传输再来的浪费。CIP服务器可以使用Retry-After要求客户过一会再进行请求。
3. 安全
索引信息有两层安全保护,一层是使用现有的安全MIME对象,另一层是利用现有的安全传输机制。我们上面已经说过了利用三种协议传输CIP对象,那这三个协议中的安全机制对安全传输CIP对象是有用的。
分享到:
相关推荐
本节说明用于传输CIP索引对象和维护网结构。本文主要定义定义消息格式,传输机制。CIP协议的设计思想是一种块设计思想。它不依赖于许多于协议定义工具,或文本编码方式,而是利用现有的协议技术进行设计。这样可以使...
ARP协议 PPP(Point-to-Point Protocol点到点协议 RIP协议 1.矢量距离算法 2.RIP的原理 3.RIP报文的格式 ...CIP 传输协议 802.1x协议解析 X.25 协议 XKMS协议介绍及其工作原理 技术简述
CIP显式通信用于传输对时间没有苛求的数据,它是基于源/目的地模型的,只能用于两个节点之间的通信,客户发出请求,服务器做出响应。显式通信可以访问任何对象的任何可从外部访问的数据。
T C P连接,第1 9和第2 0章将了解正常的数据传输过程,包括交互使用(远程登录)和批量数 据传送(文件传输)。第2 1章提供T C P超时及重传的技术细节,第2 2和第2 3章将介绍两种其他 的定时器。最后,第2 4章概述T ...
EtherNet/IP(ethernet/Industrial Protocol)是由洛克威尔自动化公司开发的工业以太网通讯协定,由开放DeviceNet厂商协会(ODVA)管理,可应用在程序控制及其他自动化的应用中,是通用工业...采用TCP/IP技术传输CIP报文
有关文档,请参见: * THE CIP NETWORKS LIBRARY Volume 1 Edition 3.3 November, 2007: http://www.tud.ttu.ee/im/Kristjan.Sillmann/ISP0051 Rakenduslik Andmeside/CIP docs/CIP Vol1_3.3.pdf* THE CIP NETWORKS...
通过Linux C编程,设计一个基于TCP/IP的文件传输系统,实现服务器端和客户端之间网络文件的收发。
将TCP/IP协议从linux内核中摘出来,作为一个独立的模块运行(为与TCP/IP一起运行,我修改了IP协议号和TCP协议号部分,命名为 UCP/UNP,协议簇编号为28,三层协议号修改为0x7800,四层协议号修改为66)。由于时间有限...
本项目为网络课程设计的作业,采用c#实现,使用UDP传输协议,在连接时采用TCP连接,拥有客户机和服务器端,客户机登录后能够在服务器端显示登录信息,服务器向该用户发送当前在线用户的ip信息,该用户选择所要发送...
用socket 编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c),该程序应能实现下述命令功能: get:取远方的一个文件 put:传给远方一个文件 pwd:显示远主当前目录 dir:列出远方当前目录 cd...
第4章:介绍TCP/IP协议层次结构中传输层及其相关知识。主要内容有端口的概念、TCP协议和UDP协议的协议数据格式、协议原理和TCP协议与UDP协议的比较等内容。 第5章:介绍TCP/IP协议层次结构中应用层及其相关知识。...
基于TCP/IP协议的C/S异步通讯传输工具,开发环境采用的是C#平台
第17章 TCP:传输控制协议 170 第18章 TCP连接的建立与终止 174 第19章 TCP的交互数据流 200 第20章 TCP的成块数据流 209 第21章 TCP的超时与重传 226 第22章 TCP的坚持定时器 245 第23章 TCP的保活定时器 251 第24...
第17章 TCP:传输控制协议 170 17.1 引言 170 17.2 TCP的服务 170 17.3 TCP的首部 171 17.4 小结 173 第18章 TCP连接的建立与终止 174 18.1 引言 174 18.2 连接的建立与终止 174 18.2.1 tcpdump的输出 174 18.2.2 ...
作者用Lawrence Berkeley实验室的tcpdump程序来捕获不同操作系统和TCP/IP实现之间传输的不同分组。对tcpdump输出的研究可以帮助理解不同协议如何工作。本书适合作为计算机专业学生学习网络的教材和教师参考书。也...
文件传输协议的简单设计与实现:用socket 编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c),该程序应能实现下述命令功能: get:取远方的一个文件 put:传给远方一个文件 。。。。。。 ...
纯TCP/IP文件传输,S端与C端代码。包含简易的登陆验证
作者用Lawrence Berkeley实验室的tcpdump程序来捕获不同操作系统和TCP/IP实现之间传输的不同分组。对tcpdump输出的研究可以帮助理解不同协议如何工作。本书适合作为计算机专业学生学习网络的教材和教师参考书。也...
TCPIP协议分析及应用,主编张延双 ...中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议,这个协议是是Internet最基本的协议、Internet国际互联网络的基础,简单地说,就是由网络层的IP协议和传输层的TCP协议...
文字版,可复制,附带Verilog代码和modelsim仿真波形。。。。一 IP 核的理解 I2C 总线概述 三 I2C 总线上的数据传输和时序 四 时钟同步 五 总线仲裁 六 程序分析及仿真波形