为什么802.11确认帧没有源MAC地址?

8
有人知道为什么802.11确认帧没有源MAC地址吗?我从Linux上使用monitor-mode和promiscuous-mode驱动程序捕获TCPDUMP或Wireshark数据包时没有看到它。如果帧中没有源MAC地址,接入点如何区分来自不同802.11客户端的ACK帧?
我可以从所有的捕获包中看出,在发送帧后立即收到ACK(大约10到30微秒),但这本身不能足以区分来源,难道不是吗?也许每个帧都有某种唯一标识符,而ACK帧在其中具有此ID?也许在加密负载中有识别信息,因为WLAN使用WPA-PSK模式?

这并不是一个编程问题。你可能在 serverfault.com 上会更有好运,那是一个与网络相关问题有关的 StackExchange 网站。 - Semicolons and Duct Tape
可以使用更具体的http://networkengineering.stackexchange.com或http://security.stackexchange.com,而不是SF。 - peterh
4个回答

10

不,802.11 MAC ACK帧中没有任何加密内容。

802.11是一种争用协议,即不同的STA和AP都在相同的信道[频率]上通过时间共享媒介。想要传输的设备会竞争媒介,赢得媒介的设备开始传输。

根据802.11规范,一旦帧已经在空气中,下一个“SIFS”时间段媒介应该是空闲的。也就是说,没有人被允许传输。在SIFS结束时,单播帧的接收方应该发送ACK。这是规定。

802.11中的SIFS [短间隔时间]对于基于OFDM的802.11实现[802.11 G、A]约为10微秒。如果我没记错的话,802.11b则约为20微秒。这就是你在TX和ACK之间看到10或30微秒的原因。

因此,每个人都知道谁正在传输ACK以及ACK是给谁的。所以不需要包含源地址,它是隐含的。

为什么不包括源地址? 为了减小帧大小并节省功率。

希望有所帮助。如果您对此还有更多问题,请随意提问。


1

ACK帧,像所有的802.11管理帧一样,在其MAC头中有一个DA(目标地址)和SA(源地址)(两者都不应该与“MAC地址”混淆,请参见下文),在这个上下文中只需要这些。

TLD;DR:在802.11上下文中,“MAC地址”, SA(源地址),TA(发送器地址),DA(目标地址),BSSID或其他所有内容看起来都像我们从其他技术中熟悉的6字节“MAC地址”,但它们不应混淆。

现在来拆除802.11上下文中的“MAC地址”概念。

802.11确认帧是802.11管理帧的一部分,而802.11是“一组媒体访问控制(MAC)和物理层(PHY)规范”(source)。

这意味着什么 - 这是在处理Wi-Fi时非常重要的概念 - 就是802.11本身,包括其管理帧,与“传统”的(例如802.3,即以太网)PHY(第1层)或MAC(第2层)层无关 - 它们是一种独特的类型。

继续使用这个类比 - 或者说反例 - 802.3 / Ethernet没有ACK帧、信标、探测请求、RTS / CTS、认证/去认证、关联等,这些都是802.11管理帧的类型。这些在802.3中根本不需要,主要是因为有线以太网不是共享媒体(这是IEEE术语),这可能会导致不可靠性/冲突,而802.11 / Wi-Fi则是如此。

这个重要的结果是,你不应该预先期望遇到其他更熟悉的概念或来自其他第1/2层技术的数据。 忘记这个,一劳永逸。

当涉及到ACK等管理帧时,Wi-Fi看起来像是携带一些MAC、IP、TCP、UDP或其他内容,大多数情况下确实如此。然而,802.11可完美地用于携带比TCP/IP更高级别的协议,并且在某些利基用例中可能已经在使用。其MAC概念尽管具有6个字节的熟悉外观,但在其形式和用途上不应与802.3 /以太网的MAC混淆。另一个例子是802.15(也称为蓝牙),其MAC也有6个字节,但这又是另一回事。

相反,以802.11为例,802.11层1/2的信标帧携带了一些关于SSID、支持速率、跳频(FH)、参数集等信息,这在其他L1/2技术中没有对应物。

现在,接受802.11中“MAC地址”的复杂性吧......

这就是为什么在日常使用中,比如 pcap/tcpdump ,会有一些奇怪的过滤器,例如 wlan rawlan tawlan addr1wlan addr2wlan addr3wlan addr4 等等,以及类似于 wireshark 的捕获和显示过滤器。


0

没错,George..!!

在MAC格式中,NAV计时器是这样更新的,而数据帧的NAV则是在传输时更新的,它会更新:

数据帧 + SIFS + ACK + SIFS

因此,在这段时间内只有一个AP<--->站点在通信,所有人都在等待清除NAV时间段,因此不需要添加源地址,因为这会浪费帧字节。


0

我遇到了同样的问题,并在互联网上看到了这个stackoverflow的问题。

如果你仔细想想,如果stationA正在等待来自stationB的确认,那么这意味着stationA已经相当长时间地保护/锁定了媒介(参见Jaydeep的答案),即(假设这两个站点之间没有后续传输)足够时间为2SIFS + 1ACK。

因此,没有其他站点发送任何帧(即ack在这里),不需要区分ack。

只是StationA正在等待在那个时间窗口从stationB收到确认。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接