Wi-Fi协议中的SDU与PDU:从MSDU到PPDU的封装之旅
2026/9/19 2:06:22 网站建设 项目流程

做Wi-Fi协议分析这几年,我见过不少人在群里问同一个问题:Wireshark抓包里明明看到的是MSDU、MPDU、PSDU、PPDU,怎么一搜“PDU”却搜出一堆机架式电源分配单元?更夸张的是,真有人拿着公牛GNE-108E的电源PDU跑到无线技术帖里问这跟Wi-Fi有什么关系。这种术语撞车确实容易让人一头雾水,但抛开这些乌龙不说,SDU和PDU这两个缩写背后那套“分层封装”的逻辑,才是理解Wi-Fi协议栈真正绕不开的一道门槛。

这篇文章我从实际排查Wi-Fi问题的工作视角出发,把SDU和PDU到底是什么、在协议栈里怎么流动、抓包时怎么从帧结构里认出它们、以及帧聚合技术如何改变了它们的形态一次讲透。不管你是刚开始学802.11的初学者,还是在做无线抓包分析、吞吐调优的从业者,这篇文章都能帮你把脑子里那根数据流转的链路彻底理顺。

1. 从“快递打包”看SDU与PDU的本质

1.1 SDU是楼上递下来的材料,PDU是楼下递出去的包裹

SDU的全称是Service Data Unit,服务数据单元;PDU的全称是Protocol Data Unit,协议数据单元。这两个缩写看起来高大上,其实用快递打包的逻辑理解起来特别简单。

把协议栈想象成一栋写字楼。楼上部门写了一份报告要送出去,它不会自己光着纸跑下楼,而是把报告装进一个快递信封,填好收件人、寄件人信息,交给楼下收发室。在这个交接过程中,楼上部门交给楼下部门的原始报告,就是SDU;而装好信封、写好了地址信息的完整邮件,就是PDU。收发室收到这封邮件后,如果要跨城市运输,它还会把这封邮件再塞进一个更大的运输袋,贴上运输面单,交给快递公司。在快递公司眼里,那个运输袋加上面单又是一个新的PDU,而原来的邮件本身成了运输袋里的内容。

每一层做的事情本质上就是两件:把上一层交下来的数据当作货物,加上这一层的“面单”(协议头),然后交给下一层。区别只在“货物”和“面单”在不同层里分别叫什么名字。

1.2 同一个数据,换一个视角就换一个名字

很多人搞混SDU和PDU,就是因为他们抓住一个名词不放,却忽略了“从哪个层的视角看”这个关键前提。

打个比方。你作为项目负责人,把一份设计方案传给设计师,这份方案在你这边叫“需求文档”。设计师拿到手之后,把它和配色、字体说明一起打包,变成“设计任务单”发给执行团队。在项目负责人看来,你交出去的是需求文档;在设计师看来,他接收的是需求文档,交出去的是设计任务单。同一份材料,在交接线两侧叫法完全不同。

SDU和PDU也一样。第N层从第N+1层接收数据,这份数据对第N层来说是SDU;第N层把它加上自己的协议头(有时还有协议尾)封装好,得到的是第N层的PDU,再往下传给第N-1层。也就是说,对于接收方层来说,它从下层拿到的是一个PDU,但这个PDU的载荷部分,恰恰就是它要解析出来交给上层的SDU。

一句话总结:SDU是“我要送的东西”,PDU是“包装好之后可以送出去的东西”。方向感一定要建立起来,否则后面看Wi-Fi那一串带M、带P的缩写时,还是会晕。

1.3 上一层的PDU必然是下一层的SDU

这句话是理解协议栈分层的枢纽。为什么?因为协议栈相邻两层之间的接口,对“货物”的叫法天然不同。

以太网传输一个IP包时,IP层把IP包封装好后交给数据链路层,对IP层来说它是IP层的PDU,但在数据链路层眼里,这个IP包只是自己需要承载的SDU。数据链路层给它加上MAC头尾,变成数据链路层的PDU,再往物理层交,物理层又把它当作自己的SDU来处理。所谓“上一层的PDU是下一层的SDU”,不是说数据被复制了一份,而是站在不同楼层的人给同一份数据起了不同的名字。

把这个思路放到Wi-Fi里,你就能明白为什么会有MSDU、MPDU、PSDU、PPDU这一串让人眼花缭乱的缩写——它们不是五种不同的数据,而是同一份用户数据在穿过MAC层和PHY层这几道工序时,不同视角下的名字。

2. Wi-Fi协议栈里的四兄弟:MSDU、MPDU、PSDU、PPDU

2.1 MAC层入口:MSDU是什么来头

Wi-Fi工作在OSI模型的数据链路层和物理层,具体到802.11协议栈,最常打交道的是MAC层(介质访问控制层)和PHY层(物理层)。MAC层往上,通常连接的是LLC层(逻辑链路控制层),LLC层负责复用和标识上层协议,比如我们最熟悉的IP报文就是被LLC封装后交给MAC层的。

MAC层从LLC层手里接到的数据,就叫MSDU,MAC Service Data Unit,也就是MAC层的服务数据单元。注意,MSDU的本质往往是完整的LLC帧,里面封装着IP包,但在MAC层这里,它只是等待被包装的“货物”。

有一种很常见的误解,认为MSDU必须是一个完整的Ethernet帧。确实,Wi-Fi数据帧的Frame Body里装的通常是LLC封装的Ethernet帧,但这只是最常见的情况。严格来说,MSDU的定义是“MAC层从上层收到的、需要由MAC层服务来传输的数据单元”,它有时是Ethernet帧,有时也可能是其他上层协议数据。但从抓包实战看,你直接把MSDU理解成“那包用户数据”就够了。

2.2 MAC层出口:MPDU是加了Wi-Fi脑袋的用户数据

MAC层收到MSDU后,不能光着膀子把它扔到空气里,必须给它装上802.11的MAC头,让接收方知道这帧是谁发的、发给谁、属于什么类型、序列号是多少、要不要分段等等。包装完成后的结果就是MPDU,MAC Protocol Data Unit,MAC层协议数据单元。

一个标准MPDU的结构大致是:

  • MAC Header:包含Frame Control、Duration/ID、Address1到Address4、Sequence Control、QoS Control等字段
  • Frame Body:就是承载的MSDU内容(或者A-MSDU内容,后面会讲)
  • FCS:帧校验序列,放在尾部,用来检测这帧在空中传输时有没有被破坏

为什么802.11的MAC头里有4个地址字段,而Ethernet只有源和目的两个地址?因为Wi-Fi是无线链路,一帧数据从发到收,中间涉及的不只是源和目的,还有可能在两个AP之间桥接,或者涉及无线客户端和AP之间的BSSID标识。所以Address1是接收地址、Address2是发送地址、Address3是最终目的地址或源地址(取决于帧方向),Address4只在WDS(无线分布式系统)桥接场景下才出现。这正是MPDU区别于传统以太网帧的重要特征。

2.3 PHY层:PSDU交给物理层,PPDU才真正上天

MPDU封装完成后,会向下传给PHY层。但这时候它又换名字了,叫PSDU,PHY Service Data Unit,物理层服务数据单元。本质上,PSDU就是MAC层送过来的MPDU,只是站在PHY层的视角看,它是等待被物理层封装的货物。

PHY层拿到PSDU,同样不会直接发射比特流,而是要加物理层自己的“脑袋”——前导码(Preamble)和PLCP头(Physical Layer Convergence Protocol Header)。PLCP头里写明了这帧用的是什么调制方式、传输速率、长度信息,接收端才能正确解析后面的数据。前导码的作用则是让接收端的射频电路完成信号同步。前导码、PLCP头、PSDU三者合在一起,才构成真正在空气里传播的PPDU,PHY Protocol Data Unit,物理层协议数据单元。

所以整条链路用一句话概括就是:用户数据 → MSDU → MPDU → PSDU → PPDU。后者总是前者加了一层“包装”的结果。你只需要记住,MAC层上面叫MSDU,MAC层下面是MPDU;PHY层上面叫PSDU,PHY层下面是PPDU,这个对应关系就再也丢不了了。

3. 帧聚合机制下,SDU和PDU的形态发生了哪些变化

3.1 聚合的动机:一帧传一包太浪费

早期的802.11a/b/g时代,每传一个数据帧,链路都需要先竞争信道(包括DIFS等待和随机退避),传完后接收方还要回复ACK,这个ACK又得再等一个SIFS短帧间隔。每个MSDU都这么单独走一遍完整流程,真正的数据吞吐效率其实低得可怜,尤其是在小包很多的场景下,大量时间都耗在了“排队等红灯”上。

你可以想象一下:从办公室到仓库,每取一份文件你都得走一遍完整的下楼、过门禁、上车的流程,取一百份文件要重复一百次。如果能把一百份文件一次性塞进一个拖车拉走,效率翻几倍。Wi-Fi的MAC层和PHY层也正是在这个问题上动了脑筋,这就是帧聚合(Frame Aggregation)。

3.2 A-MSDU:多个SDU共享一个MAC头

A-MSDU,全称Aggregate MSDU,是在MAC层上方做文章。它把多个MSDU拼接成一个更大的数据块,这个数据块整体作为MPDU的Frame Body,只加一次MAC头和FCS,成为一整个大MPDU发出去。

A-MSDU的每个子帧结构是:

  • Subframe Header:包含目的地址DA、源地址SA和长度Length
  • Data:一个完整的MSDU
  • Padding:按4字节对齐填充,保证接收方能整齐地切分各子帧

正常情况下A-MSDU最多可以封装7935字节的载荷,能塞下很多小数据包。它的价值在于节省了MAC头的重复传输,也减少了竞争信道的次数。但它的短板也很明显:因为整个A-MSDU被当作一个MPDU来传输,如果空中传输过程出现错误,FCS校验不过,整个大帧就得整体重传,无法只重传其中某一个受损的小MSDU。

3.3 A-MPDU:多个MPDU各自保留脑袋,物理层打包

A-MPDU,全称Aggregate MPDU,思路和A-MSDU完全相反。它不碰MSDU,而是在MPDU层面做聚合,把多个完整的MPDU(每一个都带自己的MAC头和FCS)拼装成一个大的PSDU,交给PHY层封装成PPDU发送。MPDU之间用MPDU分隔符隔开,分隔符里记录着这个MPDU的长度和校验信息。

A-MPDU的好处是每个MPDU自带FCS,接收端可以逐一判断哪个子帧坏了。配合Block ACK机制,发送端只需要重传那些真正传错的MPDU,而不是把整个聚合块都推倒重来。这也是为什么在高吞吐的802.11n/11ac/11ax时代,A-MPDU成为提升Wi-Fi吞吐量的主力手段。

3.4 A-MSDU和A-MPDU的一组对比,选型思路更清晰

对比维度A-MSDUA-MPDU
聚合对象多个MSDU多个MPDU
MAC头数量全部子帧共用一个MAC头每个MPDU保留各自的MAC头
整体开销更小,头部压缩效果明显较大,但每个子帧独立可校验
错误恢复一个MPDU出错,整体重传或丢弃可定位到子MPDU,按需重传
典型组合常用于小包密集、时延敏感场景常用于高带宽、大流量传输场景

实际设备上两者经常叠加使用:先把多个MSDU聚合为A-MSDU,再把包含A-MSDU的多个MPDU聚合成A-MPDU。这样既省了MAC头,又保留了逐个MPDU确认的能力。理解这一点之后再看抓包文件里那些长达一两千字节的数据帧,你就知道里面其实打包了不止一个用户数据包。

4. 在Wireshark抓包里,怎么一眼认出SDU和PDU的不同形态

4.1 抓Wi-Fi的PDU需要先切换到监听模式

很多人在Windows下用普通无线网卡抓包,打开Wireshark看到的都是Ethernet帧,而不是802.11帧。原因很简单:普通模式下,网卡驱动已经完成了解封装,把收到的802.11帧还原成Ethernet帧再上交操作系统,你根本看不到MAC头,更别提MPDU、管理帧这些原始形态了。

想看到真正的MPDU和PPDU相关信息,需要把无线网卡切到监听模式(Monitor Mode)。在Linux下一般这样操作:

sudo ip link set wlan0 down sudo iw dev wlan0 set type monitor sudo ip link set wlan0 up

切完后Wireshark就能抓到带802.11 MAC头的帧。但要注意,不是所有网卡都支持监听模式,Intel的部分无线网卡在Linux下可以,很多Realtek芯片的USB网卡需要额外装驱动,而某些厂商的网卡固件直接锁死了监听能力。如果你是想长期做Wi-Fi抓包分析,建议备一块官方支持监听模式的USB无线网卡,不然在驱动上会浪费大量时间。

4.2 一帧一帧拆解:从Radiotap到MAC头到Data

在Wireshark里打开监听模式抓到的包,你会发现每一帧都有固定的几个解剖层。

首先是Radiotap头,它记录了物理层的信息,比如信道频率、信号强度、数据速率、MCS索引、是否属于聚合帧等。这就是你离PPDU最近的地方,因为在普通抓包方式下,Wireshark拿到的是经过物理层处理后交给上层的PSDU数据,前导码和完整的PLCP头已经由硬件消费掉了,Radiotap头里保留下来的只是物理层参数的“收据”。

然后是802.11 MAC头,这就是MPDU的身份证明。展开后能看到Frame Control里记录着帧类型(管理帧/控制帧/数据帧)和子类型,Address字段记录着接收地址、发送地址、BSSID等。再往下是Frame Body,这个区域承载的就是MSDU。如果你看到Frame Body里又套了多个DA/SA/Length子结构,说明这帧是A-MSDU聚合帧,Wireshark会专门把子帧拆开来展示。

4.3 一个真实抓包案例:看HTTP请求如何穿成穿那串术语

有一次排查手机连接AP后网页打开慢的问题,我用监听模式在AP旁抓了一个HTTP请求的完整交互。具体流程大致是这样的:

手机上的TCP层发一个HTTP请求,经IP封装后交给LLC层,LLC加上SNAP头封装成MSDU。这个MSDU进入MAC层后,被打进一个QoS Data帧(一种带有QoS优先级的802.11数据帧,即MPDU),Address1写的是AP的BSSID,Address2写的是手机的MAC地址,Address3写的是网关的MAC地址,QoS Control字段记录着访问类别的TID。如果此时AP启用了A-MPDU聚合,这个MPDU会和旁边几个MPDU拼在一起,变成一个大PSDU,再到PHY层被包装成携带MCS索引和带宽信息的PPDU发射出去。

在Wireshark里,你看到的就是一条“QoS Data”记录:Radiotap头里是速率和信道信息,802.11头里是四种地址,Data区域是一个完整的IP报文。把这几个字段串一遍,你就等于用肉眼完整走了一遍从MSDU到PPDU的封装之旅。

4.4 判断聚合是否生效:字段不会骗人

做Wi-Fi吞吐优化时,我经常在抓包里先看三个指标来判断聚合策略有没有生效:抓包文件里数据帧的平均长度、Radiotap头里是否出现A-MPDU聚合标志、以及Wireshark的“Analyze”菜单下的流量统计里有没有大量非数据开销帧。

如果信号强度很好,Ping延迟正常,但大流量下载时吞吐上不去,打开抓包一看每个数据帧的Frame Body都只有几百字节,而且几乎看不到A-MPDU聚合标志,那问题多半不在信号,而在驱动或AP配置把帧聚合关掉了,或者在用很保守的聚合参数。沿这条线索去查驱动日志、AP配置,往往比盲目调天线方向管用得多。

5. 别再把电源PDU和Wi-Fi的PDU混为一谈,顺便聊聊S7协议里的PDU

5.1 “PDU”这个缩写,在不同行业里是同一个词、完全不同的东西

因为PDU三个字母太通用,不同领域都拿它当缩写用,所以搜索“PDU”经常搜到完全无关的东西。最典型的就是机架式PDU电源分配单元,比如公牛GNE-108E这种1.8米电源线的机架式插排,它是给数据中心机柜里的服务器供电用的。这一类PDU是电力设备,不是网络协议数据单元,和服务数据单元SDU更是八竿子打不着。

还有一个热度不低的搜索词叫“西门子S7协议PDU”。S7是西门子PLC的通信协议,它跑在ISO-on-TCP之上,S7 PDU承载在TPKT的包体里。这里的PDU也确实是“协议数据单元”的意思,用于携带S7协议的请求和响应数据,但从协议栈归属来说,它是工业现场总线/工控网络里的概念,跟Wi-Fi 802.11里的PHY、MAC层PDU完全是两个体系。

这种“同名不同义”其实特别考验一个排查人员的术语敏感度。如果你看到一个技术文档出现PDU,第一反应一定不要默认它是某一种东西,而是先确认它出现在哪个协议栈、哪个层、哪个行业语境里。在Wi-Fi语境里聊PDU,你讨论的是802.11协议数据单元;在机柜配电语境里聊PDU,你讨论的是电源分配单元;在TIA/EIA综合布线里也有PDU这个缩写,那又可能是配线设备的意思。一字之差,概念差出整个行业。

5.2 初学者最容易踩的三个概念坑

第一个坑是把MSDU和MPDU的关系想成“一定一一对应”。没有帧聚合时确实一个MSDU装进一个MPDU,但启用A-MSDU后,多个MSDU被拼在一个MPDU里;启用A-MPDU后,多个MPDU又拼在一个PSDU里。所以看到MPDU就去猜里面只有一个MSDU,在11ac/11ax时代常常会猜错。

第二个坑是以为Wireshark能直接显示PPDU。说实话,普通网卡抓包后,Wireshark展示的更多是MPDU和MSDU层面的信息,PHY层的前导码和完整PLCP头已经由硬件消化掉了,你只能通过Radiotap头间接了解物理层参数。执着于在抓包里找到“完整PPDU”的bit级视图,是没有必要的。

第三个坑是不带参考层直接问“这个包是SDU还是PDU”。同一个包,站在LLC层看是LLC PDU,站在MAC层看是MSDU,站在PHY层看又是PSDU。你得先固定自己站在哪一层,才能给这段数据正确地命名,否则永远吵不明白。

5.3 把SDU和PDU搞清楚,Wi-Fi排障会顺手很多

我个人体会最深的是,SDU和PDU这套概念不是书斋里的名词游戏,而是排查Wi-Fi性能问题时的思维地图。比如你分析一个“信号满格但网速上不去”的问题,脑子里如果有MSDU→MPDU→PSDU→PPDU这条链路,你就会自然地去想:瓶颈出现在哪一次封装?是MAC层竞争开销太大,是帧聚合策略不对,还是PHY层速率因为环境干扰被迫降到了最低?不同的瓶颈位置,对应的调整手段完全不同。

之前调一个办公室无线的吞吐问题,信号强度始终在-45dBm左右,链路质量看起来很好,但出网测速就是跑不满。起初一直在AP天线和信道干扰上折腾,没什么起色。后来把AP侧抓包翻出来看,发现数据帧的聚合程度非常低,A-MPDU里经常只带两三个子帧,而且子帧全是小包。顺着这条线索查下去,发现是网关侧有大量TCP小包触发Nagel算法延迟,导致MSDU堆积节奏不佳,聚合器“无货可聚”。调整MTU和TCP确认机制后,聚合效率明显改善,吞吐也跟着上去了。这个过程里,如果没有“发送大包和聚合单位”的概念作指引,很容易在射频信号层面空转。

6. 最后分享一个自用的理解方法

如果你现在还是觉得SDU和PDU容易绕,我建议你做一个特别简单的动作:去Wireshark自带的示例抓包文件里找一条802.11数据帧,把它展开,把MAC Header里每一个字段都念一遍,然后在心里复述一遍“这是MPDU的开头,后面的Frame Body就是MSDU,Radiotap里的速率和带宽信息说明它曾经是一个PPDU的一部分”。亲手拆一帧,比看十篇理论推导都有用。

再补充一个技巧:在Wireshark里给802.11数据帧加一个显示过滤器,比如只显示QoS Data且长度大于1000字节的帧,你会很直观地看到聚合帧长什么样。挑几帧长度超过1500字节的,展开Data部分看它包含多少个小包,那一刻你对A-MSDU和A-MPDU的体会会比读任何文档都深。

Wi-Fi协议栈里的SDU和PDU,说难也难,毕竟缩写套缩写;说简单也简单,核心就是一句话:每一层把上一层的货物打包、贴上面单、交给下一层,一层一层传下去,到了对端再一层一层拆开。理解了这套封装和拆解的节奏,再看802.11里的各种术语,心里就有了一幅清晰的路线图。后面如果想进一步深入,可以从EAPOL握手看MSDU如何承载认证流程,也可以从Block ACK机制看MPDU如何被逐个确认,这些内容我们就留到系列后面再聊。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询