RFC1055:在串行线路上传输ip数据包的非标准协议

简介  

  TCP/IP协议族运行在各种各样的网络媒介上:IEEE 802.3(以太网)和802.5(令牌环)局域网、x.25线路、卫星线路、串行线路。给这些网络中的许多都定义了ip分组的标准格式,但是却没有用于串行线路的标准。SLIP(串行线路IP),目前已经成为事实上的标准,通常用在点对点串行连接上运行TCP/IP。它不是一个互联网标准,这份备忘录的发布不受限制。

历史

  SLIP起源于80年代早期的3COM UNET TCP/IP的实现,它仅仅是一个分组分帧协议:SLIP定义了一系列在串行线路上构造IP分组的字符,仅此而已。它不提供寻址、分组类型识别、错误检测/纠正或者压缩机制。因为这个协议所做的事很少,所以通常很容易实现。

  大约在1984年,Rick Adams为4.2 Berkeley Unix和Sun Microsystems工作站实现了SLIP并且向世界发布。它很快就因作为一种使用串行线路连接TCP/IP主机和路由器的简单可靠的方法而流行。

  SLIP通常用在专用串行链路,有时候也用在拨号网络,通常以1.2kbps到19.2kbps的线速被使用。它在主机和路由器混合连接时非常有用(主机-主机、主机-路由器、路由器-路由器都是SLIP网络的通用配置)。

可用性

  SLIP对于大多数基于Berkeley Unix的系统都是可用的,并且被包括进Berkeley发布的4.3BSD标准版。SLIP可用于Ultrix、Sun Unix以及大多数其他衍生于Berkeley的Unix系统。有些终端集线器和IBM PC实现同样支持该协议。

  Berkeley Unix的SLIP可通过匿名ftp在uunet.uu.net的pub/s1.shar.Z获得,确保通过二进制模式传输该文件,并通过UNIX解压缩程序打开它,把获得的文件作为UNIX的/bin/sh(比如/bin/sh sl.shar)的shell命令使用。

协议

  SLIP协议定义了两个特殊字符:END和ESC。END是八进制的300(十进制192),ESC是八进制的333(十进制的219),不要把它和ASCII的ESCAPE字符混淆,为了讨论方便,ESC表示SLIP的ESC字符。发送分组时,SLIP主机简单地开始发送分组数据。如果一个数据字节和END字符相同,则用两个连续字节ESC和八进制334(十进制220)代替。如果存在和ESC字符相同的字节,则用两个连续字节ESC和八进制335(十进制221)代替。当分组的最后一个分组发送后,跟着发送一个END分组。

  Phil Karn建议对算法做一个简单的改变:和分组结尾一样,在开始也加上一个END字符,这样就能清除掉所有线路噪音引起的错误字节。通常情况下,接受者只会看到两个紧挨着的END字符,这样也就产生了一个无效的IP分组。如果SLIP实现没有丢弃这个长度为0的IP分组,IP实现必然会丢弃它。如果存在线路噪音,收到到的由线路噪音产生的数据将会被丢弃,而不会影响后面的分组。

  因为没有标准的SLIP规格,也就没有真正定义SLIP分组的最大长度。或许最好接受Berkeley UNIX SLIP驱动使用的最大分组长度:1006字节,包括IP头和传输头(不包括分帧字符)。因此,任何新的SLIP实现应该准备好接收1006字节数据报,并且不能发送超过1006字节的数据报。

缺陷

  有一些特性用户希望SLIP提供而它没有提供。公平地讲,SLIP只是一个很久以前设计的非常简单的协议,那时这些麻烦还不是真正的重要问题。下面是一些对现有SLIP协议一般能看到的确定:

  - 寻址:

    为了路由,SLIP链路两端的主机,都需要知道对方的IP地址。另外,当主机拨号连接到路由器时,地址可能是动态的,路由器可能需要将ip地址通告拨号主机,SLIP目前没有为主机提供在SLIP链接上传达地址信息的机制。

  - 类型识别:

    SLIP没有类型字段,因此,在一个SLIP连接上只能运行一个协议,在两台同时运行TCP/IP和DECnet的DEC主机的配置中,不可能在TCP/IP和DECnet之间,用SLIP分享同一条串行线路。SLIP是“串行线路IP”,如果一条串行连接两台多协议计算机,这些计算机可以在这条线路上使用多种协议。

  - 错误检测与纠正:

    嘈杂的电话线路可能会破坏分组的传输,因为线路速度可能很低(或许2400波特),重传分组的代价非常昂贵。错误检测在SLIP层并非绝对需要,因为任何IP应用应该检测被破坏的分组(IP头部、UDP和TCP校验和应该足够),但是,一些通用应用程序如NFS通常忽略校验和,依靠网络媒介去检测被破坏的分组。因为重传被线路噪音破坏的分组会花费很长时间,所以如果SLIP能提供某种它自己的简单错误检测机制,那将是非常有效。

  - 压缩:

    因为拨入线路太慢(通常2400bps),所以,分组压缩能给分组吞吐量带来极大提高。通常,在单独的TCP连接中的分组流,只有少数被改变的IP和TCP头部字段。所以,一个简单的压缩算法就是:只传输头部被改变的部分,而不是整个头部。

  为了设计和实现一个SLIP的继任者,不同的组做了很多工作,也许这个继任者能解决部分或者所有问题。

SLIP驱动程序

  下面的C语言函数发送和接收SLIP分组,它们依赖两个函数:send_char()和recv_char(),这两个函数用于在串行线路上发送和接收单个字符。

/* SLIP特殊字符编码

*/

#define END 0300 /* 分组结束标记 */
#define ESC 0333 /* 填充标记 */
#define ESC_END 0334 /* ESC ESC_END表示END数据字段 */
#define ESC_ESC 0335 /* ESC ESC_ESC表示ESC数据字段 */

/* SEND_PACKET:发送长度为len的分组,起始位置为p

*/

void send_packet(p, len)
    char *p;
    int len; {
  /* 发送一个初始END字符,清除所有因为线路噪音而在接受者那里累积的数据
  */
  send_char(END);
  /* 为分组中的每一个字节发送适当的字符序列
  */
  while(len--) {
    switch(*p) {
    /* 如果是一个END字符,我们发送一个特殊的两字符编码,

     * 这样,接收者就不会以为我们发送了一个END字符
     */
    case END:
      send_char(ESC);
      send_char(ESC_END);
      break;
    /* 如果是一个ESC字符,我们发送一个特殊的两字符编码,

     * 这样,接收者就不会以为我们发送了一个ESC字符。
     */
    case ESC:
      send_char(ESC);
      send_char(ESC_ESC);
      break;
    /* 其他情况,直接发送字符
     */
    default:
      send_char(*p);
    }
    p++;
  }
  /* 告诉接收者,我们完成了一个分组的发送
  */
  send_char(END);
}

/* RECV_PACKET:接收一个分组并放入p指向的缓冲区,如果接收的长度大于len,分组将被截断。返回缓冲区中存储的字节的数目

*/

int recv_packet(p, len)
    char *p;
    int len; {
  char c;
  int received = 0;
  /* 循环读取字节,直到接收完整个分组
   * 确保用完缓冲区后不再复制
   */
  while(1) {
    /* 取一个字符来处理
     */
    c = recv_char();
    /* 在需要时处理填充
     */
    switch(c) {
    /* 如果是END字符,表示分组处理完成
     */
    case END:
    /* 小优化:如果分组中没有数据,则忽略它。

     * 这是为了避免用双END字符生成的空分组打扰IP,

     * 这些双END字符是为了探测线路噪音。
     */
      if(received)
        return received;
      else
        break;
    /* 如果是一个ESC字符,等待接收另外一个字符,然后推断出将要存入分组的字符
    */
    case ESC:
      c = recv_char();
      /* 如果c不是两个字符中的一个,就违反了协议

       * 最好是将这个字符填充进分组
       */
      switch(c) {
      case ESC_END:
        c = END;
        break;
      case ESC_ESC:
        c = ESC;
        break;
      }
    /* 这里是默认处理,直接保存字符
    */
    default:
      if(received < len)
        p[received++] = c;
    }
  }
}

时间: 2024-07-28 19:25:18

RFC1055:在串行线路上传输ip数据包的非标准协议的相关文章

SLIP—串行线路上传输数据报的非标准协议

做了这么多年的程序员后,总想资源回收一下,写一点点什么,却又发现无从写起. SLIP-串行线路上传输数据报的非标准协议 简介 TCP/IP 协议族可以在许多网络介质上运行,如: IEEE 802.3 (以太网)和802.5(令牌环)局域网,X.25线路,卫星连接和串行线路.除了串行线路外,其它的介质上都有包格式的标准. SLIP(Serial Line Internet Protocol,串行线路网际协议),该协议是Windows远程访问的一种旧工业标准,主要在Unix远程访问服务器中使用,现今

九度oj 题目1475:IP数据包解析

题目描述: 我们都学习过计算机网络,知道网络层IP协议数据包的头部格式如下: 其中IHL表示IP头的长度,单位是4字节:总长表示整个数据包的长度,单位是1字节. 传输层的TCP协议数据段的头部格式如下: 头部长度单位为4字节. 你的任务是,简要分析输入数据中的若干个TCP数据段的头部. 详细要求请见输入输出部分的说明. 输入: 第一行为一个整数T,代表测试数据的组数. 以下有T行,每行都是一个TCP数据包的头部分,字节用16进制表示,以空格隔开.数据保证字节之间仅有一个空格,且行首行尾没有多余的

TCP/IP数据包结构具体解释

[关键词] TCP IP 数据包 结构 具体解释 网络 协议 一般来说,网络编程我们仅仅须要调用一些封装好的函数或者组件就能完毕大部分的工作,可是一些特殊的情况下,就须要深入的理解 网络数据包的结构,以及协议分析.如:网络监控,故障排查等-- IP包是不安全的,可是它是互联网的基础,在各方面都有广泛的应用.由IP协议衍生的协议族有10数种(据我所知),以后还会出现 很多其它的基于IP的协议- 先从实际出发吧! 一般我们在谈上网速度的时候,专业上用带宽来描写叙述,事实上不管说网速或者带宽都是不准确

IP数据包的分片与重组过程

一.IP分片 (一)IP分片的原理: 分片和重新组装的过程对传输层是透明的,其原因是当IP数据报进行分片之后,只有当它到达下一站时,才可进行重新组装,且它是由目的端的IP层来完成的.分片之后的数据报根据需要也可以再次进行分片.    IP分片和完整IP报文差不多拥有相同的IP头,ID域对于每个分片都是一致的,这样才能在重新组装的时候识别出来自同一个IP报文的分片.在IP头里面,16位识别号唯一记录了一个IP包的ID(ipid),具有同一个ID的IP分片将会重新组装:而13位片偏移则记录了某IP片

IP报文解析及基于IP 数据包的洪水攻击

版本(4bit) 报头长度(4bit) 优先级和服务类型(8bit) 总长度(16bit) 标识(16bit) 标志(3bit) 分段偏移(13bit) 存活期(8bit) 协议(8bit) 报头校验和(16bit) 源IP地址(32bit) 目的IP地址(32bit) 选项(0或32bit,若有的话) 数据(可变) 版本 IP版本号.报头长度 32位字的报头长度(HLEN).优先级和服务类型 服务类型描述数据报将如何被处理.前3位表示优先级位.总长度 包括报头和数据的数据包长度.标识 唯一的I

IP数据包个人理解

恰好学到了网络数据包,写下来加深一下个人理解,仅此而已. 定义:TCP/IP协议定义了在INTERNET(网络层)上传输的包,称为数据包: IP数据包(IP DataGram)组成:首部,数据部分: 首部:分为固定部分和可变部分,固定部分(4字节*5)20个字节,可变部分长度可变. 下面解释固定部分各字段含义: 1.版本:占4位,指IP协议的版本.目前广泛使用的IP协议版本号为4(IPV4). 2.首部长度:占4位, 最小长度为5(0101)即5个字长20字节,最大长度为15(1111)即60字

基于Jpcap的TCP/IP数据包分析(一)

基于Jpcap的TCP/IP数据包分析原作:赵新辉目 录第一章 以太网的结构和TCP/IP1.1 以太网的结构1.1.1 基于网络架构的以太网1.1.2 以太网的数据交换1.1.3 以太网帧的结构1.2 IP数据报的构成 1.2.1 IP地址1.2.2 路由1.2.3 IP数据报的构成1.2.4 其他报文结构1.3 TCP/UDP1.3.1 TCP/UDP的作用1.3.2 TCP和UDP报文的结构第二章 Jpcap类库2.1 Jpcap的使用2.1.1 Jpcap的运行环境的安装2.1.2 Jp

TCP/IP数据包处理路径(Ipnat.sys 、Ipfltdrv.sys 、 Ipsec.sys)

转自:https://technet.microsoft.com/library/bb878072 本页内容 简介 用于数据包处理的 TCP/IP 体系结构 数据包处理路径 更多信息 简介 随着 Microsoft® Windows® XP Service Pack 2 和 Windows Server™ 2003 Service Pack 1 新增了 Windows 防火墙,以及 Internet 协议安全 (IPsec) 在公司 Intranet 中日益广泛的应用,信息技术 (IT) 专业人

命题作文:Dimension Tree区间查找与IP数据包分类

这个题目有点大,而且我要严格控制字数,不能像<命题作文:在一棵IPv4地址树中彻底理解IP路由表的各种查找过程>那样扯得那么开了.事实上,这篇作文是上 一篇作文中关于区间查找小节的扩展. 1.IP数据包分类 根据IP数据包协议头的若干字段,也叫匹配域,将数据包划分到某个类别,这就是IP数据包分类的核心. 事实上,IP路由查找的过程就是IP数据包分类的一个特例,一个极其简单的特例,此时的匹配域就是目标IP地址,而类别就是路由项或者说更简单一点,下一 跳.此时考虑一下源地址Policy routi