很多用户以及互联网开发、桌面应用开发者很可能难以理解,因为TCP/IP是最为人熟知的网络通信协议。但这是无线通信技术应用中的现实。
这个问题难以简单地回答,因为它是综合权衡多方因素之后的结论。篇幅所限,我们就用尽可能简短的方式来说清楚这个问题。
IP协议是一种连续传输固定格式数据包的协议。IP协议针对有线网络设计,有线网络的特点是信道质量稳定,数据率非常高, 适合传输大量数据。图1给出了IP数据包的格式,标明了包内部各个字段的字节长度。
图-1 IP数据包结构可以看出,一个IP数据包至少包含20个字节的固定包头,用于IP协议控制和寻址。这部分内容对于实际传输的用户数据来说是没有用处的,因此这个包头的字节长度代表了传输一定量的有效数据所需付出的代价,也称为开销(overhead)。数据包中除了包头以外的有效用户数据被称为净载(payload)。开销大小可以通过如下公式计算:
overhead = 1 - payload长度 / 数据包总长度
这是一个百分比值。显然,overhead值越低,那么通信的效率越高。
然而有了IP协议还不能直接通信,还要配合使用更上一层的TCP协议。TCP协议的数据包同样有20个字节的包头,这样在一个完整的TCP/IP数据包里就包含了20+20=40个字节的包头。
对于TCP/IP协议来说这个包头长度并不是什么大问题。因为一个TCP/IP数据包最大长度可以达到64,000个字节,相比这么大的数据包长度,overhead = 0.06%, 几乎可以忽略不计,通信效率可以说相当高。
但是无线环境情况完全不同。无线信道的特点是信道质量非常不稳定,无线射频信号会发生衰减和反射,导致传输中错误概率相当高。这样无线数据包的长度就不能太长,否则一旦发生错误,重传的代价非常高,很容易堵塞整个传输信道。例如,64,000个字节中,只要有一个bit出错,那么所有64,000个字节全部要重新传一遍。这样太可怕了。所以无线通信协议普通都采用短数据包的形式。短包的大小到底多长,是根据不同的射频频率、调制编码方式、符号速率、使用环境的要求等共同决定的。例如,IEEE 802.15.1(蓝牙)标准规定数据包长度为251个字节,IEEE 802.15.4(Zigbee)规定数据包长度仅为127个字节,LoRa数据包长度最大234个字节。
图2是802.15.4 Zigbee协议的数据包结构
图-2 802.15.4 Zigbee数据包结构可以计算出Zigbee数据包的overhead约为 1- 102/133 = 23.3%.
图3是802.15.1蓝牙数据包的结构,
图-3 802.15.1 蓝牙数据包结构可以计算出蓝牙数据包的overhead = 1 - 246/265 = 7.1%
如果我们要在802.15.1和802.15.4标准上传输TCP/IP数据包的话,那么每个数据包的传输开销就不再是可以忽略不计,而是严重影响效率了:
IP over IEEE 802.15.1: overhead = 1 - 206/266 = 22.5%
IP over IEEE 802.15.4: overhead = 1 - 62/133 = 53.3%
因为每个数据包都要付出这样的代价,这样的数字已经难以接受了。这些数字意味着什么?打个比方,假设中国电信卖给你10M的宽带,但你实际只能用4M,而中国电信是按10M来收费的,那你恐怕就要去投诉了。
那难道就没有办法改进这个问题了吗?有,答案是6LowPAN。一些聪明的IP协议的拥趸找到了优化的办法:压缩包头。如果能够把40个字节的包头压缩到很短,那效率不就可以提高了吗?在6LowPAN的标准里,20个字节在最理想情况下可以被压缩到2个字节。如此一来,开销的问题就显得不那么严重了。图4中给出了6LowPAN数据包的结构。
图-4 6LowPAN数据包结构那是否这就是我们所需要的完美解决方案呢?
没那么简单。6LowPAN仍然有自己的局限性。
1. 能够压缩的前提是在同一种物理连接的无线局部网络内部,比如同一个蓝牙网络内,或者同一个LoRa网络,并且限在一跳(hop)之内。如果要向不在同一网络内的设备发送数据,比如一个蓝牙网络中的设备向一个LoRa设备发送数据,那么这个方法就失去作用了。
2. IPv6协议要求数据包最小的长度为1280个字节,而显然无线网络中的数据包是达不到这个要求的。因此在无线网络中传输时 6LowPAN协议栈需要人为地进行分片和填充以适合IP网络的要求。这在同一无线技术网络中还容易实现,但是在包含了多种无线技术网络环境中这个工作就变得很复杂,要付出很多额外的开销。
因此,在解决这些问题之前,6LowPAN和IPv6要在无线通信网络中得到普及,还有很长的路要走。
网友评论