简介:这份文档面向网络初学者与嵌入式开发入门者,系统梳理网络基础中物理层与数据交换的核心概念,帮助读者理解数据从应用层到物理层的完整流转过程。内容围绕电路交换、报文交换与分组交换三种方式的差异展开,结合快递包裹的类比讲解数据封装与解封装的方向与层次,并延伸到网络最小三要素、同轴电缆与双绞线等传输介质、以太网标准及冲突域等知识点,对CSMA/CD载波侦听与退避重发机制也有具体说明。资源包共1个docx文件,约3.46MB,以图文笔记形式组织,便于按章节查阅与复习。目前已有104人学习,适合需要夯实TCP/IP协议栈底层认知、补齐物理层与链路层知识短板的读者作为入门参考。
1. 网线里跑的到底是什么:从“数据交换”说起
你有没有想过,一根网线插上去,网页就开了、消息就发出去了,可这根线里跑的究竟是什么?很多人第一反应是“电信号”,再往下问就卡住了。其实网络基础里最容易被忽略、又最绕不开的一层,叫物理层——它负责把 0 和 1 变成能在介质上传输的信号,也决定了多台设备怎么“排队”用同一根线。搞懂它,你再看 Ethernet、TCP/IP、网卡这些词,就不会觉得是玄学。这一篇就从数据交换的三种形式讲起,一路说到网线、网卡和协议栈这三样东西,把“最小网络”这件事讲透。
2. 三种数据交换形式:为什么最后都选了分组交换
2.1 电路交换:先占一条线,别人干瞪眼
电路交换的思路特别直白:通信之前,先在两台设备之间维护一条逻辑电路,这条线路只传你的数据,不传别人的。打个比方,就像你打电话,从拨通到挂断,这条线路一直被你占着,别人打不进来。
问题也出在这儿。当某一时刻你不通信了,这条逻辑电路还占着,别人就无法使用这条线路传数据。线路利用率低,是电路交换最典型的短板。它适合那种“一旦建立就持续传、对时延敏感”的场景,但在设备多、数据碎的网络里,这种“占着茅坑不拉屎”的方式效率太低。
2.2 报文交换:加个标识,大家轮流用
为了提升效率,报文交换换了个思路:当两个以上设备想同时用同一条线路发数据时,为了防止数据在传输过程中混乱,给每份数据加一个标识。每个人把自己要传的数据加上标识,接收端根据标识就不会把数据传乱。
通俗地说,这就像几个人往同一个信箱里塞信,每封信都写了收件人,邮递员按收件人分拣,不会把张三的信送到李四手里。标识解决了“数据是谁的”这个问题,线路可以被多台设备共享,效率比电路交换高了一截。
但报文交换有个隐患:一份报文可能很长,长报文占着线路传半天,短报文只能干等。数据大小不一致时,就会出现转发的不公平现象。
2.3 分组交换:把大块切成小片,公平又高效
分组交换在报文交换的基础上又往前走了一步:依然加标识,但把每个数据的大小进行定义,先做一个分片,每个数据段的值有一个上限值,同时加一个标识,标明数据是从哪个设备到哪个设备的。这样多台设备就可以使用同一条链路通信,数据紊乱的问题也解决了。
打个比方,报文交换像寄一整箱书,分组交换像把书拆成一本一本寄,每本都贴好地址标签。大件不再堵路,小件也能插空走。可新的问题来了:在数据大小不一致的情况下,仍然会出现不公平的现象。于是再规定一个固定值,每次只传这么大的值,报头加上去,物理层就到了通过网卡/口传输、走传输介质的阶段,未来数据都是 010101。
提示:三种交换形式不是“谁淘汰谁”的关系,而是各自适配不同场景。理解它们的差异,比记住名词更重要。
| 交换形式 | 是否独占线路 | 是否加标识 | 是否分片 | 典型短板 |
|---|---|---|---|---|
| 电路交换 | 是 | 否 | 否 | 线路利用率低 |
| 报文交换 | 否 | 是 | 否 | 长报文堵路、不公平 |
| 分组交换 | 否 | 是 | 是 | 需固定分片大小来保公平 |
3. 封装与解封装:快递包裹式的数据旅程
3.1 封装:从上层到下层,一层套一层
数据封装就像快递包裹。快递包装盒里塞了很多东西,最终对方要的只是里面的小物件,这个小物件就像是应用层的数据。发件时,小物件被放进盒子、贴上运单、装上货车,每加一层外包装,就多一层“头信息”。
网络里的封装是从上层到下层:应用层的数据往下走,每经过一层就加一个本层的头部,到了物理层变成比特流发出去。对于接收者而言,只是把数据拆开看看,没问题就行了——这就是解封装,从下层到上层一层层剥开。
3.2 解封装:接收端的反向拆包
解封装的方向和封装正好相反。物理层收到比特流,交给网卡转换,往上逐层去掉头部,最后把应用层真正要的那段数据交出去。整个过程像收快递:先拆最外面的货车封条,再拆纸箱,最后拿出你要的那件小东西。
这里有个容易忽略的点:每一层只关心自己那层的头部,不关心别的层塞了什么。这种“各管一段”的设计,正是协议栈能分层协作的基础。
发送端:应用数据 → 加传输层头 → 加网络层头 → 加链路层头 → 比特流 接收端:比特流 → 去链路层头 → 去网络层头 → 去传输层头 → 应用数据上面这段示意里,箭头方向就是封装与解封装的方向。注意每一层加头、去头都是成对出现的,头部里装的是本层需要的控制信息,比如地址、标识、校验值。
4. 最小网络三要素:网线、网卡、协议栈
4.1 网络诞生前后:从刻录到三件套
网络诞生前,数据传递靠刻录这类离线方式,搬来搬去。网络诞生后,网线、网卡、协议栈这三样凑齐,才称得上“想要完成最小网络的三要素”。
网线上是比特流,通过网卡转换,现在的协议栈 TCP/IP 几乎都是集成在设备上的。只要你买的设备跟网络相关,基本上都支持 TCP/IP。换句话说,三要素里协议栈这一环,现代设备出厂就帮你备好了,真正需要你理解的是它们各自的分工。
4.2 三要素各自管什么
网线是传输介质,负责把信号从 A 点送到 B 点;网卡是转换器,把设备内部的数据变成线上能跑的比特流,再把收到的比特流还原;协议栈是规则集,规定数据怎么封装、怎么寻址、怎么确认送达。
打个比方,网线是公路,网卡是收费站兼装卸工,协议栈是交通规则。三者缺一,数据要么出不去,要么出去了回不来。很多初学者只盯着“网线插没插”,忽略了网卡驱动和协议栈配置,结果就是线是通的、网是不通的,这种翻车场景在嵌入式调试里特别常见。
5. 传输介质与冲突:同轴电缆、双绞线、光纤怎么选
5.1 同轴电缆:共享一根线,冲突域就来了
常用传输介质里,同轴电缆是早期代表,比如早期的有线电视就用这种线路连接方式。同轴线缆要实现多设备互联,可以使用耦合器,在耦合器的每个接口下接一个设备。画同轴线缆时以一根线表示,一根线上承载了多个设备。
基于同轴电缆进行多设备互联,数据在传输过程中有冲突的问题,而且同轴电缆这玩意比较贵。以太网标准里有 10BASE5 这样的命名:10 表示每秒可以传 10M,BASE 表示基于一个标准进行传输、在同轴电缆上进行曼彻斯特编码传输,5 表示传输距离 500 米。
同轴电缆中所有设备共享一根网络线,称为共享型网络。缺点很直接:传输速度慢,没有私密性可言。设备互相传输会产生数据碰撞,数据碰撞的这个范围称为冲突域。设备越多,传输越慢,冲突域也就越大。
5.2 CSMA/CD:先听后发、边听边发、冲突停发
如何避免冲突?用 CSMA/CD,也就是载波侦听多路访问/冲突检测技术。它的动作可以拆成三步:
- 先听后发:一个设备先去听线上有没有电压摆动值,听完后若发现线是静止的,就开始发送数据。
- 边听边发:发送过程中持续监听,因为冲突不可避免——同时有两台设备都听到了线是静止的,就会一起发。
- 冲突停发:先听到线上有电压摆动的就停止发送,然后走退避算法,计算一个随机值,比如 10 秒,这 10 秒内不往线上发,10 秒后再去听线上是否还被占用,这就是随机延迟后重发。
注意:CSMA/CD 是共享型网络的补救机制,不是万能药。它降低冲突概率,但不能消除冲突,设备一多,效率照样往下掉。
5.3 双绞线与光纤:从共享走向交换
双绞线分 UTP 非屏蔽双绞线和 STP 屏蔽双绞线,5 类、6 类指的是双绞线的类型。双绞线如果是千兆,那么八根线都用了。光纤则是另一条路线,用光信号传输,抗干扰能力强、距离远。
从同轴电缆的共享型网络,到双绞线配合交换机,冲突域被切小了,CSMA/CD 在很多场景下也不再是主角。介质的选择本质上是在速度、距离、成本和抗干扰之间做权衡,没有哪一种是“绝对最优”。
| 介质 | 传输信号 | 典型特点 | 主要短板 |
|---|---|---|---|
| 同轴电缆 | 电信号 | 共享一根线、可接耦合器 | 贵、冲突域大、无私密性 |
| 双绞线 UTP/STP | 电信号 | 分类别、千兆用满八根 | 距离受限、易受干扰 |
| 光纤 | 光信号 | 抗干扰、距离远 | 成本与施工要求高 |
6. 常见误区与易混概念:别把这几组词搅在一起
6.1 电路交换 vs 分组交换:不是“新旧”而是“场景”
易混点:很多人以为分组交换出现后,电路交换就淘汰了。为什么混?因为教材讲演进时按时间顺序排,容易让人误读成替代关系。怎么区分:看是否需要独占线路、是否容忍分片。对时延极敏感、通信持续的场合,独占线路反而有优势;数据碎、设备多的场合,分组交换更合适。
6.2 封装 vs 解封装:方向反了,顺序也反了
易混点:把封装和解封装当成同一套动作的正反两面,却记不清谁先谁后。为什么混?因为两者都涉及“加头/去头”。怎么区分:封装是从上层到下层逐层加头,解封装是从下层到上层逐层去头,方向相反、顺序也相反,接收端先碰到的是最外层。
6.3 冲突域 vs 共享型网络:范围与形态
易混点:把冲突域直接等同于“共享型网络”。为什么混?因为同轴电缆时代两者几乎重合。怎么区分:共享型网络是一种组网形态,冲突域是数据碰撞波及的范围。用交换机把网络分段后,共享形态可能变了,但冲突域的概念依然用来描述碰撞影响面。
6.4 网卡 vs 协议栈:一个管转换,一个管规则
易混点:以为插上网卡就等于“有网络了”。为什么混?因为三要素常被一起提,界限被模糊。怎么区分:网卡负责比特流与设备数据之间的转换,协议栈负责封装、寻址、确认这些规则。线通、网卡亮灯但上不了网,多半是协议栈或配置这一环出了问题。
7. 什么时候该用哪套思路:一个嵌入式场景的判断
假设你在做一个嵌入式设备联网的模拟项目,手头有几种介质和组网方式可选,怎么判断?先看数据特征:如果设备之间传的是持续、等间隔的小数据流,且对时延敏感,独占线路的思路值得考虑;如果是多设备共享链路、数据大小不一,分组交换配合固定分片更稳。
再看介质:短距离、成本敏感、设备不多,双绞线是常见起点;环境干扰大、距离远,光纤更合适;同轴电缆在今天更多是理解历史的样本,除非存量系统,否则不必优先选。最后看冲突:设备数量一多,共享型网络的冲突域就会膨胀,这时候要么切小冲突域,要么换交换式组网,别指望 CSMA/CD 硬扛。
# 排查“线通但网不通”的典型顺序(示意,命令因平台而异) # 1. 看网卡是否识别 ip link show # 2. 看协议栈地址是否配置 ip addr show # 3. 看链路是否有收发 ethtool eth0 | grep -i link上面这几条只是排查顺序的示意:先确认网卡被系统识别,再确认协议栈地址配好,最后看链路状态。参数上,eth0要换成你设备实际的接口名;ip系列命令在多数 Linux 环境可用,嵌入式环境可能要用精简过的工具集。失败时重点看第二步——地址没配,前面再通也白搭。
我自己的血泪经验是:每次调嵌入式网络,都强制按“介质→网卡→协议栈”的顺序走一遍,不跳步。有一次跳过了网卡识别直接查协议栈,折腾半天才发现是接口根本没起来。从那以后我每次排查都强制走一遍这个顺序,省下的时间比想象中多。希望帮到你。
本文还有配套的精品资源,点击获取