|
|
楼主 |
发表于 2009-1-30 02:49:39
|
显示全部楼层
|
如何用Ping命令来判断一条链路的速度?
2 ^& N1 v$ i. I! W0 p: V O Ping这个命令除了可以检查网络的连通和检测故障以外,还有一个比较有趣的用途,那就是可以利用它的一些返回数据,来估算你跟某台主机之间的速度是多少字节每秒
& b1 z2 g6 i2 m; [ g1 J: H9 _4 O2 K* ^/ R+ w
我们先来看看它有那些返回数据。 ( D$ t& d, p3 ~. M: t4 ^4 D
" s1 f: a! a$ R$ p" ? Pinging 202.105.136.105 with 32 bytes of data:
# O) D# u |3 @& Y4 L
, v1 r; D) K2 [6 L$ O5 a' K2 G Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 & W6 _/ i; E! P m
' p9 P) Z; R$ y, |& W( I& b# Z
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 0 j5 H; I# Z* S! f3 j1 v
9 f' g4 J. Y" f- ~3 |% r; @
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 ! N3 _8 Y1 |" F1 n& N
3 ~6 q6 ^$ x4 m Reply from 202.105.136.105: bytes=32 time=601ms TTL=114
# L' g- |8 E" [0 i! H3 `, M# I2 X6 p5 ?/ [, O
Ping statistics for 202.105.136.105: 6 r# U3 m! u* {! j
1 a1 T1 f |- q2 T" x Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
5 g7 p" d/ `/ M9 b; k. t9 @+ a' ~; U% n0 F) |( d
Approximate round trip times in milli-seconds: $ W+ K. R( a( x+ h$ q7 k
, n) \. B! e. s+ d6 \
Minimum = 590ms, Maximum = 601ms, Average = 593ms : {. Z* C: }! k2 p/ r4 s. j4 _
2 S! C, @) m' c 在例子中"bytes=32"表示ICMP报文中有32个字节的测试数据(这是估算速度的关键数据),"time=590ms"是往返时间。
4 w) [" }( y3 ]
1 w3 Y. D8 g, P1 D) U! H 怎样估算链路的速度呢?举个例子吧。我们把A和B之间设置为PPP链路。 ! ]" C [; |3 ]( N
& S5 | r3 } t/ @, b; J 从上面的PING例子可以注意到,默认情况下发送的ICMP报文有32个字节。除了这32个字节外再加上20个字节的IP首部和8个字节的ICMP首部,整个IP数据报文的总长度就是60个字节(因为IP和ICMP是Ping命令的主要使用协议,所以整个数据报文要加上它们)。另外在使用Ping命令时还使用了另一个协议进行传输,那就是PPP协议(点对点协议),所以在数据的开始和结尾再加上8个字节。在传输过程中,由于每个字节含有8bit数据、1bit起始位和1bit结束位,因此传输速率是每个字节2.98ms。由此我们可以估计需要405ms。即68*2.98*2(乘2是因为我们还要计算它的往返时间)。 " [% C8 q. l7 L5 @; R
! s3 \ ?- P5 Z6 p" O 我们来测试一下33600 b/s的链路:
9 D7 }# `, F* T7 I Z0 q. L" i3 O' ]! n: x, K
Pinging 202.105.36.125 with 32 bytes of data: * ? d8 Z8 g9 a
' N/ A* Q5 s/ ]: H4 s/ C
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
! N! F* E- s6 [9 Z
2 |& a' j; Q f! |' F8 G* K; h: I Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 ! ?0 I m$ h( j$ @1 [; D( t5 R: H( ]0 |
$ P; D6 l9 M& ^ Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
4 L! Q1 o+ Z& }# T+ U4 Q- D( B! D3 O! T8 R/ x' E- C x" Q
Reply from 202.105.36.125: bytes=32 time=421ms TTL=114 % ~) t' S. D: M! V' m' ~7 ^. H
# L( Z$ z- x) i, S" V: e
Ping statistics for 202.105.36.125: : R! ?. \! Y% }1 O! W6 T
# i* f2 @, x9 o0 u1 d
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), # ~8 s& Y% j2 M- E* F
- n5 Y0 m1 \0 ^ u% x7 T1 L2 Q
Approximate round trip times in milli-seconds: . U+ o* \9 t; d' T# m8 E- W5 M
- @4 a% Z! t, T1 p# l& q+ l% Z& a Minimum = 415ms, Maximum = 421ms, Average = 417ms
5 |/ c! l5 S5 k% W7 v1 f3 ^- w! a4 I/ d& {5 p" L6 _) X* ^
看是不是差不多啊。 % Q. a3 N1 P/ ^9 E4 B
I7 N5 W4 z, W: J5 J 这里大家可能要注意到,这估算值跟实际值是有误差的,为什么呢?因为我们现在估算的是一个理论值,还有一些东西我们没有考虑。比如在网络中的其它干扰,这些干扰主要来之别的计算机。因为在你测试时不可能全部计算机停止使用网络给你做测试,这是不实际的。另外就是传输设备,因为有某些设备如MODEM它在传输时会把数据压缩后再发送,这大大减少了传输时间。这些东西产生的误差我们是不能避免的,但其数值大约在5%以内我们都可以接受(利用MODEM传输例外),但是可以减少误差的产生。比如把MODEM的压缩功能关闭和在网络没有那么繁忙时进行测试。有时候误差是无须消除的。因为我们需要这些误差跟所求得的理论值进行比较分析,从而找出网络的缺陷而进行优化。这时测试网络的所有数据包括误差都会成为我们优化的依据。
: A$ C8 g# s1 ?3 [7 [, Z0 M" E4 w6 }5 X8 d+ e* x1 M7 f( R
还要注意,这种算法在局域网并不适用,因为在局域网中速度非常的快几乎少于1ms,而Ping的最小时间分辨率是1ms,所以根本无法用Ping命令来检测速度。如果想测试速度那就要用专门仪器来检测。
) L$ q$ i# j" p) H
' E0 q2 @% l+ @" c2 d) a) v 总的来说,Ping命令是一个在故障检查方面很有用而且很便利的工具,你不应该忽视它的存在。 |
|