⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0140networkcommand.htm

📁 鸟哥的linux私房菜
💻 HTM
📖 第 1 页 / 共 5 页
字号:
		<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>&lt;==会告知危险喔!</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>&lt;==与路由有关的参数</span>
[root@linux ~]# <span class=term_command>netstat -[antulpc]</span>  <span class=term_say>&lt;==与网路介面有关的参数</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 + -