Timetombs

泛义的工具是文明的基础,而确指的工具却是愚人的器物

66h / 116a
,更新于 2024-04-06T22:06:23Z+08:00 by   35f4f88

[计算机网络] 02 [Layer] Data Link

版权声明 - CC BY-NC-SA 4.0

1 数据链路层的用途

上一篇的遗留问题说到物理层仅仅提供01bit流是远远不够的,需要进行更高层的抽象。结合开篇中提到的计算机网络的核心设计理念分组&交换,这一层的用途就是分组 : 提供基于01bit流分组后的数据帧(PDU=Frame)。

2 三个基本问题

想要从下层的01比特中抽象出这样的结果,则需要解决一下的三个基本问题:

  1. 封装成帧。
  2. 透明传输。
  3. 差错检测。

2.1 封装成帧

下层物理层提供的是01bit流,想要变成分组后的帧,就需要定义起始和结束的标记。

  1. 起始标识 : SOH(Start Of Headine),二进制0000_0001
  2. 结束标识 : EOT(End Of Transmission),二进制0000_0100
封装成帧

发送方会在Frame前后插入SOHEOT。接受方会读取这2个标记中间的数据。每一个链路层协议对Frame的长度都有约束,称为MTU(Maximum Transfer Unit).

2.2 透明传输

有了SOHEOT还是远远不够的,设想一下当你要传输的数据中正好也包含这两个标记,那么我们的起始和结束岂不就错乱了?对的,正是如此,所以就需要找一个办法来识别出这种数据。这个办法就是转义,即通过添加一个新的符号来改变SOHEOT的含义。

  • 转义符号 : ESC(Escape),二进制0001_1011
透明传输

发送方会检查Frame,然后在需要转义的地方加入ESC。接受方读取Frame时会检查是否同时出现了ESC SOHESC ESCESC EOT,有的话就移除ESC,然后把后续的一个Octet当作正常的数据。

2.3 差错检测

终于可以完成的对下层的01进行分组了。但是在传输过程中可能会发生差错,比如把0处理成了1,或者过来,再或者丢了一些数据,为了保证其完整性,就需要对其进行差错检测。这时就需要把一些校验码放在Frame的后面(EOT的前面),这个校验码称为帧检测序列FCS(Frame Check Sequence)。生成校验码的方式通常是CRC(Cyclic Redundancy Check),具体的算法就不展开了。

差错检测

如果接受方接收到数据后检测发现FCS对不上,则会丢弃这个Frame。从这个差错检测也可以反向推断出来,如果不分组成Frame,则就无法进行差错检测了。

3 MAC

LAN中,通信双方需要一个标识符来标识通信双方,这个标识符就是MAC Address(Media Access Control Address)1,也称为物理地址,后续就称为MAC了。这个标识符长度为48bit,是固化到硬件中的。前24位由IEEE负责分配(硬件厂商向其购买),后24位硬件厂商自己分配。MAC地址并不是全球唯一的,也不需要全球唯一,在一个LAN内唯一即可。

4 Ethernet Frame

Enternet(以太网)是美国施乐(Xerox)公司在1975年开发出来的一种LAN(Local Area Network)局域网技术。Enter(以太)来自于当时物理学中的以太理论(当时的科学家认为电磁波的传播介质是以太)。

1980年9月,DEC、Intel和Xerox三家公司联合制定了一个10Mbit/s的协议DIX V1。1982年又做了一些修改,也就是目前所使用的DIX V22

4.1 DIX Ethernet V2 Frame

DIX V2的Frame2:

|                DIX Ethernet V2 Frame                          |
|- - - - - - - -+- - - 32 bit(4 octet) - - - - -+- - - - - - - -|
|0 1 2 3 4 5 6 7+0 1 2 3 4 5 6 7+0 1 2 3 4 5 6 7+0 1 2 3 4 5 6 7|
|- - - - - - - -+- - - - - - - -+- - - - - - - -+- - - - - - - -|
|           Destination MAC Address (6 octet)                   |
|                               +- - - - - - - -+- - - - - - - -|
|                               |                               |
|- - - - - - - -+- - - - - - - -+                               |
|           Source MAC Address (6 octet)                        |
|- - - - - - - -+- - - - - - - -+- - - - - - - -+- - - - - - - -|
|        Type (2 octet)        |                                |
|- - - - - - - -+- - - - - - - -+                               |
|                                                               |
|               Payload (46-1500 octet)                         |
|                                                               |
|- - - - - - - -+- - - - - - - -+- - - - - - - -+- - - - - - - -|
|                        CRC (4 octet)                          |
|- - - - - - - -+- - - - - - - -+- - - - - - - -+- - - - - - - -|

这个协议中规定了Frame所包含的一些字段以及其字节布局,包括:

  1. Destination MAC Address (6 octet) : 目标MAC地址。
  2. Source MAC Address (6 octet) : 源MAC地址。
  3. Type (2 octet) : PayLoad的类型字段。
  4. PayLoad : MTU=1500
  5. CRC (4 octet) : 这部分并不会出现在链路层,而是底层使用的。

4.1.1 Enter Type

常用到的几种Enter Type3

Enter TypeProtocol
0x_08_00IPv4(Internet Protocol Version 4)
0x_08_06ARP(Addreee Resolution Protocal)
0x_81_00VLAN(Virtual Local Area Network),IEEE 802.1Q
0x_86_DDIPv6(Internet Protocal Version 6)
0x_88_63PPPoE Discovery Stage
0x_88_64PPPoE Session Stage

4.2 IEEE 802.3 Frame

DIX V2的基础上,IEEE 802委员会的802.3工作组制定了IEEE的Enternet标准IEEE 802.3。其并未对DIX V2Frame格式做出变动,而只是扩充了一下Type字段的含义,是完全兼容DIV V2的。IEEE 802.3Type字段表示两个含义,当它的值大于0x0600时,代表类型;小于时则代表Payload的长度。

4.3 Frame Type

这里的Frame Type和上文中的Enter Type不是一个概念。Enter Type指的指一个Frame内的Payload是什么类型的协议。而Frame Type指的是接收方收到的Frame属于哪种类型 :

  1. Unicast单播 : 1:1, 发给本LAN的一个节点。
  2. Broadcast广播 : 1:N(全体), 发给本LAN所有节点。
  3. Multicast组播 : 1:N, 发给本LAN指定的多个节点。

5 ARP

有了MACFrame就可以在LAN内进行通信了,但是有个问题,发送发怎么知道对方的MAC呢?这时候就需要专门的协议来解决这个问题了:

  1. IPv4 : Broadcast协议ARP(Addreee Resolution Protocal)4
  2. IPv6 : Multicast协议ICMPv6(Internet Control Message Protocol for IPv6)5中的NDP(Neighbor Discovery Protocol)负责。

协议不同,但是解决的问题是同一个,一下有个简单的动图可以描述这个过程。

MAC地址解析过程

如果LAN中充斥着大量的Broadcast时,就很容易形成广播风暴,严重影响正常的LAN通信。所以在IPv6协议中,已经抛弃了对Broadcast的使用,而是使用Multicast替代。

6 VLAN

VLAN(Virtual Local Area Network)也可以缓解上述提到的广播风暴,其作用是可以在物理的LAN上建立一个虚拟的LAN。把原本一个LAN的广播域隔离为一个个的虚拟的广播域。IEEE 802.1QIEEE 802委员会制定的VLAN标准。

6.1 IEEE 802.1Q Frame

DIX V2Type字段的值为0x_81_00时,代表其Payload是VLAN(IEEE 802.1Q)6的帧格式7

|                          IEEE 802.1Q                          |
|- - - - - - - -+- - - 32 bit (4 octet)- - - - -+- - - - - - - -|
|0 1 2 3 4 5 6 7+0 1 2 3 4 5 6 7+0 1 2 3 4 5 6 7+0 1 2 3 4 5 6 7|
|- - - - - - - -+- - - - - - - -+- - - - - - - -+- - - - - - - -|
| PCP |D| VID (VLAN identifier) |                               |
|3 bit|E| 12 bit                +        Type (2 octet)         |
|     |I| max = 0xFFF = 4096    |                               |
|- - - - - - - -+- - - - - - - -+- - - - - - - -+- - - - - - - -|
|                                                               |
|               Payload (46-1500 octet)                         |
|                                                               |
|- - - - - - - -+- - - - - - - -+- - - - - - - -+- - - - - - - -|
PCP = Priority code point
DEI = Drop eligible indicator

7 设备

工作在数据链路层中的设备有很多 : 网卡、集线器和网桥、二层交换机(已称为以太网交换机)。

集线器和网桥的组合它们的工作在半双工模式下,采用CSMA/CD协议检测冲突,虽然看起来是星型以太网,但是实际上还是总线型的。目前已被二层交换机替代了,所以就不再介绍集线器和网桥了。

7.1 交换机

一个交换机可以组建一个星型以太网,交换机识别Frame,根据协议中的目标MAC进行转发来通信(目前有专门的硬件来负责,效率非常高)。交换机内置有一个MAC Address Table,通过自学习的方式积累记录着每个MAC对应的Port

二层交换机

注意MAC Address TableMACPort的对应关系。其中MAC可以认为是key,MAC:Port1:1; 但是反过Port:MAC则是1:N(也就是可能有N个MACPort是同一个)。

8 总结

链路层的分组&交换:把物理层的01bit流分组成Frame,以及对Frame的差错检测。然后使用交换机来实现交换

9 遗留问题

但是如果传输过程中Frame丢失了、重复了或者乱序了等等,链路层对这种错误则是无能为力的,所以链路层并不能对上层提供可靠传输(发送方按序发送,接收方按序接收)。这些问题就留给了更高层的协议来完成了。

10 Reference

上一篇 : [计算机网络] 01 [Layer] Physical
下一篇 : [计算机网络] 03 [Layer] Internet