来源:学银在线 计算机网络(第3期)高军 湖南科技大学
目录
- 1.概述
-
- 2.封装成帧
-
- 3.差错检测
-
- 1.奇偶校验
- 2.循环冗余校验CRC(Cyclic Redundancy Check)
- 4.可靠传输
-
- 1.基本概念
- 2.可靠传输的三种机制
-
- 1.停止-等待协议(SW)
- 2.回退N帧协议(Go-Back-N,GBN)
- 3.选择重传
- 5.点对点协议
-
- 1. 传输各种协议数据报的标准方法构成
- 2.帧格式
- 3.透明传输
- 4.差错检测
- 5.工作状态
- 6.媒体接入控制(Medium Access Control, MAC)
-
- 1.分类
- 2.静态划分信道
-
- 1.频分复用(FDM)
- 2.时分复用(TDM)
- 3.码分复用(CDM)
- 3.动态划分信道
-
- 7.MAC地址
-
- 1.MAC地址
-
- 1.IEEE 802局域网的MAC地址格式
- 2.MAC地址的类型
- 3.MAC地址的发送顺序
- 4.理解单播,广播,多播
- 5.地址解析协议ARP
本章的数据传输都看作是在对等实体之间直接传输,具体传输过程请看另一篇文章:(1.7传输过程)
1.概述
链路:从一个节点到相邻节点的一段物理线路,而中间没有任何其他的交换节点
数据链路:把实现通信协议的硬件和软件加到链路上
帧是数据链路链路层传输数据的基本单元
1.封装成帧
将IP数据报前后分别添加帧首部和帧尾部,形成帧
2.差错检测
发送方将帧发送到传输媒体上,帧在传输过程中遭遇干扰后就可能出现误码(比特差错,0变成了1,1变成了0)
差错检测:在发送帧之前,基于待发送的数据和检错算法就算出检错码,检错码被封装在帧尾部;接收方根据检错码和检错算法检测帧是否出现误码
3.可靠传输
可靠传输服务:虽然可能出现误码,但是还是能够通过其他措施来获取到帧的正确的副本
2.封装成帧
1.接收方从一连串比特流中提取帧
- PPP帧:
在帧头的首部和帧尾的尾部各包含有一个字节的标志字段(作用:帧定界)
- 以太网v2的MAC帧:
物理层将以太网v2的MAC帧前面添加8字节的前导码(前7个字节,前同步码,使接收方的时钟同步;后1字节:帧开始定界符),另外,以太网规定了帧间间隔为96比特发送时间
2.透明传输
指的是数据链路层对上层交付的传输数据没有任何限制
对于含有帧定界符的帧,帧的内部的数据部分可能包含帧定界符字节
1.字节填充
数据链路层就会在这个字节前面加上转义字符,以说明这是数据,不是帧定界符;对于包含转义字符的字节也是同样的处理
2.比特填充
在发送前,数据链路层会在这个字节内部的某个特定比特串后添加一个比特,用以消除这类字节
如:HDLC协议对011111001111110组帧后对应的比特串为01111100011111010
3.差错检测
1.奇偶校验
在待发送的数据后面添加一位奇偶检验位,使整个数据(包含校验位在内)的比特1的个数为奇数(奇校验)或偶数(偶校验)
缺点:若比特串产生了1个(奇数个)误码,能检测出出错;若比特串产生了2个(偶数个)误码,就不能检测出出错;所以奇偶校验不常用
2.循环冗余校验CRC(Cyclic Redundancy Check)
4.可靠传输
1.基本概念
利用的差错检测技术能够检测出帧在传输过程中是否出现了误码
数据链路层向上层提供的服务类型
- 不可靠传输服务:仅仅丢弃有误码的帧
- 可靠传输服务:想办法实现发送端发送什么,接收端就能接收什么
无线链路,易受干扰,必须提供可靠传输服务
传输差错:比特差错,分组(帧)丢失,分组失序,分组重复
分组(帧)丢失,分组失序,分组重复一般不会出现在数据链路层,而会出现在其上层,因此可靠传输服务不仅局限于数据链路层,其他各层均可现在实现可靠传输
可靠传输的实现比较复杂,开销大,是否使用可靠传输取决于应用需求
2.可靠传输的三种机制
1.停止-等待协议(SW)
确认与否认:接收方接收到一个没有误码的帧,之后就是向发送方发送一个确认分组(ACK),发送方在收到ACK后,才能发送下一个分组数据;如果发送的分组出现了误码,那么接收方会丢弃有误码的分组,并且发送一个否认分组(NAK)给发送方,发送方收到NAK后,会立刻重传这个有误码的分组,如果发送方收到了ACK,就会发送下一个分组数据(只有收到了ACK后,才能将对应的分组数据从缓存中删除)
超时重传:如果分组数据在传输过程中出现了分组丢失,这样接收方就收不到该分组,进而也不会发送ACK或NAK,就不会重传这个分组.为解决这个问题,在发送方发送完一个数据分组时启动一个超时计时器.如果到了超时计时器所设置的重传时间并且发送方还是收不到ACK或NAK,那么重传原来的分组(重传时间一般选为略大于从发送方到接收方的平均往返时间)
确认丢失:发送方发送一个分组,如果对应的ACK丢失,就会造成超时重传,这是发送方就会重新发送这个分组的数据,就会造成收到的数据有重复,为解决这个问题,给每个分组加上一个序号(用一个比特0或1来编号(为什么只用0,1就行了:是因为没发送一个数据分组就停止等待,只要能确认这个分组与上一个分组不同就行了,只需0和1)),接收方识别到重复的分组后,就会丢弃这个重复分组,并且发送出一个ACK,发送方收到了ACK,就会发送下一个分组数据
确认迟到:因为某些原因,导致发送方收到ACK的时间延后了,会导致超时重传,发送方方会再发送对应的分组(取名分组data 0)给接收方,接收方会将data 0丢弃并返回一个ACk,之后如果发送方收到了这个延后的ack,发送方会发送下个数据分组(data 1),而新返回的ACK可能会被误以为是data 1的ACK,为解决这个问题,给ACK一个编号,若发送方收到重复的ACK,会忽略这个ACK
对于数据链路层的点对点信道,数据传输的往返时间比较固定,一般不会出现确认迟到的情况,因此在数据链路层实现停止等待协议,不会给ACK编号
当往返时延RTT远大于数据帧的发送时延时,信道利用率非常低,若出现重传,信道利用率还会降低,因此产生了后退N帧协议和选择重传协议
2.回退N帧协议(Go-Back-N,GBN)
- 累计确认
接收方不必对收到的分组逐个发送确认,而是可以在收到几个分组后,对按序到达的最后一个分组加以确认。
- 窗口
采用n个比特对分组(帧)进行编号
- 发送窗口
发送窗口(a)大小为 0 < a <= (2^n)-1
- 接收窗口
接收窗口(b)大小为 b = 1
- 窗口移动(举例 n=3,则窗口大小为0-7)
原来发送窗口中是0 ~ 5帧,发送0帧后,如果接收窗口接收到0帧,接收窗口后移一格,并发送确认帧ACK0.接收到确认帧后,发送窗口移动一格,这是能发送1 ~ 6帧.(查看原文)
- 无差错
发送方如果发送0帧,那么接收方就要接受0帧并返回确认帧ACK0。这个时候,接收方就会根据帧编码推算下一个帧为1号帧。
那么根据上图发送窗口发送1号帧,接受窗口成功接收到了1号帧,并返回ACK1。接收端推算出下一个帧应该为2号帧。(查看原文)
- 有差错
可是2号帧在发送中意外丢失,没有给到接收窗口。而接收方继续发送3号帧,这时在接收窗口接收到了3号帧。可惜接收窗口很专一啊,2号帧没有来,谁来也不好使,接收窗口就会把3号帧丢弃,继续发送确认帧1,提醒发送窗口该发送2号帧了,在发送窗口内部的4、5帧也是同等待遇。
解决:回退N帧
每发送一个帧,就会启动超时计时器,如果没收到帧2的ACK2,并且超过超时计时器所规定的时间,那么在这个时间段内已发送的帧,包括帧2,都会重新发送
- 信道利用率
信道利用率=分组的发送时延/(分组的发送时延+往返时延+ACK的发送时延)
发送窗口越多,并不代表信道利用率越高
例如:如果发送窗口大小为8,如果ACK7丢失,前面的所有帧都会重传,此时接口窗口已经从上一个0-7移动到下一个0-7的位置0了,这个位置0与重传过来的帧的编号0-7重合,不能分辨这个发过来的是新帧或者旧帧
3.选择重传
- 窗口
采用n个比特对分组(帧)进行编号
- 发送窗口
发送窗口(a)大小为 0 < a <= 2^(n-1),注意,取值上限与回退n帧的不同
- 接收窗口
接收窗口(b)大小为 0 < b <= a,一般是a=b
- 无差错
取a=b=4
发送窗口发送编号为0-3的分组,接收窗口大小为4,初始时,只有落在接收窗口内的0-3分组能被接收,之后,接收方会发送ACK0-3给发送方,此时,接收窗口向后面移动,发送方正确接收ACK后,发送窗口也会向后移动,之后发送方清除已发送的分组的缓存,接收方将接收到的分组提交给上层
- 有差错
1.发送的分组出现丢失:
发送方发送0-3分组,在发送过程中2号分组丢失.接收方在接收分组0和1后,发送ACK0和ACK1给发送方,接收窗口后移2个位置,接收方未收到分组2,接着发送分组3的ACK,由于未发送分组2的ACK,接收窗口不向后移动,发送窗口接收到ACK0和ACK1后,向后移动2个位置,由于未收到分组2的ACK,所以发送窗口不会向后移动,此时窗口还是能够接收分组3的ACK,此时接收到ACK的分组会被标记,发送窗口发送分组4和5,接收窗口接收4和5并发送分组4和5的ACK,发送窗口接收到分组4和5的ACK,标记这两个分组;如果此时超时计时器的时间到了,只有分组2会被重发,在发送窗口内的分组3.4.5被标记了,不会被重发,这就是选择重传
2.ACK出现丢失:
上面说到接收窗口和发送窗口的大小不能超过2^(n-1).但ACK出现丢失和窗口大小大于2 ^(n-1)(这里取a=b=5)同时出现时,会导致,接收方无法分辨新旧分组:发送窗口发送0-4分组,接收窗口接收分组0-4并发送ACK0-4,此时接收窗口已经后移5个位置了(后面的位置是5.6.7.0.1),如果ACK0丢失,发送窗口不会向后移动,并且分组1-4被标记,分组0超时重发,重发的分组0被已经移动到新位置的接收窗口接收,而接收窗口内含有编号为0的位置,此时就会造成接收方无法分辨新旧分组
5.点对点协议
ISP(因特网服务提供者,如中国电信,中国移动,中国联通)从因特网管理机构申请到一批IP地址,用户计算机只有获取到ISP所分配的合法IP地址后,才能成为因特网上的主机而用户计算机与ISP进行通信使用的数据链路层协议就是PPP协议,另外PPP协议也广泛应用于广域网路由器之间的专用线路.
1. 传输各种协议数据报的标准方法构成
PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法,由一下三部分构成:
1. 对各种协议数据报的封装方法(封装成帧)
2. 链路控制协议LCP(用于建立,配置以及测试数据链路的连接)
3. 一套网络控制协议NCPs(其中的每一个协议支持不同的网络层协议)
2.帧格式
3.透明传输
物理层的传播链路是面向字节的异步链路时,使用字节填充法
物理层的传播链路是面向比特的同步链路时,使用比特填充法
4.差错检测
采用的生成多项式:CRC-CCITT= X 16 X ^{16} X16 + X 12 X ^{12} X12+ X 5 X^5 X5+1
5.工作状态
6.媒体接入控制(Medium Access Control, MAC)
协调多个发送和接收站点对一个共享传输媒体的占用
1.分类
(查看原文)
-
静态划分信道
1. 频分复用
2. 时分复用
3. 码分复用
预先固定分配好信道。这类方法非常不灵活。对于突发性数据传输信道利用率会很低。通常在无线网络的物理层中使用。
-
动态接入控制
- 受控接入(已淘汰)
- 集中控制:有一个主站以循环方式轮询每个站点有无数据发送,只有被轮询到的站点才能发送数据,最大缺点是存在单点故障问题。
- 分散控制:各站点是平等的,并连接成一个环形网络。令牌沿环逐站传递,接收到令牌的站点才有权发送数据,并在发送完数据后将令牌传递给下一个站点。
- 随机接入
所有站点通过竞争,随机地在信道上发送数据,如果恰巧由两个或更多的站点在同一时刻发送数据,则信号在共享媒体上就要产生碰撞,使得这些站点的发送都失效。因此这类协议要解决的问题是如何尽量避免冲突及在发送冲突后如何尽快恢复通信。
2.静态划分信道
- 信道复用
通过一条物理线路同时传输多路用户的信号
1.频分复用(FDM)
将传输信道的资源划分成多个子频带,形成多个子信道,各个子信道之间需要留出隔离频带(避免子信道之间的干扰),当多路信道输入一个多路复用器时,复用器将每一路信号调制到不同频率的载波上,接收端有相应的分用器通过滤波器将各路信号分开(将合成的复用信号恢复成原始的多路信号)
频分复用的用户同时占用不同的频带并行通信
2.时分复用(TDM)
将时间划分成一个个的时隙(一个时间段),将时隙轮流分配给不同用户,每对用户只在所分配的时隙里使用线路传输数据(和分时系统的CPU上下文切换差不多)
时分复用帧:一个时间段.所有用户的一个时隙组成一个时分复用帧
每一个用户的时隙是周期性出现的,周期就是时分复用帧的长度
时分复用的所有用户在不同的时间占用同样的频带宽度
3.码分复用(CDM)
主要用于多址接入
多址(多点接入)处理的是动态分配信道给用户
可以在同样的时间使用同样的频带进行通信,由于各用户使用经过特殊挑选的不同码型,因此各用户之间不会造成干扰
3.动态划分信道
1.随机接入-CSMA/CD协议
-
对于总线局域网,不同主机同时发送数据时传输信号会发生碰撞,解决这个问题使用载波监听多址接入/碰撞检测**(CSMA/CD协议)**
- 多址接入MA
多个站连接在一条总线上,竞争使用总线
- 载波监听CS
每一个站在发送帧之前先要检测一下总线上是否有其他站点在发送帧:若检测到总线空闲96比特时间,则发送这个帧;若检测到总线忙,则继续检测并等待总线转为空闲96比特时间,然后发送这个帧
- 碰撞检测CD
每一个正在发送帧的站边发送边检测碰撞:一旦发现总线上出现碰撞,即立即停止发送,退避一段随机时间后再次发送
-
争用期
由于某两端(举例A和B)之间的传播时延可能大于96比特时间,A先发送数据,B在进行载波监听时满足96的比特时间,这是B就会发送数据(尽管总线并未空闲),这时就会发生碰撞
-
最小帧长
主机A向主机D发送帧,假设这个帧很短,该帧发送完了之后,A就不会进行碰撞检测了,此时主机C如果进行载波监听并且通过后,会发送帧,这是就会发生碰撞,D收到碰撞的帧会将其丢弃,但是A由于并不知道其发送的帧遭遇了碰撞,就不会重发这个帧.所以以太网的帧长不能太短
以太网规定最小帧长为64字节,即512比特(512比特时间即为争用期),如果发送的数据非常少,就加入一些填充字节,使帧长不小于64字节
最小真诚确保了主机可在帧发送完成之前就能检测到该帧在发送过程中是否出现了碰撞
-
最大帧长
主机A向主机D发送帧,假设这个帧很长,导致总线一直被占用,可能导致B,C一直发不出帧以及D的缓冲区满了
-
截断二进制指数退避算法
若连续多次发生碰撞,就表明可能有较多的主机参与竞争信道。使用退避算法可使重传需要推迟的平均时间随重传次数而增大,因而减小发生碰撞的概率,有利于整个系统的稳定;当重传16次仍不能成功时,表明同时打算发送帧的主机太多,以至于连续发生碰撞,则丢弃该帧,并向高层报告。
-
帧发送流程
-
帧接收流程
7.MAC地址
1.MAC地址
- 对于点对点信道(只要两台主机,并且只有一条传输信道)的数据链路层是不需要使用地址的
- 对于总线局域网而言,表通过总线会传送到总线上的其他所有主机,这些主机如何判断该帧是否是发送给自己的?必须使用地址来区分各主机
- 每个主机发送的帧中必须携带表示发送主机和接收主机的地址.这二类地址用于媒体接入控制MAC,称为MAC地址
- MAC地址也称为:硬件地址或物理地址
- 一般情况下,用户主机会包含两个网络适配器:有线局域网适配器(有线网卡)和无线局域网络适配器(无线网卡),每个网络适配器都有一个全球唯一的MAC地址,而交换机和路由器往往拥有更多的网络接口,所以会拥有更多的MAC地址.所以严格来说,MAC地址是对网络上各接口的唯一标识,而不是网络上各设备的唯一标识
1.IEEE 802局域网的MAC地址格式
2.MAC地址的类型
第一字节的b1位(0:全球;1:本地) |
第一字节的b0位(0:单播;1:多播) |
MAC地址类型 |
地址数量占比 |
总地址数量 |
0 |
0 |
全球管理 单播地址(产商生产网络设备(网卡,交换机,路由器)时给设备的各网络接口固话的MAC地址) |
1/4 |
248 |
1 |
全球管理 多播地址(标准网络设备所支持的多播地址,用于特定功能) |
1/4 |
1 |
0 |
本地管理 单播地址(由网络管理员分配,覆盖网络接口的全球管理单播地址) |
1/4 |
1 |
本地管理 多播地址(用户对主机进行软件配置,以表明其属于哪些多播组(注意:取余46比特全为1时,即表示为FF-FF-FF-FF-FF-FF,为广播地址)) |
1/4 |
3.MAC地址的发送顺序
字节发送顺序:第一字节→第六字节
字节内的比特发送顺序为b0→b7
4.理解单播,广播,多播
5.地址解析协议ARP
相邻主机或者路由器之间知道彼此的IP地址,但是不知道对方的MAC地址
ARP协议只能在一段链路或网络上使用,意思是ARP只能在相邻的主机或者路由器之间使用
原理:B如何知道C的MAC地址
- 检测主机B的ARP高速缓存表,看表中有无C的IP地址.如果有,直接提取到对应的C的MAC地址
- 如果没有查到C的MAC地址.B就会广播一个ARP请求报文(封装MAC帧中,目的地址为广播地址,封装了B的IP2和MAC2,以及主机C的IP3)
- 网络中的其他所有主机收到这个请求并提交给网络层处理.网络层检测自身IP与IP3是否一样.若不一样,则不用理会,无需处理
- 若一样,说明C的IP与IP3一样,C将B的IP地址与MAC地址记录到自己的ARP高速缓存表中,并向B发送单播的ARP相应报文,B就能知道C的MAC地址了