🎯 导读:本文档全面解析了数据链路层的核心功能和技术,涵盖帧的封装与解封装、差错检测与纠正、透明传输的实现方法、以及IP地址与MAC地址的关系。详细介绍了面向字节和比特的物理链路中实现透明传输的方法,如字节填充和比特填充。同时,文档深入探讨了CSMA/CD协议、回退N帧协议等可靠传输机制,分析了这些协议在不同场景下的工作原理和性能表现。通过具体示例,帮助读者理解数据链路层在实际网络通信中的作用和重要性。
文章目录
- 3.1、数据链路层概述
- 概述
- **数据链路层使用的信道**
- **局域网为什么属于数据链路层**
- 数据链路层的三个重要问题
- **封装成帧**
- **差错控制**
- **可靠传输**
- 广播要处理的其他问题
- 3.2、封装成帧
- 介绍
- 如何从比特流中提取帧
- PPP 帧格式
- 以太网V2的 MAC 格式
- 透明传输
- **解决透明传输问题**
- 总结
- **帧的数据部分长度**
- 总结
- 习题
- 3.3、差错检测
- 介绍
- 不同帧格式的差错检测码
- 以太网V2的mac帧格式
- 点对点协议 ppp 的帧格式
- 检错方法
- 奇偶校验
- 缺点
- 循环冗余校验CRC(Cyclic Redundancy Check)
- **总结**
- 3.4、可靠传输
- 基本概念
- 出现**比特差错咋办**
- **其他传输差错**
- 分组丢失
- 分组失序
- 分组重复
- 三种可靠协议
- 停止 - 等待协议
- 停止 - 等待协议可能遇到的四个问题
- **确认ACK与否认NAK**
- **超时重传**
- **确认丢失**
- **确认迟到**
- **注意事项**
- 停止-等待协议的信道利用率
- 习题
- 回退N帧协议GBN(滑动窗口协议)
- 为什么用回退N帧协议
- 无差错情况流程
- **累计确认**
- 优缺点
- **有差错情况(回退N帧的具体表现)**
- 若WT超过取值范围,例如WT=8,会出现什么情况?
- 习题
- **总结**
- 选择重传协议SR
- 重传协议原理
- 重传协议发送窗口、接收窗口尺寸选择
- **习题**
- **总结**
- 3.5、点对点协议PPP
- 帧格式
- 透明传输
- 实现透明传输的方法
- 面向字节的异步链路
- 面向比特的同步链路
- 差错检测
- 工作状态转换
- 3.6、媒体接入控制(介质访问控制)—— 广播信道
- **局域网的数据链路层**
- **数据链路层的两个子层**
- 为什么要媒体接入控制(介质访问控制)?
- **共享信道带来的问题**
- 静态划分信道
- **频分复用 FDM (Frequency Division Multiplexing)**
- **时分复用 TDM (Time Division Multiplexing)**
- **波分复用 WDM(Wavelength Division Multiplexing)**
- **码分复用 CDM (Code Division Multiplexing)**
- 习题
- 动态接入控制
- 随机接入(CSMA/CD协议:**总线局域网使用**)
- 基本概念
- CSMA/CD 协议工作流程
- 多址接入MA
- 载波监听CS
- 碰撞检测CD(也称 **冲突检测**)
- CSMA/CD 协议——争用期(碰撞窗口)
- CSMA/CD 协议——最小帧长
- CSMA/CD 协议——最大帧长
- CSMA/CD 协议——截断二进制指数退避算法
- CSMA/CD 协议——信道利用率
- CSMA/CD 协议——帧发送流程
- CSMA/CD 协议——帧接收流程
- CSMA/CD 协议的重要特性
- 小结
- 习题
- 随机接入(CSMA/CA协议:无线局域网)
- 为什么无线局域网要使用CSMA/CA协议
- 隐蔽站问题
- CSMA/CA协议的工作原理
- CSMA/CA协议的退避算法
- **使用退避算法的时机**
- **退避算法**
- CSMA/CA协议的信道预约和虚拟载波监听
- 习题
- 小结
- 3.7、MAC地址、IP地址以及ARP协议
- MAC地址
- 广播信道的数据链路层必须使用地址(MAC)
- IEEE 802局域网的MAC地址格式
- **无效的 MAC 帧**
- IEEE 802局域网的MAC地址发送顺序
- 单播MAC地址作用举例
- 广播MAC地址作用举例
- 多播MAC地址举例
- 随机mac地址技术
- 小结
- IP地址
- 基本概念
- 从网络体系结构看IP地址与MAC地址
- 数据包转发过程中IP地址与MAC地址的变化情况
- 习题
- ARP协议
- 工作原理
- ARP记录类型
- ARP适用范围
- 总结
- 3.8、集线器与交换机的区别
- 集线器HUB-在物理层扩展以太网
- 概念
- 集线器在物理层扩展以太网
- 优缺点
- **碰撞域**
- 以太网交换机**SWITCH**-在数据链路层扩展以太网
- 概念
- **网桥**
- **交换机**
- **集线器与交换机区别**
- 帧的两种转发方式
- 单播帧发送
- 广播帧发送
- 多个单播 网络中的多台主机同时给另一台主机发送单播帧
- 是否扩大碰撞域
- 总结
- 3.9、以太网交换机自学习和转发帧的流程
- 以太网交换机概念
- 以太网交换机自学习和转发帧流程
- 习题
- 总结
- 3.10、以太网交换机的生成树协议STP
- 如何提高以太网的可靠性
- **添加冗余链路的缺点**
- 广播风暴
- 帧交换表震荡
- 解决冗余链路的缺点:生成树协议STP
- 3.11、虚拟局域网VLAN
- 为什么要虚拟局域网VLAN
- **分割广播域的方法**
- VLAN概念
- 虚拟局域网VLAN的实现机制
- 处理带有VLAN标记的帧:IEEE 802.1 Q帧
- 交换机的端口类型
- **Access端口**
- 同一个VLAN
- 划分多个VLAN
- **Truck端口**
- 主机A发送广播帧
- 主机B发送广播帧
- **华为交换机私有的Hybrid端口类型**
- 总结
- 文章说明
3.1、数据链路层概述
概述
链路是从一个结点到相邻结点的一段物理线路,数据链路则是在链路的基础上增加了一些必要的硬件(如网络适配器)和软件(如协议的实现)
如图所示,主机 h1 给主机 h2 发送数据,中间要经过三个路由器和电话网,局域网以及广域网等多种网络
局域网中的主机、交换机等都必须实现数据链路层
**从层次上来看数据的流动。**从五层协议原理体系结构的角度来看,主机应具有体系结构中的各个层次,而路由器只需具有体系结构中的下面三层,各设备通过物理层下面的传输媒体进行互联。当主机 h1 向 h2 发送数据时,数据的流动,如下图所示。主机 h1 将在发送的数据逐层封装后,发送到传输媒体,进入路由器后,由下往上逐层解封到网络层,最终到达主机 h2,还要由下往上逐层解封,最终解封出主机 h1 所发送的数据。
**仅从数据链路层观察帧的流动。**当我们专门研究数据链路层的问题时,在大多数情况下,我们可以只关心数据链路层,而不考虑网络体系结构的其他各层。从数据链路层来看,主机 h1 到 h2 的通信可以看成是在四段不同的链路上的通信组成的。所谓链路就是从一个节点到相邻节点的一段物理线路。仅有链路还不够,还需要一些通信协议来控制这些数据的传输。若把实现这些协议的文化和软件加到链路上,就构成了数据链路。也就是说数据链路层以帧为单位传输和处理数据。
主机H1 到主机H2 所经过的网络可以是多种不同类型的
注意:不同的链路层可能采用不同的数据链路层协议
数据链路层使用的信道
数据链路层使用的信道主要有以下两种类型:
- 点对点信道
- 广播信道
局域网为什么属于数据链路层
- 局域网虽然是个网络。但我们并不把局域网放在网络层中讨论。这是因为在网络层要讨论的是多个网络互连的问题,是讨论分组怎么从一个网络,通过路由器转发到另一个网络。
- 同一个局域网中,分组怎么从一台主机传送到另一台主机,但并不经过路由器转发。从整个互联网来看,局域网仍属于数据链路层的范围
数据链路层的三个重要问题
数据链路层传送的协议数据单元是帧
封装成帧
两台主机通过一段链路互联
- 发送方将待发送的数据通过应用层封装成为应用层协议数据单元,然后交付给运输层
- 运输层为其添加运输层协议首部使之成为运输层协议数据单元,然后交付给网络层
- 网络层为其添加网络层协议首部使之成为网络层协议数据单元,然后交付给数据链路层
- 数据链路层给网络层协议数据单元添加一个数据链路层协议首部简称为帧头,还要给其添加一个帧尾。
我们将数据链路层给网络层交付的协议数据单元,添加帧头和帧尾的操作称为封装成帧,添加帧头和帧尾的目的都是为了在链路上以帧为单元来传送数据
- 封装成帧 (framing) 就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧
- 首部和尾部的一个重要作用就是进行帧定界
差错控制
帧在传输过程中受到干扰会可能会产生比特差错,出现误码:1 可能变成 0, 0 可能变成 1
接收方主机如何判断正在在传输过程中是否出现了误码呢?
答:通过检错码来发现。发送方在发送帧之前,基于待发送的数据和检测算法计算出检错码,并将其封装在帧尾。例如以太网V2的 mac 帧的帧尾就是四字节的帧检验序列,fcs 字段要写入的内容就是检测码,接收方主机收到之后,通过检错码和检测算法就可以判断出帧在传输过程中是否出现了误码。
可靠传输
接收方主机收到有误码的帧后,是不会接受该帧的,会将它丢弃
- 如果数据链路层向其上层提供的是不可靠服务,那么丢弃就丢弃了,不会再有更多措施
- 如果数据链路层向其上层提供的是可靠服务,那就还需要其他措施,来确保接收方主机还可以重新收到被丢弃的这个帧的正确副本
广播要处理的其他问题
以上三个问题都是使用点对点信道的数据链路层来举例的,如果使用广播信道的数据链路层除了包含上面三个问题外,还有一些问题要解决
如图所示,主机A,B,C,D,E通过一根总线进行互连,主机A要给主机C发送数据,代表帧的信号会通过总线传输到总线上的其他各主机,那么主机B,D,E如何知道所收到的帧不是发送给她们的,主机C如何知道发送的帧是发送给自己的
可以用编址(地址)的来解决,将帧的目的地址添加在帧中一起传输
当总线上多台主机同时使用总线来传输栈时,还有数据碰撞问题。这是采用广播信道的共享式局域网不可避免的。
- 以太网采用的协调方法是使用一种特殊的协议,CSMA/CD(载波监听/多点接入/碰撞检测)
- 随着技术的发展,交换技术的成熟和成本的降低,具有更高性能的使用点对点链路和链路层交换机的交换式局域网,在有线领域已完全取代了共享式局域网。在无线局域网中仍然使用的是共享信道技术,例如 802.11 局域网采用的媒体接入控制协议是CSMA/CA,也就是载波监听/多点接入/碰撞避免
3.2、封装成帧
介绍
封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧,帧头和帧尾中包含有重要的控制信息
发送方的数据链路层将上层交付下来的协议数据单元封装成帧后,还要通过物理层,将构成帧的各比特转换成电信号交给传输媒体
如何从比特流中提取帧
接收方的数据链路层如何从物理层交付的比特流中提取出一个个的帧?
答:使用帧头和帧尾来做帧定界。
PPP 帧格式
在其帧头和帧尾中各包含有一个长度为 1 字节的标志字段(红色部分),其作用就是帧定界。假设发送方发送的是 PPP 帧,比特流中的红色部分是帧定界标志,那么接收方的数据链路层就可以依据帧定界标志从物理层交付的比特流中提取出一个个的帧。
以太网V2的 MAC 格式
不是每一种数据链路层协议的帧都包含有帧定界标志,下图是以太网V2的 MAC 格式,在其帧头和帧尾中并没有包含帧定界标志。那么接收方又是如何从物理层交付的比特流中提取出一个个的以太网帧呢?实际上以太网的数据链路层封装好 MAC 帧后,将其交付给物理层,物理层会在 MAC 帧前面添加八字节的前导码,然后再将比特流转换成电信号发送
- 前导码中的前 7 字节为前同步码,作用是使接收方的时钟同步
- 最后 1 字节为帧开始定界符,表明其后面紧跟着的就是 MAC 帧
另外以太网还规定了帧间间隔为96比特时间,因此MAC帧不需要帧结束定界符,帧间隔还有其他作用,在后续课程中再进行介绍。
透明传输
- **透明:**指某一个实际存在的事物看起来却好像不存在一样。
- 透明传输:指数据链路层对上层交付的传输数据没有任何限制,好像数据链路层不存在一样
举例说明,这是发送方数据链路层收到其上层交付的协议数据单元,给其添加帧头和帧尾,使其成为帧。为了简单起见,我们只画出了帧头和帧尾中的帧定界标志,帧定界标志也就是一个特定数值。请大家思考一下,如果在上层交付的协议数据单元中恰好也包含了这个特定数值,接收方还能正确接收该帧吗?回答是否定的。
接收方在收到第一个帧定界标志时,认为这是帧的开始,这并没有错误,当接收方再次接收到帧定界标志时,会误认为帧结束了。这样就没有达到透明传输的效果
所以数据链路层应该对上层交付的数据有限制,其内容不能包含帧定界符的值
解决透明传输问题
在发送帧之前,对帧的数据部分进行扫描,每出现一个帧定界符,就在其前面插入一个转义字符。接收方数据链路层在物理层交付的比特流中提取帧,遇到第一个帧定界符时,认为这是帧的开始,当遇到转义字符时,就知道其后面的1字节内容虽然与帧定界符相同,但它是数据,而不是定界符,剔除转义字符,将其后面的内容作为数据继续提取,当提取到帧定界符时,表明这是帧的结束。
**在上层交付给数据链路层的协议数据单元中,既包含了帧定界符,又包含了转义字符,应该怎么处理呢?**方法仍然是在发送帧之前对帧的数据部分进行扫描,每出现一个帧定界符或转义字符,就在其前面插入一个转义字符。需要说明的是,转义字符是一种特殊的控制字符,其长度为一个字节,十进制值为 27,并不是 e、s、c 三个字符。
总结
实现透明传输的解决方法
- 面向字节的物理链路使用字节填充 (byte stuffing) 或字符填充 (character stuffing)
- 面向比特的物理链路使用比特填充
- 发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”(其十六进制编码是1B)
- 接收端的数据链路层在将数据送往网络层之前删除插入的转义字符
- 如果转义字符也出现在数据当中,那么应在转义字符前面插入一个转义字符 ESC。当接收端收到连续的两个转义字符时,就删除其中前面的一个
帧的数据部分长度
- 为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大些,因为帧的数据部分才是重要的
- 考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即最大传送单元MTU(Maximum Transfer Unit)
总结
习题
3.3、差错检测
介绍
- 实际的通信链路不是理想的,比特在传输过程中可能会产生差错:1变成0,0变成1,这称为比特差错
- 在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER(Bit Error Rate)
- 接收方的数据链路层可以使用差错检测码来检测数据在传输过程中是否产生了比特差错
不同帧格式的差错检测码
以太网V2的mac帧格式
帧尾中包含了一个长度为四字节的帧检验序列(fcs 字段),其作用就是让接收方的数据链路层检查帧在传输过程中是否产生了误码
点对点协议 ppp 的帧格式
帧尾中包含了一个长度为两字节的帧检验序列(fcs 字段),其作用也是让接收方的数据链路层检查正在传输过程中是否产生了误码
检错方法
奇偶校验
在待发送的数据后面添加1位奇偶校验位,使整个数据(包括所添加的校验位在内)中“1”的个数为奇数(奇校验)或偶数(偶校验)。
- 如果有奇数个位发生误码,则奇偶性发生变化,可以检查出误码
- 如果有偶数个位发生误码,则奇偶性不发生变化,不能检查出误码(漏检)
缺点
- 漏检率高:采用奇校验,若比特1的数量的奇性改变,可以检查出错误,但是如果传输过程中产生了两位误码,接收方对收到的比特流进行奇校验,发现比特1的总数为奇数,就误认为传输过程中没有发生误码
循环冗余校验CRC(Cyclic Redundancy Check)
- 收发双方约定好一个生成多项式G(x)
- 发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到待传输数据的后面一起传输
- 接收方通过生成多项式来计算收到的数据是否产生了误码
举例
总结
3.4、可靠传输
基本概念
出现比特差错咋办
检测出帧出现了比特差错,接下来如何处理取决于数据链路层向其上层提供的服务类型
- 如果提供的是不可靠传输服务,则仅仅丢弃有误码的帧,其他什么也不做
- 如果提供的是可靠传输服务,那就还要想办法实现让发送端重发。例如接收方可以给发送方发送一个通知帧,告诉他之前发送的帧产生了误码请重发,发送方收到通知后重发之前产生了误码的那个帧。
实际上,可靠传输的实现,并没有我们想象的这么简单,如果这个通知帧也出现了误码,又要怎么样处理呢?
其他传输差错
比特差错只是传输差错中的一种,传输差错还包括分组丢失,分组失序以及分组重复。注意,此处我们将帧的称呼改为了分组,这意味着,传输差错不仅仅局限于数据链路层的比特差错。分组丢失、分组失序、分组重复往往出现在数据链路层的上层
分组丢失
**路由器输入队列快满了,主动丢弃收到的分组:**主机 h6 给主机 h2 发送的分组,到达了路由器 r5,由于此时 r5 的输入队列快满了,而我根据自己的分组丢弃策略,将该分组丢弃。
分组失序
**数据并未按照发送顺序依次到达接收端:**主机 h6 依次给主机 h2 发送了三个分组,但他们并未按照发送顺序依次到达 h2,也就是说最先发送的分组未必最先到达。
分组重复
由于某些原因,有些分组在网络中滞留了,没有及时到达接收端,这可能会造成发送端对该分组的重发,重发的分组到达接收端,但一段时间后,滞留在网络的分组也到达了接收端,这就造成分组重复的传输差错。如主机 h6 给主机 h2 发送的分组,由于某些原因在网络中滞留了,没有及时到达 h2,这可能造成 h6 对该分组的超时重发,重发的分组到达 h2,一段时间后,滞留在网络中的那个分组又到达了 h2,这就会造成分组重复
三种可靠协议
- 停止 - 等待协议SW
- 回退 N 帧协议GBN
- 选择重传协议SR
这三种可靠传输实现机制的基本原理并不仅限于数据链路层,可以应用到计算机网络体系结构的各层协议中
停止 - 等待协议
停止 - 等待协议可能遇到的四个问题
确认ACK与否认NAK
如图所示,收发双方基于互联网进行通信,而不是局限在一条点对点的数据链路。纵坐标为时间,
- 发送方给接收方发送数据分组,接收方收到后对其进行差错检测,若没有误码,则接受该数据分组,并给发送方发送确认分组,简称为 ack。
- 发送方收到对所发送数据分组的确认分组后,才能发送下一个数据分组。
- 假设这个数据分组在充当话中出现了误码,接收方收到后对其进行差错检测,发现了误码则丢弃该数据分组,并给发送方发送否认分组,简称为 nak。
- 发送方收到对所发送数据分组的否认分组后,就知道了之前自己所发送的数据分组出现了差错,而被接收方拒绝,于是立刻重传该数据分组。因此发送方每发送完一个数据分组后,并不能立刻将该数据分组从缓存中删除,只有在收到帧对该数据分组的确认分组后,才能将其从缓存中删除。
发送方每发送完一个数据分组后,就停止发送下一个数据分组,等待来自接收方的确认分组或否认分组,若收到确认分组,则可继续发送下一个数据分组;若收到否认分组,则重发之前发送的那个数据分组,这样就实现了发送方发送什么,接收方最终都能收到什么,也就是所谓的可靠传输。
超时重传
发送方给接收方发送数据分组,然而该数据分组在传输过程中丢失了。需要说明的是,对于数据链路层点对点信道而言,不太容易出现这种情况,但对于多个网络,通过多个路由器互联的复杂互联网环境而言,这种情况是会经常出现的。对于这种情况,接收方既然收不到数据分组,那么也不会发送确认或否认分组,如果不采取其他措施,发送方就会一直处于等待接收方确认或否认分组的状态。为了解决该问题,可以在发送方发送完一个数据分组时,启动一个超时计时器,若到了超时计时器所设置的重传时间,而发送方仍收不到接收方的确认或否认分组,则重传原来的数据分组,这就叫做超时重传。一般可将重传时间选为略大于从发送方到接收主方的平均往返时间。
确认丢失
接收方发送的确认或否认分组就也有可能丢失
- 发送方发送了一个数据分组,接收方正确接收该数据分组后,给发送方发送确认分组,但该确认分组在传输过程中丢失了,这必然会造成发送方对之前所发送数据分组的超时重传。
- 假设这个重传的数据分组也正确到达了接收方,那么现在问题来了,接收方如何判断该数据分组是否是一个重复的分组呢?为了避免分组重复这种传输错误,必须给每个数据分组带上序号,例如该数据分组的序号为零。对于停止等待协议,由于每发送一个数据分组就进行停止等待,只要保证每发送一个新的数据分组,其序号与上次发送的数据分组的序号不同,就可以了。因此用一个比特来编号就够了,记序号0和1。这样根据数据分组的序号,接收方就可以判断出该数据分组是否是重复的,接收方丢弃重复的数据分组,并给发送方发送针对该数据分组的确认分组,以免发送方对该数据分组的再次超时重传。
- 发送方收到针对 0 号数据分组的确认分组,就可以发送下一个数据分组了,其序号为1。接收方正确收到 1 号数据分组后,给发送方发送确认分组。
确认迟到
既然数据分组需要编号,确认分组是否需要编号?
答:要。
发送方发送 0 号数据分组,接收方正确接收后给发送方发送确认分组,由于某些原因,该确认分组迟到了,这必然会导致发送方对 0 号数据分组的超时重传。在重传的 0 号数据分组的传输过程中,发送方收到了迟到的确认分组,于是发送 1 号数据分组,接收方收到重传的 0 号数据分组后,发现这是一个重复的数据分组,将其丢弃,并针对该数据分组给发送方发送确认分组,以免发送方再次超时重传该数据分组。现在问题来了,我们可以非常清楚地看到,这是一个对 0 号数据分组的重复确认,但是发送方会误认为这是对 1 号数据分组的确认
如果对确认分组也进行编号,就可以使发送方避免这种误判。如图所示,该确认分组的序号为0,发送方通过确认分组的序号知道这是一个重复的确认分组,直接忽略。接收方正确接受 1 号数据分组后,给发送方发送针对该数据分组的确认分组,其序号为1。发送方收到该确认分组后,发送下一个数据分组序号为0,请注意,该数据分组与之前序号为0的那个数据分组不是同一个数据分组
注意,对于数据链路层的点对点信道往返时间比较固定,不会出现确认迟到的情况,因此如果只在数据链路层实现停止等待协议,可以不用给确认分组编号
注意事项
- 接收端检测到数据分组有误码时,将其丢弃并等待发送方的超时重传。但对于误码率较高的点对点链路,为使发送方尽早重传,也可给发送方发送NAK分组。
- 为了让接收方能够判断所收到的数据分组是否是重复的,需要给数据分组编号。由于停止-等待协议的停等特性,只需1个比特编号就够了,即编号0和1。
- 为了让发送方能够判断所收到的ACK分组是否是重复的,需要给ACK分组编号,所用比特数量与数据分组编号所用比特数量一样。数据链路层一般不会出现ACK分组迟到的情况,因此在数据链路层实现停止-等待协议可以不用给ACK分组编号。
- 超时计时器设置的重传时间应仔细选择。一般可将重传时间选为略大于“从发送方到接收方的平均往返时间”。
- 在数据链路层点对点的往返时间比较确定,重传时间比较好设定。
- 然而在运输层,由于端到端往返时间非常不确定,设置合适的重传时间并不容易。
停止-等待协议的信道利用率
假设收发双方之间是一条直通的信道
- TD:发送方发送数据分组所耗费的发送时延
- RTT:收发双方之间的往返时间
- TA:接收方发送确认分组所耗费的发送时延
TA一般都远小于TD,可以忽略,当RTT远大于TD时,信道利用率会非常低
像停止-等待协议这样通过确认和重传机制实现的可靠传输协议,常称为自动请求重传协议ARQ(Automatic Repeat Request),意思是重传的请求是自动进行,因为不需要接收方显式地请求,发送方重传某个发送的分组
习题
回退N帧协议GBN(滑动窗口协议)
为什么用回退N帧协议
在相同的时间内,使用停止-等待协议的发送方只能发送一个数据分组,而采用流水线传输的发送方,可以发送多个数据分组。同等条件下,在相同的时间内使用停止等待协议的发送方只能发送一个数据分组,而采用流水线传输的发送方可以发送五个数据分组。
回退N帧协议在流水线传输的基础上,利用发送窗口来限制发送方可连续发送数据分组的个数
- 假设采用三个比特给分组编序号,因此序号的取值范围是 0~7。发送方要维持一个发送窗口,序号落在发送窗口内的数据分组可被连续发送,而不必等收到接收方的相应确认分组后再发送,发送窗口的尺寸即为 wt,对于本例其取值范围是>1且≤2^3-1,其中的3是构成分组序号的比特数量
- 本例取 wt 的值为5,如果 wt 的值取为1,则是停止等待协议,如果 wt 的值超过取值范围的上限,则会造成严重的错误,我们之后会举例详细说明
- 序号落在发送窗口内的这五个数据分组可以连续发送,而序号落在发送窗口外的数据分组不允许发送。接收窗口的尺寸即为 wr,对于回退 n 帧协议,其取值只能为1,这一点与停止等待协议是相同的。序号落在接收窗口内的这个数据分组允许接收,而序号落在接收窗口外的数据分组不允许接收。
无差错情况流程
发送方将序号落在发送窗口内的0~4号数据分组,依次连续发送出去
他们经过互联网传输正确到达接收方,没有乱序和误码,接收方按序接收它们,每接收一个,接收窗口就向前滑动一个位置,并给发送方发送针对所接收分组的确认分组,在通过互联网的传输正确到达了发送方
发送方每接收一个、发送窗口就向前滑动一个位置,这样就有新的序号落入发送窗口,发送方可以将收到确认的数据分组从缓存中删除了,而接收方可以择机将已接收的数据分组交付上层处理
累计确认
假设ACK1在传输过程中丢失,ACK4顺利传输到发送方,发送方的窗口还是可以正确移动
优缺点
优点
- 即使确认分组丢失,发送方也可能不必重传
- 减小接收方的开销
- 减小对网络资源的占用
缺点
- 接收方不能向发送方及时反映出已经正确接收的数据分组信息
有差错情况(回退N帧的具体表现)
在传输数据分组时,5号数据分组出现误码,接收方通过数据分组中的检错码发现了错误
于是丢弃该分组,而后续到达的这剩下四个分组与接收窗口的序号不匹配
接收方同样也不能接收它们,将它们丢弃,并对之前按序接收的最后一个数据分组进行确认,发送ACK4,每丢弃一个数据分组,就发送一个ACK4
当收到重复的ACK4时,就知道之前所发送的数据分组出现了差错,于是可以不等超时计时器超时就立刻开始重传,具体收到几个重复确认就立刻重传,根据具体实现决定
如果收到这4个重复的确认并不会触发发送立刻重传,一段时间后。超时计时器超时,也会将发送窗口内以发送过的这些数据分组全部重传
若WT超过取值范围,例如WT=8,会出现什么情况?
发送方发送8个分组,接收方按序正确接收之后,发回ACK7
但ACK7在传输过程中丢失了,会导致发送方的超时重传,0-7号分组会被重传,但是接收窗口也是【0,7】,还是会接收0-7号分组,导致重复接收(无法接受新旧数据分组)
不理解可以参考选择重传协议的习题部分讲解
习题
发送方受到0号分组的ACK,向前移动一个位置
ACK1在传输过程中丢失,不移动位置
ACK2受到之后,窗口移动到2后面
总结
- 回退N帧协议在流水线传输的基础上利用发送窗口来限制发送方连续发送数据分组的数量,是一种连续ARQ协议
- 在协议的工作过程中发送窗口和接收窗口不断向前滑动,因此这类协议又称为滑动窗口协议
- 由于回退N帧协议的特性,当通信线路质量不好时,其信道利用率并不比停止-等待协议高
选择重传协议SR
对回退N帧协议的改进
重传协议原理
发送方将序号落在发送窗口内的4个数据分组,依次连续发送出去,他们经过互联网的传输陆续到达接收方
其中的 2 号数据分组丢失了
只要序号落入接收窗口内,接收方都会接收,接收方接收 0 号和 1 号数据分组,并发送 0 号和 1 号确认分组,接收窗口向前滑动两个位置,这样就有四和五这两个新的序号,落入接收窗口
接收方接收 3 号数据分组,并发送 3 号确认分组,但接收窗口不能向前滑动,因为 3 号数据分组,是未按序到达的数据分组
这些确认分组经过互联网的传输陆续到达
发送方,发送方每按序收到一个确认分组,发送窗口就向前滑动一个位置,发送方接收 0 号和 1 号确认分组,发送窗口向前滑动两个位置,这样就有4和5这两个新的序号落入发送窗口。
发送方将序号落入发送窗口的4号和5号数据分组发送出去
发送方现在可以将已经收到确认的,0 号和 1 号数据分组从发送缓存中删除了
而接收方可择机,将以按序接收的 0 号和 1 号数据分组,交付上层处理
发送方接收 3 号确认分组,但发送窗口不能向前滑动,因为这是一个未按序到达的确认分组,发送方还未收到他之前的 2 号确认分组
不过需要记录 3 号数据分组已收到确认,这样该数据分组就不会超时重发
4 号和 5 号数据分组到达接收方,接收方接收他们,并发送 4 号和 5 号确认分组,但接收窗口不能向前滑动,因为他们是未按序到达的数据分组,接收方还未收到他们之前的 2 号数据分组,
假设在 4 号和 5 号确认分组的传输过程中,发送方针对 2 号数据分组的重传计时器超时了,发送方重传 2 号数据分组
4 号和 5 号确认分组陆续到达发送方,发送方接收他们,但发送窗口不能向前滑动,因为他们是未按序到达的确认分组,发送方还未收到他们之前的 2 号确认分组
不过需要记录 4 号和 5 号数据分组已收到确认,这样他们就不会超时重发
发送方之前重传的 2 号数据分组,到达接收方
接收方接收该数据分组,并发送 2 号确认分组
接收窗口现在可以向前滑动四个位置,这样就有 6701 这四个新的序号落入接收窗口
2 号确认分组经过互联网的传输,到达发送方
发送方接收该确认分组,发送窗口现在可以向前滑动四个位置,这样就有 6701,这四个新的序号落入发送窗口,发送方现在就可以继续,将这四个序号的数据分组依次发送出去了
重传协议发送窗口、接收窗口尺寸选择
如果违反会怎么样?
发送方将序号落入发送窗口内的 0~4 号,这五个数据分组依次发送出去,他们经过互联网的传输,依次到达接收方
接收方接收他们并发送 0~4 号确认分组,接收窗口向前滑动五个位置,这样就有 56701 这五个新的序号落入接收窗口
这些确认分组经过互联网的传输,陆续到达发送方,但其中的 0 号确认分组丢失了
发送方接收 1~4 号确认分组,并记录 1~4 号数据分组已收到确认,发动窗口不能向前移动
一段时间后,0 号数据分组的重传计时器超时了,发送方重传 0 号数据分组
该数据分组经过互联网的传输到达接收方,其序号零落在接收窗口内,接收方会接收它,但是接收方先前已经正确接收过,该数据分组了,如果现在还要接收,那就会出现分组重复这种传输差错,
如果发送窗口和接收窗口的尺寸,超过了取值范围,就会使接收方无法分辨新旧数据分组,进而出现分组重复这种传输差错
习题
接收窗口尺寸超出最大值会怎么样
接收方一边发送ACK,一边向右滑动分组
如果ACK 0 丢失了,超时之后,将0号分组重传
0号分组在接收窗口之内,接收方还是会接收它,但是之前已经接收过一次了,导致出现分组重复这种传输差错
总结
3.5、点对点协议PPP
一般的英特网用户是如何接入到英特网的呢,通常都是要通过连接到某个英特网服务提供者 SP,例如中国电信,中国联通,中国移动这三大运营商才能接入因特网,这些 SP 已经从英特网管理机构申请到了一批 IP 地址,用户计算机只有获取到 SP 所分配的合法 IP 地址后,才能成为英特网上的主机用户,计算机与 SP 进行通信时所使用的数据链路层协议通常就是 PPP 协议。
在 1999 年公布的在以太网上运行的 PPP 协议,即 PPP over Ethernet,简称为 PPPoE,它使得 SP 可以通过 DSL 电路调制解调器,以太网等宽带接入技术,以以太网接口的形式为用户提供接入服务
另外点对点协议 PPP 也广泛应用于广域网路由器之间的专用线路
- 点对点协议PPP(Point-to-Point Protocol)是目前使用最广泛的点对点数据链路层协议
- PPP协议是因特网工程任务组IEIF在1992年制定的。经过1993年和1994年的修订,现在的PPP协议已成为因特网的正式标准[RFC1661,RFC1662]
- 数据链路层使用的一种协议,它的特点是:简单;只检测差错,而不是纠正差错;不使用序号,也不进行流量控制;可同时支持多种网络层协议
- PPPoE 是为宽带上网的主机使用的链路层协议
- PPP 是数据链路层的协议,他将网络层交付下来的协议数据单元封装成 PPP 帧
- 为了支持不同的网络层协议,PPP 协议包含了一套网络控制协议 NCPs,其中的每一个协议支持不同的网络层协议,例如 TCP/IP 中的 IP,Novell Netware网络操作系统中的 IPX,苹果公司的 AppleTalk 等
- 链路控制协议LCP 用于建立配置以及测试数据链路的连接
- PPP 协议能够在多种类型的点对点链路上运行,例如面向字节的异步链路,面向比特的同步链路
帧格式
必须规定特殊的字符作为帧定界符
FCS用来校验是否出现误码
透明传输
当 PPP 帧的数据部分出现帧首和帧尾中的标志字段时,如果不采取措施,则会造成接收方对 PPP 帧是否结束的误判,因为标志字段是 PPP 帧的定界符,取值为 16 进制的 7E,也就是二进制的 01111110,PPP 协议实现透明传输的方法取决于所使用的链路类型
- 如果是面向字节的异步链路,则采用字节填充法,也就是插入转义字符
- 如果是面向比特的同步电路,则采用比特填充法,也就是插入比特 0
实现透明传输的方法
面向字节的异步链路
- 面向字节的异步链路:字节填充法(插入“转义字符”)
- 以字节 7E 作为 PPP 帧的定界符,以字节为单位来讨论问题
- 将出现的每一个 7E 字节(PPP帧的定界符)转变成2字节序列 7D5E:相当于在 7E 字节前插入了转移字节 7D,并将 7E 字节减去 16 进制的 20
- 将出现的每一个 7D 字节(转义字符)转变成2字节序列 7D,5D:即在出现的每一个 ASCII 码控制字符前插入一个 7D 字节,同时将该字符的编码加上 16 进制的 20
面向比特的同步链路
- 面向比特的同步链路:比特填充法(插入“比特0”)
- 以 01111110 作为 PPP 帧的定界符,以比特为单位来讨论问题
有没有一种可能,帧数据部分本来就存在111110
这个段数据
差错检测
能够对接收端收到的帧进行检测,并立即丢弃有差错的帧,不向上提供可靠传输服务
工作状态转换
- 当用户拨号接入 ISP 时,路由器的调制解调器对拨号做出确认,并建立一条物理连接。
- PC 机向路由器发送一系列的 LCP 分组(封装成多个 PPP 帧)。
- 这些分组及其响应选择一些 PPP 参数,并进行网络层配置,NCP 给新接入的 PC 机
- 分配一个临时的 IP 地址,使 PC 机成为因特网上的一个主机。
- 通信完毕时,NCP 释放网络层连接,收回原来分配出去的 IP 地址。接着,LCP 释放数据链路层连接。最后释放的是物理层的连接。
【工作状态转换过程】
PPP 链路的开始和结束状态都是静止状态,这时并不存在物理层的连接,当检测到调制解调器的载波信号,并建立物理层连接后,PPP 就进入链路的建立状态,这时链路控制协议 LCP 开始协商一些配置选项,若协商成功则进入鉴别状态,若协商失败则退回到静止状态,所协商的配置选项包括最大增长鉴别协议等,可以不使用鉴别,也可以使用口令鉴别协议 PAP 或挑战握手鉴别协议 CHAP,若通信双方无需鉴别或鉴别身份成功,则进入网络状态,若鉴别失败则进入终止状态,进入网络状态后进行 NCP 配置,配置完成后就进入打开状态,PPP 链路的两端,通过相互交换网络层特定的 NCP 分组来进行 NCP 配置,如果在 PPP 链路上运行的是 IP 协议,则是用 IP 控制协议 IPCP 来对 PPP 链路的每一端配置 IP 模块,例如分配 IP 地址,只要链路处于打开状态,就可以进行数据通信,当出现故障或链路的一端发出终止请求时,就进入终止状态,当载波停止后则回到静止状态
可见,PPP 协议已不是纯粹的数据链路层的协议,它还包含了物理层和网络层的内容。
3.6、媒体接入控制(介质访问控制)—— 广播信道
媒体接入控制(Medium Access Control,也叫介质访问控制)使用一对多的广播通信方式
局域网的数据链路层
局域网最主要的特点是:
- 网络为一个单位所拥有
- 地理范围和站点数目均有限
局域网具有如下主要优点:
- 具有广播功能,从一个站点可很方便地访问全网。局域网上的主机可共享连接在局域网上的各种硬件和软件资源。
- 便于系统的扩展和逐渐地演变,各设备的位置可灵活调整和改变
- 提高了系统的可靠性、可用性和残存性
数据链路层的两个子层
为了使数据链路层能更好地适应多种局域网标准,IEEE 802 委员会就将局域网的数据链路层拆成两个子层:
- 逻辑链路控制 LLC (Logical Link Control)子层:与传输媒体无关
- 媒体接入控制 MAC (Medium Access Control)子层:与接入到传输媒体有关的内容都放在 MAC子层
不管采用何种协议的局域网,对 LLC 子层来说都是透明的。
为什么要媒体接入控制(介质访问控制)?
共享信道带来的问题
若多个设备在共享信道上同时发送数据,则会造成彼此干扰,导致发送失败。
这是一根同轴电缆,有多台主机连接到这根同轴电缆上,他们共享这根传输媒体,形成了一个总线型的局域网。各主机竞争使用总线随机的在信道上发送数据,如果恰巧有两个或更多的站点在同一时刻发送数据,那么信号在共享媒体上就要产生碰撞,即发生了冲突,使得这些站点的发送都失败。例如主机 C 和主机 D 同时使用总线来发送数据,这必然会产生所发送信号的碰撞。
共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用,也就是媒体接入控制MAC(Medium Access Control)。媒体介入控制技术主要分为两类,一类是静态划分信道,另一类是动态接入控制
随着技术的发展,交换技术的成熟和成本的降低,具有更高性能的使用点对点链路和链路层交换机的交换式局域网,在有限领域已完全取代了共享式局域网,但由于无线信道的广播天性,无线局域网仍然使用的是共享媒体技术。
静态划分信道
信道复用
- 复用是通信技术中的一个重要概念,也就是通过一条物理线路同时传输多路用户的信号。
- 当网络中传输媒体的传输容量大于多条单一信道传输的总通信量时,可利用复用技术在一条物理线路上建立多条通信信道,来充分利用传输媒体的带宽。
如果在发送端使用复用器,在接收端再使用分用器,这三对用户就可以共享一条物理线路进行通信。
常见的信道复用技术有频分复用(fdm)、时分复用(tdm)、波分复用(wdm)、码分复用(cdm)。
频分复用 FDM (Frequency Division Multiplexing)
- 将整个带宽分为多份,用户在分配到一定的频带后,在通信过程中自始至终都占用这个频带。
- 频分复用的所有用户在同样的时间占用不同的带宽资源(请注意,这里的“带宽”是频率带宽而不是数据的发送速率)。
如图所示,将传输线路的频带资源划分成多个子频带,形成多个子信道,各子信道之间需要留出隔离频带,以免造成子信道间的干扰。当多路信号输入一个多路复用器时,这个复用器将每一路信号调制到不同频率的载波上,接收端由相应的分用器通过滤波将各路信号分开,将合成的复用信号恢复成原始的多路信号。很显然,频分复用的所有用户同时占用不同的频带资源,并行通信。
时分复用 TDM (Time Division Multiplexing)
- 时分复用则是将时间划分为一段段等长的时分复用帧(TDM帧)。每一个时分复用的用户在每一个 TDM 帧中占用固定序号的时隙。
- 每一个用户所占用的时隙是周期性地出现(其周期就是TDM帧的长度)的。
- TDM 信号也称为等时 (isochronous) 信号。
- 时分复用的所有用户在不同的时间占用同样的频带宽度。
如图所示,横坐标为时间,将时间划分成一个个的时隙。时分复用技术将传输线路的带宽资源按实际轮流分配给不同的用户。时分复用技术将时间划分成了一段段等长的时分复用帧,每一个时分复用的用户在每一个时分复用帧中占用固定序号的时隙。如图所示,每一个用户所占用的时隙是周期性出现的,其周期就是时分复用帧的长度。很显然,时分复用的所有用户在不同的时间占用同样的频带宽度。
波分复用 WDM(Wavelength Division Multiplexing)
波分复用其实就是光的频分复用。多路光的载波的波长均为 1310nm,经光调制后,分别将波长变换到 1550 - 1561.2nm,每个光载波相隔 1.6nm,都在一根光纤中传输。因此在一根光纤上,数据传输的总速率就达到了 8×2.5G 比特每秒,也就等于 20G 比特每秒。光信号传输一段距离后会衰减,因此对衰减了的光信号必须进行放大才能继续传输。现在已经有了很好的光纤放大器,两个光纤放大器之间的光缆线路长度可达 120km。
- 波分复用就是光的频分复用,使用一根光纤来同时传输多个光载波信号
- 光信号传输一段距离后悔衰减,所以要用 掺铒光纤放大器 放大光信号
码分复用 CDM (Code Division Multiplexing)
- 码分复用CDM是另一种共享信道的方法。实际上,由于该技术主要用于多址接入,人们更常用的名词是码分多址CDMA(Code Division Multiple Access)。
- 频分复用FDM和时分复用TDM同样可用于多址接入,相应的名词是频分多址FDMA (Frequency Division Multiple Access)和时分多址TDMA(Time Division Multiple Access)。
在本课程中,我们不严格区分复用与多址的概念。可简单理解如下:
- 复用是将单一媒体的频带资源划分成很多子信道,这些子信道之间相互独立,互不干扰。从媒体的整体频带资源上看,每个子信道只占用该媒体频带资源的一部分。
- 多址(更确切地应该称为多点接入)处理的是动态分配信道给用户。这在用户仅仅暂时性地占用信道的应用中是必须的,而所有的移动通信系统基本上都属于这种情况。相反,在信道永久性地分配给用户的应用中,多址是不需要的(对于无线广播或电视广播站就是这样)。
- 某种程度上,FDMA、TDMA、CDMA可以分别看成是FDM、TDM、CDM的应用。
与FDM和TDM不同,CDM的每一个用户可以在同样的时间使用同样的频带进行通信。由于各用户使用经过特殊挑选的不同码型,因此各用户之间不会造成干扰。CDM最初是用于军事通信的,因为这种系统所发送的信号有很强的抗干扰能力,其频谱类似于白噪声,不易被敌人发现。随着技术的进步,CDMA设备的价格和体积都大幅度下降,因而现在已广泛用于民用的移动通信中。
在CDMA中,每一个比特时间再划分为m个短的间隔,称为码片(Chip)。通常m的值是64或128。为了简单起见,在后续的举例中,我们假设m为8。
使用CDMA的每一个站被指派一个唯一的m bit码片序列(Chip Sequence)。
- 一个站如果要发送比特1,则发送它自己的m bit码片序列;
- 一个站如果要发送比特0,则发送它自己的m bit码片序列的二进制反码;
【举例】
指派给CDMA系统中某个站点的码片序列为00011011
- 发送比特1: 发送自己的码片序列00011011
- 发送比特0: 发送自己的码片序列的二进制反码11100100
为了方便,我们按惯例将码片序列中的0写为-1,将1写为+1。
则该站点的码片序列是(-1 -1 -1 +1 +1 -1 +1 +1)。
码片序列的挑选原则如下:
- 分配给每个站的码片序列必须各不相同,实际常采用伪随机码序列。
- 分配给每个站的码片序列必须相互正交(规格化内积为0)。
令向量S表示站S的码片序列,令向量T表示其他任何站的码片序列。两个不同站S和T的码片序列正交,就是向量S和T的规格化内积为0:
- 任何一个码片向量和该码片向量自己的规格化内积是多少呢?很显然应该是 1。
- 任何一个码片向量和其他各站码片反码的向量的内积也是零,任何一个码片向量和该码片向量的反码的向量的内积是 - 1。
习题
动态接入控制
- 受控接入:受控接入在局域网中使用得较少,本书不再讨论
- 随机接入:重点
随机接入(CSMA/CD协议:总线局域网使用)
基本概念
最初的以太网是将许多计算机都连接到一根总线上。易于实现广播通信。当初认为这样的连接方法既简单又可靠,因为总线上没有有源器件。**以太网(Ethernet)**是一种计算机局域网技术。IEEE组织的IEEE 802.3标准制定了以太网(Ethernet)的技术标准。以太网采用无连接的工作方式,对发送的数据帧不进行编号,也不要求对方发回确认。目的站收到有差错帧就把它丢弃,其他什么也不做
早期的共享式以太网采用载波监听,多址接入碰撞检测(CSMA/CD 协议)来解决该问题。
- 多址接入:多个主机(也可称为站点或站)连接在一条总线上,竞争使用总线。
- 载波监听:每一个站在发送帧之前,先要检测一下总线上是否有其他站点在发送帧,可比喻为先听后说。
- 若检测到总线空闲 96 比特时间,则发送这个帧;
- 若检测到总线忙,则继续检测,并等待总线转为空闲 96 比特时间,然后发送这个帧。
- 96 比特时间是指发送 96 比特所耗费的时间,也称为帧间最小间隔,其作用是使接收方可以检测出一个帧的结束,同时也使得所有其他站点都能有机会平等竞争信道并发送帧。
- 碰撞检测:每一个正在发送帧的站边发送帧边检测碰撞,可比喻为边说边听。
CSMA/CD 协议工作流程
假设主机 C 要发送帧,首先进行载波监听,检测到总线空闲 96 比特时间后就可以发送帧了。
假设在主机 C 使用总线发送帧的过程中,主机 B 也要发送帧,主机 B 进行载波监听,发现总线忙,于是持续检测总线,一旦发现总线空闲 96 比特时间则立即发送帧,边发送帧还要边检测碰撞,只要没检测到碰撞,则可继续发送帧的剩余部分。
假设在主机 B 发送帧的过程中,主机 C 也要发送帧,发现总线空闲 96 比特时间后立即发送帧,这必然会产生碰撞。
在产生碰撞的时刻,主机 B 和主机 C 都在边发送帧边检测碰撞,但是没有检测到,因为碰撞检测的传播也需要时间
碰撞信号沿总线传播,主机 C 会比主机 B 更早检测到碰撞,并停止发送,退避一段随机时间后,重新再发送之前所发送的帧
当主机 B 检测到碰撞后,立即停止发送,退避一段随机时间,重新再发送之前所发送的帧
以太网还采取了一种叫做强化碰撞的措施,这就是当发送帧的站点一旦检测到碰撞,除了立即停止发送之外,还要再继续发送 32 比特或 48 比特的人为干扰信号,以便有足够多的碰撞信号,使所有站点都能检测出碰撞。
多址接入MA
表示许多主机以多点接入的方式连接在一根总线上。
载波监听CS
是指每一个站在发送数据之前先要检测一下总线上是否有其他计算机在发送数据,如果有,则暂时不要发送数据,以免发生碰撞。
总线上并没有什么“载波”, “载波监听”就是用电子技术检测总线上有没有其他计算机发送的数据信号。
碰撞检测CD(也称 冲突检测)
- “碰撞检测” 就是计算机边发送数据边检测信道上的信号电压大小
- 当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大(互相叠加)
- 当一个站检测到的信号电压摆动值超过一定的门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞
- 在发生碰撞时,总线上传输的信号产生了严重的失真,无法从中恢复出有用的信息来
- 每一个正在发送数据的站,一旦发现总线上出现了碰撞,就要立即停止发送,免得继续浪费网络资源,然后等待一段随机时间后再次发送
碰撞检测的信号传播有时延,A 需要单程传播时延的 2 倍的时间,才能检测到与 B 的发送产生了冲突
CSMA/CD 协议——争用期(碰撞窗口)
主机 A 和 D 位于总线型以太网的两端,以太网单程端到端的传播时延即为 τ(纵坐标为时间)。
- 假设在时刻零主机 A 要发送帧,当检测到总线空闲 96 比特时间后,立即发送帧。
- 在时刻 τ - Δ 主机 D 也要发送帧,当检测到总线空闲 96 比特时间后,立即发送帧。需要注意的是,主机 D 检测到总线空闲,但实际上总线并不空闲,只是主机 D 检测不出来,这必然会产生碰撞,发生碰撞的时间为 τ - Δ/2 之后。
- 碰撞信号会陆续传播到主机 D 和主机 A,主机 D 检测到碰撞的时间为 τ,而主机 A 检测到碰撞的时间为 2τ - Δ。
- 从下图可知,主机最多经过 2τ(也就是 Δ 趋近于零),就可检测到本次发送是否遭受了碰撞。因此以太网的端到端往返传播时延 2τ 就称为争用期或碰撞窗口。
- 发送帧的主机,经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会产生碰撞。
- 每一个主机在自己发送帧之后的一小段时间内,存在着遭遇碰撞的可能性,这一小段时间是不确定的,它取决于另一个发送帧的下一个主机到本主机的距离,但不会超过总线的端到端往返传播时延,即一个争用期时间。
- 显然,在以太网中发送帧的主机越多,端到端往返传播时延越大,发生碰撞的概率就越大。因此,共享式以太网不能连接太多的主机,使用的总线也不能太长。
- 10Mb/s 以太网把争用期定为512比特发送时间,即51.2μs,因此其总线长度不能超过5120m,但考虑到其他一些因素,如信号衰减等,以太网规定总线长度不能超过2500m。
CSMA/CD 协议——最小帧长
- 假设主机 A 正在给主机 D 发送一个很短的帧,边发送边检测碰撞,主机 A 很快就将该帧发送完毕了,之后就不再帧对该帧检测碰撞。
- 在该帧的传输过程中,主机 C 也要发送帧,主机 C 检测到总线空闲 96 比特时间后就立即发送帧,尽管总线实际上并不空闲,这必然会产生碰撞,主机 D 最终会收到主机 A 发送的并遭遇碰撞的帧,主机 D 会将该帧丢弃,但对于主机 A 而言,他并不知道自己已发送完毕的该帧在总线上传输的过程中遭遇了碰撞,因此不会重发该帧。
为什么主机A不知道遭遇了碰撞?
主机A发送了一个非常短的帧给主机D,而且很快发送完毕。如果这个帧的长度小于最小帧长要求,那么在主机A停止发送后,如果主机C开始发送数据并与主机A的数据发生碰撞,主机A可能已经停止了对碰撞的监听,因此不会意识到碰撞的发生。
以太网规定最小帧长为64字节,即512比特(512比特时间即为争用期)
- 如果要发送的数据非常少,那么必须加入一些填充字节,使帧长不小于64字节
以太网的最小帧长确保了主机可在帧发送完成之前就检测到该帧的发送过程中是否遭遇了碰撞
- 如果在争用期(共发送64字节)没有检测到碰撞,那么后续发送的数据就一定不会发生碰撞
- 如果在争用期内检测到碰撞,就立即中止发送,这时已经发送出去的数据一定小于64字节,因此凡长度小于64字节的帧都是由于碰撞而异常中止的无效帧
CSMA/CD 协议——最大帧长
假设主机 A 正在给主机 D 发送一个很长的帧,这会使得主机 A 长时间占用总线,而总线上的其他主机迟迟拿不到总线的使用权,另外由于帧很长,还可能导致主机 D 的接收缓冲区无法装下该帧而产生溢出,因此以太网的帧长应该有其上限。
以太网V2的 MAC 帧格式,其数据载荷的最大长度为 1500 字节,加上首部和尾部共 18 字节,帧的最大长度为 1518 字节,而数据载荷的最小长度不能小于 46 字节,这样加上首部和尾部共 18 字节,正好满足帧的最小长度为 64 字节。
CSMA/CD 协议——截断二进制指数退避算法
截断二进制指数退避算法:退避时间的计算方法。
退避时间等于基本退避时间乘以随机数 r,其中基本退避时间的取值为争用期 2τ,而随机数 r 是从离散的整数集合 {0,1,…,2 的 k 次减 1} 中随机选出的一个数,k 取重传次数和 10 中的较小者,这也是该算法名称中截断二进制指数这种称谓的由来。
CSMA/CD 协议——信道利用率
以太网的信道利用率如图所示,横坐标为时间。总线上的某个主机可能发生多次碰撞,进行多次退避后,成功发送了一个帧,帧的发送时延即为 T0。在最极端的情况下,原主机在总线的一端,而目的主机在总线的另一端,因此还要经过一个单程端到端的传播时延t后,总线才能完全进入空闲状态。因此发送一帧所需的平均时间为多个争用期2t 加上一个帧的发送时延 t0,再加上一个单程端到端的传播时延t。
【理想情况信道利用率】
为了提高信道利用率:
- a 的值应该尽量小,则 t 的值应该尽量小,这意味着以太网端到端的距离不应太长
- T0 的值应当尽量大,这意味着以太网的帧长应尽量大一些
CSMA/CD 协议——帧发送流程
CSMA/CD 协议——帧接收流程
CSMA/CD 协议的重要特性
- 使用 CSMA/CD 协议的以太网不能进行全双工通信而只能进行双向交替通信(半双工通信)。
- 每个站在发送数据之后的一小段时间内,存在着遭遇碰撞的可能性。
- 这种发送的不确定性使整个以太网的平均通信量远小于以太网的最高数据率。
CSMA/CD协议曾经用于各种总线结构以太网和双绞线以太网的早期版本中。现在的以太网基于交换机和全双工连接,不会有碰撞,因此没有必要使用CSMA/CS协议
小结
习题
随机接入(CSMA/CA协议:无线局域网)
媒体介入控制协议 CSMA/CA,也就是载波监听、多址接入、碰撞避免
为什么无线局域网要使用CSMA/CA协议
既然CSMA/CD协议已经成功地应用于使用广播信道的有线局域网,那么同样使用广播信道的无线局域网能不能也使用CSMA/CD协议呢?
- 在无线局域网中,仍然可以使用载波监听多址接入CSMA,即在发送帧之前先对传输媒体进行载波监听。若发现有其他站在发送帧,就推迟发送以免发生碰撞。
- 在无线局域网中,不能使用碰撞检测CD,原因如下:
- 由于无线信道的传输条件特殊,其信号强度的动态范围非常大,无线网卡上接收到的信号强度往往会远远小于发送信号的强度(可能相差百万倍)。如果要在无线网卡上实现碰撞检测CD,对硬件的要求非常高。
- 即使能够在硬件上实现无线局域网的碰撞检测功能,但由于无线电波传播的特殊性(存在隐蔽站问题),进行碰撞检测的意义也不大。
802.11无线局域网使用CSMA/CA协议,在CSMA的基础上增加了一个碰撞避免CA功能,而不再实现碰撞检测功能。
- 由于不可能避免所有的碰撞,并且无线信道误码率较高,802.11标准还使用了数据链路层确认机制(停止-等待协议)来保证数据被正确接收。
- 802.11的MAC层标准定义了两种不同的媒体接入控制方式:
- 分布式协调功能DCF(Distributed Coordination Function)。在DCF方式下,没有中心控制站点,每个站点使用CSMA/CA协议通过争用信道来获取发送权,这是802.11定义的默认方式。
- 点协调功能PCF(Point Coordination Function)。PCF方式使用集中控制的接入算法(一般在接入点AP实现集中控制),是802.11定义的可选方式,在实际中较少使用。
隐蔽站问题
如图所示,这里有四个无线站点 A、B、C、D。A 的信号范围可以覆盖到 B 但不能覆盖到 C,C 的信号范围可以覆盖到 B 但不能覆盖到 A。即 A 和 C 都检测不到对方的无线信号,当 A 和 C 都要给 B 发送帧时,就会产生碰撞,但 A 和 C 无法检测到碰撞。这种未能检测出信道上其他站点信号的问题叫做隐蔽站问题
同样使用广播信道的有线局域网就不存在这样的问题,例如总线上某个主机发送的信号,最多经过一个总线端到端传播时延,就会被总线上的各主机接收到,而总线上产生的碰撞信号,最多经过一个总线端到端往返传播时延也会传遍总线。
CSMA/CA协议的工作原理
这些是无线站点,横坐标为时间,假设无线信道是空闲的,源站有数据帧要发送,当源站检测到信道空闲,则在等待帧间间隔 DIFS 后发送该数据帧,目的站若正确收到该数据帧,则经过中间间隔 SIFS 后,向原站发送确认帧 ACK。需要说明的是,若原站在规定时间内没有收到确认帧 ACK,有重传计时器控制这段时间,就必须重传该数据帧,直到收到确认为止,或者经过若干次的重传失败后放弃发送。
源站为什么在检测到信道空闲后还要再等待一段时间DIFS?
答:考虑到可能有其他的站有高优先级的帧要发送。若有,就要让高优先级帧先发送
目的站为什么正确接收数据帧后还要等待一段时间SIFS才能发送ACK帧?
答:SIFS是最短的帧间间隔,用来分隔开属于一次对话的各帧,在这段时间内,一个站点应当能够从发送方式切换到接收方式
信道由忙转为空闲且经过DIFS时间后,还要退避一段随机时间才能使用信道?
答:防止多个站点同时发送数据而产生碰撞
CSMA/CA协议的退避算法
使用退避算法的时机
当站点检测到信道是空闲的,并且所发送的数据数据帧不是成功发送完上一个数据帧之后立即连续发送的数据帧,则不使用退避算法。
以下情况必须使用退避算法:
■ 在发送数据帧之前检测到信道处于忙状态时;
■ 在每一次重传一个数据帧时;
■ 在每一次成功发送后要连续发送下一个帧时(这是为了避免一个站点长时间占用信道)。
退避算法
退避算法的示例
ABCDE 是五个无线站点,横坐标为时间,假设 A 正在占用无线信道发送帧,在 A 的发送过程中,BCD 也要发送帧,我们用向上的箭头来表示,于是进行载波监听,发现信道忙需要退避,根据退避算法,选择出一个随机的退避时间,并在每个时隙对信道进行一次检测
当检测到信道由盲状态转为空闲状态,且经过中间间隔 DFS 后,退避计时器开始倒计时
假设 C 的退避时间最短,当 C 的退避计时器到时,C 立即开始发送帧,此时信道由空闲状态转换为忙状态,当 B 和 D 检测到信道忙后,就冻结各自剩余的退避时间。
假设在 C 占用无线信道发送帧的过程中,E 也要发送帧,于是进行载波监听,发现信道忙需要退避,根据退避算法选择出一个随机的退避时间,并在每个时隙对信道进行一次检测,当检测到信道由盲状态转为空闲状态,且经过中间间隔 DFS 后,退避计时器开始倒计时
当 B 和 D 检测到信道由盲状态转为空闲状态,且经过帧间间隔 DIFS 后,退避计时器重新开始,从上次冻结的退避剩余时间开始倒计时
D 的退避计时器会首先到时,D 立即开始发送帧,此时信道由空闲状态转换为忙状态
当 B 和 E 检测到信道忙后,就冻结各自剩余的退避时间
当 D 发送完之后,信道将转为空闲状态,当 B 和 E 检测到信道由忙状态转换为空闲状态,且经过中间间隔 DIFS 后,退避计时器重新开始,从上次冻结的退避剩余时间开始倒计时
E 的退避计时器会首先到时,E 立即开始发送帧,此时信道由空闲状态转化为忙状态,当 B 检测到信道忙后,就冻结自己剩余的退避时间
当 E 发送完之后,信道将转为空闲状态,当 B 检测到信道由忙状态转换为空闲状态,且经过中间间隔 DIFS 后,退避计时器重新开始,从上次冻结的退避剩余时间更准确地说,是从上次冻结的退避剩余时间的下一个编号开始倒计时,当 B 的退避计时器到时,B 立即开始发送帧
若 B 发送完这一帧后,还有帧要发送,则在检测到信道空闲,且经过中间间隔 DIFS 后,还必须再退避一段随机时间后才能发送
CSMA/CA协议的信道预约和虚拟载波监听
为了尽可能减少碰撞的概率和降低碰撞的影响,802.11标准允许要发送数据的站点对信道进行预约。
(1) 源站在发送数据帧之前先发送一个短的控制帧,称为请求发送RTS(Request To Send),它包括源地址、目的地址以及这次通信(包括相应的确认帧)所需的持续时间。
(2) 若目的站正确收到源站发来的RTS帧,且媒体空闲,就发送一个响应控制帧,称为允许发送CTS(Clear To Send),它也包括这次通信所需的持续时间(从RTS帧中将此持续时间复制到CTS帧中)。
(3) 源站收到CTS帧后,再等待一段时间SIFS后,就可发送其数据帧。
(4) 若目的站正确收到了源站发来的数据帧,在等待时间SIFS后,就向源站发送确认帧ACK。
- 除源站和目的站以外的其他各站,在收到CTS帧(或数据帧)后就推迟接入到无线局域网中。这样就保证了源站和目的站之间的通信不会受到其他站的干扰。
- 如果RTS帧发生碰撞,源站就收不到CTS帧,需执行退避算法重传RTS帧。
- 由于RTS帧和CTS帧很短,发送碰撞的概率、碰撞产生的开销及本身的开销都很小。而对于一般的数据帧,其发送时延往往大于传播时延(因为是局域网),碰撞的概率很大,且一旦发生碰撞而导致数据帧重发,则浪费的时间就很多,因此用很小的代价对信道进行预约往往是值得的。802.11标准规定了3种情况供用户选择:
- 使用RTS帧和CTS帧
- 不使用RTS帧和CTS帧
- 只有当数据帧的长度超过某一数值时才使用RTS帧和CTS帧
- 除RTS帧和CTS帧会携带带通信需要持续的时间外, 数据帧也能携带通信需要持续的时间, 这称为802.11的虚拟载波监听机制。
- 由于利用虚拟载波监听机制, 站点只要监听到RTS帧、CTS帧或数据帧中的任何一个, 就能知道信道被占用的持续时间, 而不需要真正监听到信道上的信号, 因此虚拟载波监听机制能减少隐蔽站带来的碰撞问题。
虚拟载波监听机制为啥能减少隐蔽站带来的碰撞问题 例如这是四个无线站点,A 和 C 互为隐蔽站,A 在给 B 发送数据帧前可以使用 RTS 帧来预约信道,尽管 C 收不到该 RTS 帧,但是 C 可以收到 B 发送给 A 的 CTS 帧,这样 C 就知道了信道将被占用多长时间,在这段时间内 C 都不会征用信道,也就是说,A 给 B 发送数据帧不会受到 C 的干扰。
习题
小结
3.7、MAC地址、IP地址以及ARP协议
【数据链路层】
- MAC地址是以太网的MAC子层所使用的地址
【网际层】
- IP地址是TCP/IP体系结构网络层所使用的地址
- ARP协议属于TCP/IP体系结构的网络层,其作用是已知设备所分配到的IP地址,使用ARP协议可以通过该IP地址获取到设备的MAC地址
尽管IP地址和ARP协议属于TCP/IP体系结构的网络层,但是它们与MAC地址存在一定的关系,并且我们日常的网络应用都离不开MAC地址、IP地址以及ARP协议。因此,我们将这三者放在一起讨论。
MAC地址
- 使用点对点信道的数据链路层不需要使用地址(只有两台主机)
- 使用广播信道的数据链路层必须使用地址来区分各主机(多台主机共享信道)
使用共享信道的总线型局域网,总线上的某台主机要给另一台主机发送帧,表示帧的信号通过总线会传送到总线上的其他所有主机,那么这些主机如何判断该帧是否是发送给自己的呢?很显然,使用广播信道的数据链路层必须使用地址来区分各主机。也就是说,当多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则每个主机都必须有一个唯一的标识,即一个数据链路层地址。
广播信道的数据链路层必须使用地址(MAC)
假设总线上各主机的地址分别用一个不同的大写字母来表示,在每个主机发送的帧中,必须携带标识发送主机和接收主机的地址。由于这类地址是用于媒体接入控制的,因此这类地址被称为 mac 地址。
主机 C 要发送帧给主机 D,则在帧首部中的目的地址字段应填入主机 D 的 mac 地址,而在原地址字段应填入主机 C 自己的 mac 地址。这样总线上其他各主机收到该帧后,就可以根据帧首部中的目的地址字段的值是否与自己的 mac 地址匹配,进而丢弃或接受该帧。
一般情况下,用户主机会包含两个网络适配器:有线局域网适配器(有线网卡)和无线局域网适配器(无线网卡)。每个网络适配器都有一个全球唯一的MAC地址。而交换机和路由器往往拥有更多的网络接口,所以会拥有更多的MAC地址。综上所述,严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识。
MAC地址又称为硬件地址或物理地址。请注意:不要被 “物理” 二字误导认为物理地址属于物理层范畴,物理地址属于数据链路层范畴
IEEE 802局域网的MAC地址格式
IEEE 802 局域网的 mac 地址格式,由 48 个比特(六个字节)构成。
- 前三个字节是组织唯一标识符(OUI),生产网络设备的厂商需要向 IEEE 的注册管理机构申请一个或多个 OUI
- 后三个字节是获得 OUI的厂商可自行随意分配的这种地址标识符,称为扩展的唯一标识符(EUI),对于 48 比特的 mac 地址可称为 EUI - 48
mac 地址的标准表示方法是,将每四个比特写成一个 16 进制的字符,共 12 个字符,将每两个字符分为一组,共六组
- 组之间用短线连接,是 windows 系统中的表示方法
- 将短线更改为冒号,是 linux 系统、苹果系统、安卓系统中的表示方法
- 还可以将四个字符分为一组,共三组,组之间用点连接,是 Packet Tracer 仿真软件中的表示方法
如何在各种系统上查看设备所拥有的 mac 地址,可自行在网上搜索。在 IEEE 的官方网站查看已分配的组织唯一标识符 OUI ,可以看到30-FB-B8
这个 OUI 已被分配给华为科技有限公司。
在一些网站中,可以通过输入mac地址查询设备的厂商
- mac 地址第一字节B0位取 0 时表示该地址是单播地址;取 1 时表示该地址是多播地址(又称为组播地址)
- mac 地址第一字节的B1位取 0 时表示该地址是全球管理的,也就是全球唯一的;取 1 时表示该地址是本地管理的
- 全球管理的单播地址是厂商生产网络设备时,给设备的各网络接口固化的 mac 地址
- 全球管理的多播地址是标准网络设备所应支持的多播地址,用于特定功能,例如交换机生成树协议所需要的多播地址
- 本地管理的单播地址由网络管理员分配,这种类型的在租约中已包含的土地,租户可以使用。这种类型的地址会覆盖网络接口的全球管理单播地址,也就是它的优先级高
- 本地管理的多播地址用于用户对主机的软件配置,以表明该主机属于哪些多播组。需要注意的是,当剩余 46 比特为全 1 时,也就是 mac 地址的 48 比特全部为 1,16 进制形式为全 f,即广播地址
由于 mac 地址由 48 个比特构成,因此总地址数量为二的 48 次方个,也就是 280 多万亿个,这四类 mac 地址各占总地址空间的 1/4,也就是每种 mac 地址有 70 多万亿个。
无效的 MAC 帧
- 数据字段的长度与长度字段的值不一致
- 帧的长度不是整数个字节
- 用收到的帧检验序列 FCS 查出有差错
- 数据字段的长度不在 46 ~ 1500 字节之间
- 有效的 MAC 帧长度为 64 ~ 1518 字节之间
对于检查出的无效 MAC 帧就简单地丢弃。以太网不负责重传丢弃的帧
IEEE 802局域网的MAC地址发送顺序
- 字节发送顺序为第一字节到第六字节
- 字节内的比特发送顺序为 b0 到 b7
单播MAC地址作用举例
假设这是一个拥有三台主机的总线型以太网,各主机网卡上固化的全球单播 mac 地址。主机B给主机C发送单播帧,主机B在构建该单播帧时,在帧首部中的目的地址字段填入主机C的MAC地址,源地址字段填入自己的MAC地址,再加上帧首部的其他字段、数据载荷以及帧尾部,就构成了该单播帧
主机B将该单播帧发送出去,主机A和C都会收到该单播帧
- 主机A的网卡发现该单播帧的目的MAC地址与自己的MAC地址不匹配,丢弃该帧
- 主机C的网卡发现该单播帧的目的MAC地址与自己的MAC地址匹配,接受该帧,并将该帧交给其上层处理
广播MAC地址作用举例
假设主机B要发送一个广播帧,主机B构建该广播帧时,在帧首部中的目的地址字段填入广播地址,也就是十六进制的全F,源地址字段填入自己的MAC地址,再加上帧首部中的其他字段、数据载荷以及帧尾部,就构成了该广播帧
主机B将该广播帧发送出去,主机A和C都会收到该广播帧,发现该帧首部中的目的地址字段的内容是广播地址,就知道该帧是广播帧,主机A、C都接受该帧,并将该帧交给上层处理
多播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地址不在自己得多播组列表中,则丢弃该多播帧
注意
:给主机配置多播组列表进行私有应用时,不得使用公有的标准多播地址
随机mac地址技术
据斯诺登爆料,美国国家安全局通过监视电子设备的 mac 地址来跟踪城市中每个人的行动,因此苹果率先在 ios 系列设备扫描网络时采用随机 mac 地址技术。随后 windows 10 安卓六点以及内核版本为 3.18 的 linux 系统,也开始提供随机 mac 地址的功能,目前大多数移动设备已经采用了随机 mac 地址技术。
小结
IP地址
- IP地址属于网络层的范畴,不属于数据链路层
- 下面内容讲的是IP地址的使用,详细的IP地址内容在网络层中介绍。之所以在数据链路层这一章的讲解中引入 ip 地址,是因为在我们日常的大多数网络应用中,属于数据链路层的 mac 地址和属于网络层的 ip 地址都在使用,它们之间存在一定的关系。
基本概念
英特网中不同网络的网络编号必须各不相同,例如在本例中,网络 N8 的编号为 192.168.0,而网络 N9 的编号为 192.168.1。
从网络体系结构看IP地址与MAC地址
- 由于 ip 地址属于网络体系结构中网络层的范畴,因此在网络层首部中应该封装有原 ip 地址和目的 ip 地址
- 由于 mac 地址属于网络体系结构中数据链路层的范畴,因此在数据链路层首部中应该封装有原 mac 地址和目的 mac 地址
数据包转发过程中IP地址与MAC地址的变化情况
为了简单起见,图中各主机和路由器各接口的 ip 地址和 mac 地址用比较简单的标识符来表示,而并未使用实际的 ip 地址和 mac 地址。
假设主机 H1 要给主机 H2 发送一个数据包,我们从网络体系结构的角度来看看数据包在传输过程中,ip 地址与 mac 地址的变化情况。需要注意的是,主机中有完整的网络体系结构,而路由器的最高层为网络层,它没有网络体系结构中的运输层和应用层,我们所关注的重点是网络层,封装 ip 数据报时原 ip 地址和目的 ip 地址应该填写什么,数据链路层封装真实原 mac 地址和目的 mac 地址应填写什么,因此我们忽略网络体系结构中除网络层和数据链路层外的其他各层,可以想象成各网络层进行水平方向的逻辑通信,各数据链路层进行水平方向的逻辑通信。
主机 H1 将数据包发送给路由器 R1
- 在网络层封装的 ip 数据报首部中 原 ip 地址应填写主机 H1 的 ip 地址,目的 ip 地址应填写主机 H2 的 ip 地址,也就是从 ip1 发送给 ip2
- 而在数据链路层封装的帧首部中 原 mac 地址应填写主机 H1 的 mac 地址,目的 mac 地址应填写路由器 R1 的 mac 地址,也就是从 mac1 发送给 mac3
其他发送环节如下
如何从IP地址找出其对应的MAC地址?ARP协议要做的事情
习题
ARP协议
如何从IP地址找出其对应的MAC地址?
答:由ARP(地址解析协议)实现
工作原理
这是一个共享总线型的以太网,为了简单起见,我们只画出了该网络中的三台主机,各主机所配置的 ip 地址和其网卡上固化的 mac 地址。如图所示,假设主机 b 要给主机 c 发送数据包,主机 b 知道主机 c 的 ip 地址,但不知道他的 mac 地址,因此主机 b 的数据链路层在封装 mac 帧时,就无法填写目的 mac 地址字段,进而也就无法构建出要发送的 mac 帧。
实际上,每台主机都会有一个 arp 高速缓存表,arp 高速缓存表中记录有 ip 地址和 mac 地址的对应关系。
在本例中,当主机 b 要给主机 c 发送数据包时,会首先在自己的 arp 高速缓存表中查找主机 c 的 ip 地址所对应的 mac 地址
但未找到,因此主机 b 需要发送 arp 请求报文,来获取主机 c 的 mac 地址。arp 请求报文的内容是:我的 ip 地址为 192.168.0.2,我的 mac 地址为 00-E0-F9-A3-43-77,我想知道 ip 地址为 192.168…3 的主机的 mac 地址。需要说明的是,为了简单起见,这里我们以比较通俗的语言来描述 arp 请求报文的内容,实际上 arp 请求报文有其具体的格式。另外需要大家注意的是,arp 请求报文被封装在 mac 帧中,发送目的地址为广播地址。
主机B发送封装有ARP请求报文的广播帧,总线上的其他主机都能收到该广播帧。
- 主机 a 的网卡收到该广播帧后,将其送交上层处理,上层的 arp 进程解析 arp 请求报文,发现所询问的 ip 地址不是自己的 ip 地址,因此不予理会。
- 主机 c 的网卡收到该广播帧后,将其送交上层处理,上层的 arp 进程解析 arp 请求报文,发现所询问的 ip 地址正是自己的 ip 地址,需要进行响应。
主机 c 首先将 arp 请求报文中所携带的主机 b 的 ip 地址与 mac 地址记录到自己的 arp 高速缓存表中,然后给主机 b 发送 arp 响应报文,告知自己的 mac 地址。arp 响应报文的内容是:我的 ip 地址是 192.168.3,我的 mac 地址为 00-0C-CF-B8-4A-82,arp 响应报文被封装在 mac 帧中,发送目的地址为主机 b 的 mac 地址。
主机 c 给主机 b 发送封装有 arp 响应报文的单播帧,总线上的其他主机都能在收到该单播帧
- 主机 a 的网卡收到该单播帧后,发现其目的 mac 地址与自己的 mac 地址不匹配,直接丢弃该帧
- 主机 b 的网卡收到该单播帧后,发现其目的 mac 地址就是自己的 mac 地址,将其交付上层处理,上层的 arp 进程解析 arp 响应报文,将其所包含的主机 c 的 ip 地址与 mac 地址记录到自己的 arp 高速缓存表中。
添加新记录之后,主机 b 现在可以给主机 c 发送之前想发送的数据包了。
ARP记录类型
arp 高速缓存表中的每一条记录都有其类型,类型分为动态和静态两种。
- 动态类型是指记录是主机自动获取到的,其生命周期默认为两分钟,当生命周期结束时,该记录将自动删除。这样做的原因是,ip 地址与 mac 地址的对应关系并不是永久性的,例如当主机的网卡坏了,更换新的网卡后,主机的 ip 地址并没有改变,但主机的 mac 地址改变了。
- 静态类型是指记录是用户或网络维护人员手工配置的,不同操作系统下的生命周期不同,例如系统重启后不存在,或在系统重启后依然有效。
ARP适用范围
在下图所示的网络拓扑中,主机 h1 是否可以使用 arp 协议获取到主机 h2 的 mac 地址?
答:否,ARP协议只能在一段链路或一个网络上使用,而不能跨网络使用(看用了路由器就知道)。实际中,ARP协议的使用是逐段链路进行的
总结
ARP表中的IP地址与MAC地址的对应关系记录,是会定期自动删除的,因为IP地址与MAC地址的对应关系不是永久性的
3.8、集线器与交换机的区别
集线器HUB-在物理层扩展以太网
概念
【传统以太网】
传统以太网最初是使用粗同轴电缆,后来演进到使用比较便宜的细同轴电缆,然而这种使用无源电缆和大量机械接头的总线型以太网不那么可靠。
【集线器HUB和双绞线电缆构成的星型以太网】
下图一个使用集线器和双绞线电缆,互联了四台主机的星型拓扑的以太网,主机中的以太网卡以及集线器各接口使用 RJ-45 插座,它们之间通过双绞线电缆进行连接,在双绞线电缆的两端是 RJ-45 插头,也就是我们俗称的水晶头。实践证明,使用双绞线和集线器,比使用具有大量机械接头的无源电缆要可靠得多,并且价格便宜,使用方便,因此粗缆和细缆以太网早已成为了历史,从市场上消失了。
- 双绞线更便宜和更灵活。采用双绞线的以太网采用星形拓扑,在星形的中心则增加了一种可靠性非常高的设备,叫做集线器 (hub)。
- 集线器是也可以看做多口中继器,每个端口都可以成为一个中继器,中继器是对减弱的信号进行放大和发送的设备
- 集线器的以太网在逻辑上仍是个总线网,需要使用CSMA/CD协议来协调各主机争用总线,只能工作在半双工模式,收发帧不能同时进行
- 集线器只工作在物理层,它的每个接口仅简单的转发比特,不进行碰撞检测,碰撞检测的任务由各家的网卡负责,在分析问题时,我们可将集线器简单看作是一条总线
- 集线器一般都有少量的容错能力和网络管理功能,例如若网络中某个网卡出现了故障,不停地发送帧,此时集线器也可以检测到这个问题,在内部断开与出故障网卡的连线,使整个以太网仍然能正常工作
集线器在物理层扩展以太网
使用集线器扩展:将多个以太网段连成更大的、多级星形结构的以太网
使用集线器可以对以太网进行扩展,由于集线器只工作在物理层,所以更具体的说法是使用集线器在物理层扩展以太网
如图所示:假设某学院下设三个系部,每个系部都有一个使用集线器作为互联设备的以太网,这三个以太网相互独立,各自共享自己的总线资源,是三个独立的碰撞域或称冲突域
- 一系中的某台主机给另一台主机发送数据帧,由于总线特性表示该数据帧的信号会传输到一系中的其他各主机
- 二系中的多台主机同时发送数据帧,由于总线特性,这必然会产生信号碰撞,碰撞后的信号会传输到二系中的各主机
为了使各系部的以太网能够相互通信,可再使用一个集线器将它们互联起来,这样原来三个独立的以太网就互联成为了一个更大的以太网,而原来三个独立的碰撞域就合并成了一个更大的碰撞域,换句话说形成了一个更大的总线型以太网,例如一系中的某台主机,给二系中的某台主机发送数据帧,由于总线特性表示该数据帧的信号会传输到整个网络中的其他各主机。
优缺点
- 优点
- 使原来属于不同碰撞域的以太网上的计算机能够进行跨碰撞域的通信。
- 扩大了以太网覆盖的地理范围。
- 缺点
- 碰撞域增大了,总的吞吐量并未提高。
- 如果不同的碰撞域使用不同的数据率,那么就不能用集线器将它们互连起来。
碰撞域
- **碰撞域(collision domain)**又称为冲突域,是指网络中一个站点发出的帧会与其他站点发出的帧产生碰撞或冲突的那部分网络。
- 碰撞域越大,发生碰撞的概率越高。
以太网交换机SWITCH-在数据链路层扩展以太网
在集线器之后发展出了更先进的网络互联设备,也就是以太网交换机
概念
- 扩展以太网更常用的方法是在数据链路层进行。
- 早期使用网桥,现在使用以太网交换机。
网桥
- 网桥工作在数据链路层。
- 它根据 MAC 帧的目的地址对收到的帧进行转发和过滤。
- 当网桥收到一个帧时,并不是向所有的接口转发此帧,而是先检查此帧的目的MAC 地址,然后再确定将该帧转发到哪一个接口,或把它丢弃。
交换机
- 1990 年问世的交换式集线器 (switching hub) 可明显地提高以太网的性能。
- 交换式集线器常称为以太网交换机 (switch) 或第二层交换机 (L2 switch),强调这种交换机工作在数据链路层。
- 以太网交换机实质上就是一个多接口的网桥
集线器与交换机区别
- 以太网交换机通常都有多个接口,每个接口都可以通过双绞线电缆与一台主机或另一个以太网交换机相连,一般都工作在全双工方式,也就是发送帧和接收帧可以同时进行
- 注意使用集线器的以太网在逻辑上是共享总线的,需要使用 CSMA/CD 协议来协调各主机征用总线只能工作在半双工模式,也就是收发帧不能同时进行
- 以太网交换机具有并行性能,同时连通多对接口,是多对主机能同时通信而无碰撞
- 以太网交换机是一种即插即用的设备,上电即可工作,其内部的帧交换表是通过自学习算法自动的逐渐建立起来的
帧的两种转发方式
- 许多以太网交换机对收到的帧采用存储转发方式进行转发
- 也有一些交换机采用直通交换方式,直通交换不必把整个帧先缓存后再进行处理,而是在接收帧的同时,就立即按帧的目的 mac 地址决定该帧的转发接口,因而提高了帧的转发速率,一般采用基于硬件的交叉矩阵,这样交换时延就非常小,但直通交换的一个缺点就是它不检查帧是否有差错,就直接将帧转发出去。
主机 a 给主机 b 发送数据帧,交换机收到该帧后,在帧交换表中查找该帧的目的 mac 地址,也就是主机 b 的 mac 地址,发现应该从接口二转发,于是就从接口二将该帧转发出去,
进一步对比集线器和交换机,对比的前提条件是忽略ARP过程,并假设交换机的帧交换表已经学习或配置好了
单播帧发送
- 使用集线器的共享总线型以太网:单播帧会传播到总线上的其他各主机,各主机中的网卡根据帧的目的 mac 地址决定是否接受该帧
- 使用交换机的交换式以太网:交换机收到单播帧后,根据帧的目的 mac 地址和自身的帧交换表,将帧转发给目的主机,而不是网络中的其他各主机
广播帧发送
- 使用集线器的共享总线型以太网:广播帧会传播到总线上的其他各主机,各主机中的网卡检测到帧的目的 mac 地址是广播地址,就接受该帧
- 使用交换机的交换式以太网:交换机收到广播帧号,检测到帧的目的 mac 地址是广播地址,于是从除该帧进入交换机接口外的其他各接口转发该帧,网络中除原主机外的其他各主机收到广播帧后接受该广播帧
从本例可以看出,使用集线器的共享总线型以太网中的各主机属于同一个广播域,而使用交换机的交换式以太网中的各主机也属于同一个广播域,因此对于广播帧的情况,两种网络从效果上看没有什么区别
多个单播 网络中的多台主机同时给另一台主机发送单播帧
- 使用集线器的共享总线型以太网:必然会产生碰撞,遭遇碰撞的帧会传播到总线上的各主机
- 使用交换机的交换式以太网:交换机收到多个帧时,会将它们缓存起来,然后逐个转发给目的主机,不会产生碰撞
是否扩大碰撞域
- 仅使用集线器扩展的以太网,在逻辑上仍然是共享总线的,并且形成为一个更大的碰撞域,换句话说,参与竞争总线的主机比扩展前的更多了
- 同样的传输任务在使用交换机扩展的以太网上就不会产生碰撞
因此如果仅仅使用集线器来扩展以太网,不仅会扩大广播域,还同时扩大了碰撞域,但是如果使用交换机将原来各自独立的碰撞域连接起来,只会扩大广播域,而不会扩大碰撞域,也就是说交换机可以隔离碰撞域。
总结
工作在数据链路层的以太网交换机,其性能远远超过工作在物理层的集线器,而且价格并不贵,这就使得集线器逐渐被市场淘汰
3.9、以太网交换机自学习和转发帧的流程
以太网交换机概念
- 以太网交换机工作在数据链路层(包括物理层),目前市场上也有包含网络层部分功能的交换机,称为三层交换机。
- 以太网交换机收到帧后,在帧交换表中查找帧的目的 mac 地址所对应的接口号,然后通过该接口转发帧。
- 以太网交换机是一种即插即用的设备,上电启动时,其内部的帧交换表是空的,随着网络中各主机间的通信,以太网交换机通过自学习算法自动逐渐建立起帧交换表。以太网交换机的这种自学习方法使得以太网交换机能够即插即用,不必人工进行配置,因此非常方便。
以太网交换机自学习和转发帧流程
相互连接的两台以太网交换机,各自连接了三台主机,构成了一个交换式以太网。为了简单起见,各主机中网卡上固化的 mac 地址仅用一个大写字母表示,各主机互不相同。
以下例子假设各主机知道网络中其他各主机的MAC地址(无需进行ARP)
【主机 A 给主机 B 发送帧】
- A 先向 B 发送1帧。该帧从接口 1 进入到交换机
- 交换机把这个帧的源地址 A 和接口 1 写入(图中左边)交换表中(该登记工作称为交换机的自学习)
- 交换机1对该帧进行转发,交换机收到帧后,先查找(图中左边)交换表。没有查到应从哪个接口转发这个帧给 B
- 交换机向除接口 1 以外的所有的接口转发这个帧(盲目转发,交换机一开始比较笨,没有足够的知识,不知道帧要明确转发到哪个接口)
- 主机B发现是给自己的帧,接受该帧;除B主机之外与该帧的目的地址不相符,丢弃该帧
- 该帧从交换机1的接口4 到 交换机2的接口 2,交换机2也要进行登记工作,交换机2把这个帧的源地址 A 和接口 2 写入(图中右边)交换表中
- 交换机2对该帧进行转发,先查找(图中右边)交换表。没有查到应从哪个接口转发这个帧给 B,进行盲目转发,主机 D、E、F 都会收到该帧,根据帧的目的 mac 地址就知道这不是发送给自己的帧,于是丢弃该帧
【主机 B 给主机 A 发送帧】
- B 向 A 发送帧,该帧从接口 3 进入到交换机1
- 交换机1先进行登记工作,把这个帧的源地址 B 和接口 3 写入(图中左边)交换表中
- 交换机1对该帧进行转发,先查找(图中左边)交换表。发现(图中左边)交换表中的 MAC 地址有 A,表明要发送给A的帧应从接口1转发出去。于是就把这个帧传送到接口 1 转发给 A(明确转发)
- 主机 A 发现目的mac地址是它,就接受该帧
【主机 E 给主机 A 发送帧】
- E 向 A 发送帧,该帧从接口 3 进入到交换机2
- 交换机 2 把这个帧的源地址 E 和接口 3 写入(图中右边)交换表中
- 交换机 2 对该帧进行转发,先查找(图中右边)交换表。发现(图中右边)交换表中的 MAC 地址有 A,表明要发送给A的帧应从接口2转发出去。于是就把这个帧传送到接口 2 转发给 交换机1 的接口 4
- 该帧从接口 4 进入交换机1,交换机把这个帧的源地址 E 和接口 4 写入(图中左边)交换表中
- 交换机1对该帧进行转发,先查找(图中左边)交换表。发现(图中左边)交换表中的 MAC 地址有 A,表明要发送给A的帧应从接口1转发出去。于是就把这个帧传送到接口 1 转发给 A
- 主机 A 发现目的mac地址是它,就接受该帧
【主机 G 给主机 A 发送帧】(演示丢弃帧情况)
为了演示该情况,我们给交换机1的接口1再连接一台主机器,为了简单起见,没有画出集线器,这样主机 A、主机G,交换机1的接口1就共享同一条总线
- 主机 G 发送给 主机 A 一个帧
- 主机 A 和 交换机1接口 1 都能接收到
- 主机 A 的网卡收到后,根据帧的目的MAC地址A,就知道是发送给自己的帧,就接受该帧
- 交换机1 收到该帧后,首先进行登记工作
- 然后交换机1 对该帧进行转发,该帧的MAC地址是A,在(图中左边)交换表查找MAC 地址有 A
- MAC地址为 A的接口号是1,但是该帧正是从接口 1 进入交换机的,交换机不会再从该接口 1 将帧转发出去,没有必要再从接口1出去,于是丢弃该帧
随着网络中各主机都发送了帧后,网络中的各交换机就可以学习到各主机的MAC地址,以及它们与自己各接口的对应关系
考虑到可能有时要在交换机的接口更换主机,或者主机要更换网卡,这就需要更改交换表中的数据。为此,在交换表中每个项目都设有一定的有效时间。过期的项目就自动被删除。
习题
总结
交换机自学习和转发帧的步骤归纳
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 转发来的该帧后,将其从自己的所有接口转发出去
很显然该广播帧将在各交换机之间反复转发,按顺时针和逆时针方向同时兜圈儿,这就是广播风暴。广播风暴会大量消耗网络资源,使得网络无法正常转发其他数据帧,也会使主机反复收到广播帧,大量消耗主机资源,还会使交换机的帧交换表震荡。
帧交换表震荡
为了简单起见,假设各主机的名称也可作为其 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
- IEEE 802.1D 标准制定了一个生成树协议 STP (Spanning Tree Protocol)。
- 其要点是:不改变网络的实际拓扑,但在逻辑上则切断某些链路,使得从一台主机到所有其他主机的路径是无环路的树状结构,从而消除了兜圈子现象。
以太网交换机使用生成树协议STP(Spanning Tree Protocol), 可以在增加冗余链路来提高网络可靠性的同时又避免网络环路带来的各种问题。
- 不论交换机之间采用怎样的物理连接,交换机都能够自动计算并构建一个逻辑上没有环路的网络,其逻辑拓扑结构必须是树型的(无逻辑环路);
- 最终生成的树型逻辑拓扑要确保连通整个网络;
- 当首次连接交换机或网络物理拓扑发生变化时(有可能是人为改变或故障),交换机都将进行生成树的重新计算。
如果每条路都是正常的话,则存在网络环路
- STP算法可以判断出来应该阻塞哪些接口来形成逻辑上没有环路的网络,避免网络环路(如下图的左图)。当然没有环路的网络要能联通整个网络
- 当链路出现故障之后,需要STP算法重新计算生成树,形成新的逻辑上没有环路的网络
生成树算法STA已超出本系列课程的教学大纲对STA有兴趣的同学可参看我们的另一个系列课程《计算机网络简明教程和仿真实验》
3.11、虚拟局域网VLAN
为什么要虚拟局域网VLAN
广播风暴
假设网络中的某个主机要给另一个主机发送一个数据帧,但是在自己的 arp 高速缓存表中无法查到目的主机的 mac 地址,于是首先要发送 arp 广播请求来获取目的主机的 mac 地址,该 arp 广播请求会传遍整个网络,网络中的其他所有主机都可以收到该广播,这种情况就是所谓的广播风暴。
广播风暴会浪费网络资源和网络中各主机的 cpu 资源,因此除非应用需求必须要使用广播,否则网络中的主机应尽量不使用广播。
分割广播域的方法
那么如何才能将较大的广播域分割成更小的广播域呢?使用路由器就可以隔离广播域。
使用路由器可以将该广播域分割成两个较小的广播域。路由器工作在网络体系结构的第三层,也就是网络层,由于路由器默认情况下不对广播数据包进行转发,因此路由器很自然的就可以隔离广播域。
然而路由器的成本较高,局域网内部全部使用路由器来隔离广播域是不现实的。在这种情况下,虚拟局域网技术应运而生。
VLAN概念
虚拟局域网的英文缩写词为 VLAN ,它是一种将局域网内的设备划分成与物理位置无关的逻辑组的技术,这些逻辑组具有某些共同的需求。
如图所示,一楼二楼三楼分别有一个局域网,可将它们通过另外一个交换机互联成一个更大的局域网,那么原来每一个局域网成为现在这个局域网的一个网段,网络中的各主机属于同一个广播域,
某个主机发送的广播数据包,其他所有主机都可以收到
根据应用需求,我们将该局域网划分成两个 VLAN1 和 VLAN2,此后 VLAN1 中的广播数据包不会传送到 VLAN2,VLAN2 中的广播数据包也不会传送到 VLAN1,也就是说,同一个 VLAN 内部可以广播通信,不同 VLAN 之间不能广播通信。
- 利用以太网交换机可以很方便地实现虚拟局域网 VLAN (Virtual LAN)。
- IEEE 802.1Q 对虚拟局域网 VLAN 的定义:
虚拟局域网 VLAN 是由一些局域网网段构成的与物理位置无关的逻辑组,而这些网段具有某些共同的需求。每一个 VLAN 的帧都有一个明确的标识符,指明发送这个帧的计算机是属于哪一个 VLAN。
- 同一个VLAN内部可以广播通信,不同VLAN不可以广播通信
- 虚拟局域网其实只是局域网给用户提供的一种服务,而并不是一种新型局域网。
- 由于虚拟局域网是用户和网络资源的逻辑组合,因此可按照需要将有关设备和资源非常方便地重新组合,使用户从不同的服务器或数据库中存取所需的资源。
虚拟局域网VLAN的实现机制
虚拟局域网VLAN技术是在交换机上实现的,需要交换机能够实现以下功能
- 能够处理带有VLAN标记的帧——IEEE 802.1 Q帧
- 交换机的各端口可以支持不同的端口类型,不同端口类型的端口对帧的处理方式有所不同
处理带有VLAN标记的帧:IEEE 802.1 Q帧
交换机的端口类型
我们接下来的介绍中,为了描述方便,我们采用 PVID,交换机的每个端口有且仅有一个 PVID。
Access端口
- Access端口用于交换机与用户计算机之间的互连
- Access端口只能属于一个VLAN
- Access端口的PVID值与端口所属VLAN的ID相同(默认为1)
- Access端口接收处理方法:一般只接受“未打标签”的普通以太网MAC帧。根据接收帧的端口的PVID给帧“打标签”,即插入4字节VLAN标记字段,字段中的VID取值与端口的PVID取值相等。
- Access端口发送处理方法:若帧中的VID与端口的PVID相等,则“去标签”并转发该帧;否则不转发。
同一个VLAN
主机 ABCD 分别连接在交换机的一个端口上,交换机首次上电时,默认配置各端口属于VLAN1,也就是各端口的 pvid 值等于 1,默认配置各端口的类型为 access,我们用大写字母 a 来表示 access
- access 端口的接收处理方法是,一般只接受未打标签的普通以太网mark 帧,根据接收帧的端口的 PVID 给帧打标签,即插入四字节VLAN标记字段,字段中的 PVID 取值与端口的 PVID 取值相等。举例说明:假设主机 a 发送了一个广播帧,该针从交换机的端口1进入交换机,由于端口一的类型是 access,他会对接收到的未打标签的普通以太网 mark帧打标签,也就是插入四字节的VLAN标记字段。如图所示,由于端口1的 PVID 值等于1,因此所插入的四字节VLAN标记字段中的 vid 的值也等于1
- access 端口的发送处理方法是,若帧中的 vid 与端口的 PVID 相等,则去标签后转发该帧,否则不转发
因为帧中的 vid 的取值,与端口 2、3、4 的 PVID 取值都等于1,因此交换机会从这三个端口,对帧进行去标签转发
划分多个VLAN
将主机 a 和 b 划归到VLAN2,将主机 c 和 d 划归到VLAN3,这样VLAN2中的广播帧不会传送到VLAN3,VLAN3中的广播帧也不会传送到VLAN2。(即同一个VLAN内部可以广播通信,不同VLAN不可以广播通信)
为了实现这种应用,可以在交换机上创建VLAN2和VLAN3,将交换机的端口1和2划归到VLAN2,因此端口1和2的 PVID 值等于2;将交换机的端口3和4划归到VLAN3,因此端口3和4的 PVID 值等于3。
主机 A 发送广播帧后,该帧从交换机的端口1进入交换机,由于端口1的类型是 access,他会对接收到的未打标签的普通以太网 mark帧 打标签,也就是插入四字节的VLAN标记字段,由于端口1的 PVID 值等于2,因此所插入的四字节未按标记字段中的 vid 的值也等于2,广播帧中的 vid 的取值与端口2的 pvd 取值都会等于2,因此交换机会从端口2对帧进行去标签转发
Truck端口
- Truck端口用于 交换机之间 或 交换机与路由器 之间的互连
- Truck端口可以发送属于多个VLAN的帧
- 用户可以设置Trunk端口的PVID值。默认情况下,Trunk端口的PVID值为1
- Trunk端口发送处理方法:
- 对VID等于PVID的帧,“去标签”再转发
- 对VID不等于PVID的帧,直接转发
- Trunk端口接收处理方法:
- 接收“未打标签”的帧,根据接收帧的端口的PVID给帧“打标签”,即插入4字节VLAN标记字段,字段中的VID取值与端口的PVID取值相等
- 接收“已打标签的帧”
两台交换机互联而成了一个交换式以太网,我们的应用需求是,将主机 ABEF 划归到VLAN1,将主机 CDGH 划归到VLAN2,由于交换机首次上电时,默认配置各端口属于VLAN1,其相应的 PVID 值等于1,并且端口的类型为 access,因此我们需要对交换机进行相应的配置,才能满足应用需求。即分别在两个交换机上创建VLAN2,并将他们的端口3和4都划归到VLAN2,其相应的 PVID 值等于2,而两个交换机的端口1和2保持默认配置即可,也就是属于VLAN1,其相应的 pvid 值等于1,特别需要注意的是,两个交换机互联的端口5,需要将它们的类型更改为 Truck类型,而他们的 PVID 值保持默认的1即可
主机A发送广播帧
- Truck 端口的发送处理方法是,对 vid 等于 PVID 的帧去标签再转发,假设主机 a 发送了一个广播帧,该帧从交换机1的端口1进入交换机,由于端口1的类型是 access,他会对接收到的未打标签的普通以太网 mark帧打标签,也就是插入四字节的VLAN标记字段。如图所示,由于端口1的 PVID 值等于1,因此所插入的四字节VLAN标记字段中的 vid 的值也等于1。该广播帧中的 vid 的取值,与端口2的 PVID 值相同,端口2的类型是 access,因此交换机1会从端口2对帧进行去标签转发。该广播帧中的 vid 的取值,与端口5的 PVID 值都等于一,端口5的类型是Truck ,因此交换机1会从端口5对帧进行去标签转发,该广播帧会从交换机2的端口5进入交换机2
- Truck 端口的接收处理方法是接收未打标签的帧,根据接收帧的端口的 PVID 给帧打标签,即插入四字节VLAN标记字段,字段中的 vid 取值与端口的 PVID 取值相等,如图所示,由于端口5的 PVID 值等于1,因此所插入的四字节VLAN标记字段中的 vid 的值也等于1。该广播帧中的 vid 的取值与端口1和2的 PVID 值都等于1,端口一和二的类型都是 access,进行去标签转发
主机B发送广播帧
注意:Trunk端口对VID不等于PVID的帧,直接转发
由多个交换机互联而成的交换式以太网中划分VLAN时,连接主机的交换机端口应设置为 access 类型,交换机之间互联的端口应设置为 trunk 类型
习题
华为交换机私有的Hybrid端口类型
- Hybrid端口既可用于交换机之间或交换机与路由器之间的互连(同Trunk端口),也可用于交换机与用户计算机之间的互连(同Access端口)
- Hybrid端口可以属于多个VLAN(同Trun端口)
- 用户可以设置Hybrid端口的PVID值。默认情况下,Hybrid端口的PVID值为1(同Trun端口)
Hybrid端口发送处理方法(与Trunk端口不同)查看帧的VID是否在端口的“去标签”列表中:
- 若存在,则“去标签”后再转发;
- 若不存在,则直接转发;
Hybrid端口接收处理方法(同Trunk端口)
- 接收“未打标签”的帧,根据接收帧的端口的 PVID给帧“打标签”,即插入4字节VLAN标记字段,字段中的VID取值与端口的PVID取值相等。
- 接收“已打标签的帧”;
【应用举例】主机A、B、C连接在同一个交换机的不同接口上。利用Hybrid端口的功能,实现以下应用需求:A和B都能与C相互通信,但A与B不能相互通信。
【A->C】
【B->C】
[A->b]
该帧被直接转发,这样主机 B 就会收到一个带有VLAN标记的802.1Q帧,但是主机 B 只能识别普通以太网 mark 帧,不能识别 802.1Q 帧,只能丢弃该帧(B的去标签列表中没有10)
总结
虚拟局域网(VLAN)技术优点:
- 改善了性能
- 简化了管理
- 降低了成本
- 改善了安全性
文章说明
该文章是本人学习 湖科大教书匠 的学习笔记,文章中大部分内容来源于 湖科大教书匠 的视频 计算机网络微课堂(有字幕无背景音乐版),也有少部分内容来自于自己的思考,发布文章是想帮助其他学习的人更方便地整理自己的笔记或者直接通过文章学习相关知识,如有侵权请联系删除,最后对 湖科大教书匠 的优质课程表示感谢。