【从零开始学习计算机科学与技术】计算机网络(三)数据链路层
【从零开始学习计算机科学与技术】计算机网络(三)数据链路层
- 数据链路层
-
- 帧
-
- 1,字节计数法
- 2,字节填充法
- 3,位填充法
- 差错检测和纠错
-
- 1,奇偶校验
- 2,固定比率码(定比码)
- 3,正负编码
- 4,CRC(循环冗余校验)
- 5,校验和
- 1,汉明码
- 2,二进制卷积码。
- 3,里德-所罗门码RS纠错码。
- 4,低密度奇偶校验码。
- 流量控制
- 链路层传输协议
-
- 1,理想(乌托邦)单工协议
- 2,用于无错误通道的单工停止等待协议
- 3,用于有错误通道的单工停止等待协议
- 4,1位滑动窗口协议
- 5,回退N协议(go back n)
- 6,选择重传协议(ARQ)
- Internet上的数据链路层协议
-
- 1,高级数据链路控制(HDLC)
- 2,点到点协议PPP
数据链路层
数据链路层提供了在网络实体之间传输数据的功能和程序手段,并且可能提供了检测并可能纠正物理层中可能发生的错误的手段,尤其是在广域网中的相邻网络节点之间或同一局域网网段上的节点之间传输数据的手段。最初,此层用于点对点传输和点对多点广播。
链路层的节点有主机,交换机,网桥,路由器。
链路层的链接指沿通信路径连接相邻节点的通信通道为链接。
数据链路层负责从一个节点传输数据报通过链接到相邻节点,其交换的PDU又被称为帧。帧的由帧的首部(PCI)和帧的数据(上层协议的PDU),并且帧的首尾还有帧定界符。
链路层主要提供以下几种服务:
无连接、无确认的服务。
特点是发送方和接收方之间没有连接;接收方在收到框架时不发回回复消息;上层处理传输错误。
其适用于错误率极低的情况,适用于实时流量,例如实时语音,适用于大多数局域网。
无连接、有确认的服务。
特点是未确认的无连接服务结合已确认的服务;接收方在收到帧后发回回复消息;发件人采用超时机制处理回复消息。如果发件人未及时收到回复消息,则再次发送该帧。
其用于通道不可靠,可靠性不高的物理层之上以及无线系统。
有连接、有确认的服务。
特点是第一步:在发送者和接收者之间建立连接;第二步:保持连接,在发送方和接收方之间传输帧,接收方在收到帧时发回回复消息,发件人采用超时机制处理回复消息;第三步:释放连接。
帧
数据链路层的通过帧进行数据交互。数据链路层将网络层的数据包(packet)封装进一个帧(frame)里。这个过程通过给包添加帧头和帧尾来实现。当数据在电线中进行传输时,必须被分成可辨识的数据块。因此,需要接收器和发送器达成一种共识,明确发送的一连串二进制数据中,有哪些属于同一个帧。这部分的内容即是针对这个问题展开的。这些方法总称为拆分比特流的成帧方法。
1,字节计数法
在每个frame前面,都会添加一个字节的数据来存储本帧大小。接受方接收到第一个字节,便可以得知这一帧的范围。这么做的问题在于,一旦关键字节传输错误(这种情况在不稳定的连接中也很有可能发生),后面的数据都存在识别错误的风险。
2,字节填充法
使用一个特定无实际含义的标志来作为帧和帧的边界(在这种方法中,同样是一字节大小)。但是这么一来,由于原始数据中很可能出现同标志FLAG一样的字节,很有可能产生歧义,因此需要进行转义,通常采用字符填充(见物理层帧同步部分)。
3,位填充法
位填充的思路和之前的字节填充类似,但是处理转义中增加的不再是字节而是比特(见物理层帧同步部分)。
差错检测和纠错
数据链路层需要进行差错检测和纠错。错误检测主要检测以下错误:损坏(错误检测代码)、乱序(序号)、重复(序号)、丢失(发送方的计时器,超时机制)。
纠错机制有:重发,自动重复请求(ARQ),其他;纠错码(FEC前向纠错)。
数据链路层主要通过检错码和纠错码进行数据的检错和纠错。
错误检测有:
1,奇偶校验
奇偶校验(Parity Check)是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而确定传输代码的正确性。采用奇偶校验需要在帧的头部中保存奇偶校验的结果。
2,固定比率码(定比码)
3,正负编码
4,CRC(循环冗余校验)
循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。
循环冗余校验同其他差错检测方式一样,通过在要传输的k比特数据D后添加(n-k)比特冗余位(又称帧检验序列,Frame Check Sequence,FCS)F形成n比特的传输帧T,再将其发送出去。
特别的,循环冗余校验提供一个预先设定的(n-k+1)比特整数P,(n-k)位冗余位是D模二除P得到的余数。(模二运算与异或类似)。
接收端收到数据帧T后,用上面选定的除数P,用模2除法除去,验证余数是否为0,如果为0,则说明数据帧没有出错。
5,校验和
检验和(checksum),在数据处理和数据通信领域中,用于校验目的地一组数据项的和。它通常是以十六进制为数制表示的形式。如果校验和的数值超过十六进制的FF,也就是255,就要求其补码作为校验和。通常用来在通信中,尤其是远距离通信中保证数据的完整性和准确性。
在发送数据时,为了计算数据包的检验和。应该按如下步骤:
1、把校验和字段设置为0。
2、把需要校验的数据看成以16位为单位的数子组成,依次进行二进制反码求和。
3、把得到的结果存入校验和字段中。
在接收数据时,计算数据包的检验和相对简单,按如下步骤:
1、把数据看成以16位为单位的数字组成,依次进行二进制反码求和,包括校验和字段。
2、检查计算出的校验和的结果是否为0。
3、如果等于0,说明被整除,校验和正确。否则,校验和就是错误的。
二进制反码求和:对一个无符号的数,先求其反码,然后从低位到高位,按位相加&