第3章 数据链路层

数据链路层把网络层交下来的数据(IP数据报)添加首部和尾部封装成帧发送到链路上,接收端把接收到的帧的数据部分取出并上交给网络层。

计算机网络数据链路层习题(计算机软件水平考试网络工程师-第3章)(1)

图3.1 数据链路层传送的是帧

3.1 数据链路层的三个基本问题3.1.1 封装成帧

封装成帧就是在将网络层的IP数据报的前后分别添加首部和尾部,这样就构成了一个帧。不同的数据链路层协议的帧首部和尾部包含的信息有明确的规定,帧的首部和尾部有帧开始符和帧结束符,称为帧定界符。接收端收到物理层传过来的数字信号读取到帧开始字符一直到帧结束字符,就认为接收到了一个完整的帧。

在数据传输中出现差错时,帧定界符的作用更加明显。如果发送端在尚未发送完一个帧时突然出现故障,中断发送,接收端收到了只有帧开始符没有帧结束符的帧,就认为是一个不完整的帧,必须丢弃。

计算机网络数据链路层习题(计算机软件水平考试网络工程师-第3章)(2)

图3.2 帧首部和帧尾部封装成帧

为了提高数据链路层传输效率,应当使帧的数据部分尽可能大于首部和尾部的长度。每一种数据链路层协议都规定了所能够传送的帧的数据部分长度的上限,即最大传输单元MTU,以太网的MTU为1500个字节(MTU≤1500字节)。

3.1.2 透明传输

通常我们用ACSII字符代码表中的非打印控制字符SOH作为帧开始定界符EOT作为帧结束定界符。

当传输的帧的数据部分中出现了和帧结束定界符“EOT”一样的代码时,接收端会误认为这就是帧的结束符,会误认为已经接收到了一个完整的帧,而后面的部分就被丢弃了。

计算机网络数据链路层习题(计算机软件水平考试网络工程师-第3章)(3)

图3.3 帧的数据部分出现了EOT

如何判断帧中的“EOT”、“SOH”是数据部分还是帧定界符呢?字节填充法

(1)在数据部分出现“EOT”、“SOH”的前面插入转义字符“ESC”

(2)接收端收到后会去掉“ESC”,并认为“ESC”后面的字符为数据

(3)如果数据部分也出现了“ESC”,同样的在数据部分的“ESC”的前面也插入一个“ESC”,在接收端收到后会去掉“ESC”,并认为“ESC”后面的字符“ESC”为数据。

计算机网络数据链路层习题(计算机软件水平考试网络工程师-第3章)(4)

图3.4 字节填充法

发送端在发送帧之前在原始数据中必要位置插入转义字符,接收端收到后去掉转义字符,得到原始数据,中间插入转义字符是要让传输的原始数据原封不动地发送到接收端,这个过程称为“透明传输”。

3.1.3 差错检验

比特在传输过程中可能会产生差错:1可能会变成0,0可能会变成1。为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检验措施。

1. 循环冗余检验 CRC

有线线路上的错误率非常低,所以对于偶然的错误,利用错误检测和重传机制更为有效。数据链路层广泛使用循环冗余检验 CRC 的差错检错技术。

误码率(BER):接收到的错误码元数在总传送码元数中所占的比例。例如误码率为10-10时,表示平均每传送1010个比特就会出现一个比特的差错。

误码率=错误码元数/码元总数

要想让接收端能够判断帧在传输过程中是否出现差错,需要在传输的帧中包含用于检测错误的信息,这部分信息称为帧校验序列FCS

使用CRC编码,需要先商定一个生成多项式G(x),生成多项式的最高位和最低位必须是1。假设原始信息有m位,则对应多项式M(x)。生成校验码思想就是在原始信息位后追加若干校验位,使得追加的信息能被G(x)整除。接收方接收到带校验位的信息,然后用G(x)整除。余数为0,则没有错误,反之则发生错误。

(1)生成CRC校验码

使用帧的数据部分和数据链路层首部合起来的数据(M=101001)来计算n位帧校验序列FCS,放到帧的尾部,那么校验序列如何算出来呢?

计算机网络数据链路层习题(计算机软件水平考试网络工程师-第3章)(5)

图3.5 计算FCS

计算机网络数据链路层习题(计算机软件水平考试网络工程师-第3章)(6)

得到的余数就作为帧校验序列FCS,由于最高阶码为3,那么帧校验序列FCS应该为3位,得到的余数为1,不足3位,应在3的左边添加2个“0”得到001。

所以本题的CRC校验码就是001。

计算出的帧校验序列FCS=001和要发送的数据M=101001一起发送到接收端。 即:101001 001

计算机网络数据链路层习题(计算机软件水平考试网络工程师-第3章)(7)

图3.6 通过CRC计算得出的FCS

(2)CRC校验

接收端将收到的二进制数101001001去除以生成多项式对应的二进制字符串1101,如果余数为0,则断定该帧没有差错,就接收;如果余数不等于0,则断定该帧有差错(但无法确定是哪一位或哪几位出现了差错,同时也不能纠错),就丢弃。

2.海明码

海明研究了用冗余数据位来检测和纠正代码差错的理论和方法。按照海明的理论,可以在数据位代码上添加若干冗余位组成码字。码字之间的海明距离是一个码字要变成另一个码字时必须要改变的最小位数。

例如:10101和00110从第一位开始有3位不同,则海明距离为3。

10101和00110进行异或运算,并计算出异或运算结果中1的个数即为码距

计算机网络数据链路层习题(计算机软件水平考试网络工程师-第3章)(8)

结果10011中1的个数为3,所以它们的码距为3

海明码是一种多重奇偶检错系统,它具有检错和纠错的功能。为确保纠错和检错,码距必须大于或大于3。

对于m位的数据位增加k位的冗余位,则组成n=m k位的纠错码

对于2m个有效码字中的每一个,都有n个无效但可以纠错的码字。

计算机网络数据链路层习题(计算机软件水平考试网络工程师-第3章)(9)

m为信息位的个数,k为校验位的个数

3.2 点到点信道的数据链路

点到点信道是指一个链路上就一个发送端和一个接收端的信道,通常用在广域网链路。

计算机网络数据链路层习题(计算机软件水平考试网络工程师-第3章)(10)

图3.7 点到点链路

3.2.1 PPP协议的特点

PPP协议提供了一种在点到点链路上封装网络层协议信息的标准方法。现在全世界使用得最多的数据链路层协议是点对点协议 PPP (Point-to-Point Protocol)。它的优点在于简单、具备用户验证能力、可以解决IP分配等。用户使用拨号电话线接入因特网时,一般都是使用 PPP 协议。

点到点信道通常用在广域网链路。PPP协议(面向字节)和HDLC协议(面向比特)是目前应用最常用的广域网中的链路层协议。通信线路质量较差的年代:HDLC(高级数据链路控制)。

PPP协议只支持全双工链路,是面向字节的数据链路层协议。

计算机网络数据链路层习题(计算机软件水平考试网络工程师-第3章)(11)

图3.8 点到点链路

PPP协议的特点:

(1)简单:PPP协议不负责可靠传输、纠错和流量控制,也不需要给帧编号,接收端收到帧后,就进行CRC检验,如果CRC检验正确,就收下该帧,反之,直接丢弃,其他什么也不做。

(2)封装成帧:PPP协议必须规定特殊的字符作为帧定界符(每种数据链路层协议都有特定的帧定界符),以便使接收端能从收到的比特流中准确地找出帧的开始和结束位置。

(3)透明性:PPP协议必须保证数据传输的透明性。如果数据中恰好出现了和帧定界符一样的比特组合时,就要采取有效的措施来解决这个问题。字节填充法。

(4)差错检测:PPP协议必须能够对接收端接收到的帧进行检测,并立即丢弃有差错的帧。若在数据链路层不进行差错检测,那么已出现差错的无用帧就还会在网络中继续转发,这样一来会浪费掉很多网络资源。

(5)支持多种网络层协议:PPP协议必须能够在同一条物理链路上同时支持多种网络协议(如IP和IPv6等)的运行,这就意味着IP数据包和IPv6数据包都可以封装在PPP帧中进行传输。

(6)多种链路类型:PPP必须能够在多种类型的链路上运行,例如串行(一次只发送一个比特)或并行(一次并行的发送多个比特),同步的或异步,低速的或高速的,电的或光的,交换的(动态的)或非交换的(静态的)点对点链路。

(7)检测连接状态:PPP协议必须具有一种机制能够及时(不超过几分钟)自动检测出链路是否处于正常工作状态。当出现故障的链路隔了一段时间后又重新恢复正常工作时,就特别需要有这种及时检测功能。

(8)最大传送单元:PPP协议必须对每一种类型的点对点链路设置最大传送单元MTU的标准默认值。这样做是为了促进各实体之间的互操作性。如果高层协议发送的分组过长且超过MTU的数值,PPP就要丢弃这样的帧,并返回差错。需要强调的是,MTU是数据链路层的帧可以载荷的数据部分的最大程度,而不是帧的总长度。不超过1500字节

(9)网络层地址协商:PPP协议必须提供一种机制使通信的两个网络层(如两个IP层)的实体能够通过协商知道或配置彼此的网络层地址。使用ADSL调制解调器拨号访问Internet,ISP会给拨号的计算机分配一个公网地址,这就是PPP协议的功能。

(10)数据压缩协商:PPP协议必须提供一种方法来协商使用数据压缩算法,但PPP协议并不要求将数据压缩算法进行标准化。

3.2.2 PPP协议的组成

(1)高级数据链路控制协议

高级数据链路控制协议是将IP数据报封装到串行链路的方法。

(2)链路控制协议LCP

链路控制协议 LCP (Link Control Protocol)用来建立、配置和测试数据链路连接,通信的双方可协商一些选项。LCP主要负责建立和断开连接、设置最大接收单元(MRU,Maximum Receive Unit)、设置验证协议(PAP或CHAP)以及设置是否进行通信质量的监控。(身份验证、计费功能)

(3)网络控制协议NCP

网络控制协议 NCP (Network Control Protocol)中的每一个协议支持不同的网络层功能,如IP、IPv6等。负责IP地址设置以及是否进行TCP/IP首部压缩等设备(设备之间的这种交互也叫协商(Negotiation))。

计算机网络数据链路层习题(计算机软件水平考试网络工程师-第3章)(12)

图3.9 PPP协议的三个组成部分

通过PPP连接时,通常需要进行用户名密码的验证,并且对通信两端进行双方向的验证(通过ISP接入互联网时,一般对ISP端不验证)。其验证协议有两种,分别为PAP(Password Authentication Protocol)和CHAP(Challenge Handshake Authentication Protocol)。

PAP是PPP连接建立时,通过两次握手进行用户名和密码验证。其中密码以明文方式传输。因此一般用于安全要求并不很高的环境,否则会有窃听或盗用连接的危险。

CHAP则使用一次性密码OTP(One Time Password),可以有效防止窃听。此外,在建立连接后还可以进行定期的密码交换,用来检验对端是否中途被替换。

3.2.3 PPP 协议的工作状态

(1)当用户拨号接入 ISP 后,就建立了一条从用户个人电脑到ISP的物理连接。

(2)用户个人电脑向ISP发送一系列的链路控制协议LCP 分组(封装成多个 PPP 帧),以便建立LCP连接。

(3)这些分组及其响应选择了将要使用的一些 PPP 参数,接着还要进行网络层配置,网络控制协议NCP 给新接入的用户个人电脑分配一个临时的 IP 地址,使用户个人电脑成为互联网上的一个有IP地址的主机。

(4)通信完毕时,NCP 释放网络层连接,收回原来分配出去的 IP 地址。接着,LCP 释放数据链路层连接。最后释放的是物理层的连接。

3.2.4 PPP协议帧格式

计算机网络数据链路层习题(计算机软件水平考试网络工程师-第3章)(13)

图3.10 PPP帧格式

标志字段F = 0x7E:帧开始定界符1个字节。

注:符号“0x”表示后面的字符是用十六进制表示。十六进制7E 的二进制表示是 01111110。

地址字段A=0xFF固定值,1个字节。(由于是点对点通信,地址字段实际上不起作用。)

控制字段 C =0x03固定值,1个字节。

协议字段:用来表示“信息部分”里是什么内容,2个字节

当协议字段为 0x0021 时,PPP 帧的信息字段就是IP 数据报。

若为 0xC021, 则信息字段是 PPP 链路控制数据。

若为 0x8021,则表示这是网络控制数据。

FCS:帧校验序列,2个字节。

标志字段F = 0x7E:帧结束定界符1个字节。

PPP 是面向字节的,所有的 PPP 帧的长度都是整数字节。

3.2.5 PPP帧填充方式

当信息字段中出现和帧开始定界符和帧结束定界符一样的比特(0x7E)组合时,就必须采取一些措施使这种形式上和标志字段一样的比特组合不出现在信息字段中。

(1)异步传输使用字节填充

在异步传输的链路上,数据传输以字节为单位,PPP协议帧定界符定义为0x7E。

计算机网络数据链路层习题(计算机软件水平考试网络工程师-第3章)(14)

图3.11 PPP帧字节填充

发送方处理:

信息字段中出现的每一个7E(PPP帧定界符)字节转变成为 2 字节序列(7D,5E)。

信息字段中出现一个7D(转义字符)的字节, 则将其转变成为 2 字节序列(7D,5D)。

信息字段中出现 ASCII 码的控制字符(数值小于0x20的字符),则在该字符前面要加入一个7D 字节,同时将该字符的编码加上0x20。

接收方处理:

进行反变换即可恢复出原来的帧的数据部分。

例题:一个PPP帧的数据部分(用十六进制写出)是7D 5E FE 27 7D 5D 7D 5D 65 7D 5E,问真正的数据部分是什么?

7D 5E——7E

7D 5D——7D

7D 5E FE 27 7D 5D 7D 5D 65 7D 5E

所以真正的数据部分应该是:7E FE 27 7D 7D 65 7E

(2)同步传输使用零比特填充

在同步传输的链路上,数据传输以帧为单位,PPP协议帧定界符定义为0x7E,写为二进制为0111 1110,可以看到中间有6个连续的1,只要想办法在数据部分不要出现6个连续的1,就肯定不会出现这样的定界符。

零比特填充法:

在发送端,只要发现有5个连续1,则立即填入一个0。这样就可以保证信息字段中不会出现有连续的6个1。

接收端对帧中的比特流进行扫描。每当发现5个连续1时,就把这5个连续1后的一个0删除,以还原成原来的信息比特流。

计算机网络数据链路层习题(计算机软件水平考试网络工程师-第3章)(15)

图3.12 PPP帧零比特填充

(未完待续)

,