Linux | 走进网络世界:MAC、IP 与通信的那些事
在 Linux 的世界里,网络通信无处不在。从 MAC 到 IP,从局域网到互联网,数据是如何在设备之间穿梭的?本篇将带你用通俗的方式,理解那些看似复杂却至关重要的网络基础知识。
一、计算机网络发展背景
计算机网络的起点可以追溯到上世纪60年代。当时,美国国防部高级研究计划署(ARPA)发起了一个叫 ARPANET 的项目,目的是将全国不同地区的计算机连接起来,实现远程通信和资源共享。1969年,ARPANET建成,成为全球第一个真正意义上的计算机网络。
随着技术的发展,网络开始走出实验室,进入商业和民用领域:
- 1974年,TCP/IP协议的提出,为互联网的标准化奠定了基础。
- 1980年代,局域网(LAN)和广域网(WAN)开始普及,互联网雏形逐渐形成。
- 此后,网络不断扩展,连接范围从办公室延伸到全球,最终形成今天的互联网。
【独立模式】:计算机之间彼此分离,无法通信。
【网络互联】:多台计算机通过网络连接,数据可以共享与传输。
【局域网(LAN)】:计算机数量更多了, 通过交换机和路由器连接在一起
【广域网(WAN)】:跨地区、跨国家的大范围网络。
注:LAN和WAN并无绝对界限,比如中国的“特色广域网”,也可以被看作一个巨大的“局域网”。
二、网络协议
网络协议是一套约定,用于规范计算机在网络中如何通信。它规定了连接建立、身份识别、数据格式、传输顺序、错误处理等细节。所有通信设备必须遵守相同的协议,才能实现数据的正确发送与接收。
2.1 网络协议标准
“协议”本质上是一种约定,用于确保通信双方对数据的表达和解析方式达成一致。
计算机通过电信号或光信号传输信息,常用不同的电平强度或频率变化来表示二进制的 0 和 1。然而,仅约定“使用二进制”并不足够 —— 若双方对信号的物理表示方式不一致,通信仍会失败。
【场景辅助】:这就好比两人都说“01语言”,但一个用高频表示“1”,另一个用高电压表示“1”,结果就如同中文与葡萄牙语对话,仍无法理解对方。因此,协议必须不仅包括逻辑规则,还要涵盖信号表示、编码格式、数据结构等底层细节。
2.2 网络通信环境问题
- 不同厂商的计算设备;
- 不同架构的操作系统;
- 不同标准的硬件接口与传输介质
如果没有统一标准,就像一个人讲中文、另一个人讲俄语,即使都在说话,也无法真正交流。统一协议让各种设备,即使来自不同厂家、不同操作系统,也能“听懂”彼此。
比如现在普遍使用的 TCP/IP 协议,就像是大家都同意使用的“通用语言”,它规定了从信号怎么发,到数据怎么传,到信息怎么读,每一步的细节,确保整个互联网可以正常运转。
【拓展小知识:谁制定协议,谁掌握主动权?】
统一标准不仅让设备能互通,还影响到谁掌握技术主导权。谁能制定广泛使用的协议,谁就拥有“话语权”。这也是为什么很多企业在新领域(比如物联网、AI)积极制定自己的协议标准,争取建立自己的技术生态。
三、协议分层
3.1 初始协议分层
网络通信涉及很多细节:从电信号的传输,到数据的打包、发送、接收,再到应用层的内容处理,每一步都很复杂。如果把所有功能都混在一起处理,不仅难以理解,也难以维护。
所以,我们引入了“分层”的思路。每一层只处理自己的职责,并通过接口与上下层连接。这样可以让复杂问题分段解决,逻辑更清晰,系统更稳定。
【场景辅助】:打电话
- 实际情况:人通过电话说话,和电话设备交互。
- 逻辑理解:我们认为是“人和人”在交流,电话只是工具。
【体现“分层”的结构】:
- 上层是语言沟通(人与人)
- 下层是设备传输(电话与电话)
- 它们通过“接口”连接,就像网络中各层通过标准接口交互。
【体现“分层”的好处】:
- 各层独立:我们可以更换电话型号(设备层),但不影响人与人沟通的方式(语言层),实现解耦合
- 结构清晰:故障排查容易定位问题在哪一层
- 便于维护:只需要修改出问题的那一层即可,不用全盘重写。
在计算机网络中,协议分层比这个更复杂,通常包括五层或七层。但原理是一样的:分层是一种工程上的智慧,用来让复杂系统变得可控。前面我们提到,分层能让复杂的通信系统变得清晰、好维护。那么,网络协议到底是怎么分层的?这就要从两个经典模型说起:OSI 七层模型和TCP/IP 五层模型。
3.2 OSI 七层模型(理论基础)
在网络通信模型中,OSI(开放式系统互联参考模型)把通信过程划分为了七个层级:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
这种设计的最大优点是理论结构清晰,把复杂的通信任务拆分成不同的功能区域,并且明确区分了“服务、接口、协议”这三个关键概念,为不同设备和厂商之间的互联互通提供了标准框架。
【实践不采用OSI理由】:
OSI 七层模型主要是理论上的指导,在实际工程中并不常用。这是因为其中的表示层、会话层难以在现代操作系统中单独实现,而七层结构本身也显得过于复杂,在实践中难以直接落地。
因此我们更常使用的是 TCP/IP 的简化模型,它更贴近真实网络运行的机制。
3.3 TCP/IP五层(或四层)模型
TCP/IP 并不是单一协议,而是一组协议的统称,包含了从物理传输到应用交互所需的所有通信标准。这些协议共同构成了我们熟知的 TCP/IP 协议簇,其结构被划分为五个层级.
物理层我们考虑的比较少. 因此很多时候也可以称为 TCP/IP四层模型
- 一般而言对于一台主机, 它的操作系统内核实现了从传输层到物理层的内容;
- 对于一台路由器, 它实现了从网络层到物理层;
- 对于一台交换机, 它实现了从数据链路层到物理层;
- 对于集线器, 它只实现了物理层
但是并不绝对. 很多交换机也实现了网络层的转发; 很多路由器也实现了部分传输层的内容(比如端口转发)
协议名称 | 中文名称 | 所属层 | 主要特点 / 作用 |
---|---|---|---|
UDP | 用户数据报协议 | 传输层 | 面向无连接、传输速度快、不保证数据可靠性 |
TCP | 传输控制协议 | 传输层 | 面向连接、提供可靠数据传输、支持流控制与拥塞控制 |
IP | 网际协议 | 网络层 | 负责数据包的寻址与路由,实现主机之间的通信 |
ARP | 地址解析协议 | 网络层 | 将 IP 地址解析为 MAC 地址,用于局域网内的数据传输 |
ICMP | Internet 控制报文协议 | 网络层 | 传递控制消息(如网络连通性、主机可达性、路由状态),作为 IP 协议的子协议通过 IP 传输 |
四、深入协议分层
我们之前理解了一些协议的基本概念,但要真正掌握它们,还需要更深入的理解。接下来,我们将重新审视协议和协议分层的概念。
4.1 TCP/IP 协议意义
- 【单机系统内部也存在协议】
即使是一台计算机内部,不同组件之间的通信也依赖协议,比如:
- 内存协议:用于设备与内存之间的数据交换
- 磁盘协议:如 SATA、IDE、SCSI 等,用于硬盘的数据读写
这些协议在本地主机中运行良好,问题较少,因此我们通常无感。
- 【网络通信带来了“远距离”的挑战】
主机之间一旦通过网络连接,通信距离加大,可靠性下降,问题增多。
为了解决这些跨主机通信中的数据传输问题,TCP/IP 协议应运而生。
本质:[通信主机距离变远 -- >TCP/IP 协议协议]
4.2 达成"共识"(重要)
TCP/IP 协议是一套用于计算机网络中数据传输的标准协议,它由**传输控制协议(TCP)和网际协议(IP)**组成。
- 【TCP】负责确保数据可靠、有序地传输,
- 【IP 】负责数据包的寻址和路由,使其能够准确到达目标主机。
4.2.1 TCP/IP 协议与操作系统的关系
这就好比主机之间通信必须通过网卡等硬件设备实现。发送方的数据需要从用户层逐层向下穿过整个协议栈,最终由物理层发送出去;接收方则需从物理层开始,逐层向上传递数据,最终交付给用户层
【场景辅助】:协议如何通过**“共识”**实现数据的正确传输
虽然我们还没有深入了解具体的协议,但可以从一个简单的角度理解协议的作用:
- 操作系统源代码通常使用 C/C++ 编写。
- 假设主机 A 向主机 B 发送一个结构体数据
struct protocol
,包含字段a=10, b=20, c=30
。
【问题】: 主机 B 能理解并提取这些数据吗?
【答案】: 可以!因为主机 A 和主机 B 使用相同的结构体类型
struct protocol
,这意味着双方对数据的理解是一致的,达成了“共识”。
简而言之,协议就是双方约定好的数据结构,它确保了不同主机间能够正确解析和理解彼此传输的数据。
五、网络中的地址管理
5.1 Mac物理地址
在局域网中,每一台主机都必须拥有一个唯一的身份标识,用来进行通信识
5.1.2 MAC 地址概念
- MAC 地址用于在数据链路层中标识网络设备,是局域网通信中的“身份证”。
- 每个网卡(网络接口)在出厂时都会被分配一个全球唯一的 MAC 地址。
- 它的作用是让主机在局域网中可以被准确识别和定位。
5.1.3 MAC 地址的格式
- 长度:48 位(二进制),即 6 个字节
- 表示方式:通常使用 16 进制表示,并用冒号分隔,如:
`08:00:27:03:fb:19
【注意事项】:
- 虚拟机的 MAC 地址通常是虚拟生成的,可能存在重复或冲突。
- 一些高级网卡允许用户手动修改 MAC 地址,主要用于特定网络配置场景。
5.2 IP 协议简介:IPv4 与 IPv6
在网络通信中,IP 协议(Internet Protocol)负责为每台主机分配一个全网唯一的地址,就像给每台计算机分配一个“门牌号”,用于数据的发送与接收。
5.2.1 IPv4 地址
IP 协议有两个版本:IPv4 和 IPv6。在没有特别说明的情况下,通常我们所说的“IP协议”默认指的就是 IPv4。
IPv4 地址 是一个 4 字节(32 位)的整数,用于唯一标识网络中的主机。为了方便人类阅读,IPv4 通常采用“点分十进制”的方式表示,例如: 192.168.0.1
- 每一段表示一个字节,范围从
0
到255
。 - 实际上,像
192.168.0.1
就是11000000.10101000.00000000.00000001
的二进制形式。
5.2.2 IPv6 地址
随着互联网的发展,IPv4 地址已经严重不足,特别是在移动设备、智能家居、物联网等设备大量涌现之后,IPv4 无法满足海量连接需求。
IPv6 使用 128 位地址,几乎可以给全球每一粒沙子分配一个唯一 IP,极大扩展了地址空间。
示例 IPv6 地址: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
六、网络传输基本流程
6.1 两种形式的流程图
【同一个网段】:两台主机进行文件传输
【跨网段的主机的文件传输】:数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器
6.2 封装与解包:网络通信的核心过程
在计算机网络通信中,数据在发送和接收过程中会层层封装与解包,每一层协议都会加上自己的协议报头(Header),用于控制与识别。
6.2.1 封装阶段: 自上而下,逐层加报头
数据从用户层向物理层传递,每一层都将接收到的“有效载荷”再次封装,添加自己的协议头部,形成新的数据包。
层级 | 封装目的与关键字段说明 |
---|---|
用户层 | 添加版本号字段:即使使用同一个软件,不同版本功能可能不同,因此需标明版本号,以便接收方做兼容处理。 |
传输层 | 添加序号字段:保证消息有序传输。顺序错乱可能导致语义混乱,因此需通过序号确保可靠传输。 |
网络层 | 添加源IP与目的IP:明确数据来自哪里,要发往何处,实现跨网络传输。 |
链路层 | 添加源MAC与目的MAC地址:用于局域网内识别设备,MAC是网卡的唯一标识,确保目标机器能正确接收。 |
- 【封装过程的本质】:逐层添加报头,构建完整报文
- 【报文结构】:
报文 = 报头 + 有效载荷
6.2.2 解包阶段: 自下而上,逐层去报头
当数据到达接收方时,会从物理层向用户层逐层上传,每一层都只处理属于自己的报头部分:
- 识别并解析本层报头;
- 丢弃报头,仅保留“有效载荷”;
- 根据报头中的**“分用字段”**,决定该数据应交给哪一个上层协议继续处理。
这个过程称为**“分用(Demultiplexing)”**。
6.3 以太网通信
在局域网(LAN)中,主流的通信协议就是 以太网(Ethernet)
- 【问题】:两台主机在同一个局域网内,是否能直接通信?
- 【答案】:是可以的。
【场景辅助】:就像课堂上的师生直接对话一样,局域网中的设备通过交换机(或集线器)连接在一起,彼此之间可以直接收发数据。
【趣味小知识 | 以太网的由来】
以太”这个词源于古代物理学中对“光的传播介质”的猜想。人们曾认为光需要一种看不见的介质(类似空气)来传播,这种介质被称为“以太(Ether)”。
后来科学界发现,光可以在真空中传播,“以太”并不存在。但当计算机科学家为局域网命名时,借用了这个概念,形象地称它为 以太网——仿佛在“看不见”的媒介中传递电信号。
### 6.3.1 局域网中“数据碰撞”
在以太网环境下,局域网中的所有主机共享同一通信信道,因此可能出现多个主机同时发送数据的情况,进而导致**数据碰撞(Collision)**问题。
【数据碰撞由来】
由于局域网中的每台主机都可能在任意时刻发送数据,如果有两台主机几乎同时发起通信,就可能在共享信道上发生数据冲突,导致传输失败。这种碰撞在某些主机频繁、甚至恶意发送大量数据时更容易发生,从而显著影响整个网络的传输效率与性能。
6.3.2 共享资源下的“互斥”控制
局域网通信的本质是:在任何时刻,信道上只能有一台主机发送数据,否则就会冲突。
这类似于“互斥资源”访问控制,但不是靠加锁实现,而是依赖底层网络协议来控制。
- 【以太网】:使用CSMA/CD机制实现互斥访问;
- 【令牌环网(Token Ring)】:使用**“令牌”机制**,即只有持有特殊标识的主机才能发送数据,令牌在网络中循环传递,从根本上杜绝碰撞。
七、从局域网到全网:跨网通信
7.1 IP 与 MAC 区别
网络通信中:
- MAC 地址:用于标识局域网中的唯一设备,作用于链路层,确保局域网内部通信的唯一性与定位。
- IP 地址:用于标识整个互联网中的主机,作用于网络层,确保全球范围内主机的唯一标识与寻址能力。
【场景辅助】:开车旅行中的导航系统
可以将一次网络通信类比为一次自驾旅行:
- IP 地址就像你的出发地和目的地:从黑龙江到云南,路线规划中无论经过多少地方,出发点与终点始终不变,这就像源 IP 和目的 IP 始终保持一致。
- MAC 地址就像你每一段路的上下一个中转站(加油站、收费站):每到一段路口都需要知道当前从哪里来、接下来往哪里走。这些“临时跳点”的信息会不断更新,就像每次在链路层中都会更换源和目的 MAC 地址一样。
MAC 地址只在当前“局部一跳”中有效,一旦离开当前局域网,原有的 MAC 信息就会被丢弃,由路由器根据转发逻辑重新封装下一跳所需的 MAC 报文头。
7.2 跨网通信是怎么实现的?
当一台主机要和另一个**不在同一局域网(子网)**的设备通信时,整个过程其实是这样展开的:
7.2.1 判断目标是否“在自己家里”
当数据包准备从主机发出时,系统会先检查:
目标 IP 是不是在当前的子网里?
- 【如果在同一个子网内】,数据可以直接发给目标主机;
- 【如果不在同一个子网】(即需要跨网),数据就必须“先找中介”——这个中介就是默认网关,也就是路由器。
此时,链路层会把目标 MAC 地址设置为网关的 MAC 地址,因为第一步是把数据先送到网关。
7.2.2 路由器出手,开始“中转旅程”
路由器收到这个数据包后,会:
- 去掉原来的链路层封装(MAC 报文头)
- 看看 IP 层,目标地址是哪里;
- 决定下一站要把包送给谁(下一跳)
- 重新封装链路层信息(新的 MAC 地址),然后继续往前发送。
这一步一步,就像接力赛,每经过一台路由器都会重新“打包”一次,直到数据最终抵达目标主机所在的网络。
7.2.3 路由器帮我们“翻译”底层差异
- 【问题】:不同设备、不同网络可能使用不同的物理协议(比如以太网、Wi-Fi、令牌环……),那怎么才能互通呢?
- 【答案】:路由器能听懂所有“方言”!
它能识别并处理不同链路协议,只需在每跳中重新封装 MAC 信息,就能屏蔽掉底层的差异。这样:
- 不管你是用手机、平板还是电脑;
- 不管你用的是 Wi-Fi 还是网线;
只要你接入了路由器,它就能让你和任何网络中的设备通信。