名词解释
SLIP:Serial Line IP
串行线路 IP (SLIP)用于运行 TCP/IP 的点对点串行连接。 SLIP 通常专门用于串行连接,有时候也用于拨号,使用的线路速率一般介于 1200bps 和 19.2Kbps 之间。 SLIP 允许主机和路由器混合连接通信(主机 - 主机、主机 - 路由器、路由器 - 路由器都是 SLIP 网络通用的配置),因而非常有用。
SLIP 只是一个包组帧协议,仅仅定义了在串行线路上将数据包封装成帧的一系列字符。它没有提供寻址、包类型标识、错误检查 / 修正或者压缩机制。
SLIP 定义了两个特殊字符: END 和 ESC 。 END 是八进制300 (十进制 192), ESC 是八进制 333 (十进制 219)。发送分组时, SLIP 主机只是简单地发送分组数据。如果数据中有一个字节与 END 字符的编码相同,就连续传输两个字节ESC 和八进制 334 (十进制 220)。如果与 ESC 字符相同,就连续传输两个字节 ESC 和八进制 335 (十进制 221 。当分组的最后一个字节发出后,再传送一个 END 字符。
因为没有“标准的” SLIP 规范,也就没有 SLIP 分组最大长度的实际定义。可能最好是接受 Berkeley UNIX SLIP驱动程序使用的最大分组长度: 1006 字节,其中包括 IP 头和传输协议头(但不含分帧字符)。
压缩串行线路 IP (CSLIP)在传送出的 IP 分组上执行 Van Jacobson 头部压缩。这个压缩过程显著提高了交互式会话吞吐量。
如今,点对点协议(P2P)广泛替代了 SLIP ,因为它有更多特性和更灵活。
应用范围在Windows中要设置SLIP协议,比如在Windows 98中,假设已经创建了“拨号连接”,右键单击该连接,选择“属性”。接着,在打开的属性窗口中,选择“服务器类型”选项卡,在“拨号网络服务器类型”中选择“SLIP:Unix连接”。最后,单击“确定”按钮即可。
应用缺点SLIP是一种简单的组帧方式,使用时还存在一些问题。首先,SLIP不支持在连接过程中的动态IP地址分配,通信双方必须事先告诉对方IP地址,这给没有固定IP地址的个人用户上Internet网带来了很大的不便;其次,SLIP帧中无协议类型字段,因此他只能支持Ip协议;再有,SLIP帧中无校验字段,因此链路层上无法检测出传输差错,必须由上层实体或具有纠错能力的MODEM来解决差错问题。
SLIP是一种在串行线路上对I P数据报进行封装的简单形式,在RFC 1055[Romkey 1988]中有详细描述。SLIP适用于家庭中每台计算机几乎都有的RS-232串行端口和高速调制解调器接入Internet。
|| ||
下面的规则描述了SLIP协议定义的帧格式:
1) IP数据报以一个称作END(0xC0)的特殊字符结束。同时,为了防止数据报到来之前的线路噪声被当成数据报内容,大多数实现在数据报的开始处也传一个END字符(如果有线路噪声,那么END字符将结束这份错误的报文。这样当前的报文得以正确地传输,而前一个错误报文交给上层后,会发现其内容毫无意义而被丢弃)。
2) 如果I P报文中某个字符为END,那么就要连续传输两个字节ESC,ESC_END(0XDB,0xDC)来取代它。
0xDB这个特殊字符被称作SLIP的ESC字符,但是它的值与ASCII码的ESC字符(0x1B)不同。
3) 如果IP报文中某个字符为SLIP的ESC字符,那么就要连续传输两个字节ESC,ESC_ESC(0xDB,0xDD)来取代它。
SLIP是一种简单的帧封装方法,还有一些值得一提的缺陷:
1) 每一端必须知道对方的I P地址。没有办法把本端的I P地址通知给另一端。
2)数据帧中没有类型字段(类似于以太网中的类型字段)。如果一条串行线路用于SLIP,那么它不能同时使用其他协议。
3 ) SLIP没有在数据帧中加上检验和(类似于以太网中的CRC字段)。如果SLIP传输的报文被线路噪声影响而发生错误,只能通过上层协议来发现(另一种方法是,新型的调制解调器可以检测并纠正错误报文)。这样,上层协议提供某种形式的CRC就显得很重要。
目前状况广泛使用尽管存在这些缺点, SLIP仍然是一种广泛使用的协议。它主要被用于支持TCP/IP网络控制协议(network control protocol,NCP)。
SLIP的历史要追溯到1 9 8 4年,Rick Adams第一次在4.2BSD系统中实现。尽管它本身的描述是一种非标准的协议,但是随着调制解调器的速率和可靠性的提高,SLIP越来越流行。现在,它的许多产品可以公开获得,而且很多厂家都支持这种协议。
压缩由于串行线路的速率通常较低(19200 b/s或更低),而且通信经常是交互式的(如Telnet和Rlogin,二者都使用TCP),因此在SLIP线路上有许多小的TCP分组进行交换。为了传送1个字节的数据需要20个字节的IP首部和20个字节的TCP首部,总数超过40个字节。
既然承认这些性能上的缺陷,于是人们提出一个被称作CSLIP(即压缩SLIP)的新协议,它在RFC1144[Jacobson 1990a]中被详细描述。CSLIP一般能把上面的4 0个字节压缩到3或5个字节。它能在CSLIP的每一端维持多达16个TCP连接,并且知道其中每个连接的首部中的某些字段一般不会发生变化。对于那些发生变化的字段,大多数只是一些小的数字和的改变。这些被压缩的首部大大地缩短了交互响应时间。现在大多数的SLIP产品都支持CSLIP。1
串行网际协议在记录仪通信中的应用在简要介绍记录仪结构的基础上,重点论述了采用串行网际协议(SLIP),在RS-232通信协议的物理层与用户应用层间设计链路层的方法。链路层的引入提高了记录仪上下位机通信的可靠性,应用程序的层次分明.结构清晰。
某记录仪的硬件结构如图1所示。下位机负责8路模拟信号的调理,采样和实时上传;两路PID模拟输出、16路开关量报警。上位机负责下位机上传采样值的处理、4路虚拟通道的组织、按键响应、显示、PID控制、流量积算、存储、打印等功能。因此,上位机80C320与下位机80C51之间的可靠通信是高品质记录仪的关键技术之一。
硬件连接上下位机通信协议是RS-232,其硬件连接方式大致可分为无握手、有握手、循环握手三类记录仪采用最简单的无握手三线连接全双工方式,见图。
由于上下位机距离短,省略电平转换芯片,通过UART直接在TTL电平下进行数据收发。但RS-232串行通信只是定义在物理层的简单协议,而工业现场环境复杂,信号在传递过程中常受到干扰,出现差错是不可避免的。传统的解决方案是在应用程序中加入通信纠错模块,这种直接在物理层协议上开发应用程序的方案带来两方面的问题:
(1)程序结构混乱,给调试、维护、升级造成困难;
(2)软件的通用性差,复用困难。
为解决上述问题,参照OSI(开放式系统互联参考模型),借鉴串行线路网际协议(SLIP)〕在UNIX上的成功案例,在RS-232物理层上设计一个链路层。链路层包括两部分内容:一是上下位机数据帧(包)的格式;二是差错处理策略。基于物理层、链路层、应用层的上下位机通信模型如图所示。
链路层设计SLIP是一个简单的面向字符的协议,它的规则只有三个:
(1)在每一个数据包的头尾各加上一个特殊的标志字节END,封装成SLIP帧。也有少数SLIP实现仅把一个标识字节END放在数据包的末尾。
( 2)如果在数据包中的某一个字节恰好与标志字节END的编码一样,那么就要将这个字节更换成DEL+END这样的两个字节序列。这里的DEL字符成为SLIP的转义字符。
( 3)如果在数据包中的某一个字节恰好和DEL一样,则将它更换为DEL+DEL的两个字节序列。
必须指出,END和DEL只是两个不同的字符而已。只要在实现过程中,通讯双方的DEL和END字符保持一致就可以了。
发送方根据累加和校验以及SLIP协议装配发送数据帧,首先对待发送的数据包求累加和,然后根据SLIP协议进行打包发送。在接收中断程序中,根据SLIP协议判断那块数据是一个完整的数据包,然后根据校验和判断这个数据包是否接收正确。如果校验和出错,则丢弃这个数据组。打包操作如图3所示,解包操作是打包操作的逆操作,就不在图示说明了。加SLIP封装时,如果图中P的数值等于DEL或者END中的一个则对它也要附加转义字符DEL 。