owamp测量单向延时、丢包 & 配置owamp通过带外通信测量单向延时丢包信息
owamp测量单向延时、丢包
中国互联网极其坑爹,在很多情况下,为了更加清楚地了解问题所在,需要对单向延时、丢包率进行测量。
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。
原文:http://yangzhe1990.wordpress.com/2011/08/31/owamp/
=================================================================================
配置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。补丁见:owping.patch。
在patch代码后,owping
就是通过系统(自动使用地址A)创建到B的控制连接,再测量C<->D链路了。然而patch owping
的代码仍然不能正确运行:为了防止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本身的不稳定造成无法测量。
来源:http://yangzhe1990.wordpress.com/2011/09/02/outband-owamp/
顶 顶 再顶