我可以从所有的捕获包中看出,在发送帧后立即收到ACK(大约10到30微秒),但这本身不能足以区分来源,难道不是吗?也许每个帧都有某种唯一标识符,而ACK帧在其中具有此ID?也许在加密负载中有识别信息,因为WLAN使用WPA-PSK模式?
不,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是给谁的。所以不需要包含源地址,它是隐含的。
为什么不包括源地址? 为了减小帧大小并节省功率。
希望有所帮助。如果您对此还有更多问题,请随意提问。
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 ra
、wlan ta
、wlan addr1
、wlan addr2
、wlan addr3
、wlan addr4
等等,以及类似于 wireshark
的捕获和显示过滤器。
没错,George..!!
在MAC格式中,NAV计时器是这样更新的,而数据帧的NAV则是在传输时更新的,它会更新:
数据帧 + SIFS + ACK + SIFS
因此,在这段时间内只有一个AP<--->站点在通信,所有人都在等待清除NAV时间段,因此不需要添加源地址,因为这会浪费帧字节。
我遇到了同样的问题,并在互联网上看到了这个stackoverflow的问题。
如果你仔细想想,如果stationA正在等待来自stationB的确认,那么这意味着stationA已经相当长时间地保护/锁定了媒介(参见Jaydeep的答案),即(假设这两个站点之间没有后续传输)足够时间为2SIFS + 1ACK。
因此,没有其他站点发送任何帧(即ack在这里),不需要区分ack。
只是StationA正在等待在那个时间窗口从stationB收到确认。