第三章 数据链路层
# 第三章 数据链路层
如何将数据传送到另一个网络?
# 概述
本节课我们对数据链路层进行概述,我们首先来看看数据链路层在网络体系结构中的地位。如图所示主机h1给主机h2发送数据,中间要经过三个路由器和电话网、局域网以及广域网等多种网络。
从5层协议原理体系结构的角度来看,主机应具有体系结构中的各个层次,而路由器只需具有体系结构中的下面三层,各设备通过物理层下面的传输媒体进行互联,当主机h1向h2发送数据时,数据的流动如图所示:
- 主机h1将在发送的数据逐层封装后,通过物理层将构成数据包的个比特转换为电信号,发送到传输媒体,数据包进入路由器后,由下往上逐层解封到网络层。
- 路由器根据数据包的目的网络地址和自身转发表,确定数据包的转发端口,然后从网络层向下逐层封装数据包,并通过物理层将数据包发送到传输媒体
- 数据包最终到达主机h2时,还要由下往上逐层解封,最终解封出主机h1所发送的数据。
上述过程我们在第一章的计算机网络体系结构,分层思想举例那节课中就介绍过了,然而当我们专门研究数据链路层的问题时,在大多数情况下,我们可以只关心数据链路层,而不考虑网络体系结构的其他各层。
换句话说,我们可以想象数据包只在数据链路层,从左向右沿水平方向传送。从数据链路层来看,主机h1到h2的通信,可以看成是在4段不同的链路上的通信组成的。
所谓链路,就是从一个节点到相邻节点的一段物理线路,中间没有任何其他的交换节点。要在链路上传输数据,仅有链路还不够,还需要一些通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到电路上,就构成了数据链路。
在数据链路层上传输的数据包又称为帧,也就是说数据链路层以帧为单位传输和处理数据。
接下来我们介绍数据链路层的三个重要问题,他们是封装成帧,差错检测,可靠传输。首先来看封装成帧。如图所示,两台主机通过一段链路互联,两台主机都会对所发送或接收的数据包进行5个层次的封装或解封。
- 发送方将待发送的数据通过应用层封装成为应用层协议数据单元,然后交付给运输层,
- 运输层为其添加运输层协议首部,使之成为运输层协议数据单元,然后交付给网络层,
- 网络层为其添加网络层协议首部,使之成为网络层协议数据单元,然后交付给数据链路层,
- 数据链路层给网络层协议数据单元,添加一个数据链路层协议首部简称为帧头,还要给其添加一个帧尾。
- 我们将数据链路层给网络层交付的协议数据单元,添加帧头和帧尾的操作成为封装成帧。添加帧头和帧尾的目的都是为了在链路上以帧为单元来传送数据,也就是为了实现数据链路层本身的功能。
- 例如这是以太网版本2的MAC帧格式,这三个字段是帧头,该字段是帧尾,而这个字段是上层交付的协议数据单元。
再来看差错检测,发送方将封装好的帧通过物理层发送到传输媒体,帧在传输过程中遭遇干扰后可能会出现误码,也就是比特0可能变成了比特1,反之亦然。
那么大家通过动画演示,可以很容易看出正在传输过程中出现了误码,但是接收方主机如何判断真在传输过程中是否出现了误码,这可以通过检测码来发现。
发送方在发送帧之前,基于待发送的数据和检错算法,计算出检错码,并将其封装在帧尾。例如以太网版本2的MAC帧的帧尾,就是4字节的帧检验序列FCS字段。要写入该字段的内容,也就是我们所说的检错码:
接收方主机收到帧后,通过检错码和检错算法,就可以判断出真在传输过程中是否出现了误码。
再来看可靠传输,接收方主机收到有误码的帧后,是不会接受该帧的,将其丢弃。如果数据链路层向其上层提供的是不可靠服务,那么丢弃就丢弃了,不会再有更多措施。如果数据链路层向其上层提供的是可靠服务,那么就还需要其他措施来确保接收方主机还可以重新收到被丢弃的帧的正确副本。
换句话说,尽管误码是不能完全避免的,但若能实现发送方发送什么,接收方最终都能收到什么?就称为可靠传输。
封装成帧,差错检测,可靠传输是数据链路层中最基本最重要的问题。我们在后面的课程中还会详细介绍,目前只要求同学们知道这三个问题的大概意思即可。需要说明的是我们在介绍这三个问题的时候,使用的是点对点信道的数据链路层来举例的。
对于使用广播信道的数据链路层,除了包含这三个问题外,还有一些其他需要解决的问题,如图所示,主机abcde通过一根总线进行互联,主机a要给主机c发送帧,代表帧的信号,会通过总线传输到总线上的其他各主机,那么主机bde如何知道所收到的帧不是发送给他们的,而主题c又如何知道所收到的帧恰恰是发送给自己的,相信大家能够想到地址或者说编制的问题,也就是将帧的目的地址添加在帧中一起传输。
例如这是以太网版本2的MAC帧格式,其手部中的三个字段中有两个字段和地址相关,一个是目的地址字段,另一个是源地址字段。
除了编制问题外,再来看下面这个问题,当总线上多台主机,同时使用总线来传输帧时,传输信号就会产生碰撞,这是采用广播信道的共享式局域网不可避免的。以太网采用的协调方法是使用一种特殊的协议,CSMA/CD,也就是载波监听多点接入/碰撞检测。
随着技术的发展,交换技术的成熟和成本的降低,具有更高性能的需要点对点联络和链路层交换机的交换式局域网,在有线领域已完全取代了共享式局域网,那么网络中的交换机又是如何转发帧的,另外由于无线信道的广播天性,无线局域网仍然使用的是共享信道技术,例如802.11局域网采用的媒体接入控制协议是CSMA/CA,也就是载波监听多点接入/碰撞避免,它的工作原理又是怎样的,上述这些内容都是数据链路层中比较重要的问题
# 3.2 封装成帧
所谓封装成帧就是指数据链路层给上层交付下来的协议数据单元,添加帧头和帧尾,使之成为帧。
例如下图所示在帧头和帧尾中包含有重要的控制信息,例如这是以太网版本2的MAC帧格式,这是上层交付下来的协议数据单元,这是帧头,这是帧尾,这是点对点协议PPP的帧格式,这是上层交付下来的协议数据单元,这是帧头,这是帧尾。
发送方的数据链入层将上层交付下来的协议数据单元封装成帧后,还要通过物理层将构成帧的个比特转换成电信号,发送到传输媒体。那么接收方的数据链路层如何从物理层交付的比特流中提取出一个个的帧呢?例如这一串比特流是一个帧吗?这一串比特流是一个帧吗?实际上帧头和帧尾的作用之一就是帧定界。
例如这是PPP帧的格式,在其帧头和帧尾中各包含有一个长度为1字节的标志字段,其作用就是帧定界。假设发送方发送的是PPP帧,比特流中红色部分是帧定界标志,那么接收方的数据链路层就可以依据帧定界标志,从物理层交付的比特流中提取出一个个的帧
需要说明的是并不是每一种数据链路层协议的帧都包含有帧定界标志。例如这是以太网版本2的MAC帧格式,在其帧头和帧尾中并没有包含帧定界标志。那么接收方又是如何从物理层交付的比特流中提取出一个个的以太网帧?实际上以太网的数据链路层封装好MAC帧后将其交付给物理层,物理层会在MAC帧前面添加八字节的前导码,然后再将比特流转换成电信号发送。前导码中的前7个字节为前同步码,作用是使接收方的时钟同步,之后的1字节为帧开始定界符,表明其后面紧跟着的就是MAC帧。
另外以太网还规定了帧间间隔时间为96比特的发送时间,因此MAC帧并不需要帧结束定界符,需要说明的是帧间间隔还有其他作用。我们在后续课程中再进行介绍。
接下来我们介绍透明传输的问题,透明传输是指数据链路层对上层交付的传输数据并没有任何限制,就好像数据链路层不存在一样。我们来举例说明,这是发送方数据链路层收到其上层交付的协议数据单元,给其添加帧头和帧尾,使其成为帧。为了简单起见,我们只画出了帧头和帧尾中的帧定界标志,帧定界标志也就是一个特定数值。
请大家思考一下,如果在上层交付的协议数据单元中,恰好也包含了这个特定数值,接收方还能正确接收该帧吗?回答是否定的。如图所示,接收方在收到第一个帧定界标志时,认为这是帧的开始,这并没有错误。当接收方再次接收到帧定界标志时,会误认为帧结束了
如果数据链路层不采取其他措施,来避免接收方对帧是否结束的误判,就不能称为透明传输。也就是说数据链入层对上层交付的协议数据单元有限制,其内容不能包含帧定界符,很显然这样的数据链路层没有什么使用价值。
实际上各种数据链路层协议一定会想办法来解决这个问题。例如在发送帧之前,对帧的数据部分进行扫描,每出现一个帧定界符,就在其前面插入一个转义字符,接收方数据链路层在物理层交付的比特流装提取帧,遇到第一个帧定界符时,认为这是帧的开始。当遇到转义字符时就知道其后面的一字节内容虽然与帧定界符相同,但它是数据,而不是啊定界符。剔除转义字符后,将其后面的内容作为数据继续提取,对于这个转义字符也是相同的处理。当再次提取到帧定界符时,表明这是帧的结束。
请大家再来思考一下这种情况。在上层交付给数据链路层的协议数据单元中,既包含了帧定界符,又包含了转义字符,应该怎么处理?
方法仍然是在发送帧之前对帧的数据部分进行扫描,每出现一个帧定界符或转义字符,就在其前面插入一个转义字符,需要说明的是转义字符是一种特殊的控制字符,其长度为一个字节,10进制值为27,而并不是E、S以及C这三个字符。我们刚刚介绍的是面向字节的物理链路,是用字节填充或称字符填充的方法来实现透明传输。
对于面向比特的电路,应该使用比特填充的方法来实现透明传输。例如这是某个点对点协议的帧,这是帧的数据部分,这是帧的尾部。为了简单起见,在帧手部和尾部中仅给出了帧定界标志,而未给出其他控制字段,而帧的数据部分出现了两个帧定界标志,但它们实际上是数据,而不是帧定界。在发送前可以采用0比特填充法,对数据部分进行扫描,每5个连续的比特1后面就插入1个比特0**,这样就确保了帧定界在整个帧中的唯一性,也就可以实现透明传输。接收方的数据链路层,从物理层交付的比特流中提取帧时,将帧的数据部分中的每5个连续的比特1后面的比特0剔除即可。
接下来我们来做一个有关0比特填充的练习题,这是计算机专业考研全国统考计算机网络部分,2013年的题37
题目中所给的高级数据链路控制协议HDLC采用帧头和帧尾中的标志字段作为帧定界,旗帜为01111110。Hdlc为了实现透明传输,采用0比特填充法,也就是每5个连续1后面插入1个比特0如下所示。因此选项a正确
最后还要提醒大家,为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大一些。如图所示帧的数据部分的长度应远大于帧头和帧尾的程度,这样才能提高帧的传输效率。因为仅层数据链路层来看,帧的数据部分才是帧正要传输的数据,帧头和帧尾是为了实现数据链路层功能而额外添加的。当然了,考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,称为最大传送单元MTU
小结:
# 3.3 差错检测
我们知道实际的通信链路都不是理想的,比特在传输过程中可能会产生差错,1可能变成0,而0也可能变成1,这称为比特差错。如图所示。比特流在传输过程中,由于受到各种干扰,就可能会出现比特差错或称为误码。在一段时间内传输错误的比特占所传输比特总数的比率成为误码率BER。大家可以通过动画演示,清楚的看到比特在传输过程中出现了错误,但是接收方的数据链路层又是通过怎样的方法才能知道?
使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一
例如。这是以太网版本2的MAC帧格式,其帧尾中包含了一个长度为4字节的帧检验序列FCS字段,其作用就是让接收方的数据链路层检查帧在传输过程中是否产生了误码,这是点对点协议PPP的帧格式,其帧尾中也包含了一个长度为两字节的帧检验序列,FCS字段,其作用也是让接收方的数据链路层检查正在传输过程中是否产生了误码。
# 奇偶校验
接下来我们介绍奇偶校验这种比较简单的检测方法,在待发送的数据后面添加一位奇偶校验位,使整个数据包括所添加的校验位在内中的1的个数为基数这称为基教验,或为偶数这称为偶校验。我们来举例说明,这是待发送的数据,假设收发双方约定采用基校验,那么在数据后面添加的校验位应该为比特1,使得比特一的总数为基数,假设传输过程中产生了一位误码,我们用红色表示,接收方对收到的比特流进行基校验,发现比特1的总数为偶数而不是基数,就知道传输过程中发生了误码。
- 换句话说,采用基校验,若比特1的数量的基性改变,可以检查出错误,但是如果传输过程中产生了两位误码,接收方对收到的比特流进行机校验,发现比特1的总数为基数,就误认为传输过程中没有发生误码。换句话说,采用基校验,若比特1的数量的奇性不改变,是无法检查出错误的。
- 假设收发双方约定采用偶校验,那么在数据后面添加的校验位应该为比特0,使得比特1的总数为偶数,假设传输过程中产生了1位误码,接收方对收到的比特流进行偶校验,发现比特1的总数为基数而不是偶数,就知道传输过程中发生了误码。换句话说,采用偶校验若比特1的数量的偶性改变,可以检查出错误,但是如果传输过程中产生了两位误码,接收方对收到的比特流进行偶校验,发现比特1的总数为偶数,就误认为传输过程中没有发生误码。换句话说,采用偶校验,若比特1的数量的偶性不改变,是无法检查出错误的。
通过本例可以看出采用奇偶校验,如果有奇数个位发生误码,则奇偶性会发生变化,也就是奇变偶者是偶变奇,这样就可以检查出误码。而如果有偶数各位发生误码,则奇偶性不会发生变化,这是因为每个误码对奇偶性的影响相互抵消了,这样就要无法检查出误码,也称为漏检。由于奇偶校验的漏检率比较高,因此计算机网络的数据链路层一般不会采用这种检测方法。
# 循环冗余校验CRC
接下来我们介绍循环冗余校验CRC,这是一种具有很强检测能力的检测方法,漏检率极低:
- 收发双方约定好一个生成多项式
- 发送方基于代发送的数据和生成多项式计算出差错检测码,称为冗余码,并将其添加到带传输数据的后面一起传输。
- 接收方通过生成多项式来计算收到的数据是否产生了误码。
我们来看发送方的操作,是用除法来计算冗余吗,待发送的数据作为被除数的一部分,后面添加生成多项式最高次数个0,已构成被除数,生成多项式各项系数构成的比特串作为除数进行除法,得到商和余数,余数就是所计算出的冗余码,将其添加到待发送数据的后面一起发送。需要注意的是冗余码的长度与生成多项式最高次数相同,而商仅作为标记,防止计算过程中对错位。
再来看接收方的处理,也是做除法,被除数就是接收到的数据,除数仍是生成多项式各项系数构成的比特串,进行除法,得到商和余数。如果余数为0,可判定传输过程没有产生误码,否则可判定传输过程产生了误码。
下面我们对生成多项式举例说明,这是一个生成多项式,这是该生成多项式的完整形式,生成多项式各项系数构成的比特串,就是我们做除法时所用到的除数,这是常用的生成多项式,使用这些生成多项式进行crc校验,可以达到较好的检测效果,也就是漏检率比较低。需要注意的是crc,算法要求生成多项式,必须包含最低次项。
接下来我们来做一个练习,该题给定了待发送的信息和一个生成多项式,要求计算余数。我们使用之前介绍的除法来计算。
第一步,构造被除数。在待发送信息后面添加生成多项式最高次数个0,就可以构造出被除数。这是待发送信息,这是添加生成多项式最高次数个0。
第二步,构造除数,生成多项式各项系数构成的比特串就是除数。
第三步做除法,在该位做标记,将除数移过来,然后进行异或运算,将该位落下来,在该位做标记,一表示够除,将除数移过来,然后进行异或运算,将单位落下来,在单位做标记,零表示不够除,再将单位落下来,在单位做标记,一表示够除,将除数移过来,然后进行一会运算,将单位落下来,在该位做标记,零表示不够除,再将单位落下来在单位做标记,一表示够除,将除数移过来,然后进行异或运算,得到余数为一。
第4步,检查余数余数的位数应与生成多项式最高次数相同,如果位数不够,则在余数前补零来凑足位数,将余数添加到待发送信息的后面
就可以发送了。我们再来做一个练习。该题给定了接收方收到的信息和一个生成多项式,要求判断传输过程是否产生了误码。我们给出以下步骤,请同学们参照之前的除法过程计算余数,然后根据余数是否为0,来判断传输过程是否产生了误码
- 检错码只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误。
- 要想纠正传输中的差错,可以使用冗余信息更多的纠错吗?进行前向纠错,但纠错码的开销比较大,在计算机网络中较少使用。
- 循环冗余校验crc有很好的检错能力,漏检率非常低,虽然计算比较复杂,但非常易于用硬件来实现,因此被广泛应用于计算机网络的数据链路层。
- 在计算机网络中通常采用我们后续课程中将要讨论的检错重传方式来纠正传输中的差错,或者仅仅是丢弃检测到差错的帧,这取决于数据链路层向其上层提供的是可靠传输服务,还是不可靠传输服务。
# 3.4 可靠传输
# 3.4.1 可靠传输基本概念
本节课我们介绍可靠传输的基本概念。
通过上节课的学习,我们已经知道使用差错检测技术,例如循环冗余校验crc,接收方的数据链路层,就可以检测出帧在传输过程中是否产生了误码,也就是出现比特错误。如下所示,帧在传输过程中受到干扰,产生了误码。接收方的数据链路层通过帧尾中的帧检验序列、FCS字段的值,也就是检测可以检测出帧中出现了比特差错,那么接下来该如何处理呢?
这取决于数据链路层向其上层提供的服务类型。如果提供的是不可靠传输服务,则仅仅丢弃有误码的帧,其他什么也不做。
如果提供的是可靠传输服务,那就还要想办法实现发送端发送什么,接收端就收到什么。例如接收方可以给发送方发送一个通知帧,告诉他之前发送的帧产生了误码,请重发。发送方收到通知后重发之前产生了误码的帧即可。实际上可靠传输的实现并没有我们想象的这么简单。试想一下,这个通知帧如果也出现了误码,又会怎么样?
本节课我们不会深入讨论实现可靠传输的具体方法,而是介绍可靠传输的基本概念。在后面的课程中,我们会详细介绍三种实现可靠传输的方法。一般情况下有线链路的误码率比较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务,即使出现了误码,可靠传输的问题,由其上层处理。
然而对于无线链路,由于其容易受到干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务。
需要说明的是比特差错只是传输差错中的一种。从整个计算机网络体系结构来看,传输差错还包括分组丢失,分组失序以及分组重复。请注意,此处我们将帧的称呼改为了分组,这意味着传输差错不仅仅局限于数据链路层的比特差错。
我们来举例说明,主机h6给主机h2发送的分组,到达了路由器R5,由于此时R5的输入队列快满了,R5根据自己的分组丢弃策略,将该分组丢弃,这是一种分组丢失的情况。
再来看分组失序的例子,主机h6依次给主机h2发送了三个分组,但他们并未按照发送顺序依次到达H2,也就是说最先发送的分组未必最先到达。
再来看分组重复的例子,主机H6给主机H2发送的分组,由于某些原因在网络中滞留了没有及时到达H2,这可能造成H6对该分组的超时重发,重发的分组到达H2一段时间后滞留在网络中的分组又到达了H2,这就会造成分组重复的传输差错。
分组丢失,分组失序以及分组重复这些传输差错,一般不会出现在数据链路层,而会出现在其上层。因此可靠传输服务并不仅局限于数据链路层,其他各层均可选择实现可靠传输服务。例如这是tcpip的4层体系结构,如果网络接口层使用的是802.11无线局域网,那么其数据链路层要求实现可靠传输,如果网络接口层使用的是以太网,那么其数据链路层不要求实现可靠传输,网际层中的IP协议向其上层提供的是无连接不可靠的传输服务。运输层中的TCP协议向其上层提供的是面向连接的可靠传输服务,而UDP协议向其上层提供的是无连接不可靠的传输服务,最后需要提醒大家注意,可靠传输的实现比较复杂,开销也就比较大,是否使用可靠传输取决于应用需求。
小结
# 3.4.2 可靠传输的实现机制 — 停止-等待协议
从本节课开始,我们将用几次课的时间来介绍三种可靠传输的实现机制,它们是停止等待协议SW,回退N帧协议GBN,选择重传协议SR。需要提醒大家注意的是,这三种可靠传输实现机制的基本原理,并不仅限于数据链路层,可以应用到计算机网络体系结构的各层协议中,希望同学们在学习时不要把思维局限在数据链路层,而应放眼于整个网络体系结构。
本节课我们介绍停止等待协议,如图所示,收发双方基于互联网进行通信,而不是局限在一条点对点的数据链路,纵坐标为时间。
发送方给接收方发送数据分组,接收方收到后对其进行差错检测,
若没有误码,则接受该数据分组,并给发送方发送确认分组,简称为ack。
发送方收到对所发送数据分组的确认分组后,才能发送下一个数据分组。
假设这个数据分组在传输过程中出现了误码,接收方收到后对其进行差错检测,发现了误码,则丢弃该数据分组,并给发送方发送否认分组,简称为nak。
发送方收到对所发送数据分组的否认分组后,就知道了之前自己所发送的数据分组出现了差错,而被接收方拒绝,于是立刻重传该数据分组。
因此发送方每发送完一个数据分组后,并不能立刻将该数据分组从缓存中删除,只有在收到帧对该数据分组的确认,分组后才能将其从缓存中删除。
看来每发送完一个数据分组后,就停止发送下一个数据分组,等待来自接收方的确认分组或否认分组。若收到确认分组,则可继续发送下一个数据分组。
若收到否认分组,则重发之前发送的数据分组,这样就要实现了发送方发送什么,接收方最终都能收到什么,也就是所谓的可靠传输。
但实际情况远比我们想象的要复杂。来看这种情况,发送方给接收方发送数据分组,然而该数据分组在传输过程中丢失了,需要说明的是对于数据链路层点对点信道而言,不太容易出现这种情况,但对于多个网络,通过多个路由器互联的复杂互联网环境而言,这种情况是会经常出现的。
对于这种情况,接收方既然收不到数据分组,那么也就不会无缘无故的发送确认或否认分组。如果不采取其他措施,发送方就会一直处于等待接收方确认或否认分组的状态。为了解决该问题,可以在发送方发送完一个数据分组时,启动一个超时计时器。若到了超时计时器所设置的重传时间,而发送方仍收不到接收方的确认或否认分组,则重传原来的数据分组,这就叫做超时重传。一般可将重穿时间选为略大于从发送方到接收方的平均往返时间。
如图所示发送方超时重传之前所发送的数据分组,接收方正确接收重传的数据分组后,给发送方发送确认分组,发送方收到确认分组后,发送下一个数据分组,接收方正确接收该数据分组后,给发送方发送确认分组,到目前为止,貌似基于停止等待,使用确认或否认分组,再加上超时重传的手段,就可以实现可靠传输了
但请大家再深入的思考一下,是否还会出现目前这些手段不足以应对实现可靠传输的其他情况?来看这种情况。既然发送方发送的数据分组可能丢失,那么接收方发送的确认或否认分组就也有可能丢失。例如发送方发送了一个数据分组,接收方正确接收该数据分组后,给发送方发送确认分组,但该确认分组在传输过程中丢失了,这必然会造成发送方对之前所发送数据分组的超时重传,假设重传的数据分组也正确到达了接收方。那么现在问题来了,接收方如何判断该数据分组是否是一个重复的分组?
为了避免分组重复这种传输错误,必须给每个数据分组带上序号。例如该数据分组的序号为0,对于停止等待协议,由于每发送一个数据分组,就进行停止等待,只要保证每发送一个新的数据分组,其序号与上次发送的数据分组的序号不同就可以了。因此用一个比特来编号就够了。即序号0和1,这样根据数据分组的序号,接收方就可以判断出该数据分组是否是重复的,接收方丢弃重复的数据分组,并给发送方发送帧对该数据分组的确认分组,以免发送方对该数据分组的再次超时重传。
发送方收到帧对0号数据分组的确认分组,就可以发送下一个数据分组了,其序号为1,接收方正确收到1号数据分组后,给发送方发送确认分组,我们通过确认分组丢失的情况,引出了给数据分组编号的问题。请大家思考一下,既然数据分组需要编号,那么确认分组是否也需要编号?
来看这种情况,发送方 发送0号数据分组,接收方正确接收后,给发送方发送确认分组,由于某些原因,该确认分组迟到了,这必然会导致发送方对0号数据分组的超时重传。在重传的0号数据分组的传输过程中,发送方收到了迟到的确认分组,于是发送一号数据分组,接收方收到重传的零号数据分组后,发现这是一个重复的数据分组,将其丢弃,并针对该数据分组给发送方发送确认分组,以免发送方再次超时重传该数据分组。现在问题来了,我们可以非常清楚的看到,这是一个对0号数据分组的重复确认,但是发送方又如何知道呢?如果不采取其他措施的话,发送方会误认为这是对1号数据分组的确认,如果对确认分组也进行编号,就可以使发送方避免这种误判。如图所示该确认分组的序号为0,发送方通过确认分组的序号,知道这是一个重复的确认分组,忽略即可。接收方正确接受一号数据分组后,给发送方发送帧对该数据分组的确认,分组其序号为一,发送方收到该确认分组后,发送下一个数据分组,序号为0。
请注意该数据分组与之前序号为0的数据分组,不是同一个数据分组,我们用给确认分组编号的方法,解决了确认迟到所导致的重复确认的问题。需要说明的是对于数据链路层的点对点信道,往返时间比较固定,不会出现确认迟到的情况。
因此如果只在数据链路层实现停止等待协议,可以不用给确认分组编号。接下来我们对停止等待协议的一些注意事项进行一下小结
- 接收端检测到数据分组有误码时,将其丢弃,并等待发送方的超时重传。但对于误码率较高的点对点链路,为使发送方尽早重传,也可给发送方发送否认分组。
- 为了让接收方能够判断所收到的数据分组是否是重复的,需要给数据分组编号,由于停止等待协议的停等特性,只需一个比特编号就够了,即序号0和1
- 为了让发送方能够判断所收到的确认分组是否是重复的,需要给确认分组编号,所用比特数量与数据分组编号所用比特数量一样,数据链路层一般不会出现确认分组迟到的情况,因此在数据链路层实现停止等待协议,可以不用给确认分组编号,
- 超时计时器设置的重装时间应仔细选择,一般可将重装时间选为略大于从发送方到接收方的平均往返时间。
- 在数据链路层点对点的往返时间比较确定,重传时间比较好设定。然而在运输层,由于端到端往返时间非常不确定,设置合适的重装时间有时并不容易,我们将在第5章有关TCP协议的课程中详细讨论该问题。
接下来我们来看看停止等待协议的信道利用率。如图所示,横坐标为时间。为了简单起见,假设收发双方之间是一条直通的信道,发送方发送完一个数据分组后,就要停止发送,并等待接收方对该数据分组的确认。当收到确认分组后可以发送下一个数据分组,如此反复进行,这一段时间是发送方发送数据分组所耗费的发送时延TD,这一段时间是收发双方之间的往返时间RTT,这一段时间是接收方发送确认分组所耗费的发送时延TA,途中忽略了接收方对数据分组的处理时延,以及发送方对确认分组的处理时延,这是使用停止等待协议的发送方,从发送一个数据分组开始,到可以发送下一个数据分组为止,所经历的总时间,因为仅仅是在时间TD内才用来传送有用的数据,也就是数据分组。因此信道的利用U可以用下式来计算,
TA一般都远小于TD,可以忽略,当儿RTT远大于TD时,信道利用率会非常低。
我们来举例说明,假设信道长度为2000公里,数据分组长度为1500字节,发送速率为10兆比特每秒,忽略TA,因为TA一般都远小于TD,可以计算出信道利用率约为5.66%,这是数据分组的发送时延TD,这是往返时间RTT。
如果将发送速率提高到100兆比特每秒,则可计算出信道利用率仅为0.6%。这是数据分组的发送时延TD,这是往返时间RTT
可以看出当往返时延rtt远大于数据帧发送时延TD时,例如使用卫星链路,信道利用率非常低,若出现重传,则对于传送有用的数据信息来说,信道利用率还要降低。为了克服停止等待协议信道利用率很低的缺点,就产生了另外两种协议及后退N帧协议GBN,和选择重穿协议SRr。
最后我们来做一道有关停止等待协议的练习题。这是计算机专业考研全国统考计算机网络部分2018年的题36,
答案是d选项,我们一起来分析该题,根据提议可以画出停止等待协议的示意图,这一段是数据帧的发送时延,这一段是数据帧的最后一比特信号,从主机甲传播到主机乙所耗费的传播实验,也就是信号在两主机之间的单程传播实验。同理,这一段也是单程传播时延,停止等待协议的信道利用率等于数据帧的发送时延除以数据帧发送时延加端到端往返时延,也就是两倍的单程传播时延,设数据帧长度为x个比特,将其与题目所给的相关已知量代入上式可得解得x等于800比特
像停止等待协议这种通过确认和重传机制实现的可靠传输协议,常称为自动请求重传协议ARQ,意思是重传的请求是自动进行的,因为不需要接收方显示的请求,发送方重传某个出错的分组
小结
# 3.4.3 回退N帧协议
在上节课中我们介绍了停止等待协议,如图所示,发送方每发送完一个数据分组,就要停止发送,并等待接收方的确认分组。当收到接收方的确认分组后,才能发送下一个数据分组,如此反复进行。
从图中可以看出,每发送完一个数据分组,至少要等待一个收发双方之间的往返时间。当往返时间较大时,例如卫星链路,停止等待协议的信道利用率很低,若出现超时重传,则信道利用率更低。
如图所示,如果发送方在收到接收方的确认分组之前,可以连续发送多个数据分组,则可大大提高信道利用率。这是一种流水线式的传说。就本例而言,同等条件下,在相同的时间内,使用停止等待协议的发送方,只能发送一个数据分组,而采用流水线传输的发送方可以发送5个数据分组。
本节课我们介绍回退N帧协议,该协议在流水线传输的基础上,利用发送窗口,来限制发送方可连续发送分组的个数。我们来举例说明,假设采用三个比特给分组编序号,因此序号的取值范围是0~7,如图所示,这是收发双方各自的分组序号,当序号增加到7,下一个序号又从0开始,发送方要维持一个发送窗口,序号落在发送窗口内的数据分组,可被连续发送,而不必等收到接收方的相应确认分组后再发送。发送窗口的尺寸即为WT。对于本例其取值范围是大于1,小于等于2^3^-1,其中的3是构成分组序号的比特数量,本例取wt的值为5,如果WT的值取为一,则是停止等待协议。如果WT的值超过取值范围的上限,则会造成严重的错误,我们之后会举例详细说明。
如图所示序号落在发送窗口内的这5个数据分组,可以连续发送,而序号落在发送窗口外的数据分组,不允许发送。
接收窗口的尺寸即为WR。对于回退n帧协议,其取值只能为一,这一点与停止等待协议是相同的。如图所示序号落在接收窗口内的数据分组,允许接收,而序号落在接收窗口外的数据分组不允许接收。
我们首先来看最简单的情况,也就是无差错的情况:
- 发送方将序号落在发送窗口内的0~4号数据分组,依次连续发送出去
- 他们经过互联网的传输,正确到达了接收方,也就是没有出现乱序和误码
- 接收方按序接收他们。每接收一个接收窗口就向前滑动一个位置,并给发送方发送帧对所接收分组的确认分组。
- 0~4号确认分组,经过互联网的传输,正确到达了发送方,每接收一个发送窗口就向前滑动一个位置,这样就有新的序号落入了发送窗口,发送方可以将收到确认的数据分组,从缓存中删除了
- 而接收方可以择机将已接收的数据分组交付上层处理。
接下来我们来看累积确认的概念,使用回退N帧协议的接收方可以采用累积确认的方式,也就是说接收方不一定要对收到的数据分组逐个发送确认,而是可以在收到几个数据分组后,对按序到达的最后一个数据分组发送确认,ackn表示序号为n及以前的所有数据分组都已正确接收了。
我们来举例说明累计确认。发送方将序号落在发送窗口内的0~4号数据分组,依次连续发送出去,他们经过互联网的传输,正确到达了接收方按序接收他们。当接收完0号和1号数据分组后,给发送方发送了一个累积确认ack1,当接收完2~4号数据分组后,又给发送方发送了一个累计确认ack4,假设ack1在传输过程中丢失了,而ack4正确到达了发送方,发送方接收ack4后就知道了,序号为4及之前的数据分组已被接收方正确接收了,于是将发送窗口向前滑动5个位置,这样就有新的序号落入了发送窗口,发送方可以将收到确认的数据分组从缓存中删除了,而接收方可以择机将已接收的数据分组交付上层处理。
从本例可以看出,使用累计确认的其中一个优点,就是即使确认分组丢失,发送方也可能不必重传。例如本例ack1丢失了,但并没有造成一号数据分组的超时重传
使用累计确认还有其他好处。比如可以减小接收方的开销,减少对网络资源的占用等。当然了使用累计确认也有缺点,那就是不能向发送方及时反映出接收方已经正确接收的、数据分组的信息。
接下来我们来看出现差错的情况,发送方将序号落在发送窗口内的这5个数据分组,依次连续发送出去,他们经过互联网的传输到达了接收方,假设他们在传输过程中受到了干扰,其中5号数据分组出现了误码,接收方通过数据分组中的检错码发现了错误,于是丢弃该数据分组。而后续到达的这4个数据分组的序号与接收窗口中的序号不匹配,接收方同样也不能接受他们,将他们丢弃,并对之前按序接收的最后一个数据分组进行确认,也就是发送ack4,每丢弃一个数据分组,就发送一个ack4,这4个ack4经过互联网的传输到达了接收方,发送方之前就接收过ack4,当收到这些重复的ack4时,就知道了之前所发送的数据分组出现了差错,于是可以不等超时计时器超时就立刻开始重传。
至于收到几个重复确认,就立刻重传,由具体实现来决定。在本例中,假设收到这4个重复的确认,并不会触发发送方立刻重传。一段时间后,超时计时器出现超时,发送方将发送窗口内已发送过的这些数据分组全部重传。在本例中,尽管序号为6701的数据分组,之前已经正确的到达接收方,但由于5号数据分组误码不被接受,他们也受到牵连而不被接受。
发送方还要重传这些数据分组,这就是所谓的go back-n也就是回退n帧。可见当通信线路质量不好时,回推N帧协议的信道利用率并不比停止等待协议高。
接下来我们来看看,如果发送窗口的尺寸,WT超过其取值范围的上限会出现什么情况?
对于本例,采用三个比特给分组编序号,wt的最大值为2的三次-1,也就是7,我们故意超过该上限将WT取值为8,发送方将序号落在发送窗口内的0~7号这8个数据分组依次连续发送出去,他们经过互联网的传输,正确到达了接收方,接收方按序正确接收他们号,给发送方发回累计确认ack7。
假设ack7在传输过程中丢失了,这将导致发送方的超时重传重传的0~7号数据分组到达接收方。现在问题来了,接收方根据当前接收窗口内的序号,会对这8个数据分组按序接收,但是接收方之前已经接收过这8个数据分组了,现在是在重复接收,也就是说接收方无法分辨新旧分组,进而会产生分组重复这种传输差错,因此发送窗口的尺寸不能超过其上限。
接下来我们对回退n帧协议的工作原理进行一下小结。发送窗口尺寸wt的取值范围是大于1,小于等于2的n次-1,其中 n是构成分组序号的比特数量,若wt等于1则变回了停止等待协议,若WT>2的n次-1,则会造成接收方无法分辨新旧数据分组的问题。
接收方的接收窗口尺寸WR只能等于1,因此接收方只能按序接收数据分组,发送方可在未收到接收方确认分组的情况下,将序号落在发送窗口内的多个数据分组全部发送出去,接收方只接受序号落在接收窗口内,且无误码的数据分组,并且将接收窗口向前滑动一个位置。与此同时,给发送方发回相应的确认分组。
为了减少开销,接收方不一定每收到一个按需到达且无误码的数据分组,就给发送方发回一个确认分组,而是可以在连续收到好几个按需到达,且无误码的数据分组后,才针对最后一个数据分组发送确认分组,这要成为累计确认,或者可以在自己有数据分组要发送时,才对之前按序接收,无码的数据分组进行捎带确认。
接收方收到未按需到达的数据分组,除丢弃外,还要对最近按序接收的数据分组进行确认。
发送方只有收到对已发送数据分组的确认时,发送窗口才能向前相应滑动。发送方收到多个重复确认时,可在重传计时器超时前尽早开始重传,由具体实现决定,
发送方发送窗口内,某个已发送的数据分组产生超时重发时,其后续在发送窗口内且已发送的数据分组也必须全部重传,这就是回退n帧协议名称的由来。
接下来我们来做一个有关回退n帧协议的练习,这是计算机专业考研全国统考计算机网络部分2009年的提35
答案是选项c大家都选对了吗?题目所给发送方只收到023号帧的确认,这就表明接收方正确接收了0~3号帧,并帧对他们中的每一个发送了确认帧,只不过帧对一号帧的确认帧丢失了,这是题目中的陷阱,但又没有相应的选项,所以迷惑性并不是很大。截止到计时器超时,发送方只收到了帧对023号帧的确认,而发送方之前已经发送了0~7号帧,因此应该从4号帧开始重传,即重传之前已经发送过的4567号帧,共计重传4个帧。
我们再来画个示意图,以便更容易理解该题。假设这是帧可用的序号,这是发送窗口,发送方将序号落在发送窗口内的0~7号数据帧依次发送出去,当收到帧对0号数据帧的确认帧ack零时,发送窗口向前移动一个位置。若收到帧对1号数据帧的确认帧ack一时发送窗口也会向前移动一个位置,只不过 ack1在传输过程中丢失了,当收到帧对2号数据帧的确认帧ack2,发送窗口向前移动两个位置,将序号1和2全部移出发送窗口。
当收到帧对三号数据帧的确认帧ack3,发送窗口向前移动一个位置,之后发送方出现了超时,将发送窗口内已发送但未收到确认的4567号数据帧依次重传,
本节课的内容小结如下,回退N帧协议在流水线传输的基础上,利用发送窗口来限制发送方连续发送数据分组的数量,是一种连续ARQ协议。在协议的工作过程中,发送窗口和接收窗口不断向前滑动,因此这类协议要称为滑动窗口协议。由于回退n帧协议的特性,当通信线路质量不好时,其信道利用率并不比停止等待协议高。下节课我们将介绍选择重传协议,他是对回退N帧协议的改进。
# 3.4.4 选择重传协议
在上节课中我们介绍了回退n帧协议,回退n帧协议的接收窗口尺寸WR只能等于1,因此接收方只能按需接收正确到达的数据分组,一个数据分组的误码,就会导致其后续多个数据分组不能被接收方按序接收而丢弃,尽管他们没有误码,这必然会造成发送方对这些数据分组的超时重传,显然这是对通信资源的极大浪费。
为了进一步提高性能,可设法只重传出现误码的数据分组。因此接收窗口的尺寸w不应再等于一,而应大于1,以便接收方先收下失序到达,但无误码,并且序号落在接受窗口内的那些数据分组,等到所缺分组收齐后,再一并送交上层。这就是本节课所要介绍的选择重传协议。需要注意的是选择重传协议,为了使发送方仅重传出现差错的数据分组,接收方不能再采用累积确认,而需要对每个正确接收到的数据分组进行逐一确认。
下面我们来举例说明,选择重传协议的工作原理。假设采用三个比特给分组编序号,因此序号的取值范围是0~7,如图所示这是发送方的分组序号,这是接收方的分组序号。
当序号增加到7是,下一个序号又从0开始,发送窗口的尺寸,wt的取值范围是大于1,小于等于2的3次方-1次。其中的三是构成分组序号的比特数量,本例取wt的值为4,如图所示序号落在发送窗口内的这4个数据分组可以连续发送,而序号落在发送窗口外的数据分组不允许发送。
接收窗口的尺寸WR的取值,一般情况下可以发送窗口的尺寸WT的取值相同,在本例中其值为4,如图所示序号落在接收窗口内的这4个数据分组允许接收,而序号落在接收窗口外的数据分组不允许接收
发送方将序号落在发送窗口内的这4个数据分组,依次连续发送出去,他们经过互联网的传输陆续到达接收方,但其中的2号数据分组丢失了,只要序号落入接收窗口内,且无误码的数据分组,接收方都会接收。接收方接收0号和1号数据分组,并发送0号和1号确认分组,接收窗口向前滑动两个位置,这样就有4和5这两个新的序号落入接收窗口,接收方接收3号数据分组,并发送3号确认分组,但接收窗口不能向前滑动,因为3号数据分组是未按需到达的数据分组,这些确认分组经过互联网的传输,陆续到达发送方,每按序收到1个确认分组,发送窗口就向前滑动1个位置
发送方接收0号和1号确认分组,发送窗口向前滑动两个位置,这样就有4和5这两个新的序号落入发送窗口,发送方将序号落入发送窗口的4号和5号数据分组发送出去,发送方现在可以将已经收到确认的0号和1号数据分组从发送缓存中删除了,而接收方可择机将以按需接收的0号和1号数据分组交付上层处理
发送方接收三号确认分组,但发送窗口不能向前滑动,因为这是一个未按需到达的确认分组,发送方还未收到他之前的2号确认分组,不过需要记录3号数据分组已收到确认,这样该数据分组就不会超时重发。4号和5号数据分组到达接收方,接受方接受他们,并发送4号和5号确认分组,但接收窗口不能向前滑动,因为他们是未按需到达的数据分组,接收方还未收到他们之前的2号数据分组。
假设在4号和5号确认分组的传输过程中,发送方帧对2号数据分组的重传计时器超时了,发送方重传23号数据分组,4号和5号确认分组陆续到达发送方,发送方接收他们,但发送窗口不能向前滑动,因为他们是未按时到达的确认分组,发送方还未收到他们之前的2号确认分组,不过需要记录4号和5号数据分组已收到确认,这样他们就不会超时重发。
发送方之前重传的二号数据分组到达接收方,接收方接收该数据分组,并发送2号确认分组,接受窗口现在可以向前滑动4个位置,这样就有6701这4个新的序号落入接收窗口。
2号确认分组,经过互联网的传输,到达发送方,发送方接收该确认分组,发送窗口现在可以向前滑动4个位置,这样就有6701这4个新的序号落入发送窗口,发送方现在就可以继续将这4个序号的数据分组依次发送出去了。
接下来我们再来讨论一下,选择重传协议的发送窗口和接收窗口的尺寸问题。发送方的发送窗口尺寸wt必须满足大于1小于等于2的n减一次,其中n是构成分组序号的比特数量。若wt等于1则与停止等待协议相同,若wt>2的n减一次,则会造成接收方无法分辨新旧数据分组的问题。
接收方的接收窗口尺寸,WR必须满足大于一,小于等于wt。若WR等于1则与回退n帧协议相同,若WR大于wt,则没有意义。
下面我们就来看看,如果发送窗口和接收窗口的尺寸超过了他们的取值范围,会出现什么样的情况?我们还是采用三个比特给分组编序号,即序号0~7,发送窗口的尺寸,wt取最大值,接收窗口的尺寸WR也取最大值,也就是wt等于WR=2的3-1次=4。假设我们故意将发送窗口尺寸WT设置为5,相应的将接收窗口尺寸wr也设置为5,看看会出现什么情况。
发送方将序号落入发送窗口内的0~4号这5个数据分组依次发送出去,他们经过互联网的传输,依次到达接收方,接收方接收他们,并发送0~4号确认分组,接收窗口向前滑动5个位置,这样就有56701这5个新的序号落入接收窗口
这些确认分组经过互联网的传输,陆续到达发送方,但其中的0号确认分组丢失了,发送方接收1~4号确认分组,并记录1~4号数据分组已收到确认,发送窗口不能向前移动。
一段时间后,0号数据分组的重传计时器超时了,发送方重传0号数据分组,该数据分组经过互联网的传输到达接收方,其序号0落在接收窗口内,接收方会接收它,但是接收方先前已经正确接收过该数据分组了,如果现在还要接收,那就会出现分组重复这种传输差错。也就是说如果发送窗口和接收窗口的尺寸超过了取值范围,就会使接收方无法分辨新旧数据分组,进而出现分组重复这种传输差错。
接下来我们对选择重传协议的工作原理进行一下小结,这是我们刚刚举例说明过的,发送窗口和接收窗口的尺寸问题,就不再赘述了。发送方可在未收到接收方确认分组的情况下,将序号落在发送窗口内的多个数据分组全部发送出去,接收方可接收未按需到达,但没有误码,并且序号落在接收窗口内的数据分组。
为了使发送方仅重传出现差错的分组,接收方不能再采用累计确认,而需要对每个正确接收到的数据分组进行逐一确认。
接收方只有在按序接收数据分组后,接收窗口才能向前相应滑动。
发送方只有按序收到,对已发送数据分组的确认分组时,发送窗口才能向前相应滑动。
若收到未按需到达的确认分组,应对其进行记录,以防止其相应数据分组的超时重发,但发送窗口不能向前滑动。
接下来我们来做一个有关选择重传协议的练习。这是计算机专业考研全国统考计算机网络部分2011年的题35
答案是选项b,与回退n帧协议不同,选择重穿协议,不支持累计确认,接收方每接收一个数据帧,就会发回相应的确认帧,题目所给收到一号帧的确认,而0号和2号帧依次超时,因此需要重传0号和2号帧。至于发送方已发送的三号数据帧,题目并未给出它的任何其他线索,因此无需考虑3号帧。
我们再来画个示意图,以便更容易理解该题。假设这是帧可用的序号,这是发送窗口,发送方将序号落在发送窗口内的0~3号数据帧依次发送出去之后,收到了1号帧的确认,而0号和2号帧的重传计时器超时,因此需要重传的就是0号和2号这两个帧。
本节课的内容小结如下
# 3.5 点对点协议PPP
本节课我们介绍点对点协议PPP。
点对点协议,PPP是目前使用最广泛的点对点数据链路层协议。请大家想想看,一般的因特网用户是如何接入到因特网的,通常都是要通过连接到某个因特网服务提供者ISP,例如中国电信、中国联通、中国移动这三大运营商才能接入因特网。
这些ISP已经从因特网管理机构申请到了一批IP地址,用户计算机只有获取到ISP所分配的合法IP地址后,才能成为因特网上的主机。
用户计算机与ISP进行通信时所使用的数据链路层协议,通常就是PPP协议。这里需要说明的是在1999年公布的在以太网上运行的PPP协议,即PPP over ethernet,简称为pppoe。它使得ISP可以通过DSL电路调制解调器、以太网等宽带接入技术,以以太网接口的形式为用户提供接入服务。另外点对点协议PPP也广泛应用于广域网路由器之间的专用线路。
用户计算机与ISP进行通信时所使用的数据链路层协议,通常就是PPP协议。这里需要说明的是在1999年公布的在以太网上运行的PPP协议,即PPP over ethernet,简称为pppoe。它使得SP可以通过DSL电路调制解调器、以太网等宽带接入技术,以以太网接口的形式为用户提供接入服务。
PPP协议是因特网工程任务组IEFT在1992年制定的,经过1993年和1994年的修订,现在的PPP协议已成为因特网的正式标准。我们可以在IEFT官方网站的相关页面,搜索并查看PPP协议的相关rfc文档
PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法,主要由以下三部分构成。
- 第一,对各种协议数据报的封装方法,也就是我们之前课程中介绍的封装成帧。
- 第二,链路控制协议lcp,用于建立配置以及测试数据链路的连接。
- 第三,一套网络控制协议ncps,其中的每一个协议支持不同的网络层协议
从网络体系结构的角度看,PPP是数据链路层的协议,他将上层交付下来的协议数据单元封装成PPP帧.
为了支持不同的网络层协议,PPP协议包含了一套网络控制协议ncps,其中的每一个协议支持不同的网络层协议,例如tcpip中的IP novell neteware,网络操作系统中的IPX,苹果公司的apple talk等。
链路控制协议LCP,用于建立配置以及测试数据链路的连接,PPP协议能够在多种类型的点对点链路上运行,例如面向字节的异步联络,面向比特的同步链路。
接下来我们来看看PPP协议的帧格式,帧首部由4个字段构成,帧尾部由两个字段构成,各字段的长度以及帧的数据部分的最大长度如图所示。
帧首和帧尾部中的标志字段是PPP间的定界符,取值为16进制的7E。帧首部中的地址字段取值为16进制的ff,控制字段取值为16进制的03,最初曾考虑以后再对这两个字段的值进行其他定义,但至今也没有给出,可见这两个字段实际上并没有携带PPP帧的信息,帧首部中的协议字段,指明了帧的数据部分,应送交哪个协议处理。
当协议字段取值为16进制的0x0021时,PPP帧的数据部分就是IP数据报,如图所示,
当协议字段取值为16进制的0xc021时,PPP帧的数据部分就是链路控制协议LCP的分组,如图所示,
当协议字段取值为16进制的0x8021 10PPP帧的数据部分,就是网络控制协议ncp的分组,如图所示。
帧尾部中的帧检验序列fcs字段,取值是使用循环冗余校验crc计算出的校验位,用于检查PPP帧是否存在误码。
接下来我们来看看PPP协议是如何解决透明传输问题的。当PPP帧的数据部分出现帧手和帧尾中的标志字段时,如果不采取措施,则会造成接收方对PPP帧是否结束的误判。因为标志字段是PPP帧的定界,符取值为16进制的7E,也就是二进制的0111 1110。
PPP协议实现透明传输的方法,取决于所使用的链路类型。:
如果是面向字节的异步电路,则采用字节填充法,也就是插入转移字符。
如果是面向比特的同步电路,则采用比特填充法,也就是插入比特0。
我们来举例说明字节填充法,也就是以字节7E,作为PPP帧的定制符,以字节为单位来讨论问题。来看发送方对PPP帧数据部分的处理,
- 将出现的每一个7E字节转变成两次节序列7D5E 这相当于在7E字节前插入了转移字节7D,并将7E字节减去16进制的20,
- 将出现的每一个7d字节转变成两字节序列7d5d,
- 在出现的每一个ASCII码控制字符前插入一个7d字节,同时将该字符的编码加上16进制的0x20
- 对于PPP帧的接收方只要进行反变换,即可恢复出原来的PPP帧的数据部分。
我们再来举例说明比特填充法也就是以0111 1110作为PPP帧的定界符,以比特为单位来讨论问题,假设PPP帧的数据部分如图所示,其中包含了两个真定界符,来看发送方对PPP帧数据部分的处理,对帧的数据部分进行扫描,一般由硬件实现,只要发现5个连续的比特1,则立即填充1个比特0,如图所示。
再来看接收方对PPP帧数据部分的处理,对帧的数据部分进行扫描,一般由硬件实现,只要发现5个连续的比特1,就把其后的1个比特0删除,如图所示。
接下来我们来看看PPP协议是如何进行差错检测的,PPP帧的尾部包含有一个两字节的帧检验序列fcs字段,使用循环冗余校验crc来计算该字段的取值。采用的生成多项式如下所示。Rfc1662文档的附录部分,给出了fcs的计算方法的c语言实现。为了减少对CPU的占用,采用查表法来实现fcs的计算范围,如图所示
接收方每收到一个PPP帧就进行crc检验,若crc检验正确,就收下这个帧,反之就要丢弃这个帧,使用PPP的数据链路层,向上不提供可靠传输服务。
最后我们以拨号接入为例,简单介绍一下PPP协议的工作状态,PPP链路的开始和结束状态都是静止状态,这时并不存在物理层的连接。当检测到调制解调器的载波信号,并建立物理层连接后,PPP就进入链路的建立状态。
这时链路控制协议lcp开始协商一些配置选项,若协商成功则进入鉴别状态,若协商失败则退回到静止状态。
所协商的配置选项,包括最大帧长,鉴别协议等,可以不使用鉴别,也可以使用口令鉴别协议pap或挑战握手鉴别协议chap
若通信双方无需鉴别或鉴别身份成功,则进入网络状态,若鉴别失败则进入终止状态,
进入网络状态后,进行ncp配置,配置完成后就要进入打开状态。
PPP链路的两端,通过相互交换网络层特定的ncp分组来进行ncp配置。如果在PPP链路上运行的是IP协议,则使用IP控制协议ipcp来对PPP链路的每一端配置IP模块,例如分配IP地址
只要链路处于打开状态,就可以进行数据通信。当出现故障或链路的一端发出终止请求时,就进入终止状态。
当载波停止后则回到静止状态
本节课的内容小结如下
# 3.6 媒体接入控制的基本概念
本节课我们介绍媒体接入控制的基本概念,如图所示,这是一根同轴电缆,有多台主机连接到这根同轴电缆上,他们共享这跟传输媒体,形成了一个总线型的局域网,各主机竞争使用总线,随机的在信道上发送数据,如果恰巧有两个或更多的站点在同一时刻发送数据,那么信号在共享媒体上就要产生碰撞,即发生了冲突,使得这些站点的发送都失败。例如主机c和主机d同时使用总线来发送数据,这必然会产生所发送信号的碰撞。
共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点,对一个共享传输媒体的占用,也就是媒体接入控制MAC,也可以读作Mark。
媒体接入控制技术主要分为两类,一类是静态划分信道,另一类是动态接入控制。
静态划分信道主要有频分多址,时分多值以及码分多值。
动态接入控制又可以分为两类,一类是受控接入,另一类是随机接入。而受控接入又可分为集中控制和分散控制。
静态划分信道,也就是预先固定分配好信道,这类方法非常不灵活,对于突发性数据传输,信道利用率会很低,通常在无线网络的物理层中使用,而不是在数据链路层中使用。
在集中控制的多点轮巡协议中,有一个主站,以循环方式轮巡每个站点有无数据发送,只有被轮循到的站点才能发送数据。集中控制的最大缺点就是存在单点故障问题,
而在分散控制的令牌传递协议中,各站点是平等的并连接成一个环形网络,令牌也就是一种特殊的控制针,延环逐站传递,接收到令牌的站点才有权发送数据,并且在发送完数据后将令牌传递给下一个站点。
需要说明的是采用令牌传递协议的典型网络有IEEE 802.5令牌环网,IEEE 802.4令牌总线网,光纤分布式数据接口FDDI。这些网络由于市场竞争已逐步退出了历史舞台,
随机接入的特点是所有站点通过竞争,随机的在信道上发送数据,如果恰巧有两个或更多的站点在同一时刻发送数据,那么信号在共享媒体上就要产生碰撞,即发生了冲突,使得这些站点的发送都失败。因此这类协议要解决的关键问题是如何尽量避免冲突,以及在发生冲突后如何尽快恢复通信。
著名的共享式以太网采用的就是随机接入,需要注意的是随着技术的发展,交换技术的成熟和成本的降低,具有更高性能的使用点对点链路和链路层交换机的交换式局域网,在有线领域已完全取代了共享式局域网,但由于无线信道的广播天性,无线局域网仍然使用的是共享媒体技术
# 3.6.2 媒体接入控制-静态划分信道
本节课我们介绍媒体接入控制的其中一类方法,也就是静态划分信道。我们首先介绍信道复用的基本概念。复用是通信技术中的一个重要概念,也就是通过一条物理线路同时传输多路用户的信号。当网络中传输媒体的传输容量大于多条单一性到传输的总通信量时,可利用复用技术在一条物理线路上建立多条通信信道,来充分利用传输媒体的带宽,如图所示,这是三对用户各自使用一条独立的物理线路进行通信,如果在发送端使用复用器,在接收端在使用分用器,这三段用户就可以共享一条物理线路进行通信。
常见的信道复用技术有频分复用fdm,时分复用tdm。波分复用wdm,码分复用CDM。
# 频分复用
首先来看频分复用,如图所示将传输线路的平台资源划分成多个子频带,形成多个子信道,各子信道之间需要留出隔离频1带,以免造成子信道间的干扰。当多路信号输入一个多路复用器时,这个复用器将每一路信号调制到不同频率的载波上,接收端由相应的分用器通过滤波,将各路信号分开,将合成的复用信号恢复成原始的多路信号。很显然频分复用的所有用户同时占用不同的频带资源并行通信
# 时分复用
再来看时分复用。如图所示,横坐标为时间,将时间划分成一个个的时隙,时分复用技术将传输线路的带宽资源按时隙轮流分配给不同的用户,每对用户只在所分配时隙里使用线路传输数据。
时分复用技术,将时间划分成了一段段等长的时分复用帧,每一个时分复用的用户,在每一个时分复用帧中占用固定序号的时隙。如图所示,每一个用户所占用的时隙是周期性出现的,其周期就是时分复用帧的长度,很显然时分复用的所有用户在不同的时间占用同样的频带宽度。
# 波分复用
再来看波分复用,波分复用其实就是光的频分复用,如图所示
这是8路传输速率均为2.5g比特每秒的光载波,其波长均为1310纳米,经光调制后分别将波长变换到1550~1561.2纳米,每个光载波相隔1.6纳米,这8个波长很接近的光载波,经过光复用器,或称合波器就在一根光纤中传输,因此在一根光纤上数据传输的总速率就达到了8*2.5g比特每秒,也就等于20g比特每秒,光信号传输一段距离后会衰减,因此对衰减了的光信号必须进行放大,才能继续传输。现在已经有了很好的掺铒光纤放大器,两个光纤放大器之间的光缆线路长度可达120公里,而光复用器和光分用器或称分拨器之间可以放入4个掺铒光纤放大器,使得光复用器和光分用器之间的无光电转换的距离可达600公里。
# 码分复用
再来看码分复用,码分复用是另一种共享信道的方法,实际上由于该技术主要用于多址接入,人们更常用的名词是码分多址CDMA。同理频分复用和时分复用,同样可用于多址接入,相应的名词是评分多址fdma和10分多址TDMA。
在本课程中,我们不严格区分复用与,多址的概念,可简单理解如下,复用是将单一媒体的平台资源划分成很多子信道,这些子信道之间相互独立,互不干扰。从媒体的整体平台资源上看,每个子信道只占用该媒体平台资源的一部分,多址更确切的应该成为多点接入,他处理的是动态分配信道给用户,这在用户仅仅暂时性的占用信道的应用中是必须的,而所有的移动通信系统基本上都属于这种情况。相反,在信道永久性的分配给用户的应用中,多址是不需要的,例如对于无线电广播或电视广播就是这样。某种程度上平分多址,时分多址,码分多址,可以分别看成是频分复用,时分复用,码分复用的应用
与频分复用和时分复用不同,码分复用的每一个用户可以在同样的时间使用同样的频带进行通信。由于各用户使用经过特殊挑选的不同码型,因此各用户之间不会造成干扰。码分复用最初是用于军事通信的,因为这种系统所发送的信号有很强的抗干扰能力,其频谱类似于白噪声,不易被敌人发现。随着技术进步,码分多址设备的价格和体积都大幅度下降,因而现在已广泛用于民用的移动通信,
在码分多址中,每一个比特时间再划分为m个短的间隔,称为码片,通常m的值是64或128。为了简单起见,在后续的举例中,我们假设M为8。在使用码分多址的每一个站,被指派一个唯一的m比特码片序列,一个站如果要发送比特1,则发送他自己的m比特码片序列。一个站如果要发送比特0,则发送他自己的m比特码片序列的二进制反码。我们来举例说明,假设只派给码分多址系统中某个站点的码片序列为0001 1011该站发送比特1,就是发送自己的码片序列0001 1011。该站发送比特0,就是发送自己的码片序列的二进制反码1110 0100。
为了方便,我们按惯例将码片序列中的0写为-1,1写为正1,则该站点的马片序列是-1, -1,-1、+1、 +1、+1、-1、+1。顺便提一下,这种通信方式称为直接序列扩频DSSS。码片序列的挑选原则如下,
第一,分配给每个站的码片序列,必须各不相同,实际常采用每随机码序列。
第二,分配给每个站的码片序列,必须相互正交,也就是规格化内积为零。零向量s表示占s的码片序列,向量t表示其他任何站的码片序列,两个不同站s和t的码片序列正交,就是向量s和t的规格化内积为0,可写为如下的表达式,向量s和t的规格化内积为0,就是将向量s和t中对应分量相乘,然后相加再除以向量中分量的数量,其结果为0。那么请大家思考一下,任何一个码片向量和该码片向量自己的规格化内机是多少?很显然应该是一。不仅如此,任何一个码片向量和其他各占码片反码的向量的内机也是0,任何一个码片向量和该码片反码的向量的内积是-1。
接下来我们来做一个练习,假设给站s的分配的码片序列为01011101,给站t分配的码片序列为1011 1000,这样的分配正确吗?首先检查码片序列是否各不相同,很显然题目所给的两个码片序列互不相同,满足码片序列挑选原则的第一条。再来检查码片序列是否相互正交。根据题意可知,用向量s表示站s的满屏序列为-1正1-1正1,正1正1-1正1,用向量t表示站t的码片序列为正1-1,正1正1,正111-1,向量s和t的规格化内机计算如下,结果不等于0,不满足码片序列挑选原则的第二条。
接下来我们来看码分多指的应用举例,假设ABCD是码芬多址系统中的4个站点,a站发送比特一,也就是发送自己所分配到的码片序列。为了简单起见,我们用向量a来表示a站的码片序列,b站发送比特0,也就是发送自己所分配到的码片序列的二进制反码。我们用b法来表示b站的马片序列的二进制砝码。C站没有发送数据,显然 d站可以接收到a站和b站所发送信号的叠加信号。
假设系统中的各站所发送的码片序列都是同步的,接收站D,知道其他各站点或特有的码片序列,则接收站d对所接收到的叠加信号可以进行判断,要判断a站是否发送数据,所发送的是比特0还是比特1,可将收到的叠加信号的码片向量与a站自身的码片向量进行规格化内机运算。根据我们之前就给出过的参考公式和计算出结果为一。同理,要判断b站和将收到的叠加信号的码片向量与b站自身的码片向量进行规格化内机运算,可计算出结果为-1。要判断c站可将收到的叠加信号的码片向量与c站自身的满屏向量进行规格化内积运算,可计算出结果为0。从上述计算结果可以看出,计算结果为数值1,被判断方发送了比特1,计算结果为数值-1,被判断方发送了比特0,计算结果为数值0,被判断方未发送数据,
我们基于上述方法来做一个练习,已知4个站各自的码片序列以及接收到的码片序列,那么哪些站发送了数据?发送的是比特1还是0?我们一起来分析一下,用收到的码片序列分别与各站的码片序列进行求规格化内积的运算,若计算结果为数值1则被判断的站发送了比特一,若计算结果为数值-1,则被判断的站发送了比特0,若计算结果为数值0,则被判断的站未发送数据,
判断a站:用a站的码片序列与收到的码片序列进行求规格化内积的运算,结果为1,因此可知a站发送了比特1,
判断b件用b站的码片序列与收到的码片序列进行求规格化内积的运算,结果为-1。因此可知 b站发送了比特0
判断c站,用c站的码片序列与收到的码片序列、进行求规格化内积的运算结果为0。因此可知c站没有发送数据,
判断d站用d站的码片序列与收到的码片序列进行求规格化内机的运算,结果为1,因此可知d站发送了比特一。
最后请同学们自己来完成一个练习。这是计算机专业考研全国统考,计算机网络部分2014年的题37,答案是选项b。我们一起来分析一下,由于题目所给各站的码片序列为4位,因此将站点c收到的序列分成3部分,每部分也由4位构成,如下所示
将站点a的码片序列分别与上述三个部分进行规格化内积运算。根据计算结果,就可以判断出站点a所发送的数据,将站点a的码片序列与第一部分码片序列进行规格化内积运算,结果是一,因此可知站点a所发送的第一个数据是比特一,
将站点a的码片序列与第二部分码片序列进行规格化内机运算,结果是-1。因此可知站点a所发送的第二个数据是比特0,
将站点a的码片序列与第三部分码片序列进行规格化内机运算结果是1,因此可知站点a所发送的第三个数据是比特1。
综上所述,选项b正确
本节课的内容小结如下
# 3.6.3 随机接入 CSMACD协议
在上节课中我们介绍了媒体接入控制的其中一类方式,也就是静态化分信道。本节课我们介绍随机接入,它属于媒体接入控制的另一类方式,即动态接入控制,如图所示多个主机连接到一根总线上,各主机随机发送帧。当两个或多个主机同时发送帧时,代表帧的信号就会产生碰撞或称为冲突,又或者当某个主机正在使用总线发送帧的过程中,另一台主机也要发送帧,这同样也会产生碰撞。
很显然如何协调总线上各主机的工作尽量避免产生碰撞,是一个必须要解决的重要问题。早期的共享式以太网采用载波监听/多址接入碰撞检测,也就是CSMA/CD协议来解决该问题。
首先来看多址接入,多址接入的意思是多个主机也可称为站点或站连接在一条总线上,竞争使用总线。再来看载波监听,载波监听的意思是每一个站在发送帧之前,先要检测一下总线上是否有其他站点在发送帧,可比喻为先听后说,若检测到总线空闲96比特时间则发送这个帧,若检测到总线忙,则继续检测并等待总线转为空闲96比特时间,然后发送帧。96比特时间是指发送96比特所耗费的时间,也称为帧间最小间隔,其作用是接收方可以检测出一个帧的结束,同时也使得所有其他站点都能有机会平等竞争性到并发送帧。
再来看碰撞检测,碰撞检测的意思是每一个正在发送帧的站,边发送帧边检测碰撞,可比喻为边说边听,一旦发现总线上出现碰撞,则立即停止发送,退避一段随机时间后再次重新发送,可比喻为一旦冲突,立即停说,等待时机重新再说。
下面我们来举例说明,多址接入,载波监听以及碰撞检测。多址接入的概念比较简单,即多个主机连接到一根总线上,各主机随机发送帧,假设主机C要发送帧,它首先进行载波监听,检测到总线空闲96比特时间后就可以发送帧了。假设在主机C使用总线发送帧的过程中,主机B也要发送帧,主机B进行载波监听,发现总线忙,于是持续检测总线,一旦发现总线空闲96比特时间,则立即发送帧,边发送帧还要边检测碰撞,只要没检测到碰撞,则可继续发送帧的剩余部分。
假设在主机B发送帧的过程中,主机C也要发送帧,主机C进行再不监听,发现总线空闲96比特时间后立即发送帧,这必然会产生碰撞。在产生碰撞的时刻,主机B和主机C都在边发送帧边检测碰撞,但都检测不到碰撞,碰撞信号沿总线传播,主机C会比主机B更早检测到碰撞并停止发送。
退避一段随机时间后,重新再发送之前所发送的帧。当主机B检测到碰撞后,立即停止发送,退避一段随机时间,重新再发送之前所发送的帧。以太网还采取了一种叫做强化碰撞的措施,这就是当发送帧的站点,一旦检测到碰撞,除了立即停止发送帧外,还要再继续发送32比特或48比特的人为干扰信号,以便有足够多的碰撞信号,使所有站点都能检测出碰撞。
接下来我们介绍争用期的概念,如图所示主机A和D处于总线型以太网的两端,以太网单程端到端的传播时延即为T,纵坐标为时间,假设在时刻0主机A要发送帧,当检测到总线空闲96比特时间后,立即发送帧,在时刻T-a,主机D也要发送帧,当检测到总线空闲96比特时间后,立即发送帧,需要注意的是主机D检测到总线空闲,但实际上总线并不空闲,只是主机D检测不出来,这必然会产生碰撞,发生碰撞的时刻为T减去二分之a。之后,碰撞信号会陆续传播到主机D和主机A。主机D检测到碰撞的时刻为a,而主机A检测到碰撞的时刻为2T减去a。从该图可知,主机最多经过2T,也就是a趋近于0,就可检测到本次发送是否遭受了碰撞。
因此以太网的端到端往返传播实验2t,就称为争用期或碰撞窗口,发送帧的主机,经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会产生碰撞。
每一个主机在自己发送帧之后的一小段时间内,存在着遭遇碰撞的可能性,这一小段时间是不确定的,它取决于另一个发送帧的主机到本主机的距离,但不会超过总线的端到端往返传播时延,即一个争用期时间,显然在以太网中发送帧的主机越多,端到端往返传播时间越大,发送碰撞的概率就越大。
因此共享式以太网不能连接太多的主机,使用的总线也不能太长,带宽为10兆比特每秒的以太网,把争用期定为512比特,发送时间即51.2微秒,因此其总线长度不能超过5120米。但考虑到其他一些因素,如信号衰减等,以太网规定总线长度不能超过2500米。
接下来我们介绍最小帧长的概念,假设主机A正在给主机D发送一个很短的帧,边发送边检测碰撞,主机A很快就将该帧发送完毕了,之后就不再针对该帧检测碰撞。在该帧的传输过程中,主机C也要发送帧,主机C检测到总线空闲96比特时间后就立即发送帧,尽管总线实际上并不空闲,这必然会产生碰撞,主机D最终会收到主机A发送的并遭遇碰撞的帧,主机D会将该帧丢弃,但对于主机A而言,他并不知道自己已发送完毕的该帧,在总线上传输的过程中遭遇了碰撞,因此不会重发,该帧很显然使用CSMACD协议的以太网的帧长不能太短,
以太网规定最小帧长为64字节,即512个比特。而发送512个比特的时间,即为争用期,如果要发送的数据非常少,那么必须加入一些填充字节,使帧长不小于64字节。
以太网的最小帧长,确保了主机可在帧发送完成之前,就要检测到该帧在发送过程中是否遭遇了碰撞。
如果在争用期也就是共发送64节所耗费的时间内,没有检测到碰撞,那么后续发送的数据就一定不会发生碰撞。
如果在争用期内检测到碰撞,就立即终止发送,这时已经发送出去的数据一定小于64字节,因此凡长度小于64字节的帧,都是由于碰撞而异常终止的无效帧。
既然以太网规定了最小帧长,那么是否还规定了最大帧长?我们来举例说明,假设主机A正在给主机D发送一个很长的帧,这会使得主机A长时间占用总线,而总线上的其他主机迟迟拿不到总线的使用权。另外由于帧很长,还可能导致主机D的接收缓冲区无法装下该帧而产生溢出,因此以太网的帧长应该有其上限。例如这是以太网版本二的MAC格式,其数据载荷的最大长度为1500字节,加上首部和尾部共18字节,帧的最大长度为1518字节,而数据载荷的最小长度不能小于46字节,这样加上首部和尾部共18字节,正好满足帧的最小长度为64字节。
这是插入VLAN标记字段后的802.1Q帧,其数据载荷的最大长度为1500字节,加上首部和尾部共22字节,帧的最大长度为1522字节,而数据载荷的最小程度不能小于42字节,这样加上首部和尾部共22字节,正好满足帧的最小长度为64字节。
接下来我们介绍退避时间的计算方法,也就是截断二进制指数退避算法,退避时间等于基本退避时间乘以随机数R。其中基本退避时间的取值为争用期2T,而随机数R是从离散的整数集合,0,1一直到2的K次-1中随机选出的一个数,K从重传次数,数值时装取小者,这也是该算法名称中截断二进制指数这种称谓的由来。我们来举例说明退避时间的计算。
假设这是第一次重传,K从重传次数1和10中取小者,也就是1则离散的整数集合为0,1.则可能的退避时间为0×2t,1×二T。
假设这是第二次重传,K从重传次数2和10中取小者,也就是2则离散的整数集合为0,1,2,3,则可能的配比时间为0×2T,1×2T,2×2T,3×二2T。
假设这是第12次重传,K从重传次数12和10中取小者,也就是10则离散的整数集合为0,1,2一直到1023,则可能的退避时间为0×2T,1×2T,2×2T,一直到1023×2T。
从该例可以看出,若连续多次发生碰撞,就表明可能有较多的主机参与竞争性的,但使用上述推比算法,可使重传需要推迟的平均时间,随重传次数而增大,这也×为动态退避,因而减小发生碰撞的概率,有利于整个系统的稳定。
当重传多达16次仍不能×功时,表明同时打算发送帧的,主机太多,以至于连续发生碰撞,则丢弃该帧,并向高层报告。
接下来我们来讨论一下使用CSMACD协议的共享式以太网的信道利用率。如图所示横坐标为时间,总线上的某个主机可能发生多次碰撞,进行多次退避后,成功发送了一个帧,帧的发送时延即为T0。在最极端的情况下,源主机在总线的一端,而目的主机在总线的另一端,因此还要经过一个单程端到端的传播实验T后,总线才能完全进入空闲状态。因此发送一帧所需的平均时间为多个争用期2T,加上一个帧的发送时延T0,再加上一个单程端到端的传播时延T,
考虑以下这种理想情况,各主机发送帧都不会产生碰撞,总线一旦空闲,就有某个主机立即发送帧,因此这部分时间就不存在了。发送一帧所占用总线的时间为T0加上T,而帧本身的发送时间为T0,这样就可得出极限信道利用率的表达式,将分子分母同除以T0,将T除以T0系为参数A为了提高性到利用率,参数A的值应尽量小,要使参数A的值尽量小,则T的值应该尽量小,这意味着以太网端到端的距离应受到限制,不应太长,而T0的值应当尽量大,这意味着以太网的帧长应尽量大一些。
接下来我们给出CSMACD协议的帧发送流程图,这是载波监听部分,这是碰撞检测部分,这是检测到碰撞后的处理部分。
再来看CSMACD协议的帧接收流程图,若接收到的帧的长度小于最短帧长,则认为该帧遭遇到了碰撞,丢弃该帧,若接收到的帧的目的MAC地址与接收方的MAC地址相同,或是广播地址,则继续进行后续判断,否则丢弃该帧。
若使用循环冗余校验,检查出正在传输过程中出现了误码,则丢弃该帧。
只要正确通过上述三个检查,主机才能接受所收到的帧。
接下来我们来做几个相关的练习题,这是计算机专业考研全国统考计算机网络部分2015年的题36,答案是选项B。选项A描述的是碰撞检测或称冲突检测,这是CSMACD协议中的一部分,描述正确,选项B的描述错误,因为CSMACD协议并不适用于无线网络,对于无线网络可以使用CSMACA协议,选项C中给出的网络跨距,相当于给出了端到端传播实验T,进而可以得出争用期1T,在乘以数据传输速率即为最小帧长,描述正确。选项D描述正确,这可以从极限信道利用率的计算公式看出,当它趋近于零时,信道利用率趋近于100%。
再来看2009年的题37,答案是选项D 本题考察的是采用CSMACD协议的共享式以太网的最小帧长的相关概念,设最远两个站点之间的距离为D米,最小帧长为L比特,最小帧长等于争用期乘以数据传输速率,将题目所给的各已知量统一单位后,与之前所设的两个未知量D和L带入上式,就可以得出最远两个站点之间的距离D与最小帧长L的关系式。很显然若最小帧长减少800比特,最远的两个站点之间的距离至少会减少80米。
再来看2010年的题47的第一问,根据题意可画出如下所示的示意图,只有两主机同时发送数据,才能使得他们从开始发送数据时刻起到他们都检测到冲突时刻止,所经过的时间最短,如图所示,这段时间包括主机发送的数据信号,传播到距离终点处,所耗费的传播时延,以及发生碰撞后的碰撞信号,传播回主机做耗费的时间,这与之前的传播时延是相等的。因此这段时间实际上是两主机间单程的传播时延,计算如下,
再来看这样一种情况,主机甲发送的数据信号传播到无限接近主机乙的某个时刻,主机乙也要发送数据,它检测到信道空闲,但实际上信道此时并不空闲,就立刻开始发送数据,这必然会导致碰撞。如图所示主机已会首先检测到碰撞,一段时间后主机甲也会检测到碰撞,如图所示。很显然从开始发送数据时刻起到两台主机,均检测到碰撞时刻止,最长需要经过的时间为两台主机间信号传播的往返时延,也就是争用期2T,计算如下,
本节课的内容小结如下,需要提醒大家注意的,是C SMACD协议曾经用于各种总线结构以太网和双绞线以太网的早期版本中,现在的以太网基于交换机和全双工连接,不会有碰撞,因此没有必要使用CSMA CD协议。
# 3.6.4 随机接入 CSMACA协议
在上节课中我们介绍了总线型局域网使用的媒体接入控制协议CSMACD,本节课我们介绍无线局域网使用的媒体接入控制协议,CSMA/CA也就是载波监听多址接入/碰撞避免。请大家思考一下,既然CSMACD协议已经成功的应用于使用广播信道的有线局域网,那么同样使用广播信道的无线局域网,能不能也使用CSMACD协议?
在无线局域网中仍然可以使用载波监听多址接入,即在发送帧之前,先对传输媒体进行载波监听,若发现有其他站在发送帧就推迟发送,以避免发生碰撞。
但是在无线局网中不能使用碰撞检测CD,原因如下
- 由于无线信道的传输条件特殊,其信号强度的动态范围非常大,无线网卡上接收到的信号强度往往会远远小于发送信号的强度,可能相差百万倍。如果要在无线网卡上实现碰撞检测,对硬件的要求非常高
- 即使能够在硬件上实现无线局域网的碰撞检测功能,但由于无线电波传播的特殊性,例如存在隐蔽站问题,进行碰撞检测的意义也不大
如图所示,这里有4个无线站点,A的信号范围可以覆盖到B但不能覆盖到C,C的信号范围可以覆盖到B但不能覆盖到A。换句话说A和C都检测不到对方的无线信号,当A和C都要给B发送帧时就会产生碰撞,但A和C无法检测到碰撞,这种未能检测出信道上其他站点信号的问题,叫做隐蔽站问题,
而同样使用广播信道的有线局域网就不存在这样的问题。例如总线上某个主机发送的信号,最多经过一个总线端到端传播时延,就会被总线上的各主机接收到,而总线上产生的碰撞信号最多经过一个总线端到端往返传播时延也会传遍总线。
因此802.11无线局域网使用CSMACA协议,在CSMA的基础上增加了一个CA也就是碰撞避免功能,而不再实现CD也就是碰撞检测功能。由于不可能避免所有的碰撞,并且无线信道误码率较高。802.11标准还使用了数据链路层确认机制,具体为停止等待协议,来保障数据被正确接收。
- 802.11的MAC层标准,定义了两种不同的媒体接入控制方式,一种是分布式协调功能DCF,在DCF方式下,没有中心控制站点,每个站点使用CSMACA协议,通过争用信道来获取发送权,这是802.11定义的默认方式。
- 另一种是点协调功能PCF。PCF方式使用集中控制的接入算法,一般在接入点AP实现集中控制,是802.11定义的可选方式,在实际中较少使用。
802.11标准规定,所有的站点必须在持续检测到信道空闲一段指定时间后才能发送帧,这段时间称为帧间间隔IFS。帧间间隔的长短取决于该站点要发送的帧的类型,高优先级帧需要等待的时间较短,因此可优先获得发送权。低优先级帧需要等待的时间较长,若某个站的低优先级帧还没来得及发送,而其他站的高优先级帧已发送到信道上,则信道变为忙状态,因而低优先级帧就只能在推迟发送了,这样就减少了发生碰撞的机会。
常用的两种帧间间隔如下,一种是短帧间间隔SIFS,长度为28微秒,是最短的帧间间隔,用来分隔开属于一次对话的各个帧,一个站点应当能够在这段时间内从发送方式切换到接收方式。使用SIFS的帧类型有ACK帧、CTS帧,由过长的MAC帧分片后的数据帧,以及所有回答AP探询的帧,和在PDF方式中接入点AP发送出的任何帧。
另一种是DCF帧间间隔,DCF长度为128微妙,它比短帧间间隔SIFS要长得多,在DCF方式中用来发送数据帧和管理帧。
接下来我们来举例说明,CSMACA协议的工作原理,如图所示,这些是无线站点,横坐标为时间。假设无线信道是空闲的,源站有数据帧要发送,当源站检测到信道空闲,则在等待帧间间隔DIFS后发送该数据帧。目的站若正确收到该数据帧,则经过帧间间隔SIFS后向源站发送确认帧ACK。需要说明的是,若源站在规定时间内没有收到确认帧ACK,由重传计时器控制这段时间,就必须重传该数据帧,直到收到确认为止,或者经过若干次的重传失败后放弃发送。
请大家思考一下,源站为什么在检测到信道空闲后,还要在等待帧间间隔DISS后才发送数据帧?
这就是考虑到可能有其他的站,有高优先级的帧要发送,若有就让高优先级帧先发送,
个人理解:为了避免检测到空闲的那个时刻后,马上就有高优先级的帧发送,这时要等他发完,避免碰撞
那么目的站又是为什么在正确接收数据之后,还要再等待一段时间SIFS才能发送ACK帧? SIFS是最短的帧间间隔,用来分割开属于一次对话的各个帧。在这段时间内,一个站点应当能够从发送方式切换到接收方式,如图所示,在源站和目的站的一次对话过程中,无限信道处于忙状态,若无线信道处于忙状态时,其他无线站点要发送数据,则必须退避。当信道从忙状态转换到空闲状态,并经过帧间间隔DIFS后,其他要发送数据的无线站点,需要退避一段随机时间后才能发送。
那么既然信道已经由忙转为空闲,且经过中间间隔DIFS后,为什么还要退避一段随机时间才能使用信道,而不是立即使用信道,这样做的目的在于防止多个站点同时发送数据而产生碰撞。
当站点检测到信道是空闲的,并且所发送的数据帧不是成功发送完上一个数据帧之后,立即连续发送的数据帧,则不使用退避算法,
而以下情况必须使用退避算法。
在发送数据帧之前,检测到信道处于忙状态时,必须使用退避算法,
在每一次重传一个数据帧时,必须使用退避算法,
在每一次成功发送后,要连续发送下一个帧时,必须使用退避算法,这是为了避免一个站点长时间占用信道。
下面我们来介绍CSMA CA协议的退避算法。在执行退避算法时,站点为退避计时器,设置一个随机的退避时间,当退避计时器的时间减小到0,就开始发送数据,当退避计时器的时间还未减小到零时,而信道又转变为忙状态,这时就要冻结蜕皮计时器的数值,重新等待信道变为空闲。在经过帧间间隔DIFS后,继续启动退避计时器,在进行第i次退避,退避时间在实际编号01 2~2+X-一中,随机选择一个然后乘以基本退避时间,也就是一个时隙的长度,就可以得到随机的退避时间。这样做是为了使不同站点选择相同退避时间的概率减少,当时隙编号达到255时,对应于第6次退避,就不再增加了。
我们来举例说明,DSMACA协议的退避算法,如图所示 ABCDE是5个无线站点,横坐标为时间,假设A正在占用无线信道发送帧,在A的发送过程中,BCD也要发送帧,我们用向上的箭头来表示,于是进行载波监听,发现信道忙需要退避,根据退避算法,选择出一个随机的退避时间,并在每个时隙对信道进行一次检测。当检测到信道由忙状态转为空闲状态,且经过帧间间隔DIFS后,退避计时器开始倒计时。假设C的退避时间最短,当C的退避计时器到时后,C立即开始发送帧,此时信道由空闲状态转换为忙状态。当B和D检测到信道忙后,就冻结各自剩余的退避时间。
假设在C占用无线信道发送帧的过程中,E也要发送帧,于是进行载部监听,发现信道忙需要退避,根据退避算法,选择出一个随机的退避时间,并在每个时隙对信道进行一次检测。当检测到信道由忙状态转为空闲状态,且经过帧间间隔DIFS后退避计时器开始倒计时。
当B和D检测到信道由忙状态转为空闲状态,且经过帧间间隔DIFS后,退避计时器重新开始,从上次冻结的退避剩余时间开始倒计时,D的退避计时器会首先到时,D立即开始发送帧,此时信道由空闲状态转换为忙状态,当BE检测到心脑门后,就冻结各自剩余的退避时间,当D发送完帧后,信道将转为空闲状态,当BE检测到信道由忙状态转换为空闲状态,且经过帧间间隔DIFS后退避计时器重新开始,从上次冻结的退币剩余时间开始倒计时,E的退避计时器会首先到时,E立即开始发送帧,此时信道由空闲状态转换为忙状态,
当B检测到信道忙后,就冻结自己剩余的退避时间。当E发送完帧后,信道将转为空闲状态,当B检测到信道由忙状态转换为空闲状态,且经过帧间间隔DISS后,退避计时器重新开始,从上次冻结的退避剩余时间开始倒计时。当B的退避计时器到时候,B立即开始发送帧,
若B发送完这一帧后,还有帧要发送,则在检测到新的空闲,且经过中间间隔DFIS号还必须再退避一段随机时间后才能发送。
接下来我们介绍CSMACA协议的信道预约和虚拟载波监听。为了尽可能减少碰撞的概率和降低碰撞的影响,802.11标准允许要发送数据的站点对信道进行预约。我们来举例说明,源站在发送数据帧之前,先发送一个短的控制帧,称为请求发送RTS。它包括源地址、目的地址以及这次通信,包括相应的确认帧所需的持续时间。如图所示,当源站检测到新的空闲,且经过帧间间隔DIFS后,发送RTS帧,若目的站正确收到源站发来的RTS帧,在检测到新的空闲线,经过中间间隔,SIFS后就发送一个响应控制帧,称为允许发送CTS。它也包括这次通信所需的持续时间,如图所示,源站收到CTS证后,在等待一个帧间间隔,SIFS后就可发送其数据帧,如图所示
若目的站正确收到了源站发来的数据帧,在等待一个帧间间隔SIFS号,就像源站发送确认帧ACK,如图所示
除源站和目的站以外的其他各站,在收到CTS帧或数据帧后,就推迟接入到无线局域网中,这样就保证了源站和目的站之间的通信不会受到其他站的干扰。如图所示,
如果RTS帧发生碰撞,源站就收不到CTS帧,需要执行退避算法,重传RTS帧。由于RTS帧和CTS帧很短,发生碰撞的概率,碰撞产生的开销以及本身的开销都很小。而对于一般的数据帧,其发送时延往往大于传播时延,碰撞的概率很大,且一旦发生碰撞,而导致数据帧重发,则浪费的时间就很多。因此用很小的代价对信道进行预约往往是值得的。802.11标准规定了三种情况,供用户选择,
一种是使用RTS帧和CTS帧
另一种是不使用RTS帧和CTS帧,
还有一种是只有当数据帧的长度超过某一数值时,才使用RTS帧和CTS帧。
除RTS帧和CTS帧会携带通信需要持续的时间,数据帧也能携带通信需要持续的时间,这称为802.11的虚拟载波监听机制。由于利用虚拟载波监听机制,站点只需要监听到RTS帧、CTS帧或数据帧中的任何一个就能知道信道被占用的持续时间,而不需要真正监听到信道上的信号。因此虚拟载波监听机制能减少隐蔽站带来的碰撞问题。
例如这是4个无线站点,A和C互为隐蔽站,A的信号可以覆盖到B但不能覆盖到C C的信号可以覆盖到B但不能覆盖到A。A在给B发送数据之前,可以使用RTS帧来预约信道,尽管C收不到该RTS帧,但是C可以收到B发送给A的CTS帧,这样A就知道了信道将被占用多长时间
在这段时间内,C都不会争用信道,也就是说A给B发送数据帧时不会受到C的干扰
这是计算机专业考研全国统考计算机网络部分2011年的题36,答案是选项D
CSMA是指载波监听多址接入,他并不使用确认机制,
CSMACD是指载波监听多址接入/碰撞检测,是对CSMA的改进,是早期共享总线以太网使用的信道访问控制协议,他并不使用确认机制。
CSMACA是指在不监听多址接入碰撞避免,是802.11局域网采用的无线信道访问控制机制。802.11局域网在使用CSMA CA的同时,还使用停止等待协议,这是因为无线信道的通信质量远不如有限信道。因此无线站点每发送完一个数据之后,要等到收到对方的确认之后,才能继续发送下一帧。
CDMA是指码分多址,属于静态划分性道,是物理层的信道复用技术,而不属于MAC协议。
再来看2013年的题36,答案是选项B CDMA是指码分多址,TDMA是指时分多址,MDMA是指评分多址CSMA是指在播监听,多址接入
TDMA FD MACDMA是常见的物理层信道复用技术,属于静态划分信道,用于多用户共享信道,不会发生冲突。
CSMA属于争用型的媒体接入控制协议,连接在同一媒体上的多个站点,使用该协议,以竞争方式发送数据帧,可能出现冲突,也称为碰撞。
再来看2018年的题35,答案是选项D 本题考察本节课我们刚刚介绍过的CSMACA协议的信道预约方法,CSMACA协议使用RTS帧和CTS帧来预约信道,他们都携带有通信需要持续的时间。另外除RTS和CTS帧外,数据帧也能携带通信需要持续的时间,这就是802.11的虚拟载波监听。
本节课的内容小结如下
# 3.7 MAC地址
从本节课开始,我们将用三次课的时间分别介绍MAC地址、IP地址、ARP协议
- MAC地址是以太网的MAC层所使用的地址
- IP地址是tcpip体系结构网系层所使用的地址。
- ARP协议属于tcpip体系结构的网际层,其作用是已知设备所分配到的IP地址,使用ARP协议,就可以通过该IP地址获取到设备的MAC地址。
- 从网络体系结构的角度来看,MAC地址属于数据链路层的范畴,IP地址和ARP协议属于网际层的范畴。
- 尽管IP地址和ARP协议属于TCP体系结构的网际层,而不属于数据链路层,但是它们与MAC地址存在一定的关系,并且我们日常的网络应用都离不开MAC地址、IP地址以及ARP协议。因此我们将这三者放在一起讨论。
# MAC地址作用
本节课我们介绍MAC地址,如图所示两台主机通过一条链路通信,很显然他们不需要使用地址就可以通信,因为连接在信道上的主机只有他们两个。换句话说,是用点对点信道的数据链路层不需要使用地址。
再来看使用共享信道的总线型局域网,总线上的某台主机要给另一台主机发送帧,表示帧的信号通过总线会传送到总线上的其他所有主机。那么这些主机如何判断该帧是否是发送给自己的呢?很显然使用广播信道的数据链路层必须使用地址来区分各主机,也就是说当多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则每个主机都必须有一个唯一的标识。即一个数据链路层地址。
如图所示,假设总线上各主机的地址分别用一个不同的大写字母来表示,在每个主机发送的帧中,必须携带标识发送主机和接收主机的地址。由于这类地址是用于媒体接入控制的,写英文缩写词为MAC可以读作MAC,因此这类地址被称为MAC地址。
如图所示这是主机c要发送给主机d的帧,则在帧首部中的目的地址字段应填入主机D的MAC地址,而在源地址字段应填入主机c自己的MAC地址,这样总线上其他各主机收到该帧后,就可以根据真首部中的目的地址字段的值,是否与自己的MAC地址匹配,进而丢弃或接受该帧。
MAC地址一般被固化在网卡的电可擦可编程只读存储器EEPROM中,因此 MAC地址也被称为硬件地址,如图所示,这是一块PCI接口的千兆以太网卡,
核心芯片采用REALTEK的8169SC,该芯片实现了以太网的数据链路层和物理层,
这是一方EEPROM芯片,例如93C46,用来存储MAC地址以及网卡的相关信息,
这是boot room插槽,用于网络无盘工作站的启动,一般并不标配启动芯片,
这是网络隔离变压器,将核心芯片与外部隔离,提高抗干扰能力,对核心芯片进行保护。例如防雷击,
MAC地址有时也被称为物理地址,例如在windows系统中,但请大家注意,这并不意味着MAC地址属于网络体系结构中的物理层。我们来看这道考研题,这是计算机专业考研全国统考,计算机网络部分2018年的题34,本题的答案是选项c。如果大家知道物理地址又称为硬件地址或MAC地址,它并不属于物理层的范畴,而是属于数据链路层的范畴。那么本题可以直接选出答案,即便大家不知道物理层接口规范定义的内容,也可以选出答案。
但是如果大家不知道这个知识点,并且对物理层接口规范定义的机械特性,电气特性、功能特性以及过程特性不熟悉,而仅从字面上理解,那么很可能选项c会被大家首先排除掉。
一般情况下用户主机会包含两个网络适配器,一个是有线局域网试配器,也就是有线网卡,另一个是无线局域网试配器,也就是无线网卡。每个网络适配器都有一个全球唯一的MAC地址,而交换机和路由器往往拥有更多的网络接口,所以就会拥有更多的MAC地址。
综上所述,严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识。
# MAC地址格式
接下来我们介绍IEEE 802局域网的MAC地址格式,它由48个比特构成,每8个比特为1个字节,从左至右依次为第1字节到第6字节
- 前三个字节是组织唯一标识符OUI,生产网络设备的厂商,需要向IEEE的注册管理机构申请一个或多个OUI
- 后三个字节是获得OUI的厂商可自行随意分配的。这种地址标识符成为扩展的唯一标识符EUI。对于48比特的MAC地址可称为EUI-48。
- MAC地址的标准表示方法是将每4个比特写成1个16进制的字符,共12个字符,将每两个字符分为一组,共6组,组之间用短线连接,例如这是windows系统中的表示方法,
- 也可以将短线更改为冒号。例如这是Linux系统,苹果系统,安卓系统中的表示方法,
- 还可以将4个字符分为一组,共三组组之间用点连接。例如这是packet tracer仿真软件中的表示方法,
- 如何在各种系统上查看设备所拥有的Mark地址,大家可自行在网上搜索。
# 查看MAC地址所属厂商
另外我们可以在IEEE的官方网站查看已分配的组织唯一标识符OUI,这是具体的网址。standards-oui.ieee.org/oui/oui.txt (opens new window)
可以看到30-fB-B8这个oui已被分配给华为科技有限公司,而a4-45-19这个oui已被分配给小米通信有限公司。
如果我们知道设备的MAC地址,而不知道该设备的厂商信息,可以通过设备的MAC地址来查询,有很多网站都提供这样的免费查询服务,例如在该网站MAC地址查询 - 根据网卡MAC地址查询厂商信息 (opens new window) 输入设备的MAC地址后,就可以查出设备的厂商信息。
# MAC地址种类
- MAC地址第一字节的b0位取零时,表示该地址是单播地址,取1时表示该地址是多播地址,又称为组播地址。
- MAC地址第一字节的b1位取0时,表示该地址是全球管理的,也就是全球唯一的,取1时,表示该地址是本地管理的。
根据上面的规定,我们来填写下表:
- 第一字节的第1位取0,表明MAC地址是全球管理的,取一,表明MAC地址是本地管理的
- 第一字节的b0位取0,表示MAC地址是单播地址,取1表明MAC地址是多波地址。
很显然一共有4种类型的MAC地址,分别是全球管理的单播地址,全球管理的多播地址,本地管理的单播地址,以及本地管理的多播地址。
- 全球管理的单播地址是厂商生产网络设备时给设备的各网络接口固化的MAC地址,
- 全球管理的多播地址是标准网络设备所应支持的多播地址,用于特定功能。例如交换机生成树协议,所需要的多播地址,
- 本地管理的单播地址由网络管理员分配,这种类型的地址会覆盖网络接口的全球管理单播地址,也就是它的优先级高,
- 本地管理的多播地址,用于用户对主机的软件配置,以表明该主机属于哪些多播组。需要注意的是当剩余46比特为权一时,也就是MAC地址的48比特全部为1,16进制形式为全F,就是广播地址,
- 由于MAC地址由48个比特构成,因此总地址数量为2的48次方个,也就是280多万亿个。这4类MAC地址各占总地址空间的1/4,也就是每种Mark地址有70多万亿个
请大家思考一下,我们每个人一般会拥有几个全球管理的单波MAC地址、台式机、笔记本电脑、平板电脑、智能手机等设备上的以太网接口、WiFi接口、蓝牙接口都分配有全球单波的MAC地址,而每台交换机和路由器都拥有多个网络接口,也就拥有多个全球单播的MAC地址。那么在我们有生之年是否会看到EUI-48地址空间耗尽?
对于使用EUI-48地址空间的应用程序,IEEE的目标寿命为100年,也就是直到2080年,但现在鼓励采用EUI64作为替代。
# MAC地址的发送顺序
接下来我们介绍MAC地址的发送顺序,字节发送顺序为第一字节到第六字节,字节内的比特发送顺序为b0~b7如图所示。
# 单播MAC地址
下面我们来举例说明单播MAC地址的作用。假设这是一个拥有三台主机的总线型以太网,各主机网卡上固化的全球单波MAC地址如图所示,假设主机b要给主机c发送单波帧,主机b首先要构建该单播帧,在帧首部中的目的地址字段,填入主机c的MAC地址,源地址字段填入自己的MAC地址,再加上帧首部中的其他字段,数据载荷以及帧尾部,就构成了该单播帧。
主机b将该单播帧发送出去,主机a和c都会收到该单播帧。主机a的网卡,发现该单播帧的目的MAC地址与自己的MAC地址不匹配,于是丢弃该帧
主机c的网卡,发现该单波帧的目的MAC地址与自己的MAC地址匹配,于是接受该帧,并将该帧交给其上层处理,如图所示
# 广播MAC地址
再来看广播MAC地址的作用。假设主机b要发送一个广播帧,主机b首先要构建该广播帧,在帧首部中的目的地址字段填入广播地址,也就是16进制的全f。源地址字段填入自己的MAC地址,再加上帧首部中的其他字段,数据载荷以及帧尾部,就构成了该广播帧。主机b将该广播帧发送出去,主机a和c都会收到该广播帧,发现该帧首部中的目的地址字段的内容是广播地址,就知道该帧是广播帧,接受该帧,并将该帧交给上层处理。
# 多播MAC地址
再来看多播MAC地址的作用,假设主机a要发送多播帧给该多播地址,将该多播地址的左起第一个字节写成8个比特,可以看到最低比特位是一,这就表明该地址是多播地址。这里给大家介绍一个快速判断MAC地址是否是多播地址的方法,也就是如果该位16进制数不能整除二,即13579bdf,则该地址是多播地址。
假设主机bcd支持MAC多播,各用户给自己的主机配置的多播组列表如下所示,可以看到主机b属于两个多播组,主机c也属于两个多播组,而主机d不属于任何多播组。
主机a首先要构建该多播帧,在帧首部中的目的地址字段,填入该多播地址,源地址字段填入自己的MAC地址,再加上帧首部中的其他字段,数据载荷以及帧尾部就构成了该多播帧。
主机a将该多播帧发送出去,主机bcd都会收到该多播帧,主机b发现该多播帧的目的MAC地址,在自己的多播组列表中,主机c发现该多播帧的目的MAC地址在自己的多播组列表中,因此主机b和c都会接受该帧并送交上层处理,
而主机地发现该多播帧的目的MAC地址不在自己的多播组列表中,主机地丢弃该多播帧。
需要提醒大家注意的是,当给主机配置多播组列表进行私有应用时,不得使用公有的标准多播地址,具体可在以下网址查询。
# 随机MAC
最后我们简单介绍一下随机MAC地址的概念。据斯诺登爆料,美国国家安全局有一套系统,通过监视电子设备的MAC地址,来跟踪城市中每个人的行动。因此苹果率先在iOS系列设备扫描网络时,采用随机MAC地址技术,随后 windows10,安卓6.0,以及内核版本为3.18的Linux系统,也开始提供随机MAC地址的功能。目前大多数移动设备已经采用了随机MAC地址技术
我们将本节课的内容小结:
# 3.7 IP地址
在上节课中我们介绍了MAC地址的相关知识,本节课我们介绍IP地址的相关知识,需要说明的是IP地址属于网络层的范畴,而非数据链路层的范畴。
之所以在数据链路层这一章的讲解中引入IP地址,是因为在我们日常的大多数网络应用中,属于数据链路层的MAC地址和属于网络层的IP地址都在使用,他们之间存在一定的关系。Ip地址的相关内容比较多,例如分类的IP地址,划分子网的IP地址,构造超网的IP地址等,这些内容我们将在网络层这一章详细介绍。本节课我们主要介绍IP地址的作用。
# 区分网络编号
IP地址是英特网上的主机和路由器所使用的地址,用于标识两部分信息,
- 一部分是网络编号,用来标识因特网上数以百万计的网络
- 另一部分是主机编号,用来标识同一网络上不同主机或路由器各接口
如图所示。假设这是因特网的一部分,我们给网络n8上的两台主机各分配了一个IP地址,给路由器r4连接该网络的接口,也分配了一个IP地址,这三个IP地址的前三个10进制数是相同的,也就是网络n8的编号。而最后一个10进制数各不相同,是网络n8上各主机和路由器接口的编号。换句话说,同一个网络上的各主机和路由器的各接口的IP地址的网络号部分应该相同,而主机号部分应该互不相同。
又例如我们给网络n9上的各主机和路由器的接口,各分配了一个IP地址,这三个IP地址的前三个10进制数是相同的,也就是网络n9的编号。而最后一个10进制数各不相同,是网络n9上各主机和路由器接口的编号。
因特网中不同网络的网络编号必须各不相同。例如在本例中,网络n8的编号为192.168.0,而网络n9的编号为192.168.1。需要提醒大家注意的是,在一个IP地址中,哪部分是网络编号,哪部分是主机编号,并不都和本例相同,我们将在后续网络层这一章进行详细介绍。
# IP地址与MAC地址的封装位置
很显然之前介绍的MAC地址不具备区分不同网络的功能,而IP地址具备这样的功能,如果只是一个单独的网络,不接入因特网,可以只使用MAC地址,但这并不是一般用户的常见应用方式。
如果主机所在的网络要接入因特网,则IP地址和MAC地址都需要使用。接下来我们从网络体系结构的角度,看看IP地址与MAC地址的封装位置。我们以5层原理体系结构为例
- 这是应用层封装好的应用层,报文将其向下交付给运输层,
- 运输层看不懂,也无需看懂应用层报文的结构与内容。我们用黑色表示,仅仅给其添加一个运输层首部,运输层将封装好的协议数据单元向下交付给网络层,
- 网络层看不懂,也无需看懂运输层协议数据单元的结构与内容,仅仅给其添加一个网络层首部,网络层将封装好的协议数据单元向下交付给数据链路层
- 数据链路层看不懂,也无需看懂网络层协议数据单元的结构与内容,仅仅给其添加一个数据链路层首部和一个数据链路层尾部,数据链路层将封装好的协议数据单元向下交付给物理层
- 物理层看不懂,也无需看懂数据链路层协议数据单元的结构与内容,仅仅将他们看作是比特流,以便将他们转换为相应的电信号,发送到传输媒体。
- 由于IP地址属于网络体系结构中网络层的范畴,因此在网络层首部中应该封装有原IP地址和目的IP地址,
- 相应的,由于MAC地址属于网络体系结构中数据链路层的范畴,因此在数据链路层首部中应该封装有源MAC地址和目的MAC地址
# 转发过程中IP地址与MAC地址的变化情况
接下来我们来看看数据包,在转发过程中IP地址与MAC地址的变化情况,如图所示为了简单起见,图中各主机和路由器各接口的IP地址和MAC地址用比较简单的标识符来表示,而并未使用实际的IP地址和MAC地址。
假设主机h1要给主机h2发送一个数据包,我们从网络体系结构的角度来看看数据包在传输过程中,IP地址与MAC地址的变化情况。
需要注意的是主机中有完整的网络体系结构,而路由器的最高层为网络层,它没有网络体系结构中的运输层和应用层,我们所关注的重点是网络层封装IP数据报时,原IP地址和目的IP地址应该填写什么?数据链路层封装帧时,源MAC地址和目的MAC地址应填写什么?
因此我们忽略网络体系结构中,除网络层和数据链路层外的其他各层,可以想象成各网络层进行水平方向的逻辑通信,各数据链路层进行水平方向的逻辑通信。
- 主机h1将数据包发送给路由器R1,在网络层封装的IP数据报首部中,源IP地址应填写主机h1的IP地址IP1,目的IP地址应填写主机h2的IP地址IP2,也就是从IP1发送给IP2。而在数据链路层封装的帧首部中,源MAC地址应填写主机h1的MAC地址MAC1,目的MAC地址应填写路由器R1的MAC地址MAC3,也就是从MAC1发送给MAC3,
- 路由器R1将收到的数据包转发给路由器r2,在网络层封装的IP数据报首部中,源IP地址仍然填写主机h1的IP地址,IP1目的IP地址仍然填写主机h2的IP地址IP2,也就是从IP1发送给IP2。而在数据链路层封装的帧首部中,源MAC地址应填写路由器R1的MAC地址MAC4,目的MAC地址应填写路由器r2的MAC地址MAC5,也就是从MAC4发送给MAC5,
- 路由器r2将收到的数据包转发给主机h2,在网络层封装的IP数据报首部中,源IP地址仍然填写主机h1的IP地址IP1,目的IP地址仍然填写主机h2的IP地址IP2,也就是从IP1发送给IP2;而在数据链路层封装帧首部时,源MAC地址应填写路由器r2的MAC地址MAC6,目的MAC地址应填写主机h2的MAC地址MAC2,也就是从MAC6发送给MAC2。
通过本例可看出在数据包转发过程中,源IP地址和目的IP地址始终保持不变,而源MAC地址和目的MAC地址逐个链路或逐个网络改变,
- 主机h1知道应该把数据包传给r1,由r1帮其把数据包转发出去,h1知道r1相应接口的IP地址为IP3,但不知道其对应的MAC地址是什么
- 路由器r1知道应该把数据包转发给r2,R1知道R2相应接口的IP地址为IP5,但不知道其对应的MAC地址是什么,
- 路由器r2直到应该把数据包传给主机h2,r2知道h2的IP地址为IP2,但不知道其对应的MAC地址是什么,
- 有的同学可能会对这部分内容产生疑问,请大家目前先权且这么认可,我们将在后续的网络层这一章详细介绍。
对于本地主机h1、路由器r1和r2都存在一个共同的问题,那就是知道IP地址,但不知道其相应的MAC地址,如何通过IP地址找出其对应的MAC地址,这是我们下节课将要介绍的地址解析协议ARP所要实现的功能。
MAC地址和IP地址相关的练习题:计算机专业考研全国统考,计算机网络部分2018年的题37,答案是选项d
我们来一起分析一下,我们之前刚刚介绍过,在数据包的转发过程中,源IP地址和目的IP地址始终保持不变,而源MAC地址和目的MAC地址逐段链路或逐个网络改变。
针对本题我们来一起填写下表,
- 主机h1将数据包传输给路由器r。在网络层封装IP数据报时,在其首部的源IP地址字段填入主机h1的IP地址,目的IP地址字段,填入主机h2的IP地址。
- 在数据链路层封装market时,在其首部的原MAC地址字段填入主机h1的MAC地址,目的MAC地址字段,填入路由器r相应接口的MAC地址,
- 路由器r数据包转发给主机h2。在网络层封装IP数据报时,在其首部的源IP地址字段仍然填入主机h1的IP地址,目的IP地址字段仍然填入主机h2的IP地址,
- 在数据链路层封装MAC帧时,在其手部的原Mark地址字段,填入路由器r相应接口的Mark地址,目的MAC地址字段填入主机h2的MAC地址。
将本节课的内容小结如下:
# 3.7 ARP协议
在之前的课程中,我们分别介绍了属于数据链路层范畴的MAC地址和属于网络层范畴的IP地址,以及数据包在传输过程中IP地址和MAC地址的变化情况之后,我们提出了这样一个问题,那就是如何通过IP地址找到其相应的IP地址?这就是本节课我们将要介绍的地址解析协议,ARP所要实现的主要功能。
下面我们就来举例说明 ARP协议的工作原理,这是一个共享总线型的以太网,为了简单起见,我们只画出了该网络中的三台主机,各主机所配置的IP地址,和其网卡上固化的MAC地址,如图所示
假设主机b要给主机c发送数据包,主机b知道主机c的IP地址,但不知道它的MAC地址,因此主机b的数据链路层在封装MAC帧时,就无法填写目的MAC地址字段,进而也就无法构建出要发送的MAC帧。
实际上每台主机都会有一个ARP高速缓存表,例如这是主机b的ARP高速缓存表,ARP高速缓存表中记录有IP地址和MAC地址的对应关系。例如这是主机b之前获取到的主机a的IP地址与MAC地址的对应关系。在本例中当主机b要给主机c发送数据包时,会首先在自己的ARP高速缓存表中查找主机c的IP地址所对应的MAC地址,但未找到,因此主机b需要发送ARP请求报文,来获取主机c的MAC地址。
Arp请求报文的内容是:我的IP地址为192.168.0.2,我的MAC地址为00e0f9a34377,我想知道IP地址为192.168.0.3的主机的MAC地址。
需要说明的是为了简单起见,这里我们以比较通俗的语言来描述ARP请求报文的内容,但实际上 ARP请求报文有其具体的格式。另外需要大家注意的是 ARP请求报文被封装在MAC帧中发送,目的只为广播地址。
- 主机b发送封装有ARP请求报文的广播帧,总线上的其他主机都能收到该广播帧
- 主机a的网卡收到该广播帧后,将其送交上层处理。上层的ARP进程解析ERP请求报文,发现所询问的IP地址不是自己的IP地址,因此不予理会。
- 主机c的网卡收到该广播之后,将其上交上层处理,上层的ARP进程解析ARP请求报文,发现所询问的IP地址,正是自己的IP地址,需要进行响应
- 主机c首先将ARP请求报文中所携带的主机b的IP地址与MAC地址记录到自己的ARP高速缓存表中,然后给主机b发送ARP响应报文,以告知自己的MAC地址。
ARP响应报文的内容是我的IP地址是192.168.0.3,我的MAC地址为00-0c-Cf-b8-4a-82,需要注意的是ARP响应报文被封装在MAC帧中,发送目的地址为主机b的MAC地址,主机c给主机b发送封装有ARP响应报文的单播帧,总线上的其他主机都能收到该单播帧,
主机a的网卡收到该单波针后,发现其目的MAC地址与自己的MAC地址不匹配,直接丢弃该帧
主机b的网卡,收到该单波帧后,发现其目的MAC地址,就是自己的MAC地址,将其交付上层处理。
上层的ARP进程解析ERP响应报文,将其所包含的主机c的IP地址与MAC地址记录到自己的ARP高速缓存表中
主机b现在可以给主机c发送之前发送的数据包了,ARP高速缓存表中的每一条记录都有其类型,类型分为动态和静态两种。
- 动态类型是指记录是主机自动获取到的,其生命周期默认为两分钟,当生命周期结束时,该记录将自动删除。这样做的原因是IP地址与MAC地址的对应关系并不是永久性的。例如当主机的网卡坏了,更换新的网卡后,主机的IP地址并没有改变,但主机的MAC地址改变了。
- 静态类型是指记录是用户或网络维护人员手工配置的。不同操作系统下的生命周期不同,例如系统重启后不存在,或在系统重启后依然有效。
接下来请大家思考一下,在下图所示的网络拓扑中,主机h1是否可以使用ARP协议获取到主机h2的MAC地址?回答是否定的,ARP协议只能在一段链路或一个网络上使用,而不能跨网络使用。对于本地ARP协议的使用是逐段链路进行的
本节课到这里就结束了。我们将之前课程中曾介绍过的MAC地址,IP地址以及本节课介绍的地址解析协议ARP的内容小结如下:
需要说明的是除ARP请求和响应报文外,ARP还有其他类型的报文,例如用于检查IP地址冲突的无故ERP,或称免费ERP。另外 ARP协议没有安全验证机制,存在ARP欺骗或攻击等问题。
# 3.8 集线器与交换机的区别
本节课我们介绍集线器与交换机的区别,我们首先来看早期的总线型以太网,这是我们之前课程中经常用来举例的总线型以太网,他最初使用粗铜轴电缆作为传输媒体,后来演进到使用价格相对便宜的细同轴电缆。
当初认为这种连接方法既简单又可靠,因为在那个时代普遍认为有源器件不可靠而无缘的电缆线才是最可靠的。然而这种使用无源、电缆和大量机械接头的总线型以太网,并不像人们想象的那么可靠。
后来以太网发展出来了一种使用大规模集成电路,可靠性非常高的设备,叫做集线器,并且使用更便宜更灵活的双绞线。作为传输媒体如图所示,这是一个使用集线器和双脚线电缆,互联了4台主机的新型拓扑的以太网。主机中的以太网卡,以及极限器各接口,使用RJ-45插座,它们之间通过双绞线电缆进行连接,在双脚线电缆的两端是RJ-45插头,也就是我们俗称的水晶头。
实践证明,使用双绞线和集线器比使用具有大量机械接头的无源电缆,要可靠的多,并且价格便宜,使用方便。因此粗缆和细缆以太网早已成为了历史,从市场上消失了
使用集线器的以太网,虽然物理拓扑是星型的,但在逻辑上仍然是一个总线网,各站共享逻辑上的总线资源,使用的还是csma/cd协议,集线器只工作在物理层,它的每个接口仅简单的转发比特,不进行碰撞检测,碰撞检测的任务由各站的网卡负责。
在分析问题时,我们可将集线器简单看作是一条总线,集线器一般都有少量的容错能力和网络管理功能。例如若网络中某个网卡出现了故障,不停的发送帧,此时集线器也可以检测到这个问题,在内部断开与出故障网卡的连线,使整个以太网仍然能正常工作。
使用集线器可以对以太网进行扩展。由于集线器只工作在物理层,所以更具体的说法是使用集线器在物理层扩展以太网。我们来举例说明,假设某学院下设三个系部,每个系部都有一个使用集线器作为互联设备的以太网,这三个以太网相互独立,各自共享自己的总线资源,是三个独立的碰撞域或称冲突域。
例如一系中的某台主机给另一台主机发送数据帧,由于总线特性,表示该数据帧的信号会传输到一系中的其他各主机,
二系中的多台主机同时发送数据帧,由于总线特性,这必然会产生信号碰撞,碰撞后的信号会传输到二系中的各主机。
为了使各系部的以太网能够相互通信,可再使用一个集线器,将它们互联起来。这样原来三个独立的以太网就要互联成为了一个更大的以太网,而原来三个独立的碰撞域就要合并成了一个更大的碰撞域。换句话说,形成了一个更大的总线型以太网。比如一系中的某台主机,给二系中的某台主机发送数据帧,由于总线特性,表示该数据帧的信号会传输到整个网络中的其他各主机,
在集线器之后发展出了更先进的网络互联设备,也就是以太网交换机。我们先从一个典型的例子来看看以太网交换机与集线器的区别,
- 使用集线器互联而成的,共享总线式以太网上的某个主机,要给另一个主机发送单播帧,该单播帧会通过共享总线传输到总线上的其他各个主机
- 使用交换机互联而成的交换式以太网上的某个主机,要给另一个主机发送播帧针,该单波帧进入交换机后,交换机会将该单波帧转发给目的主机,而不是网络中的其他各个主机。
很显然交换机具有明显的优势,需要说明的是为了简单起见,本节课所有举例的前提条件是忽略ARP过程,并假设交换机的帧交换表已经学习或配置好了,以太网交换机通常都有多个接口,每个接口都可以通过双绞线电缆与一台主机或另一个以太网交换机相连,一般都工作在全双工方式,也就是发送帧和接收帧,可以同时进行。注意使用集线器的以太网在逻辑上是共享总线的,需要使用csma/cd协议来协调各主机征用总线,只能工作在半双工模式,也就是收发帧不能同时进行。以太网交换机具有并行性能,同时连通多对接口,使多对主机能同时通信而无碰撞。
以太网交换机的接口一般都支持多种速率,例如10兆比特每秒,100兆比特每秒,一G比特每秒,10G比特每秒等。以太网交换机工作在数据链入层,当然也包括物理层,他收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧
假设这是该交换机的帧交换表,主机a给主机b发送数据帧,交换机收到该帧后,在帧交换表中查找该帧的目的MAC地址,也就是主机b的Mark地址,发现应该从接口二转发,于是就从接口二将该帧转发出去。
以太网交换机是一种即插即用的设备,上电即可工作。其内部的帧交换表是通过自学习算法自动的逐渐建立起来的。许多以太网交换机对收到的帧采用存储转发方式进行转发,但也有一些交换机采用直通交换方式,直通交换不必把整个帧先缓存后再进行处理,而是在接收帧的同时,就立即按帧的目的MAC地址决定该帧的转发接口,因而提高了帧的转发速率。一般采用基于硬件的交叉矩阵,这样交换时延就非常小,但直通交换的一个缺点,他不检查帧是否有差错,就直接将帧转发出去。
接下来我们再通过举个例子,进一步对比集线器和交换机,这是前提条件。我们首先来对比主机发送单播帧的情况,对于使用集线器的共享总线型以太网,单播帧会传播到总线上的其他各主机,各主机中的网卡,根据帧的目的MAC地址决定是否接受该帧。
对于使用交换机的交换式以太网,交换机收到单播帧之后,根据帧的目的MAC地址和自身的帧交换表,将帧转发给目的主机,而不是网络中的其他各主机。
我们再来对比发送广播帧的情况,
- 对于使用集线器的共享总线型以太网,广播帧会传播到总线上的其他各主机,各主机中的网卡,检测到帧的目的MAC地址是广播地址,就接受该帧
- 对于使用交换机的交换式以太网。交换机收到广播帧之后,检测到帧的目的MAC地址是广播地址,于是从除该帧进入交换机接口外的其他各接口,转发该帧,网络中除源主机外的其他各主机收到广播帧后接受该广播帧。
- 从本例可以看出,使用集线器的共享总线型以太网中的各主机属于同一个广播域,而使用交换机的交换式以太网中的各主机也属于同一个广播域。因此对于广播帧的情况,从效果上看没有什么区别。
我们再来对比网络中的多台主机,同时给另一台主机发送单播帧的情况,
- 对于使用集线器的共享总线型以太网,这必然会产生碰撞,遭遇碰撞的帧会传播到总线上的各主机,
- 对于使用交换机的交换式以太网,交换机收到多个帧时会将它们缓存起来,然后逐个转发给目的主机,不会产生碰撞。
接下来我们来对比使用集线器,扩展以太网和 使用交换机扩展以太网有什么区别:
- 首先对比发送单播帧的情况,这是仅使用集线器扩展以太网后发送单波帧的情况,
- 这是仅使用交换机扩展以太网后发送单播帧的情况,很显然交换机具有非常明显的优势,
- 再来对比发送广播帧的情况,这是仅使用集线器扩展以太网后发送广播帧的情况,这是仅使用交换机扩展以太网后发送广播帧的情况,从效果上看是一样的。
- 可见不管是用集线器还是交换机来扩展以太网,扩展后的以太网中的各主机都属于同一个广播域,仅使用集线器扩展的以太网,在逻辑上仍然是共享总线的,并且形成为一个更大的碰撞域。换句话说,参与竞争总线的主机比扩展前的更多了,这是竞争总线并产生碰撞的一个例子。
- 同样的传输任务,在仅使用交换机扩展的以太网上就不会产生碰撞。
- 因此如果仅仅使用集线器来扩展以太网,不仅会扩大广播域,还同时扩大了碰撞域,但是如果使用交换机将原来各自独立的碰撞域连接起来,只会扩大广播域,而不会扩大碰撞域,也就是说交换机可以隔离碰撞域,
我们将集线器和交换机的区别小结如下,需要说明的是工作在数据链路层的以太网交换机,其性能远远超过工作在物理层的集线器,而且价格并不贵,这就使得集线器逐渐被市场淘汰。目前很难在市场上再见到集线器了。
# 3.9 以太网交换机自学习和转发帧的流程
在上节课中,我们对比了在物理层扩展以太网的集线器,和在数据链路层扩展以太网的交换机。
本节课我们介绍以太网交换机自学习和转发帧的流程,以太网交换机工作在数据链路层,当然也包括物理层,需要说明的是目前市场上也有包含网络层部分功能的交换机,称为三层交换机,
以太网交换机收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧,
以太网交换机是一种即插即用的设备,刚上电启动时,其内部的帧交换表是空的。随着网络中各主机间的通信,以太网交换机通过自学习算法,自动逐渐建立起帧交换表。
下面我们来举例说明,以太网交换机自学习和转发帧的流程,如图所示,相互连接的两台以太网交换机,各自连接了三台主机,构成了一个交换式以太网。为了简单起见,各主机中网卡上固化的MAC地址,仅用一个大写字母表示,各主机互不相同。为了将重点放在以太网交换机自学习和转发帧的流程上,我们假设各主机已经知道了网络装其他各主机的MAC地址,换句话说,不需要首先通过ARP来获取目的主机的MAC地址。
假设主机A给主机B发送帧,该帧从交换机1的接口1进入交换机1,交换机1首先进行登记的工作,将该帧的源MAC地址A记录到自己的帧交换表中,将该帧进入自己的接口的接口号1,相应的也记录到帧交换表中,上述登记工作就称为交换机的自学习。
之后,交换机1对该帧进行转发,该帧的目的MAC地址是B,在帧交换表中查找MAC地址B,找不到,于是对该帧进行盲目的转发,也称为泛洪,也就是从除该帧进入交换机接口外的其他所有接口转发该帧,可以看出交换机一开始还是比较笨的,他还没有足够的知识来明确转发帧,只能进行盲目的转发。
主机B的网卡收到该帧后,根据帧的目的MAC地址B就知道这是发送给自己的帧,于是就要接受该帧。主机C的网卡收到该帧后,根据帧的目的MAC地址B就知道这不是发送给自己的帧,于是就丢弃该帧。
该帧从交换机2的接口二进入交换机2,交换机2首先进行登记的工作,将该帧的源MAC地址A记录到自己的帧交换表中,将该帧进入自己的接口的接口号2,相应的也记录到帧交换表中。之后交换机2对该帧进行转发,该帧的目的MAC地址是B,在帧交换表中查找MAC地址B,找不到,于是对该帧进行盲目的转发,主机DEF都会收到该帧,根据帧的目的MAC地址B就知道这不是发送给自己的帧,于是丢弃该帧。
接下来主机B给主机A发送帧,该帧从交换机1的接口3进入交换机1,交换机1首先进行登记的工作,将该帧的源MAC地址B记录到自己的帧交换表中,将该帧进入自己的接口的接口号3,相应的也记录到帧交换表中。之后,交换机1对该帧进行转发,该帧的目的MAC地址是A,在帧交换表中查找MAC地址A,可以找到,于是按照MAC地址A所对应的接口号1,从接口1转发该帧,这是明确的转发。
主机A的网卡收到该帧后,根据帧的目的MAC地址A就知道这是发送给自己的帧,于是接受该帧,很显然交换机2不会收到该帧。
接下来主机E给主机A发送帧,该帧从交换机2的接口3进入交换机2,交换机2首先进行登记的工作,之后,交换机2对该帧进行转发,该帧的目的MAC地址是A,在帧交换表中查找MAC地址A,可以找到,于是按照MAC地址A所对应的接口号2,从接口2转发该帧,这是明确的转发,该帧从交换机1的接口4进入交换机1,交换机1首先进行登记的工作,之后,交换机1对该帧进行转发,该帧的目的MAC地址是A,在帧交换表中查找MAC地址A,可以找到,于是按照MAC地址A所对应的接口号1,从接口1转发该帧,这是明确的转发。
主机A的网卡收到该帧后,根据帧的目的MAC地址A就知道这是发送给自己的帧,于是接受该帧。
我们再来看看以太网交换机丢弃帧的情况,为了演示该情况,我们给交换机1的接口1再连接一台主机G,为了简单起见,没有画出集线器,这样主机A主机G,交换机1的接口1就共享同一条总线,假设主机G给主机A发送帧,该帧通过总线进行传输,主机A和交换机1的接口1都可以收到,主机A的网卡收到该帧后,根据帧的目的MAC地址A就知道这是发送给自己的帧,于是接受该帧。交换机1收到该帧后,首先进行登记工作,之后,交换机1对该帧进行转发,该帧的目的MAC地址是A,在帧交换表中查找MAC地址A,可以找到MAC地址A所对应的接口号是1,但是该帧正是从接口1进入交换机1的,交换机1不会再从该接口将该帧转发出去,因为这是没有必要的,于是丢弃该帧,很显然交换机2不会收到该帧,
随着网络中各主机都发送了帧后,网络中的各交换机,就可以学习到各主机的MAC地址,以及他们与自己各接口的对应关系。
需要注意的是帧交换表中的每条记录都有自己的有效时间,到期自动删除。请大家想想看,这是为什么呢?好不容易学习来的记录,为什么要到期自动删除,这不是多此一举吗?这是因为MAC地址与交换机接口的对应关系,并不是永久性的,例如交换机某接口所连接的主机更换成了另一台主机,又或者主机中的网卡坏了,更换了新的网卡,这些情况都会导致MAC地址与交换机接口的对应关系的改变。
相信大家还记得我们曾经介绍过的ARP高速缓存表,表中的IP地址与MAC地址的对应关系记录也是会定期自动删除的,这是因为IP地址与MAC地址的对应关系,也并不是永久性的。
接下来请同学们参照我们刚刚所举的例子,本题的答案如下所示,相信同学们都能解答正确。
接下来我们再来做几道相关的考研题,这是计算机专业考研全国统考计算机网络部分2009年的题36,答案是选项A PDU的意思是协议数据单元,它是计算机网络体系结构中对等实体间逻辑通信的对象。以太网交换机工作在数据链路层,也包括物理层,他接收并转发的PDU通常称为帧。以太网交换机收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧,MAC地址又称为硬件地址或物理地址。请注意不要被物理二字误导,认为物理地址属于物理层范畴,实际上物理地址属于数据链路层范畴。
再来看2014年的题34,答案是选项B 根据题意左侧主机给右侧主机发送数据帧,该帧从交换机的接口1进入交换机,交换机首先进行登记的工作,将该帧的源MAC地址记录到自己的帧交换表中,将该帧进入自己的接口的接口号,相应的也记录到帧交换表中。之后交换机对该帧进行转发,在帧交换表中查找该帧的目的MAC地址,找不到,于是对该帧进行盲目的转发。因此交换机转发数据帧的端口为2和3
根据题意,右侧主机收到左侧主机发送的数据帧后,给左侧主机发送确认帧,该帧从交换机的接口三进入交换机,交换机首先进行登记的工作,将该帧的源MAC地址记录到自己的帧交换表中,将该帧进入自己的接口的接口号,相应的也记录到帧交换表中。之后,交换机对该帧进行转发,在帧交换表中查找该帧的目的MAC地址,可以找到,于是按照MAC地址做对应的接口号1从接口1明确转发该帧,因此交换机转发确认帧的端口为1,
本节课的内容小结如下
# 3.10 以太网交换机的生成树协议STP
我们介绍以太网交换机生成数协议的基本概念,请大家思考一下,应该如何提高以太网的可靠性呢?例如如图所示的以太网,由三台交换机互联而成,每个交换机上都连接有一些主机,为了简单起见,我们只画出了每个交换机上连接的一台主机,如果交换机A与B之间的链路出现了故障,则交换机B上连接的所有主机,既无法与交换机A上连接的所有主机进行通信,也无法与交换机C上连接的所有主机进行通信。
如果交换机A与交换机B和C之间的链路都出现了故障,则原来的以太网变成了三个独立的较小的以太网,他们之间无法通信,
相信很多同学已经想到了,可以通过添加冗余链路的方法来提高以太网的可靠性。
例如在本例中,我们给交换机B和C之间添加一条冗余链路后,即使交换机A和B之间的链路出现了故障,整个网络还是联通的,但是冗余链路也会带来负面效应,那就是形成网络环路。如图所示,网络环路会带来一些问题。例如广播风暴,我们来举例说明,假设主机H1发送了一个广播帧,交换机B收到该帧号,将其从自己的其他所有接口转发出去,交换机A收到交换机B转发来的该帧后,将其从自己的其他所有接口转发出去。同样的交换机C收到交换机B转发来的该证号,将其从自己的其他所有接口转发出去,交换机C收到交换机A转发来的该帧后,将其从自己的其他所有接口转发出去。
同样的交换机A收到交换机C转发来的该帧后,将其从自己的其他所有接口转发出去,
交换机B收到交换机C转发来的该帧后,将其从自己的其他所有接口转发出去。
同样的交换机B收到交换机A转发来的盖章后,将其从自己的其他所有接口转发出去,
很显然该广播帧将在各交换机之间反复转发,分别按顺时针和逆时针方向同时兜圈,这就是所谓的广播风暴,广播风暴会大量消耗网络资源,使得网络无法正常转发其他数据帧,也会使主机反复收到广播帧,大量消耗主机资源,还会使交换机的帧交换表震荡(漂移),如图所示,这是交换机B的帧交换表,这是其各接口的接口号。为了简单起见,假设各主机的名称也可作为其MAC地址,当交换机B收到主机H1发送的广播帧后进行登记工作,将帧的源MAC地址H1和帧进入交换机B的接口号1登记到帧交换表中,这条记录是正确的。
当交换机B再次收到交换机C转发来的该广播帧后进行登记工作,将帧的源MAC地址H1和帧进入交换机B的接口号2,这条错误记录登记到帧交换表中,并删除原先正确的记录。
当交换机B再次收到交换机A转发来的该广播帧号进行登记工作,将帧的源MAC地址H1和帧进入交换机B的接口号3,这条错误记录登记到帧交换表中,并删除原先错误的记录。
当交换机B再次收到交换机C转发来的该广播帧后进行登记工作,将帧的源MAC地址H1和帧进入交换机B的接口号2,这条错误记录登记到帧交换表中,并删除原先错误的记录。很显然有关MAC地址H1的记录将在这两个错误记录之间反复震荡,
为了可以在增加冗余链路来提高网络可靠性的同时,又避免网络环路带来的各种问题。以太网交换机使用生成树协议,其英文缩写词为STP不论交换机之间采用怎样的物理连接,使用生成树协议的交换机都能够自动计算,并构建出一个逻辑上没有环路的网络,其逻辑拓扑结构必须是树形的,也就是没有逻辑环路。我们来举例说明,如图所示,为了提高可靠性,5台交换机之间进行了冗余连接,冗余链路不止一条,网络环路也不止一个。为了简单起见,各交换机上连接的主机没有画出。我们用绿色的小圆圈表示交换机的接口状态为正常状态,用橙色的小方块表示交换机的接口状态为阻塞状态,用红色的叉表示出现了故障,如果各交换机的各接口都处于正常状态,则会存在多个网络环路。实际上各交换机之间按照生成树协议中规定的生成树算法,交互一些参数后,就可以判断出自己应该阻塞自己的哪些接口。例如图中所示,这样就会形成一个逻辑上没有环路的网络,如图所示。
当然这个逻辑上没有环路的网络,一定要确保联通整个网络,否则就没有意义了。当首次连接交换机或网络物理拓扑发生变化时,这有可能是人为改变造成的,也有可能是出现故障造成的,交换机都将进行生成树的重新计算。例如假设这段链路出现了故障,相关交换机检测到该故障后,重新计算生成树,决定将自己之前阻塞的接口恢复为正常状态,这样就会形成一个新的逻辑上没有环路的网络。需要说明的是生成树协议所使用的生成树算法,以超出本系列课程的教学大纲,对生成树算法感兴趣的同学,可以参看我们的另一个系列课程,计算机网络简明教程和仿真实验。
# 3.11 虚拟局域网VLAN
# 3.11.1 虚拟局域网VLAN概述
本节课我们介绍虚拟局域网VLAN的基本概念,在之前课程中我们已经介绍过了以太网交换机自学习和转发帧的流程,以及为避免网络环路而产生的生成树协议。
以太网交换机工作在数据链路层,也包括物理层,使用一个或多个以太网交换机互联起来的交换式以太网,其所有站点都属于同一个广播域。
随着交换式以太网规模的扩大,广播域相应扩大,如图所示,这是一个由多个以太网交换机互联而成的交换式以太网。每个以太网交换机上都连接了多个主机,形成了一个巨大的广播域。
然而巨大的广播域会带来很多弊端,例如广播风暴、难以管理和维护潜在的安全问题等。
我们来举例说明广播风暴的问题,假设网络中的某个主机要给另一个主机发送一个数据帧,但是在自己的ARP高速缓存表中,无法查到目的主机的MAC地址,于是首先要发送ARP广播请求来获取目的主机的MAC地址。该ARP广播请求会传遍整个网络,网络中的其他所有主机都可以收到该广播。这种情况就是所谓的广播风暴,广播风暴会浪费网络资源和网络中各主机的CPU资源,因此除非应用需求必须要使用广播,否则网络中的主机应尽量不使用广播。
也许有的同学会有这样的想法,如果网络中只是偶尔出现广播,那还是可以接受的,但事实上网络中会频繁出现广播信息。目前使用最广泛的tcpip协议当中的很多协议都会使用广播,例如地址解析协议ARP,路由信息协议rap,动态主机配置协议dhcp等。除此之外,其他一些协议站也会频繁使用广播,
那么如何才能将较大的广播域分割成更小的广播域,使要路由器就要可以隔离广播域,如图所示,这是由两台以太网交换机互联而成的交换式以太网。网络中的各主机同属于一个广播域,使用路由器可以将该广播域分割成两个较小的广播域。路由器工作在网络体系结构的第三层,也就是网络层。
由于路由器默认情况下,不对广播数据包进行转发,因此路由器很自然的就可以隔离广播域。然而路由器的成本较高,局域网内部全部使用路由器来隔离广播域是不现实的。
在这种情况下,虚拟局域网技术应运而生,虚拟局域网的英文缩写词为VLAN,它是一种将局域网内的设备划分成与物理位置无关的逻辑组的技术。这些逻辑组具有某些共同的需求。如图所示一楼、二楼、三楼分别有一个局域网,可将他们通过另外一个交换机互联成一个更大的局域网,那么原来每一个局域网成为现在局域网的一个网段,网络中的各主机属于同一个广播域,某个主机发送到广播数据包,其他所有主机都可以收到。
根据应用需求,我们将该局域网划分成两个VLAN,VLAN1和VLAN1。此后VLAN1中的广播数据包不会传送到VLAN2,VLAN2中的广播数据包也不会传送到VLAN1,也就是说同一个VLAN内部可以广播通信,不同VLAN之间不能广播通信,
小结:
# 3.11.2 虚拟局域网VLAN的实现机制
本节课我们介绍虚拟局域网VLAN的实现机制,虚拟局域网VLAN是在交换机上实现的,需要交换机能够实现以下两大功能,
- 一个是能够处理带有VLAN标记的帧,也就是IEEE 802.1Q帧,
- 另一个是交换机的各端口,可以支持不同的端口类型,不同端口类型的端口,对帧的处理方式有所不同。
我们首先来看 IEEE802.1q帧,也称为dot one q帧。他对以太网的MAC帧格式进行了扩展,插入了四字节的VLAN标记,如图所示,这是以太网版本2的MAC格式,这是插入VLAN标记后的802.1q帧的格式,
VLAN标记的最后12个比特称为VLAN标识符vid,它唯一的标识了以太网帧属于哪一个VLAN , Vid的取值范围是0~4095,其中0和4095都不用来表示VLAN,因此用于表示VLAN的vid的有效取值范围是1~4094,
需要注意的是802.1q帧是由交换机来处理的,而不是用户主机来处理的。当交换机收到普通的以太网帧时会将其插入四字节的VLAN标记,将其转变为802.1q帧,简称为打标签。
当交换机转发802.1q帧时,可能会删除其4字节VLAN标记,将其转变为普通以太网帧,简称为去标签,VLAN标记字段的其他内容,对我们理解VLAN划分机制来说,并没有什么帮助,因此就要不再赘述了。
接下来我们介绍交换机的端口类型,交换机的端口类型一般有以下三种,它们分别是 Access,Trunk,Hybrid。
总结:
Access接受没标签的,只转发同ID的**,转发前去标签**
Trunk****总结:
- 如果收到的帧ID值不相等,直接转发;
- 如果收到的帧ID相等,发送前去标签
- 如果没有id,则打标签
需要说明的是思科交换机没有Hybrid端口。在介绍这三种交换机端口类型之前,我们首先需要了解一下端口的缺省VLAN ID这个概念,在思科交换机上将其称为本征VLAN。例如思科交换机在用户未配置VLAN时,所有端口都默认属于VLAN1,即所有端口的本帧VLAN都是VLAN1,而在华为交换机上将其称为端口VLAN ID剪辑为PVID。 在我们接下来的介绍中,为了描述方便,我们采用PVID而不是本征VLAN。需要注意的是交换机的每个端口,有且仅有一个PVID
接下来我们首先介绍Access端口,Access端口一般用于连接用户计算机,只能属于一个VLAN,因此Access端口的PVID值与端口所属VLAN的ID相同,如图所示主机ABCD分别连接在交换机的一个端口上,交换机首次上电时,默认配置各端口属于VLAN1,也就是各端口的PVID值等于1,默认配置各端口的类型为Access。我们用大写字母A来表示,
Access端口的接收处理方法是一般只接受未打标签的普通以太网MAC帧,根据接收帧的端口的PVID给帧打标签,即插入四字节VLAN标记字段,字段中的VID取值与端口的PVID取值相等。
我们来举例说明,假设主机A发送了一个广播帧,该帧从交换机的端口一进入交换机,由于端口一的类型是Access,它会对接收到的未打标签的普通以太网MAC帧,打标签,也就是插入四字节的VLAN标记字段,如图所示,由于端口一的PVID值等于一,因此所插入的四字节VLAN记字段中的VID的值也等于1。Access端口的发送处理方法是若帧中的VID与端口的PVID相等**,则去标签后转发该帧,否则不转发**。对于本例广播帧中的VID的取值与端口234的PVID取值都等于1,因此交换机会从这三个端口对帧进行去标签转发。
总结:接受没标签的,转发同ID的
再来看这个例子,我们的应用需求是将主机A和B划归到VLAN2,将C和D划归到VLAN3,这样VLAN2中的广播帧不会传送到VLAN3,VLAN3中的广播帧也不会传送到VLAN2,为了实现这种应用,可以在交换机上创建VLAN2和VLAN3,然后将交换机的端口一和二划归到VLAN2,因此端口1和2的PVID值等于2,将交换机的端口3和4划归到VLAN3,因此端口3和4的PVID值等于3。我们来看主机A发送广播帧的情况,该帧从交换机的端口1进入交换机,由于端口1的类型是Access,它会对接收到的未打标签的普通以太网MAC帧打标签,也就是插入四字节的VLAN标记字段,如图所示,由于端口1的PVI D值等于2,
因此所插入的四字节VLAN标记字段中的VID的值也等于2,广播帧中的VID的取值与端口二的PVID取值都等于2,因此交换机会从端口二对帧进行去标签转发。
我们再来看主机C发送广播帧的情况,该帧从交换机的端口三进入交换机,由于端口三的类型是Access,它会对接收到的未打标签的普通以太网MAC帧打标签,也就是插入四字节的VLAN标记字段,如图所示由于端口三的PVID值等于3,因此所插入的四字节VLAN标记字段中的VID的值也等于3,广播帧中的VID的取值与端口4的PVID取值都等于3,因此交换机会从端口4对帧进行去标签转发。
接下来我们介绍Trunk端口,Trunk端口一般用于交换机之间 或交换机与路由器之间的互联,使不同交换机的主机可以属于同个VLAN。
Trunk端口可以属于多个VLAN,也就是说Trunk端口可以接收和发送多个VLAN的帧,用户可以设置Trunk端口的PVID值,默认情况下Trunk端口的PVID值为1,
我们来举例说明Trunk端口的功能,如图所示,两台交换机互联而成了一个交换式以太网,我们的应用需求是将主机ABEF划归到VLAN1,将主机CDGH划归到VLAN2,由于交换机首次上电时默认配置各端口属于VLAN1,其相应的PVID值等于1,并且端口的类型为Access,因此我们需要对交换机进行相应的配置,才能满足应用需求,分别在两个交换机上创建VLAN2,并将他们的端口3和4都划归到VLAN二,其相应的PVID值=2,而两个交换机的端口一和二保持默认配置即可,也就是属于VLAN1,其相应的PVID值等于1。
特别需要注意的是两个交换机互联的端口5,需要将他们的类型更改为Trunk类型,而他们的PVID值保持默认的1即可。Trunk端口的发送处理方法是对VID等于PVID的帧去标签再转发。假设主机A发送了一个广播帧,该帧从交换机一的端口1进入交换机,由于端口一的类型是Access,它会对接收到的未打标签的普通以太网MAC帧打标签,也就是插入四字节的VLAN标记字段,如图所示。由于端口1的PVID值等于1,因此所插入的四字节VLAN标记字段中的VID的值也等于1。该广播帧中的VID的取值与端口二的PVID值都等于1,端口二的类型是Access,因此交换机一会从端口2对帧进行去标签转发
该广播帧中的VID的取值与端口5的PVID值都等于1,端口5的类型是Trunk,因此交换机一会从端口5对帧进行去标签转发,很显然该广播帧会从交换机2的端口5进入交换机二,**Trunk端口的接收处理方法是接收未打标签的帧,**根据接收帧的端口的PVID给帧打标签,即插入四字节VLAN标记字段,字段中的VID取值与端口的PVID取值相等。对于本例交换机2会对接收到的未打标签的普通以太网MAC帧打标签,也就是插入4字节的VLAN标记字段。如图所示,由于端口5的PVID值等于1,因此所插入的4自字节VLAN标记字段中的VIP的值也等于1
该广播帧中的VID的取决与端口1和2的PVID值都等于1,端口1和2的类型都是Access,因此交换机1会从端口1和2对帧进行去标签转发。
总结:
- 如果收到的帧ID值不相等,直接转发;
- 如果收到的帧ID相等,发送前去标签
- 如果没有id,则打标签
再来看主机C发送广播帧的情况,该帧从交换机1的端口3进入交换机,由于端口三的类型是Access,它会对接收到的未打标签的普通以太网MAC帧打标签,也就是插入四字节的VLAN标记字段。如图所示,由于端口3的PVID值=2,因此所插入的4自字节VLAN标标记字段中的VID的值也等于2,该广播站中的VID的取值与端口4的PVI D值都等于2,端口4的类型是Access,因此交换机1会从端口4对帧进行去标签转发,
该广播帧中的VID的取值与端口5的PVID值不相等,由于Trunk端口对VID不等于PVID的,帧是直接转发的,因此交换机1会从端口5对帧直接转发,也就是不去掉标签,而带着标签直接转发。很显然该802.1Q广播帧会从交换机2的端口5进入交换机2 Trunk端口,接收已打标签的802.1Q帧,该广播帧中的VID的取值与端口3和4的PVID值都等于2,端口3和4的类型都是Access类型,因此交换机二会从端口3和4对帧进行去标签转发。通过本例可以看出,再由多个交换机互联而成的交换式以太网装,划分VLAN时,连接主机的交换机端口,应设置为Access类型,交换机之间互联的端口应设置为Trunk类型。
接下来请同学们做一个练习题,以加深对Access端口和Trunk、端口功能的理解。本题的答案如下所示,希望大家都能解答正确。
最后我们简单介绍一下华为交换机私有的Hybrid端口类型,Hybrid的端口即可用于交换机之间或交换机与路由器之间的互联,这一点与Trunk端口相同,也可用于交换机与用户计算机之间的互联,这一点又与Access端口相同。
除此之外,Hybrid端口的绝大部分功能与Trunk端口相同,不同点在于Hybrid端口的发送处理方法,Hybrid的端口会查看帧的VID是否在端口的区域标签列表中,若存在则去标签后再转发,若不存在则直接转发。
接下来我们通过一个简单的应用实例来说明Hybrid端口的功能。主机ABC连接在同一个交换机的不同接口上,请利用Hybrid端口的功能实现以下应用需求,A和B都能与C相互通信,但A与B不能相互通信,如图所示,
我们可以将这三台主机所连接的交换机的三个端口划分到不同的VLAN,并且端口类型设置为Hybrid。假设这三个VLAN分别是VLAN10、VLAN20、VLAN30,相应的PVID分别为10,,20 30。
在端口一的区域标签列表中,配置VLAN10和VLAN30。在端口二的去标签列表中配置VLAN20和VLAN30,在端口三的去标签列表中配置VLAN10,VLAN20,VLAN30,主机A给C发送数据帧,该帧从交换机的端口1进入交换机,由于端口1的类型是Hybrid的,他会对接收到的未打标签的普通以太网MAC帧打标签,也就是插入四字节的VLAN标记字段,如图所示,由于端口一的PVID值等于10,因此所插入的四字节VLAN标记字段中的VID的值也等于10,该帧将从端口三转发,由于帧中的VID的取值在端口3的区标签列表中,因此该帧会被去标签转发,这样主机C就可以收到主机A发送的数据帧。同理,主机C给A发送数据帧,主机A同样可以收到,我们就要不再演示了。
那么主机B给C发送数据帧的具体过程又如何呢?如图所示,
同理,主机C给B发送数据帧,主机B同样可以收到,我们就要不再演示了。
再来看看主机A给B发送数据帧的情况,该帧从交换机的端口一进入交换机,给该帧打标签,其中VIP取值为10,该帧将从端口2转发,由于帧中的VID的取值,不在端口2的去标签列表中,因此该帧被直接转发,这样主机B就会收到一个带有VLAN标记的802.1Q帧,但是主机B可以识别普通以太网MAC帧,而不能识别802.1Q帧,只能丢弃该帧。同理,主机B给A发送的普通以太网MAC帧,主机A收到的却是802.1Q帧,无法识别而丢弃。
本节课的内容小结如下
# 小结