發新話題

管理Linux系統下的TCP/IP

管理Linux系統下的TCP/IP

每當裝入一個網卡驅動模塊,系統會為它分配一個設備名字,命名規則是:第一個以
太網卡是eth0,第二個是eth1,....以此類推。分配可以用dmesg命令顯示,例如:

rtl8139.c:v1.07 5/6/99 Donald Becker http://cesdis.gsfc.nasa.gov/linux/dri
vers/r

tl8139.html

eth0: RealTek RTL8139 Fast Ethernet at 0xd800, IRQ 19, 00:50:ba:d0:8d:ec.

表明rtl8139的設備名字是eth0,MAC地址是十六進制0050bad08dec。

下面需要為設備分配IP地址和網絡廣播地址以便啟動TCP/IP。這要使用ifconfig命令
,其語法是

ifconfig [設備名][IP地址]netmask[網絡掩碼] broadcast [廣播地址] ....

例如,要為eth0分配ip地址202.199.248.145,掩碼為255.255.255.0,廣播地址是20
2.199.248.255,那麼命令是

/sbin/ifconfig eth0 202.199.248.145 netmask 255.255.255.0 broadcast 202.19
9.248.255

同樣的方式可以用來配置eth1,eth2,等等,通常netmask和broadcast只要設置一個
就可以了。

不帶參數的ifconfig命令可以顯示當前啟動的網絡接口:

[openlab]# ifconfig

eth0Link encap:EthernetHWaddr 00:50:BA:D0:8D:EC

inet addr:202.199.248.6Bcast:202.199.248.255Mask:255.255.255
.0

UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1

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

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

collisions:1 txqueuelen:100

Interrupt:19 Base address:0xd800


loLink encap:Local Loopback

inet addr:127.0.0.1Mask:255.0.0.0

UP LOOPBACK RUNNINGMTU:3924Metric:1

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

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

collisions:0 txqueuelen:0

lo是look-back網絡接口,從IP地址127.0.0.1就可以看出,它代表「本機」。無論系
統是否接入網絡,這個設備總是存在的,除非你在內核編譯的時候禁止了網絡支持。

如果你只是關心某個設備是否正常,可以在ifconfig後面加上接口名字:

[openlab]# ifconfig eth0

eth0Link encap:EthernetHWaddr 00:50:BA:D0:8D:EC

inet addr:202.199.248.6Bcast:202.199.248.255Mask:255.255.255
.0

UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1

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

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

collisions:1 txqueuelen:100

Interrupt:19 Base address:0xd800

表示eth0設備已經正常工作。

有時需要為某個設備接口配置多個IP地址,辦法是使用設備別名,例如,eth0設備可
以有eth0,eth0:0,eth0:1....多個別名,每個都可以有一個獨立的IP地址:

ifconfig eth0 202.199.248.2 netmask 255.255.255.0 broadcast 202.199.248.25
5

ifconfig eth0:0 202.199.248.3 netmask 255.255.255.0 broadcast 202.199.248.
255

這樣,202.199.248.2和202.199.248.3都會被綁定在eth0設備上,使用同樣的網絡設
備,不同的IP地址。

如果你要暫停某個網絡接口的工作,使用down參數:

ifconfig eth0 down

將取消eth0網絡接口。與之對應的是有一個參數up,不過由於是缺省值,所以從來不
用。

4.2.3 協議和路由配置

配置了網絡接口之後,通常本地網絡就可以通信了,通過ping命令可以顯示子網內能
否相互訪問:

[openlab]# ping 202.199.248.1

PING 202.199.248.1 (202.199.248.1) from 202.199.248.6 : 56(84) bytes of da
ta.

64 bytes from 202.199.248.1: icmp_seq=0 ttl=255 time=0.9 ms

64 bytes from 202.199.248.1: icmp_seq=1 ttl=255 time=0.9 ms

64 bytes from 202.199.248.1: icmp_seq=2 ttl=255 time=0.8 ms

64 bytes from 202.199.248.1: icmp_seq=3 ttl=255 time=0.8 ms

64 bytes from 202.199.248.1: icmp_seq=4 ttl=255 time=0.8 ms

64 bytes from 202.199.248.1: icmp_seq=5 ttl=255 time=0.8 ms

?--- 202.199.248.1 ping statistics ---

6 packets transmitted, 6 packets received, 0% packet loss

round-trip min/avg/max = 0.8/0.8/0.9 ms

注意ping命令會反覆試驗直到你按下^C為止,上面的信息說明本地網的相互通信已經
正常了。但是如果你現在ping子網外面的機器,就會得到一個「網絡不可達」的信息,
因為還沒有設置路由:

[openlab]# ping 202.112.58.200

connect: Network is unreachable

路由路徑的設置是由route命令完成的,通常,你用ifconfig命令啟動一個網絡接口的
時候會啟動一個子網內的路由,這可以用route命令顯示出來:

[openlab]# route

Kernel IP routing table

Destination Gateway Genmask Flags Metric RefUse If
ace

202.199.248.0 * 255.255.255.0 U 000 et
h0

127.0.0.0 * 255.0.0.0 U 000 lo

這兩行表示目標地址在C類網202.199.248.0(也就是,202.199.248.0到202.199.248.
255)中的數據包要送到eth0設備去廣播,而目標為A類地址127.0.0.0的數據包直接送到
lo接口。

那麼,下一步需要給出目標地址不在這個子網內的數據包的遞送地址,route命令可以
用來加入這種靜態遞送路徑:

route [add/del] [-net/-host] [目標地址] [gw] 網關地址或者

route [add/del] default gw [網關地址]

route [add/del] –net [子網地址] dev [網絡接口]

add/del表示在路由表中增加還是刪除一條路徑,而-net或者-host則表示投遞的目標
地址是一個地址還是一個網絡,如果是網絡的話,可以使用netmask參數。gw後邊跟路由
器地址。例如,要把目標地址是202.118.x.x的數據包通過202.199.248.1路由出去,使


route add –net 202.118.0.0 netmask 255.255.0.0 gw 202.199.248.1

如果要撤銷這個路由路徑,照樣重敲一遍並且使用del替換add:

route del -net 202.118.0.0 netmask 255.255.0.0 gw 202.199.248.1

當然,實際上,大部分比較小的網絡使用缺省路由,即「除了本地地址,全都投遞到
路由器」,這可以使用default參數來完成,例如,我們的缺省路由器是202.199.248.1
,那麼,使用命令

route add default gw 202.199.248.1

有時也需要設定對某個主機的確定路由路徑,這可以把-net選項換成-host,另外主機
地址不能使用掩碼,其他和上面說的一樣。route命令還有一個特殊的參數metric,用來
設置路由器的缺省跳數,不過事實上沒有人用。

route的最後一個常用參數是dev,用於設定設備接口,這個功能一般用在你有多片網
卡的時候。例如,要強制讓所有目標地址是202.199.248.0的包通過eth0送出,使用

route add –net 202.199.248.0 netmask 255.255.255.0 dev eth0

最後可以用route和ping命令檢測一下是否正確:

[openlab]# route

Kernel IP routing table

Destination Gateway Genmask Flags Metric RefUse If
ace

202.199.248.0 * 255.255.255.0 U 000 et
h0

127.0.0.0 * 255.0.0.0 U 000 lo

default router.asnc.edu 0.0.0.0 UG000 et
h0

[openlab]# ping 202.112.58.200

PING 202.112.58.200 (202.112.58.200) from 202.199.248.6 : 56(84) bytes of
data.

64 bytes from 202.112.58.200: icmp_seq=0 ttl=247 time=586.0 ms

64 bytes from 202.112.58.200: icmp_seq=1 ttl=246 time=562.2 ms

64 bytes from 202.112.58.200: icmp_seq=2 ttl=246 time=617.6 ms

?--- 202.112.58.200 ping statistics ---

4 packets transmitted, 3 packets received, 25% packet loss

round-trip min/avg/max = 562.2/588.6/617.6 ms

一般來說,經過這樣的配置之後,Linux系統已經可以使用網絡了。但是,域名系統需
要額外配置,我們這裡不涉及DNS Server,相反,假定你已經有了一個可以使用的域名
服務器,並且知道它的IP地址,那麼,你需要修改一個文件,即/etc/resolv.conf,這
個文件用於尋找正確的DNS服務器地址:

[openlab]# cat /etc/resolv.conf

search asnc.edu.cn

nameserver 202.199.248.2

search子句定義了缺省的域名後綴,例如,現在這個配置中,當你輸入ping myhost時
,系統自動將myhost解釋成myhost.asnc.edu.cn。nameserver子句給出名字服務器的IP
地址,可以有多個nameserver子句。

接下來是/etc/host.conf和/etc/nsswitch.conf兩個文件,這兩個文件定義名字解析
的順序。需要指出的是不同的Linux內核可能使用不同的定義,有的使用/etc/host.con
f,有的使用/etc/nsswitch.conf,沒有確定的標準,目前的版本主要是使用/etc/nssw
itch.conf。一般系統安裝後這兩個文件的內容已經是正確的,不過為了完整,這裡解釋
一下:/etc/host.conf的內容是

order hosts,bind

multi on

第一個order子句用於說明域名的搜索順序,hosts其實就是/etc/hosts文件的內容,
這個文件用來定義某些需要在啟動時使用的地址,例如,一個典型的/etc/hosts文件的
內容是

[openlab]# cat /etc/hosts

202.199.248.6 localhost.localdomain localhost

202.199.249.2 openlab.asnc.edu.cn openlab

202.199.248.5 solaris7.asnc.edu.cnsolaris7

202.199.248.149 tvt.asnc.edu.cn tvt

每一行定義了一個ip地址、主機名和別名。

bind指代一個dns服務。連起來的意思就是先查找本地/etc/hosts文件,然後再查詢D
NS服務器。

multi on的含義是允許一個名字有多個ip。

/etc/nsswitch.conf文件比較長,你在其中應該能看到類似這樣的行:

hosts:files dns

這一行的效果和/etc/host.conf裡的order hosts,bind是類似的。

現在你有了一個可以使用網絡的系統了,但是除了resolv.conf和host.conf/nsswitc
h.conf之外,這些內容並沒有被記憶下來,而是一旦重起就會丟失,因此,很自然的想
法是把相關的命令放到啟動腳本中,一開機就自動執行。往系統的缺省運行級目錄裡寫
一個腳本是不錯的主意,或者寫在rc.inet1,rc.sysinit等等地方,但是,如果喜歡有
序,你可以看看基於菜單的配置工具。

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。