1. 网络基础与OSI模型

各位同学,咱们今天聊聊网络基础。说实话,我见过太多嵌入式工程师,写驱动一把好手,一碰到网络协议栈就头大。其实没那么可怕,关键是把地基打牢。

网络是什么?说白了,就是让两台设备能互相说话。你想想看,一个传感器要把数据传给服务器,中间要经过多少环节?这就是我们今天要拆解的东西。

1.1 计算机网络的本质

计算机网络,就是把分散的计算机通过通信设备和线路连起来,实现资源共享和数据传输。嗯,这个定义很官方。我更喜欢这么说:网络就是让设备之间能「听懂」对方的话

我在项目中遇到过一件事:两个设备明明物理上连好了,就是通不了。查了半天,原来是数据格式不匹配。一个用大端,一个用小端。你看,这就是网络协议要解决的问题——大家得约定好怎么说话。

核心要点:网络协议就是通信的「交通规则」。没有规则,数据就会乱成一锅粥。

1.2 OSI七层模型详解

OSI模型,国际标准化组织搞出来的。七层,从下往上分别是:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。

记不住?我有个口诀:「物链网传会表应」。你品,你细品。

层级 名称 核心功能 常见协议/设备
第7层 应用层 用户直接交互的接口 HTTP、FTP、SMTP
第6层 表示层 数据格式转换、加密解密 SSL/TLS、JPEG
第5层 会话层 建立、管理、终止会话 NetBIOS、RPC
第4层 传输层 端到端可靠传输 TCP、UDP
第3层 网络层 路由选择、逻辑寻址 IP、ICMP、ARP
第2层 数据链路层 帧封装、MAC寻址、差错检测 以太网、PPP、交换机
第1层 物理层 比特流传输、电气特性 网线、光纤、集线器

每一层都有它的职责。我习惯把OSI模型想象成一个快递公司:

  • 物理层:就是快递员和货车,负责把包裹运过去
  • 数据链路层:分拣中心,检查包裹有没有破损
  • 网络层:调度中心,决定走哪条路最快
  • 传输层:客服,确保包裹完整到达
  • 会话层:跟客户确认「你还在吗?」
  • 表示层:翻译,把中文说明书转成英文
  • 应用层:你下单的APP

我的经验:做嵌入式开发,重点掌握1-4层就够了。应用层协议看项目需求。会话层和表示层,说实话,大部分场景下TCP/IP协议栈已经帮你搞定了。

1.3 TCP/IP四层模型对比

OSI模型很完美,但太理想化了。实际互联网用的是TCP/IP模型,只有四层:

  • 网络接口层:对应OSI的物理层+数据链路层
  • 网络层:对应OSI的网络层
  • 传输层:对应OSI的传输层
  • 应用层:对应OSI的会话层+表示层+应用层

你看,TCP/IP把上面三层合并了,下面两层也合并了。为什么?因为实际用起来,会话层和表示层的功能往往被应用层自己实现了。比如HTTP协议里就自带了一些会话管理功能。

我曾经在做一个物联网项目时,用TCP/IP协议栈对接一个老设备。那个设备只支持OSI模型,结果两边对不上。最后我在应用层加了个适配层,才把问题搞定。嗯,这就是理论和实践的差距。

OSI七层模型 TCP/IP四层模型 典型协议
应用层、表示层、会话层 应用层 HTTP、FTP、DNS、MQTT
传输层 传输层 TCP、UDP
网络层 网络层 IP、ICMP
数据链路层、物理层 网络接口层 以太网、Wi-Fi、PPP

避坑指南:我曾经在面试嵌入式工程师时,发现很多人把OSI和TCP/IP搞混。记住:OSI是理论模型,TCP/IP是实际实现。面试官问「数据链路层」,你答以太网帧结构,没问题。但如果你说「OSI的数据链路层对应TCP/IP的网络接口层」,那就更专业了。

1.4 数据封装与解封装过程

这是整个网络通信的核心。数据从应用层往下走,每经过一层,就加一个头部。这叫封装。到了接收端,从下往上走,每层剥掉一个头部,这叫解封装。

我画个图给你看:

发送端:
应用层数据:    [HTTP请求体]
传输层:        [TCP头部][HTTP请求体]
网络层:        [IP头部][TCP头部][HTTP请求体]
数据链路层:    [以太网头部][IP头部][TCP头部][HTTP请求体][FCS校验]

接收端:
数据链路层:    剥掉以太网头部,检查FCS
网络层:        剥掉IP头部,检查目标IP
传输层:        剥掉TCP头部,检查端口号
应用层:        拿到HTTP请求体

为什么会这样?因为每一层只关心自己的事。数据链路层不管你是HTTP还是FTP,它只管把帧从A传到B。网络层不管你是TCP还是UDP,它只管把包路由到目的地。

我刚开始学的时候,总觉得这样效率太低。加这么多头部,不浪费带宽吗?后来做项目才明白,这种分层设计最大的好处是解耦。你想换传输层协议?把TCP换成UDP,上层应用代码几乎不用改。你想换物理层?从以太网换成Wi-Fi,上层协议栈完全不受影响。

关键理解:每一层都只跟对等层通信。发送端的传输层跟接收端的传输层「对话」,中间的网络层只是帮忙传数据。这就是「对等通信」的概念。

举个例子。你在浏览器输入一个网址:

  1. 应用层(HTTP):构造一个GET请求
  2. 传输层(TCP):把请求分成数据段,加上端口号
  3. 网络层(IP):加上源IP和目标IP
  4. 数据链路层(以太网):加上MAC地址,计算校验和
  5. 物理层:变成电信号发出去

接收端反过来,一层层剥开,最后拿到HTTP请求,返回网页内容。

我记得有一次调试一个网络问题,数据就是发不出去。用Wireshark抓包一看,以太网帧的FCS校验一直报错。查了半天,是物理层的电平有问题。你看,问题出在最底层,但表现是应用层连不上。这就是为什么要理解整个协议栈——问题可能出现在任何一层

实用建议:做嵌入式网络开发,建议你学会用Wireshark抓包分析。它能帮你看到每一层的数据封装情况。我每次遇到网络问题,第一件事就是抓包。数据不会骗人。

好了,这一章的内容就到这里。网络基础是后面所有章节的基石。你想想看,不理解数据封装,后面学TCP三次握手、IP路由、ARP协议,都会觉得云里雾里。所以,这一章一定要吃透。

下一章,我们聊聊物理层和数据链路层。嗯,就是网线、MAC地址、交换机这些东西。到时候我会分享一个我调试以太网PHY芯片的踩坑经历,保证让你印象深刻。