计算机网络-数据链路层
计算机网络慕课地址:https://www.bilibili.com/video/BV1c4411d7jb?p=21
1 基本概述
网络中的主机、路由器等都必须实现数据链路层
步骤操作
主机H1给主机H2发送数据,中间要经过3个路由器和电话网、局域网以及广域网等多种网络。
步骤操作
从五层协议原理体系结构的角度来看,主机应该具有体系结构中的各个层次,而且路由器只需要具有体系结构中的下面三层。
各设备通过物理层下面的传输媒体进行互连。
从层次上来看数据的流动
步骤操作
当主机H1向H2发送数据时,主机H1将待发送的数据逐层封装后,通过物理层将构成的数据包的各比特转换为电信号。
发送到传输媒体数据包进入路由器后,由下往上逐层解封到网络层。路由器根据数据包的目的网络地址和自身转发表,确定数据包的转发端口。
从网络层向下逐层封装数据包,并通过物理层将数据包发送到传输媒体,数据包最终到达H2时。还要由下往上逐层解封,最终解封出主机H1所发送的数据。
仅从数据链路层观察帧的流动
步骤操作
数据包只在数据链层从左向右沿水平方向传送,主机H1到H2的通信,可以看成是在4段不同的链路上的通信组成的。
数据链路层基本概述
2 三个重要问题
数据链路层传送的协议数据单元是帧
2.1 封装成帧
步骤操作
如图所示,两台主机通过一段链路互连,两台主机都会对所发送或者接收的数据包,进行五个层次的封装或者解封。
发送方将待发送的数据,通过应用层封装成应用层协议数据单元,然后交付给运输层。
运输层为其添加运输层协议首部,使之成为运输层协议数据单元,然后交付给网络层。网络层为其添加网络层协议首部。使之成为网络层协议数据单元,然后交付给数据链路层。
数据链路层给网络层协议数据单元添加一个数据链路层协议首部,简称为帧头。我们将数据链路层给网络层交付的协议数据单元,添加帧头和帧尾的操作,称为封装成帧。
添加帧头和帧尾的目的,都是为了在链路上以帧为单元来传送数据。也就是为了实现数据链路层本身的功能。
2.2 差错控制
发送方将封装好的帧通过物理层发送到传输媒体,帧在传输过程中遭遇干扰后可能会出现误码。
接收方主机如何判断帧在传输过程中出现误码?
通过检错码来发现,发送方在发送帧之前,基于待发送的数据和检错算法计算出检错码,并将其封装在帧尾,接收方主机收到帧后。
通过检错码和检错算法,就可以判断出帧在传输过程中是否出现了误码。
2.3 可靠传输
接收方主机收到有误码的帧后,是不会接受该帧的,将其丢弃。
如果数据链路层向其上层提供的是不可靠服务,那么丢弃就丢弃了,不会再有更多措施。
如果数据链路层向其上层提供的是可靠服务,那就还需要其他措施,来确保接收方主机还可以重新收到被丢弃的这个帧的正确副本。
换句话来说,尽管误码是不可能完全避免,但是如果能实现发送方发送什么,接收方就能收到什么,就称为可靠传输。
注意:以上三个问题都是使用点对点信道的数据链路层来举例的。
如果使用广播信道的数据链路层除了包含上面三个问题外,还有一些问题要解决
如图所示,主机A,B,C,D,E通过一根总线进行互连,主机A要给主机C发送数据,代表帧的信号会通过总线传输到总线上的其他各主机,那么主机B,D,E如何知道所收到的帧不是发送给她们的,主机C如何知道发送的帧是发送给自己的。
可以用编址(地址)的来解决
将帧的目的地址添加在帧中一起传输
数据碰撞问题
随着技术的发展,交换技术的成熟。
在有线领域使用点对点链路和链路层交换机的交换式局域网取代了共享式局域网。
在无线局域网中仍然使用的是共享信道技术。
3 封装成帧
3.1 基本介绍
封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧。
帧头和帧尾中包含有重要的控制信息
发送方的数据链路层将上层交付下来的协议数据单元封装成帧后,还要通过物理层,将构成帧的各比特,转换成电信号交给传输媒体,那么接收方的数据链路层如何从物理层交付的比特流中提取出一个个的帧?
结论:需要帧头和帧尾来做帧定界。
但比不是每一种数据链路层协议的帧都包含有帧定界标志,例如下面例子
结论:
实际上,以太网的数据链路层封装好MAC帧后,将其交付给物理层,添加8字节的前导码,然后再将比特流转换成电信号发送。
前导码中的前7个字节为前同步码,作用是使接收方的时钟同步。之后的1字节为帧开始定界符,表明其后面紧跟的就是MAC帧。
另外以太网还规定了帧间间隔为96比特时间,因此,MAC帧不需要帧结束定界符。
3.2 透明传输
透明传输是指数据链路层对上层交付的传输数据没有任何限制,好像数据链路层不存在一样。
案例说明
这是发送方数据链路层收到其上层交付的协议数据单元,给其添加了帧头和帧尾,使其为帧,帧界定标志也就是个特定数据值,如果在上层交付的协议数据单元中, 恰好也包含这个特定数值,接收方就不能正确接收。
步骤说明
接收方在收到第一个帧定界标志时,认为是帧的开始。当接收方再次接收到帧定界标志时会误认为帧结束了。
如果数据链路层不采取其他措施,来避免接收方对帧是否结束的误判,就不能称为透明传输。
数据链路层对上层交付的协议数据单元有限制,其内容不能包含帧定界符。
3.3 解决透明传输问题
面向字节的物理链路:使用字节填充(或称字符填充)的方法实现透明传输。
步骤说明
在发送帧之前,对帧的数据部分进行扫描,每出现一个帧定界符,就在其前面插入一个转义字符。
接收方数据链路层在物理层交付的比特流中提取帧,遇到第一个帧定界符时,认为这是帧的开始。当遇到转义字符就知道,其后面的1字节内容虽然与帧定界符相同。但是他是数据而不是定界符,剔除转义字符后将其后面的内容作为数据继续提取。
对于这个转义字符也是相同的处理,当再次提取到帧定界符时,表明这是帧的结束。
转义字符:是一种特殊的控制字符,其长度为1字节,十进制值为27,而不是ESC这3个字符。
面向比特的物理链路: 使用比特填充的方法实现透明传输。
发送方
在帧首部和尾部中,仅仅给出了帧定界标志,而未给出其他控制字段,而帧的数据部分,出现了两个帧定界标志。出现了两个帧定界标志。
他们实际上是数据,而不是帧定界。在发送前,可以采用零比特填充法,对数据部分进行扫描,每5个连续的比特1后面就插入1个比特0。这样就确保了帧定界在整个帧中的唯一性,也就可以实现透明传输。
接收方
接收方的数据链路层,从物理层交付的比特流中提取帧时,将帧的数据部分中的每5个连续的比特1后面的那个比特0剔除即可。
帧的数据部分长度
结论:
帧的数据部分的长度,应该大于帧头和帧尾的长度。因为仅从数据链路层来看,帧的数据部分才是真正要传输的数据。
帧头和帧尾是为了实现数据链路层功能而额外添加的。
3.4 总结
4 差错检测
4.1 基本介绍
FCS作用
让接收方的数据链路层检查帧在传输过程中是否产生了误码。
4.2 奇偶校验
4.3 循环冗余校验CRC
基本概念
案例一
案列二
结论
5 可靠传输
5.1 基本概念
比特差错
其他传输差错
5.2 分组丢失
路由器输入队列快满了,主动丢弃收到的分组。
步骤说明
此处我们将帧的称呼改为了分组,这意味着传输差错不仅仅局限于数据链路层的比特错差。
主机H6给主机H2发送的分组到达了路由器R5,由于此时R5的输入队列快满了。R5根据自己的分组丢弃策略将该分组丢弃,这是一种分组丢失的情况。
5.3 分组失序
数据并未按照发送顺序依次到达接收端。
步骤说明
主机H6依次给主机H2发送了三个分组,最先发送的分组未必最先到达。
5.4 分组重复
步骤说明
主机H6给主机H2发送的分组,由于某些原因在网络中滞留了没有及时到达H2,这可能造成H6对该分组的超时重发。
重发的分组到达H2,一段时间后滞留在网络中的那个分组有到达了H2,这就会造成分组重复的传输差错。
5.5 总结
6 三种可靠协议
- 停止-等待协议SW
- 回退N帧协议GBN
- 选择重传协议SR
这三种可靠传输实现机制的基本原理并不仅限于数据链路层,可以应用到计算机网络体系结构的各层协议中。
6.1 停止-等待协议
6.1.1 确认与否认
步骤实现
收发双方基于互联网进行通信,而不是局限在一条点对点的数据链路,发送方给接收方发送数据分组,接收方收到后对其进行差错检测,如果没有误码,则接受该数据分组,并给发送方发送确认分组,简称为ACK。
发送方收到对所发送数据分组的确认分组后,才能发送下一个数据分组,假设这个数据分组在传输过程中出现了误码。接收方收到后对其进行差错检测,发现了误码,则丢弃该数据分组,并且给发送方发送否认分组,简称为NAK。
发送方收到对所发送数据分组的否认分组后,就知道了之前自己所发送的数据分组,出现了差错而被接收方拒绝,于是立刻重传该数据分组。但是并不能立刻将该数据分组从缓存中删除,只有在收到针对该数据分组的确认分组后,才能将其从缓存中删除。看来,发送方每发送完一个数据分组后,就停止发送下一个数据分组,等待来自接收方的确认分组或者否认分组。
结论
如果收到确认分组,则可继续发送下一个数据分组,如果收到否认分组,则重发之前发送的那个数据分组,这样就实现了发送方发送什么,接收方最终都能收到什么,也就是所谓的可靠传输。
6.1.2超时重传
发送方给接收方发送数据分组,然而该数据分组在传输过程中丢失了,需要说明的是,对于数据链路层点对点信道而言,不容易出现这种情况,但是对于多个网络通过多个路由器,互连的复杂互联网环境而言,这种情况经常出现。
步骤实现
如上图所示,发送方超时重传之前所发送的数据分组,接收方正确接收重传的数据分组后,给发送方发送确认分组。发送方收到确认分组后,发送下一个数据分组。接收方正确接收该数据分组后,给发送方发送确认分组。
目前为止,貌似基于停止等待,使用确认或者否认分组,再加上超时重传的手段,就可以实现可靠传输。
6.1.3 确认丢失
结论: 数据分组需要编号,确认分组也需要编号。
6.1.4 确认迟到
注意事项:上图最下面那个数据分组与之前序号为0的那个数据分组不是同一个数据分组!!!
总结
6.2 信道利用率
假设收发双方之间是一条直通的信道
- TD:是发送方发送数据分组所耗费的发送时延
- RTT:是收发双方之间的往返时间
- TA:是接收方发送确认分组所耗费的发送时延
TA一般都远小于TD,可以忽略,当RTT远大于TD时,信道利用率会非常低。
注意
停止-等待协议这样通过确认和重传机制实现的可靠传输协议,常称为自动请求重传协议ARQ(Automatic Repeat reQuest),意思是重传的请求是自动进行,因为不需要接收方显式地请求,发送方重传某个发送的分组。
6.3 回退N帧协议GBN
6.3.1两者对比
在相同的时间内,使用停止-等待协议的发送方只能发送一个数据分组,而采用流水线传输的发送方,可以发送多个数据分组。
回退N帧协议在流水线传输的基础上,利用发送窗口来限制发送方可连续发送数据分组的个数。
6.3.2 无差错情况流程
发送方将序号落在发送窗口内的0~4号数据分组,依次连续发送出去。
他们经过互联网传输正确到达接收方,就是没有乱序和误码,接收方按序接收它们,每接收一个,接收窗口就向前滑动一个位置,并给发送方发送针对所接收分组的确认分组,在通过互联网的传输正确到达了发送方。
发送方每接收一个、发送窗口就向前滑动一个位置,这样就有新的序号落入发送窗口,发送方可以将收到确认的数据分组从缓存中删除了,而接收方可以择机将已接收的数据分组交付上层处理。
6.3.3 累加确认
优点:
- 即使确认分组丢失,发送方也可能不必重传
- 减小接收方的开销
- 减小对网络资源的占用
缺点:
- 不能向发送方及时反映出接收方已经正确接收的数据分组信息
6.3.4 差错情况
操作步骤
发送方将序号落在发送窗口内的5个数据分组依次连续发送出去,它们经过互联网的传输到达了接收方,假设它们在传输过程中受到了干扰。
在传输数据分组时,5号数据分组出现误码,接收方通过数据分组中的检错码发现了错误。
于是丢弃该分组,而后续到达的这剩下四个分组与接收窗口的序号不匹配。
接收同样也不能接收它们,讲它们丢弃,并对之前按序接收的最后一个数据分组进行确认,发送ACK4,每丢弃一个数据分组,就发送一个ACK4。
当收到重复的ACK4时,就知道之前所发送的数据分组出现了差错,于是可以不等超时计时器超时就立刻开始重传,具体收到几个重复确认就立刻重传,根据具体实现决定。
如果收到这4个重复的确认并不会触发发送立刻重传,一段时间后。超时计时器超时,也会将发送窗口内以发送过的这些数据分组全部重传。
若WT超过取值范围,例如WT=8,会出现什么结果!!!
结论: 接收方无法分辨新、旧数据分组,因此,发送窗口的尺寸不能超过其上限。
6.3.5 总结操作
- 回退N帧协议在流水线传输的基础上利用发送窗口来限制发送方连续发送数据分组的数量,是一种连续ARQ协议。
- 在协议的工作过程中发送窗口和接收窗口不断向前滑动,因此这类协议又称为滑动窗口协议。
- 由于回退N帧协议的特性,当通信线路质量不好时,其信道利用率并不比停止-等待协议高。
6.4 选择重传协议SR
产生原因
6.4.1 产生原理
步骤一
发送方将序号落在发送窗口内的这4个数据分组依次连续发送出去,它们经过互联网的传输陆续到达接收方,但是其中2号数据分组丢失了。
注意:只要序号落入接收窗口内目无误码的数据分组,接收方都会接收。
步骤二
接收方接收3号数据分组,并且确认分组。但是接收窗口不能向前滑动,因为3号数据分组未按序到达的数据分组。
确认分组是经过传输陆续到达发送方,发送方每按序收到一个确认分组,发送窗口向前滑动一个位置。
发送方接收0、1号,发送窗口向前滑动两个位置。然后4、5两个新序号落入发送窗口,然后将其发送出去。
发送方现在可以将已经收到确认的0、1数据分组,从发送缓存中删除,然后接收方将已按序接收的0和1数据分组交付上层处理。
步骤三
发送方接收3号确认分组,但是发送窗口不能向前滑动,因为这是一个未按序到达的确认分组,发送方还没有收到它之前2号确认分组。
不过,需要记录3号数据分组已经收到确认,这样该数据分组就不会超时重发。4号和5号数据分组到达接收方,发送方并发送4号和5号确认分组。
但是接收窗口不能向前滑动,因为他们是未按序到达的数组分组。
步骤四
假设在4号和5号确认分组的传输过程中,发送方针对2号数据分组的重传计时器超时了。发送方重传2号数据分组,发送方重传2号数据分组。
4号和5号确认分组陆续到达发送方,但是发送窗口不能向前滑动(未按序到达),发送方还未收到他们之前的2号确认分组。
不过,需要记录4号和5号数据分组已经收到确认,这样它们就不会超时重发。发送方之前重传的2号数据分组到达接收方。
接收方接收该数据分组,并发送2号确认分组。接收窗口现在可以向前滑动4个位置,这样就有6、7、0、1这四个新的序号落入接收窗口。2号确认分组经过互联网的传输到达发送方。
步骤五
发送方接收确认分组,发送窗口现在可以向前滑动4个位置。这样就有6、7、0、1这四个新的序号落入发送窗口。
发送方现在就可以继续将这四个序号的数据分组依次发送出去了。
6.4.2 窗口尺寸
步骤1
发送方将序号落入发送窗口内的04号这五个数据分组依次发送出去,它们经过互联网的传输依次到达接收方,接收方接收它们,并发送04号确认分组。
步骤2
接收窗口向前滑动5个位置。这样就有5、6、7、0、1这5个新的序号落入接收窗口,这些确认分组经过互联网的传输陆续到达发送方。
但是其中的0号确认分组丢失了,发送方接收14号确认分组,并且记录14号数据分组已经收到确认。
发送窗口不能向前移动,0号数据分组的重传计时器超时了,发送方重传0号数据分组。
步骤三
该数据分组经过互联网的传输到达接收方,其序号0落在接收窗口内,接收方会接收它。
但是,接收方先前已经正确接收过该数据分组了,如果现在还要接收。那就会出现分组重复这种传输差错,如果发送窗口和接收窗口的尺寸超过了取值范围。
就会使接收方无法分辨新、旧数据分组,进而出现分组重复这种传输差错。
结论
7 点对点协议(PPP)
7.1 基本概念
- 点对点协议PPP(Point-to-Point Protocol)是目前使用最广泛的点对点数据链路层协议
- PPP协议是因特网工程任务组IEIF在1992年制定的。经过1993年和1994年的修订,现在的PPP协议已成为因特网的正式标准[RFC1661,RFC1662]
- 数据链路层使用的一种协议,它的特点是:简单;只检测差错,而不是纠正差错;不使用序号,也不进行流量控制;可同时支持多种网络层协议
7.1.1标准方法
7.2 帧格式
必须规定特殊的字符作为帧定界符。
7.3 透明传输
必须保证数据传输的透明性
7.3.1实现透明传输的方法
面向字节的异步链路:字节填充法
面向比特的同步链路:比特填充法
7.4 差错检测
能够对接收端收到的帧进行检测,并立即丢弃有差错的帧。
使用循环冗余校验CRC来计算该字段的取值。PPP帧的尾部包含1个两字节的帧检验序列FCS字段。
7.4.1工作状态
8 媒体接入控制
8.1 基本概念
共享信道带来的问题
若多个设备在共享信道上同时发送数据,则会造成彼此干扰,导致发送失败。
8.2 静态划分信道
8.2.1频分复用FDM
将传输线路的频带资源划分多个子频带,形成多个子信道,各子信道直接需要留出隔离频带,以免造成子信道间的干扰。
当多路信号输入一个多路复用器时,这个复用器将每一路信号调制到不同频率的载波上。
连接端由相应的分用器通过滤波将各路信号分开,将合成的复用信号恢复成原始的多路信号。
很显然,频分复用的所有用户同时占用不同的频带资源并行通信。
8.2.2 时分复用TDM
横坐标为时间,将时间划分成一个个时隙。时分复用技术将传输线路的带宽资源,按时隙轮流分配给不同的用户。
每队用户只在所分配的时隙里使用线路传输数据,时分复用技术将时间划分成了一段段等长的时分复用帧。每一个时分复用的用户在每一个时分复用帧占用固定序号的时隙,如图所示,每一个用户所占用的时隙是周期性出现的,其周期就是时分复用帧的长度。很显然,时分复用的所有用户在不同的时间占同样的频带宽度。
8.2.3 波分复用 WDM
波分复用就是光的频分复用,使用一根光纤来同时传输多个光载波信号。
光信号传输一段距离后悔衰减,所以要用 掺铒光纤放大器 放大光信号。
8.2.4 码分复用 CDM
公式如下
8.3 动态接入控制
8.3.1随机接入(CSMA/CD协议)
多个主机连接到一根总线上,各主机随机发送帧。代表帧的信号就会产生碰撞或者称为冲突。
又或者当某个主机正在使用总线发送帧的过程中,另一台主机也要发送帧,这同样也会产生碰撞。
尽量避免产生碰撞是一个必须要解决的重要问题。早期的共享式以太网采用“载波监听多址接入”/碰撞检测。也就是SCMA/CD协议来解决该问题。
8.3.2 三种方式概念
8.3.3多址接入MA
表示许多主机以多点接入的方式连接在一根总线上。
8.3.4 载波监听CS
是指每一个站在发送数据之前先要检测一下总线上是否有其他计算机在发送数据,如果有,则暂时不要发送数据,以免发生碰撞。
总线上并没有什么“载波”。因此, 载波监听就是用电子技术检测总线上有没有其他计算机发送的数据信号。
8.3.5碰撞检测CD
- 碰撞检测就是计算机边发送数据边检测信道上的信号电压大小。
- 当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大(互相叠加)。
- 当一个站检测到的信号电压摆动值超过一定的门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞。
- 所谓“碰撞”就是发生了冲突。因此“碰撞检测”也称为“冲突检测”。
- 在发生碰撞时,总线上传输的信号产生了严重的失真,无法从中恢复出有用的信息来。
- 每一个正在发送数据的站,一旦发现总线上出现了碰撞,就要立即停止发送,免得继续浪费网络资源,然后等待一段随机时间后再次发送。
为什么要进行碰撞检测? 因为信号传播时延对载波监听产生了影响
总结 : A 需要单程传播时延的 2 倍的时间,才能检测到与 B 的发送产生了冲突。
8.4 CSMA/CD 协议
8.4.1 争用期(碰撞窗口)
注意:为什么a停止时间是2t - &,就是碰撞时间乘X2。含义就是到碰撞位置的往返时间。
8.4.2 最小帧长
A在发送期间,才会检测碰撞,如果检测到了碰撞就会重发,如果帧已经发完了,就不会主动检测碰撞。
8.4.3 最大帧长
8.4.4 截断二进制指数退避算法
8.4.5 信道利用率
8.4.6 帧发送流程
8.4.7 帧接收流程
8.4.9 总结
8.5 CSMA/CA协议
8.5.1 基本概念
无线局域网要使用CSMA/CA协议?
图1分析
A的信号范围可以覆盖到B,但是不能覆盖到C,C的信号范围可以覆盖到B,但是不能覆盖到A。
A和C都检测不到对方的无线信号,A和C都给B发送帧时,产生碰撞,A和C都无法检测到碰撞。
图2分析
总线上某个主机发送信号,最多经过一个总线端到端传播时延,就会被总线上的各主机接收到,而且总线上产生的碰撞信号。
最多经过一个总线端到端往返传播时延,也会传遍总线。
8.5.2 帧间间隔IFS
8.5.4 工作原理
步骤需求
假设无线信道是空闲的,源站有数据帧要发送。当源站检测到信道空闲。则在等待帧间间隔DIFS后发送该数数据帧,目的站若正确收到该数据帧,则经过帧间间隔SIFS后,向源站发送确认帧ACK。
需要说明的是,如果源站在规定时间内没有收到确认帧ACK,由于重传计时器控制这段时间就必须重传该数据帧,直到收到确认为止。或者经过若干次的重传失败后放弃发送。
源站为什么在检测到信道空闲后还要再等待一段时间DIFS?
考虑到可能有其他的站有高优先级的帧要发送。若有,就要让高优先级帧先发送。
目的站为什么正确接收数据帧后还要等待一段时间SIFS才能发送ACK帧?
SIFS是最短的帧间间隔,用来分隔开属于一次对话的各帧,在这段时间内,一个站点应当能够从发送方式切换到接收方式。
信道由忙转为空闲且经过DIFS时间后,还要退避一段随机时间才能使用信道?
防止多个站点同时发送数据而产生碰撞。
8.5.5 使用退避算法的时机
当站点检测到信道是空闲的,并且所发送的数据帧不是成功发送完上一个数据帧之后立即连续发送的数据帧,则不使用退避算法。
以下情况必须使用退避算法:
- 在发送数据帧之前检测到信道处于忙状态。
- 在每一次重传一个数据帧时。
- 在每一次成功发送后要连续发送下一个帧时,这是为了避免一个站点长时间占用信道。
8.5.6 CSMA/CA协议的退避算法
退避算法的示例
步骤一
A、B、C、D、E 是5个无线站点,横坐标为时间。假设A正在占用无线信道发送帧,在A 的发送过程中。B、C、D也要发送帧,我们用向上的箭头来表示。通过进行载波监听,发现信道忙需要退避。根据退避算法选择出一个随机的退避时间,并且在每个时隙对信道进行一次检测。当检测到信道由忙状态转为空闲状态且经过帧间间隔DIFS后,退避计时器开始倒计时。
步骤二
假设C的退避时间最短,当C的退避计时器到时后,C立即开始发送帧,此时信道由空闲状态转换为忙状态。当B和D检测到信道忙后,就冻结各自剩余的退避时间,假设在C占用无线信道发送帧的过程中,E也要发送帧,于是进行载波监听,发现信道忙,需要退避。根据退避算法选择出一个随机的退避时间,并在每个时隙对信道进行一次检测。当检测到信道由忙状态转为空闲状态,且经过帧间间隔DIFS后,退避计时器开始倒计时。当B和D检测到检测到信道由忙状态转为空闲状态,且经过帧间间隔DIFS后,退避计时器重新开始从上次冻结的退避剩余时间开始倒计时。D的退避计时器会首先到时,D立即开始发送帧。
步骤三
此时信道由空闲状态转换为忙状态,当B和E检测到信道忙后,就冻结各自剩余的退避时间。当D发送完帧后,信道将转为空闲状态,当B和E检测到信道由忙状态转为空闲状态,且经过帧间间隔DIFS后,退避计时器重新开始从上次冻结的退避剩余时间开始倒计时,E的退避计时器会首先到时,E立即开始发送帧。
步骤四
此时信道由空闲状态转换为忙状态,当B检测到信道忙后,就冻结自己的剩余的退避时间,当E发送完帧后,信道将转为空闲状态。当B检测到信道由忙状态转换为空闲状态,且经过帧间间隔DIFS后,退避计时器重新开始从上次冻结的退避剩余时间开始倒计时。当B的退避计时器到时后,B立即开始发送帧。若B发送完这一帧后还有帧要发送,则在检测到信道空闲,且经过帧间间隔DIFS后,还必须再退避一段随机时间后才能发送。
8.5.7 信道预约和虚拟载波监听
虚拟载波监听机制碰撞问题
步骤1
如图所示这是四个无线站点,A和C互为隐蔽站。A的信号可以覆盖到B,但是不能覆盖到C,C的信号可以覆盖到B,但是不能覆盖到A,A在给B发送数据帧前。
可以使用RTS帧来预约信道,尽管C收到不该RTS帧,但是C可以收到B发送给A的CTS帧,这样C就知道了信道将被占用多长时间。在这段时间内C都不会争用信道,也就是说,A给B发送数据帧时不会收到C的干扰。
9 MAC地址
9.1 基本概念
MAC地址是以太网的MAC子层所使用的地址,位于数据链路层。
MAC地址
使用点对点信道的数据链路层不需要使用地址。
使用广播信道的数据链路层必须使用地址来区分各主机。
9.2 使用地址原因(MAC)
步骤1
如上图所示,这是主机C要发送给主机D的帧,则在帧首部中的目的地址字段,应该填入主机D的MAC地址,而在源地址字段,应该填入主机C自己的MAC地址。
这样,总线上其他各主机收到该帧后,就可以根据帧首部中的目的地址字段的值,是否与自己的MAC地址匹配进而丢弃或者接受该帧。
总结
MAC地址又称为硬件地址或物理地址,物理地址属于数据链路层。
9.3 IEEE 802局域网MAC地址格式
组织唯一标识符OUI
- 生产网络设备的厂商,需要向IEEE的注册管理机构申请一个或多个OUI。
网络接口标识符
- 由获得OUI的厂商自行随意分配。
EUI-48
- 48是这个MAC地址的位数。
注意点
对于使用EUI-48空间的应用程序,IEEE的目标寿命为100年(直到2080年),但是鼓励采用EUI-64作为替代。
9.4 发送顺序
9.5 单播MAC地址
步骤一
主机B给主机C发送单播帧,主机B首先要构建该单播帧,在帧首部中的目的地址字段填入主机C的MAC地址,源地址字段填入自己的MAC地址,再加上帧首部的其他字段、数据载荷以及帧尾部,就构成了该单播帧。
步骤二
主机B将该单播帧发送出去,主机A和C都会收到该单播帧
主机A的网卡发现该单播帧的目的MAC地址与自己的MAC地址不匹配,丢弃该帧
主机C的网卡发现该单播帧的目的MAC地址与自己的MAC地址匹配,接受该帧,并将该帧交给其上层处理。
9.6 广播MAC地址
步骤一
假设主机B要发送一个广播帧,主机B首先要构建该广播帧,在帧首部中的目的地址字段填入广播地址,也就是十六进制的全F,源地址字段填入自己的MAC地址,再加上帧首部中的其他字段、数据载荷以及帧尾部,就构成了该广播帧。
步骤二
主机B讲该广播帧发送出去,主机A和C都会收到该广播帧,发现该帧首部中的目的地址字段的内容是广播地址,就知道该帧是广播帧,主机A和主机C都接受该帧,并将该帧交给上层处理。
9.7 多播MAC地址
步骤一
假设主机A要发送多播帧给该多播地址。将该多播地址的左起第一个字节写成8个比特,第一个字节的最低比特位是1,这就表明该地址是多播地址。
快速判断地址是不是多播地址,就是如图所示箭头所指的第十六进制数不能整除2(1,3,5,7,9,B,D,F),则该地址是多播地址。
步骤二
假设主机B,C和D支持多播,各用户给自己的主机配置多播组列表。
主机B属于两个多播组,主机C也属于两个多播组,而主机D不属于任何多播组。
步骤三
主机A首先要构建该多播帧,在帧首部中的目的地址字段填入该多播地址,源地址点填入自己的MAC地址,再加上帧首部中的其他字段、数据载荷以及帧尾部,就构成了该多播帧。
步骤四
主机A将该多播帧发送出去,主机B、C、D都会收到该多播帧。
主机B和C发现该多播帧的目的MAC地址在自己的多播组列表中,主机B和C都会接受该帧。
主机D发现该多播帧的目的MAC地址不在自己得多播组列表中,则丢弃该多播帧。
给主机配置多播组列表进行私有应用时,不得使用公有的标准多播地址。
10 IP地址
10.1 基本概念
IP地址是TCP/IP体系结构网际层所使用的的地址。
10.2 网络体系结构看IP地址
由于IP地址属于网络体系结构中的网络层的范围。因此在网络层首部中应该封装有源IP地址和目的IP地址。
由于MAC地址属于网络体系结构中数据链路层的范畴,因此在数据链路层首部中应该封装有源MAC地址和目的MAC地址。
数据包转发过程中IP地址与MAC地址的变化情况
注意
各主机和路由器各接口的IP地址和MAC地址用简单的标识符来表示。
主机中有完整的网络体系结构,而路由器的最高层为网络层,它没有网络体系结构中的运输层和应用层。
结论
数据包转发过程中源IP地址和目的IP地址保持不变。
数据包转发过程中源MAC地址和目的MAC地址逐个链路(或逐个网络)改变。
如何从IP地址找出其对应的MAC地址?
ARP协议
11 ARP协议
11.1 基本流程
11.2 ARP高速缓存表
步骤一
假设主机B要给主机C发送数据包,主机B知道主机C的IP地址,但是不知道他的MAC地址,主机B的数据链路层在封装MAC帧时,就无法填写目的MAC地址字段。
进而也就无法构建出要发送的MAC帧,每台主机都会有一个ARP高速缓存表。
步骤二
当主机B要给主机C发送数据包时,会首先在自己的ARP高速缓存表中,查找主机C的IP地址所对应的MAC地址,但是没有找到。
步骤三
主机B需要发送ARP请求报文,来获取主机C的MAC地址,总线上的其他主机都能收到该广播帧,主机A的网卡收到该广播帧后,将其送交上层处理。
上层的ARP进程解析ARP请求报文,发现所查询问的IP地址不是自己的IP地址,选择放弃。主机C的网卡收到该广播帧后将其送交上层处理。
上层的ARP进程解析ARP请求报文,发现所查询问的IP地址正是自己的IP地址,需要进行响应。
步骤四
需要注意的是,ARP响应报文被封装在MAC帧中发送,目的地址为主机B的MAC地址。主机C给主机B发送封装有ARP响应报文的单播帧。
总线上的其他主机都能收到该单播帧。
步骤五
主机A的网卡收到该单播帧后,发现其目的的MAC地址与自己的MAC地址不匹配,直接丢弃该帧。主机B的网卡收到该单帧后,发现其目的MAC地址就是自己的MAC地址,将其交付上层处理。上层的ARP进程解析ARP响应报文,将其所包含的主机C的IP地址与MAC地址,记录到自己的ARP高速缓存表中。
步骤六
主机B现在可以给主机C发送之前想发送的数据包了,ARP高速缓存表中的每一条记录,都有其类型。
步骤七
动态类型是指记录是主机自动获取到的,其生命周期默认为两分钟,当生命周期结束时,该记录将自动删除,IP地址与MAC地址的对应关系并不是永久性的。
静态类型是指记录是用户或者网络维护人员手工配置的,不同操作系统下的生命周期不同。
ARP协议只能在一段链路或一个网络上使用,而不能跨网络使用
ARP协议只能在一段链路或一个网络上使用,ARP协议的使用是逐段链路进行的,而不能跨网络使用。
12 集线器与交换机
12.1 基本概念
- 传统以太网最初是使用粗同轴电缆,后来演进到使用比较便宜的细同轴电缆,最后发展为使用更便宜和更灵活的双绞线。
- 采用双绞线的以太网采用星形拓扑,在星形的中心则增加了一种可靠性非常高的设备,叫做集线器 (hub)。
- 集线器是也可以看做多口中继器,每个端口都可以成为一个中继器,中继器是对减弱的信号进行放大和发送的设备。
- 集线器的以太网在逻辑上仍是个总线网,需要使用CSMA/CD协议来协调各主机争用总线,只能工作在半双工模式,收发帧不能同时进行。
12.2 使用集线器扩展
将多个以太网段连成更大的、多级星形结构的以太网。
- 优点
- 使原来属于不同碰撞域的以太网上的计算机能够进行跨碰撞域的通信。
- 扩大了以太网覆盖的地理范围。
- 缺点
- 碰撞域增大了,但总的吞吐量并未提高。
- 如果不同的碰撞域使用不同的数据率,那么就不能用集线器将它们互连起来。
12.3 以太网交换机
基本概念
- 扩展以太网更常用的方法是在数据链路层进行。
- 早期使用网桥,现在使用以太网交换机。
网桥
- 网桥工作在数据链路层。
- 它根据 MAC 帧的目的地址对收到的帧进行转发和过滤。
- 当网桥收到一个帧时,并不是向所有的接口转发此帧,而是先检查此帧的目的MAC 地址,然后再确定将该帧转发到哪一个接口,或把它丢弃。
交换机
- 1990 年问世的交换式集线器 (switching hub) 可明显地提高以太网的性能。
- 交换式集线器常称为以太网交换机 (switch) 或第二层交换机 (L2 switch),强调这种交换机工作在数据链路层。
- 以太网交换机实质上就是一个多接口的网桥
12.4 HUB与SWITCH区别
使用集线器互连而成的共享总线式以太网上的某个主机,要给另一个主机发送单播帧,该单播帧会通过共享总线传输到总线上的其他各个主机。
使用交换机互连而成的交换式以太网上的某个主机,要给另一个主机发送单播帧,该单播帧进入交换机后,交换机会将该单播帧转发给目的主机,而不是网络中的其他各个主机。
以太网交换机交换方式
存储转发方式
- 把整个数据帧先缓存后再进行处理。
直通 (cut-through) 方式
- 接收数据帧的同时就立即按数据帧的目的 MAC 地址决定该帧的转发接口,因而提高了帧的转发速度。
- 它不检查差错就直接将帧转发出去,因此有可能也将一些无效帧转发给其他的站。
注意:使用集线器的以太网在逻辑上是共享总线的,需要使用CSMA/CD协议来协调各主机争用总线。只能工作在半双工模式,也就是收发帧不能同时进行。
12.5 对比集线器和交换机
单播帧
- 对于使用集线器的共享总线型以太网,单播帧会传播到总线上的其他主机。各主机中的网卡,根据帧的目的MAC地址,决定是否接受该帧。
- 对于使用交换机的交换式以太网,交换机收到单播帧后,根据帧的目的MAC地址和自身的帧交换表将帧发送目的主机,而不是网络中的其他各主机。
广播帧
- 对于使用集线器的共享总线型以太网,广播帧会传播到总线上的其他各主机。各主机中的网卡、检测到帧的目的MAC地址是广播地址,就接收该帧。
- 对于使用交换机的交换式以太网,交换机收到广播帧后,检测到帧的目的MAC地址是广播地址。
- 于是从除该帧进入交换机接口外的其他各接口转发该帧,网络中除源主机的其他各主机收到广播帧后,接受该广播帧。
结论:
使用集线器的共享总线型以太网中的各主机、属于同一个广播域。而使用交换机的交换式以太网的各主机,也属于同一个广播域。对于广播帧的情况,从效果上看没有什么区别。
对比网络中的多台主机,同时给另一台主机发送单播帧的情况
对于使用集线器的共享总线型以太网,这必然会产生碰撞,遭遇碰撞的帧会传播到总线上的各主机。
对于使用交换机的交换式以太网,交换机收到多个帧时,会将他们缓存起来,然后逐个转发给目的主机,不会产生碰撞。
12.6 集线器扩展以太网和交换机扩展以太网区别
单播情况
很显然,交换机具有明显的优势。
广播情况
从效果上看是一样的,不管使用集线器还是交换机来拓展以太网,拓展后的以太网中的各主机都属于同一个广播域。仅使用集线器拓展的以太网在逻辑上仍然是共享总线的,并且形成为一个更大的碰撞域,参与竞争总线的主机比拓展前的更多了。
多播情况
同样的传输任务,在仅使用交换机拓展的以太网上就不会产生碰撞,如果仅仅使用集线器来拓展以太网。不仅会扩大广播域还同时扩大了碰撞域。
因此,如果使用交换机将原来各自独立的碰撞域连接起来,只会扩大广播域而不会扩大碰撞域,交换机可以隔离碰撞域。
12.7 结论
工作在数据链路层的以太网交换机,其性能远远超过工作在物理层的集线器,而且价格并不贵,这就使得集线器逐渐被市场淘汰,目前很难再市场上再见到集线器。
13 以太网交换机自学习和转发帧的流程
13.1 基本概念
13.2 以太网交换机自学习和转发帧
交换机的自学习
假设主机A给主机B发送帧,该帧从交换机1的接口1进入交换机1,交换机1首先进行登记的工作,将该帧的源MAC地址A记录到自己的帧交换表中。将该帧进入自己的接口的接口号1,相应地也记录到帧交换表中,上述登记工作就称为交换机的自学习。
注意
以下例子假设各主机知道网络中其他各主机的MAC地址(无需进行ARP)。
A -> B
步骤示例
交换机1对该帧进行转发,该帧的目的MAC地址是B,在帧交换表中查找MAC地址B。找不到于是对该帧进行盲目地转发,也称为泛洪。也就是从除该帧进入交换机接口外的其他所有接口转发该帧。可以看出,交换机一开始还是比较"笨的"。
它还没有足够的知识来明确转发帧,只能进行盲目地转发,主机B的网卡收到该帧后,根据帧的目的MAC地址B就知道这是发送给自己的帧,于是就接受该帧。主机C的网卡收到该帧后,根据帧的目的MAC地址B就知道这不是发送给自己的帧,于是就丢弃该帧。该帧从交换机2的接口2进入交换机2。
交换机2首先进行登记的工作,将该帧的源MAC地址A记录到自己的帧交换表中,将该帧进入自己的接口的接口号2相应地也记录到帧交换表中。之后,交换机2对该帧进行转发。该帧的目的MAC地址B。在帧的交换表中查找MAC地址B,找不到。于是对该帧进行盲目地转发,主机D、E、F都会收到该帧,根据帧的目的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
步骤示例
主机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,就知道这是发送给自己的帧,于是接受该帧。
G -> 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地址与交换机接口的对应关系并不是永久性的!!
13.3 总结
14 以太网交换机的生成树协议STP
14.1 如何提高以太网的可靠性
14.2冗余链路
添加冗余链路可以提高以太网的可靠性
冗余链路存在问题
14.3 生成树协议STP
IEEE 802.1D 标准制定了一个生成树协议 STP (Spanning Tree Protocol)。
特点:
不改变网络的实际拓扑,但在逻辑上则切断某些链路,使得从一台主机到所有其他主机的路径是无环路的树状结构,从而消除了兜圈子现象。
15 虚拟局域网VLAN
15.1 广播风暴
为什么要虚拟局域网VLAN
15.2 分割广播域的方法
为了分割广播域,所以虚拟局域网VLAN技术应运而生。
15.3 虚拟局域网 VLAN
基本概念
是一种将局域网内的设备划分成与物理位置无关的逻辑组技术,这些逻辑组具有某些共同的需求。
基本特点
- IEEE 802.1Q 对虚拟局域网 VLAN 的定义:
虚拟局域网 VLAN 是由一些局域网网段构成的与物理位置无关的逻辑组,而这些网段具有某些共同的需求。每一个 VLAN 的帧都有一个明确的标识符,指明发送这个帧的计算机是属于哪一个 VLAN。 - 同一个VLAN内部可以广播通信,不同VLAN不可以广播通信
- 虚拟局域网其实只是局域网给用户提供的一种服务,而并不是一种新型局域网。
- 由于虚拟局域网是用户和网络资源的逻辑组合,因此可按照需要将有关设备和资源非常方便地重新组合,使用户从不同的服务器或数据库中存取所需的资源。
16 虚拟局域网VLAN的实现机制
16.1 IEEE 802.1 Q帧
能够处理带有VLAN标记的帧。
16.2 交换机的端口类型
16.2.1 Access端口
交换机与用户计算机之间的互连
案例说明
将主机A和B划归到VLAN2,将主机C和D划归到VLAN3。这样,VLAN2中的广播帧不会传送到VALN3,VLAN3中的广播帧也不会传送到VLAN2。
同一个VLAN内部可以广播通信,不同VLAN不可以广播通信。
16.2.2 Truck端口
交换机之间或交换机与路由器之间的互连
基本特点
案例说明
结论说明
在由多个交换机互连而成的交换式以太网中划分VLAN时,连接主机的交换机端口应设置为Access类型,交换机之间互连的端口应设置为Trunk。
16.2.3 华为交换机私有的Hybrid端口类型
16.3 总结
虚拟局域网优点
虚拟局域网(VLAN)技术具有以下主要优点:
- 改善了性能,简化了管理
- 降低了成本,改善了安全性