三、 数据链路层

计算机网络体系结构
image

概述

基本概念

  • 结点:主机、路由器

  • 链路/物理链路 (link) 是一条无源的点到点的物理通路,中间没有任何其他的交换结点。
    是一条通路的一个组成部分。
    链路的传输介质主要有双绞线、光纤和微波。分为有线链路、无线链路。

  • 协议:为网络中的对等实体数据交换而建立的规则、标准或约定称为网络协议。
    早期的数据通信协议曾叫做通信规程 (procedure)。因此在数据链路层,规程和协议是同义语。

  • 数据链路/逻辑链路 (data link):网络中两个结点之间的逻辑通道,把实现控制数据传输协议硬件和软件加到链路上就构成数据链路
    现在最常用的方法是使用适配器(即网卡)来实现这些协议的硬件和软件。
    一般的适配器都包括了数据链路层和物理层这两层的功能。

  • 数据链路层传送的协议数据单元,封装网络层数据报。
    也就是说:数据链路层传送的所有内容的基本组成都是帧,
    双方通信就像是沿着两个数据链路层之间的水平方向把帧直接发送到对方。
    image

数据链路层功能概述
数据链路层在物理层提供服务的基础上向网络层提供服务,
最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。
主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造成为逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路。
(物理层自己不知道自己传输的信号有什么意义。”链接层”的功能就是规定信号的解读方式:多少个电信号算一组?每个信号位有何意义?)

具体有以下功能:

  1. 为网络层提供服务。
    (无确认无连接服务\有确认无连接服务\有确认面向连接服务)。 有连接一定有确认!
  2. 链路管理:即连接的建立、维持、释放(用于面向连接的服务)。
  3. 封装成帧
  4. 流量控制(限制发送方~)
  5. 差错控制(帧错/位错)

数据链路层的作用:相邻节点之间传输数据帧
image

因此

  • 网络中:主机、路由器等都必须实现数据链路层
  • 局域网:主机、交换机等都必须实现数据链路层

理解: 使主机 H1 向 H2 发送数据,从数据链路层观察帧的流动:

  • R1 认为 H1 发送数据
  • R2 认为 R1 发送数据
  • R3 认为 R2 发送数据
  • H2 认为 R3 发送数据
    image

注意:

  • 仅能从数据链路层观察帧的流动
  • 不同的链路层可能采用不同的数据链路层协议
  • 数据链路层不必考虑物理层如何实现比特传输的细节。

三个基本问题

根据数据链路层的功能和作用,数据链路层协议需要解决以下三个基本问题:

  1. 封装成帧
  2. 透明传输
  3. 差错控制

(数据链路层协议有许多种,但这三个基本问题则是共同的)

封装成帧

封装成帧 (framing) 就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。

首部和尾部的作用
进行帧定界。

image

问题: 当数据是由可打印的 ASCII 码组成的文本文件时,无法判断帧边界。

解决方法:用特殊的帧定界符(控制字符)进行帧定界
例如:
控制字符 SOH (Start Of Header) 放在一帧的最前面,表示帧的首部开始。另一个控制字符 EOT (End Of Transmission) 表示帧的结束。
image

透明传输

透明 指某一个实际存在的事物看起来却好像不存在一样。

在数据链路层透明传送数据: 表示无论发送什么样的比特组合的数据,这些数据都能够按照原样没有差错地通过这个数据链路层。

问题: 如果数据中的某个字节的二进制代码恰好和 SOH 或 EOT 一样,数据链路层就会错误地“找到帧的边界”。
image

解决方法: 字节填充 (byte stuffing) 或字符填充 (character stuffing)。

例如:
发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”(其十六进制编码是1B)。
接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。
如果转义字符也出现在数据当中,那么应在转义字符前面插入一个转义字符 ESC。当接收端收到连续的两个转义字符时,就删除其中前面的一个。
image

差错控制

由于物理层的特性,在传输过程中可能会产生比特差错:1 可能会变成 0, 而 0 也可能变成 1。
image

为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。

为什么要在数据链路层进行差错控制?
因为错误可以尽早发现,不会让一个错误的数据包发送了很长时间到达最终目的地之后才被发现,从而导致网络资源的浪费

在数据链路层传送的帧中,广泛使用了循环冗余检验 CRC 的检错技术。

引入一个新概念来描述差错的程度:误码率 BER (Bit Error Rate):在一段时间内,传输错误的比特占所传输比特总数的比率。
误码率与信噪比有很大的关系。

循环冗余检验 CRC

循环冗余检验的原理
发送方和接收方协商一个n+1比特的生成多项式(P),要起其最高比特位为1。
发送方通过k比特的数据后附加n比特,使得整个(k+n)比特的值能够被P整除。
接收方用P去除(k+n)比特,如果余数非0,则出现差错
image

附加的冗余的n比特的数据称为冗余码,这里的冗余码也称为帧检验序列 FCS (Frame Check Sequence)

冗余码的具体计算过程:

  1. \(m\) 后面添加 n 个 0(计算机中:用二进制的模 2 运算进行 \(2^n\)\(m\) 的运算),得到的 (k + n) 位的数M。
  2. \(M\)除以事先选定好的长度为 (n + 1) 位的除数 \(P\),得出 \(商Q\)\(余数R\)。(余数 R 比除数 P 少 1 位,即 R 是 n 位。)
  3. 将余数 \(R\) 作为冗余码拼接在数据 \(m\) 后面,一起发送出去。

例: 已知 k = 6, M = 101001; n = 3, 除数 P = 1101,求FCS:
被除数是 \(2^nM\) = 101001000
101001000除以1101的结果是:商 Q = 110101,余数 R = 001。
把余数 R 作为冗余码添加在数据 M 的后面发送出去。发送的数据是:\(2^nM + R\),即:101001001,共 (k + n) 位。
image

注意:

  • CRC检测方法并不能确定究竟是哪一个或哪几个比特出现了差错。

  • 在数据链路层仅仅使用循环冗余检验CRC差错检测技术,只能做到对帧的无差错接收,即“凡是接收端数据链路层接受的帧,我们都能以非常接近于1的概率认为这些帧在传输过程中没有产生差错”。
    接收端丢弃的帧虽然曾收到了,但是最终还是因为有差错被丢弃。“凡是接收端数据链路层接收的帧均无差错”。

  • 链路层使用CRC检验,能够实现无比特差错的传输,但这还不是可靠传输。
    “可靠传输”:数据链路层发送端发送什么,接收端就收到什么。

局域网与广域网

数据链路层使用的信道分类

  1. 点对点信道
    这种信道使用一对一的点对点通信方式。

  2. 广播信道
    使用一对多的广播通信方式。
    因此必须使用专用的共享信道协议来协调这些主机的数据发送。

传输数据使用的两种链路:

  1. 点对点链路:两个相邻节点通过一个链路相连,没有第三者。
    应用:PPP协议,常用于广域网

  2. 广播式链路:所有主机共享通信介质。
    应用:早期的总线以太网、无线局域网,常用于局域网
    典型拓扑结构:总线型,星型(逻辑总线型)

局域网LAN(Local Area Network)
是指在某一区域内由多台计算机互联成的计算机组,使用广播信道

局域网(LAN)

局域网LAN(Local Area Network)是指:由两个或两个以上相连的计算机组成,通常包含在较小地理区域内的网络。

特点: 网络为一个单位所拥有;地理范围和站点数目均有限。

优点:

  1. 具有广播功能,从一个站点可很方便地访问全网。局域网上的主机可共享连接在局域网上的各种硬件和软件资源。
  2. 便于系统的扩展和逐渐地演变,各设备的位置可灵活调整和改变。
  3. 提高了系统的可靠性、可用性和残存性。

决定局域网的主要要素为:网络拓扑,传输介质 与 介质访问控制方法。

拓扑结构
image

广域网

广域网(WAN,Wide Area Network),通常跨接很大的物理范围,所覆盖的范围从几十公里到几千公里,它 能连接多个城市或国家,或横跨几个洲并能提供远距离通信,形成国际性的远程网络。
广域网的通信子网主要使用分组交换技术。广域网的通信网可以利用公用分组交换网、卫星通信网和无线分组交换网,它将分布在不同地区的局域网或计算机系统互连起来,达到资源共享的目的。

image
注:

  • 广域网中最常用的协议是PPP协议
  • 因特网(Internet)是世界范围内最大的广域网。

PPP协议(点对点)

点对点协议 PPP (Point-to-Point Protocol)
广域网中最常用的协议是PPP协议,
对于点对点的链路,目前使用得最广泛的数据链路层协议是PPP协议。
拨号基本都是PPP协议,PPP协议仅支持全双工链路

PPP 协议在 1994 年就已成为互联网的正式标准。

PPP 协议应满足的需求

  • 简单 —— (因此无需纠错、流量控制、序号)这是首要的要求。(因为因特网的主要功能在tcp协议)
  • 封装成帧 —— 必须规定特殊的字符作为帧定界符。
  • 透明性 —— 必须保证数据传输的透明性。
  • 多种网络层协议 —— 能够在同一条物理链路上同时支持多种网络层协议。
  • 多种类型链路 —— 能够在多种类型的链路上运行。
  • 差错检测 —— 能够对接收端收到的帧进行检测,并立即丢弃有差错的帧。
  • 检测连接状态 —— 自动检测出链路是否正常工作。
  • 最大传送单元 —— 必须对每一种类型的点对点链路设置最大传送单元 MTU 的标准默认值,促进各种实现之间的互操作性。
  • 网络层地址协商 —— 必须提供一种机制使通信的两个网络层实体能够通过协商知道或能够配置彼此的网络层地址。
  • 数据压缩协商 —— 必须提供一种方法来协商使用数据压缩算法。

PPP 协议不需要的功能

  • 纠错
  • 流量控制
  • 序号
  • 多点线路(只需要满足点对点即可)
  • 半双工或单工链路

根据PPP协议应满足的需求,协议组成部分如下:

  1. 一个将 IP 数据报封装到串行链路的方法。
  2. 链路控制协议 LCP (Link Control Protocol):建立并维护数据链路连接。身份验证
  3. 网络控制协议 NCP (Network Control Protocol):为网络层协议建立和配置逻辑连接。

PPP 协议的工作状态
image

  • 当用户拨号接入 ISP 时,路由器的调制解调器对拨号做出确认,并建立一条物理连接

  • PC 机向路由器发送一系列的 LCP 分组(封装成多个 PPP 帧)。

  • 这些分组及其响应选择一些 PPP 参数,并进行网络层配置,NCP 给新接入的 PC 机分配一个临时的 IP 地址,使 PC 机成为因特网上的一个主机。

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

可见,PPP 协议已不是纯粹的数据链路层的协议,它还包含了物理层和网络层的内容。

帧格式(封装成帧)

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

PPP 帧的首部和尾部分别为 4 个字段和 2 个字段。

  • 标志字段 F = 0x7E (符号“0x”表示后面的字符是用十六进制表示)。
  • 地址字段 A 只置为 0xFF(地址字段实际上并不起作用)。
  • 控制字段 C 通常置为 0x03。

协议字段:2 个字节,其值若为:

  • 0x0021,则信息字段就是 IP 数据报。
  • 0x8021,则信息字段是网络控制数据。
  • 0xC021,则信息字段是 PPP 链路控制数据。
  • 0xC023,则信息字段是鉴别数据。

透明传输

当 PPP 用在异步传输时,就使用一种特殊的字符填充法。
当 PPP 用在同步传输链路时,采用硬件来完成比特填充(和 HDLC 的做法一样)。

字符填充

当信息字段中出现 0x7E 字节 : \(\text{0x7E 字节} \to 2 \text{字节序列 (0x7D, 0x5E)}\)

当信息字段中出现 0x7D 字节 : \(\text{0x7D 字节} \to 2 \text{字节序列 (0x7D, 0x5D)}\)

当信息字段中出现 ASCII 码的控制字符(即数值小于 0x20 的字符):

  1. 在该字符前面要加入一个 0x7D 字节
  2. 改变该字符的编码

image

零比特填充

PPP 协议用在 SONET/SDH 链路时,使用同步传输(一连串的比特连续传送)。这时 PPP 协议采用零比特填充方法来实现透明传输。
在发送端,只要发现有 5 个连续 1,则立即填入一个 0。
接收端对帧中的比特流进行扫描。每当发现 5 个连续1时,就把这 5 个连续 1 后的一个 0 删除。
image

差错控制

通过 帧检验序列 FCS 字段 保证无差错接受

注意:PPP不提供使用序号和确认的可靠传输
原因:

  1. 在数据链路层出现差错的概率不大时,使用比较简单的 PPP 协议较为合理。
  2. 在因特网环境下,PPP 的信息字段放入的数据是 IP 数据报。数据链路层的可靠传输并不能够保证网络层的传输也是可靠的。
  3. 帧检验序列 FCS 字段可保证无差错接受。

广播信道

posted @ 2022-09-14 14:02  kingwzun  阅读(390)  评论(0编辑  收藏  举报