|
|
楼主 |
发表于 2009-1-30 02:49:39
|
显示全部楼层
|
如何用Ping命令来判断一条链路的速度?
, R. x$ g, k. L. W8 v; W, g Ping这个命令除了可以检查网络的连通和检测故障以外,还有一个比较有趣的用途,那就是可以利用它的一些返回数据,来估算你跟某台主机之间的速度是多少字节每秒
. y2 l {1 J0 q: X6 g3 |. M9 ?# |3 d0 a) Y% x9 _( t3 ]. _/ v
我们先来看看它有那些返回数据。 " l8 X1 ?6 _- v3 I3 T
; k5 m b0 z7 {; l7 e Pinging 202.105.136.105 with 32 bytes of data: 4 Y7 ^" u# K* W) Y- w& W
" m' I6 g b# H" W4 x Q5 m' \
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
6 O* R4 Y- i7 z. L/ B1 @
2 G- g* D$ A/ R: _2 y Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
4 U4 W5 r% B) H8 d6 R+ G4 p. G' y
: E, f( \2 U- I" j8 b' P Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
5 D* A: J9 ~4 K4 V0 s
7 K1 g' w2 O( z* A: f# l2 } Reply from 202.105.136.105: bytes=32 time=601ms TTL=114 1 b0 B- o ?/ w2 l; l$ n0 L
5 _' `. K. u* J2 e2 `
Ping statistics for 202.105.136.105: : F) @5 L6 l0 z; H- U0 ?/ u& z" i
: d9 X. p% v* b9 j1 U" O
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), L8 S4 W0 ~3 Q4 o2 e
6 Q& f( ~! {; r R6 o
Approximate round trip times in milli-seconds: % H: `( _1 e) }& ?, H' F/ c
& r H1 [( p1 G Minimum = 590ms, Maximum = 601ms, Average = 593ms
% I8 S. ]5 q* K x! O
% k U& z! h( h H' t 在例子中"bytes=32"表示ICMP报文中有32个字节的测试数据(这是估算速度的关键数据),"time=590ms"是往返时间。 - i. M! C' `, M) r4 |$ S* c! I- Y
3 s0 j3 ? W6 K: U& K4 G 怎样估算链路的速度呢?举个例子吧。我们把A和B之间设置为PPP链路。
" G0 \. X+ o5 A0 d4 n8 K8 ~0 Y+ n
: w1 d$ I7 F- e& |* N7 C 从上面的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是因为我们还要计算它的往返时间)。
5 l6 n s7 L1 k6 Y3 Q3 F3 d- Y1 q
; }- r7 I2 [, y4 b& Y9 w 我们来测试一下33600 b/s的链路: 3 O& ~: e) O8 E
% g) I/ l1 T6 c. x1 V: ?' |4 p( E( y Pinging 202.105.36.125 with 32 bytes of data: . y1 A2 V9 q# J8 l6 M& s0 r
3 O1 s; Y" n) w( D3 e
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
. Y: W) [7 f$ M1 I9 e3 D" u R$ W7 n( G& m
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
- ]0 p1 T2 w; U; Z$ Q R* G/ s1 D. I/ { S( E
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
2 x1 A* f, `4 ?! U
1 }0 d# w0 F/ d6 E7 ~8 A4 V Reply from 202.105.36.125: bytes=32 time=421ms TTL=114 ! ~2 B6 _( W5 e- N/ h* n( I
8 l! P7 c( s1 ~3 B0 d$ l
Ping statistics for 202.105.36.125: + Q) k2 H2 _. S5 J4 B z. W0 j, c O: v2 k
" a* z" S) T# A7 n4 ~6 w! X$ o4 B Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), % C0 W/ B' G+ b
, A! Y$ `2 g/ n- Y
Approximate round trip times in milli-seconds:
6 ?3 V6 V* Z, T: U1 f0 z8 w+ M
! y9 {2 F! M, I! A0 U Minimum = 415ms, Maximum = 421ms, Average = 417ms
' \0 @1 b* g, @6 R6 u6 x- c4 Q- M! @- a" M# ~/ B2 N" y- p4 D( a: t5 B
看是不是差不多啊。 3 o9 X( C7 W- C; V. n1 j/ ?5 Q
8 k" l! n1 L4 } 这里大家可能要注意到,这估算值跟实际值是有误差的,为什么呢?因为我们现在估算的是一个理论值,还有一些东西我们没有考虑。比如在网络中的其它干扰,这些干扰主要来之别的计算机。因为在你测试时不可能全部计算机停止使用网络给你做测试,这是不实际的。另外就是传输设备,因为有某些设备如MODEM它在传输时会把数据压缩后再发送,这大大减少了传输时间。这些东西产生的误差我们是不能避免的,但其数值大约在5%以内我们都可以接受(利用MODEM传输例外),但是可以减少误差的产生。比如把MODEM的压缩功能关闭和在网络没有那么繁忙时进行测试。有时候误差是无须消除的。因为我们需要这些误差跟所求得的理论值进行比较分析,从而找出网络的缺陷而进行优化。这时测试网络的所有数据包括误差都会成为我们优化的依据。 . w1 b7 x! Z) U' h9 I: t/ i( Y+ o
( Q U( g8 ~: Z. _; V
还要注意,这种算法在局域网并不适用,因为在局域网中速度非常的快几乎少于1ms,而Ping的最小时间分辨率是1ms,所以根本无法用Ping命令来检测速度。如果想测试速度那就要用专门仪器来检测。 0 m% C, C9 W3 k: t
+ ?9 |9 n" e' L) X) D7 P 总的来说,Ping命令是一个在故障检查方面很有用而且很便利的工具,你不应该忽视它的存在。 |
|