|
|
楼主 |
发表于 2009-1-30 02:49:39
|
显示全部楼层
|
如何用Ping命令来判断一条链路的速度?
% |# f2 E; ?$ K, y& Z Ping这个命令除了可以检查网络的连通和检测故障以外,还有一个比较有趣的用途,那就是可以利用它的一些返回数据,来估算你跟某台主机之间的速度是多少字节每秒
" w& }- G" B- E% L$ o
: K& x) }8 V7 p1 Q 我们先来看看它有那些返回数据。
* k2 r! P. z! }
" w: a( a$ _0 w, o- O" }; p3 a( ` Pinging 202.105.136.105 with 32 bytes of data:
1 Z6 H( {1 ]( l* S/ ]% j+ A$ R7 y$ Q w, S5 Q- o0 p w' B9 @
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
7 |; V' c9 S+ k. }- n# Q% I' }
% Y; Z. U& D9 y! n# l Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 7 [3 T/ W# b+ T- l
' Q# [! U" ~. k6 A) v5 g$ K
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
: T: m2 ~" u% K' q9 o/ b% @# c) K5 l2 U& C
Reply from 202.105.136.105: bytes=32 time=601ms TTL=114
5 z8 x4 b; }, N2 S9 O
( k5 n/ M' r5 ]; @$ y Ping statistics for 202.105.136.105: ) X7 w) l0 a& ?, A% ^/ s8 x. E
7 \, {7 N) a, Q9 v, f
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
G9 q* ~7 P, L: d; P- P5 }/ `/ r' ?# `- s8 q! v
Approximate round trip times in milli-seconds:
+ L* y f" r. E% ^% b3 g
1 V7 M& t" ~5 I. x# Y9 H( e2 c1 { Minimum = 590ms, Maximum = 601ms, Average = 593ms $ o/ b+ W# @% Z
+ T/ X* j! l; ~7 J* B 在例子中"bytes=32"表示ICMP报文中有32个字节的测试数据(这是估算速度的关键数据),"time=590ms"是往返时间。 7 w" @2 ?* q4 q* ?( [% H/ g: t
, E# k) v. l& [# C$ G- n 怎样估算链路的速度呢?举个例子吧。我们把A和B之间设置为PPP链路。
& P5 s' Z! u- f# G$ F# o( a. `! v
从上面的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是因为我们还要计算它的往返时间)。
% p [) Z3 E9 s: h6 h1 u( u; y" t& p8 a- m- Q5 B& `
我们来测试一下33600 b/s的链路:
A0 {8 E# N, R( n" B$ X
, k( f2 |( w: V3 J3 n" @; x Pinging 202.105.36.125 with 32 bytes of data:
Z! D6 Y f( m- X& h" J8 O! I6 q7 j
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
+ C' @3 X7 `3 J4 j
; m% q$ h! ^+ X8 T: T Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 . Q6 a& J8 \' r* a: H! a4 I5 @
/ ^/ q1 H4 n+ y/ d3 E
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 & }7 A; x& V8 G% s' ~ Y+ l0 J9 M
6 H; Z; W4 M! f9 `6 F Reply from 202.105.36.125: bytes=32 time=421ms TTL=114
I: b, Z# `6 ^) Y4 o8 {) S, R9 Q
Ping statistics for 202.105.36.125: , y3 I+ G+ E+ t3 u6 L. |" [+ S
/ u/ E6 y* X# ^6 ` Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), {. f3 z, h) v
! b8 s) b# z; ]8 L$ B* _ Approximate round trip times in milli-seconds: / \ d4 ]: W( z' V1 Z
! T$ j3 o3 F* z- X0 L
Minimum = 415ms, Maximum = 421ms, Average = 417ms 2 b! s, @" q1 v1 v4 y' B
# m1 a/ y: [1 z/ T8 z- n- v 看是不是差不多啊。 6 ^' q" O3 g9 U' I: @5 F& u
8 s( f; S$ G! s9 j5 [& i, A 这里大家可能要注意到,这估算值跟实际值是有误差的,为什么呢?因为我们现在估算的是一个理论值,还有一些东西我们没有考虑。比如在网络中的其它干扰,这些干扰主要来之别的计算机。因为在你测试时不可能全部计算机停止使用网络给你做测试,这是不实际的。另外就是传输设备,因为有某些设备如MODEM它在传输时会把数据压缩后再发送,这大大减少了传输时间。这些东西产生的误差我们是不能避免的,但其数值大约在5%以内我们都可以接受(利用MODEM传输例外),但是可以减少误差的产生。比如把MODEM的压缩功能关闭和在网络没有那么繁忙时进行测试。有时候误差是无须消除的。因为我们需要这些误差跟所求得的理论值进行比较分析,从而找出网络的缺陷而进行优化。这时测试网络的所有数据包括误差都会成为我们优化的依据。
k) a1 |; M5 q- @. R1 M+ }/ w* i# c" Z0 a8 [7 I5 `9 b5 a
还要注意,这种算法在局域网并不适用,因为在局域网中速度非常的快几乎少于1ms,而Ping的最小时间分辨率是1ms,所以根本无法用Ping命令来检测速度。如果想测试速度那就要用专门仪器来检测。
9 h* K2 M' ]4 B) U7 Y( L: H3 f& I1 }8 m
总的来说,Ping命令是一个在故障检查方面很有用而且很便利的工具,你不应该忽视它的存在。 |
|