Shell 網(wǎng)絡操作

2018-10-26 16:46 更新

前言

前面章節(jié)已經介紹了Shell編程范例之數(shù)值、布爾值、字符串、文件、文件系統(tǒng)、進程等的操作。這些內容基本覆蓋了網(wǎng)絡中某個獨立機器正常工作的“方方面面”,現(xiàn)在需要把視角從單一的機器延伸到這些機器通過各種網(wǎng)絡設備和協(xié)議連接起來的網(wǎng)絡世界,分析網(wǎng)絡拓撲結構、網(wǎng)絡工作原理、了解各種常見網(wǎng)絡協(xié)議、各種常見硬件工作原理、網(wǎng)絡通信與安全相關軟件以及工作原理分析等。

不過,因為網(wǎng)絡相關的問題確實太復雜了,這里不可能介紹具體,因此如果想了解更多細節(jié),還是建議參考相關資料。但Linux是一個網(wǎng)絡原理學習和實踐的好平臺,不僅因為它本身對網(wǎng)絡體系結構的實現(xiàn)是開放源代碼的,而且各種相關的分析工具和函數(shù)庫數(shù)不勝數(shù),因此,如果你是學生,千萬不要錯過通過它來做相關的實踐工作。

網(wǎng)絡原理介紹

我們的網(wǎng)絡世界

在進行所有介紹之前,來直觀地感受一下那個真真實實存在的網(wǎng)絡世界吧。當我在 Linux 下通過 Web 編輯器寫這篇 Blog 時,一邊用 mplayer 聽著遠程音樂,累了時則打開蘭大的網(wǎng)絡 TV 頻道開始看看鳳凰衛(wèi)視……這些“現(xiàn)代化”的生活,我想,如果沒有網(wǎng)絡,將變得無法想象。

下面來構想一下這樣一個網(wǎng)絡世界的優(yōu)美圖畫:

一邊盯著顯示器,一邊敲擊著鍵盤,一邊掛著耳機。

主機電源燈燦爛得很,發(fā)著綠光,這時很容易想象主機背后的那個網(wǎng)卡位置肯定有兩個不同顏色的燈光在閃爍,它顯示著主機正在與計算機網(wǎng)絡世界打著交道。

就在實驗室的某個角落,有一個交換機上的一個網(wǎng)口的網(wǎng)線連到主機上,這個交換機接到了一個局域網(wǎng)的網(wǎng)關上,然后這個網(wǎng)關再接到了信息樓的某個路由器上,再轉接到學校網(wǎng)絡中心的另外一個路由器上……

期間,有一個路由器連接到了這個 Blog 服務器上,而另外一個則可能連到了那個網(wǎng)絡 TV 服務器上,還有呢,另外一些則連接到了電信網(wǎng)絡里頭的某個音樂服務器上……

下面用 dia 繪制一個簡單的“網(wǎng)絡地圖”:

Network Architecture

該圖把一些最常見的網(wǎng)絡設備和網(wǎng)絡服務基本都呈現(xiàn)出來了,包括本地主機、路由、交換機、網(wǎng)橋,域名服務器,萬維網(wǎng)服務,視頻服務,防火墻服務,動態(tài) IP 地址服務等。其中各種設備構成了整個物理網(wǎng)絡,而網(wǎng)絡服務則是構建在這些設備上的各種網(wǎng)絡應用。

現(xiàn)在的網(wǎng)絡應用越來越豐富多樣,比如即時聊天(IM)、 p2p 資源共享、網(wǎng)絡搜索等,它們是如何實現(xiàn)的,它們如何構建在各種各樣的網(wǎng)絡設備之上,并且能夠安全有效的工作呢?這取決于這背后逐步完善的網(wǎng)絡體系結構和各種相關網(wǎng)絡協(xié)議的開發(fā)、實現(xiàn)和應用。

網(wǎng)絡體系結構和網(wǎng)絡協(xié)議介紹

那么網(wǎng)絡體系結構是怎么樣的呢?涉及到哪些相關的網(wǎng)絡協(xié)議呢?什么又是網(wǎng)絡協(xié)議呢?

在《計算機網(wǎng)絡——自頂向下的方法》一書中非常巧妙地給出了網(wǎng)絡體系結構分層的比喻,把網(wǎng)絡中各層跟交通運輸體系中的各個環(huán)節(jié)對照起來,讓人通俗易懂。在交通運輸體系中,運輸?shù)氖侨撕臀锲?,在計算機網(wǎng)絡體系中,運輸?shù)氖请娮訑?shù)據(jù)??紤]到交通運輸網(wǎng)絡和計算機網(wǎng)絡中最終都可以劃歸為點對點的信息傳輸。這里考慮兩點之間的信息傳遞過程,得到這樣一個對照關系,見下圖:

Network Layer與交通運輸體系比較

對照上圖,更容易理解右側網(wǎng)絡體系結構的分層原理(如果比照一封信發(fā)出到收到的這一中間過程可能更容易理解),上圖右側是 TCP/IP 網(wǎng)絡體系結構的一個網(wǎng)絡分層示意圖,在把數(shù)據(jù)發(fā)送到網(wǎng)絡之前,在各層中需要進行各種“打包”的操作,而從網(wǎng)絡接收到數(shù)據(jù)后,就需要進行“解包”操作,最終把純粹的數(shù)據(jù)信息給提取出來。這種分層的方式是為了傳輸數(shù)據(jù)的需要,也是兩個主機之間如何建立連接以及如何保證數(shù)據(jù)傳輸?shù)耐暾院涂煽啃缘男枰?。通過把各種需要分散在不同的層次,使得整個體系結構更加清晰和明了。這些“需求”具體通過各種對應的協(xié)議來規(guī)范,這些規(guī)范統(tǒng)成為網(wǎng)絡協(xié)議。

關于 OSI 模型(7 層)比照 TCP/IP 模型(4 層)的協(xié)議??梢詮南聢D(來自網(wǎng)絡)看個明了:

OSI Network Layer

而下圖(來自網(wǎng)絡)則更清晰地體現(xiàn)了 TCP/IP 分層模型。

TCP IP Network Layer

上面介紹了網(wǎng)絡原理方面的基本內容,如果想了解更多網(wǎng)絡原理和操作系統(tǒng)對網(wǎng)絡支持的實現(xiàn),可以考慮閱讀后面的參考資料。下面將做一些實踐,即在 Linux 下如何聯(lián)網(wǎng),如何用 Linux 搭建各種網(wǎng)絡服務,并進行網(wǎng)絡安全方面的考量以及基本的網(wǎng)絡編程和開發(fā)的介紹。

Linux 下網(wǎng)絡“實戰(zhàn)”

如何把我們的 Linux 主機接入網(wǎng)絡

如果要讓一個系統(tǒng)能夠聯(lián)網(wǎng),首先當然是搭建好物理網(wǎng)絡了。接入網(wǎng)絡的物理方式還是蠻多的,比如直接用網(wǎng)線接入以太網(wǎng),用無線網(wǎng)卡上網(wǎng),用 ADSL 撥號上網(wǎng)……

對于用以太網(wǎng)網(wǎng)卡接入網(wǎng)絡的常見方式,在搭建好物理網(wǎng)絡并確保連接正常后,可以通過配置 IP 地址和默認網(wǎng)關來接入網(wǎng)絡,這個可以通過手工配置和動態(tài)獲取兩種方式。

范例:通過dhclient獲取IP地址

如果所在的局域網(wǎng)有 DHCP 服務,那么可以這么獲取,N 是設備名稱,如果只有一塊網(wǎng)卡,一般是 0 或者 1 。

$ dhclient ethN

范例:靜態(tài)配置IP地址

當然,也可以考慮采用靜態(tài)配置的方式,ip_address 是本地主機的 IP 地址,gw_ip_address 是接入網(wǎng)絡的網(wǎng)關的 IP 地址。

$ ifconfig eth0 ip_address on
$ route add deafult gw gw_ip_address

如果上面不工作,記得通過 ifconfig/mii-tool/ethtool 等工具檢查網(wǎng)卡是否有被驅動起來,然后通過 lspci/dmesg 等檢查網(wǎng)卡類型(或者通過主板手冊和獨立網(wǎng)卡自帶的手冊查看),接著安裝或者編譯相關驅動,最后把驅動通過 insmod/modprobe 等工具加載到內核中。

用 Linux 搭建網(wǎng)橋

網(wǎng)橋工作在 OSI 模型的第二層,即數(shù)據(jù)鏈路層,它只需要知道目標主機的 MAC 地址就可以工作。 Linux 內核在 2.2 開始就已經支持了這個功能,具體怎么配置看看后續(xù)參考資料吧。如果要把 Linux 主機配置成一個網(wǎng)橋,至少需要兩個網(wǎng)卡。

網(wǎng)橋的作用相當于一根網(wǎng)線,用戶無須關心里頭有什么東西,把它的兩個網(wǎng)口連接到兩個主機上就可以讓這兩個主機支持相互通信。不過它比網(wǎng)線更厲害,如果配上防火墻,就可以隔離連接在它兩端的網(wǎng)段(注意這里是網(wǎng)絡,因為它不識別 IP),另外,如果這個網(wǎng)橋有多個網(wǎng)口,那么可以實現(xiàn)一個功能復雜的交換機,而如果有效組合多個網(wǎng)橋,則有可能實現(xiàn)一個復雜的可實現(xiàn)流量控制和負載平衡的防火墻系統(tǒng)。

用 Linux 做路由

路由工作在 OSI 模型的第三層,即網(wǎng)絡層,通過 router 可以配置 Linux 的路由,當然,Linux 下也有很多工具支持動態(tài)路由的。相關的資料在網(wǎng)路中鋪天蓋地,由于時間關系,這里不做介紹。

用 Linux 搭建各種常規(guī)的網(wǎng)絡服務

需要什么網(wǎng)絡服務呢?

  • 給局域網(wǎng)弄個 DHCP 服務器,那就弄個 dhcpd,看看參考資料;
  • 如果想弄個郵件發(fā)送服務器,那就安裝個 sendmail 或者 exim4 ;
  • 如果再想弄個郵件列表服務器呢,那就裝個 mailman ;
  • 如果想弄個接收郵件的服務器呢,那就安裝個 pop3 服務器;
  • 如果想弄個 web 站點,那就弄個 apache 或者 nginx 服務器;
  • 如果想弄上防火墻服務,那么通過 iptables 工具配置 netfilter 就可以

What's more?如果你能想到,Linux上基本都有相應的實現(xiàn)。

Linux 下網(wǎng)絡問題診斷與維護

如果出現(xiàn)網(wǎng)絡問題,不要驚慌,逐步檢查網(wǎng)絡的各個層次:物理鏈接、鏈路層、網(wǎng)絡層直到應用層,熟悉使用各種如下的工具,包括 ethereal/tcpdump,hpingnmap,netstatnetpipe,netperf,vnstat,ntop 等。

關于這些工具的詳細用法和網(wǎng)絡問題診斷和維護的相關知識,請看后續(xù)相關資料。

Linux 下網(wǎng)絡編程與開發(fā)

如果想做網(wǎng)絡編程開發(fā),比如:

  • 要實現(xiàn)一個客戶端 / 服務器架構的應用,可以采用 Linux 下的 socket 編程了;
  • 如果想寫一個數(shù)據(jù)包抓獲和協(xié)議分析的程序,可以采用 libpap 等函數(shù)庫;
  • 如果想實現(xiàn)某個協(xié)議呢,那就可以參考相關的 RFC 文檔,并通過 socket 編程來實現(xiàn)。

這個可以參考相關的 Linux socket 編程等資料。

后記

本來介紹網(wǎng)絡相關的一些基本內容,但因時間關系,沒有詳述,更多細節(jié)請參考相關資料。

到這里,整個《Shell編程范例》算是很粗略地完成了,不過“范例”卻缺少實例,特別是這一節(jié)。因此,如果時間允許,會逐步補充一些實例。

參考資料

  • 計算機網(wǎng)絡——自上而下的分析方法
  • Linux 網(wǎng)絡體系結構(清華大學出版社出版)
  • Linux 系統(tǒng)故障診斷與排除 第13章 網(wǎng)絡問題(人民郵電出版社)
  • 在 Linux 下用 ADSL 撥號上網(wǎng)
  • Linux 下無線網(wǎng)絡相關資料收集
  • Linux網(wǎng)橋的實現(xiàn)分析與使用
  • DHCP mini howto
  • 最佳的 75 個安全工具
  • 網(wǎng)絡管理員必須掌握的知識
  • Linux 上檢測 rootkit 的兩種工具: Rootkit Hunter 和 Chkrootkit
  • 數(shù)據(jù)包抓獲與 ip 協(xié)議的簡單分析(基于 pcap 庫)
  • RFC
  • HTTP 協(xié)議的 C 語言編程實現(xiàn)實例
以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號