计算机网络——数据链路层

1. 概述

在这里插入图片描述
我们首先来看看数据链路层在网络体系中的地位,如上图所示,主机H1给主机H2发送数据,中间要经过三个路由器和电话网,局域网以及广域网等多种网络。从五层协议原理体系结构的角度来看,主机应具有体系结构中的各个层次,而路由器只需具有体系结构中的下面三层,各设备通过物理层下面的传输媒体进行互连。当主机H1发送数据时,数据的流动如上图箭头所示,主机H1将待发送的数据逐层封装后,通过物理层将构成数据包的各比特转化为电信号发送到传输媒体,数据包进入路由器后,由下往上逐层解封到网络层,路由器根据数据包中的目的网络地址和自身转发表确定数据包的转发端口,然后从网络层向下逐层封装数据包,并通过物理层将数据包发送到传输媒体,数据包最终到达主机H2时,还要由下往上逐层解封,最终解封出主机H1所发送的数据。
在这里插入图片描述

而在本篇文章中,我们可以只关心数据链路层,而不考虑网络体系结构中的其他各层,也就是说,我们可以想象数据链路层从左向右沿水平方向传送。从数据链路层来看,主句H1到H2的通信可以看成是在4段不同的链路上的通信组成的。

下面看几个基本概念

链路(link):从一个结点到相邻结点的一段物理线路(有线或无线),而中间没有其他的交换结点,可见一条链路只是一条路径的一个组成部分。
数据链路 (data link):除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。

在这里插入图片描述

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

2. 三个基本问题

在这里插入图片描述
数据链路层在进行通信时,一般会有下面的几个步骤:

  1. 结点A的数据链路层把网络层交下来的IP数据报添加首部和尾部封装成帧
  2. 结点A把封装好的帧发送到结点B的数据链路层
  3. 若节点B的数据链路层收到的帧无差错,则从收到的帧中提取出IP数据报交给上层的网络层,否则丢弃该帧。

2.1 封装成帧

在这里插入图片描述

上图所示,网络层的IP数据报传送到数据链路层,成为帧的数据部分,同时在帧的数据部分的前面和后面分别添加上首部和尾部,构成一个完整的帧,这就是数据链路层的数据传送单元。
在这里插入图片描述

为了接收方的数据链路层能够从物理层交付的比特流中提取出一个个的帧,首部和尾部的一个重要作用就是进行帧定界(即确定帧的界限)。同时需要注意的是,并不是每一种数据链路层协议的帧都包含帧定界标志,如后面会介绍的以太网V2的MAC帧格式。

2.2 透明传输

透明传输是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样,换句话说就是无论发送什么样的比特组合的数据,这些数据都能够按照原样没有差错地通过这个数据链路层。
考虑下面的情况,如果在上层交付的协议数据单元中,恰好也包含这个特定数值,那么接收方会错误地“找到帧的边界”,导致错误。
在这里插入图片描述

为了解决这个问题,就必须想办法使数据中可能出现的控制字符在接收端不被解释为控制字符,具体做法是:发送端的数据链路层在数据中出现控制字符的前面插入一个转义字符"ESC"(其16进制编码为1B,二进制是00011011),而在接收端的数据链路层在把数据送往网络层之前删除这个插入的转义字符,这种方法称为字符填充(byte stuffing)或字符填充(character stuffing)。
在这里插入图片描述
从上图也可以看出,如果转义字符也出现在数据中,那么解决方法仍然是在转义字符的前面插入一个转义字符。

2.3 差错检测

在这里插入图片描述
比特在传输过程中可能会产生差错:1变成0,0变成1,这叫做比特差错。在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率 BER (Bit Error Rate)。
在计算机网络传输数据时,必须采用各种差错检测措施,目前在数据链路层广泛使用的循环冗余检验CRC(Cyclic Redundancy Check)。

2.3.1 循环冗余检验

2.3.1.1 原理

在这里插入图片描述

  1. 在发送端,先把数据划分为组。假定每组 k 个比特。
  2. CRC 运算在每组 M 后面再添加供差错检测用的 n 位冗余码,然后构成一个帧发送出去。一共发送 (k + n) 位。
2.3.1.2 计算

1.

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

这种为了进行检错而添加的冗余码常称为帧检验序列 FCS (Frame Check Sequence)。

具体计算过程如下:
在这里插入图片描述

2.3.1.3 注意

在数据链路层使用 CRC 检验,能够实现无比特差错的传输,但这还不是可靠传输。

3. 点对点信道

3.1 PPP协议

对于点对点的链路,目前使用得最广泛的数据链路层协议是点对点协议 PPP (Point-to-Point Protocol)。在这里插入图片描述
对于我们这些普通用户,通常都需要连接某个ISP才能接入互联网。PPP协议就是用户计算机和ISP进行通信时所需要的数据链路层协议。
PPP协议能够支持多种类型链路,比如1999年公布的在以太网上运行的PPP,即PPP over Ethernet,简称PPPoE,它是为宽带上网的主机使用的链路层协议。
在这里插入图片描述
在这里插入图片描述

假设你家是FTTH(光纤入户),ISP(电信移动之类的)会给你一个用户名和密码,登录之后才能访问互联网。如上图(了解一下就行了),当你在计算机上输入用户名和密码后,会根据你输入的内容生成PPP帧,然后再将PPP帧封装在以太网帧中发出,认证服务器收到消息,从以太网帧中取出PPP帧,最后获取到你输入的用户名和密码,进行身份的验证。

3.1.1 组成

  1. 一个将 IP 数据报封装到串行链路的方法。

  2. 一个用来建立、配置和测试数据链路连接的链路控制协议 LCP (Link Control Protocol)。

  3. 一套网络控制协议 NCP (Network Control Protocol)。其中的每一个协议支持不同的网络层协议,如IP,DECnet,AppleTalk等。

3.1.2 帧格式

在这里插入图片描述

3.1.2.1 透明传输

先补充两个概念
在这里插入图片描述

  • 异步传输(Asynchronous Transmission)以字符为单位传输数据,发送端和接收端具有相互独立的时钟(频率相差不能太多),并且两者中任一方都不向对方提供时钟同步信号。
    在这里插入图片描述
  • 同步传输(Synchronous Transmission Mode)以数据帧为单位传输数据,可采用字符形式或位组合形式的帧同步信号,在短距离的高速传输中,该时钟信号可由专门的时钟线路传输,由发送端或接收端提供专用于同步的时钟信号。计算机网络采用同步传输方式时,常将时钟同步信号(前同步码)植入数据信号帧中,以实现接收端与发送端的时钟同步。
字节填充

在这里插入图片描述
当 PPP 用在异步传输时,使用字节填充法,其中转义字符定义为0X7D(即01111101),具体规则如下:

  • 把信息字段中出现的每一个0x7E字节转变成为2字节序列(0x7D,0x5E)。
  • 若信息字段中出现一个0x7D的字节(即出现了和转义字符一样的比特组合),则把0x7D转变成为2字节序列(0x7D,0x5D)
  • 若信息字段中出现ASCII码的控制字符(即数值小于0x20的字符),则在该字符前面要加入一个0x7D字符,同时将该字符的编码加以改变。例如,出现0x03(在控制字符中是“传输结束”ETX)就要把他转变为2字节序列(0x7D,0x23)。
零比特填充

在这里插入图片描述

在同步传输的链路上,数据传输以帧为单位,PPP协议采用零比特填充方法来实现透明传输。大家把PPP协议帧界定符0x7E写成二进制01111110,也就是可以看到中间有连续的6个1,只要想办法在数据部分不要出现连续的6个1,就肯定不会出现这界定符。具体办法就是“零比特填充法”。

3.1.2.2 差错检测

在这里插入图片描述

3.1.3 工作状态

PPP 链路初始化过程:

  1. 用户拨号接入 ISP 后,就建立了一条从用户个人电脑到 ISP 的物理连接。
  2. 用户个人电脑向 ISP 发送一系列的链路控制协议 LCP 分组(封装成多个 PPP 帧),以便建立LCP连接。
  3. 之后进行网络层配置。网络控制协议 NCP 给新接入的用户个人电脑分配一个临时的 IP 地址。
  4. 当用户通信完毕时,NCP 释放网络层连接,收回原来分配出去的IP地址。LCP 释放数据链路层连接。最后释放的是物理层的连接。
    在这里插入图片描述

4. 广播信道

广播通道可以进行一对多的通信,下面讨论的局域网使用的就是广播通道。局域网最主要的特点:网络为一个单位所拥有,地理范围和站点数目均有限。 最初的局域网一般使用同轴电缆进行组网,各站直接连在总线上,称为总线网,如下图,其中以传统以太网最为著名,由于以太网在局域网市场中占据了绝对优势,现在以太网几乎成为局域网的同义词,因此下面都是讨论以太网技术。
在这里插入图片描述
在这里插入图片描述
若多个设备在共享的广播信道上同时发送数据,则会造成彼此干扰,导致发送失败,如上图。目前在技术上有两种解决方案:

  • 静态划分信道:主要包括频分复用,时分复用,波分复用,码分复用,用户只要分配到了信道就不会与其他用户发生冲突,但这种方式代价比较高,不适合局域网使用。
  • 动态媒体接入控制(多点接入):
    1. 随机接入:所有的用户可随机地发送信息,但如果恰巧有两个或更多的用户在同一时刻发送信息,那么在共享媒体上就要发生碰撞,使得这些用户的发送都失败。当然也有相应的解决碰撞的网络协议,如CSMA/CD协议,这也是以前广泛使用的。
    2. 受控使用:用户不能随机地发送信息而必须服从一定的控制。这种在目前的局域网中使用的较少。

4.1 以太网

4.1.1 概述

传统以太网传输媒体最初是使用粗同轴电缆,后来演进到使用比较便宜的细同轴电缆,然后发展为使用更便宜和更灵活的双绞线。这种以太网采用星型拓扑,在星行的中心用集线器(hub)进行连接。
在这里插入图片描述

4.1.2 集线器

  1. 从表面上看,使用集线器的局域网在物理上是一个星行网,但由于集线器使用电子器件来模拟实际电缆线的工作,因此使用集线器的以太网在逻辑上仍是一个总线网,各站共享逻辑上的总线,使用的还是CSMA/CD协议,网站中的各占必须竞争对传输媒体的控制,并且在同一时刻至多只允许一个站发送数据。
  2. 一个集线器有许多接口,例如8至16个,每个接口通过RJ-45插头用双绞线与一台计算机上的适配器相连。因此,一个集线器很像一个多接口的转发器。
  3. 集线器工作在物理层,它的每个接口仅仅简单地转发比特——收到1转发1,收到0转发0,不进行碰撞检测。若两个接口同时有信号输入,那么所有的接口都收不到正确的帧。

在这里插入图片描述

使用集线器可以在物理层拓展以太网,我们来举例说明,假设某学院下设三个系部,每个系部都有一个使用集线器作为互连设备的以太网,这三个以太网相互独立,各自共享自己的总线资源,是三个独立的碰撞域。例如一系中的某台主机给另一台主机发送数据帧,由于总线特性,表示该数据帧的信号会传输到一系中的其他个主机;二系中的多台主机同时发送数据帧,由于总线特性,这必然会产生信号碰撞,碰撞后的信号会传输到二系中的各主机。为了使各系部中的以太网能够相互通信,可再使用一个集线器将它们互连起来。,这样,原来三个独立的以太网,就互连成为了一个更大的以太网,而原来三个独立的碰撞域,就合并成了一个更大的碰撞域。例如,当一系中的某台主机给二系中的某台主机发送数据帧,由于总线特性,表示该数据帧的信号会传输到整个网络中的其它各主机。

4.1.3 交换机

后来发展出了更先进的网络互连设备——以太网交换机,它也是目前使用最广泛的互连设备。我们先从一个典型的例子来看看以太网交换机和集线器的区别
在这里插入图片描述
假设使用集线器互连而成的共享总线式以太网上的主机1要给主机3发送单播帧,该单播帧会通过共享总线传播到总线上的其他各个主机。使用交换机互连而成的交换式以太网上的主机1要给主机3发送单播帧,该单播帧进入交换机后,交换机会将该单播帧转发给目的主机,而不是网络中的各个主机。

总结起来,有以下特点:

  1. 以太网交换机通常由多个接口,每个接口都可以直接与一台主机或另一个以太网交换机相连。一般都工作在全双工方式。
  2. 以太网交换机具有并行性,能同时连接多对接口,使多对主机能同时通信,无碰撞(不使用CSMA/CD协议)
  3. 以太网交换机一般都具有多种速率的接口,例如:10Mb/s,100Mb/s,1Gb/s接口的多种组合。
  4. 以太网交换机工作在数据链路层(也包括物理层),它收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧。
  5. 以太网交换机内部的转交换表(又称为地址表)是通过自学习算法自动地逐渐建立起来的。
  6. 有时为了增加网络的可靠性,在使用以太网交换机组网时,往往会增加一些冗余的链路,在这种情况下,子学习的过程可能会导致以太网帧在网络的某个环路中无限制地兜圈。为了解决这个问题,制定了一个生成树协议STP(Spanning Tree Protocol),其主要是不改变网络的实际拓扑,但在逻辑上切除某些链路,使得从一台主机到所有其他主机的路径是五环路的树状结构,从而消除了兜圈子现象。
4.1.3.1 转发过程

假定以太网交换机有4个接口,各连接一台计算机,其MAC地址分别是A,B,C,D。一开始,以太网交换机里卖弄的交换表都是空的。
在这里插入图片描述
A 先向 B 发送一帧。该帧从接口 1 进入到交换机。交换机收到帧后,先查找交换表。没有查到应从哪个接口转发这个帧给 B。交换机把这个帧的源地址 A 和接口 1 写入交换表中。交换机向除接口 1 以外的所有的接口广播这个帧。
在这里插入图片描述
由于与该帧的目的地址不相符,C 和 D 将丢弃该帧。
在这里插入图片描述
B 向 A 发送一帧。该帧从接口 3 进入到交换机。交换机收到帧后,先查找交换表。发现交换表中的 MAC 地址有 A,表明要发送给 A 的帧应从接口 1 转发出去。于是就把这个帧传送到接口 1 转发给 A。交换机把这个帧的源地址 B 和接口 3 写入交换表中。
在这里插入图片描述
考虑到可能有时要在交换机的接口更换主机,或者主机要更换其网络适配器,这就需要更改交换表中的项目。为此,在交换表中每个项目都设有一定的有效时间。过期的项目就自动被删除。

在这里插入图片描述

4.1.4 适配器

在这里插入图片描述
计算机与外界局域网的连接是通过主机箱内插入的一块网络设配器(又称网络接口卡,简称网卡)实现的。网卡上装有处理器与存储器,是工作在链路层和物理层的网络组件,是局域网中连接计算机和传输介质的接口,不仅能实现与局域网传输介质之间的物理连接和电信号匹配,还涉及帧的发送与接收、帧的封装与拆封、帧的差错校验、介质访问控制(以太网使用CSMA/CD协议)、数据的编码与解码以及数据缓存的功能等。
在这里插入图片描述

4.1.5 MAC层

  • 在广播信道实现点到点通信,这就需要网络中的每个网卡有一个地址,这个地址称为物理地址或MAC地址(因为这种地址用在MAC帧中),IEEE802标准为局域网规定了一种48位的全球地址。
  • 这种6字节的MAC地址已被固化在网卡的ROM中。因此,MAC地址也叫作硬件地址(hardware address)或物理地址。当这块网卡插入(或嵌入)到某台计算机后,网卡上的MAC地址就成为这台计算机的MAC地址了。
  • 网卡有过滤功能,适配器从网络上每收到一个MAC帧就先用硬件检查MAC帧中的目的地址。如果是发往本站的帧则收下,然后再进行其他的处理。否则就将此帧丢弃,不再进行其他的处理。这样做就不浪费主机的处理机和内存资源。这里“发往本站的帧”包括以下三种帧:
    • 单播(unicast)帧(一对一),即收到的帧的MAC地址与本站的硬件地址相同。
    • 广播(broadcast)帧(一对全体),即发送给本局域网上所有站点的帧(全1地址)。
    • 多播(multicast)帧(一对多),即发送给本局域网上一部分站点的帧。
4.1.5.1 MAC地址

在这里插入图片描述

  • IEEE 注册管理机构 RA 负责向厂家分配前 3 个字节 (即高 24 位),称为组织唯一标识符 OUI (Organizationally Unique Identifier)。
  • 厂家自行指派后 3 个字节 (即低 24 位),称为扩展标识符 (extended identifier)。
  • 必须保证生产出的适配器没有重复地址。
  • 地址被固化在适配器的 ROM 中。
  • 广播地址:所有 48 位都为 1(全 1)。只能作为目的地址使用。
4.1.5.2 MAC帧的格式

常用的以太网 MAC 帧格式有 2 种标准:

  • DIX Ethernet V2 标准
  • IEEE 的 802.3 标准

最常用的 MAC 帧是以太网 V2 的格式,下面介绍一下这一种。
在这里插入图片描述

  • 前导码:由硬件在帧的前面插入 8 字节。第一个字段共 7 个字节,是前同步码,用来迅速实现 MAC 帧的比特同步。第二个字段 1 个字节是帧开始定界符,表示后面的信息就是 MAC 帧。 MAC帧并不需要帧结束符,因为以太网在传输帧时,各帧之间必须有一定的间隙。因此,接收端只要找到帧开始定界符,其后面连续到达的布特六就都属于同一个MAC帧。
  • 类型:指出数据与中携带的数据应交给哪个协议实体处理。若类型字段的值为0x8000,则表示上层使用的是IP数据报。
  • FCS:校验码,校验范围从目的地址到数据段的尾部。
  • 40
    点赞
  • 197
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 26
    评论
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马走日mazouri

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值