Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 操作系统 > Linux > Linux 常用網路指令介紹
【标  题】:Linux 常用網路指令介紹
【关键字】:Linux
【来  源】:http://www.cublog.cn/u/25308/showart.php?id=236257

Linux 常用網路指令介紹

Your Ad Here

 

 

 

 

 

Linux 常用網路指令介紹

切換解析度為 800x600

最近更新日期:2006/08/02

Linux 的網路功能相當的強悍,一時之間我們也無法完全的介紹所有的網路指令, 這個章節主要的目的在介紹一些常見的網路指令而已。至於每個指令的詳細用途將在後續伺服器架設時, 依照指令的相關性來進行說明。當然,在這個章節的主要目的是在於將所有的指令彙整在一起,比較容易瞭解啦! 還有,這一章鳥哥新增了一些封包擷取的指令,若不熟悉沒關係,先放著,全部讀完後再回來這一章仔細練習啊!



1. 網路參數設定指令:
  1.1 ifconfig, ifup, ifdown
  1.2 route
  1.3 ip
  1.4 iwlist, iwconfig
  1.5 dhclient
2. 網路偵錯與觀察指令
  2.1 ping用 ping 追蹤最大 MTU 數值
  2.2 traceroute
  2.3 netstat
  2.4 host
  2.5 nslookup
3. 遠端連線指令
  3.1 telnet
  3.2 ftp
  3.3 lftp
  3.4 gaim:圖形介面的即時通訊軟體
4. 文字介面網頁瀏覽
  4.1 lynx
  4.2 wget
5. 封包擷取功能
  5.1 tcpdump
  5.2 ethereal
  5.3 nc, netcat
6. 重點回顧
7. 課後練習

8. 參考資料
9. 針對本文的建議:http://phorum.vbird.org/viewtopic.php?t=26123


網路參數設定指令:

任何時刻如果你想要做好你的網路參數設定,包括 IP 參數、路由參數與無線網路等等, 就得要瞭解底下這些相關的指令才行!其中以 route ip 這兩支指令算是較重要的喔! ^_^ 當然,比較早期的用法,我們都是使用 ifconfig 的啦!

  • ifconfig:查詢、設定網路卡與 IP 網域等相關參數;
  • ifup, ifdown:這兩個檔案是 script ,透過更簡單的方式來啟動網路介面;
  • route:查詢、設定路由表 (route table)
  • ip:複合式的指令,可以直接修改上述提到的功能;

ifconfig, ifup, ifdown

這三個指令的用途都是在啟動網路介面,不過, ifup ifdown 僅能就 /etc/sysconfig/network-scripts 內的 ifcfg-ethx (x 為數字) 進行啟動或關閉的動作,並不能直接修改網路參數,除非手動調整 ifcfg-ethx 檔案才行。至於 ifconfig 則可以直接手動給予某個介面 IP 或調整其網路參數! 底下我們就分別來談一談先!


·  ifconfig

ifconfig 主要是可以手動的啟動、觀察與修改網路介面的相關參數,可以修改的參數很多啊, 包括 IP 參數以及 MTU 等等都可以修改,他的語法如下:

[root@linux ~]# ifconfig {interface} {up|down}  <== 觀察與啟動介面

[root@linux ~]# ifconfig interface {options}    <== 設定與修改介面

參數:

interface:網路卡介面代號,包括 eth0, eth1, ppp0 等等

options  :可以接的參數,包括如下:

    up, down :啟動 (up) 或關閉 (down) 該網路介面(不涉及任何參數)

    mtu      :可以設定不同的 MTU 數值,例如 mtu 1500 (單位為 byte)

    netmask  :就是子遮罩網路;

    broadcast:就是廣播位址啊!

範例:

 

範例一:觀察所有的網路介面(直接輸入 ifconfig)

[root@linux ~]# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0F:EA:A3:06:A2

          inet addr:192.168.10.100  Bcast:192.168.10.255  Mask:255.255.255.0

          inet6 addr: fe80::20f:eaff:fe73:682/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:3439 errors:0 dropped:0 overruns:0 frame:0

          TX packets:2735 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:646935 (631.7 KiB)  TX bytes:562313 (549.1 KiB)

          Interrupt:209 Memory:fb000000-0

一般來說,直接輸入 ifconfig 就會列出目前已經被啟動的卡, 不論這個卡是否有給予 IP ,都會被顯示出來。而如果是輸入 ifconfig eth0 , 則會秀出這張介面的相關資料,而不管該介面是否有啟動。所以如果您想要知道某張網路卡的 Hardware Address,直接輸入『 ifconfig "網路介面代號" 』即可喔! ^_^! 至於上表出現的各項資料是這樣的(資料排列由上而下、由左而右)

  • eth0:就是網路卡的代號,也有 lo 這個 loopback
  • HWaddr:就是網路卡的硬體位址,俗稱的 MAC 是也;
  • inet addrIPv4 IP 位址,後續的 Bcase, Mask 分別代表的是 Broadcast netmask 喔!
  • inet6 addr:是 IPv6 的版本的 IP ,我們沒有使用,所以略過;
  • MTU:就是 MTU 啊!
  • RX:那一行代表的是網路由啟動到目前為止的封包接收情況, packets 代表封包數、errors 代表封包發生錯誤的數量、 dropped 代表封包由於有問題而遭丟棄的數量等等
  • TX:與 RX 相反,為網路由啟動到目前為止的傳送情況;
  • collisions:代表封包碰撞的情況,如果發生太多次, 表示您的網路狀況不太好;
  • txqueuelen:代表用來傳輸資料的緩衝區的儲存長度;
  • RX bytes, TX bytes:總傳送、接收的位元組總量
  • Interrupt, Memory:網路卡硬體的資料, IRQ 岔斷與記憶體位址;

透過觀察上述的資料,大致上可以瞭解到您的網路情況,尤其是那個 RX, TX 內的 error 數量, 以及是否發生嚴重的 collision 情況,都是需要注意的喔! ^_^

範例二:暫時修改網路介面

[root@linux ~]# ifconfig eth0 192.168.100.100

# 如果不加任何其他參數,則系統會依照該 IP 所在的 class 範圍,

# 自動的計算出 netmask 以及 network, broadcast IP 參數;

 

[root@linux ~]# ifconfig eth0 192.168.100.100 netmask 255.255.255.128 \

> mtu 8000

# 設定網路介面,同時設定 MTU 的數值!

 

[root@linux ~]# ifconfig eth0 mtu 9000

# 僅修改該介面的 MTU 數值,其他的保持不動!

 

[root@linux ~]# ifconfig eth0:0 192.168.50.50

# 仔細看那個介面, eth0:0 喔!那就是在該網路介面上,再模擬一個網路介面,

# 亦即是在一張網路卡上面設定多個 IP 的意思啦!

 

[root@linux ~]# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0F:EA:A3:06:A2

          inet addr:192.168.10.100  Bcast:192.168.10.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:3669 errors:0 dropped:0 overruns:0 frame:0

          TX packets:2892 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:667547 (651.9 KiB)  TX bytes:584799 (571.0 KiB)

          Interrupt:209 Memory:fb000000-0

 

eth0:0    Link encap:Ethernet  HWaddr 00:0F:EA:A3:06:A2

          inet addr:192.168.200.2  Bcast:192.168.200.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          Interrupt:209 Memory:fb000000-0

# 仔細看,是否與硬體有關的資訊都相同啊!沒錯!因為是同一張網卡嘛!

 

[root@linux ~]# ifconfig eth0:0 down

# 關掉 eth0:0 這個介面。如果想要啟動 eth1 ,並且不給予任何網路參數,

# ifconfig eth1 up 就可以達到了!

 

[root@linux ~]# /etc/init.d/network restart

# 剛剛設定的資料全部失效,會以 ifcfg-ethx 的設定為主!

呵呵!使用 ifconfig 可以暫時手動來設定或修改某個介面卡的相關功能, 並且也可以透過 eth0:0 這種虛擬的網路介面來設定好一張網路卡上面的多個 IP 喔! 手動的方式真是簡單啊!並且設定錯誤也不打緊,因為我們可以利用 /etc/init.d/network restart 來重新啟動整個網路介面,那麼之前手動的設定資料會全部都失效喔!另外, 要啟動某個網路介面,但又不讓他具有 IP 參數時,直接給他 ifconfig eth0 up 即可! 這個動作經常在無線網卡當中會進行, 因為我們必須要啟動無線網卡讓他去偵測 AP 存在與否啊!


·  ifup, ifdown

即時的手動修改一些網路介面參數,可以利用 ifconfig 來達成,如果是要直接以設定檔, 亦即是在 /etc/sysconfig/network-scripts 裡面的 ifcfg-ethx 等檔案的設定參數來啟動的話, 那就得要透過 ifdown ifup 來達成了。

[root@linux ~]# ifup   {interface}

[root@linux ~]# ifdown {interface}

 

[root@linux ~]# ifup eth0

ifup ifdown 真是太簡單了!這兩支程式其實是 script 而已,他會直接到 /etc/sysconfig/network-scripts 目錄下搜尋對應的設定檔,例如 ifup eth0 時,他會找出 ifcfg-eth0 這個檔案的內容,然後來加以設定。 關於 ifcfg-eth0 的設定則請參考前一章連上 Internet 的說明。

不過,由於這兩支程式主要是搜尋設定檔 (ifcfg-ethx) 來進行啟動與關閉的, 所以在使用前請確定 ifcfg-ethx 是否真的存在於正確的目錄內,否則會啟動失敗喔! 另外,如果以 ifconfig eth0 .... 來設定或者是修改了網路介面後, 那就無法再以 ifdown eth0 的方式來關閉了!因為 ifdown 會分析比對目前的網路參數與 ifcfg-eth0 是否相符,不符的話,就會放棄該次動作。因此,使用 ifconfig 修改完畢後,應該要以 ifconfig eth0 down 才能夠關閉該介面喔!


路由修改 route

我們在網路基礎的時候談過關於路由的問題, 兩部主機之間一定要有路由才能夠互通 TCP/IP 的協定,否則就無法進行連線啊! 一般來說,只要有網路介面,該介面就會產生一個路由,例如在鳥哥實驗室內部的主機有一個 eth0 lo , 所以:

[root@linux ~]# route [-nee]

[root@linux ~]# route add [-net|-host] [網域或主機] netmask [mask] [gw|dev]

[root@linux ~]# route del [-net|-host] [網域或主機] netmask [mask] [gw|dev]

觀察的參數:

   -n  :不要使用通訊協定或主機名稱,直接使用 IP port number

   -ee :使用更詳細的資訊來顯示

增加 (add) 與刪除 (del) 路由的相關參數:

   -net    :表示後面接的路由為一個網域;

   -host   :表示後面接的為連接到單部主機的路由;

   netmask :與網域有關,可以設定 netmask 決定網域的大小;

   gw      gateway 的簡寫,後續接的是 IP 的數值喔,與 dev 不同;

   dev     :如果只是要指定由那一塊網路卡連線出去,則使用這個設定,後面接 eth0

 

範例一:單純的觀察路由狀態

[root@linux ~]# route -n

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 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

 

[root@linux ~]# route

Kernel IP routing table

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

192.168.10.0    *               255.255.255.0   U     0      0        0 eth0

169.254.0.0     *               255.255.0.0     U     0      0        0 eth0

default         server.cluster  0.0.0.0         UG    0      0        0 eth0

由上面的例子當中仔細觀察 route route -n 的輸出結果,你可以發現有加 -n 參數的主要是顯示出 IP ,至於使用 route 而已的話,顯示的則是『主機名稱』喔! 也就是說,在預設的情況下, route 會去找出該 IP 的主機名稱,如果找不到呢? 就會顯示的鈍鈍的(有點小慢),所以說,鳥哥通常都直接使用 route -n 啦! 由上面看起來,我們也知道 default = 0.0.0.0/0.0.0.0 , 而上面的資訊有哪些你必須要知道的呢?

  • Destination, Genmask:這兩個玩意兒就是分別是 network netmask 啦!所以這兩個咚咚就組合成為一個完整的網域囉!
  • Gateway:該網域是通過那個 gateway 連接出去的? 如果顯示 0.0.0.0 表示該路由是直接由本機傳送,亦即可以透過區域網路的 MAC 直接傳訊; 如果有顯示 IP 的話,表示該路由需要經過路由器 (通訊閘) 的幫忙才能夠傳送出去。
  • Flags:總共有多個旗標,代表的意義如下:
    • U (route is up):該路由是啟動的;
    • H (target is a host):目標是一部主機 (IP) 而非網域;
    • G (use gateway):需要透過外部的主機 (gateway) 來轉遞封包;
    • R (reinstate route for dynamic routing):使用動態路由時,恢復路由資訊的旗標;
    • D (dynamically installed by daemon or redirect):已經由服務或轉 port 功能設定為動態路由
    • M (modified from routing daemon or redirect):路由已經被修改了;
    • ! (reject route):這個路由將不會被接受(用來抵擋不安全的網域!)
  • Iface:這個路由傳遞封包的介面。

此外,觀察一下上面的路由排列順序喔,依序是由小網域 (192.168.10.0/24 Class C),逐漸到大網域 (169.254.0.0/16 Class B) 最後則是預設路由 (0.0.0.0/0.0.0.0)。 然後當我們要判斷某個網路封包應該如何傳送的時候,該封包會經由這個路由的過程來判斷喔! 舉例來說,我上頭僅有三個路由,若我有一個傳往 192.168.10.20 的封包要傳遞,那首先會找 192.168.10.0/24 這個網域的路由,找到了!所以直接由 eth0 傳送出去;

如果是傳送到 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 主機啊!所以說,路由是有順序的。

因此當你重複設定多個同樣的路由時, 例如在你的主機上的兩張網路卡設定為相同網域的 IP 時,會出現什麼情況?會出現如下的情況:

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 eth0

192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1

也就是說,由於路由是依照順序來排列與傳送的, 所以不論封包是由那個介面 (eth0, eth1) 所接收,都會由上述的 eth0 傳送出去, 所以,在一部主機上面設定兩個相同網域的 IP 本身沒有什麼意義!有點多此一舉就是了。 除非是類似虛擬主機 (Xen, VMware 等軟體) 所架設的多主機時,才會有這個必要~

範例二:路由的增加與刪除

[root@linux ~]# route del -net 169.254.0.0 netmask 255.255.0.0 dev eth0

# 上面這個動作可以刪除掉 169.254.0.0/16 這個網域!

# 請注意,在刪除的時候,需要將路由表上面出現的資訊都寫入

# 包括  netmask , dev 等等參數喔!注意注意

 

[root@linux ~]# route add -net 192.168.100.0 \

> netmask 255.255.255.0 dev eth0

# 透過 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 互通!這樣說,可以理解喔!?

 

[root@linux ~]# route add default gw 192.168.10.30

# 增加預設路由的方法!請注意,只要有一個預設路由就夠了喔!

# 在這個地方如果您隨便設定後,記得使用底下的指令重新設定你的網路

# /etc/init.d/network restart

如果是要進行路由的刪除與增加,那就得要參考上面的例子了, 其實,使用 man route 裡面的資料就很豐富了!仔細查閱一下囉! 你只要記得,當出現『SIOCADDRT: Network is unreachable』 這個錯誤時,肯定是由於 gw 後面接的 IP 無法直接與您的網域溝通 (Gateway 並不在你的網域內), 所以,趕緊檢查一下是否輸入錯誤啊!加油吧!


ip

ip 是個指令喔!並不是那個 TCP/IP IP 啦!這個 ip 指令的功能可多了! 基本上,他就是整合了 ifconfig route 這兩個指令囉~不過, ip 可以達成的功能卻又多更多! 真是個相當厲害的指令。如果您有興趣的話,請自行 vi /sbin/ifup ,就知道整個 ifup 就是利用 ip 這個指令來達成的。好了,如何使用呢?讓我們來瞧一瞧先!

[root@linux ~]# ip [option] [動作] [指令]

參數:

option :設定的參數,主要有:

    -s :顯示出該裝置的統計數據(statistics),例如總接受封包數等;

動作:亦即是可以針對哪些網路參數進行動作,包括有:

    link  :關於裝置 (device) 的相關設定,包括 MTU, MAC 位址等等

    addr/address :關於額外的 IP 協定,例如多 IP 的達成等等;

    route :與路由有關的相關設定

由上面的語法我們可以知道, ip 除了可以設定一些基本的網路參數之外,還能夠進行額外的 IP 協定, 包括多 IP 的達成,真是太完美了!底下我們就分三個部分 (link, addr, route) 來介紹這個 ip 指令吧!


·  關於裝置介面 (device) 的相關設定: ip link

ip link 可以設定與裝置 (device) 有關的相關設定,包括 MTU 以及該網路介面的 MAC 等等, 當然也可以啟動 (up) 或關閉 (down) 某個網路介面啦!整個語法是這樣的:

[root@linux ~]# ip [-s] link show  <== 單純的查閱該裝置相關的資訊

[root@linux ~]# ip link set [device] [動作與參數]