歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 在Linux下配置TCP/IP

在Linux下配置TCP/IP

日期:2017/2/27 14:11:27   编辑:更多Linux

TCP/IP 簡史 近年來,隨著“傳輸控制協議/網際協議(TCP/IP)”套件的廣泛使用,它已經成為網絡通信中事實上的標准。這絕大部分要歸功於因特網的迅猛發展以及對在不同平台、設備和操作系統中以它們都理解的“語言”來共享數據的需要。讓我們首先了解 TCP/IP 的歷史。
在 20 世紀 60 年代後期,美國國防部(DOD)意識到其內部日漸突出的通信問題。在 DOD 工作人員、研究實驗室、大學以及承包商之間日益增長的電子信息通信量遇到了嚴重的障礙。組成 DOD 的不同實體和組織擁有來自不同計算機制造商的計算機系統,這些計算機系統運行不同的操作系統並使用不同網絡拓撲結構和協議。
高級研究項目局(Advanced Research Projects Agency,ARPA)被授命提出一種解決這個問題的方案。ARPA 與各大學和計算機制造商結盟來開發一組通信標准。該聯盟確定並構建了 4 節點的網絡,這就成為當今因特網的基礎。在 20 世紀 70 年代,該網絡移植到一個新的、核心的協議設計中,這個協議就成為 TCP/IP 的基礎。

開放系統互連(Open System Interconnection,OSI)模型
現在,我們使用許多不同類型的計算機,它們有著不同的操作系統、CPU 和網絡接口等等。這些不同使得計算機系統間的通信出現問題。在 1997 年,國際標准化組織(ISO)創建了一個小組委員會來開發數據通信標准以促進多供應商的互操作性。其結果就是開放系統互連(OSI)模型。
OSI 模型並未確定任何通信標准或協議;相反,它只是提供了通信任務應該遵循的一些指導性建議。
注:OSI 模型只是一種模型或框架,它確定了要執行的功能,理解這一點很重要。它並未詳細說明如何執行這些功能。但是,對於部分 OSI 模型,ISO 也確實接納了某些符合 OSI 標准的具體協議。例如,ISO 接受 CCITT X.25 協議,該協議作為一種實現提供了 OSI 模型中網絡層的大部分服務。
7 個 OSI 層
為簡單起見,ISO 小組委員會采用分而治之的方法。將復雜的通信過程分為較小的子任務,問題就變得更容易處理,每個子任務可以分別優化。OSI 模型由 7 層組成:
· 應用層
· 表示層
· 會話層
· 傳輸層
· 網絡層
· 數據鏈路層
· 物理層
給每一層都分配了一組特定的功能。每一層都使用下層的服務並為其上層提供服務。例如,網絡層使用數據鏈路層的服務並為傳輸層提供與網絡相關的服務。
OSI 層,續
利用相鄰層的服務和為其相鄰層提供服務,這種層的概念很簡單。考慮公司是如何運做的:秘書寫備忘錄來向總裁(相鄰的上一層)提供秘書服務。秘書使用信使的服務(相鄰的下一層)來發送消息。通過將這些服務分開,秘書(應用程序)就不必知道消息實際上是如何傳遞到接收者手中。秘書只需要求信使(網絡)發送消息即可。正如許多秘書通過使用這種標准的信使服務來發送備忘錄一樣,分層的網絡可以通過將信息包交給網絡層來發送這些信息包。
注:不要將應用層與在計算機上執行的應用程序混淆(在英文中都是一個詞 — application)。請記住,應用層是 OSI 模型的一部分,它並未具體指定用戶和通信路徑之間的接口是如何工作的,應用程序是這個接口的具體實現。實際的應用程序通常執行應用層、會話層和表示層的服務,而將傳輸層、網絡層、數據鏈接層和物理層服務留給網絡操作系統來處理。
跨層通信
每一層都與其它計算機中的同一層通信。例如,一個系統中的第 3 層與另一個計算機系統的第 3 層通信。
當信息從一層傳到下一層時,會在數據前面加一個頭,以指出該信息的來源和目的地。來自某一層的由數據和頭所組成的信息塊又成為下一層的數據。例如,當第 4 層將數據傳遞到第 3 層時,它會添加自己的頭。當第 3 層將該信息傳遞到第 2 層時,第 3 層會將來自第 4 層的頭加數據作為它的數據,並在該數據前添加第 3 層的頭,然後才將這個“頭 + 數據”組合傳給下一層。
每一層信息單元的名稱都不同:
應用層 --> 消息
傳輸層--> 段
網絡層 --> 數據報
數據鏈路層 --> 幀(也稱做信息包)
物理層 --> 位
在 OSI 模型出現前,美國國防部定義了它自己的網絡模型,即 DOD 模型。DOD 模型與 TCP/IP 協議套件有緊密的聯系,這將在下一節說明。
TCP/IP 協議棧(TCP)
TCP/IP 協議棧表示了與 OSI 模型類似的網絡體系結構。
但 TCP/IP 不象 OSI 模型那樣詳細區分協議棧的上面幾層。OSI 最上面的 3 層大致與 TCP/IP 的網際處理協議相當。處理協議的一些示例有 Telnet、FTP、SMTP、NFS、SNMP 和 DNS。
OSI 模型的傳輸層負責可靠數據的發送。在網際協議棧中,這對應於主機到主機協議。這方面的示例是 TCP 和 UDP。TCP 用來轉換來自上層協議的不定長消息以及提供遠程系統間必要的確認和面向連接的流控制。
UDP 與 TCP 相似,但它不是面向連接的,而且不對數據接收進行確認。UDP 僅接收消息並將其傳遞給上層協議。因為 UDP 沒有與 TCP 有關的那些開銷,所以它為如遠程磁盤服務等操作提供更高效的接口。

TCP/IP 協議棧(IP)
網際協議(IP)負責系統間無連接方式的通信。它相當於 OSI 模型中網絡層的一部分,它負責網絡間的信息移動。通過檢查網絡層地址來完成這種通信,該地址確定了發送消息的系統和路徑。
IP 提供與網絡層相同的功能並幫助獲取系統間的消息,但是它不保證這些消息能夠成功傳送。IP 還可以將這些消息分成多個段,然後在目的地重組這些段。另外,每一段可以采用不同的網絡路徑在系統間傳送。如果這些段到達時亂了次序,IP 則會在目的地將這些信息包重組成正確的序列。
IP 地址



網際協議要求為網絡上的每個設備分配一個地址。這個地址就是 IP 地址,它由 4 個八位元組成。這些八位元每個都定義唯一的地址,這個地址的一部分表示網絡(有時也可以表示子網),而另一部分則表示網絡上特定的節點。
在 TCP/IP 網絡中有幾個地址具有特殊含義:
· 以零開頭的地址表示當前網絡中的本地節點。例如,0.0.0.23 指當前網絡中的 23 號工作站。地址 0.0.0.0 指當前工作站。
· 在進行故障排除和網絡診斷時,以 127 開頭的地址非常重要。形式上將網絡地址塊 127.x.x.x 定義為 A 類地址,保留了該地址塊以用於內部回送(loopback)。
· 將地址上所有位全置為 1(也就是值 255)代表"所有"地址。所以,192.18.255.255 意味著將消息發送給 192.18. 網絡上的所有節點;類似的,255.255.255.255 意味著將消息發送給因特網上的每個節點。這些地址用於多點廣播消息和服務公告。
注意:給系統分配節點號時,不要使用 0 或 255,它們都是保留數字,具有特殊含義。
IP 地址類型
將 IP 地址按一定范圍分配,稱為將 IP 地址分類,這取決於應用和組織的規模。三種最常見的類型地址是 A 類地址,B 類地址和 C 類地址。這三種分類表示了可為本地網絡分配的 IP 地址中位的數目。
A 類地址用於非常大的網絡或相關網絡的集合。B 類地址用於超過 256 個節點(但少於 65536 個節點)的大型網絡。而大多數組織采用 C 類地址。一個組織采用幾個 C 類地址的做法是一個好主意,因為 B 類地址的數量是有限的。 D 類地址被保留用於網絡上消息的多點廣播,E 類地址則被保留用於實驗和開發。

類 地址
A 從 0.x.x.x 到 126.x.x.x
B 從 128.0.x.x 到 191.255.x.x
C 從 192.0.0.x 到 223.255.255.x
D 從 224.0.0.1 到 239.255.255.255
E 從 240.x.x.x 到 255.255.255.255

“專用”IP 地址
如果您的網絡沒有連接到因特網而且最近也不會連接的話,則可以自由選擇任何合法的網絡地址。只是要確保您內部網絡信息包不會跑到實際的因特網中即可。要確保即便信息包確實跑出也不會有任何危害,應該使用為專用而保留的那些網絡地址的某個號碼。因特網賦號管理局(Internet Assigned Numbers Authorit,IANA) 已經在 A、B 和 C 類地址中保留了一些網絡號,您無需注冊就可以使用這些地址。這些地址只有在專用網絡中才有效,而且(理論上)不會路由到實際的因特網站點中。

A 10.0.0.0
B 172.16.0.0 - 172.31.0.0
C 192.168.0.0 - 192.168.255.0
請注意第二塊和第三塊分別包含 16 個和 256 個網絡。
從這些網絡號碼中選擇一個地址對於那些完全沒有連接到因特網的網絡是十分有用的。通過將單個主機用做網關,仍然可以實現訪問另一個網絡(如因特網)。對於本地網絡而言,可以通過內部專用 IP 地址來訪問該網關,而外部世界則通過正式注冊的地址(由帶寬供應商分配)知道該網關。

子網和子網掩碼
劃分子網是將大型的、實際的網絡分成較小的邏輯網絡的過程。劃分網絡的原因有以下幾點:聯網技術的電氣(物理層)限制;為簡便起見,希望在建築物的每一層(或每個部門或針對每個應用)放置一個獨立的網絡而劃分網絡;減少網絡段負載;或需要用高速線路連接遠程位置。
劃分網段的結果是使整個網絡變成由一些小型子網塊組成的網絡,從而易於管理。這些較小的子網之間的通信通過網關和路由器進行。同樣,一個組織可以有幾個物理上在同一個網絡中的子網,以便將網絡功能邏輯地分成多個工作組。
單獨的子網是整個網絡的分支。假使將一個 B 類網絡分成 64 個單獨的子網。要完成這種子網劃分,需要將 IP 地址視為兩部分:網絡和主機。網絡部分由所分配的 IP 地址和子網信息位組成。實際上,這些位是借用主機的地址部分。分配給 B 類網絡來表示網絡部分的位數是 16,再加上子網部分的 6 位,共有 22 位來區分子網。這種劃分的結果是有 64 個網絡,每個網絡 1024 個節點。IP 地址中的網絡部分可大可小,這取決於所希望的網絡數目或每個網絡的節點數。


子網,第二部分
設置子網掩碼實際上就是確定網絡地址在何處結束以及主機地址在何處開始。子網掩碼是由全為 1 的網絡部分和全為零的主機部信息包成。
假使一個 C 類網由下列部信息包成:
N = 網絡
H = 主機
NNNNNNNN.NNNNNNNN.NNNNNNNN.HHHHHHHH
每一位置表示 32 位地址空間中的一位。如果將這個 C 類網分成四個 C 類網絡,其表示形式如下:
NNNNNNNN.NNNNNNNN.NNNNNNNN.NNHHHHHH
子網掩碼如下:
11111111.11111111.11111111.11000000
如果用十進制數和點符號表示(即點分四組(dotted quad))這個地址,則子網掩碼是 255.255.255.192。該掩碼用於這個特定網絡中所有子網上的節點之間的通信。

子網,示例
相反,如果從 IP 地址的主機部分取出三位,則可以形成八個網絡,其網絡掩碼如下:
11111111.11111111.11111111.11100000
該子網掩碼是 255.255.255.224。這八個網絡中的每一個可有 30 個節點,因為有 5 個地址位可以使用。(本應該是 32 個,但由於全為 1 和全為 0 是不合法的主機地址,所以不能使用)。

網絡 主機地址范圍 廣播
192.168.1.0 192.168.1.0 to 192.168.1.30 192.168.1.30
192.168.1.32 192.168.1.32 to 192.168.1.63 192.168.1.63
192.168.1.64 192.168.1.64 to 192.168.1.95 192.168.1.95
192.168.1.96 192.168.1.96 to 192.168.1.127 192.168.1.127


192.168.1.128 192.168.1.128 to 192.168.1.159 192.168.1.159
192.168.1.160 192.168.1.160 to 192.168.1.191 192.168.1.191
192.168.1.192 192.168.1.192 to 192.168.1.223 192.168.1.223
192.168.1.224 192.168.1.224 to 192.168.1.254 192.168.1.254

提示:如果需要一些計算子網方面的幫助,可以在 www.cotse.com/networkcalculator.html 上查找在線子網計算器。


跨網絡通信:網關和路由
由於 IP 尋址具有這種結構,所以主機只能與同一網絡上的其它主機通信。為克服這種限制,我們給網絡添加了路由和網關。路由是確定信息包從源到目的地所采用的路徑的機制。通過在路由表中查找目的地的 IP 地址來建立路徑或路由。如果找到該地址,則將信息包發送到那個網絡;如沒有找到,則將信息包轉發到稱為缺省路由的項,這就是所有“未知”地址的信息包轉發到的機器或設備的 IP 地址。
執行路由和/或轉發功能的機器或設備稱做網關或路由器。有時這兩個術語也可以互換使用。從技術角度講,網關描述這樣的系統或設備,它在不同類型網絡之間發送消息;而路由器在相同類型網絡之間發送消息。因為我們只討論使用 TCP/IP 協議的聯網,所以不考慮這點細微差別,但是要意識到二者之間是有區別的。
還值得注意的是,通過定義,我們知道網關裝配了不止一個網絡接口(即 A 和 B),每一個網絡接口都配置了不同的 IP 或 IP/子網。這就是“網絡橋接”得以實現的原因。信息包到達接口 A,然後根據充當網關的這台設備上路由表中的各項,執行下列四個操作之一。可以將信息包:
· 發送到網絡 A 上的主機
· 傳遞到網絡 A 上的“上游”缺省路由設備
· 發送到網絡 B 上的主機
· 傳遞到網絡 B 上的“上游”缺省路由設備

路由配置

有四種常見的路由配置:
· 最小 — 完全與其它所有網絡隔離開的網絡僅需要最小的路由。通常在初始化網絡接口時,建立最小的路由表。如果不需要與其它的 TCP/IP 網絡通信,而且不用劃分子網,則這就是系統所需的所有路由信息。
· 靜態 — 網絡有一個或兩個網關時,通常使用靜態路由來配置網絡。靜態路由表由網絡配置腳本(使用用戶提供的 IP)自動地創建或者由系統管理員手工創建(使用第五節中討論的 /sbin/route 命令)。該表正如其名稱所指的那樣 — 是靜態的。它不隨網絡的變化而做調整。當網絡變化時,必須手工重新配置該路由表。
· 動態 — 大型網絡通常都安裝了多個路由器和/或網關,出於冗余/故障恢復的目的,它們可能指向同一遠程網絡。這就是動態路由的用武之地。動態路由允許使用一種協議 — 是的,您猜對了 — 稱作路由協議,根據路由設備之間所交換的信息動態地構造(並不斷地更新)路由表。這種持續不斷的信息交換提供了一種機制,利用這種機制可以自動調節路由來適應不斷變化的網絡條件 — 譬如,通信量過大或運行中斷。動態路由的最大缺點是設備間的路由信息交換會消耗相當大的帶寬。
· 第四個選項是使用靜態和動態路由的組合。每個子網上的機器都使用靜態路由以到達緊鄰它們的機器。缺省路由 — 那些沒有由路由表分配特定路由的信息包所使用的路由 — 被設置通向一台網關機器,該機器被配置成可以提供動態路由,因此也就了解其子網以外的網絡。
動態路由是基於這幾個路由協議(內部協議,如 RIP、Hello 和 OSPF 等等;外部協議,如 EGP 和 BGP)之一,通過網關路由守護程序 gated 來啟用動態路由。動態路由不是本教程所討論的范圍。想要了解有關這方面的更多信息,請參閱本教程結束部分的“結束語,參考資料和反饋意見”中所列出的 Craig Hunt 的 TCP/IP Network Administration 一書。


繼續……
現在該將先前所有的理論知識付諸於實踐了。在接下來的章節中,我們將探討:
· Red Hat 7.0 中負責網絡接口的配置文件
· 使用 ifconfig 檢查和配置接口
· 添加和編輯靜態路由
· 使用 netstat 對網絡接口進行監視/排除故障

關鍵文件和腳本
網絡接口初始化的實際過程(有時也稱做“啟動接口”)是由一組配置文件和腳本控制的,這些文件和腳本大多數在/etc 目錄下。這些配置文件告訴 Linux 它的 IP 地址、主機名和域名;腳本則負責網絡接口的初始化。
遺憾的是,不同分發版(distribution)中文件位置和命名約定至今還沒有統一的標准。為給本文提供具體的示例,將基於廣泛使用的 Red Hat 7.0 包做出描述。請記住,若您的分發版不是使用 Red Hat 或不是基於 Red Hat 約定(如 Mandrake 分發版),在此所引用的一些文件會位於別的目錄中或有其它的名稱。然而,網絡效果和實際效果是一樣的 — 將存儲在一系列配置文件中的網絡信息傳遞給腳本,然後用腳本初始化接口和網絡路由。
涉及初始化和配置網絡接口的關鍵文件有:
· /etc/hosts (將主機名映射到 IP 地址)
· /etc/networks (將域名映射到網絡地址)
· /etc/sysconfig/network (打開或關閉聯網,設置主機名和網關)
· /etc/resolv.conf (設置名稱服務器或 DNS 服務器的 IP 地址)
· /etc/rc.d/rc3.d/S10network (在引導時激活已配置的以太網接口,由運行級別目錄 /etc/rc.d/rcN.d/ 中的符號鏈接調用)


· /etc/sysconfig/network-scripts 中一些文件的集合。這些文件包括用於網絡連接的主要配置,以及提供接口狀態和控制功能的符號鏈接。

/etc/hosts
/etc/hosts 是將 IP 地址和主機名聯系起來的簡單文本文件。 TCP/IP 網絡中的每台計算機都必須有唯一的 IP 地址。hosts 文件只允許用戶將主機名與 IP 地址聯系起來,以便當訪問計算機時使用該名稱,而不用輸入一長串數字。/etc/hosts 中的每一項都依次包含一個 IP 地址、空白和主機名和/或別名。井號(#)表示注釋開始。例如:

# /etc/hosts
# last updated 12/3/2000

127.0.0.1 loopback localhost # loopback (lo0) name/address

192.168.1.5 janus.syroidmanor.com janus
192.168.1.6 thumper.syroidmanor.com thumper
192.168.1.7 donovan.syroidmanor.com donovan
192.168.1.8 raidserver

192.168.1.20 phoenix.syroidmanor.com phoenix
192.168.1.15 hydras.syroidmanor.com hydras

在上面顯示的 Hosts 文件中,IP 地址 192.168.1.5 映射到主機 janus.syroidmanor.com ,並且分配給它一個備用主機名(或別名)janus。盡管 DNS 已經取代了這個主機文件,但出於以下原因仍然使用它:
· 大多數系統都有一個包含本地網絡上的關鍵主機的名稱和地址信息的小主機表。當 DNS 未運行時,例如,在最初系統啟動期間,則使用該表。即便本地 DNS 服務器正在運行,在每個系統上也應該有一個小 hosts 文件,該文件包含一個主機本身項、一個 localhost 項以及局域網上任何主要的網關和服務器項。
· 未連接到因特網或其他網絡的小網絡不需要 DNS 服務。然而,這些網絡上的主機也需要知道如何定位同一網絡上的其它主機。


/etc/networks
就如主機有名稱和地址一樣,為方便起見,也可以為網絡和子網命名。 /etc/networks 文件在布局上與 /etc/hosts 很相似,只不過名稱和地址互換了一下。

# /etc/networks for syroidmanor.com

localnet 127.0.0.0 #loopback
syroid-C1 192.168.1 #development, class C
syroid-C2 192.168.2 #support, class C

在上面的示例中,可將網絡名稱 syroid-C1 用於腳本或任何命令行實用程序中來引用 192.168.1 這個 C 類網。

/etc/sysconfig/network
將 /etc/sysconfig/network(注意與 /etc/networks 文件不同,這個 network 是單數而不是復數)用於指定所期望的網絡配置信息;在引導時,有幾個腳本要使用它。該文件可以包含下列所示的一個或多個關鍵字/值對:
NETWORKING=YESNO -- YES 表示需要配置網絡;NO 表示不需要配置網絡。
HOSTNAME=hostname — 主機的全限定域名;為與較老的程序兼容,這應該與在 /etc/hosts 中的主機項相匹配。
GATEWAY=gw-ip — 網絡網關的 IP 地址。
GATEWAYDEV=gw-dev — 網關設備的名稱(例如 eth0)。
NISDOMAIN=dom-name — 表示 NIS 域,如果有的話。
下面是 /etc/sysconfig/network 最小配置的示例:

NETWORKING=yes
HOSTNAME=phoenix.syroidmanor.com
GATEWAY=192.168.1.1


/etc/resolv.conf 和 /etc/rc.d/rc3.d/S10network
/etc/resolv.conf 是網絡用來確定主機解析的關鍵文件之一。在此可以標識最多三個名稱服務器;如果列在第一位的服務器未對查詢做出響應,則後面兩個起到備用的作用。domain 項定義缺省域名。解析器(順便提一下,該解析器不是一個單獨的進程,而是由網絡進程調用的例程庫)將這裡所列出的域名附加在任何不包含句點的主機查詢上。

# /etc/resolv.conf
# domain name resolver config file
domain syroidmanor.com

nameserver 192.168.1.7
nameserver 192.168.1.10
nameserver 165.142.268.19

在上面所顯示的示例中,如果提交給解析器的查詢是想要查詢找主機 phoenix(注意,沒有點),則將該域附加到這個請求之後,這會將該查詢擴展為 phoenix.syroidmanor.com。若需要了解更多詳細信息和可以使用的選項,請輸入 man resolv.conf 。
/etc/rc.d/rc3.d/S10network 是指向 /etc/rc.d/init.d/network 腳本的符號鏈接。當系統達到運行級別 3 時,它負責初始化所有已配置的網絡接口。在這裡我們不想花時間來詳細討論該文件後面的邏輯,因為該文件主要是調用本節中所提到的其它腳本和程序。但是,如果您對 S10network 中初始化各種網絡組件和服務的順序感興趣的話,則可以使用 less /etc/rc.d/rc3.d/S10network 命令來仔細研讀它。

/etc/sysconfig/network-scripts/ 目錄
最後,通常可在 /etc/sysconfig/network-scripts/ 目錄中查找到下列文件:


· /etc/sysconfig/network-scripts/ifup
· /etc/sysconfig/network-scripts/ifdown
· /etc/sysconfig/network-scripts/network-functions
· /etc/sysconfig/network-scripts/ifcfg-interface-name
· /etc/sysconfig/network-scripts/ifcfg-interface-name:clone-name
· /etc/sysconfig/network-scripts/chat-interface-name
· /etc/sysconfig/network-scripts/dip-interface-name
· /etc/sysconfig/network-scripts/ifup-post
在隨後的幾頁中,我們將簡要地看一下這些關鍵文件,了解它們做什麼和包含什麼。

……/network-scripts/,第一部分
/etc/sysconfig/network-scripts 中的 ifup 和 ifdown 項實際是分別指向 /sbin/ifup 和 /sbin/ifdown 的符號鏈接。這兩個腳本是在該目錄下唯一應該直接調用的腳本,並且它們按需要調用所有其它腳本。
ifup 和 ifdown 通常只帶一個參數:設備名(例如 eth0)。系統在引導過程期間用參數“boot”調用它們,以便於不激活沒有被配置成在系統啟動時初始化的設備(請參閱下面關於 interface-name 描述中的 ONBOOT=no)。
network-function 不是公共文件。它包含這個目錄中的幾個腳本所需的函數。具體地說,它包含了用於處理替代接口配置的大多數代碼。

……/network-scripts/,第二部分
配置文件 ifcfg-interface-name 和 ifcfg-interface-name:clone-name 包含了初始化接口所需的大部分詳細信息。第一個文件定義接口,而第二個文件僅包含與“別名”(或替代)接口相關的部分定義。例如,網絡地址或許不同,但其它可能會一樣。
在 ifcfg 文件中定義的各項目取決於接口類型;下列值很常見:
· DEVICE=name ,其中 name 是物理設備名
· IPADDR=addr ,其中 addr 是 IP 地址
· NETMASK=mask ,其中 mask 是網絡掩碼值
· NETWORK=addr ,其中 addr 是網絡地址
· BROADCAST=addr ,其中 addr 是廣播地址
· GATEWAY=addr ,其中 addr 是網關地址
· ONBOOT=answer ,其中 answer 是“yes”(引導時激活設備)或“no”
· USERCTL=answer ,其中 answer 是“yes”(非 root 用戶可以控制該設備)或“no”
· BOOTPROTO=proto ,其中 proto 取下列值之一:“none”(引導時不使用協議)“bootp”(使用 BOOTP 協議)或“dhcp”(使用 DHCP 協議)
此外,下列值對所有的 SLIP(串行線 IP)文件是公共的:
· PERSIST=answer ,其中 answer 是“yes”(即使調制解調器已經掛斷連接,也保持設備處於激活狀態)或“no”(不保持激活狀態)
· MODEMPORT=port ,其中 port 是調制解調器端口的設備名(例如,/dev/modem)
· LINESPEED=baud ,其中 baud 是調制解調器的線路速度
· DEFABORT=answer ,其中 answer 是“yes”(當創建/編輯該接口的腳本時,插入缺省的異常終止字符串)或“no”(不插入缺省的異常終止字符串)


…/network-scripts/,第三部分
chat-interface-name 文件是用於 SLIP 連接的交談腳本(chat script)。它的功能是啟動 SLIP 連接。對於 SLIP 設備,DIP 腳本是根據這個交談腳本編寫的。
chat-interface-name 是只寫腳本,它由程序 netcfg 根據交談腳本創建的。不要修改該文件。
當初始化任何網絡設備(除了 SLIP 設備)時,調用 /etc/sysconfig/network-scripts/ifup-post。它調用 /etc/sysconfig/network-scripts/ifup-routes 以啟動依賴於該設備的靜態路由,它還啟動為該設備配置的任何別名,並且,如果還沒有設置主機名,則設置主機名 — 這樣找到與該設備 IP 地址匹配的主機名。最後,ifup-post 給請求通知網絡事件的任何程序發送信號(SIGIO)。
ifconfig 程序

ifconfig 命令設置、檢查或監控網絡接口的配置值。它還可以用於設置接口的“狀態”— 即“up”(啟動)或“down”(關閉)。一個對 ifconfig 簡單的調用是:

ifconfig interface-name ip-address updown

這會激活指定的接口並將所提供的 IP 地址分配給它。
ifconfig 有許多個可用的選項(metric、mtu 以及 pointtopoint 等等;有關詳細信息,請參閱幫助頁)用於顯式地設置唯一的接口參數,但一般來說,提供接口名稱(例如, eth0)、IP 地址和網絡掩碼就足夠了。例如:

ifconfig eth0 192.168.1.5 netmask 255.255.255.0 up

分配給接口 eth0 的 IP 為 192.168.1.5,網絡掩碼為 255.255.255.0 並“啟動該接口”或將其初始化。類似的,若將接口“關閉”,則輸入 ifconfig eth0 down ;不需要指定 IP 和網絡掩碼。

使用 ifconfig 檢查接口
運行不帶參數的 ifconfig 會使該程序顯示所有網絡接口的狀態。若要檢查特定接口的狀態,則在 ifconfig 後附加這個接口的名稱。例如:

[tom@phoenix tom]$ /sbin/ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:10:5A:00:87:22


inet addr:192.168.1.20 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:9625272 errors:0 dropped:0 overruns:0 frame:0
TX packets:6997276 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
Interrupt:19 Base address:0xc800

以上輸出顯示 MAC 地址(Hwaddr)、所分配的 IP 地址(inet addr)、廣播地址(Bcast)和網絡掩碼(Mask)。另外可以看出該接口處於 UP 狀態,其 MTU 為 1500 並且 Metric 為 1。接下來的兩行給出有關接收到(RX)和已發送的(TX)信息包數,以及錯誤、丟棄和溢出信息包數的統計。最後兩行顯示沖突信息包的數目、發送隊列大小(txqueuelen)和 IRQ 以及這塊卡的基址。

配置路由
讓我們通過查看尚未配置網關的網絡接口來看一下如何配置路由。正如您所見,使用不帶參數的 route 命令將顯示內核路由表。

[root@phoenix tom]# /sbin/route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
127.0.0.0 127.0.0.1 255.0.0.0 U 0 0 0 lo
192.168.1.0 192.168.1.5 255.255.255.0 U 0 0 0 eth0

第一項是到 localhost 的回送路由,它是在配置 lo 時自動創建的。第二項是通過接口 eth0 到網絡 192.168.1.0 的路由。地址 192.168.1.5 不是遠程網關地址。它是分配給 phoenix eth0 的地址。
注意每項的標志。它們都設置了 U(啟動)標志,這表示准備使用它們,但它們都未設置 G(網關)標志。不設置 G 標志是因為這兩個路由都是通過本地接口,而不是通過外部網關的直接路由。
上述示例僅包含一個網絡路由 192.168.1.0。因而 phoenix 僅可以與位於 192.168.1.0 網絡中的主機進行通信。

添加靜態路由
最小的路由表僅允許在同一網絡中的主機互相通信。要與遠程主機通信,必須將通過外部網關的路由添加到路由表中。達到該目的的一種方法是通過使用 /sbin/route 命令。拿上頁中的例子來說,我們現在就將路由 192.168.1.1 添加到網絡配置中。

[root@phoenix tom]# /sbin/route add default 192.168.1.1 1

在上面這個示例中,route 命令後的第一個參數是關鍵字 add 。在 route 命令上的第一個關鍵字要麼是 add 要麼是 del (刪除路由)。下一個值是目的地地址,它是通過該路由到達的地址。如果關鍵字 default 用於目的地地址,則創建缺省路由。只要沒有到目的地的特定路由時,就使用缺省路由;通常,這就是您在路由表中唯一需要的項。如果網絡中只有一個網關,則使用缺省路由引導所有要到遠程網絡的數據流量通過那個網關。
這個命令行的下一個參數是網關地址。該地址必須是直接連接本機所在網絡的網關地址。在到遠程目的地的網絡路徑中,TCP/IP 路由要指定下一跳(next-hop)。這個下一中繼必須是本機可直接訪問的;因而,它必須是在直接連接在本機所在的網絡中。
注:因為大多數的路由都是在系統啟動過程早期時添加的,所以建議用數字的 IP 地址替代主機名。這樣做就可以確保路由配置不依賴於名稱服務器的狀態。而且要確保總是使用完整的數字地址(共 4 個字節);如果不用完整的 IP 地址,則路由只能猜想部分 IP 地址,這樣可能會導致不正確的配置。

靜態路由,續
在上頁的 route 命令中,最後一個參數是數字 1,稱之為路由度量(routing metric)。當刪除路由時是不需要此 metric 參數的,但是在添加路由時許多系統都需要它。盡管需要度量,route 僅使用它來確定路由是通過直接連接的接口還是通過外部的網關。如果 metric 是 0,建立的這條路由是通過本機接口且不設置 G 標志;如果 metric 值比 0 大,則建立的這條路由帶 G 標志且網關地址被認為是外部的。靜態路由不使用其它 metric 值。需要真正用到多個 metric 值的是動態路由。
要顯示新的路由表,輸入 /sbin/route 或使用 netstat -rn 命令(我們將再下一節討論該命令):

[root@phoenix tom]# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0

最後做一個測試來證明一切都如同我們講到的那樣運行,ping 另一個網絡上的主機;應該可以接收到響應。如果沒有接收到響應,則重新檢查您的配置。
要熟悉 route 其它的選項和參數,請輸入 man route 。


netstat 程序
如果管理任意規模的 TCP/IP 網絡,則 netstat 程序是一個相當有價值的工具。它可以顯示內核路由表,活動網絡連接的狀態和每個已安裝網絡接口的一些有用的統計信息。
象大多數 Linux 管理命令行程序一樣,netstat 可以通過其後面的附加選項或標志來選擇所顯示信息的細節數量和/或信息的范圍。一些常用選項有:
-a — 顯示所有連接的信息,包括那些正在偵聽的
-i — 顯示所有已配置網絡設備的統計信息
-c — 持續更新網絡狀態(每秒一次)直至被人為中止(^C)
-r — 顯示內核路由表
-n — 以數字(原始)格式而不是已解析的名稱顯示遠程和本地地址
-t — 僅顯示 TCP 套接字信息(不包括任何 UCP 套接字信息)


-v — 顯示 netstat 的版本信息
輸入 man netstat 可獲得所有可用標志的完整列表和詳細說明每個標志的用途。請注意還可以組合這些標志,所以輸入 netstat -rn 將以原始的 IP 地址格式顯示關於本地和遠程主機(n)的系統路由表(r)。

顯示活動的網絡連接
netstat 支持一組顯示活動或非活動的套接字的選項:-t、-u、-w 和 -x 分別顯示活動的 TCP、UDP、RAW 或 UNIX 套接字連接。如果加上 -a 標志,還會顯示等待連接的(換句話說,就是偵聽)套接字。這將為您顯示現在正在系統上運行的所有服務器。
例如:在主機 phoenix 上輸入 netstat -ta 會顯示下列內容:

[tom@phoenix tom]$ netstat -ta
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 40 phoenix.syroidmanor:ssh 192.168.1.5:1132 ESTABLISHED
tcp 0 0 *:ssh *:* LISTEN
tcp 0 0 phoenix.syroidmano:1028 hydras.syro:netbios-ssn ESTABLISHED
tcp 0 0 phoenix.syroidmano:1027 raidserver:netbios-ssn ESTABLISHED
tcp 0 0 *:printer *:* LISTEN
tcp 0 0 *:auth *:* LISTEN
tcp 0 0 *:1024 *:* LISTEN
tcp 0 0 *:sunrpc *:* LISTEN

上述輸出顯示大多數的服務器僅僅在等待到來的連接(LISTEN)。但是,第一行顯示主機 phoenix 和 IP 地址為 192.168.1.5 之間的連接;第三和第四行顯示兩個 netbios 連接(Samba SMB 共享)。

用 netstat 查看路由表
當使用 -r 標志時,netstat 顯示內核中的路由表,這類似於輸入 /sbin/route :

[tom@phoenix tom]$ netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0

-n 選項強制 netstat 以點分四組 IP 數字的形式,而不是主機和網絡名稱的形式輸出地址。當您不想通過網絡(例如,用 DNS 或 NIS 服務器)進行地址查詢時,這個選項特別有用。
第二列顯示路由項中所指向的網關。如果沒有使用網關,就會顯示星號。第三列是路由的網絡掩碼。內核在將信息包的 IP 地址與路由的目的地 IP 地址進行比較之前,將 Genmask 值與信息包的 IP 地址逐位進行“與”操作,從而使路由“通用化”。
第四列顯示路由的標志:U 表示處於活動狀態,H 表示主機,G 表示網關,D 表示動態路由,而 M 表示已經修改過。
用 netstat 查看路由表,續

[tom@phoenix tom]$ netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0

接下來的三列顯示 MSS、Window 和 irtt,它們將被應用於通過該路由建立的 TCP 連接。MSS(Maximum Segment Size)表示“最大分段尺寸”,也是內核所構建以通過該路由發送的數據報的最大尺寸。Window 表示系統一次從遠程主機接收突發的最大量數據。
首字母縮寫詞 irtt 代表“初始往返時間(initial round trip tim)”。TCP 協議確保主機間可靠地發送數據,如果數據已經丟失,則重新發送。TCP 協議一直對發送給遠程端點的數據報和接收到的確認所花費的時間進行記數,以便知道假定要重發數據報前需要等待的時間;這個過程稱為往返時間。TCP 協議將使用第一次建立連接時所用時間作為初始往返時間的值。對於大多數類型的網絡,用缺省值就夠了,但對某些速度較慢的網絡(特別是某些業余的分組無線網絡),這個時間太短了,會造成不必要的重發。可以使用 route 命令設置 irtt 值。在上面這個路由表中,這些字段均為零值,這表明正在使用缺省值。
最後,最後這個字段表示的是所顯示的路由使用的網絡接口。

用 netstat 顯示一些網絡接口使用的統計信息
用 -i 選項調用 netstat 可以顯示所有已配置接口的一些有用的統計信息 — 這是一個用於排除網絡故障的非常有用的工具。有了該命令,很容易檢查連接的狀態以及連接是否“正常”。

[tom@phoenix tom]$ netstat -i
Kernel Interface table
eth0 Link encap:Ethernet HWaddr 00:10:5A:00:87:22
inet addr:192.168.1.20 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:10554374 errors:0 dropped:0 overruns:0 frame:0
TX packets:8528339 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100


Interrupt:19 Base address:0xc800

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:3924 Metric:1
RX packets:5612 errors:0 dropped:0 overruns:0 frame:0
TX packets:5612 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0


RX packets 和 TX packets 行分別顯示了已經接收到的信息包或已經發送了的信息包數目以及出錯的信息包、丟失的信息包以及溢出的 RX/TX 統計信息。最常見的接口錯誤都是源於不正確的配置,所以,如果遇到了某些困難,最好再三檢查所有的設置來進行診斷。
假使接口已經啟動,則應該沒有信息包排隊等候發送(txqueuelen)— 如果有,則可能是由於網絡電纜或網卡有問題。首先換一根備用電纜,然後重新檢查連接。RX/TX 錯誤應該近乎為零。如果 TX 錯誤過多,則表示網絡已經飽和或物理連接有問題;如果 RX 錯誤過多,則表示網絡已經飽和、物理連接有問題或主機過載。如果遇到過高的沖突率(沖突率是輸出信息包(output packet)的百分比,而不是從發送/接收信息包的總數中計算得出),它可能也表示網絡已經飽和;通過從同一子網上的另一台主機執行 netstat -i 命令並比較結果來證實這一點。
要解決網絡中錯誤,一定要仔細地以及系統地分析接口的所有方面(硬件和軟件),這是必要的。不要匆忙行事,……啊……我們提到了總是要先檢查網絡電纜。在這一點,相信我。

結束語
在本教程中,我們已經討論了 TCP/IP 的歷史、OSI 模型和它與 TCP/IP 設計的關系、IP 尋址、子網劃分和路由 — 所有這些都是從理論角度來闡述的。然後我們著手研究了如何在 Red Hat 7.0 下初始化 TCP/IP 網絡,以及講述了 Red Hat 下的一些文件是做什麼用的。接下來,我們探討了如何配置網絡接口以及如何指定本地局域網和“外部世界”間的路由。最後,本教程探討了 netstat 程序以及如何使用該程序來檢查網絡是否正常。
確實,需要汲取許多知識,但是 TCP/IP 是一個很大的主題,有數百條的分支,一個人不可能在兩三天內完全掌握它。事實仍然是:TCP/IP 是因特網的主干,路由是將所有主機和網絡“粘”在一起的“粘合劑”,而 IP 地址代表我們在這個世界裡“沖浪”時所要訪問的地方。當您想到這一點,並考慮到過去三、四年人們對計算機領域,特別是因特網的需求飛速增長時,您會覺得這些基礎設施確實在非常好地支撐這些。

在網上有:
· Linux System Administrator's Guide
· 學習如何 Easily configure TCP/IP on your AIX system
· IBM 提供了一些用於網絡監控的工具,譬如 Tivoli NetView Performance Monitor for TCP/IP
· 訪問 TCP/IP for OS/40O 的主頁
· 請閱讀關於實現 iSeries 和 AS/400 的 TCP/IP 和因特網訪問
· 如果您可以在線搜索和參考,則我強烈向您推薦 O'Reilly 新的 Safari 訂閱服務。您可以完全搜索並選擇一些曾經出版過的有關網絡方面最好的書籍。
出版的書籍有:
· TCP/IP Network Administration, 2nd Edition,Craig Hunt(O'Reilly)ISBN:1-56592-322-7
· Linux in a Nutshell, 3rd Edition,Siever, Spainhour, Figgins, and Hekman(O'Reilly)ISBN:0-596-00025-1
· Running Linux, 3rd Edition, Welsh, Dalheimer, and Kaufman(O'Reilly)ISBN:1-56592-469-X



Kernel Interface table
eth0 Link encap:Ethernet HWaddr 00:10:5A:00:87:22
inet addr:192.168.1.20 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:10554374 errors:0 dropped:0 overruns:0 frame:0
TX packets:8528339 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
Interrupt:19 Base address:0xc800

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:3924 Metric:1
RX packets:5612 errors:0 dropped:0 overruns:0 frame:0
TX packets:5612 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0


RX packets 和 TX packets 行分別顯示了已經接收到的信息包或已經發送了的信息包數目以及出錯的信息包、丟失的信息包以及溢出的 RX/TX 統計信息。最常見的接口錯誤都是源於不正確的配置,所以,如果遇到了某些困難,最好再三檢查所有的設置來進行診斷。
假使接口已經啟動,則應該沒有信息包排隊等候發送(txqueuelen)— 如果有,則可能是由於網絡電纜或網卡有問題。首先換一根備用電纜,然後重新檢查連接。RX/TX 錯誤應該近乎為零。如果 TX 錯誤過多,則表示網絡已經飽和或物理連接有問題;如果 RX 錯誤過多,則表示網絡已經飽和、物理連接有問題或主機過載。如果遇到過高的沖突率(沖突率是輸出信息包(output packet)的百分比,而不是從發送/接收信息包的總數中計算得出),它可能也表示網絡已經飽和;通過從同一子網上的另一台主機執行 netstat -i 命令並比較結果來證實這一點。
要解決網絡中錯誤,一定要仔細地以及系統地分析接口的所有方面(硬件和軟件),這是必要的。不要匆忙行事,……啊……我們提到了總是要先檢查網絡電纜。在這一點,相信我。

結束語
在本教程中,我們已經討論了 TCP/IP 的歷史、OSI 模型和它與 TCP/IP 設計的關系、IP 尋址、子網劃分和路由 — 所有這些都是從理論角度來闡述的。然後我們著手研究了如何在 Red Hat 7.0 下初始化 TCP/IP 網絡,以及講述了 Red Hat 下的一些文件是做什麼用的。接下來,我們探討了如何配置網絡接口以及如何指定本地局域網和“外部世界”間的路由。最後,本教程探討了 netstat 程序以及如何使用該程序來檢查網絡是否正常。
確實,需要汲取許多知識,但是 TCP/IP 是一個很大的主題,有數百條的分支,一個人不可能在兩三天內完全掌握它。事實仍然是:TCP/IP 是因特網的主干,路由是將所有主機和網絡“粘”在一起的“粘合劑”,而 IP 地址代表我們在這個世界裡“沖浪”時所要訪問的地方。當您想到這一點,並考慮到過去三、四年人們對計算機領域,特別是因特網的需求飛速增長時,您會覺得這些基礎設施確實在非常好地支撐這些。

在網上有:
· Linux System Administrator's Guide
· 學習如何 Easily configure TCP/IP on your AIX system
· IBM 提供了一些用於網絡監控的工具,譬如 Tivoli NetView Performance Monitor for TCP/IP
· 訪問 TCP/IP for OS/40O 的主頁
· 請閱讀關於實現 iSeries 和 AS/400 的 TCP/IP 和因特網訪問
· 如果您可以在線搜索和參考,則我強烈向您推薦 O'Reilly 新的 Safari 訂閱服務。您可以完全搜索並選擇一些曾經出版過的有關網絡方面最好的書籍。
出版的書籍有:
· TCP/IP Network Administration, 2nd Edition,Craig Hunt(O'Reilly)ISBN:1-56592-322-7
· Linux in a Nutshell, 3rd Edition,Siever, Spainhour, Figgins, and Hekman(O'Reilly)ISBN:0-596-00025-1
· Running Linux, 3rd Edition, Welsh, Dalheimer, and Kaufman(O'Reilly)ISBN:1-56592-469-X



Copyright © Linux教程網 All Rights Reserved