@[toc]
第三章:数据链路层
3.1 数据链路层概述
链路:就是从一个节点到相邻节点的一段物理线路,而中间没有任何其他的交换节点。
数据链路:是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路。
数据链路层是以帧为单位传输和处理数据。
数据链路层的三个主要问题
封装成帧
差错检测
可靠传输
使用给广播信道的数据链路层
广播信道很容易发生碰撞,所以要使用以太网的媒体接入控制协议来解决这些维问题。
3.2 封装成帧
封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧。
帧头和帧尾的作用
帧头和帧尾中包含重要的控制信息
帧头和帧尾的作用之一就是帧定界。
帧头和帧尾用特定的标志来区分一个个帧。
当数据在传输过程中出现差错时,帧定界符的作用就更加明显,假定发送端在尚未发送完一个帧时突然出现故障,中断了发送,但随后又恢复正常,于是重新发送刚才未发送完的帧,由于使用了帧定界符,接收端就知道前面收到的数据是个不完整的数据(只有首部没有尾部),必须丢弃。
3.3 透明传输
透明传输是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。
面对字节的物理链路使用字节填充
当数据部分出现和帧定界符一样的字节时,数据链路层就会错误的找到帧的边界,导致数据部分因为没有帧定界符而丢失。
为了解决这一问题,可以将帧定界符得前面插入一个转义字符,接收端的数据链路层收到这个帧后会把转义字符去掉后发送给网络层。这种方法叫字节填充。
如果转移字符也出现在数据部分中,那么也给其添加一个转移字符。
面对比特的物理链路使用比特填充
因为真的首部和尾部都还是01111110作为标志,所以为了区分帧定界和数据部分中和标志一样的八个比特,讲数据部分的全部比特进行处理,只要出现5个比特1
就加入一个比特0
,这样就可以保证在数据部分不会出现6个连续的1,接收端收到此帧后,遇到5个比特1和一个比特0时就会删掉这个比特9,还原数据部分。
这样就能够实现透明传输。
3.3 差错检测
实际的通信链路都不是理想的,比特在传输过程中可能会产生差错,1可能变成0,0可能变成1,这称为比特差错。
为了判断数据报是否出现差错,可以加入差错检验码来解决这一问题。
奇偶校验
在待发送的数据后面添加一位奇偶校验位,是整个数据中1
的个数为奇数(奇校验)或偶数(偶校验)
如果有奇数个位产生误码,则奇偶性就发生了变换,可以检查出误码
如果有偶数个位发送误码,则奇偶性不发生变化,不能检查出误码(漏检)。
循环冗余校验CRC
收发双方约定好一个生成多项式G(x)
发送方基于待发送的数据和生成多项式计算出差错检查码(冗余码),将其添加到待传输数据的后面一起传输。
接收方通过多项式来计算收到的数据是否产生了误码
如何计算
检错码只能检测出帧在传输过程中出现了差错,但并不饿能定位错位u,因此无法纠正错误。
3.4 可靠传输的基本概念
使用差错检测技术,接收方的数据链路层就课检测出帧在传输过程中是否产生了误码(比特错误)
数据链路层向上层踢狗的服务类型:
- 不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做。
- 可靠传输服务:想办法实现发送端发送什么,接收端就收到什么
一般情况下,有限链路的误码率比较低,为了减少开销,并不要求数据链路层向上提供可靠传输服务,即使出现了误码,可靠传输的问题由其上层处理。
无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务。
比特差错周四hi传输差错中的一种。
从整个计算机网络体系结构来看,传输差错还包括分组丢失、分组失序以及分组重复。这些差错一般不会出现在数据链路层,而会出现其上层。
可靠传输服务并不仅局限于数据链路层,其他各层均可选择实现可靠传输
可靠传输的实现比较复杂,开销也比较大,是否使用可靠传输取决于应用需求。
可靠传输的实现机制
停止-等待协议
确认与否认
发送方发送一个数据报后,如果收到的是确认分组,那么就接着发下一个数据报,如果收到的是否认分组,那么就重发之前的数据报。
超时重传
发送方每发一个数据包,就等待接收方的应答报文,如果超过规定时间内还没有收到,就认为重传原来的数据包,这就叫超时重传。
确认丢失
如果确认丢失,那么发送发就是启动超时重传,为了让接收方区分数据报,需要为每个数据包设置一个编号。
确认迟到
如果确认迟到了,发送方启动超时重传,那么接收方就会向发送方发送两次确认报文,发送方为了区分这些报文, 所以接收方发的确认报文也需要编号。
回退N帧协议
停止-等待协议每次只能发送一个数据报,还要等接收方确认之后才能发下一个数据报,这样信道利用率很低,浪费了资源。为了提高效率,回退N帧协议产生了。
实现原理
- 假设采用3个比特给分组便序号,即序号0-7,本例取5
- 发送窗口的此村Wt的取值:1 < Wt < 2^3 - 1
- 接收窗口的此村Wr的取值:Wr = 1
无差错情况
发送方每次可以发5个分组,接收方可以接收一个分组后,讲创就向右移动一位,接收下一个分组,每次接收一个分组就向发送方发送一个确认。
累计确认:接收方可以不用每次接收一个分组就返回一个确认,可以等几个分组都接收完后,对按序到达的最后一个分组发送确认,这样就表示最后一个分组以及它之前的分组就都接收到了,这样可以节约资源。提高效率。
有差错情况
假设当前应该接收序号5的反内战,但是5丢失了,其他分组到达了,但是由于此时接收窗口只能接收到序号5的分组,所以其他分组都不能接收,随后向发送方发送对4号的确认分组,发送方收到了几次重复的确认,就说明之前所发送的数据分组出现了差错,于是可以不等超时计时器超时就立即重传。快速重传
若Wt超过取值范围,例如Wt=8,会出现什么情况
假设发送方一连发送了8个分组,接收方收到了8个分组,随后向发送方返回确认,但是确认延迟了,导致发送方启动了超时重传机制,又重新发了8个分组,接收方收到这8个分组之后,误以为这是新的分组,并接受了,导致发生了错误。
总结
选择重传协议
回退N帧协议中接收窗口尺寸只能是1,因此接收方只能按序接受正确到达的数据分组。
一个数据分组的误码就会导致其后续多个数据分组不能被接收方按序接收而丢弃(尽管它们无乱序和误码)。这回造成发送方对这些分组的超时重传,显然这是对通信资源的极大浪费。
为了解决这一问题,可设法只重传出现误码的数据分组,因此接收窗口的尺寸应该大于1,以便接收方先手下失序但无误码并且序号落在接收窗口内的那些数据分组,等待所需分组收起后再一并送交上层。这就是选择重传协议。
选择重传协议为了使发送方仅重传出现差错的分组,所以接收方不能再采用累积确认,而需要对每个正确接收到的数据分组进行逐一确认。
过程
发送方可以发送窗口内所有没有被接收到的分组,一旦前面几个分组收到确认了,窗口就向前移,如果有分组很久得不到确认,那么超时重传。
接收方可以接收窗口内所有的分组,如果有分组到达就向发送发发送确认分组,只要窗口的第一个没有接收到,窗口就不能向前移动。
假设接收窗口设置比2^(n-1)
大,那么也会出现和回退N帧协议一样的错误,就会产生接收方无法判断旧数据的问题。
3.5 点对点协议PPP
帧格式
透明传输
差错检测
工作状态
3.6 媒体接入控制
静态划分信道
信道复用
频分复用
时分复用
波分复用
码分复用
动态接入控制
随机接入
争用期
最小帧长
截断二进制指数退避算法
信道利用率
帧发送过程
帧接收过程
3.7 MAC地址、IP地址和ARP协议
- MAC地址是以太网的MAC子层所使用的地址 (数据链路层)
- IP地址是TCP/IP体系结构网际层所使用的地址;(网际层)
- ARP协议属于TCP/IP体系结构的网际层,琪作用是已知设备所分配到的IP地址,使用ARP协议可以通过改IP地址获取到设备的MAC地址;(网际层)
MAC地址
使用点对点信道的数据链路层不需要使用地址
而使用广播信道的数据链路层必须使用地址来区分各主机。
MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识。
MAC地址格式
单播MAC地址
目的MAC地址与本主机的MAC地址相同则接收,否则丢弃
广播MAC地址
多播MAC地址
IP地址
IP地址是因特网上的主机和路由器所使用的地址,用于表示两部分信息:
- 网络编号:标识因特网上数以百万计的网络
- 主机编号:标识同一网络上的不同主机
很明显,MAC地址不具备区分不同网络的功能
- 如果是一个单独的网络,不接入因特网,可以只有MAC地址
- 如过要接入因特网,则IP地址和MAC地址都要使用
从网络体系结构上看IP地址与MAC地址
每一层收到上层传来的报文时都无需知道报文的内容,只需加上本层的首部,然后向下传输,自顶向下。一层一层传输。
在数据包转发过程中:
- 源IP地址和目的地址保持不变
- 源MAC地址和目的MAC地址逐个链路和逐个网络改变
主机和路由器之间是通过路由选择算法来知道其他主机或路由器的IP地址
但知道IP地址怎么知道MAC地址呢
ARP
每个主机都有一个ARP缓存表,如果要转发数据包给其他主机时,首先在ARP缓存表里查看是否有相应的MAC地址,如果有则直接转发,否则发送ARP请求报文(本主机的IP地址和MAC地址,对方的IP地址),广播后,链路上的每台主机都会收到该请求报文,只有主机的IP地址和报文里的IP地址相同时接收该报文,并把报文中的IP地址和MAC地址填入自己的ARP缓存表里,然后在向源主机发送响应报文,以告知自己的MAC地址,以单播的形式发送该报文,源主机收到该报文后,将报文中目的主机的MAC填入自己的ARP缓存表中