|
|
楼主 |
发表于 2009-1-30 02:49:39
|
显示全部楼层
|
如何用Ping命令来判断一条链路的速度?
4 w* T9 m" \% j. Y& m' F Ping这个命令除了可以检查网络的连通和检测故障以外,还有一个比较有趣的用途,那就是可以利用它的一些返回数据,来估算你跟某台主机之间的速度是多少字节每秒
! h. y- ?) O5 z) s; `4 x
$ A3 L- i# [9 V$ y/ x' S" v; e 我们先来看看它有那些返回数据。 ! a0 L+ Q d8 B+ S! U; L
3 [7 v' C- L; [8 ^/ c5 L
Pinging 202.105.136.105 with 32 bytes of data:
% \1 E0 d" a2 [2 U2 V( V7 w* y, ~0 F: k& H, ~
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 4 k4 f' ^/ y% U; W, P
( M( p3 ]8 p6 F) x3 B Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
8 ~+ M# C6 X& W! R& I2 ]1 X0 N3 D$ i, ], K0 _4 \7 x8 b; l
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 * t9 Z4 n& Q, C' J0 l9 W
% v( C' }, e9 h: v c9 o Reply from 202.105.136.105: bytes=32 time=601ms TTL=114 0 R% g' U) Y9 j& D9 x& [/ b
; A( V/ q& |9 M4 y% t! ~+ V Ping statistics for 202.105.136.105:
2 k- j% s/ z/ |; ?+ K% ^
# I9 U1 c- b. w Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
( h' V! f, w, ^/ I8 a, m1 n& R, p3 F& W( s
Approximate round trip times in milli-seconds:
! T% Y: N3 S& W
3 O$ B, ^- w) m% ^% G7 g Minimum = 590ms, Maximum = 601ms, Average = 593ms
& |) n- t/ W- ?( _1 _- o z( ~9 x9 z/ R# q2 G" C
在例子中"bytes=32"表示ICMP报文中有32个字节的测试数据(这是估算速度的关键数据),"time=590ms"是往返时间。
% ?5 r% r8 s# v( Z0 E h& G' O, J5 v# [4 c! L9 F
怎样估算链路的速度呢?举个例子吧。我们把A和B之间设置为PPP链路。 ) P/ L2 m" R: P1 o! t
% e' T& T4 g% H 从上面的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是因为我们还要计算它的往返时间)。 " q: `& e; Y3 T5 C$ Z
& b) ~9 q* G, J7 \" K2 e% \ 我们来测试一下33600 b/s的链路:
+ X' q! D8 X4 ~) v6 ?6 z. R D' Z
: H5 ^; V6 r8 B/ E9 Q# a6 L4 o Pinging 202.105.36.125 with 32 bytes of data: / E- b' n+ J9 K' ~. i& _0 Q, s
- L. ~" y7 m0 P( @( Y. {; n6 u Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
3 I( A+ L) e& g! n
1 S# n7 \$ h$ o% r Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 ' w- c( ^8 a. {
- w. L# i q* z3 v% S' L0 T6 Q
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 2 s; x. U7 k0 p8 s
% p: ^0 l; }: }$ w# o
Reply from 202.105.36.125: bytes=32 time=421ms TTL=114 ; W- }5 F9 S. X3 d: p
0 B8 r5 i& K4 _, U9 U' Z! T8 Z Ping statistics for 202.105.36.125:
& N6 k& G! Q3 [/ F+ Y9 l- C* C& x! X- R
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), % _' H n- ^( y' ~7 a W* @1 i
' |1 _) l7 }4 ]" X1 }' ?- _! f9 ^
Approximate round trip times in milli-seconds: 5 Q7 x% p/ K0 i' m, K, c6 t
2 H$ O2 [1 f) n! o" A# _# R
Minimum = 415ms, Maximum = 421ms, Average = 417ms
: @3 ~1 _! ?! S: D# ^5 [6 G- w" h. x0 l0 ~
看是不是差不多啊。 ( ?! b( {# t$ }4 v+ Y
; R- i3 @9 Y. M6 o$ P3 I
这里大家可能要注意到,这估算值跟实际值是有误差的,为什么呢?因为我们现在估算的是一个理论值,还有一些东西我们没有考虑。比如在网络中的其它干扰,这些干扰主要来之别的计算机。因为在你测试时不可能全部计算机停止使用网络给你做测试,这是不实际的。另外就是传输设备,因为有某些设备如MODEM它在传输时会把数据压缩后再发送,这大大减少了传输时间。这些东西产生的误差我们是不能避免的,但其数值大约在5%以内我们都可以接受(利用MODEM传输例外),但是可以减少误差的产生。比如把MODEM的压缩功能关闭和在网络没有那么繁忙时进行测试。有时候误差是无须消除的。因为我们需要这些误差跟所求得的理论值进行比较分析,从而找出网络的缺陷而进行优化。这时测试网络的所有数据包括误差都会成为我们优化的依据。 # A/ }1 s; _# X+ @
+ K @: o M( B+ B
还要注意,这种算法在局域网并不适用,因为在局域网中速度非常的快几乎少于1ms,而Ping的最小时间分辨率是1ms,所以根本无法用Ping命令来检测速度。如果想测试速度那就要用专门仪器来检测。 4 | }/ P% |0 y) X/ X% v
* C* S9 I! Q9 G( n
总的来说,Ping命令是一个在故障检查方面很有用而且很便利的工具,你不应该忽视它的存在。 |
|