物理层基础:信号与介质、编码方式、物理层设备
物理层,说白了就是网络通信的“地基”。你写的代码再漂亮,协议栈再优化,最终都得靠物理层把比特流变成电信号、光信号或者无线电波,从一台设备传到另一台设备。这一层不关心数据是什么含义,它只负责“把0和1送过去”。
我刚开始接触网络时,总觉得物理层没什么好学的——不就是插根网线吗?后来在项目里吃过亏,才明白物理层选型不对,上层协议再牛也白搭。今天咱们就把物理层的几个核心概念掰开揉碎聊一聊。
信号与传输介质
信号分两种:模拟信号和数字信号。模拟信号是连续变化的,比如老式电话线上的语音;数字信号是离散的,只有高低电平,对应0和1。咱们现在讲的以太网,用的都是数字信号。
传输介质嘛,常见的有这么几类:
- 双绞线:最常见的网线,里面8根铜线两两绞在一起。绞合的目的是抵消电磁干扰。我建议你记住一个分类:屏蔽双绞线(STP)和非屏蔽双绞线(UTP)。家用环境UTP就够了,工业现场最好用STP。
- 同轴电缆:老式以太网用过,现在主要用在有线电视和某些监控系统。抗干扰能力比双绞线强,但成本高、布线不方便。
- 光纤:单模光纤和多模光纤。单模传输距离远(几十公里),多模适合短距离(几百米)。我在数据中心见过一个坑——有人把多模光纤当单模用,结果链路死活起不来。
- 无线介质:无线电波、微波、红外线。Wi-Fi就是典型代表,但无线信号受环境干扰大,你想想看,隔一堵墙信号就掉一半。
编码方式:NRZ与曼彻斯特编码
信号在介质上传输,不能直接发0和1的二进制数据。为什么?因为接收端需要知道什么时候开始读、什么时候结束读,还要能区分连续的0或1。这就需要编码。
NRZ(不归零编码)
NRZ是最简单的编码方式:高电平表示1,低电平表示0。每个比特占用一个固定的时间窗口。
数据:1 0 1 1 0 0 1
NRZ:高 低 高 高 低 低 高
看起来很简单对吧?但NRZ有个致命问题:时钟同步。如果发送一连串相同的比特(比如连续5个1),信号就一直保持高电平,接收端无法判断到底发了几个1。它不知道什么时候该采样。
我记得有一次调试一个老旧的串口设备,用的就是NRZ编码。设备发送0xFF(8个1),接收端解析出来全是乱码。折腾了半天才发现是时钟漂移导致的——接收端少采了一个比特。
曼彻斯特编码
曼彻斯特编码解决了NRZ的时钟同步问题。它的规则是:每个比特中间有一次电平跳变。从高到低表示1,从低到高表示0(也有相反的定义,看具体标准)。
数据:1 0 1 1 0 0 1
曼彻斯特:高→低 低→高 高→低 高→低 低→高 低→高 高→低
你看,每个比特中间都有跳变。接收端可以利用这个跳变来恢复时钟信号,不需要额外的时钟线。这就是曼彻斯特编码最大的优势——自同步。
但代价也很明显:带宽利用率低。NRZ一个比特周期可以传1比特,曼彻斯特需要两次电平变化才能传1比特,相当于有效数据率只有信号速率的一半。10Mbps的以太网,信号速率其实是20Mbps。
| 编码方式 | 自同步能力 | 带宽效率 | 典型应用 |
|---|---|---|---|
| NRZ | 无 | 高(1比特/周期) | 低速串口、早期存储接口 |
| 曼彻斯特 | 有 | 低(0.5比特/周期) | 10Mbps以太网、某些RFID系统 |
| 差分曼彻斯特 | 有 | 低(0.5比特/周期) | 令牌环网 |
物理层设备:集线器与中继器
物理层设备不关心数据内容,只负责处理信号。它们是最“傻”的网络设备,但也是最基础的。
中继器(Repeater)
信号在介质上传输会衰减,距离越长衰减越严重。中继器的作用就是:接收衰减的信号,整形、放大,再转发出去。它不解析数据,不检查错误,只是单纯地“复制粘贴”信号。
中继器有两个端口,一端进一端出。它解决了传输距离的限制。比如10BASE-T以太网,双绞线最长100米,中间加一个中继器就能延伸到200米。
嗯,这里要注意:中继器不能无限级联。以太网有个“5-4-3规则”:最多5个网段,4个中继器,3个网段可以连接主机。超过这个限制,信号延迟和噪声积累会让网络崩溃。
集线器(Hub)
集线器本质上是多端口的中继器。它把多个设备连接在一起,形成一个共享的冲突域。
集线器的工作原理很简单:从一个端口收到信号,复制到所有其他端口。它不学习MAC地址,不过滤数据,不处理碰撞。所有连接在集线器上的设备共享同一个带宽。
举个例子:一台10Mbps的集线器接了4台电脑。任何时候只有一台电脑能发送数据,其他电脑只能接收。如果两台电脑同时发送,就会发生碰撞,双方都得等待随机时间后重试。
集线器和中继器的区别?中继器只有两个端口,用于延长传输距离;集线器有多个端口,用于连接多个设备。本质上都是物理层的信号再生设备。
知识体系总览
下面这张图把物理层的基础知识串起来了。你可以看到信号、介质、编码、设备之间的关系。
物理层是整个网络协议栈的基石。没有它,数据链路层、网络层、传输层都是空中楼阁。虽然现在很多工程师只关注上层协议,但我建议你花点时间把物理层搞透——很多网络故障的根因,其实就出在信号、介质或编码上。