|
|
楼主 |
发表于 2009-1-30 02:49:39
|
显示全部楼层
|
如何用Ping命令来判断一条链路的速度? . z/ r- B8 W9 g7 ]
Ping这个命令除了可以检查网络的连通和检测故障以外,还有一个比较有趣的用途,那就是可以利用它的一些返回数据,来估算你跟某台主机之间的速度是多少字节每秒 ) z. M1 q: W! ` I, t5 i% }
# ]+ u& ?" M! H* p2 k3 C# E 我们先来看看它有那些返回数据。
+ F* R; a# j E- B+ w5 K0 I: b6 a9 l5 f9 Z2 \2 f: n
Pinging 202.105.136.105 with 32 bytes of data: % I" {8 b+ K& y( j
7 M! v/ v3 c- {
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
! g; K; x1 N) D
/ ^8 ?7 g6 R# e7 J6 ?1 _ Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 / g+ w, B% W2 {- ^9 a o4 H
, j. }8 p' C- Z1 G Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 . `0 L2 r8 x3 y; D# I
2 K$ i U3 i- H, ]) u8 C
Reply from 202.105.136.105: bytes=32 time=601ms TTL=114 3 b4 j+ t4 B0 `- l0 T+ T
2 e) {4 N0 v+ A w6 h9 D: ]3 {& r Ping statistics for 202.105.136.105:
. x5 r- c% y; J4 D) u3 }" c5 }
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), 4 `) k& C/ D+ V+ \9 a P& U
, y4 N* \; }8 g' P- R2 X9 x Approximate round trip times in milli-seconds: 0 b2 d. _7 P# o4 Q2 O* I1 y
0 O% A, P' R. N+ ]- A# I Minimum = 590ms, Maximum = 601ms, Average = 593ms
4 W& a: a5 ~& l0 F
( S% @( l' L$ T" _1 w 在例子中"bytes=32"表示ICMP报文中有32个字节的测试数据(这是估算速度的关键数据),"time=590ms"是往返时间。
; ^0 ^4 N- k- S/ X
: v( s; }1 ^: ]- i9 Y 怎样估算链路的速度呢?举个例子吧。我们把A和B之间设置为PPP链路。
7 W8 R) d% ^. A+ M, h. }" |4 x6 B- \
从上面的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是因为我们还要计算它的往返时间)。
/ m! H2 a; s! L1 g3 O; _& z% s6 o% o% x% i" M5 c( E3 t- e7 g: t
我们来测试一下33600 b/s的链路:
* p# n& |3 Q( z7 V8 {9 j
7 ^9 @9 T6 R3 Y5 H7 H, \# O V$ ? Pinging 202.105.36.125 with 32 bytes of data: 4 t! E2 T8 H+ f7 k0 a2 @6 v
! n: g* F) C$ b4 f* w* ? Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 & l6 e4 Y+ y0 S$ H- V
: ?2 s) B8 o; W( v1 W M- n
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
( T) i. o4 I# K$ Q" P6 y0 t7 E4 T7 i$ v- r4 M$ t# [* r* u6 h
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
; F; t$ e0 g1 i* \7 [, C) @
1 ~$ C8 W% Z7 y, S p+ | Reply from 202.105.36.125: bytes=32 time=421ms TTL=114 + o1 ^; {- E L: j8 \ A: b7 i
/ Q, {" Y: I, _6 `/ _" j
Ping statistics for 202.105.36.125:
: r( f* n$ g0 \1 ]" i5 z
( A. ], B0 D( w: M Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), 4 L' p- \1 A, [! l; d0 n
" ]& o+ R: o; ~5 S, n! }: K8 E
Approximate round trip times in milli-seconds: 5 |# p1 g( {! }; l& k
- R9 b+ v( s& h0 X1 c. F9 G
Minimum = 415ms, Maximum = 421ms, Average = 417ms
7 g. a- g _& h+ i" O5 k
; `. Y9 q; ~1 K# @% ^' u% G: u4 q 看是不是差不多啊。 ( X s; L: k+ c0 }3 W% |1 _
2 I6 m3 h/ S! U% Q+ v
这里大家可能要注意到,这估算值跟实际值是有误差的,为什么呢?因为我们现在估算的是一个理论值,还有一些东西我们没有考虑。比如在网络中的其它干扰,这些干扰主要来之别的计算机。因为在你测试时不可能全部计算机停止使用网络给你做测试,这是不实际的。另外就是传输设备,因为有某些设备如MODEM它在传输时会把数据压缩后再发送,这大大减少了传输时间。这些东西产生的误差我们是不能避免的,但其数值大约在5%以内我们都可以接受(利用MODEM传输例外),但是可以减少误差的产生。比如把MODEM的压缩功能关闭和在网络没有那么繁忙时进行测试。有时候误差是无须消除的。因为我们需要这些误差跟所求得的理论值进行比较分析,从而找出网络的缺陷而进行优化。这时测试网络的所有数据包括误差都会成为我们优化的依据。 7 Q+ x, V' K/ h* L
% _0 F0 V- f+ z B7 i
还要注意,这种算法在局域网并不适用,因为在局域网中速度非常的快几乎少于1ms,而Ping的最小时间分辨率是1ms,所以根本无法用Ping命令来检测速度。如果想测试速度那就要用专门仪器来检测。
. W: I N+ C4 r
6 ]2 k6 y4 A- Z7 ] 总的来说,Ping命令是一个在故障检查方面很有用而且很便利的工具,你不应该忽视它的存在。 |
|