《TCP/IP详解 卷1:协议》第2章 笔记

2.链路层

2.1 引言

链路层主要有三个目的:

  • IP模块发送和接收IP数据;

  • ARP模块发送ARP请求和接收ARP应答;

  • RARP发送RARP请求和接收RARP应答。

2.2 以太网和IEEE802封装

以太网:数字设备公司(Digital Equipment Corp.)、英特尔公司和Xerox公司在1982年联合公布的一个标准。它是当今TCP/IP采用的主要的局域网技术。采用CSMA/CD的媒体接入方法,意思是带冲突检测的载波监听多路访问(Carrier Sense Multiple Access with Collision Detection)。它的速率是10Mb/s,地址为48位。

IEEE(电子电气工程师协会)802委员会公布了一个稍微不同的标准集,其中802.1是802标准介绍以及接口原语定义802.3针对整个CSMA/CD网络802.4针对令牌总线网802.5针对令牌环网。三者共同的特性由802.2标准来定义,那就是802网络共有的逻辑链路控制(LLC)。802.2和802.3定义了一个与以太网不同的帧格式。幸运的是,802定义的有效长度值与以太网的有效类型值无一相同,这样,就可以对两种帧格式进行区分。

802.2/802.3和以太网的封装格式

载波侦听多路访问协议CSMA(Carrier Sense Multiple Access)

站点在发送数据之前,先侦听,看信道是否被占用。如果有站点在发送数据,那么站点不发送数据。用于分隙信道(将信道分成一个一个时隙)。

1-持续CSMA

每个站点在发送数据前,先侦听信道,如果信道正忙,则等待并持续侦听一旦信道空闲,立即发送,即发送的概率为1,如果出现冲突,则延时一随机时隙后,重新发送。特点:信道利用率高,但是冲突增大

非持续CSMA

每个站点在发送数据前,先侦听信道,如果信道正忙,则不再继续侦听,而是延时一随机时隙后再侦听信道。特点:信道利用率低,但是冲突减少

P-持续CSMA

每个站点在发送数据前,先侦听信道,如果信道正忙,则等待下一个时隙(说明当前时隙被占用);如果信道空闲,则以概率P发送数据,而以概率(1-P)把本次发送延至下一时隙,直至发送成功。特点:有效平衡,适用于信道较忙的情况,实现相对复杂。

在一帧传输完成后,想要发送的站点都可以尝试发送,如果两个或多个站点同时发送则发生冲突,判断出冲突后,立即停止发送,并延时一个随机时隙数后,通常其中的一个站点将发送成功。CSMA能够减少冲突的概率,但是不能避免冲突。完整的CSMA并不是指信道的侦听,信道侦听不能保证完全获取信道,怎样避免冲突,让一个站点独占信道呢?这里就需要加入冲突检测冲突检测是指在发送数据之前,先要监测一下,有没有其他站点同时发送数据。如果有,则称发生了一次冲突/碰撞。

我们知道在CSMA/CD中每个站点在发送数据之前,都会侦听一个时隙(争用时隙),这里重要问题是一个时隙的长度是多少?

信道上所有站点都知道我在发送数据了,这样别人就不发送数据了。因此,时隙的长度和环境有关。我们用τ来表示信道上两个距离最远的站点之间信号传输所需要的时间。经过争用时隙2τ(表示能够保证距离最远站点发出信号产生冲突之后被对方感知的最短时间),如果站点占用了信道,那么其他站点就不会发送数据了。

冲突的检测

  • 信号电平法

基于基带传输,两个帧信号叠加后,电压大一倍。

  • 过零点检测法

用曼彻斯特编码时,零点在每比特的正中央,当有干扰时,则可能偏移。

  • 自发自收检测法

在发送数据的同时也在接收,并逐个比较。

CSMA/CD可简单概括为:先听后发边发边听冲突停发随机延迟重发

802.3标准定义的帧和以太网的帧都有最小长度要求802.3规定数据部分必须至少为38字节,而对于以太网,则要求最少要有46字节。为了保证这一点,必须在不足的空间插入填充(pad)字节。原因是802.3和以太网都是使用CSMA/CD,为了保证冲突能够检测到,一帧数据的发送时间要大于等于2τ

64字节(保证帧的最短长度) - 6字节(目的地址) - 6字节(源地址) - 2(类型) - 4(CRC校验码) = 46字节

为什么帧的最短长度为64字节?

为了确认发送帧是否正确到达终点,必须保证可能的冲突信号返回时帧的发送尚未结束,如果在2τ内没有冲突信号返回,则发送成功,如果发送端在2τ时间内发送帧已经发送结束,则无法检测冲突,即最短帧长度应与2τ相当。

在极限条件下,802.3局域网中两个收发器间(允许接4个中继器,即5段)的最大距离为2500m,往返5000m同轴电缆的时延特性为5μs/km(相当于电磁波以2/3的光速在电缆上传播),即如遇冲突,端到端并返回的时延为25μs。然而,这是理想的时延,考虑到中继器的额外时延,最坏的情况下取估计时延为45μs,再加上强化冲突需发送48bit,接收方要接收到48bit后才能确认冲突,即再增加4.8μs,共49.8μs(45μs+4.8μs),所以通常以太网取51.2μs为争用期的时间长度(传输512bit,即64字节的时间),即帧的长度至少为64个字节

传输时延(5km * 5μs/km = 25μs) + 中继器时延(20μs) + 强化冲突确认时间(48bit / 10Mbps = 4.8μs) = 49.8μs

至于为什么以太网取51.2μs,个人猜测是在计算机中定义的一些数字都是2^n的形式。

注意:CSMA/CD只工作在半双工通信模式下对于全双工通信不会产生冲突)。

数据链路层的划分

逻辑链路控制层(LLC)是数据链路层的上半层,跟上面的网络层交互;介质访问控制层(MAC)是数据链路层的下半层,跟下面的物理层交互。由于不同网络类型有不同的介质访问子层与之对应,而逻辑链路控制子层掩盖了不同网络之间的差别,以统一的格式为网络层提供服务。LLC子层把网络层的分组(在TCP/IP中,即IP包)加上LLC头交给MAC子层组成相应的802.x帧发送。

网桥

局域网中两个收发器间的最大距离为2500m,但是还是太小了。网桥是连接多个局域网(802.x网)并使之能够形成更大局域网的设备,它工作在数据链路层。如把数据链路层细分为LLC子层和MAC子层,则所谓的协议不同是在网桥的MAC子层上。网桥作为不同数据链路层的子网的转换设备,其相应的端口属于不同的局域网。如图所示,用网桥连接CSMA/CD局域网(802.3)和令牌环局域网(802.5):

网桥工作原理

设备处理的是哪层协议的PDU,它就是哪层设备。网桥处理数据链路层的帧,它就是数据链路层设备Hub、中继器处理比特流(物理层的PDU),因此属于物理层设备

用网桥和中继器连接局域网的区别

中继器的工作原理是收到一个信号再转发过去,它是物理层设备。用中继器连接以太网A和以太网B相当于A、B共享一条CSMA/CD的总线,两个局域网的主机同时竞争一条线路。因此,用中继器连接局域网会导致冲突会增加,故网络规模不能够扩大网桥可以将冲突域分开,即连接的是两个冲突域,这是网桥和中继器与Hub之间最大的区别。

2.3 尾部封装

由RFC893描述,用于以太网的封装格式。它通过调整IP数据报中字段的次序来提高性能。在以太网数据帧中,开始的那部分是变长的字段(IP首部和TCP首部)。把它们移到尾部(CRC之前),这样一来,把数据复制到内核时,就可以把数据帧中的数据部分映射到一个硬件页面,节省内存到内存复制过程。TCP数据报的长度是512字节的整数倍,正好可以用内核中的页表来处理。现在,尾部封装已遭到反对。

2.4 SLIP:串行线路IP

SLIP全称是Serial Line IP。它是一种在串行线路上对IP数据报进行封装的简单形式。SLIP适用于家庭中每台计算机几乎都有的RS232串行端口高速调制解调器接入Internet

SLIP协议定义的帧格式

  • IP数据报以一个称作END(0xC0)的特殊字符结束。为了防止数据报到来之前的线路噪声被当成数据报内容,大多数实现在数据报的开始处也传一个END字符(如果有线路噪声,那么END字符将结束这份错误的报文。这样当前的报文得以正确地传输,而前一个错误报文交给上层后,会发现其内容毫无意义而被丢弃)。

  • 如果IP报文中某个字符为END,那么就要连续传输两个字节0xDB和0xDC来取代它。0xDB这个特殊的字符被称为SLIP的ESC字符,但是它的值与ASCII码的ESC字符0x1B不同。

  • 如果IP报文某个字符为SLIP的ESC字符,那么就要连续传输两个字节0XDB和0XDD来取代它

简言之,就是约定协议中的标志符(约定起始和结束)、对协议标志符的转义,以及转义字符的转义

SLIP的缺陷

  • 没有办法把本端的IP地址通知给另一端
  • 数据帧中没有类型字段(类似于以太网中的类型字段)。
  • SLIP没有在数据帧中加上检验和(类似于以太网中的CRC字段)。如果SLIP传输的报文被线路噪声影响而发生错误只能通过上层协议来发现(新型的调制解调器可以检测并纠正报文错误)。
2.5 压缩的SLIP

串行线路的速率通常较低,而且通信经常是交互式的(数据量少,但是频繁),因此在SLIP线路上有许多小的TCP(面向连接,适用于交互式服务)分组进行交换。为了传送1个字节的数据需要20个字节的IP首部和20个字节的TCP首部,总数超过40个字节。人们提出一个新协议CSLIP(压缩SLIP)。CSLIP一般能把上面的40个字节压缩到3或5个字节,它能在CSLIP的每一端维持多达16个TCP连接,并且知道其中每个连接的首部中的某些字段一般不会变化,对于那些发生变化的字段,大多数只是一些小的数字和的改变。这些被压缩的首部大大缩短了交互相应时间

2.6 PPP:点对点协议

PPP修改了SLIP协议中的所有缺陷,PPP包括以下三个部分:

  • 在串行链路上封装IP数据报的方法。PPP既支持数据为8位和无奇偶校验的异步模式(如大多数计算机都普遍存在的串行接口),还支持面向比特的同步连接
  • 建立、配置以及测试数据链路的链路控制协议(LCP: Link Control Protocol)。它允许双方进行协商,以确定不同的选项。
  • 针对不同网络层协议的网络控制协议(NCP: Network Control Protocol)体系。当前RFC定义的网络层IP、OSI网络层、DECnet以及AppleTalk。IP NCP允许双方商定是否对报文首部进行压缩。

异步通信

异步通信是指发送方和接收方的采样时钟不是同一个,故名。是以字符为单位的数据传输。数据块以字符为单位并以特殊的位作标志。每个字符都要附加1位起始位和1位停止位。以标记字符的开始和结束。此外,还要附加1位奇偶校验位(实现简单,硬件就可以实现)。

异步通信必须指定4个参数:

  • 波特率
  • 字符长度
  • 停止位长度
  • 奇偶校验

异步通信每发送一个字符都要跟对方同步(发送起始位)。

同步通信

同步通信是指发送发和接收方的采样时钟是同一个,故名。通常发送方在发送数据的编码中包含时钟(如曼彻斯特编码),而接收方则从数据流中提取时钟用以采样。所以说双方所用的时钟是同一个。

根据同步通信规程,同步通信又分为面向字符的同步通信和面向bit流的同步通信。

同步通信比异步通信额外的信息量小多了,因此传输效率高。

PPP数据帧格式

每一帧都以标志符0x7E开始和结束。紧接着是一个地址字节,值始终是0xFF,然后是一个值为0x03的控制字节。接下来是协议字段,当它的值为0x0021时,表示信息字段是一个IP数据报;值为0xC021时,表示信息字段是链路控制数据;值为0x8021时,表示信息字段是网络控制数据。CRC字段是循环冗余校验码,以检测数据帧中的错误。

由于帧的标志符的值是0x7E,PPP需要对它进行转移。在同步链路中,该过程是通过一种称为比特填充(bit stuffing)的硬件技术来完成的。在异步链路中,特殊字符0x7D用作转义字符。当它出现在PPP数据帧中时,那么紧接着的字符的第6个比特要取其反码,具体实现过程如下:

  • 当遇到字符0x7E时,需要连续传送两个字符,0x7D和0x5E,以实现标志字符的转义。(0x7E:0111 1110 -> 0x5E:0101 1110)
  • 当遇到转义字符0x7D时,需要连续传送两个字符:0x7D和0x5D,以实现转义字符的转义。(0x7D:0111 1101 -> 0x5D:0101 1101)
  • 默认情况下,如果字符的值小于0x20(比如,一个ASCII控制字符),一般都要进行转义。例如,遇到字符0x01时需要连续传送0x7D和0x21两个字符。(0x01:0000 0001 -> 0x21:0010 0001)这样做的原因是防止它们出现在双方主机的串行接口驱动程序或调制解调器中,因为有时它们会把这些控制字符解释成特殊含义。

与SLIP类似,PPP经常用于低速的串行链路,因此减少每一帧的字节数可以降低应用程序的交互时延。利用链路控制协议,通过协商可以省略标志符和地址字段,并且把协议字段由2个字节减少到1个字节使用IP网络控制协议,采用报文首部压缩方法(对应于CSLIP)可以减少IP和TCP首部长度

PPP比SLIP具有下面这些优点:

  • PPP支持在单根串行线路上运行多种协议,不只是IP协议。
  • 每一帧都有循环冗余校验。
  • 通信双方可以进行IP地址的动态协商(使用IP网络控制协议)。
  • 与CSLIP类似,对TCP和IP报文首部进行压缩。
  • 链路控制协议可以对多个数据链路选项进行设置。

SLIP和PPP经常用于低速的链路,二者都提供了压缩不常变化的公共字段的方法,这使交互性能得到提高。

2.7 环回接口

大多数的产品都支持支持环回接口,以允许运行在同一台主机上的客户程序和服务器程序通过TCP/IP进行通信。A类网络号127就是环回接口预留的。大多数系统把IP地址127.0.0.1分配给这个接口,并命名为localhost。一个传给环回地址的数据报不能在任何网络上出现

传给换回地址(一般是127.0.0.1)的任何数据均作为IP输入。传给广播地址或多播地址的数据报复制一份传给环回接口,因为广播传送和多播传送的定义(第12章)包含主机本身。任何传给该主机IP地址的数据均送到环回接口

网络层把一份数据报传送给环回接口,就像传给其他链路层一样,只不过环回接口把它返回到IP的输入队列中送给主机本身IP地址的IP数据报一般不会出现在相应的网络上。例如,在一个以太网上,分组一般不被传出去然后读回来。某些BSD以太网的设备驱动程序的注释说明,许多以太网接口卡不能读回它们自己发送出去的数据。由于一台主机必须处理发送给自己的IP数据报,因此图示的过程是最为简单的处理办法。

环回接口处理IP数据报的过程

2.8 最大传输单元MTU

以太网和802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492。链路层的这个特性称作MTU,最大传输单元。

如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就需要进行分片(fragmentation),把数据报分成若干片,这样每一片都小于MTU。点到点的链路层(如SLIP和PPP)的MTU并非指的是网络媒体的物理特性。它是一个逻辑限制,目的是为交互使用提供足够快的响应时间IP包在路径上可能会多次分片,只有在目的地进行分片重组装

2.9 路径MTU

那么每个网络的链路层就可能有不同的MTU,两台通信主机路径中的最小MTU,被称作路径MTU。两台主机之间的路径MTU不一定是个常数,它取决于当时所选择的路由。而选路不一定是对称的(从A到B的路由可能与从B到A的路由不同),因此路径MTU在两个方向上不一定是一致的。

RFC1191描述了路径MTU的发现机制,即在任何时候确定路径MTU的方法。在11.6节中,我们将看到ICMP的不可到达错误就采用这种发现方法。在11.7节中,还会看到traceroute程序也是用这个方法来确定到达目的节点的路径MTU。在11.8节和24.2节,将介绍当产品支持路径MTU的发现方法时,UDP和TCP是如何进行操作的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值