rtl8139.c:v1.07 5/6/99 Donald Becker
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,廣播地址是202.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.255
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 data. 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 Iface 202.199.248.0 * 255.255.255.0 U 000 eth0 127.0.0.0 * 255.0.0.0 U 000 lodefault 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.conf,有的使/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文件,然後再查詢DNS服務器。
multi on的含義是允許一個名字有多個ip。
/etc/nsswitch.conf文件比較長,你在其中應該能看到類似這樣的行:
hosts:files dns這一行的效果和/etc/host.conf裡的order hosts,bind是類似的。
現在你有了一個可以使用網絡的系統了,但是除了resolv.conf和host.conf/nsswitch.conf之外,這些內容並沒有被記憶下來,而是一旦重起就會丟失,因此,很自然的想法是把相關的命令放到啟動腳本中,一開機就自動執行。往系統的缺省運行級目錄裡寫一個腳本是不錯的主意,或者寫在rc.inet1,rc.sysinit等等地方,但是,如果喜歡有序,你可以看看基於菜單的配置工具。