目录
3.1 数据链路层概述
3.2 封装成帧
透明传输
3.3 差错检测
奇偶校验
循环冗余校验CRC
3.4 可靠传输
基本概念
可靠传输的实现机制——停止等待协议SW
可靠传输实现机制——后退N帧GBN
可靠传输的实现机制—— 选择重传协议
3.5 点对点协议PPP
3.6 媒体接入控制
基本概念
媒体接入控制——静态划分信道
随机接入——CSMA/CD
随机接入——CSMA/CA协议
3.7 MAC地址、IP地址以及ARP协议
MAC地址
IP地址
ARP协议
3.8 集线器和交换机的区别
3.9 以太网交换机自学习和转发帧的流程
3.10 以太网交换机生成树协议
3.11 虚拟局域网VLAN
概述
虚拟局域网VLAN的实现机制
数据链路层需要解决的问题:解决分组在一个网络(或者一段链路)上传输的问题
(数据链路层的内容挺多的)
一些概念
链路:从一个结点到相邻结点的一段捂脸线路,而中间没有任何其他的交换结点
数据链路:把实现通信协议的硬件和软件加到链路上,就构成了数据链路
数据链路层以帧为单位传输和处理数据
数据链路层的三个重要问题
封装成帧、差错检测、可靠传输
1、封装成帧
对于发送方而言,将网络层交付的IP数据报加上帧头,和帧尾,封装成帧
2、差错检测
如果数据在发送途中发生了误码,如何发现这个错误呢?
可以通过检测码发现,检错码封装在帧尾
接收方收到数据后,通过检错码和检测算法,就可以知道数据在传输过程中是否发生了误码
3、可靠传输
假设数据在传输过程中发生了误码,接收方是不会接收该数据的,会直接抛弃该数据。
如果提供的是不可靠的传输,那丢弃就丢弃了
如果提供的是可靠传输,那么还要重传发生误码的数据,这其中有什么算法?
所谓可靠传输,就是:发送方发送什么,接收方就接收什么。
以上三个问题,是使用的点对点信道的数据链路层的时候需要解决的问题
对于使用广播信道的数据链路层,还需要解决其他问题。
(1)编址问题:假设通过广播信道向其他主机发送数据,如何知道谁该接收?
(2)碰撞问题:同时通过总线或者共享无线信道来传输帧时,传输信号就会产生碰撞,如何解决?
封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧
帧头和帧尾包含有重要的控制信息
接收方如何知道这是一个帧的开始呢?
帧头和帧尾的作用之一就是帧定界
PPP帧的前面和后面各一字节的标志,就是帧定界标志
并不是所有帧格式都包含帧定界标志,比如MAC帧,这种帧如何实现定界呢?
数据链路层将封装好的帧交付物理层后,物理层会将帧前面加上前导码再发送出去,前导码中的前七个字节是前同步码,目的是同步时钟,然后是一字节的帧开始定界符
以太网MAC帧的帧间传输时间间隔为96bit时间
下面时两种不同的帧格式
注意:在MAC帧中,由于是面向共享传输媒体的数据链路层传输,所以需要源MAC地址和目的MAC地址;但由于PPP协议是用于点对点信道,故不需要源和目的MAC地址
透明传输是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。
问:这里的没有任何限制会产生一个问题:数据载荷部分可能包含帧定界符,但其实是数据。
答:这时候可以在这块数据前加转义字符,告诉接收方这后面的一字节是数据而不是帧定界符。
问:再极端一些,如果数据包含转义字符如何处理?
答:在转义字符前面加转义字符。
注意,填充字符是面向字符的物理链路使用的;如果是面向比特的链路,可以采用比特填充
如图:
概念:
检错码的位置:FCS字段
奇偶校验是一种简单的校验方式
生成多项式举例:
练习:
关于纠错码提一嘴:有一种海明码的东西,可以提供一位的纠错
本节介绍三种可靠传输方法
比特差错只是传输差错中的一种
从整个计算机网络体系结构来看,传输差错还包括分组丢失、分组失序以及分组重复
分组丢失:路由器的输入队列满了,主动丢弃收到的分组
分组失序:未按照顺序到达
分组重复:由于某些原因分组滞留,分组滞留会造成超时重传,最后接收到两个相同的分组
这些问题均是可靠传输需要解决的问题
可靠传输服务并不仅局限于数据链路层,其他各层均可实现可靠传输
可靠传输的实现比较复杂,开销也比较大,是否使用可靠传输取决于应用需求
做法:
发送方发送数据分组,接收方回复确认分组ACK,发送方收到确认分组后,才能继续发送数据。如果出现了误码,则需要回复否认分组NAK,并丢弃误码的分组。发送方接收到否认分组后重发数据分组。
不难看出,在发送方没有收到确认分组前,不能清除发送分组的缓存。
问题1:
假设数据分组在传输过程中丢失怎么办?
问题2:假设是确认分组丢失怎么办?
答:
问题2:确认分组需不需要编号?
来看下面的情况,确认迟到导致超时重传
这样第二个Data0的确认被误以为是Data1的确认
对于数据链路层的点对点信道,往返时间比较固定,不容易出现迟到的情况,所以可以不用给确认分组编号。
注意事项:
停止等待协议的信道利用率
当往返时间比较大时,将大大降低信道利用率
下面的两个协议解决信道利用率低的问题
概述:
如果在收到一个分组的确认之前,就发送下一个分组,可以提高信道的利用率
这需要发送方维护一个发送窗口
累积确认的概念
使用累计确认,有一个优点,即使确认分组丢失,发送方也可能不必重传。(会由后续到来的分组帮忙确认)
对于有差错的情况
假设5号分组到达由于误码被丢弃,后续分组由于序号不匹配不能被接收方接收,也会被丢弃,接着对之前到达的最后一个重复到达的分组进行重复确认,就可以不必等到超时计时器到来才重传(在后面的章节中会介绍到的快重传算法)
问题:
假设发送窗口的大小超过上限,比如上述例子中将发送窗口的大小取值为8,会造成什么后果?
答:
假设已经正确接收分组,但是确认信息在途中丢失,就会触发超时重传。超时重传的第一个编号和接收窗口的第一个编号相同就会造成重复接收分组。
如图
假设确认分组ACK7丢失,且7是对前7个分组的唯一确认,超时重传的数据第一个序号与此时的接收窗口序号相同,就会被重复接收
小结:
也是对回退N帧协议的优化
概述:
实现过程
注意发送窗口的大小范围
假设分组2丢失了,接收方仍然会接收所有正确到达的分组,
接收方会为每个正确到达的分组发送确认分组,并向前滑动,发送方可以将已经按序到达的分组移出自己的发送窗口,并向前滑动。
接着只要之前未按序到达的分组的超时计时器触发,就可以将未按序到达的分组发送出去。
假设将发送窗口的值设置为5,会出现什么问题?
假设0-4按序到达但0号分组的确认丢失
小结:
点对点协议PPP是目前使用最广泛的点对点数据链路层协议
一般的用户是如何连接到因特网的呢?
PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法,主要由以下三个部分组成:
点对点协议的帧格式
透明传输:
面向字节:
面向比特:
差错检测:
为了节省CPU资源,一般采用查表法实现
使用PPP的数据链路层向上不提供可靠传输服务
工作状态:
随着技术的发展,交换技术的成熟和成本的降低,具有更高性能的使用点对点链路和链路层交换机的交换式局域网在有线领域已经完全取代了共享式局域网,但由于无线信道的广播天性,无线局域网仍然使用的是共享式媒体技术
信道复用
复用包括:频分复用FDM、时分复用TDM、波分复用WDM、码分复用CDM
频分复用FDM:
频分复用的所有用户同时占用不同的频带资源进行通信
时分复用TDM:
时分复用的所有用户在不同的时间占用同样的频带宽度
波分复用WDM:
就是对光的频分复用
码分复用CDM:
适用于有线网络
如何解决碰撞的问题?
关于碰撞,黑皮书是这么说的:
- 适配器从网络层的一段获取数据报,准备数据链路帧,并将其放入帧适配器(在结点中)缓存中
- 如果适配器监听到信道空闲(无信号能量从信道进入适配器),它开始传输帧;反之不传输
- 在传输过程中,适配器监视来自其他使用该广播信道的适配器的能量信号的存在
采用载波监听多址接入/碰撞检测CSMA/CD
概括来说:“一旦冲突,立即停说;等待时机,重新再说”
假设主机B等到了一个发送帧的时间,C发送后就会产生碰撞,这时都要停止发送
争用期(碰撞窗口):以太网的端到端往返传播时延
最小帧长
以太网规定最小帧长为64字节,即512比特(512比特时间为争用期);
如果要发送的数据非常少,那么必须加入一些填充字节,使帧长不小于64字节
以太网的最小帧长确保了主机可在帧发送完成之前就检测到该帧在发送过程中是否遭遇了碰撞。
最大帧长
存在的问题:
导致总线上的其他主机长时间拿不到总线的使用权
接收方的缓冲区可能没有这么大产生溢出
退避时间
如果检测到碰撞,那么需要退避一段时间重新发送数据,这个时间就是退避时间
信道利用率
总结:CSMA/CD协议曾经用于各种总线结构以太网和双绞线以太网的早期版本中。
现在的以太网基于交换机和全双工连接,不会有碰撞,因此不需要CSMA/CD协议
无线局域网使用的
采用载波监听多址接入/碰撞避免CSMA/CA
问题:
为什么有线网用的CSMA/CD不能用于无线网?
答:
什么是隐蔽站?
帧间间隔IFS
CSMA/CA协议的工作原理
问:源站为什么在检测到信道空闲后还要等待一段时间DIFS?
答:考虑到可能有其他站有高优先级的帧要发送。若有,就让高优先级帧先发送。(优先级的区分就是靠IFS的大小)
问:目的站为什么正确接收数据帧后还要等待一段时间SIFS才能发送ACK帧?
答:SIFS是最短的真间间隔,用来分隔开属于一次对话的各帧。在这段时间内,一个站点应当从发送方式切换成接收方式。
问:为什么信道由忙转为空闲且经过DIFS时间后,还要退避一段时间才能使用信道?
答:防止多个站点同时发送数据而产生碰撞
(注意我们的碰撞避免算法只是减少碰撞的发生,而不是真的避免碰撞)
退避算法的使用规则:
退避时间的选择:
信道预约
这样做是否值得?
虚拟载波监听
使用点对点信道的数据链路层不需要地址
MAC地址有时也称为物理地址(属于数据链路层范畴)
MAC地址的分类有:
全球管理的单播地址、全球管理的多播地址、本地管理的单播地址、本地管理的多播地址
MAC地址的格式
由48比特构成
单播:
多播:
数据报包在转发过程中IP地址和MAC地址的变化情况
如何通过IP地址找到对应的MAC地址?
地址解析协议ARP
主机B要知道某个IP地址对应的MAC地址,发送请求报文以广播发送
集线器工作在物理层,交换机工作在数据链路层
交换机可以实现点对点链路的数据链路传输
自学习算法过程:
现在帧交换表是空的
(1)假设A现在要给B发送帧,查找自己的表,没有,登记、进行盲目洪发
(2)现在B要给A发送
(3)现在E给A发送
注意:每条记录都有自己的有效时间,到期自动删除
(MAC地址与交换机接口的对应关系并不是永久性的)
如何提高以太网的可靠性?
添加冗余链路可以提高以太网的可靠性
冗余链路会形成负面效应——网络环路
网络环路会带来以下问题
1、广播风暴(消耗大量的网络资源,使得网络无法正常的转发其他数据帧)
2、主机反复收到重复的广播帧
3、交换机的帧交换表震荡
生成树协议STP
绿色正常表示该接口可以正常的转发帧,橙色阻塞表示无法转发帧,红色表示接口故障
(不关注这个算法是怎么实现的,可以看数据结构图里面的最小生成树)
VLAN(Virtual Local Area Network)即虚拟局域网,是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。
每个VLAN是一个广播域,VLAN内的主机间可以直接通信,而VLAN间则不能直接互通。这样,广播报文就被限制在一个VLAN内。
网络中的主机非必要不使用广播
问题的关键是:网络中会频繁出现广播信息
TCP/IP协议栈中很多协议会使用广播
- 地址解析协议ARP
- 路由信息协议RIP
- 动态主机配置协议DHCP
其他协议栈也会使用到广播
所以我们需要做的是,如何减小广播域的范围
答:使用路由器可以隔离广播域
路由器工作在第三层:网络层
但是有一个问题:路由器的成本较高
为了解决这个问题,就有了我们的虚拟局域网VLAN技术
IEEE 802.1Q帧
交换机的端口类型
需要说明:思科交换机没有Hybird端口
Access端口
Trunk端口
需要注意的非常重要的一点是,trunk端口的PVID可以有多个
参考资料:
计算机网络微课堂(有字幕无背景音乐版)_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1c4411d7jb?from=search&seid=9425456447145262091&spm_id_from=333.337.0.0