概述
主机和路由器:结点(nodes)
连接相邻结点的通信信道:链路(links)
有线链路(wired links)
无线链路(wireless links)
局域网(LANS)
链路层数据分组:帧,封装网络层数据报
数据链路层负责通过一条链路从一个节点向另一个物理链路直接相连的相邻结点传送数据报。
封装成帧、透明传输和差错检测
组帧(framing)
封装数据报构成数据帧,加首部和尾部
帧同步
链路接入(link access)
如果是共享介质,需要解决信道接入(channel access)
帧首部中的“MAC”地址,用于标识帧的源和目的(不同于IP地址)
相邻结点间可靠交付
在低误码率的有线链路上很少采用(如光纤,某些双绞线等)
无线链路:误码率高,需要可靠交付
流量控制(flow control)
协调(pacing)相邻的发送结点和接收
差错检测(error detection)
信号衰减和噪声会引起差错
接收端检测到差错:通知发送端重传或者直接丢弃帧
差错纠正(error correction)
接收端直接纠正比特差错
全双工和半双工通信控制
全双工:钱链路两端结点同时双向传输
半双工:链路两端结点交替双向传输
链路层的具体实现:
每个主机或路由器接口
链路层在“适配器”(即网络接口卡-NIC)中实现或者在一个芯片上实现:
以太网网卡,802.11网卡;以太网芯片组
实现链路层和物理层
链接主机的系统总线
由硬件、软件与固件组成
网卡间通信:
发送端:
将数据报封装成帧
增加差错检测比特,实现可靠数据传输和流量控制等.
接收端:
检测差错,实现可靠数据传输和流量控制等
提取数据报,交付上层协议实体
封装成帧和透明传输
封装成帧就是在一段数据的前后部分添加首部和尾部,这样就构成了一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。
首部和尾部包含许多的控制信息,他们的一个重要作用:帧定界(确定帧的界限)。
帧同步:接收方应当能从接收到的二进制比特流中区分出帧的起始和终止。
组帧的四种方法:1.字符计数法,2.字符(节)填充法,3.零比特填充法,4.违规编码法。
透明传输是指不管所传数据是什么样的比特组合,都应当能够在链路上传送。因此,链路层就“看不见”有什么妨碍数据传输的东西。
当所传数据中的比特组合恰巧与某一个控制信息完全一样时,就必须采取适当的措施,使收方不会将这样的数据误认为是某种控制信息。这样才能保证数据链路层的传输是透明的。
字符计数法:帧首部使用一个计数字段来标明帧内的字符数
缺点:鸡蛋放在同一个篮子里面,只要有一个地方出错后面全部跟着出错。
字符填充法
1、当传送的帧是由文本文件组成时(文本文件的字符都是从键盘上输入的,都是ASCI码)不管从键盘上输入什么字符都可以放在帧里传过去,即透明传输。
2、当传送的帧是由非ASCI码的文本文件组成时(二进制代码的程序或图像等)就要采用字符填充方法实现透明传输,
零比特填充法
5‘1’1‘0’
1、在发送端,扫描整个信息字段,只要连续5个1,就立即填入1个0。
2、在接收端收到一个帧时,先找到标志字段确定边界,再用硬件对比特流进行扫描。发现连续5个1时,就把后面的0删除。
违规编码法
在曼切斯特编码中,只会出现高低或者低高,不会出现高高或者低低,这样子就可以凭借此用来作为帧的起始和终止
差错编码
差错编码:D→DR,其中R为差错检测与纠正比特(不能保证100%可靠)
差错编码的检错能力
差错编码可分为检错码与纠错码
1、对于检错码,如果编码集的汉明距离d=r+1,则该差错编码可以检测r位的差错
2、对于纠错码,如果编码集的汉明距离d=2r+1,则该差错编码可以纠正r位的差错
汉明距离,等长字符串不同位数的个数。
奇偶校验码(检错编码)
1比特校验位:检测奇数位差错
二维奇偶校验:1、检测奇数位差错、部分偶数位差错 2、纠正同一行/列的奇数位错
Internet校验和
用于TCP和UDP的检验。
发送端:
1、将“数据”(校验内容)划分为16位的二进制“整数”序列
2、求和(sum):补码求和(最高位进位的“1”返回最低位继续加)
3、校验和(Checksum):sum的反码
4、放入分组(UDP、TCP、IP)的校验和字段
接收端:
1、与发送端相同算法计算
2、计算得到的"checksum"
为16位全0(或sum为16位全1):无错
否则:有错
CRC编码(检错编码)
检错能力更强大的差错编码
将数据比特,D,视为一个二进制数
选择一个r+1位的比特模式(生成比特模式),G
目标:选择r位的CRC比特,R,满足
<D,R>刚好可以被G整除(模2)
接收端检错:利用G除<D,R>,余式全0,无错;否则,有错!
可以检测所有突发长度小于r+1位差错:
广泛应用于实际网络(以太网,802.11 WiFi,ATM)
相当于给了n+1位P,在被除数后面加n个0,模2除法,得到余数加到后面即可。
海明码
工作流程:
1、确定校验码位数r
2、确定校验码和数据的位置
校验码放在序号为2^n的位置,数据按序装上
3、求出校验码的值
4、检错并纠错
流量控制与可靠传输控制
1、可靠传输的相关基本概念
使用差错检测技术(例如循环冗余校验CRC),接收方的数据链路层就可检测出帧在传输过程中是否产生了误码(比特差错)。
2、数据链路层向其上层提供的服务类型
不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做
可靠传输服务:通过某种机制实现发送方发送什么,接收方最终就能收到什么
3、一般情况下,有线链路的误码率比较低。为了减小开销,并不要求数据链路层向其上层提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层处理。
4、无线链路易受干扰,误码率比较高,因此要求数据链路层必须向其上层提供可靠传输服务
传输差错:误码、分组丢失、分组失序、分组重复
可靠传输服务并不局限于数据链路层,其他各层均可选择实现可靠传输。
可靠传输的实现比较复杂,开销比较大,是否使用可靠传输取决于应用需求。
停止-等待(Stop-and-Wait,SW)协议
1、误码(否认重传)
2、分组丢失(超时重传)
①接收方收不到数据分组,就不会发送相应的ACK或NAK。
②如果不采取措施,发送方就会一直处于等待接收方ACK或NAK的状态。
③为解决上述问题,发送方可在每发送完一个数据分组时就启动一个超时计时器(Timeout Timer)
④若到了超时计时器所设置的超时重传时间(Retransmission Time.Out,RTO>RTT),但发送方仍未收到接收方的ACK或NAK,就重传之前已发送过的数据分组。
3、分组重复(数据分组编号)
①为了避免分组重复这种传输错误,必须给每个分组带上序号。
②对于停止-等待协议,由于每发送一个数据分组就停止等待,只要保证每发送一个新的数据分组,其序号与上次发送的数据分组的序号不同就可以了,因此用一个比特来编号就够了,序号有0和1这两个。
4、ACK重复(确认分组编号)
tips:
1、使用超时重传机制后,就可以不使用否认机制了,这样可使协议实现起来更加简单。但是,如果点对点链路的误码率较高,使用否认机制可以使发送方在超时计时器超时前就尽快重传。
2、为了让接收方能够判断所收到的数据分组是否是重复的,需要给数据分组编号。由于停止-等待协议的特性,只需1个比特编序号即可,即序号0和序号1。
3、为了让发送方能够判断所收到的确认分组是否是重复的,需要给确认分组编号,所用比特数量与数据分组所用比特数量一样。
数据链路层一般不会出现确认分组迟到的情况,因此在数据链路层实现停止-等待协议可以不用给确认分组编号
4、给超时计时器设置的超时重传时间RTO应当仔细选择,一般将RTO设置为略大于收发双方的平均往返时间RTT。
在数据链路层,点对点的往返时间RTT比较固定,RTO就比较好设定。
在运输层,由于端到端往返时间非常不确定,设置合适的超时重传时间RT0有时并不容易。
5、停止-等待协议属于自动请求重传(AutomaticRepeatreQuest,ARQ)协议。即重传的请求是发送方自动进行的,而不是接收方请求发送方重传某个误码的数据分组
信道利用率:
回退N帧(Go-back-N,GBN)协议
1、在使用流水线传输方式时,发送方不能无限制地连续发送数据分组,,否则可能会导致网络中的路由器或接收方来不及处理这些数据分组,进而导致数据分组的丢失,这实际上是对网络资源的浪费。因此,必须采取措施来限制发送方连续发送数据分组的数量。
2、回退N帧协议采用流水线传输方式,并且利用发送窗口来限制发送方连续发送数据分组的数量,这属于连续ARQ协议。
发送方需要维护一个发送窗口WT,在未收到接收方确认分组的情况下,发送方可将序号落入WT内的所有数据分组连续发送出去。
接收方需要维护一个接收窗口WR,只有正确到达接收方(无误码)且序号落入WR内的数据分组才被接收方接收。WR的取值只能是1,这一点与停止-等待协议是相同的。
1、接收方每正确收到一个序号落入接收窗口的数据分组,就将接收窗口向前滑动一个位置这样就有一个新的序号落入接收窗口。与此同时,接收方还要给发送方发送针对该数据分组的确认分组。
2、发送方每收到一个按序确认的确认分组,就将发送窗口向前滑动一个位置,这样就有一个新的序号落入发送窗口,序号落入发送窗口内的数据分组可继续被发送。
3、在回退N帧协议的工作过程中,发送方的发送窗口和接收方的接收窗口按上述规则不断向前滑动。因此,这类协议又称为滑动窗口协议。
选择重传(Selective Repeat,SR)协议
采用逐一确认的方式,对每个数据都需要确认。 GBN是累积确认方式。