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

📄 0140networkcommand.htm

📁 鸟哥的linux私房菜
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<span class=term_write>default         server.cluster  0.0.0.0</span>         UG    0      0        0 eth0
</pre></td></tr></table>

		由上面的例子当中仔细观察 route 与 route -n 的输出结果,你可以发现有加 -n 
		参数的主要是显示出 IP ,至于使用 route 而已的话,显示的则是『主机名称』喔!
		也就是说,在预设的情况下, route 会去找出该 IP 的主机名称,如果找不到呢?
		就会显示的钝钝的(有点小慢),所以说,鸟哥通常都直接使用 route -n 啦!
		由上面看起来,我们也知道 <span class=text_import2>default = 0.0.0.0/0.0.0.0</span> ,
		而上面的资讯有哪些你必须要知道的呢?<br />
		<ul>
		<li><span class=text_import1>Destination, Genmask</span>∶这两个玩意儿就是分别是 network 与 
			netmask 啦!所以这两个咚咚就组合成为一个完整的网域棉!</li>
		<li><span class=text_import1>Gateway</span>∶该网域是通过那个 gateway 连接出去的?
			如果显示 0.0.0.0 表示该路由是直接由本机传送,亦即可以透过区域网路的 MAC 直接传讯;
			如果有显示 IP 的话,表示该路由需要经过路由器 (通讯闸) 的帮忙才能够传送出去。</li>
		<li><span class=text_import1>Flags</span>∶总共有多个旗标,代表的意义如下∶
			<ul>
			<li><span class=text_import2>U (route is up)∶该路由是启动的;</span>
			<li>H (target is a host)∶目标是一部主机 (IP) 而非网域;
			<li><span class=text_import2>G (use gateway)∶需要透过外部的主机 (gateway) 来转递封包;</span>
			<li>R (reinstate route for dynamic routing)∶使用动态路由时,恢复路由资讯的旗标;
			<li>D (dynamically installed by daemon or redirect)∶已经由服务或转 port 功能设定为动态路由
			<li>M (modified from routing daemon or redirect)∶路由已经被修改了;
			<li>!  (reject route)∶这个路由将不会被接受(用来抵挡不安全的网域!)</ul></li>
		<li><span class=text_import1>Iface</span>∶这个路由传递封包的介面。</li>
		</ul>
		此外,观察一下上面的路由排列顺序喔,<span class=text_import2>依序是由小网域 
		(192.168.10.0/24 是 Class C),逐渐到大网域
		(169.254.0.0/16 Class B) 最后则是预设路由 (0.0.0.0/0.0.0.0)</span>。
		然后当我们要判断某个网路封包应该如何传送的时候,该封包会经由这个路由的过程来判断喔!
		举例来说,我上头仅有三个路由,若我有一个传往 192.168.10.20 的封包要传递,那首先会找 192.168.10.0/24
		这个网域的路由,找到了!所以直接由 eth0 传送出去;<br /><br />

		如果是传送到 Yahoo 的主机呢? Yahoo 的主机 IP 是 202.43.195.52,我通过判断 1)不是 192.168.10.0/24,
		2)不是 169.254.0.0/16 结果到达 3)0/0 时,OK!传出去了,透过 eth0 将封包传给 192.168.10.30 
		那部 gateway 主机啊!所以说,路由是有顺序的。<br /><br />

		因此当你重复设定多个同样的路由时,
		例如在你的主机上的两张网路卡设定为相同网域的 IP 时,会出现什么情况?会出现如下的情况∶<br />

<table class="term"><tr><td class="term"><pre>
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 <span class=term_write>eth0</span>
192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 <span class=term_write>eth1</span>
</pre></td></tr></table>

		也就是说,<span class=text_import2>由于路由是依照顺序来排列与传送的,
		所以不论封包是由那个介面 (eth0, eth1) 所接收,都会由上述的 eth0 传送出去</span>,
		所以,在一部主机上面设定两个相同网域的 IP 本身没有什么意义!有点多此一举就是了。
		除非是类似虚拟主机 (Xen, VMware 等软体) 所架设的多主机时,才会有这个必要~<br />

<table class="term"><tr><td class="term"><pre>
<span class=term_hd>范例二∶路由的增加与删除</span>
[root@linux ~]# <span class=term_command>route del -net 169.254.0.0 netmask 255.255.0.0 dev eth0</span>
<span class=term_say># 上面这个动作可以删除掉 169.254.0.0/16 这个网域!
# 请注意,在删除的时候,需要将路由表上面出现的资讯都写入
# 包括  netmask , dev 等等参数喔!注意注意</span>

[root@linux ~]# <span class=term_command>route add -net 192.168.100.0 \</span>
> <span class=term_command>netmask 255.255.255.0 dev eth0</span>
<span class=term_say># 透过 route add 来增加一个路由!请注意,这个路由必须要能够与你互通。
# 举例来说,如果我下达底下的指令就会显示错误∶
# route add -net 192.168.200.0 netmask 255.255.255.0 gw 192.168.200.254
# 因为我的环境内仅有 192.168.10.100 这个 IP ,所以不能与 192.168.200.254
# 这个网段直接使用 MAC 互通!这样说,可以理解喔!?</span>

[root@linux ~]# <span class=term_command>route add default gw 192.168.10.30</span>
<span class=term_say># 增加预设路由的方法!请注意,只要有一个预设路由就够了喔!
# 在这个地方如果您随便设定后,记得使用底下的指令重新设定你的网路
# /etc/init.d/network restart</span>
</pre></td></tr></table>

		如果是要进行路由的删除与增加,那就得要参考上面的例子了,
		其实,使用 man route 里面的资料就很丰富了!仔细查阅一下棉!
		你只要记得,当出现『<span class=text_import2>SIOCADDRT: Network is unreachable</span>』
		这个错误时,肯定是由于 gw 后面接的 IP 无法直接与您的网域沟通 (Gateway 并不在你的网域内),
		所以,赶紧检查一下是否输入错误啊!加油吧!<br /><br />
	</div>

	<hr /><a NAME="ip_cmd"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class="text_h2">ip</span><br />
	<div class=block2>
		ip 是个指令喔!并不是那个 TCP/IP 的 IP 啦!这个 ip 指令的功能可多了!
		基本上,他就是整合了 ifconfig 与 route 这两个指令棉~不过, ip 可以达成的功能却又多更多!
		真是个相当厉害的指令。如果您有兴趣的话,请自行 vi /sbin/ifup ,就知道整个 ifup 
		就是利用 ip 这个指令来达成的。好了,如何使用呢?让我们来瞧一瞧先!<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>ip [option] [动作] [指令]</span>
<span class=term_say>参数∶
option ∶设定的参数,主要有∶
    -s ∶显示出该装置的统计数据(statistics),例如总接受封包数等;
动作∶亦即是可以针对哪些网路参数进行动作,包括有∶
    link  ∶关于装置 (device) 的相关设定,包括 MTU, MAC 位址等等
    addr/address ∶关于额外的 IP 协定,例如多 IP 的达成等等;
    route ∶与路由有关的相关设定</span>
</pre></td></tr></table>

		由上面的语法我们可以知道, ip 除了可以设定一些基本的网路参数之外,还能够进行额外的 IP 协定,
		包括多 IP 的达成,真是太完美了!底下我们就分三个部分 (link, addr, route) 来介绍这个 ip 
		指令吧!<br /><br />

		<hr><li><span class=text_import1>关于装置介面 (device) 的相关设定∶ ip link</span></li>
		<div class=block2>
		ip link 可以设定与装置 (device) 有关的相关设定,包括 MTU 以及该网路介面的 MAC 等等,
		当然也可以启动 (up) 或关闭 (down) 某个网路介面啦!整个语法是这样的∶<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>ip [-s] link show</span>  <span class=term_say>&lt;== 单纯的查阅该装置相关的资讯</span>
[root@linux ~]# <span class=term_command>ip link set [device] [动作与参数]</span>
<span class=term_say>参数∶
show∶仅显示出这个装置的相关内容,如果加上 -s 会显示更多统计数据;
set ∶可以开始设定项目, device 指的是 eth0, eth1 等等介面代号;
动作与参数∶包括有底下的这些动作∶
   up|down  ∶启动 (up) 或关闭 (down) 某个介面,其他参数使用预设的乙太网路;
   address  ∶如果这个装置可以更改 MAC 的话,用这个参数修改!
   name     ∶给予这个装置一个特殊的名字;
   mtu      ∶就是最大传输单元啊!</span>

<span class=term_hd>范例一∶显示出所有的介面资讯</span>
[root@linux ~]# <span class=term_command>ip link show</span>
1: lo: &lt;LOOPBACK,UP,10000> mtu 16436 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: &lt;BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:50:fc:22:9a:cb brd ff:ff:ff:ff:ff:ff
3: sit0: &lt;NOARP> mtu 1480 qdisc noop
    link/sit 0.0.0.0 brd 0.0.0.0

[root@linux ~]# <span class=term_command>ip -s link show eth0</span>
2: eth0: &lt;BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:50:fc:22:9a:cb brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    484011792  2247372  0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    2914104290 2867753  0       0       0       0
</pre></td></tr></table>

		使用 ip link show 可以显示出整个装置介面的硬体相关资讯,如上所示,包括网卡位址(MAC)、MTU等等,
		比较有趣的应该是那个 sit0 的介面了,那个 sit0 的介面是用在 IPv4 及 IPv6 的封包转换上的,
		对于我们仅使用 IPv4 的网路是没有作用的。 lo 及 sit0 都是主机内部所自行设定的。
		而如果加上 -s 的参数后,则这个网路卡的相关统计资讯就会被列出来,
		包括接收 (RX) 及传送 (TX) 的封包数量等等,详细的内容与 ifconfig 所输出的结果相同的。<br />

<table class="term"><tr><td class="term"><pre>
<span class=term_hd>范例二∶启动、关闭与设定装置的相关资讯</span>
[root@linux ~]# <span class=term_command>ip link set eth0 up</span>
<span class=term_say># 启动 eth0 这个装置介面;</span>

[root@linux ~]# <span class=term_command>ip link set eth0 down</span>
<span class=term_say># 阿就关闭啊!简单的要命~</span>

[root@linux ~]# <span class=term_command>ip link set eth0 mtu 1000</span>
<span class=term_say># 更改 MTU 的值,达到 1000 bytes,单位就是 bytes 啊!</span>
</pre></td></tr></table>

		更新网路卡的 MTU 使用 ifconfig 也可以达成啊!没啥了不起,不过,如果是要更改『网路卡代号、
		MAC 位址的资讯』的话,那可就得使用 ip 棉~不过,设定前得要先关闭该网路卡,否则会不成功。
		如下所示∶<br />

<table class="term"><tr><td class="term"><pre>
<span class=term_hd>范例三∶修改网路卡代号、MAC 等参数</span>
[root@linux ~]# <span class=term_command>ip link set eth0 name vbird</span>
SIOCSIFNAME: Device or resource busy
<span class=term_say># 因为该装置目前是启动的,所以不能这样做设定。你应该要这样做∶</span>

[root@linux ~]# <span class=term_command>ip link set eth0 down      </span> <span class=term_say>&lt;==关闭介面</span>
[root@linux ~]# <span class=term_command>ip link set eth0 name vbird</span> <span class=term_say>&lt;==重新设定</span>
[root@linux ~]# <span class=term_command>ip link show               </span> <span class=term_say>&lt;==观察一下</span>
2. <span class=term_write>vbird</span>: &lt;BROADCAST,MILTICASE> mtu 900 qdisc pfifo_fast qlen 1000
    link/ehter 00:40:d0:13:c3:46 brd ff:ff:ff:ff:ff:ff
<span class=term_say># 怕了吧!连网路卡代号都可以改变!不过,玩玩后记得改回来啊!
# 因为我们的 ifcfg-eth0 还是使用原本的装置代号!避免有问题,要改回来</span>
[root@linux ~]# <span class=term_command>ip link set vbird name eth0</span> <span class=term_say>&lt;==介面改回来</span>

[root@linux ~]# <span class=term_command>ip link set eth0 address aa:aa:aa:aa:aa:aa</span>
[root@linux ~]# <span class=term_command>ip link show eth0</span>
<span class=term_say># 如果你的网路卡支援硬体位址 (MAC) 可以更改的话,
# 那么上面这个动作就可以更改你的网路卡位址了!厉害吧!
# 不过,还是那句老话,测试完之后请立刻改回来啊!</span>
</pre></td></tr></table>

		在这个装置的硬体相关资讯设定上面,包括 MTU, MAC 以及传输的模式等等,都可以在这里设定。
		有趣的是那个 address 的项目,那个项目后面接的可是硬体位址 (MAC) 而不是 IP 喔!
		很容易搞错啊!切记切记!更多的硬体参数可以使用 man ip 查阅一下与 ip link 有关的设定。<br /><br />
		</div>

		<hr><li><span class=text_import1>关于额外的 IP 相关设定∶ ip address</span></li>
		<div class=block2>
		如果说 ip link 是与 <a href="0110network_basic.php#whatisnetwork_osi">OSI 七层协定</a> 
		的第二层资料连阶层有关的话,那么 ip address (ip addr) 就是与第三层网路层有关的参数啦!
		主要是在设定与 IP 有关的各项参数,包括 netmask, broadcast 等等。<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>ip address show</span>   <span class=term_say>&lt;==就是查阅 IP 参数啊!</span>
[root@linux ~]# <span class=term_command>ip address [add|del] [IP参数] [dev 装置名] [相关参数]</span>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -