知识的提高不在于积累和封闭,而在于传播和交流。今天这篇文章的主题为网络测试。这是我前些年做网络测试后的沉淀,今天拿出来给大家分享一下。
要做好网络测试,我们前提是要了解网络。否则哪怕工具再好,你也理解不了里面数据的含义和反馈给你的真实信息。所以在开篇我会重点介绍一下涉及到的一些网络的基础知识,包括TCP/UDP协议、网络带宽、丢包率、PING值、Jitter。后部分我主要给大家推荐Iperf工具的进行网络测试,以及列举影响网络测试结果的一些因素。
TCP/UDP协议
1、TCP/IP协议
(Transmission Control Protocol/Internet Protocol,传输控制协议/因特网互联协议,又名网络通讯协议)是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。TCP/IP协议的具体知识,请去看W.Richard Stevens的《TCP/IP 详解 卷1:协议》 。
2、端口
端口将应用进程与IP网络相关联,是应用进程的地址标识。
端口的查看命令为:netstat –an
测试一个端口(主要为TCP端口)是否打开的命令:telnet IP地址 端口号
Socket(套接字),为了使多主机多进程通信时,不至于发生混乱情况,必须把端口号和主机的IP地址结合起来使用,称为套接字(如:118.123.1.X:8080)。由于主机的IP地址是唯一的,这样目的主机就可以区分收到数据报的源端机了。
3、IP数据报
在因特网上传输的包,称为IP数据报(IP Datagram)。由首部和数据两部分组成,其格式如下图所示。首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。首部中的源地址和目的地址都是IP协议地址。
4、面向连接与面向无连接
面向连接 通信双方在进行通信之前,要事先在双方之间建立起一个完整的可以彼此沟通的通道。 这个通道也就是连接,在通信过程中,整个连接的情况一直可以被实时地监控和管理。
面向无连接 不需要预先建立起一个联络两个通信节点的连接来,需要通信的时候,发送节点就可以往“网络”上送出信息,让信息自主地在网络上去传,一般在传输的过程中不再加以监控,让该信息的传递在网上尽力而为地往目的地节点传送。
5、TCP协议
TCP(Transmission Control Protocol,传输控制协议)是专门为了在不可靠的互联网上提供一个可靠的端到端字节流而设计的。下面为TCP协议的原理图:
注意,因为由于TCP连接是双向连接, 因此关闭连接需要在两个方向上做。
6、UDP协议
UDP(User Datagram protocol,用户数据报协议),UDP为应用程序提供了一种方法来发送经过封装的IP数据报,而且不必建立连接就可以发送这些IP数据报。
网络带宽
网络带宽是指在一个固定的时间内(如1秒),能通过的最大位数据。就好象高速公路的车道一样,带宽越大,好比车道越多。宽带速率的单位用bps(或b/s)表示,常见带宽单位转换:
1Mbps=1,000Kbps=1,000,000bps
带宽与下载速度的转换:
1Mb/s= 10^6 b/s = 10^6/8 B/s =10^6/8/1024 KB/s ≈ 122 KB/s
影响带宽的因素常见有算机性能、网络设备质量、资源使用情况、网络高峰期、网站服务能力、线路衰耗,信号衰减等。
丢包率
数据在网络中是被分成一个个数据包传输的,每个数据包中有表示数据信息和提供数据路由的帧。而数据包在一般介质中传播是总有一小部分由于两个终端的距离过大会丢失,而大部分数据包会到达目的终端。所谓网络丢包率是数据包丢失部分与所传数据包总数的比值。正常传输时网络丢包率应该控制在一定范围内。
PING制测试
ping只是一个通信协议,是IP协议的一部分,TCP/IP 协议的一部分,Ping 在Windows系下是自带的一个可执行命令。用于检测网络通与不通 ,也叫时延,其值越大,速度越慢。应用格式:ping IP。
TTL 的最初设想是确定一个时间范围,超过此时间就把包丢弃。由于每个路由器都至少要把TTL域减一,TTL通常表示包在被丢弃前最多能经过的路由器个数。当记数到0时,路由器决定丢弃该包,并发送一个ICMP报文给最初的发送者。
Jitter(抖动)
Jitter是来自与一个事件的理想时间的偏差,参考事件是电子事件的微分零点交叉口(differential zero crossing)和光学系统的标称接收门限功率电平。假如你有个情人,你希望她每天晚上下班之后7点来找你,而有的时候她6:30到,有的时候是7:23,有的时候也许是下一天。这种时间上的不稳定就是jitter。抖动是通过一个网络的反应时间的可变性测量标准。一个非常小量的抖动对使用语音和视频的实时应用都是很重要的。
Iperf工具的使用
iperf是一个网络性能测试工具,支持windows及Linux的使用(具体的工具下载和安装,大家可以百度一下)。可以测试TCP和UDP带宽质量,可以测量最大TCP带宽,具有多种参数和UDP特性,可以报告带宽,延迟抖动和数据包丢失。下面为这款工具的工作原理:
Iperf工具通用参数说明
-f [k|m|K|M] 分别表示以Kbits, Mbits, KBytes, MBytes显示报告,默认以Mbits为单位,如:iperf -c 222.35.11.23 -f K
-i sec 以秒为单位显示报告间隔,如:iperf -c 222.35.11.23 -i 2
-l 缓冲区大小,默认是8KB,如:iperf -c 222.35.11.23 -l 16
-m 显示tcp最大mtu值(mtu:最大数据传输单元)
-o 将报告和错误信息输出到文件,如:iperf -c 222.35.11.23 -o c:iperflog.txt
-p 指定服务器端使用的端口或客户端所连接的端口如:iperf -s -p 9999;iperf -c 222.35.11.23 -p 9999
-u 使用udp协议
-w 指定TCP窗口(数据报)大小,默认是8KB
-B 绑定一个主机地址或接口(当主机有多个地址或接口时使用该参数)
-C 兼容旧版本(当server端和client端版本不一样时使用)
-M 设定TCP数据包的最大mtu值
-N 设定TCP不延时
-V 传输ipv6数据包
server专用参数
-D 以服务方式运行ipserf,如:iperf -s -D
-R 停止iperf服务,针对-D,如:iperf -s -R
client端专用参数
-d 同时进行双向传输测试
-n 指定传输的字节数,如:iperf -c 222.35.11.23 -n 100000
-r 单独进行双向传输测试
-t 测试时间,默认10秒,eg:iperf -c 222.35.11.23 -t 5
-F 指定需要传输的文件
-T 指定ttl值
下面为iperf对一服务器进行带宽测试的监控视图
影响网络测试结果的因素
- 自然环境(高压强电、高强度电磁波、风雨雷电等)
- 系统环境(病毒、配置、自身、临时文件,系统资源)
- 软件环境(杀毒软件、软件防火墙、数据传输软件)
- 硬件环境
- 网络环境(南北差异,局域网络环境)
- 网络中存在回路
- 网络设备硬件故障引起的广播风暴而导致网速变慢 (广 播包的数量达到30%时,网络的传输效率将会明显下降)