歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 管理Linux系統下的TCP/IP

管理Linux系統下的TCP/IP

日期:2017/2/27 9:44:20   编辑:更多Linux

每當裝入一個網卡驅動模塊,系統會為它分配一個設備名字,命名規則是:第一個以 太網卡是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等等地方,但是,如果喜歡有 序,你可以看看基於菜單的配置工具。



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等等地方,但是,如果喜歡有 序,你可以看看基於菜單的配置工具。



Copyright © Linux教程網 All Rights Reserved