运营商TCP流量计算(从物联网设备引发的思考)
1.发现问题
最近发现自己的产品流量有点异常的高,每个包只发10几个字节的数据,而且10秒才发一次,流量不应该这么高啊,所以想搞懂流量到底去哪里了
2. 分析
由于设备的特殊性,分析发现流量主要消耗在心跳包上,一个月的流量计算如下表(从linux系统读出)
| 功能 | 测试次数 | 发送流量 | 接收流量 | 一个月流量(24小时运行 |
| 上传人数 | 一个包 | 165 | 72 | 59.326M |
但是查看代码发现我实际发送的字节只有61,而时间接收的字节只有20,165是怎么算出来的呢?是否不小心多发送了一些数据?
只能抓包分析了
3.抓包

抓包的情况相amazing啊
可以看出发送的长度确实是61字节(实际长度应为127字节),而接收的长度确实是20字节(实际长度为86字节)。可是为什么多了怎么多个字节呢?
4. 原因
原来tcp除了我们发送的数据内容外还有各种头部数据 ,如下图所示

除头部数据之外还有4个字节的尾部数据,而且tcp自带ack应答,也需要66个字节
5.结论
所以TCP的实际流量利用效率非常低计算公式为 最小利用率 =(有效长度/(有效长度+66+66)),建议如果对流量有要求的话,还是使用UDP比较好
注:至于为什么会有ACK应答,ACK是如何应答的,请先百度TCP相关ACK应答协议部分

浙公网安备 33010602011771号