owamp测量单向延时、丢包
中国互联网极其坑爹,在很多情况下,为了更加清楚地了解问题所在,需要对单向延时、丢包率进行测量。
owamp的网站地址 在http://www.internet2.edu/performance/owamp/index.html。由于它是用来测量单向延时的,这要求两端的机器时钟必须同步。
根据经验,即使在同一城市同一ISP,在一天之内延时都可能有1ms左右的波动。因此对NTP的精度要求在精确到若干毫秒就可以了。
在坑爹的中国网络中,寻找一个可以将本地时间同步精确到若干毫秒的NTP服务器难上加难。国家授时中心的NTP服务器尽管是多线路的,不受电信、联 通难以互通之影响,然而电信和联通也不能保障从北京到用户所在地一天24小时内延时稳定。例如联通存在南北互通问题、电信存在“CHINANET核心压力 很大”的问题。教育网的
我目前使用的NTP服务器分别是:
清华大学(北京教育网):
上海片区电信:首先要确定本地到上海国际出口的延时是否稳定,在稳定的情况下,
联通:联通勉强可以用
美国:美国好啊,一般ISP都会提供ntp的,更别说各种机构了,并且一般延时稳定。我用的是
这套组合我验证过了在清华、美国、电信、联通的机器如此设置相互间的时钟相差在2ms以内。
其中
安装后复制
启动
记录是按照收到回复的顺序排列的,最后会补上没有收到回复的记录并将RECVTIME标记为0.
配置owamp通过带外通信测量单向延时丢包信息主机A到主机B之间有某条待测线路C<->D,其中A、B、C、D均为IP地址,A、B为公网地址,C、D为内网地址。C<->D线路上可能出现极端的丢包情况,也可能是某个单向出现问题,这时却因为
在
为此我修改了
在patch代码后,
为此,只要对
增加验证信息的方式十分简单:在B上执行
在
在B上重启
中国互联网极其坑爹,在很多情况下,为了更加清楚地了解问题所在,需要对单向延时、丢包率进行测量。
owamp的网站地址 在http://www.internet2.edu/performance/owamp/index.html。由于它是用来测量单向延时的,这要求两端的机器时钟必须同步。
时钟同步
服务器可以安装ntp进行时间同步。必须注意的是,为了得到精确时间,所选NTP服务器和本地服务器之间的延时应该对称的,也就是往返所需时间相等。另外NTP服务器和本地服务器之间的延时应该稳定,否则时钟会随时间漂移。根据经验,即使在同一城市同一ISP,在一天之内延时都可能有1ms左右的波动。因此对NTP的精度要求在精确到若干毫秒就可以了。
在坑爹的中国网络中,寻找一个可以将本地时间同步精确到若干毫秒的NTP服务器难上加难。国家授时中心的NTP服务器尽管是多线路的,不受电信、联 通难以互通之影响,然而电信和联通也不能保障从北京到用户所在地一天24小时内延时稳定。例如联通存在南北互通问题、电信存在“CHINANET核心压力 很大”的问题。教育网的
s2a.time.edu.cn
和s2b.time.edu.cn
跟标准时间相差340ms左右,也不可用。我目前使用的NTP服务器分别是:
清华大学(北京教育网):
ntp.cuhk.edu.hk
的ipv6地址和ntp2.cuhk.edu.hk
(ipv4)和另一个ipv6地址用来中转clock.isc.org
//ipv6不稳定的学校例如北大、北邮就不必使用ntp.cuhk.edu.hk
的ipv6地址了。即便清华ipv6目前没有问题也不能过于相信ipv6,首选ntp设置为了ntp2上海片区电信:首先要确定本地到上海国际出口的延时是否稳定,在稳定的情况下,
clock.isc.org
可用。联通:联通勉强可以用
ntp2.cuhk.edu.hk
,只不过联通到cuhk的延时有2ms左右的波动外加丢包。美国:美国好啊,一般ISP都会提供ntp的,更别说各种机构了,并且一般延时稳定。我用的是
clock.isc.org
,ntp.nasa.gov
对比观察。这套组合我验证过了在清华、美国、电信、联通的机器如此设置相互间的时钟相差在2ms以内。
其中
ntp2.cuhk.edu.hk
跟clock.isc.org
基本无差别(小于0.5ms)、clock.isc.org
和ntp.nasa.gov
有3ms左右的差别。安装owamp
我的系统是Debian,目前还没有Debian安装包,因此要手动编译。configure时指定./configure --prefix=/usr --exec-prefix=/usr --libexecdir=/usr/lib/owampd --sysconfdir=/etc/owampd --sharedstatedir=/var/lib --localstatedir=/var --mandir=/usr/share/man --infodir=/usr/share/info
安装后复制
conf/
目录中的owampd.conf
、owampd.limits
到/etc/owampd/
,并编辑owampd.conf
中的datadir。(/var/lib/owampd/
?)启动
owampd
的命令行为owampd -c /etc/owampd -R /var/run/
。可能要在运行owampd
之前运行ntptime -N
。处理owping数据
owping
的运行参数设置为-i 0.001 -R -L 1
较方便。-R
选项对应的输出格式是每行输出SEQNO SENDTIME SSYNC SERR RECVTIME RSYNC RERR TTL
。其中TIME的格式是:高32位是从1900年1月1日到现在的秒数(不是Epoch time),低32位是纳秒数/10^9 * 2^32。记录是按照收到回复的顺序排列的,最后会补上没有收到回复的记录并将RECVTIME标记为0.
配置owamp通过带外通信测量单向延时丢包信息主机A到主机B之间有某条待测线路C<->D,其中A、B、C、D均为IP地址,A、B为公网地址,C、D为内网地址。C<->D线路上可能出现极端的丢包情况,也可能是某个单向出现问题,这时却因为
owamp
无法建立控制连接导致不能测量单向丢包。owamp
设计时是允许通过别的链路建立控制连接进行测量的。在
owping
的参数中,可以增加创建控制连接用的server地址。但是3.2rc4版本的实现中,在上述背景下,owping
会通过A创建到B的控制连接,随后进行的是A和D这两个地址之间的单向延时丢包信息,不是C<->D。owping
的-S选项在manpage中说会将本地socket绑定到指定的IP上,然而它会将控制连接和测试的本地IP都指定为源地址。此时,指定-S C后,C到B根本无法创建控制连接(公网、内网不互通),也无法正确测试C<->D的单向延时丢包信息。为此我修改了
owping
的代码,将-S参数的作用仅仅限定为测试时使用这个本地地址,控制连接不绑定到本地IP。补丁见:http://yangzhe1990.files.wordpress.com/2011/09/owping-patch.ppt在patch代码后,
owping
就是通过系统(自动使用地址A)创建到B的控制连接,再测量C<->D链路了。然而patchowping
的代码仍然不能正确运行:为了防止owping
被用来攻击,(B上运行的)owampd
拒绝了测试IP(C)跟控制连接的客户端(A)不同的测试请求。/* * Check for possible DoS as advised in Section 7 of owdp * spec. * (control-client MUST be receiver if openmode.) */阅读
owamp/sapi.c
可以发现,只要不是openmode,这种测量行为就被允许。为此,只要对
owping
和owampd
加上验证信息,并进行正确配置。增加验证信息的方式十分简单:在B上执行
pfstore -f /etc/owampd/owampd.pfs -n yangzhe
输入密码即可创建yangzhe
的认证信息。将owampd.pfs
中yangzhe
这行复制到机器A的owampd.pfs
中去。在
owampd.limits
中,还可以增加assign user yangzhe root
取消用户yangzhe的流量限制。在B上重启
owampd
后,在A上就可以通过owping -S C -i 0.001 -c 1000 -k /etc/owampd/owampd.pfs -u yangzhe D B
以0.001秒的间隔来回发送1000个数据包对C<->D线路进行双向测试了,并且控制连接是在A、B间建立的,不用担心C<->D本身的不稳定造成无法测量.