计算机网络-数据链路层

Aki 发布于 2023-08-02 191 次阅读


数据链路层提供的服务:封装数据包成帧,物理寻址,流量控制,访问控制,错误检测。

子层、

数据链路层有两个子层,分别是逻辑链路控制子层(LLC),MAC子层。

LLC负责处理上下层之间的通信,作用是获取网络协议数据,并添加控制信息以帮助将数据包传送到目的地。控制信息都是LLC添加的,用来实现流量控制的服务。

MAC层是数据链路层的较低子层,通常由硬件实现,通常在NIC中,这是与物理层直接有交互性的层。作用是数据封装(帧的封装和解封)和媒体访问控制和错误控制(错误码)和物理寻址。从网络层接收到的数据包,在LLC层添加完控制信息后,MAC层负责收集所有的比特信息,最终构造成帧,MAC层只在数据包添加标头和标尾构造帧。

MAC层封装帧的方法、

有两种方法,面向位和面向字节。

在面向位的方法中,帧被视为位的集合,当我们说两个节点要交换数据时,我们将数据交换视为交换比特序列。因此在面向成帧的方法中,数据作为比特序列进行传输,这些比特序列将在上层得到解释。面向位中流行的协议叫做HDLC(High-Level Date Link Control)高级链路层协议,由IBM公司开发。

在面向字节的方法中,一切都被视作字节,这是最古老的方法之一,在这里帧被视为字节或者字符的集合,交换数据也就是交换字节序列。有三个著名协议,BISYNC(Binary Synchronization Communication Protocol)二进制同步协议,DDCMP(Digital Data Conmunication Message Protocol)数字数据通信协议,PPP(Point to Point Protocol)点对点协议。

HDLC、

HDLC协议是数据链路层非常重要的协议之一,被广泛使用,也是其他很多链路层协议的基础。

开始序列和结束序列:HDLC使用8位来表示帧的开始和结束序列,每一个帧都需要表示开头和结尾。

标头字段:标头字段包括地址字段和控制字段。

主体字段:也就是有效载荷,存放着网络层接收到的数据包。

CRC:循环冗余校验,通过生成一个固定长度的校验值,用于检测和纠正数据传输过程中可能出现的错误。

HDLC协议下的帧有三种类型:

信息帧I-Frame,监视帧S-Frame,未知帧U-Frame。在标头的控制字段有专门的比特用于标识帧的类型。

信息帧携带信息;监视帧在错误控制和流量控制中有一定的作用;未知帧用于进行一些杂项活动。

HDLC协议帧错误和解决、

HDLC的帧格式规定以01111110(十六进制7E)的位组合作为它的起始和结束的标志,这种位组合也被称为帧界定符。 在HDLC的帧格式中,在起始标志后的是地址字段和控制字段,然后是长度在0到5000八位位组(octet)的数据字段和帧检验序列字段(FSC),最后是作为结束标志的帧界定符

如果数据部分中也出现了01111110序列,那么就会出现帧错误!!!解决方法是零比特填充!!!发送方没遇到连续五个1就在后面添加一个0,接收方每遇到连续五个1就去掉后面的0,这是由硬件实现的。

假设一个数据部分是 01010111111001
加上帧头帧尾变成 01111110(帧头) 01010111111001 01111110(帧尾)
上述帧接收方接收会出现错误,提前出现了帧尾!!!
使用零比特填充 01111110(帧头) 01010111110(添加的0)1001 01111110(帧尾)

BISYNC协议

BISYNC协议也是由IBM公司开发的数据链路层协议之一,是用来处理字符帧的方法。它遵守哨兵方法,意味着守护行为将会存在。

SYN(synchronize):SYN是特殊的字符,两个连续的八位SYN字符标识帧的开始。

SOH(start of header):这八位用于标识帧头的开始。

Header:标识帧头

STX(start of text):这八位用于标识payload的开始

body:也就是payload

ETX(end of test):标识payload结束

CRC:循环冗余校验吗,用于差错检测

特别注意没有标识帧尾的特殊字段!!!

帧从左边开始发送,从特殊的字符SYN开始。数据部分包含着特殊字符STX和ETX之间,由两个字段保护。

该协议也存在着body部分出现两个SYN字符或者出现STX字符,ETX字符的可能。解决方法是字符填充。使用BISYNC协议中的DLE(Date Link Escape)数据连接转义来解决的。

PPP协议、

PPP协议在广域网(WAN)连接中被广泛使用,例如拨号上网、DSL连接和专线接入等。它是一种通用的协议,可以适用于各种网络环境和链路类型。两个路由器之间广泛使用PPP协议。该协议主要用于高负载,速度快的宽带通信中,显然互联网就是这样的;还有它也用于在两台直接相连接的计算机之间传输多协议数据,还有点对点设备。

Flag:标识帧的开始和结束,规定为0111110的八位。

Address:地址字段的作用是指定了帧的目标地址。在PPP协议中,该字段通常被设置为默认值“11111111”,即广播地址。

Control:这是一个字节的信息并且设定了常数值为11000000

Protocol:可以是一个或者两个字节的信息,定义了有效载荷中包含的数据类型。作用是指示数据帧中封装的上层协议类型。它用于标识数据帧中携带的网络层协议(如IP协议、IPX协议等)或者PPP控制协议(如LCP、NCP等)。

Payload:封装的数据包,可变长度。

Checksum:作用是用于数据的完整性校验。它用来检测数据帧在传输过程中是否发生了错误或数据损坏。

还有一个问题,也就是flag可能会出现在payload中,导致帧错误,解决方法如同HDLC协议一样,通过零比特填充;也可以使用字符填充的方法,同BISYNC一样。

DDCMP协议、

DDCMP协议类似于BISYNC协议,有着同样的两个SYN标识帧的开始,但是多了一个特殊的字段count。

Class:标识body中数据包上层协议的信息。

Count:标识帧中有多少个字节。

这个count字段很危险,因为如果在传输中这个字段出现了错误,将会出现严重的帧错误!!!

假如有三个帧,从右往左,三个帧大小分别为5,4,6个字节。

假设4传输错误变成了7,这样就出现了帧错误。