一、同局域网通信:以太网内的主机如何直接对话
局域网是我们最常接触的网络场景,比如家里的路由器连接的电脑、手机,公司内网的办公设备,都属于同一个局域网。我们先从最核心的问题切入,理解局域网通信的底层逻辑。
1. 核心问题:同一局域网的两台主机,能直接通信吗?
答案是:**完全可以!**局域网内的主机通信,本质是基于以太网协议、通过 MAC 地址完成的二层直连通信,原理就像我们在同一个教室里上课:老师喊出同学的名字,全班同学都能听到这个声音,但只有名字对应的同学会做出回应,其他同学会自动忽略这个信息。
2. 局域网通信的唯一身份标识:MAC 地址
在以太网的局域网里,每一台主机的唯一性,靠的就是 MAC 地址来保证。
- 核心定义:MAC 地址用来识别数据链路层中相连的节点,是网卡的'物理身份证'
- 格式规范:长度为 48 个比特位,也就是 6 个字节,通常用 16 进制数字加冒号的形式表示,例如
08:00:27:03:fb:19 - 唯一性:MAC 地址在网卡出厂时就已经确定,无法修改,全球唯一(虚拟机的 MAC 地址并非真实物理地址,可能存在冲突;部分网卡也支持用户自定义配置 MAC 地址)
查看方式:在 Windows 系统中,可通过 ipconfig /all 命令查看网卡对应的 MAC 地址,Linux 中也可使用 ifconfig 命令查看。
3. 以太网局域网的核心通信规则
想要理解局域网通信,必须先搞清楚以太网的底层规则:
- 串行通信规则:以太网中,任何时刻只允许一台机器向网络中发送数据;如果多台机器同时发送,会发生数据干扰,这种情况我们称之为数据碰撞
- 碰撞域与碰撞规避:在没有交换机的场景下,一个以太网就是一个碰撞域;所有发送数据的主机,都必须遵循碰撞检测和碰撞避免的规则,保障数据传输的有序性
- 接收判定规则:局域网通信过程中,主机对收到的报文,会通过目标 MAC 地址判定是否是发给自己的:只有目标 MAC 地址和自己的 MAC 地址匹配,才会接收并处理这个报文,否则直接丢弃
二、网络传输的核心:数据的封装与解包
不管是局域网通信,还是跨网段的广域网通信,都离不开一个最核心的动作:数据的封装与解包。这是整个网络协议栈工作的核心,也是理解所有网络协议的基础。
1. 先明确两个核心概念
网络中传输的所有数据,都可以拆分为两部分:
- 报头:对应协议层定义的结构体字段,里面包含了协议的核心规则,比如报头长度、有效载荷长度、上层协议类型等
- 有效载荷:上层协议传递下来的、需要被传输的核心数据。一句话总结:报文 = 报头 + 有效载荷
2. 各层数据包的专属称谓
在 TCP/IP 四层协议栈中,不同层级对数据包有不同的命名,对应不同的协议处理阶段:
- 传输层:数据包叫做段(segment)
- 网络层:数据包叫做数据报(datagram)
- 数据链路层:数据包叫做帧(frame)
3. 什么是封装(Encapsulation)?
应用层的数据通过协议栈发到网络上时,每层协议都会给上层传来的数据,加上一个自己协议的报头,这个自上而下层层加报头的过程,就叫做封装。举个例子:应用层要发送一段数据,会先交给传输层,传输层加上 TCP/UDP 报头,再交给网络层,网络层加上 IP 报头,再交给数据链路层,数据链路层加上以太网帧头和帧尾,最终封装成一个完整的以太网帧,发送到物理传输介质上。
4. 什么是解包与分用?
数据封装成帧后,通过物理介质到达目的主机,目的主机的协议栈会执行完全相反的操作:自底向上,每层协议剥掉对应的报头,再根据报头里的'上层协议字段',把剩下的有效载荷,交给对应的上层协议处理,这个过程就是。比如:数据链路层剥掉以太网帧头,根据帧头里的协议类型,把载荷交给网络层的 IP 协议;IP 协议剥掉 IP 报头,根据报头里的协议号,把载荷交给传输层的 TCP/UDP 协议;传输层再剥掉对应的报头,把最终的应用数据交给上层应用。

