读书人

HTTP接口跟UDP接口流量差异比较

发布时间: 2012-12-16 12:02:32 作者: rapoo

HTTP接口和UDP接口流量差异比较


有个手机软件需要很频繁的调用服务器端接口,你知道的,每个字节都是钱呀,钱呀钱,命相连呀。本来已经有个现成的tomcat的http(get/post)的接口,但是担心流量消耗太大,需要做个评估,看是采用http接口,还是使用多线程的socket udp接口,于是就有了下面这一出。


相关工具:

序号

工具

描述

1.

Nc

Linux下的著名socket调试瑞士军刀,系统自带

2.

Tcpdump

Linux下抓包工具,系统自带,不过需要root权限

3.

Wget

Linux下http的调用工具,系统自带

4.

Sockettools

Wins绿色版本的socket调试工具,这个在上次讲loadrunner的socket脚本录制里面提到过使用方法

5.

WiresharkPortable.exe

Wins下的抓包及分析工具,我只下载了一个绿色版本的分析工具,不能抓包

6.

WinSCP.exe

Ssh连接linux,使用sftp协议传回抓包文件

第一部分:

SOCKET(UDP)通讯过程消耗字节数测试方案:

1. Linux上开启抓包:sudotcpdump -i eth0 -n -vv -v -s 0 -w xxxx.cap

2. Linux(nc)启动udp服务器端:nc -4 -u-l 2389

3. Window7家庭版32bit启动sockettools.exe启动udp客户端建立连接;

4. 客户端发送24个字节;例如:[ 0319B38ED7, 056243F315, 1A56AEF715]

5. 客户端中断连接;

6. 停止抓包

7. 使用winscp传回数据包进行分析。

来,看看结果吧:

用WiresharkPortable.exe打开数据包,先得过滤一下:

过滤条件表达式:ip.src == xxx and ip.dst == yyy and ip.proto == 17

ip.proto == 17 这个就是udp协议,将xxx和yyy替换成你的源和目标地址

结果:

就一个udp数据包:52+24=76个字节,也就是说如果你发送24个字节,附带上包头什么的一共76个字节,没数据就52个字节。

第二部分:

HTTP通讯过程消耗字节数测试方案:

1. Linux上进行抓包:sudotcpdump -i eth0 -n -vv -v -s 0 -w xxxx.cap

2. Linux上wget调用url:wget url

3. 停止抓包;

4. 使用winscp传回数据包进行分析

结果:

过滤条件表达式1:ip.src == xxx and ip.dst == yyy

TCP发出7个包,有1个数据包(因为是附带的HTTP包头,所以不能省略):

SYN:74

ACK:66

PSH,ACK:241

ACK:66

ACK:66

FIN,ACK:66

ACK:66

合计:

74+66+241+66+66+66+66=645

过滤条件表达式2:ip.src == yyy and ip.dst == xxx

TCP 收到5个包,有两个数据包:

SYN,ACK:74

ACK:66

PSH,ACK:1090:数据包:假定只带和上次一样的http包头,计为241个字节

PSH,ACK:785:数据包

FIN,ACK:66

合计(如果不包含数据):

74+66+241+66=447

如果不包含数据总共:645+447=1092

最后结论:

http接口底层是tcp协议的,设计就是稳定可靠的传输,加上包上了http一层,每次调用的流量比简单的udp调用要大很多,简单的说就是:1092/52=21,刚好21倍。调用1次http接口相当于调用21次udp接口。

假定手机每5秒调用一次接口,一分钟12次,每天调用2个小时,那么每个月消耗:

UDP: 52*12*60*2*30=2246400=2.246m

HTTP: 2246400*21=47174400=47.174m

如果你的手机软件打算节约流量,就用多线程的udp做后台服务吧;

如果你的手机软件打算尽可能多的消耗流量,就别用udp了。

这个是纯理论推导的,可能真到用的时候,电量消耗比流量消耗还要命。





读书人网 >其他相关

热点推荐