我的意思是,我知道每个数据包都是通过 MAC 地址发送的,但是流式传输呢?
如果当路由器正在接收一个数据包时,来自另一个设备的数据包到达,会发生什么情况?
路由器如何知道与天线碰撞的光子是第一个数据包的一部分还是第二个数据包的一部分?
或者是因为光速太快,这种情况几乎不会发生,而数据包只是被报告为损坏并再次发送?
答案1
在无线网络中,实际上每次只有一个设备在“说话”。其他设备会监听并等待该信道上的空气安静下来后再说话。这种技术称为避免冲突的载波侦听多路访问 (CSMA/CA)
RTS/CTS 交换通过为一个节点提供一种方式来对其他每个节点说“嘿,我要讲这么长时间,所以请等这么长时间”,从而帮助所有节点有效地保持同步。
@Petr Abdulin 是正确的,但我认为所有 Wifi 网络都使用 CSMA/CA。旧的 10BaseT 非交换有线网络依赖于带冲突检测的载波侦听多路访问 (CSMA/CD). 在所有节点都连接到交换机的网络上不会发生冲突。
答案2
如果两次传输互相干扰(碰撞),那么两次传输都会被破坏,并且会在随机延迟后重新传输,从而降低重复碰撞的风险。
答案3
如果当路由器正在接收一个数据包时,来自另一个设备的数据包到达,会发生什么情况?
直接的后果是一些重叠的位被破坏。通常,很多位被破坏,接收器会发现帧校验序列不匹配,然后接收器会直接丢弃坏数据,并表现得好像它没有听到任何数据包一样。
后来,更高级别的协议最终注意到数据包尚未被确认(ACK)并重新发送该数据包。
但是,WiFi 标准包含许多防止此类冲突的不同方法,其中包括:
大多数版本的 WiFi 使用 COFDM 或其他扩频 + 额外纠错位的组合。如果你很幸运,只有几个位被翻转,那么所有这些位都可以在接收器处得到纠正,并且一的数据包均顺利通过。
正如 LawrenceC 指出的,大多数版本的 WiFi 使用载波侦听多路访问避免碰撞(CSMA/CA):无线接入点协调与其通信的所有笔记本电脑,以便(通常)每次只有一个设备进行传输,因此(通常)不会发生冲突。(有时您仍会遇到与尝试与其他无线接入点通信的其他笔记本电脑的数据包发生冲突,或与其他各种设备发生干扰的情况)。
那么流媒体呢?
那又怎么样?
当笔记本电脑播放音频流(或视频流;1080p 视频流大约为 5 Mbit/s)时,发送方会将其作为一系列小数据包发送。现代通信硬件速度很快(802.11a 的传输速度超过 20 Mbit/s,而较新的 Wi-Fi 标准甚至更快),因此发送到该笔记本电脑的一个数据包与发送到同一台笔记本电脑的下一个数据包之间存在(相对)较长的间隔。
在每个数据包之间,无线接入点有足够的时间将数据包发送到其他几台笔记本电脑,监听这些笔记本电脑偶尔发送的确认先前传输的数据包并请求下一个流,甚至在发生冲突或其他错误时偶尔重新发送数据包。
如果所有这些笔记本电脑都与同一个接入点通信,那么接入点就会协调传输,以便每次只有一个设备进行传输。
如果其中一些笔记本电脑正在与一个接入点通话,而其他笔记本电脑正在与其他(不协调的)接入点通话,并且所有这些设备都位于足够近的位置,以至于它们可以轻松地互相听到,那么就会频繁发生冲突。
任何发生冲突的数据包都会被重新传输。通常,重新传输的数据包最终会在播放之前很久就通过,因此没有人会注意到存在问题。因此(通常)每个人都会产生一种错觉,觉得自己拥有“连续”的专用流。