第2章:物理层与数据链路层——从比特流到可靠帧
大家好,我是老张。今天咱们聊聊网络最底层的两个兄弟——物理层和数据链路层。很多初学者觉得这两层太底层、太枯燥,其实不然。我做了十几年网络,遇到过太多诡异的问题,最后追根溯源,都栽在这两层上。
说白了,物理层管的是「怎么把比特发出去」,数据链路层管的是「怎么让这些比特在相邻设备间可靠地传递」。你想想看,没有这两层打底,TCP/IP再牛也白搭。
2.1 物理层:比特流的搬运工
物理层的作用,用一句话概括:在传输介质上实现原始比特流的透明传输。它不关心比特代表什么含义,只负责把0和1从一头搬到另一头。
2.1.1 物理层的四大特性
我习惯把这四个特性记成「机、电、功、过」——机械、电气、功能、过程。咱们一个个看:
| 特性 | 描述 | 实际例子 |
|---|---|---|
| 机械特性 | 接口的形状、尺寸、引脚数量 | RJ45网口的大小、8根针脚排列 |
| 电气特性 | 电压范围、信号电平、传输速率 | 以太网用差分信号,±2.5V |
| 功能特性 | 每根引脚的作用 | 1、2脚发送,3、6脚接收 |
| 过程特性 | 事件发生的顺序 | 先发前导码,再发数据帧 |
2.1.2 传输介质
常见的传输介质就三种:双绞线、光纤、同轴电缆。现在同轴电缆基本退役了,咱们重点说前两个。
- 双绞线(UTP/STP):家用、办公最常见。Cat5e支持千兆,Cat6支持万兆。我建议新布线至少用Cat6,别省那点钱。
- 光纤:单模传输距离远(几十公里),多模适合短距离(几百米)。数据中心现在普遍用单模。
2.2 数据链路层:让不可靠的链路变得可靠
物理层只管发比特,但比特在传输过程中可能出错、丢失、乱序。数据链路层就是来解决这些问题的。
它的核心功能有三个:封装成帧、透明传输、差错检测。嗯,这里要注意,数据链路层不保证可靠传输(那是传输层的事),它只保证「帧」在相邻节点间正确送达。
2.2.1 封装成帧
把网络层下发的IP数据包,加上头部和尾部,变成一个「帧」。帧的结构大致如下:
+--------+--------+--------+--------+--------+
| 前导码 | 目标MAC | 源MAC | 类型/长度 | 数据 | FCS |
+--------+--------+--------+--------+--------+
8字节 6字节 6字节 2字节 46-1500 4字节
前导码用来同步时钟,FCS是帧校验序列。中间那46-1500字节的数据部分,就是IP包。为什么最小46字节?因为要保证帧足够长,避免冲突检测出问题——这是以太网的设计哲学。
2.2.2 差错检测
数据链路层用CRC(循环冗余校验)来检测错误。发送方计算一个校验值放在FCS字段,接收方重新计算,不一致就丢帧。
我曾经在项目中遇到过一个问题:某交换机端口频繁报CRC错误,换了网线、换了模块都没用。最后发现是交换机电源老化,导致信号电平不稳定。你看,问题又绕回物理层了。
2.3 以太网协议:统治局域网的王者
以太网是目前最主流的局域网技术。它定义了数据链路层的帧格式和介质访问控制方法。
2.3.1 CSMA/CD(载波监听多点接入/碰撞检测)
早期的以太网用同轴电缆,所有设备共享一条总线。怎么避免同时发送导致冲突?CSMA/CD的规则很简单:
- 先听再说:发送前监听信道,空闲才发
- 边发边听:发送时持续检测是否有冲突
- 冲突则停:检测到冲突立即停止,发一个阻塞信号
- 随机等待:等待随机时间后重试
现在全双工交换网络普及后,CSMA/CD基本用不上了。但理解它有助于你明白以太网的设计初衷。
2.4 MAC地址与ARP协议
2.4.1 MAC地址
MAC地址是数据链路层的设备标识,48位,通常写成6组十六进制数,比如 00:1A:2B:3C:4D:5E。前24位是厂商代码(OUI),后24位是设备序列号。
重要概念:MAC地址是「本地地址」,只在同一个广播域内有效。IP地址是「全局地址」,用于跨网络通信。两者分工不同,缺一不可。
2.4.2 ARP协议
ARP(地址解析协议)解决一个问题:已知IP地址,如何找到对应的MAC地址?
工作流程很简单:
- 主机A广播一个ARP请求:「谁的IP是192.168.1.2?请告诉我你的MAC地址」
- 所有主机都收到这个广播,但只有IP匹配的主机B回应
- 主机B单播回复:「我是192.168.1.2,我的MAC是00:1A:2B:3C:4D:5E」
- 主机A把映射关系写入ARP缓存,下次直接查表
ARP缓存默认存活时间2-4分钟。我建议你经常用 arp -a 命令看看缓存,有时候网络故障就是ARP表项冲突导致的。
2.5 交换机工作原理
交换机是数据链路层的核心设备。它不像集线器那样无脑转发,而是根据MAC地址表智能转发。
2.5.1 三大核心功能
- MAC地址学习:记录每个端口连接的设备MAC地址
- 帧转发/过滤:根据目标MAC查表,只转发到对应端口
- 环路避免:通过STP(生成树协议)防止广播风暴
2.5.2 转发流程
假设交换机刚启动,MAC地址表是空的:
- 主机A发帧给主机B,目标MAC是B的地址
- 交换机查表,没找到B的MAC——于是向所有端口泛洪(除了接收端口)
- 主机B收到帧并回复,交换机记录B的MAC对应端口
- 下次A再发帧给B,交换机直接转发到对应端口,不再泛洪
你想想看,这个过程是不是很像「记性不好的人,第一次问路,第二次就记住了」?
2.5.3 交换机的转发方式
| 方式 | 原理 | 延迟 | 适用场景 |
|---|---|---|---|
| 直通转发 | 只检查目标MAC就转发 | 低 | 对延迟敏感的场景 |
| 存储转发 | 接收完整帧,校验无误再转发 | 高 | 需要高可靠性的网络 |
| 碎片隔离 | 检查前64字节,过滤冲突碎片 | 中 | 早期以太网使用 |
我个人习惯在核心层用存储转发,接入层用直通转发。这样既保证了核心的可靠性,又兼顾了接入的性能。
2.6 本章知识体系
下面这张图展示了物理层和数据链路层的核心逻辑关系:
这张图把两层的核心职责和关键知识点串起来了。物理层是基础,数据链路层在它之上构建可靠的帧传输。你想想看,没有物理层,数据链路层就是空中楼阁;没有数据链路层,物理层传的比特就是一盘散沙。
好了,这一章就到这里。物理层和数据链路层是网络通信的基石,理解透了,后面学网络层、传输层会轻松很多。记住:所有上层协议的可靠性,都建立在底层协议的扎实之上。