6-5 網路命令彙集
VIDEO
內容:
基本上,各種網路系統都有其專屬管理命令,我們在這裡僅介紹網路基本命令,分別說明如下。
6-5-1 測試網路介面 – ifconfig
ifconfig( Interface Configuration)是設定網路組態最重要的命令,除了可以設定各類型的網路卡之外,也可顯示介面卡的訊息。首先,我們利用 ifconfig 來觀察網路卡的工作狀況,並瞭解網路卡的介面參數之後,再來利用 ifconfig 命令來規劃網路。 ifconfig 命令格式如下:
ifconfig [interface]
ifconfig interface [aftype]
options | address ...
利用 ifconfig 命令測試網路卡的工作狀況,如下: (執行 #ifconfig 命令 )
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 120.118.165.120 netmask 255.255.255.0 broadcast 120.118.165.255
inet6 fe80::1e18:1dd3:fce7:5e62 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:7f:25:0d txqueuelen 1000 (Ethernet)
RX packets 48623 bytes 34513511 (32.9 MiB)
RX errors 0 dropped 612 overruns 0 frame 0
TX packets 10017 bytes 2245849 (2.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 668 bytes 52084 (50.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 668 bytes 52084 (50.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
如果某個網路卡未被啟動,或安裝不成功(或未取得 DHCP 伺服器給予 IP 位址)工作,則該網路卡( eth0、 eth1)的 IP 位址會看不到。由上述操作範例可以看出, eth0 與 lo 介面已正常運作,也設有相關環境參數。各網路介面參數說明如下:
( A )網路介面型態
系統中常見的介面有下列幾種:
此迴授介面為虛擬位址,即使沒有連結實際網路也有一個迴授介面。可當作一個網路介面來測試網路功能,資料由迴授介面送出,再送回主機。迴授介面名稱為 lo,而固定 IP 位址為 127.0.0.1。
如果主機上安裝有 Ethernet 網路卡,在開機時核心驅動程式就會自動尋找網路卡並建立介面。
點對點連線是利用 PPP( Point-to-Point Protocol)通訊協定,以數據機連接電話撥接網路時使用。 PPP 啟動時以 pppd 為 Daemon,第一個連接介面為 ppp0,依此類推。
( B )介面參數
我們以上述例子中顯示 eth0 和 lo 兩個介面的詳細資料,來說明有關網路介面的參數,如下:
Hwaddr: Ethernet
網路位址 。一般稱之為 MAC( Medial Access Control)位址,每一片網路卡都有其唯一固定的位址。
inet addr: Internet
位址 ,亦是 IP 位址。如果是 PPP 介面,會由撥接的網路分配。
Bcast :廣播位址。 上例是 140.127.138.255。
Mask :網路遮罩 。亦是網路位址的範圍。
MTU:最大傳輸單元( Maximum Transfer Unit )。 表示這個介面不必分段,而能傳輸的最大封包,一般 Ethernet 介面為 1500 Bytes。
Metric:向量值。 RIP( Routing Information Protocol )用來計算路徑費用的向量值 ,該值愈大表示路徑成本愈高(例如,專線承租、或傳輸速率等等)。
TX packets :傳送封包的總數 、錯誤數量、遺失數量和溢流數量。
RX packets :接收封包的總數 、錯誤數量、遺失數量和溢流數量。
6-5-2 設定網路介面 - ifconfig
我們可利用 ifconfig 設定或更改介面卡參數,常用之設定格式如下:
# ifconfig 介面 IP-位址 [broadcast 廣播位址 ] [netmask 網路遮罩 ]
( A )設定 IP 位址
設定 IP 位址格式如下:
#
ifconfig eth0 140.127.138.32 broadcast 140.127.138.255 netmask 255.255.255.0
其中介面和 IP 位址是必要的,廣播位址和網路遮罩部分,系統會依照網路等級( Class A ~ Class C)自動設定。但如果自行規劃次網路,則必須明確指定廣播位址(如 140.127.138.255)和網路遮罩( 255.255.255.0)。
( B )停止或啟動網路介面
6-5-3 靜態路由表設定 - route
對 Linux 核心而言,當要送出任一封包時,必須知道該封包應往哪一個路由傳送,因此,任一部主機都必須建構一個路由表( Routing Table),一般稱之為『靜態路由表』( Static Routing Table)。靜態路由的設定也是網路工作者最重要的工作,一般在 Linux 系統上是使用 route 命令。
( 1 )檢視靜態路由表
執行 /sbin/route 指令可以觀察系統核心內的路由表: (執行 # route 命令 )
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 100 0 0 ens33
120.118.167.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
上述是由本書範例(圖 6-1)執行的結果,因只做主機系統(只有 ens33 網路卡)並沒有路由器功能,其路由表看起來會比較單調一點。每一行代表一個路徑選擇,各欄位功能說明如下:
由上例中的最後一列 default,表示主機所欲傳送之目的位址不在路由表內,就傳送到 default 這條路徑上,通常 default 都是經由 Gateway 轉送。
( 2 )設定靜態路由表 - 主機為目的地
設定某一主機為路由的目的地之格式為:
# /sbin/route add –host [gw gateway] [metric cost] [netmask 遮罩 ] [dev 介面 ]
其中 metric、網路遮罩與介面通常都不用加入,系統會自行設定,例如:
#
route add -host 140.127.138.33 eth0 [加入主機位址 ]
#
route [顯示路由表內容 ]
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
140.127.138.33 * 255.255.255.255 UH 0 0 0 eth0
140.127.138.0 * 255.255.255.0 U 0 0 0 eth0
169.254.0.0 * 255.255.0.0 U 0 0 0 eth0
default 140.127.138.254 0.0.0.0 UG 0 0 0 eth0
( 3 )設定靜態路由表 – 以網路的路由
主機依照欲傳送之封包(或由其它介面進入之封包)的網路位址,來決定轉送到哪一個網路閘門,格式為:
#
route add –net 位址 [gw gateway] [metric cost] [netmask 遮罩 ] [dev 介面 ]
例如:
#
route add -net 140.127.139.0 netmask 255.255.255.0 gw 140.127.138.254
[增加一條路由表路徑 ]
#
route [顯示路由表內容 ]
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
140.127.138.33 * 255.255.255.255 UH 0 0 0 eth0
140.127.139.0 140.127.138.254 255.255.255.0 UG 0 0 0 eth0
140.127.138.0 * 255.255.255.0 U 0 0 0 eth0
169.254.0.0 * 255.255.0.0 U 0 0 0 eth0
default 140.127.138.254 0.0.0.0 UG 0 0 0 eth0
( 4 )設定預設路由
預設路由( default)通常是通往網路外部的網路閘門。格式為:
# route add default gw gateway_位址
例如:
#
route add default gw 140.127.138.253 [加入預定匣門 ]
#
route [顯示路由表內容 ]
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
140.127.138.33 * 255.255.255.255 UH 0 0 0 eth0
140.127.139.0 140.127.138.254 255.255.255.0 UG 0 0 0 eth0
140.127.138.0 * 255.255.255.0 U 0 0 0 eth0
169.254.0.0 * 255.255.0.0 U 0 0 0 eth0
default 140.127.138.253 0.0.0.0 UG 0 0 0 eth0
default 140.127.138.254 0.0.0.0 UG 0 0 0 eth0
( 5 )刪除路由
刪除不必要的路由,例如:
#
route del default gw 140.127.138.253
#
route del 140.127.138.33
6-5-4 測試網路 – ping
ping 為最常用的網路測試命令,一般都是針對主機或網路閘門的 IP 位址進行測試,它的方法是送出一個 ICMP Echo Request 封包到目的地,目的主機收到後會立即回覆一個 ICMP Echo Reply 給原發送端,由發送端計算來回的時間,並顯示出來。使用者利用此來回時間可以預估網路狀態,如果遺失封包過多或延遲時間過長表示網路狀態不穩定。但是當網路不正常,或主機不存在時,發送端在逾時( Time out)沒有收到 Echo Reply 時,也會顯示出來,並繼續發送 Echo Request 封包。 ping 命令格式如下:
其實 ping 命令格式變化很多,我們僅列出較常用的選項:
-c count : 設定 ping 的傳送次數( count),預設值為 30。
-d
: 啟動 Socket 的 SO_DEBUG 功能。
-f
: 極速偵測( Flood ping),會快速的連續傳送 ping 封包來測試。
-i wait :每筆偵測的相隔時間,預設值為 1 秒。
-I Interface_address :發出封包的介面卡位址。
-r :忽略 Routing Table,而將封包直接送到遠端主機。。
-R :記錄路由過程。
-v :顯示詳細的執行過程。
操作範例:(執行 # ping 168.95.1.1
命令 )
PING 168.95.1.1
(168.95.1.1) from 192.168.0.50 : 56(84) bytes of data.
64 bytes
from dns.hinet.net (168.95.1.1): icmp_seq=0 ttl=246 time=85.3 ms
---
168.95.1.1 ping statistics ---
6 packets
transmitted, 6 packets received, 0% packet loss
round-trip
min/avg/max = 80.4/114.0/272.7 ms
一般主機發送 ICMP 封包時都將 TTL( Time-to-Live)設定為 255,因此由上例中,可以看出每一個封包回來時 TTL 皆為 246,表示到達目的主機( 168.95.1.1)必須經過 9( 255-246)個網路閘門,另外每個封包來回的時間也不一定相同。
6-5-5 路由追蹤 – traceroute
在網路上還有一個重要的管理命令就是 traceroute,當我們希望瞭解封包到達目的地的路徑狀況時,就必須利用 traceroute 來追蹤封包所經過的路徑。但在一般 Internet 網路上,每次封包所經過的路徑也許不同,因此,任何時間執行 traceroute 的結果當然就不會相同,首先我們來探討 traceroute 的運作原理。
最主要的是 traceroute 使用 ICMP 及 IP 標頭裡的 TTL( Time-to-Live)欄位。一般情況下,封包每經過一個網路閘門 TTL 值就被減 1,如果路由器收到一個 TTL 值減 1 以後為 0 時,便會回送一個 ICMP Time Exceeded( Type 11)(逾時)給原發送端,並將該封包丟棄, traceroute 就是利用這種特性來追蹤路徑。它的運作情況如下:首先 traceroute 送出一個 TTL 為 1 的 IP 封包到目的主機,第一個收到的路由器將 TTL 減 1,丟棄該封包,並回送 ICMP 給原發送主機,這個過程確認了這條路徑的第一個路由器;接下來, traceroute 再送 TTL 為 2 的 IP 封包,又可以得到第二個路由器位址,如此重覆一直到封包到達目的主機為止。但當封包到達目的位址時,它的 TTL 也被減成 0,同樣回應 ICMP Time Exceeded 封包,發送端如何來判斷封包已到達目的呢?
其實 traceroute 是以 UDP 封包格式發送,我們只要將 UDP 埠口設定在不可能使用的埠口上即可,一般都會將它設定較大的值(如 30000)。當目的主機收到後,判斷是自己的 IP 位址,但無此埠口服務,便會回應一個 ICMP Port Unreachable(埠口無法到達)給發送端,發送端只要利用『 ICMP 埠口無法到達』和『 ICMP 逾時』就可判斷是否到達目的主機。一般封包的 TTL 欄位預設值為 255(如 ping),這可能造成 traceroute 的封包在網路上無窮的回繞,因此, traceroute 的 TTL 預設值為 30,表示最高可以追蹤 30 個經過的網路閘門,但可以設定改變其大小。
traceroute 的命令格式如下:
# /usr/sbin/traceroute [選項 ] 主機位址
同樣的, traceroute 的選項也是很多,我們還是僅列出比較常用的選項:
-d
:使用 Socket 層級的除錯功能。
-F :設定 Don’t Fragment 位元。
-g Gateway :設定路由器位址,最多 8 個。
-m count :設定最大 TTL 值,預設值為 30。
-n
:使用 IP 位址,而不用主機名稱。
-r
:忽略 Routing Table,直接將封包傳送到目的位址。
-v :顯示詳細執行過程。
操作範例:(執行 # traceroute 168.95.1.1 )
Tracing route to dns.hinet.net [168.95.1.1]
over a maximum of 30 hops:
1 2 ms <10 ms 1 ms 163.15.2.62
2 * * * Request timed out.
3 72 ms 72 ms 70 ms 202.145.93.254
4 75 ms 72 ms 76 ms ks.ttn.net [202.145.84.254]
5 81 ms 82 ms 78 ms p25545.wan145.ficnet [202.145.255.45]
6 79 ms 81 ms 79 ms 210.243.127.4
7 85 ms 78 ms 81 ms twix2.ttn.net [202.145.255.98]
8 83 ms 80 ms 81 ms 211.22.41.186
9 82 ms 83 ms 79 ms 211.22.35.98
10 80 ms 79 ms 84 ms 211.22.35.1
11 81 ms 81 ms 80 ms dns.hinet.net [168.95.1.1]
Trace complete.
由上例中可以看出,我們追蹤到 168.95.1.1 經過了 9 個網路閘門(或路由器), traceroute 針對每一個路徑送出 3 個 IP 封包,所回應的時間也不一定相同。追蹤路徑為:第一次到達 163.15.2.62 有回應,但經由 163.15.2.62 往下一個路徑(第二次發送)連續 3 個封包都沒有回應,因此退回來,又找出第一個路徑是 202.145.93.254,得到回應,再經由 202.145.93.254 往下一個路徑( 202.145.84.254);連續下去一直到達目的位址 168.95.1.1,其中共經過 9 個網路閘門。
6-5-6 顯示網路狀態 - netstat
顯示網路狀態命令 – netstat 是一個非常實用的工具,不但可以顯示網路運作情形,也可顯示路由表,以及其它重要的訊息,命令格式如下:
較常用的選項如下:
-a :顯示目前所有連接的 Socket。
-c :持續列出網路狀態。
-C :顯示路由快取資訊。
-e :顯示詳細的網路資訊。
-g :顯示多重廣播群組名單。
-i :顯示網路介面資訊。
-I :顯示傾聽中的 Socket 清單。
-M :顯示偽裝連線( NAT)。
-n :顯示 IP 位址而不是主機名稱。
-r :顯示路由表。
-s :顯示網路資訊統計清單。
-t :顯示 TCP 連線狀態。
-u :顯示 UDP 連線狀態。
-v :顯示詳細資訊。
-w :顯示 Raw Socket 連線。
操作範例:(執行 # netstat –rn
命令 ,查閱路由表)
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
140.127.139.0 140.127.138.254 255.255.255.0 UG 0 0 0 eth0
140.127.138.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 140.127.138.254 0.0.0.0 UG 0 0 0 eth0
6-5-7 ARP 快取表命令 - arp
如果需要查詢或增減 ARP 快取表( ARP Cache Table),可以使用 arp 指令,格式為:
其中常用之選項為:
操作範例:(執行
# arp
命令 )
Address HWtype HWaddress Flags Mask Iface
gateway ether 00:25:46:86:88:4b C ens33
120.118.165.107 ether 00:25:b3:0a:c1:17 C ens33
6-5-8 DNS 查詢 - nslookup
我們可以利用 nslookup 命令來查詢所指定 DNS 伺服器( /etc/resolv.conf)上的資料,也可以變換 DNS 伺服器查詢其他網域名稱的資料,如下: (執行
nslookup 命令 )
> server 【目前指定的 DNS Server 】
Default server: 140.127.1.1
Address: 140.127.1.1#53
> server 168.95.1.1 【變換 DNS Server 】
Default server: 168.95.1.1
Address: 168.95.1.1#53
> www.nsysu.edu.tw 【查詢主機的 IP 位址】
Server: 168.95.1.1
Address: 168.95.1.1#53
Non-authoritative answer:
Name: www.nsysu.edu.tw
Address: 140.117.11.112
> exit 【離開 nslookup 】