在最开始的wifi,也就是802.11b中,LENGTH是指的时间,按us单位的,但是后来的协议都把这个改了,改成字节数单位了。
说实话,802.11b的这个真的是操蛋的设计。为什么这么说,PHY不知道要接多少长度的数据,除非从时间再算一遍。这就显得很多余。
后面的所有协议因为都是字节单位,为了兼容802.11b,就需要在这两个东西之间转换。
让我们看看两者之间如何转换的。
发送端,确定字节数 -> 计算时间
接收端,接收时间 -> 计算字节数。
看着还好,不过,这是基于软件的思维。对硬件来讲就不一样了。为了避免使用浮点计算,其实使用整数的计算,也是够难为的了。而为什么不使用软件来计算?在802.11b,1999的这个年代,哪里来的软件来算这个?设备里面没得处理器的。
所以实际的情况是这么样的。
发送端, 确定字节数 -> 整数计算 -> 往上取整
接收端,接收时间 -> 整数计算 -> 向下取整
大概是这么个样子
由于存在取整偏差,如果偏差在接收端回算的过程中被放大超过1个整点,那么回算出来的长度值就是不准确的。
比如速率是11m, 那么发送端的伸缩因子是8/11, 接收端的伸缩因子是11/8,由于回算因子大于1,那么取整偏差将被放大,可能超过1个整点。
偏差大于8/11就会发生这种情况。