📄 0140networkcommand.htm
字号:
<ul>
<li><span class=text_import1>64 bytes</span>∶表示这次传送的 ICMP 封包大小为 64 bytes 这么大,这是预设值,
在某些特殊场合中,例如要搜索整个网路内最大的 MTU 时,可以使用 -s 2000 之类的数值来取代;</li>
<li><span class=text_import1>icmp_seq=0</span>∶ICMP 所侦测进行的次数,第一次编号为 0 ;</li>
<li><span class=text_import1>ttl=243</span>∶TTL 与 IP 封包内的 TTL 是相同的,每经过一个带有 MAC
的节点 (node) 时,例如 router, bridge 时, TTL 就会减少一,预设的 TTL 为 255 ,
你可以透过 -t 150 之类的方法来重新设定预设 TTL 数值;</li>
<li><span class=text_import1>time=9.16 ms</span>∶回应时间,单位有 ms(0.001秒)及 us(0.000001秒),
一般来说,越小的回应时间,表示两部主机之间的网路连线越良好!</li>
</ul>
如果你忘记加上 -c 3 这样的规定侦测次数,那就得要使用 [ctrl]-c 将他结束掉了!<br />
<table class="term"><tr><td class="term"><pre>
<span class=term_hd>范例二∶针对整个网域进行 ping 的追查</span>
[root@linux ~]# <span class=term_command>ping -c 3 -b 192.168.10.255</span>
WARNING: pinging broadcast address <span class=term_say><==会告知危险喔!</span>
PING 192.168.10.255 (192.168.10.255) 56(84) bytes of data.
64 bytes from 192.168.10.100: icmp_seq=1 ttl=64 time=0.177 ms
64 bytes from 192.168.10.20: icmp_seq=1 ttl=64 time=0.179 ms (DUP!)
64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.302 ms (DUP!)
64 bytes from 192.168.10.40: icmp_seq=1 ttl=64 time=0.304 ms (DUP!)
<span class=term_say># 当要针对整部主机作 ping 的侦测时,可以利用 -b 这个参数。
# 请特别注意,当使用 ping -b 时,会对整个网域进行侦测喔!没事别乱用。
# 例如上面的范例中,区网内的 192.168.10.20... 等主机会被侦测到。</span>
</pre></td></tr></table>
如果想要了解区网内有多少部主机存活著,那么使用 ping -b broadcast 就能够知道了!
而不必一部一部主机来侦测啊!方便~另外也特别注意一下,
<span class=text_import2>如果您的主机与待侦测主机并不在同一个网域内,
那么 TTL 预设使用 255 ,如果是同一个网域内,那么 TTL 预设则使用 64 喔</span>!
看看上面的输出即可了解。<br /><br />
<a name="ping_mtu"></a><span class=text_import1>用 ping 追踪最大 MTU 数值</span><br /><br />
我们由前几章的<a href="0110network_basic.php">网路基础</a>里面谈到加大讯框 (frame) 时,
对于网路效能是有帮助的,因为封包打包的次数会减少,加上如果整个传输的媒体都能够接受这个 frame
而不需要重新进行封包的拆解与重组的话,那么效能当然会更好,那个修改 frame 大小的参数就是
<a href="0110network_basic.php#protocol_mtu">MTU</a> 啦!好了,现在我们知道网路卡的 MTU
可以透过 <a href="#ifconfig">ifconfig</a> 或者是 <a href="#ip_cmd">ip</a> 等来达成,
那么追踪整个网路传输的最大 MTU 时,又该如何查询?呵呵!最简单的方法当然是透过 ping 传送一个大封包,
并且不许中继的路由器或 switch 将该封包重组,那就能够处理啦!没错!可以这样的∶<br />
<table class="term"><tr><td class="term"><pre>
<span class=term_hd>范例三∶找出最大的 MTU 数值</span>
[root@linux ~]# <span class=term_command>ping -c 2 -s 1000 -M do 192.168.10.10</span>
PING 192.168.10.10 (192.168.10.10) 1000(1028) bytes of data.
1008 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.424 ms
<span class=term_say># 如果有回应,那就是可以接受这个封包,如果无回应,那就表示这个 MTU 太大了。</span>
[root@linux ~]# <span class=term_command>ping -c 2 -s 8000 -M do 192.168.10.10</span>
PING 192.168.10.10 (192.168.10.10) 8000(8028) bytes of data.
<span class=term_write>ping: local error: Message too long, mtu=1500</span>
<span class=term_say># 这个错误讯息是说,本地端的 MTU 才到 1500 而已,你要侦测 8000 的 MTU
# 根本就是无法达成的!那要如何是好?用前一小节介绍的 ip link 来进行 MTU 设定吧!</span>
</pre></td></tr></table>
不过,你需要知道的是,由于
<a href="0110network_basic.php#ipandmac_head">IP 封包表头 (不含 options) 就已经占用了 20 bytes</a> ,再加上
ICMP 的表头有 8 bytes ,所以<span class=text_import2>当然你在使用 -s size
的时候,那个封包的大小就得要先扣除 (20+8=28) 的大小了。
因此如果要使用 MTU 为 1500 时,就得要下达『 ping -s 1472 -M do xx.yy.zz.ip 』才行啊</span>!
另外,由于本地端的网路卡 MTU 也会影响到侦测,所以如果想要侦测整个传输媒体的 MTU 数值,
那么每个可以调整的主机就得要先使用 ifcofig 或 ip 先将 MTU 调大,然后再去进行侦测,
否则就会出现像上面提供的案例一样,可能会出现『Message too long, mtu=1500』之类的字样喔!
至于如果侦测完毕后,想要调整最佳化的 MTU ,那么请参考前一章节的内容来调整棉! ^_^<br /><br />
不过这个 MTU 不要随便调整啊!除非真的有问题。通常调整 MTU 的时间是在这个时候∶
<ul><span class=text_import2>
<li>因为全部的主机群都是在内部的区网,例如丛集架构 (cluster) 的环境下,
由于内部的网路节点都是我们可以控制的,因此可以透过修改 MTU 来增进网路效能;
<li>因为作业系统预设的 MTU 与您的网域不符,导致某些网站可以顺利连线,某些网站则无法连线。
以 Windows 作业系统作为连线分享的主机时,在 Client 端挺容易发生这个问题;
</span></ul>
如果是要连上 Internet 的主机,注意不要随便调整 MTU ,因为我们无法知道 Internet
上面的每部机器能够支援的 MTU 到多大,因为......不是我们能够管的到的嘛! ^_^<br /><br />
另外,其实每种连线方式都有不同的 MTU 值,常见的各种介面的 MTU 值分别为:<br /><br />
<center>
<table width=55% border=1 cellspacing=0 cellpadding=3 bgcolor=lightyellow>
<tr bgcolor=lightblue align=center><td>网路介面</td><td>MTU</td></tr>
<tr align=center><td>Ethernet</td><td>1500</td></tr>
<tr align=center><td>PPPoE</td><td>1492</td></tr>
<tr align=center><td>Dial-up(Modem)</td><td>576</td></tr>
</table></center><br />
网路上也有免费帮忙查询 MTU 与传输相关资料的网站,例如底下这个网站∶
<ul><li><a href="http://forums.speedguide.net:8117/"
target="_blank">http://forums.speedguide.net:8117/</a></ul>
连接上这个网站之前,请先取消您浏览器上的代理伺服器 (Proxy) 的设定,才能显示出正确的讯息。
如果在 Windows 的系统上面想要修改 MTU 值的话,那就得要修改 Windows 的登录档,
在 Windows 上面对于 MTU 的侦测与修改的详细作法可以参考微软的官方网站∶
<ul><li><a href="http://www.microsoft.com/taiwan/msclub/member/TIPS/Spring_2001/tip1to3/tip1to3_2.htm"
target="_blank">http://www.microsoft.com/taiwan/msclub/member/TIPS/Spring_2001/tip1to3/tip1to3_2.htm</a></ul>
</div>
<hr /><a NAME="traceroute"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class="text_h2">traceroute</span><br />
<div class=block2>
我们前面谈到的指令大多数都是针对主机的网路参数设定所需要的,而 ping 是两部主机之间的回声与否判断,
那么有没有指令可以追踪两部主机之间通过的各个节点 (node) 通讯状况的好坏呢?
举例来说,如果我们连线到 yahoo 的速度比平常慢,你觉得是 (1)自己的网路环境有问题?
(2)还是外部的 Internet 有问题?如果是 (1) 的话,我们当然需要检查自己的网路环境啊,
看看是否又有谁中毒了?但如果是 Internet 的问题呢?那只有『等等等』啊!
判断是 (1) 还是 (2) 就得要使用 traceroute 这个指令啦!<br />
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>traceroute [-nwig] IP</span>
<span class=term_say>参数∶
-n ∶可以不必进行主机的名称解析,单纯用 IP ,速度较快!
-w ∶若对方主机在几秒钟内没有回声就宣告不治...预设是 5 秒
-i ∶用在比较复杂的环境,如果你的网路介面很多很复杂时,才会用到这个参数;
举例来说,你有两条 ADSL 可以连接到外部,那你的主机会有两个 ppp,
你可以使用 -i 来选择是 ppp0 还是 ppp1 啦!
-g ∶与 -i 的参数相仿,只是 -g 后面接的是 gateway 的 IP 就是了。</span>
<span class=term_hd>范例一∶</span>
[root@linux ~]# <span class=term_command>traceroute -n tw.yahoo.com</span>
traceroute to tw.yahoo-ap1.akadns.net (203.84.202.164), 30 hops max, 38 byte packets
1 61.59.121.1 42.174 ms 41.690 ms 41.058 ms
2 139.175.172.2 40.962 ms 41.978 ms 40.973 ms
3 192.72.122.130 40.983 ms 41.930 ms 41.003 ms
4 139.175.58.210 42.956 ms 41.997 ms 42.337 ms
5 139.175.58.153 47.591 ms 47.972 ms 48.748 ms
6 139.175.56.30 48.193 ms 47.970 ms 47.986 ms
7 139.175.57.94 47.959 ms 47.951 ms 47.985 ms
8 139.175.56.138 48.363 ms 47.586 ms 47.995 ms
9 139.175.58.42 49.256 ms 50.668 ms 47.490 ms
10 61.58.33.133 201.882 ms 201.565 ms 200.973 ms
11 61.58.33.50 199.910 ms 199.019 ms 198.961 ms
12 203.84.200.226 202.391 ms 202.567 ms 209.283 ms
</pre></td></tr></table>
这个 traceroute 挺有意思的,这个指令会针对欲连接的目的地之所有 router 进行 ICMP 的逾时等待,
例如上面的例子当中,由鸟哥的主机连接到 Yahoo 时,他会经过 12 个节点,traceroute 会主动的对这
12 个节点做 ICMP 的回声等待,并侦测回覆的时间,每个节点会侦测三次。
所以像上头显示的结果,发现每个节点其实回覆的时间大约在 200 ms 以内,算是还可以的 Internet 环境了。
而且由上面的资讯来看,可以看出在 61.58.33.133 这个节点后的传输延迟较久,至于之前的
9 个节点则有不错的表现。透过这种解析,可以让您了解到这条连线是那个环节出了问题喔。<br /><br />
另外,如果在预设的 5 秒钟之内 traceroute 听不到节点的回声,那么萤幕上就会跑出一个『 * 』的符号,
告知该节点无法有顺利的回应。由于我们的 traceroute 用的是 ICMP 封包,有些防火墙或者主机可能会将 ICMP
可通过的权力拿掉,因此就会造成等不到回声的状态!另外,有些 gateway
本来就不支援 traceroute 的功能,因此也会产生那个『 * 』的状况。所以分析时得要注意一下呐!<br /><br />
</div>
<hr /><a NAME="netstat"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class="text_h2">netstat</span><br />
<div class=block2>
如果你觉得你的某个网路服务明明就启动了,但是就是无法造成连线的话,那么应该怎么办?
首先你应该要查询一下自己的网路介面所监听的埠口 (port) 来看看是否真的有启动,
因为有时候萤幕上面显示的 [OK] 并不一定是 OK 啊! ^_^<br />
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>netstat -[rn] </span> <span class=term_say><==与路由有关的参数</span>
[root@linux ~]# <span class=term_command>netstat -[antulpc]</span> <span class=term_say><==与网路介面有关的参数</span>
<span class=term_say>参数∶
与路由 (route) 有关的参数说明∶
-r ∶列出路由表(route table),功能如同 route 这个指令;
-n ∶不使用主机名称与服务名称,使用 IP 与 port number ,如同 route -n
与网路介面有关的参数∶
-a ∶列出所有的连线状态,包括 tcp/udp/unix socket 等;
-t ∶仅列出 TCP 封包的连线;
-u ∶仅列出 UDP 封包的连线;
-l ∶仅列出有在 Listen (监听) 的服务之网路状态;
-p ∶列出 PID 与 Program 的档名;
-c ∶可以设定几秒钟后自动更新一次,例如 -c 5 每五秒更新一次网路状态的显示;</span>
<span class=term_hd>范例一∶列出目前的路由表状态,且以 IP 及 port number 显示∶</span>
[root@linux ~]# <span class=term_command>netstat -rn</span>
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 192.168.10.30 0.0.0.0 UG 0 0 0 eth0
<span class=term_say># 其实这个参数就跟 route -n 一模一样,对吧!这不是 netstat 的主要功能啦!</span>
<span class=term_hd>范例二∶列出目前的所有网路连线状态,使用 IP 与 port number</span>
[root@linux ~]# <span class=term_command>netstat -an</span>
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN
tcp 0 0 :::22 :::* LISTEN
tcp 0 0 ::ffff:192.168.10.100:25 ::ffff:192.168.10.200:57509 TIME_WAIT
tcp 0 52 ::ffff:192.168.10.100:22 ::ffff:192.168.10.210:1504 ESTABLISHED
udp 0 0 127.0.0.1:53 0.0.0.0:*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 4792 public/cleanup
unix 2 [ ACC ] STREAM LISTENING 4799 private/rewrite
<span class=term_say>......(底下省略)......</span>
</pre></td></tr></table>
netstat 的输出主要分为两大部分,分
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -