2.1 通信分层模型:协议栈怎么搭


2.1 通信分层模型:协议栈怎么搭

以"为什么要把通信拆成一层一层"为线索,讲清物理层、链路层、网络层、传输层、应用层的分工与协作,让第二章的抽象模型落到可对号入座的结构。读完后你将以"它在哪一层"的视角看待后续所有协议。

学习目标

阅读完本节,你应当能够:

  1. 说出分层的两条根本收益:职责分离与接口稳定。
  2. 为 MQTT、CoAP、TCP、IPv6 四个协议各标出所属层次。
  3. 解释"封装"与"解封装"在一次传输中的发生过程。

一、为什么非要拆成一层层

一条报文要跨越几公里电磁空间到达平台,中间涉及的难题各不相同:电信号怎么在空气里传播、多台设备怎么轮流用同一个信道、地址怎么在全球唯一标识、数据是否要保证不丢不乱、业务字段该用什么格式表达。如果所有问题揉进一个巨大的程序,那这个程序几乎无法分工、无法替换、无法排错。计算机科学的老办法登场——分而治之。把通信拆成一串"层",每一层专心解决一类问题,层与层之间只通过约定的接口打交道。

分层有两条一眼可见的好处。一是可替换:物理层从 2.4GHz 换成 900MHz,上面几层完全不动;应用层从 JSON 换成二进制,下面几层毫不知情。二是可排错:报文传丢了,可以一层层缩小范围,而不必整坨程序里乱翻。这也是为什么二三十年前设计的 TCP/IP 模型今天依然坚挺——它没被推翻,是因为分层把"进步"隔离在了一层之内。

二、一列"对号上车"的层次

把物联网报文从下往上数,一般是这样的五层(对应功能的通俗称法,与教科书命名略有出入但无害):

  • 物理层:管比特流怎么变成电磁波,决定频段、调制方式、速率与功耗的物理极限。Wi-Fi、BLE、LoRa 的"介质差异"都在这一层定调。
  • 数据链路层:负责同一个接入网络里设备之间的帧传递、介质访问控制(谁能说话、何时说)与差错检测。它把"隔壁那台设备"管起来。
  • 网络层:负责跨网络的寻址与路由,让报文能从本地网到达千里之外,靠的是 IP 地址。
  • 传输层:在端到端之间提供可靠或不那么可靠的搬运。TCP 保证不丢不序,UDP 追求快、简单、开销小。
  • 应用层:承载真正的业务协议,把业务字段组织成可理解的格式。MQTT、CoAP、HTTP 都在这一层工作。

物联网设备往往"头部极简":受功耗与内存限制,很多节点只实现了"应用层 + 传输层 + 链路层/物理层"三层,连完整的 TCP/IP 栈都不必全有。看清这一点,你就明白为什么低功耗广域技术常自带一层轻量替代,而不死磕标准 TCP/IP——资源不允许。

三、一次传输,两次"套娃"

把报文发出去一次,实际上是这样层层加工的:

  1. 应用层把业务数据(读数、状态)打包成一个有效载荷。
  2. 传输层给它加上头部(端口、序号、校验),必要时分片。
  3. 网络层再套上一层 IP 头(源/目的地址)。
  4. 链路层再上前导字段与帧校验。
  5. 物理层把最终字节流调制成电磁波发出。

对端收到后反向操作,一层层剥壳,直到应用层拿到原始业务数据。这个过程叫"封装"与"解封装"。它解释了为什么协议之间能"戴帽子式"地叠加,也解释了为什么报文越大,能装业务数据的百分比越低——每一层都在吃一点字节。

用 ASCII 把这人头一只只戴上,看得最直观(每一格嵌套就是一层新标签):

| 物理头 | 链路头 | IP 头 | TCP 头 | 应用数据(读数/状态) | CRC | | | | 源/目的 | 端口序号 | MQTT 的载荷 | | | 比特/频段 | 帧校验 | IP地址 | 可靠搬运 | 业务字段 | 检错 | +--------+--------+-------+-------+---------------------+-----+

每往左戴一层头,真正业务数据所占比例就掉一截。一根只有 50 字节的 LoRa 净荷,若被强套完整 IP+TCP 头,光头部就能吃掉大半预算——这就是为什么受限设备宁可砍掉中间两层、甚至整个转到二进制,也不用"万事万物跑 HTTP over TCP over IP"的笨办法。你越往后读第六章,越能体会这种"戴帽子"的代价是被一字节一字节算出来的。

四、物联网里的"偷工减料"

资源极度匮乏的物联网节点,常对分层"开刀":

  • 低功耗广域技术(LoRa、NB-IoT 等)走简化栈:应用层 + 传输/网络简化 + 物理层,省掉完整 IP 层的开销。
  • 端与端之间可能只有一跳(节点→网关),这时网络层的路由功能会被网关顶替,节点不做完整寻址。
  • 应用层协议被裁剪成二进制而非文本,以省字节——这正是第六章 MQTT、CoAP 在字节上精打细算的理由。

这些"偷工减料"不是偷懒,而是权衡:在字节都金贵的受限设备上,能用最少的层解决端到端业务,就绝不背完整协议栈的包袱。

一层问题,一层解法

工程里有个省心得用的习惯:排错先问"问题出在第几层"。物理层连不通,改硬件与频段;链路层乱序,查帧与介质访问;网络层到不了,查 IP 与路由;传输层丢包,查 TCP 重传与拥塞;应用层解析错,查协议格式。一层一层收敛,往往比无头苍蝇在整坨程序里乱翻快得多。

这个"分层定位"的思路放到后面依然成立——第六章读任何一个协议(MQTT、CoAP、TCP…),都先问它写在"哪一层",再谈它的参数与格式。所谓读得懂协议栈,不过是早已习惯"问题都各有各的楼"这件事。

本节要点回顾

  • 分层的两收益:职责分离、可替换,是 TCP/IP 模型历久弥新的根因。
  • 五层职责:从物理到应用,每层只解决一类问题。
  • 封装套娃:层层加头、对端层层剥壳,与后面"字节开销"的讨论直接相关。
  • 物联网瘦身:受限节点常裁剪标准栈,用简化层换取功耗与内存。
  • 为后文铺路:后续每个协议都可先问"它在哪一层"再读细节。

分层是"纵切"通信,网络拓扑是"横铺"物理连接——下一节看节点在空间上如何摆放、互联成什么形状。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U