物理层 Physical Layer
虽然 TCP/IP 模型不涉及硬件设备所在的物理层,但还是在这里简单介绍下物理层。 [1]
物理层,顾名思义,表示实际的物理链接。物理层利用物理传输介质为通信的两端建立链接,实现比特流的传输,如铜线、光缆或无线通道,保证比特流正确的传输到对端。常见设备包括中继器、集线器等。其中集线器 Hub,完全在物理层工作,会将自己收到的每一个字节,都复制到其他端口上去,即广播模式。
MAC 层 Link Layer
链路层,又称 MAC 层。MAC 的全称为 Medium Access Control,即媒体访问控制,主要有两个功能,寻址和控制。
- 寻址,即如何找到数据帧接收方
- 控制,即谁先发、谁后发,发送出现问题如何处理
解决“控制”问题
在以太网中,两个节点间传输的数据最终都会转换成电信号,在物理传输介质上发送出去。物理传输介质肯定是共享的,在发送数据时需要考虑谁先发、谁后发、同时发送时怎么避免冲突、出现问题怎么处理等。这就是多路访问问题,即如何协调多个发送和接收节点对单一共享广播信道的访问。计算机网络使用多路访问协议来规范它们在共享的广播信道上的传输行为。
多路访问协议
我们可以先来思考一下,理想情况下在共享信道上期望怎么传输数据。
- 如果只有一个节点需要发送数据,那么我们期望它可以以整个信道的速率 R 发送数据
- 如果有 M 个节点需要同时发送数据,那么我们期望它可以以(信道的传输速率 R / M)来发送数据
-
规划车道 ➡️ 信道划分协议 Channel Partitioning Protocol
采用多路复用技术,将链路、网络资源(如带宽)划分为“资源片”,将“资源片”分配给各路通信,每路通信独占其分配到的资源片进行通信。这样的划分方式,可以满足理想情况 2。
-
依次排队 ➡️ 轮转协议 Taking-turns Protocol
多个节点轮流发送数据。当只有一个结点活跃时,以信道的全部发送速率 R 发送;当有M个结点活跃时,每个活跃结点的吞吐量接近 R/M。完全满足理想情况 1,几乎满足理想情况 2。
-
随机应变 ➡️ 随机访问协议 Random Access Protocol
节点总是以信道的全部速率发送数据,传输时可能且允许出现冲突。当检测到冲突时通过延时重传等方式恢复,这也是以太网使用的方式。完全满足理想情况 1,几乎满足理想情况 2。
在轮转协议和随机访问协议中,好像都可以满足理想情况。那为什么以太网使用的说随机访问协议而不是轮转协议呢?主要有以下三个原因
- 网络架构更简单,所有设备都可以同时发送和接收数据,不需要等待其他设备的轮转时机
- 更加灵活和高效,随机访问协议允许多个设备同时发送数据,不需要进行时间调度或协调
- 可扩展性高,新设备可以随时连接到网络,并立即开始发送和接收数据,不需要调度或配置
解决“寻址”问题
MAC 地址是指网络设备的硬件地址,是由网络设备的制造商烧录在设备的网卡中的一个全球唯一的地址,如果一台设备有多个网卡,则每个网卡都需要并会有一个唯一的 MAC 地址。MAC 地址共 48 位(6个字节),以十六进制表示。
当数据传输时,源设备会根据目标设备的 MAC 地址 “寻址” ,确保数据能够被正确地传送到目标设备。当设备接收到数据后,如果发现目的地址与本地 MAC 地址不一致,则会丢弃,只有真正的目标设备才会接收并处理收到的数据。
MAC 地址是一个局域网(LAN)范围内的地址,它只在局域网中起作用,不能直接进行跨网络通信。在局域网中,可以通过交换机(Switch)来完成数据的传输。交换机通过学习和记录连接到它的设备的 MAC 地址,根据 MAC 地址来决定数据的转发。而在互联网中,数据通常是通过路由器(Router)等设备进行转发,而不是根据 MAC 地址进行直接传输。
以太网帧 - Frame
以太网帧 Ethernet frame 是 MAC 层传输数据的基本单位。其中 MAC 头部包含 目标 MAC 地址、源 MAC 地址 和 类型。类型标识了传输数据的封装协议[2]。常见的类型有,0x0800 表示 IPv4 数据报,0x0806 表示 ARP 数据报,0x86DD 表示 IPv6 数据报[3]。
- 目标 MAC 地址:表示数据帧应该被发送到哪个网络设备,由 6 个字节组成
- 源 MAC 地址:表示数据帧是从哪个网络设备发送的,同样由 6 个字节组成
- 类型:表示数据帧类型,0800 表示 IP 数据包,0806 表示 ARP 数据包
- 数据:实际的数据内容,长度可变
- CRC:Cyclic Redundancy Check 循环冗余检测,通过 XOR 异或的算法,计算整个数据帧在发送的过程中是否出现了错误
获取 MAC 地址
在网络通信中,使用 MAC 地址直接进行通信是不可行的,我们借助 IP 地址作为中间桥梁来实现通信。在局域网中,知道了要发送的 IP 地址,该如何获得目标设备的 MAC 地址呢?
每个设备的网卡的 MAC 地址都是固定的,我们可以手动一个个添加局域网中其他设备的 MAC 地址,随着局域网中的主机越来越多,这种方式难以为继。我们需要自动获取、更新和维护各个设备的 MAC 地址,这就是 Address Resolution Protocol。
ARP 协议,工作在 MAC 层,用于获得已知 IP 地址的 MAC 地址。而手动配置 MAC 地址的方式,一般是出于安全考虑,为了防止非法用户访问,由网络管理员手动在 MAC 地址表中添加合法用户的 MAC 地址表项,当手动配置的数量比较大时,难以人工维护,可以使用端口安全功能实现 MAC 地址和接口的动态绑定。
具体的 ARP 协议内容,我们下节继续~
小测验
- 在物理层工作的常见设备有哪些?
- 在 MAC 层工作的常见设备有哪些?
- MAC 层传输数据的基本是什么?它的头的格式是什么?每个字段的含义和作用是什么?
- 如何通过 IP 地址获取 MAC 地址?
-
有些文章描述TCP/IP模型有五层,其中包括了物理层。但在RFC1122中未指定物理层,我还是倾向于四层。详情可参考:https://datatracker.ietf.org/doc/html/rfc1122#page-8 ↩
-
以太网II帧:https://en.wikipedia.org/wiki/Ethernet_frame#Ethernet_II ↩