原创

TCP_IP分层模型之数据链路层

数据链路层是设备驱动程序与网络接口层面的模型,是为具体通信实体之间通信建立链路连接设计,是和具体的交换机,网线,网桥,中继器,光缆,路由器等电信设备打交道, 小编偏重学习软件,所以本章打算了解一下部分概念,会分为三个部分,分别为基本概念、数据链路层的三个基本问题、MAC 寻址。

OSI参考模型网络模型图
OSI参考模型网络模型图

1.数据链路层相关概念

1.1 数据链路层

数据链路层是物理层的上层,物理层是把电脑连接起来的物理手段,它主要规定了网络的一些电气属性,其作用是负责传送 0 和 1 的电信号。数据链路层位于物理层的上层,简单的阐述它的作用就是确定 0 和 1 的分组方式。

OSI参考模型各层作用
OSI参考模型各层作用

1.2 数据链路指的是什么

数据链路是指从发送端经过通信线路到接收端之间物理上的传送路径和逻辑上的传输信道的总称。在数据通信网中,按一种链路协议的技术要求连接两个或多个数据站的电信设施,称为数据链路,简称数据链。数据链路(data link) 除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。

通俗易懂的解释: 数据链路层就是由物理媒体,链路协议,和有关软件组成,主要功能是将源计算机网络层来的数据可靠的传输到相邻节点的目标计算机的网络层。

1.3 链路协议

是指建立、保持 和释放一个逻辑数据链路以及经由链路传送数据的一组规则。数据是要通过一定的物理媒体如电话线、微波或光缆传输的。

2.数据链路层的三个基本问题

2.1. 封装成帧

为了向网络层提供服务,数据链路层必须使用物理层提供的服务。而物理层我们知道,它是以比特流进行传输的,这种比特流并不保证在数据传输过程中没有错误,接收到的位数量可能少于、等于或者多于发送的位数量。而且它们还可能有不同的值,这时数据链路层为了能实现数据有效的差错控制,就采用了一种“帧”的数据块进行传输。而要采帧格式传输,就必须有相应的帧同步技术,这就是数据链路层的“成帧”(也称为“帧同步”)功能。

  • 封装成帧(framing):就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。
  • 分组交换的一个重要概念:就是所有在因特网上传送的数据都是以分组(即 IP 数据报)为传送单位。
  • 网络层的 IP 数据报传送到数据链路层就成为帧的数据部分。在帧的数据部分的前面和后面分别添加上首部和尾部,就构成了一个完整的帧。
  • 帧长等于数据部分长度加上帧首部和帧尾部的长度,而首部和尾部的一个重要作用就是进行帧定界(即确定帧的界限)。
  • 首部和尾部还包含许多必要的控制信息,在发送帧时,是从帧首部开始发送。
  • 各种数据链路层协议都要对帧首部和帧尾部的格式有明确的规定。
  • 为了提高帧的传输效率,应当使帧的数据部分长度尽可能大于首部和尾部的长度。但是,每一种链路层协议都规定了帧的数据部分的长度上限——最大传送单元 MTU(Maximum Transfer Unit)。

MTU 一般为 1500,该博客有讲解,可以参考 https://yq.aliyun.com/articles/222535

帧首部尾部
帧首部尾部

当数据是由可打印的 ASCII 码组成的文本文件时,帧定界可以使用特殊的帧定界符。 控制字符 SOH(Start Of Header)放在一帧的最前面,表示帧的首部开始。另一个控制字符 EOT(End Of Transmission)表示帧的结束。他们的十六进制编码分别是 01(二进制是 00000001)和 04(二进制是 00000100)。

帧定界
帧定界

采用帧传输方式的好处是,在发现有数据传送错误时,只需将有差错的帧再次传送,而不需要将全部数据的比特流进行重传,这就在传送效率上将大大提高。但随后很快又恢复正常,于是重新从头开始发送刚才未发送完的帧。由于使用了帧定界符,在接收端就知道前面收到的数据时个不完整的帧(只有首部 SOH,没有传输结束符 EOT),必须丢弃。而后面收到的数据有明显的帧定界符(SOH 和 EOT),因此这是一个完整的帧,应当收下。

2.2. 透明传输

在上面提到了在数据链路层实现透明传输和封装成帧时,使用到了转义字符。在假设没有使用转义字符的前提下我们来分析一下存在的问题: 由于帧的开始和结束的标记是使用专门指明的控制字符,因此,所传输的数据中的任何 8 比特的组合一定不允许和用作帧定界的控制字符的比特编码一样,否则就会出现帧定界的错误。 当传送的帧使用文本文件组成的帧时(文本文件中的字符都是从键盘上输入的),其数据部分显然不会出现像 SOH 或 EOT 这样的帧定界控制字符。可见不管从键盘上输入什么字符都可以放在这样的帧中传输过去,因此这样的传输就是透明传输。

演示
演示

解决方法:发送端的数据链路层在数据中出现控制字符”SOH”和”EOT”的前面插入一个转义字符”ESC”(其十六进制编码是 1B)。而在接收端的数据链路层在将数据送往网络层之前删除这个插入的转义字符。这种方法称为字节填充(byte stuffing)或字符填充(character stuffing)。如果转义字符也出现在数据当中,那么解决方法仍然是在转义字符的前面插入一个转义字符。因此,当接收端收到连续的两个转义字符时,就删除其中前面的一个。

演示
演示

2.3. 差错检测

传输差错:可分为两大类,一类就是最基本的比特差错,另一类就是收到的帧并没有出现比特错误,但却出现了帧丢失、帧重复或帧失序。 比特差错:就是比特在传输过程中可能会产生差错,即 1 可能会变成 0,0 可能会变成 1。比特差错是传输差错中的一种。

解决方法: 目前在数据链路层广泛使用了循环冗余检验 CRC(Cyclic Redundancy Check)的检测技术,能够实现无比特差错的传输,但这还不是可靠传输。

CRC 详解:https://baike.baidu.com/item/CRC/1453359 fr=aladdin

帧丢失、帧重复或帧失序: 三个帧:[#1]-[#2]-[#3],假定在接收端收到的却有可能出现的情况: (1)帧丢失:收到[#1]-[#3](丢失了[#2])。 (2)帧重复:收到[#1]-[#2]-[#2]-[#3](收到两个[#2])。 (3)帧失序:收到[#1]-[#3]-[#2](后面发的帧反而先到达了接收端,这与一般的数据链路层传输概念不一样)。

因特网广泛使用的数据链路层协议都不适用确认和重传机制,即不要求数据链路层向上层提供可靠传输的服务(因为这要付出的代价太高,不合算)。如果在数据链路层传输数据时除了差错并且需要进行改正,那么改正差错的任务就由上层协议(如,运输层 TCP 协议)来完成。实验证明,这样可以提高通信效率。

3.MAC 寻址

这是数据链路层中的 MAC 子层主要功能。这里所说的“寻址”与“IP 地址寻址”是完全不一样的,因为此处所寻找地址是计算机网卡的 MAC 地址,也称“物理地址”、“硬件地址”,而不是 IP 地址。在以太网中,采用媒体访问控制(Media Access Control, MAC)地址进行寻址,MAC 地址被烧入每个以太网网卡中。这在多点连接的情况下非常必需,因为在这种多点连接的网络通信中,必须保证每一帧都能准确地送到正确的地址,接收方也应当知道发送方是哪一个站。

3.1MAC 地址格式

MAC 地址,英文全称 Medium Access Control,直译为介质访问控制,它通常被固化在每个以太网网卡(NIC,Network Interface Card)。MAC(硬件)地址长 48 位(6 字节),采用十六进制格式,下图说明了 48 位的 MAC 地址及其组成部分。

MAC地址格式
MAC地址格式
  • 组织唯一标识符(OUI)由 IEEE(电气和电子工程师协会)分配给厂商,它包含 24 位。厂商再用剩下的 24 位(EUI,扩展唯一标识符)为其生产的每个网卡分配一个全球唯一的全局管理地址,一般来说大厂商都会购买多个 OUI。
  • I/G(Individual/Group)位,如果 I/G=0,则是某台设备的 MAC 地址,即单播地址;如果 I/G=1,则是多播地址(组播+广播=多播)。
  • G/L(Global/Local,也称为 U/L 位,其中 U 表示 Universal)位,如果 G/L=0,则是全局管理地址,由 IEEE 分配;如果 G/L=1,则是本地管理地址,是网络管理员为了加强自己对网络管理而指定的地址。

总结:

  1. 数据链路层位于 TCP/IP5 层模型的第二层,位于网络层和物理层之间。
  2. 物理链路层的功能是将源计算机网络层来的数据可靠的传输到相邻节点的目标计算机的网络层。
  3. 链路层通信都是使用帧为最小单位,这里需要注意 MTU 的概念。
  4. 链路层帧同步技术,只会处理比特差错的问题,确认和乱序重传会交给上层处理,这里需要注意 CRC 检验技术。
  5. MAC 地址格式是 48 位组成,作用是标识网卡的物理地址,用作链路层的包头。
正文到此结束