1. 数据链路层概述
数据链路层由来:单纯的电信号0和1没有任何意义,必须规定电信号多少位一组,每组什么意思;
数据链路层的功能:定义了电信号的分组方式;
数据链路层的数据块:帧(frame),帧是数据链路层的基本传送单元;为了确保相邻两结点之间无差错传送,链路层对数据包分组后另加一层封装构成“帧”。
数据包每经过网络中的一个结点都要完成帧的拆卸和重新组装:在验证上一条链路无差错传送之后,拆去包装取出数据包,再加上新的帧头和帧尾构成新帧后往下一个结点传送。
帧的打包有4种:
- 1)字符计数法。在帧的开头约定一个固定长度的字段来标明该帧的字符个数。接收方可以根据该字段的值来确定帧尾和帧头。
- 2)首尾界符法。在帧的起始和结束位置分别用开始和结束字符标记。
- 3)首尾标志法。在帧开头和结束处,分别用一位特殊组合信息来标志帧的开始和结束。
- 4)物理层编码违例法。在帧的开始和结束处分别用非法编码系列作为标志。
数据链路层依靠物理层的服务来传输帧,实现数据链层的建立、数据传输、数据链路释放以及信息帧的发送过程流量控制和差错控制功能,为网络层提供可靠的结点与结点间帧传输服务。
为达到这一目的,数据链路必须具备一系列相应的功能,主要有:如何将数据组合成数据块,如何控制帧在物理信道上的传输,包括如何处理传输差错,如何调节发送速率以使与接收方相匹配;以及在两个网络实体之间提供数据链路通路的建立、维持和释放的管理。
数据链路层在不可靠的物理介质上提供可靠的传输。
该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。
数据链路层之间的运输、数据链路层之间的信道,见下图。
链路:一条点到点的物理线路段,中间没有任何其他的交换结点,通俗的将,就是一根线,其中不经过任何东西,这样的就是链路,一条链路只是一条通路的一个组成部分;
数据链路:除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
2. 数据链路层的三个问题
三个基本问题
(1)封装成帧:
在一段数据的前后分别添加首部和尾部,构成一个帧。
每一个链路层协议都规定了所能传送的帧的数据部分的长度上限----最大传送单元(MTU)。
(2)透明传输:
数据透明传输就是用户不受协议中的任何限制,可随机的传输任意比特编码的信息,用户可以完全不必知道协议中所规定的结束段的比特编码或者其他的控制字符,因而不受限制的进行传输。
(3)差错检测
讲解如何封装帧,封装完后帧的传输问题、传输到达目的地,如何检验该段帧是否完整。
2.1 封装成帧
数据链路层就是在ip数据报的前面和末尾加了一个首部和尾部来代表ip数据包的开始和结束,首部和尾部都是由8位二进制数表示的,可以一样也可以不一样。
2.2 透明传输
问题:在ip数据包中如果有一个跟帧尾部一样的8位二进制数,系统会提前结束接受数据包,这样数据就被破坏。出现如下图这样的问题:
解决:通过在特殊字符前面增加一个转义字符ESC,就可以解决上面所遇到的问题,在接收端,将数据包中所有ESC的字符删除,
遇到两个ESC的,就删除第一个,这样一开始传输的时候有ESC转义字符,接受完就没了,所以说的是透明传输
2.3 差错检测
问题:传输过程中可能会产生比特差错:1可能会变成0而0也可能变成1。在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER(BitErrorRate)。
为了检测传送的帧中ip数据包是否完整,是否没有被损坏,所以需要差错检测。
解决:循环冗余检测CRC。
在发送端,先把数据划分为组,假定每组K个比特(K位),同时假定待传送的一组数据M=101001(K=6),我们在M的后面再添加供差错检测用的N位冗余码一起发送.
N位冗余码求解方法:
首先,用二进制的模2运算[一种特殊的运算:00得1,11得1,01得0,10得0,但不进位/退位]进行2^N乘M的运算,这相当于在M后面添加N个0;
然后,用得到的(K+N)位的数除以事先选定好的长度为(N+1)位的除数P,得出商为Q且余数是R,余数R比除数P少1位,即R是N位;
最后,使用R替换N个0,即得到要发送的数据.
检测:
若得出的余数R=0,则判定这个帧没有差错,就接受(accept)。
若余数R≠0,则判定这个帧有差错,就丢弃
生成多项式:也很简单,例如上面的除数1101就用P(X)=X3+X2+1(X3是x的三次方的意思)最高位是2的三次方,就是x的三次方这样算,例如,101101P(X)=X5+X3+X2+1。
注意:这种检测方法并不能确定究竟是哪一个/几个比特出了差错,但是只要经过严格的挑选,并使用位数足够多的除数P,那么出现检测不到的差错的概率就很小很小了;
因此仅用循环冗余校验CRC差错检验技术只能做到”无差错接受”.
3. 可靠传输
在有些情况下,我们需要数据链路层向上的网络层提供“可靠传输”的服务,就是发送端发送什么,在对应的接收端就收到什么,前面的CRC只能检测出位数的差错,不能正确的检测出更精准的错误。
3.1 停止等待协议
停止等待就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。
超时重传:解决上面如果数据分组或确认分组丢失时,发送方将会一直等待接收方的确认分组的问题,设置一个超时计时器,若到超时计时器所设置的重传时间,而发送方仍收不到接收方的任何确认分组,则会重传原来的分组。
重复分组:如果只使用超时重传来解决,不用发送确认分组,那么会出现重复分组的问题,就是当接收方收到分组后,发回确认分组时,确认分组丢失,那么会触发超时重传,则接收方会收到两个重复的分组,这里需要注意的是,是确认分组丢失。第一次发送的分组已经正确接收了。
停止等待算法:
画图分析一下:
3.2 退回N步协议
其实跟停止等待协议差不多,只是使用的是流水线传输方式,发送方不间断的发送分组,每次发送的分组大小有限制,如果不限制,可能会使接收方或网络来不及处理这些分组,导致分组的丢失,所以每次发送的分组大小可能是5,6或者更多。这种限制就是回退N步协议。
回退N步协议:利用发送窗口来限制发送方连续发送分组的个数。要是发送窗口为1就是我们上面所讨论的停止等待协议。
退回等待是怎么工作:
这个就是回退N步协议,根据这个原理图,也能看出,为什么叫回退N步协议了,在哪里出错了,就必须回退到哪里全部重传,为了解决这个,又有了选择重传协议
3.3 选择重传协议
改进回退N布协议,方式都是一样,在接受方必须逐一确认,但是出现错误,只需要重传出现错误的那一个分组,不用全部重传,这里的全部,指的是在出现错误的分组之后的所有分组,前提是在同一个发送窗口中。
总结:不可靠的链路上,通过各种协议,就能达到可靠传输,来保证数据的准确性。
4. 两种信道下的数据链路层
点对点信道的数据链路层、广播信道的数据链路层;
在TCP/IP协议族中,链路层的主要有三个目的:
(1)为IP模块发送和接受数据报
(2)为ARP模块发送ARP请求和接受ARP应答
(3)为RARP发送RARP请求和接受RARP应答
TCP/IP支持多种不同的链路层协议,这取决于网络所使用的硬件,如以太网,令牌环网,FDDI,及RS-232串行线等。
4.1 点对点协议
概述:点对点协议PPP(PointtoPointProtocol),我们大多数用户使用的拨号电话线接入因特网时,一般使用的就是PPP协议
(1)PPP协议的特点
1)简单:接收方每接收一个帧,就进行CRC检验,检验正确,就收下,否则就丢弃,它是不可靠传输,所以这就是简单的原因;
2)封装成帧:
3)多种网络层协议:数据链路层的上一层就是网络层,所以它同时支持多种网络层协议的运行;
4)多种类型链路:
比如,串行的、并行的,(串行:一个比特一个比特发送,只需要一条线路,并行:一次性传输n个比特,所以需要n条线路,所以叫并行);
同步的、异步的(同步:以稳定的比特流的形式传输异步:以字节为独立的传输单位,字节跟字节之间的时间间隔不确定,但字节中的每个比特仍是同步的);
低速或高速、电或光,等不同类型的链路都能支持。
5)差错检测:就是用CRC来检验;
6)透明传输:
检测连接状态:检测点跟点之间的连接状态,也就是在PC机和ISP之间的线路;
最大传送单位:PPP协议帧有最大的传送单元,发送的分组不能超过这个最大长度;
网络层地址协商:使通信的两个网络层实体能够通过协商知道或能够配置彼此的网络层地址,通俗的讲,就是在分配IP地址时,就先需要这个协商才能解决;
(2)PPP协议的组成
1)在串行链路上封装IP数据报的方法,PPP既支持数据为8和无奇偶检验的异步模式,还支持面向比特的同步连接。即适应多种性质的链路。
2)建立,配置及测试数据链路的链路控制协议(LCP:LinkControlProtocol)。它允许通信双方进行协商,以确定不同的选项。
3)针对不同网络层协议的网络控制协议(NCP:NetWorkProtocol)体系。NCP允许点到点连接使用多种网络层协议,也就是因为跟网络层连接在一起,所以需要支持上一层的多种协议,这样才能完成一系列的功能,比如,网络层地址协商。
(3)PPP协议帧格式
(4)PPP协议帧传输时透明输出问题
PPP协议的每一帧都以标志字符0x7e开始和结束,紧接着是一个地址字节,值始终是0xff,然后是一个值为0x03的控制字节,然后是协议字段,类似于以太网中的类型字段的功能。当它的值为0x0021时,表示信息字段是一个IP数据报,当它的值为0xc021时,表示信息字段时链路控制数据(LCP),当值为0x8021时表示信息字段是网络控制数据(NCP)。
1)字节填充:
使用的是字节传输,也就是异步,所有的PPP帧的长度都是整数字节,所以会出现IP数据包中有字节跟开始结束标志字节相同的问题;
由于结束和开始的标志字符是0x7e,因此当该字符出现的时候,PPP需要对它进行转义,在同步链路中,该过程是通过一种称作比特填充的硬件技术来完成的。在异步链路中,特殊字符0x7d用作转义字符,当它出现在PPP数据帧中的时候,那么紧接的字符的第六个比特要取其补码,具体过程如下:
解决:标志字段F=0x7E
1)IP数据包中出现0x7E字节:需连续传送两个字符0x7d和0x5e,以实现标志字符的转义;
2)当IP数据包遇到转义的字符0x7d时,需连续传送两个字符:0x7d和0x5d,以实现转义字符的转义。
3)默认的情况下,如果字符的值小于0x20,一般都要进行转义。例如,遇到0x01时需连续传送0x7d和0x21两个字符。
4)IP数据包中出现ASCII码的控制字符,则在该控制字符前面加0x7D
与SLIP相似的是,由于PPP通常是用于低速的串行链路,因此减少每一帧的字节数可以降低应用程序的交互时延,利用链路控制协议,大多数的产品通过协商可以省略标志符和地址字段,并且把协议字段由2个字段减少到1个字节。如果我们把PPP的帧格式与SLIP的帧格式进行比较就会发现,PPP只增加了额外的3个字节。
2)零比特填充方法
使用的是比特流传输(一连串的比特连续传送),也就是同步,PPP协议就采用零比特填充方法来实现透明传输。
基本原理:在发送端,只要发现有5个连续的1,则立即填入一个0.接收端对帧中的比特流进行扫描时,每当发现5个连续的1时,就把这5个连续的1之后的一个0删除(因为01111110(6个1)表示HDLC数据块的起始和结束,从而构成最终传输的帧).
注意:只要出现了5个连续的1,则必须加上一个0!
(5)PPP协议的工作流程
链路静止、链路建立、鉴别、网络层协议、链路打开、链路终止大概流程图就是下面这个图这样:
六步的具体实现细节(验证了PPP协议的三个组成部分):
1)链路静止到链路建立:用户拨号接通ISP拨号服务器后,就创建了PC机到ISP服务器的物理连接,即创建一条怎么样的信道,通过什么传送数据,都是物理层需要做的事情。
2)链路建立到鉴别:建立物理连接后,PPP中LCP协商一些配置选项(链路上的最大帧长,所使用的鉴别协议,或者不使用PPP帧中的地址和控制字段);
跟ISP协商,即发送LCP的配置请求帧,而ISP也可以发送几种响应,配置确认帧:所有选项都接受配置否认帧,所有选项都理解但不能接受配置拒绝帧,有的选项无法识别或不能接受,需要协商。通过一系列的协商后,此过程就结束,就到鉴别状态;如果协商失败,就直接回到链路静止状态。
3)鉴别到网络层协议:这里到达网络层协议之间做的事情就是鉴别身份。即只允许传送LCP协议的分组、鉴别协议的分组以及检测链路质量的分组。若使用口令鉴别协议PAP(PasswordAuthenticationProtocol),则需要发起通信的一方发送身份标识符和口令。
系统可运行用户重试若干次。如果需要有更好的安全性,可使用更加复杂的口令握手鉴别协议CHAP(Challenge-HandshakeAuthenticationProtocol)。若鉴别身份失败,则转到链路终止状态(LinkDead)。
若鉴别成功,则进入网络层协议状态(Network-LayerProtocol)。
4)网络层协议到链路打开:前面已经经过PPP协议的前两层,接下来就是NCP(网络控制协议);这一阶段就是给PC机分配一个IP地址和对链路层进行网络层协议的设置,让链路层能支持网络层的工作;
5)链路打开到链路终止:进行传输数据,如果传输完成,就发送终止请求分组,收到终止确认分组后,就到终止状态;
6)链路终止到链路静止:当物理层没有载波时,就到静止状态。
(6)总的来说,PPP协议有以下这些优点:
(1)PPP支持在单根串行线路上运行多种协议,不只是IP协议
(2)每一帧都有循环冗余检验
(3)通信双方可以进行IP地址的动态协商(使用IP网络控制协议)
(4)连路控制协议可以对多个数据链路选项进行设置。
4.2 广播信道的数据链路层
(1)以太网和局域网的区别
以太网是通信协议标准,该标准定义在局域网(LAN)中采用的电缆类型和信号处理方法,比如CSMA/CD协议。
局域网:在较小范围内组建的网络。
以太网是一种局域网,而局域网却不一定是以太网;大多数局域网采用以太网标准。
在局域网中,采用广播信道;
广播信道:就是一台PC机发送数据给另一台PC机,在同一个局域网中的计算机都能接收到该数据,这就像广播一样,所以这种就叫做广播信道。