zoukankan      html  css  js  c++  java
  • TCP/IP详解,卷1:协议--链 路 层

    引言

    在 T C P / I P 协议族中,链路层主要有三个目的:(1)为 I P 模块发送和
    接收 I P 数据报;(2)为 A R P 模块发送 A R P 请求和接收 A R P 应答;(3)为 R A R P 发送 R A R P 请
    求和接收 R A R P 应答。T C P / I P 支持多种不同的链路层协议,这取决于网络所使用的硬件,如以
    太网、令牌环网、F D D I(光纤分布式数据接口)及 R S-2 3 2 串行线路等。

    我们将详细讨论以太网链路层协议,两个串行接口链路层协议( S L I P 和 P P P),
    以及大多数实现都包含的环回( l o o p b a c k)驱动程序。以太网和 S L I P 是本书中大多数例子使
    用的链路层。对 M T U(最大传输单元)进行了介绍,这个概念在本书的后面章节中将多次遇
    到。

    以太网和 IEEE 802 封装

    以太网这个术语一般是指数字设备公司( Digital Equipment Corp.)、英特尔公司(I n t e l
    C o r p .)和 X e r o x 公司在 1 9 8 2 年联合公布的一个标准。它是当今 T C P / I P 采用的主要的局域网技
    术。它采用一种称作 C S M A / C D 的媒体接入方法,其意思是带冲突检测的载波侦听多路接入
    (Carrier Sense, Multiple Access with Collision Detection)。它的速率为 10 Mb/s,地址为 48 bit。
    几年后,I E E E(电子电气工程师协会) 8 0 2 委员会公布了一个稍有不同的标准集,其中
    8 0 2 . 3 针对整个 C S M A / C D 网络,8 0 2 . 4 针对令牌总线网络,8 0 2 . 5 针对令牌环网络。这三者的共
    同特性由 8 0 2 . 2 标准来定义,那就是 8 0 2 网络共有的逻辑链路控制( L L C)。不幸的是,8 0 2 . 2 和
    8 0 2 . 3 定义了一个与以太网不同的帧格式。文献 [Stallings 1987]对所有的 IEEE 802 标准进行了
    详细的介绍。

    在以太网帧格式中,类型字段之后就是数据;而在 8 0 2 帧格式中,跟随在后面的是 3 字节
    的 802.2 LLC 和 5 字节的 802.2 SNAP。目的服务访问点( Destination Service Access Point,
    D S A P)和源服务访问点(Source Service Access Point, SSAP)的值都设为 0 x a a。Ct r l 字段的
    值设为 3。随后的 3 个字节 o rg code 都置为 0。再接下来的 2 个字节类型字段和以太网帧格式一样
    (其他类型字段值可以参见 RFC 1340 [Reynolds and Postel 1992])。
    C R C 字段用于帧内后续字节差错的循环冗余码检验(检验和)(它也被称为 F C S 或帧检验
    序列)。
    8 0 2 . 3 标准定义的帧和以太网的帧都有最小长度要求。 8 0 2 . 3 规定数据部分必须至少为 3 8 字
    节,而对于以太网,则要求最少要有 4 6 字节。为了保证这一点,必须在不足的空间插入填充
    (p a d)字节。在开始观察线路上的分组时将遇到这种最小长度的情况

    尾部封装

    RFC 893[Leffler and Karels 1984]描述了另一种用于以太网的封装格式,称作尾部封装
    (trailer encapsulation)。这是一个早期 B S D 系统在 DEC VA X 机上运行时的试验格式,它通过
    调整 I P 数据报中字段的次序来提高性能。在以太网数据帧中,开始的那部分是变长的字段
    (I P 首部和 T C P 首部)。把它们移到尾部(在 C R C 之前),这样当把数据复制到内核时,就可以
    把数据帧中的数据部分映射到一个硬件页面,节省内存到内存的复制过程。 T C P 数据报的长
    度是 5 1 2 字节的整数倍,正好可以用内核中的页表来处理。两台主机通过协商使用 A R P 扩展协
    议对数据帧进行尾部封装。这些数据帧需定义不同的以太网帧类型值。
    现在,尾部封装已遭到反对,因此我们不对它举任何例子。有兴趣的读者请参阅 RFC 893
    以及文献[ L e ffler et al. 1989]的 11 . 8 节。

    SLIP:串行线路 IP
    S L I P 的全称是 Serial Line IP。它是一种在串行线路上对 I P 数据报进行封装的简单形式,在
    RFC 1055[Romkey 1988]中有详细描述。S L I P 适用于家庭中每台计算机几乎都有的 R S - 2 3 2 串
    行端口和高速调制解调器接入 I n t e r n e t。
    下面的规则描述了 S L I P 协议定义的帧格式:

    1. IP 数据报以一个称作 E N D(0 x c 0)的特殊字符结束。同时,为了防止数据报到来之前
      的线路噪声被当成数据报内容,大多数实现在数据报的开始处也传一个 E N D 字符(如果有线
      路噪声,那么 E N D 字符将结束这份错误的报文。这样当前的报文得以正确地传输,而前一个
      错误报文交给上层后,会发现其内容毫无意义而被丢弃)。
    2. 如果 I P 报文中某个字符为 E N D,那么就要连续传输两个字节 0 x d b 和 0 x d c 来取代它。
      0 x d b 这个特殊字符被称作 S L I P 的 E S C 字符,但是它的值与 A S C I I 码的 E S C 字符(0 x 1 b)不同。
    3. 如果 I P 报文中某个字符为 S L I P 的 E S C 字符,那么就要连续传输两个字节 0 x d b 和 0 x d d 来
      取代它。
      图 2 - 2 中的例子就是含有一个 E N D 字符和一个 E S C 字符的 I P 报文。在这个例子中,在串行
      线路上传输的总字节数是原 I P 报文长度再加 4 个字节。

    S L I P 的历史要追溯到 1 9 8 4 年,Rick Adams 第一次在 4 . 2 B S D 系统中实现。尽管它本
    身的描述是一种非标准的协议,但是随着调制解调器的速率和可靠性的提高, S L I P 越
    来越流行。现在,它的许多产品可以公开获得,而且很多厂家都支持这种协议

    压缩的 SLIP

    由于串行线路的速率通常较低( 19200 b/s 或更低),而且通信经常是交互式的(如 Te l n e t
    和 R l o g i n,二者都使用 T C P),因此在 S L I P 线路上有许多小的 T C P 分组进行交换。为了传送 1 个
    字节的数据需要 2 0 个字节的 I P 首部和 2 0 个字节的 T C P 首部,总数超过 4 0 个字节

    既然承认这些性能上的缺陷,于是人们提出一个被称作 C S L I P(即压缩 S L I P)的新协议,
    它在 RFC 1144[Jacobson 1990a]中被详细描述。C S L I P 一般能把上面的 4 0 个字节压缩到 3 或 5 个
    字节。它能在 C S L I P 的每一端维持多达 1 6 个 T C P 连接,并且知道其中每个连接的首部中的某些
    字段一般不会发生变化。对于那些发生变化的字段,大多数只是一些小的数字和的改变。这
    些被压缩的首部大大地缩短了交互响应时间。
    现在大多数的 S L I P 产品都支持 C S L I P。作者所在的子网(参见封面内页)中有两条
    SLIP 链路,它们均是 CSLIP 链路。

    PPP:点对点协议

    P P P,点对点协议修改了 S L I P 协议中的所有缺陷。P P P 包括以下三个部分:

    1. 在串行链路上封装 I P 数据报的方法。 P P P 既支持数据为 8 位和无奇偶检验的异步模式
      (如大多数计算机上都普遍存在的串行接口),还支持面向比特的同步链接。
    2. 建立、配置及测试数据链路的链路控制协议( L C P:Link Control Protocol)。它允许通
      信双方进行协商,以确定不同的选项。
    3. 针对不同网络层协议的网络控制协议( N C P:Network Control Protocol)体系。当前
      R F C 定义的网络层有 I P、O S I 网络层、D E C n e t 以及 A p p l e Ta l k。例如,IP NCP 允许双方商定是
      否对报文首部进行压缩,类似于 C S L I P(缩写词 N C P 也可用在 T C P 的前面)。

    P P P 比 S L I P 具有下面这些优点:(1) PPP 支持在单根串行线路上运行多种协议,
    不只是 I P 协议;(2) 每一帧都有循环冗余检验; (3) 通信双方可以进行 I P 地址的动态协商(使用
    I P 网络控制协议);(4) 与 C S L I P 类似,对 T C P 和 I P 报文首部进行压缩; (5) 链路控制协议可以
    对多个数据链路选项进行设置。为这些优点付出的代价是在每一帧的首部增加 3 个字节,当建
    立链路时要发送几帧协商数据,以及更为复杂的实现。
    尽管 P P P 比 S L I P 有更多的优点,但是现在的 S L I P 用户仍然比 P P P 用户多。随着产品
    越来越多,产家也开始逐渐支持 PPP,因此最终 PPP 应该取代 SLIP

    环回接口

    大多数的产品都支持环回接口( Loopback Interface),以允许运行在同一台主机上的客户
    程序和服务器程序通过 T C P / I P 进行通信。A 类网络号 1 2 7 就是为环回接口预留的。根据惯例,
    大多数系统把 I P 地址 1 2 7 . 0 . 0 . 1 分配给这个接口,并命名为 l o c a l h o s t。一个传给环回接口的 I P 数
    据报不能在任何网络上出现

    我们想象,一旦传输层检测到目的端地址是环回地址时,应该可以省略部分传输层和所
    有网络层的逻辑操作。但是大多数的产品还是照样完成传输层和网络层的所有过程,只是当
    I P 数据报离开网络层时把它返回给自己。
    图 2 - 4 是环回接口处理 I P 数据报的简单过程

    图中需要指出的关键点是:

    1. 传给环回地址(一般是 1 2 7 . 0 . 0 . 1)的任何数据均作为 I P 输入。
    2. 传给广播地址或多播地址的数据报复制一份传给环回接口,然后送到以太网上。这是
      因为广播传送和多播传送的定义(第 1 2 章)包含主机本身。
      3 ) 任何传给该主机 I P 地址的数据均送到环回接口。
      看上去用传输层和 I P 层的方法来处理环回数据似乎效率不高,但它简化了设计,因为环
      回接口可以被看作是网络层下面的另一个链路层。网络层把一份数据报传送给环回接口,就
      像传给其他链路层一样,只不过环回接口把它返回到 I P 的输入队列中。

    最大传输单元 MTU

    路径 MTU

    当在同一个网络上的两台主机互相进行通信时,该网络的 M T U 是非常重要的。但是如果
    两台主机之间的通信要通过多个网络,那么每个网络的链路层就可能有不同的 M T U。重要的
    不是两台主机所在网络的 M T U 的值,重要的是两台通信主机路径中的最小 M T U。它被称作路
    径 M T U。

    串行线路吞吐量计算

    如果线路速率是 9600 b/s,而一个字节有 8 bit,加上一个起始比特和一个停止比特,那么
    线路的速率就是 960 B/s(字节/秒)。以这个速率传输一个 1 0 2 4 字节的分组需要 1066 ms。如果
    用 S L I P 链接运行一个交互式应用程序,同时还运行另一个应用程序如 F T P 发送或接收 1 0 2 4 字
    节的数据,那么一般来说就必须等待一半的时间( 533 ms)才能把交互式应用程序的分组数
    据发送出去。
    假定交互分组数据可以在其他“大块”分组数据发送之前被发送出去。大多数的 S L I P 实
    现确实提供这类服务排队方法,把交互数据放在大块的数据前面。交互通信一般有 Te l n e t、
    R l o g i n 以及 F T P 的控制部分(用户的命令,而不是数据)。
    这种服务排队方法是不完善的。它不能影响已经进入下游(如串行驱动程序)队
    列的非交互数据。同时,新型的调制解调器具有很大的缓冲区,因此非交互数据可能
    已经进入该缓冲区了。
    对于交互应用来说,等待 533 ms 是不能接受的。关于人的有关研究表明,交互响应时间
    超过 1 0 0 ~ 200 ms 就被认为是不好的 [Jacobson 1990a]。这是发送一份交互报文出去后,直到
    接收到响应信息(通常是出现一个回显字符)为止的往返时间。
    不幸的是,当使用新型的纠错和压缩调制解调器时,这样的计算就更难了。这些调制解
    调器所采用的压缩方法使得在线路上传输的字节数大大减少,但纠错机制又会增加传输的时
    间。不过,这些计算是我们进行合理决策的入口点。

    小结

    这讨论了 I n t e r n e t 协议族中的最底层协议,链路层协议。我们比较了以太网和 I E E E
    8 0 2 . 2 / 8 0 2 . 3 的封装格式,以及 S L I P 和 P P P 的封装格式。由于 S L I P 和 P P P 经常用于低速的链路,
    二者都提供了压缩不常变化的公共字段的方法。这使交互性能得到提高。
    大多数的实现都提供环回接口。访问这个接口可以通过特殊的环回地址,一般为
    1 2 7 . 0 . 0 . 1。也可以通过发送 I P 数据报给主机所拥有的任一 I P 地址。当环回数据回到上层的协议
    栈中时,它已经过传输层和 I P 层完整的处理过程。

    我们描述了很多链路都具有的一个重要特性, M T U,相关的一个概念是路径 M T U。根据
    典型的串行线路 M T U,对 S L I P 和 C S L I P 链路的传输时延进行了计算。
    这的内容只覆盖了当今 T C P / I P 所采用的部分数据链路公共技术。 T C P / I P 成功的原因之
    一是它几乎能在任何数据链路技术上运行。

  • 相关阅读:
    捉BUG记(To Catch a Bug)
    发布一个简单的knockout-easyui绑定库
    笔记:Hyper-V上Centos 6.5分辨率调整问题解决笔记
    Asp.net中HttpRequest.Params与Reques.Item之异同
    Oracle必须死之奇怪的ORA-06502错误
    centos7 搭建bitcoin/usdt 节点服务
    webpack安装配置
    centos7 rsyslog
    nginx+fpm 开机自启
    centos7下 PHP添加pdo_myql扩展
  • 原文地址:https://www.cnblogs.com/ygjzs/p/12202844.html
Copyright © 2011-2022 走看看