运营商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应答协议部分

 

posted @ 2020-08-19 00:12  GeekerFeng  阅读(979)  评论(0)    收藏  举报