|
楼主 |
发表于 2009-1-30 02:49:39
|
显示全部楼层
如何用Ping命令来判断一条链路的速度?
# G: G) X6 D8 U3 |. K Ping这个命令除了可以检查网络的连通和检测故障以外,还有一个比较有趣的用途,那就是可以利用它的一些返回数据,来估算你跟某台主机之间的速度是多少字节每秒
! I/ B+ h4 f. M5 h( V, g
) p" R- E2 b7 a3 @: \9 ^ 我们先来看看它有那些返回数据。 ! z, F. i8 a9 c0 M- d- s( S6 ]( n
! w$ {' ? N+ x& d( U* }* r Pinging 202.105.136.105 with 32 bytes of data: 5 `) o% d) |& d9 W9 q) {
2 R, i4 o: ~6 J( s5 U. Y5 d% ` Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
3 W: l6 y# V+ D; x3 C/ Q. U: M) N, h2 x
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
# t* s3 t- R+ N4 R- w. K1 r
) ]; |" i0 S' G1 }7 t Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 , @2 W, ^5 \& ]+ {6 K
I+ I9 U, A5 Q# b/ j Reply from 202.105.136.105: bytes=32 time=601ms TTL=114
; \1 T, ]/ _) l' X: Z ]; b% a
, ~4 J0 e5 h! t+ @+ v" j Ping statistics for 202.105.136.105:
3 D6 z7 Z8 n; r' F# r# ~/ ^2 {+ H8 O" b4 |* r
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), 3 e, s+ q8 K8 ^5 l9 i3 M7 d+ M$ F4 D
+ u5 \0 p2 R) E
Approximate round trip times in milli-seconds:
! n7 x) g5 p- g3 k. N4 K5 H7 B1 _" A$ P8 ^) L& C
Minimum = 590ms, Maximum = 601ms, Average = 593ms % a$ \/ z" d$ T3 K4 Y5 t
: I6 |1 q/ Z p6 d1 ~! v7 V
在例子中"bytes=32"表示ICMP报文中有32个字节的测试数据(这是估算速度的关键数据),"time=590ms"是往返时间。 $ _) c2 y# N E4 k' D* t" B+ _5 y
* k4 h0 o9 @8 h4 D( {$ O- c 怎样估算链路的速度呢?举个例子吧。我们把A和B之间设置为PPP链路。 % v: A, }; a* E) x- J4 L4 d5 q
& s n" Y$ V. _) Z% k% ^; o 从上面的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是因为我们还要计算它的往返时间)。
6 }" r- r) }% e% A7 A( g5 J1 W; x" Y1 I& n- _
我们来测试一下33600 b/s的链路:
& O1 b! [, j$ X" ~5 e0 O
; k6 a f$ D: l+ m& n- x Pinging 202.105.36.125 with 32 bytes of data:
9 ^0 V4 C: b* o, m2 r* Z$ _/ [- f* V8 w' c
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
5 ]- Z) j9 A1 n/ K) `$ b X8 S- O
. J6 f& R, G* _ r) `! W Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
0 |7 V2 v( O1 K. X# i0 v
+ B: L/ l5 C" m# h* N Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 " |1 |% e- }) ~* z/ ?; f, U
, y" K+ w1 ~7 [2 o) X/ N* a
Reply from 202.105.36.125: bytes=32 time=421ms TTL=114 - V- Q- B6 k0 U, j1 p8 [/ y5 ?
) I& c9 C( ] k: b; n8 L+ @7 f
Ping statistics for 202.105.36.125: / Y9 I9 L0 Q6 M, I& _5 o
, C4 m& I& I1 F9 L, L. d1 V5 y3 e" | Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
, D0 n$ p& @ d) f ~5 m" I6 D! }* Z; s* k. d, O' F5 z- z1 {
Approximate round trip times in milli-seconds: 9 ]# L1 Q' G7 }% I& [
$ |: d* ?' y' x1 g( o" \ Minimum = 415ms, Maximum = 421ms, Average = 417ms
% n, D/ l! U! ^- w; ?0 U0 z6 D+ Q' D% H! p6 t4 U/ W8 a
看是不是差不多啊。 1 ^* l0 Z: E, B& B+ a- l/ m
, V; D9 h4 y1 v7 ^3 F 这里大家可能要注意到,这估算值跟实际值是有误差的,为什么呢?因为我们现在估算的是一个理论值,还有一些东西我们没有考虑。比如在网络中的其它干扰,这些干扰主要来之别的计算机。因为在你测试时不可能全部计算机停止使用网络给你做测试,这是不实际的。另外就是传输设备,因为有某些设备如MODEM它在传输时会把数据压缩后再发送,这大大减少了传输时间。这些东西产生的误差我们是不能避免的,但其数值大约在5%以内我们都可以接受(利用MODEM传输例外),但是可以减少误差的产生。比如把MODEM的压缩功能关闭和在网络没有那么繁忙时进行测试。有时候误差是无须消除的。因为我们需要这些误差跟所求得的理论值进行比较分析,从而找出网络的缺陷而进行优化。这时测试网络的所有数据包括误差都会成为我们优化的依据。 + v; Y A9 b- M4 B
5 O0 e; \, G6 c" Z% L 还要注意,这种算法在局域网并不适用,因为在局域网中速度非常的快几乎少于1ms,而Ping的最小时间分辨率是1ms,所以根本无法用Ping命令来检测速度。如果想测试速度那就要用专门仪器来检测。
+ d# z: g( j; |8 o0 I9 j/ T! t, D1 l% I* B# \7 V9 J
总的来说,Ping命令是一个在故障检查方面很有用而且很便利的工具,你不应该忽视它的存在。 |
|