[Linux基礎] 03、Linux的網絡配置

上一篇我們介紹瞭如何安裝 Linux 以及介紹關於 Linux 的終端。這一篇主要介紹如何設置 Linux 的網絡。

1、集線器、網橋、交換機

      主機與主機之間進行通信的時候是需要介質傳遞信息的,就像人與人之間交流需要空氣充當介質,因爲你說的話是信息,而傳遞信息則需要空氣作爲載體介質進行傳播。就目前而言,主機與主機之間傳遞信號的介質有有形的也有無形的,例如有形的網線,無形的則是電磁波。

      在計算機網絡誕生的初期,那個時候使用最多的是同軸線纜。也就是閉路電視的那種線,但是一根線只有兩個頭,一端連接一個主機只能連接兩臺主機,所以還有一種叫做T型頭的東西。

       上圖就是同軸電纜和T型頭。將兩者結合起來使用,一根線就可以接入很多主機了。所以早期的網絡架構可能就是下面這樣的:


      就像上圖一樣,多臺主機連接到一根總線(同軸電纜)上,然後使用T型頭接入,這種網絡拓撲也叫做總線型網絡。但是我們得思考一個問題,如果 A 與 B 進行通信的時候,那麼 C 與 D 可以進行通信嗎?

      答案顯然是不可能的,因爲他們只有一根線,所有主機共用了這麼一個底層通信信道。A 與 B 通信的時候,必然會導致總線上有電流,那麼在同一時刻 C 與 D 就不能通信了,不然會相互干擾。導致整個網絡充滿的都是混亂信息,沒有任何意義。但是我們如何保證 A 發送信息的時候,C 不發送信息呢?我們需要引入一種機制,就是 MAC (Media Access Control)機制,中文翻譯過來就是介質訪問控制。

      MAC 機制有很多種,其中一種就是 CSMA/CD。其工作機制簡單來說就是 A 在發報文的時候先看看當前網絡是否繁忙,如果發現當前線路沒有信號傳輸,那麼就開始發送信息,並且邊發送邊檢測。如果檢測到發送失敗,就後退一步,將之前發送的信息再次發送。所以 CSMA/CD 有個專業叫法:帶衝突檢測的載波監聽多路訪問技術。而我們常說的 MAC 地址,就是指在 MAC 協議下通訊時使用到的通訊地址。一般而言 MAC 地址是固化在網卡中,專注於數據鏈路層,將一個數據幀從一個節點傳送到相同鏈路的另一個節點。

      對於這種總線型的網絡有一個比較麻煩的地方就是如果你想添加一臺主機,那麼你就需要加一個T型頭。添加移除主機挺麻煩的。所以就出現了這麼一種設備,這個設備上事先做好了幾個口留着,你想用的時候直接插入網線就行了,到了這個時候的網絡拓撲可能就是所謂的星型網絡,大致就是如下這種結構:


      上圖中間的這種事先預留了網線口的這種設備我們叫他 HUB 中文翻譯就是集線器,這種設備的好處就是可以很方便的接入一臺主機,因爲他已經事先做好了網線接入口了。但是他的本質仍然是總線型的,因爲 A 與 B 通信的時候,佔用了 HUB 內的通信信道,導致了其他主機仍然不能通信,他只是將總線型網絡從物理形態的一根線轉變成了一個具有多個網線口的盒子,並同時提供了信號放大的功能。

      科技總是不斷的進步,一開始的時候一個網絡中連接幾臺主機傳輸少量數據 HUB 還是能輕鬆處理的,後來網絡中主機越來越多,傳輸的數據量按照指數型暴增,想想如果一個網絡中有兩臺電腦之間在傳一個小電影,那麼完了大家都等待吧,因爲同一時刻這種網絡只能有兩臺主機通信,其他主機通信時需要不斷檢當前網絡是否繁忙,所以可能更多的情況下網絡中的信號都是檢測信號。於是有人想出了這麼一個辦法,把 HUB 內部做成四通八達的線路,當兩臺主機之間需要通信的時候,就臨時建立一條通信信道,例如當 A 與 B 通信的時候,就在 A 與 B 之間建立一條線路,C 與 D 通信時就再在 C 與 D 之間建立一條線路,這樣一來他們之間互不干擾可以獨立工作了。而這種分隔衝突域的設備我們把它稱之爲網橋

      因爲在早些時候,網絡之間連接是使用 HUB 連接的,這樣的網絡如果有兩臺主機進行通信時,其他的主機就不能通信,否則就會衝突。我們把所有能夠造成衝突的主機組成的一個集合叫做衝突域。網橋的主要作用是用來分隔衝突域的。例如一開始有一個網絡裏面有 10 臺主機,他們之間使用 HUB 連接工作良好,如果再加 10 臺,就是 20 臺,那麼任意兩臺之間發送信息,剩下的 18 臺就不能通信了。所以將 20 臺主機分成兩組,中間使用網橋連接起來就可以大大提高通信質量。


      就像上圖,其中 A 和 B 是在一個衝突域中的,因爲他們使用了同一個底層通信線路,而 C 與 D 是在另外一個衝突域中的,這樣 A 與 B 通信的時候,C 與 D 就可以通信了,只有當 A 與 C 通信時就通過網橋建立臨時通道。也許你會想,既然網橋這麼好用,如果在上面多做幾個孔,每個孔連接一個主機,然後把 HUB 給去掉,這樣豈不是可以把衝突域分割到最小了?是的,目前而言這種多孔的“網橋”十分常見,我們一般叫他交換機,一般而言有 8 孔的,24 孔的等。

      於是乎,在這種情況下我們又平安無事的用了一段時間,但是你需要知道的是人的慾望是永遠無法滿足的。隨着計算機越來越普及,傳輸的數據也越來越多,一個交換機上連接的電腦越來越多,你見過的交換機最多多少口呢?48 孔不得了了,那麼如果需要接入 100 臺主機怎麼辦?其實也不難,多個交換機連起來用唄,就像下面這樣:


      但是多臺主機通過交換機連接到一起使用,隨着主機數越來越多,就會暴露出一個很嚴重的問題。我們知道交換機內部的 CPU 會在每個端口成功連接時,通過將 MAC 地址和端口對應,形成一張 MAC 表。在今後的通訊中,發往該 MAC 地址的數據包將僅送往其對應的端口,而不是所有的端口。因此,交換機可用於劃分衝突域。但是問題就出在這裏,MAC 表的形成是通過數據鏈路層進行廣播得到的,就是說如果想要知道某個主機連接在哪個端口上,就需要進行廣播一下,交換機需要對每個端口連着的主機都挨個問下你的 MAC 地址是多少,試想下全球多少臺主機,如果都使用交換機連接,那麼網絡還能用嗎?那爲什麼交換機會有這個問題呢?這是因爲交換機不能劃分網絡層的廣播,也就是廣播域。

      什麼是廣播域呢?就像上圖裏面兩臺交換機連在一起的六個主機他們就是一個廣播域,如果 A 發個廣播,其他主機都能收到,我們把這種其中一臺主機發廣播,都能收到的主機組成的集合叫做廣播域。和衝突域不同,衝突域是其中一臺主機發信息,大家都不能發的主機集合,是共用同一個底層通信信道的主機集合。

      那麼如何分隔廣播域呢?很簡單啊,做個設備,如果發現主機發送的報文是本網段內的則這個設備不轉發,如果發現主機發送的信息是其他網段內的,則將其轉發到對應的網段,而這個設備就是我們生活中常見的路由器。


       如上圖,主機 A 與主機 B 通信是很簡單的,就像以前一樣依靠 MAC 地址通信。但是如何實現主機 A 和 E 的通信呢?他們之間不再一個網段內,交換機發廣播查 MAC地址被路由器隔斷。好像單純的使用 MAC 定位定位不到主機 E 了。所以我們需要使用一種新的地址,從邏輯上來 定位主機位置。

      例如,下面這樣,左邊的我們叫做網段1,並且給每個主機標號爲1.1,1.2,1.3等,右邊的是網段2,裏面每個主機就是 2.1,2.2,2.3等。同時路由器的兩個端口也配置一個地址,標記爲1.4 2.4

      主機 1.1 與主機 1.2 通信,通過廣播交換機能夠獲取 1.2 的 MAC 地址,兩者可以正常通信。當 1.1 與 2.1 進行通信時,1.1發現他想發信息的那臺主機是 2.0 網段的,和他不再一個網段內,於是他就將信息直接發給 1.4 ,路由器收到這個請求之後,發現目標地址是另外一個網段內的,於是將其從 2.4 端口轉發到 2 號網段,這樣一來因爲 2.4 和  2.1 是同一個網段內的,可以通過廣播獲取 MAC 地址,於是正常通信。於是 1.1 就可以與 2.1 通信了。

      於是你會發現 ,爲了解決誇網段的問題,我們引入了類似於 1.X 這種分段的地址。這種地址使用點號分隔,點號前面的 1 表示網段編號,點號後面的則是表示對應網段內的主機編號。但是 1.1 和 2.1 通信,1.1 如何知道 2.1 和他不在一個網段內的呢?很簡單,使用掩碼計算。因爲在計算機世界中任何數字和 1 做 & 運算都得本身,而與 0 做 & 運算得 0,我們將上面的地址中表示網段編號的部分的用 1 表示,而表示主機編號的部分用 0 表示,這樣通過 & 計算就知道對應的主機是那個網段內的了。

      其實到這裏你應該知道了,那個邏輯地址編號 1.X 的就是 IP 地址,而廣播詢問 IP 地址對應的主機 MAC 地址是多少的行爲就是 ARP 地址解析。上面的 1.4 與 2.4 這種能夠與外界通信的 IP 地址其實就是網關 IP(關就是邊關,和古代的國與國之間的邊塞差不多),而掩碼其實就是子網掩碼。

      例如:IP 是 10.20.139.48 的主機所在網絡子網掩碼是 255.255.255.0 ,經過運算得知其所在網段是 10.20.139.0 ,而 IP 地址是 10.20.138.11 與子網掩碼 255.255.255.0經過運算得知其所在網段是 10.20.138.0,通過比較就知道這是兩個網段內的主機。並且,對於表示主機位部分全 0 的IP我們一般叫做網段IP,例如 10.20.139.0就是網段IP,而全 1 的叫做廣播IP,例如 10.20.139.255。


2、同一個廣播域內兩臺主機的通信過程

      我們知道兩主機要通信傳送數據時,就要把應用數據封裝成IP包(因爲我們的網絡大多都是 TCP/IP 的以太網),然後再交給下一層數據鏈路層繼續封裝成幀;之後根據  MAC 地址才能把數據從一臺主機,準確無誤的傳送到另一臺主機。 
      當 A 要和 B 通信時,假如 A 知道 B 的 IP 但卻不知道它的 MAC 地址,那 A 就會發送一個 ARP 的廣播請求(裏面源 IP 是 A ,目標 IP 是 B 源 MAC 是 A 目標 MAC 是12個 F)給同一廣播域中的所有成員,當交換機從自己的端口上收到這個廣播包,然後它會讀取這個幀的源 MAC 地址和目標 MAC 地址,由於交換機剛啓動,它的 MAC 表爲空。所以它會把 A 的 MAC 地址與之相對應的端口放到一張表裏,這張表就是 MAC 地址表記錄了交換機的端口和 MAC 的映射關係。然後他再從別的端口廣播這個數據幀,當別的主機收到這個廣播時,查看目標 IP 不是自己的,就會丟棄此包。如果 B 接收到這個數據幀,它檢查目標 IP 和自己的 IP 是一樣的,就會迴應這個 ARP 請求,把自己的 IP 和 MAC 封裝成源 IP 和源 MAC,A 的 IP 和 A 的 MAC 地址爲目標 IP 與目標 MAC,並記錄 A 的 MAC 與 IP,放進自己的 ARP 緩存表中。
      此時,這個應答包經過交換機時,交換機會檢查源 MAC 目標 MAC,並把 B 的 MAC 和交換機的端口對應信息放進 MAC 地址表中,再查看自己的 MAC 地址表,發現存在目標 MAC 與自己的端口對應信息(A 發信息經過交換機的時候記下的),那它就會直接把這個應答包從對應的端口送出去了。主機 A 收到這個包後發現目標 MAC 是自己,就會處理這個包。並把 B 的 MAC 與 IP 放進自己的 ARP 緩存表中。這時主機 A 就知道 B 的 MAC 地址了,以後要發送數據,就直接把 B 的 IP 與 MAC 封裝進幀中進行點對點的發送了。


3、配置 Linux 網絡準備

      首先我們明確下目標,我們將要組件的網絡如下:

      我們的物理機 Windows 設置 IP 是 172.16.100.1 ,虛擬機 IP 是 172.16.100.XX 其中 XX 爲 2-253 之間的任意一個數,表示主機號。
      172.16.100.0:網段 IP ,一般沒人用這個 IP。
      172.16.100.1:Windows IP,VMware 默認是將網段內的主機號爲 1 的主機設置成物理機的IP,網絡設置中選擇 VMnet8 可以修改。
      172.16.100.254:我們將這個 IP 設置成網關 IP 了,其他也行。
      172.16.100.255:網段內的廣播 IP,同 172.16.100.0 一樣是一個特殊 IP。
      在 VMware 中設置網絡還是比較簡單的,選擇【編輯】--》【虛擬網絡編輯器】設置 VMnet8 網絡,你可以簡單的把這個東西當作路由器使用。就當作這是一個路由器,設置他的網關以及子網掩碼即可。

4、正式配置 Linux 網絡

      還記得我們在第一章裏面說的 Linux 的哲學思想嗎?一切皆文件!是的,在 Linux 中,如果你想修改網卡的配置,只需要修改對應的文件就行了。Linux 將網卡操作映射成對一個配置文件的操作,我們只需要修改文件裏面的內容就可以修改網卡的工作特性。這個文件就是/etc/sysconfig/network-scripts/ifcfg-eth0 vi編輯內容如下:
DEVICE=eth0
HWADDR=00:0C:29:04:30:15
TYPE=Ethernet
UUID=e6edf094-145d-4998-a03b-c9e9f31fa59a
ONBOOT=
yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=172.16.100.98
NETMASK=255.255.255.0
GATEWAY=172.16.100.254

     其中各個參數的含義如下:

DEVICE:此配置文件關聯的硬件,對應的值就是 ifcfg- 後面的內容,例如:ifcfg-eth0,對應值就是 eth0
HWADDR:MAC 地址,與真實的 MAC 地址保持一致,可省略
TYPE:此設備類型,Ethernet 表示橋接
UUID:唯一標識,可省略
ONBOOT:是否開機自動啓動此網絡設備{yes|no}
NM_CONTROLLED:是否接受NetworkManager腳本控制:{yes|no}
BOOTPROTO:引導協議:{none|static|dhcp|bootp}
IPADDR:設置 IP 地址
NETMASK:子網掩碼
GATEWAY:網關 IP
DNS1:DNS1服務地址
IPV6INIT:{yes|no} 是否開啓 ipv6
USERCTL:{yes|no} 是否允許普通用戶操作網卡
PEERDNS:{yes|no} 是否允許DHCP服務分配地址時直接更新/etc/resolv。conf中的DNS服務器地址

      經過上面的配置,執行命令驗證是否修改成功:

[root@localhost ~]# service network restart
Shutting down interface eth0: [ OK ]
Shutting down loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface eth0: Determining if ip address 172.16.100.98 is already in use for device eth0...
[ OK ]
[root@localhost ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:36:FA:FF
inet addr:172.16.100.98 Bcast:172.16.100.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe36:faff/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:91 errors:0 dropped:0 overruns:0 frame:0
TX packets:85 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:9843 (9.6 KiB) TX bytes:10539 (10.2 KiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:12 errors:0 dropped:0 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1028 (1.0 KiB) TX bytes:1028 (1.0 KiB)

[root@localhost ~]#

      從上面紅色部分可以看出網絡已經設置成我們喜歡的網絡了,這個時候可以使用 XSHELL 或者其他 CRT 工具通過模擬終端連接到 Linux 。

5、總結

      這裏主要介紹了常見到網絡設備,以及網絡基礎知識。具體詳細內容需要參照計算機網絡基礎,網絡很重要,後面的 LVS 以及相關的高可用分佈式等需要用到。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章