|
楼主 |
发表于 2009-1-30 02:49:39
|
显示全部楼层
如何用Ping命令来判断一条链路的速度? 1 K2 ^) u: A$ T% ]; l# [
Ping这个命令除了可以检查网络的连通和检测故障以外,还有一个比较有趣的用途,那就是可以利用它的一些返回数据,来估算你跟某台主机之间的速度是多少字节每秒
2 _/ _ X8 h( f( N" X0 N. I' a9 r- D" ?5 l/ p7 F
我们先来看看它有那些返回数据。 7 ~. I9 u+ b0 k
4 d5 R) R. j1 ]' [6 U$ `! @2 W! U Pinging 202.105.136.105 with 32 bytes of data:
. H w- E1 x T) d6 ^; b$ m( i9 a, B) m
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 7 W5 u6 p/ l* i
1 {$ s4 j5 n- O3 y! T$ N9 k+ K! j
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 % A+ D1 @ f/ z5 k! m( n3 y* a
4 Z# O# R. d: D5 f, m( } Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
/ C2 ?9 I9 _( w$ L) X4 k
* I: e0 [* e; L, G( j Reply from 202.105.136.105: bytes=32 time=601ms TTL=114
6 I! P7 Q- W5 }' n( s& n. _, X
: T! T6 Q, B. L3 y5 f' ~ Ping statistics for 202.105.136.105:
9 @! Q) C) y0 [+ r6 ^+ d/ j0 }3 j9 q. X
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), $ A, c4 K% n* I7 x) Q; f: N
: S' `' U$ w+ s) E# ~2 R Approximate round trip times in milli-seconds:
9 g& g4 H3 N7 u9 D3 e
4 j0 T. D( y* j, \ Minimum = 590ms, Maximum = 601ms, Average = 593ms 0 A+ E# W/ g% D# A, I, Q6 C
* f h9 C" U* I4 }* b 在例子中"bytes=32"表示ICMP报文中有32个字节的测试数据(这是估算速度的关键数据),"time=590ms"是往返时间。 # ]0 L# u! q5 h: Z3 q1 P @' p
" T# R% T( M( K; C+ F) N
怎样估算链路的速度呢?举个例子吧。我们把A和B之间设置为PPP链路。 6 f" M& b8 M' b$ f
5 q+ o: h7 t4 w* X1 I$ s! E2 P
从上面的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是因为我们还要计算它的往返时间)。 7 m* C# q$ I5 i9 i7 S0 o
2 ]( f ?' F! d8 E9 A4 {( c
我们来测试一下33600 b/s的链路: + H: p3 Q% c" w, r* _
5 r) ?( r% S) a7 t Pinging 202.105.36.125 with 32 bytes of data: . L2 D7 f0 B% k# S
% `" d) u5 h- s) V. i Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 9 k$ m/ a! G1 ^) t
/ ] T. _! C. X! e0 |; V9 T! ?* r Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
5 N& N0 f& o8 T: ?# T: ~' u5 N( ]% i; i: q
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
8 N4 h9 @. T* O
f P; v& P$ h Reply from 202.105.36.125: bytes=32 time=421ms TTL=114 ) Y9 \3 R) M) f0 K& t- v
( E7 n( ]" ]/ X, _
Ping statistics for 202.105.36.125:
" x; \# v8 D) d2 J7 [/ [, O2 Z E
- o% V3 s1 D; |- w Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), 6 w% ~2 E; O2 U5 W8 p
! s# g6 C! r) f Approximate round trip times in milli-seconds:
" c5 E' Q9 F8 |2 J% d8 C$ v
* N) {, R7 \: j9 G6 B Minimum = 415ms, Maximum = 421ms, Average = 417ms
n; E `( ]/ y! Z- [% q) J8 Z) p2 J& P% d9 X: `9 ?
看是不是差不多啊。
( T ]9 K' v& u8 V5 U8 b+ k/ Y: Z' {, |7 `4 c( F8 u/ I. I* a
这里大家可能要注意到,这估算值跟实际值是有误差的,为什么呢?因为我们现在估算的是一个理论值,还有一些东西我们没有考虑。比如在网络中的其它干扰,这些干扰主要来之别的计算机。因为在你测试时不可能全部计算机停止使用网络给你做测试,这是不实际的。另外就是传输设备,因为有某些设备如MODEM它在传输时会把数据压缩后再发送,这大大减少了传输时间。这些东西产生的误差我们是不能避免的,但其数值大约在5%以内我们都可以接受(利用MODEM传输例外),但是可以减少误差的产生。比如把MODEM的压缩功能关闭和在网络没有那么繁忙时进行测试。有时候误差是无须消除的。因为我们需要这些误差跟所求得的理论值进行比较分析,从而找出网络的缺陷而进行优化。这时测试网络的所有数据包括误差都会成为我们优化的依据。
* J) ?2 j0 g9 d& k- J/ a4 k# |$ z, ~- J
还要注意,这种算法在局域网并不适用,因为在局域网中速度非常的快几乎少于1ms,而Ping的最小时间分辨率是1ms,所以根本无法用Ping命令来检测速度。如果想测试速度那就要用专门仪器来检测。 % d' M8 _4 y" q* [: R
: A8 `7 r" m5 [0 r0 D- E; f
总的来说,Ping命令是一个在故障检查方面很有用而且很便利的工具,你不应该忽视它的存在。 |
|