|
|
楼主 |
发表于 2009-1-30 02:49:39
|
显示全部楼层
|
如何用Ping命令来判断一条链路的速度?
. Q2 M) o, W; T1 P' l. e* S; U Ping这个命令除了可以检查网络的连通和检测故障以外,还有一个比较有趣的用途,那就是可以利用它的一些返回数据,来估算你跟某台主机之间的速度是多少字节每秒 5 h0 e0 y/ ~! B) y4 e6 R7 Z
2 G" ?- u3 y; a' V) [
我们先来看看它有那些返回数据。
6 I7 U* s! y% d- B7 D
" J$ |/ ^' ~; H: } Pinging 202.105.136.105 with 32 bytes of data:
+ z, B! l) L% v+ @; Z, @4 Q1 @: J: e
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
" i% {1 n2 o5 F* t9 F7 J- V( K' U5 g! ~" ^) V% {' H( ~
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
6 v/ k0 E: q, e \2 \. e! e& i/ v. A0 L
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 $ z# w6 c/ ?; _# D$ k7 K
& P" W7 q/ X: v+ {3 N+ g$ v Reply from 202.105.136.105: bytes=32 time=601ms TTL=114
& V! {1 ^7 f8 } z! V$ Y: F: C% ]3 F2 L, `8 @# z" w& C8 T
Ping statistics for 202.105.136.105: & e7 y Z1 Z/ D4 X" k/ b$ s
* q% X# s3 E( ~( `& a) B- V" ?' E
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
+ g) D7 u( u1 m) z# x7 h( I0 d
( ^( L# T( J6 E8 I, H Approximate round trip times in milli-seconds:
7 R$ @3 ]9 E* P/ P
, s) D# ]: P3 X) \6 Q. d Minimum = 590ms, Maximum = 601ms, Average = 593ms
( {: v8 G( t0 |% F2 d1 [( {
% G" l; g+ n' V/ u, A, Q 在例子中"bytes=32"表示ICMP报文中有32个字节的测试数据(这是估算速度的关键数据),"time=590ms"是往返时间。 - o* `/ z0 [6 R4 s: G5 F
2 @: x4 |$ b: b1 ]: Y4 T ^ 怎样估算链路的速度呢?举个例子吧。我们把A和B之间设置为PPP链路。 4 z0 m; K' k1 d+ S" n
* \. q- q5 h* q2 _+ j$ y 从上面的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是因为我们还要计算它的往返时间)。
% |' T; t' C* d" W1 g% {( ~9 _) T$ B# }$ [5 N
我们来测试一下33600 b/s的链路:
8 O: q6 E4 u* T, h5 ]1 V* L
% O. a# C, T& j4 m7 L' C Pinging 202.105.36.125 with 32 bytes of data:
8 b% B7 U X$ F$ g! O* J) M: l. R
0 Z ~: A+ a" s& u# _6 _% e+ \% h Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
8 G4 x- S6 b9 R! F! K7 @* d3 R" {9 y/ ~
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
, d( R) o' w7 N5 c4 d7 o2 i# M6 ?2 k* K- x. |9 e
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 5 Z6 q) C2 H% S9 ~
1 G' L" E4 k* ~, f/ B Reply from 202.105.36.125: bytes=32 time=421ms TTL=114
2 Z: A1 ?; \0 j- t$ z7 ?3 e! A1 y; y# L; T: @+ W7 S* i
Ping statistics for 202.105.36.125:
* }, k6 `- i: a3 K' o% ]
0 M9 h0 o& h' p, m8 Z0 i# ^ Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), 7 n4 z& R4 i* w% _
' |3 ], ~5 h; p$ x3 c
Approximate round trip times in milli-seconds: " @, I4 X. w) z1 u$ X/ q
/ @. t2 x- l5 i2 y6 s- ~ Minimum = 415ms, Maximum = 421ms, Average = 417ms
- a8 F2 G5 ~: v' d: @
+ D2 O# h- I' e& [2 W2 \ 看是不是差不多啊。
) |0 \& N! f% h+ K- |& k5 T
( k& |+ I+ E. i8 ^5 w 这里大家可能要注意到,这估算值跟实际值是有误差的,为什么呢?因为我们现在估算的是一个理论值,还有一些东西我们没有考虑。比如在网络中的其它干扰,这些干扰主要来之别的计算机。因为在你测试时不可能全部计算机停止使用网络给你做测试,这是不实际的。另外就是传输设备,因为有某些设备如MODEM它在传输时会把数据压缩后再发送,这大大减少了传输时间。这些东西产生的误差我们是不能避免的,但其数值大约在5%以内我们都可以接受(利用MODEM传输例外),但是可以减少误差的产生。比如把MODEM的压缩功能关闭和在网络没有那么繁忙时进行测试。有时候误差是无须消除的。因为我们需要这些误差跟所求得的理论值进行比较分析,从而找出网络的缺陷而进行优化。这时测试网络的所有数据包括误差都会成为我们优化的依据。 . j' \, H) p- t4 h( S
1 e6 r* |4 D. x6 V. t
还要注意,这种算法在局域网并不适用,因为在局域网中速度非常的快几乎少于1ms,而Ping的最小时间分辨率是1ms,所以根本无法用Ping命令来检测速度。如果想测试速度那就要用专门仪器来检测。
; u! }3 h6 z5 B1 S7 m3 b2 ~1 `# z8 v _# L% N
总的来说,Ping命令是一个在故障检查方面很有用而且很便利的工具,你不应该忽视它的存在。 |
|