ping是大家所熟悉的网络延迟监测工具。ping基于ICMP协议,这是一个基于IP的三层协议。在Windows Azure上,所有服务的对外接口都仅支持TCP和UDP协议,因此,我们无法使用ping从外部监测Azure上的虚拟机,也无法从Azure虚拟机监测外部延迟。为了能够实现对网络延迟的监测,我们可以使用TCP协议进行ping,其原理是,先在客户端和服务端建立一个tcp连接,然后发出一个检测包,测量响应时间。它和ping的普通区别,是在测量前要建立一个tcp连接。因此,测试的对象必须开放一个tcp端口。另外,tcp ping工具没有在os里面提供,必须自己开发或者下载工具。
在windows 上,微软提供了一个工具叫psping。可以从这里下载:http://technet.microsoft.com/en-us/sysinternals/jj729731
下载后,进行安装。然后在命令行就可以执行ping命令,比如 psping www.sina.com:80. 。它与ping的区别,是需要在测试目标后面增加一个端口号,否则,psping会使用ping进行检测
下面是一个进行psping和普通ping的对比。我们发现二者的输出基本一致,psping并没有因为tcp协议增加网络延迟。同时,我们发现psping的精度更高一些,支持0.01毫秒精度
在Linux上,也有类似工具。下面,我们看下CentOS/Redhat上如何进行Tcp ping
1. 首先下载tcptraceroute http://pkgs.repoforge.org/tcptraceroute/tcptraceroute-1.5-0.beta7.el6.rf.x86_64.rpm 其他版本的rpm可以在http://pkgs.repoforge.org/tcptraceroute/下载
2. 安装下载的rpm包
3. 下载tcpping工具 http://www.vdberg.org/~richard/tcpping
4. 修改该文件权限:chmod 755 tcpping
5. 执行tcpping命令:tcpping news.sina.com
这里,我们会发现一个有趣的现象。那就是结果中tcpping的目标地址在变化。其原因是目标域名对应多个IP地址,此时tcpping会依次ping每个地址,而不是像ping那样只探测第一个地址