趣談網絡協議 - 第8講 | 世界這麼大,我想出網關:歐洲十國遊與玄奘西行

這系列相關博客,參考 極客時間-趣談網絡協議

趣談網絡協議 - 第8講 | 世界這麼大,我想出網關:歐洲十國遊與玄奘西行

前幾節,我主要跟你講了宿舍裏和辦公室裏用到的網絡協議。你已經有了一些基礎,是時候去外網逛逛 了!

怎麼在宿舍上網?

還記得咱們在宿舍的時候買了臺交換機,幾臺機器組了一個局域網打遊戲嗎?可惜啊,只能打局域網的遊戲,不能上網啊!盼啊盼啊,終於盼到大二,允許宿舍開通網絡了。學校給每個宿舍的網口分配了一個IP地址。這個IP是校園網的IP,完全由網管部門控制。宿舍網的IP地址多爲192.168.1.x。校園網的IP地址,假設是10.10.X.X。

這個時候,你要在宿舍上網,有兩個辦法:

第一個辦法,讓你們宿舍長再買一個網卡。這個時候,你們宿舍長的電腦裏就有兩張網卡。一張網卡的線插到你們宿舍的交換機上,另一張網卡的線插到校園網的網口。而且,這張新的網卡的IP地址要按照學校網管部門分配的配置,不然上不了網。這種情況下,如果你們宿舍的人要上網,就需要一直開着宿舍長的電腦。

第二個辦法,你們共同出錢買個家庭路由器(反正當時我們買不起)。家庭路由器會有內網網口和外網網口。把外網網口的線插到校園網的網口上,將這個外網網口配置成和網管部的一樣。內網網口連上你們宿舍的所有的電腦。這種情況下,如果你們宿舍的人要上網,就需要一直開着路由器。

這兩種方法其實是一樣的。只不過第一種方式,讓你的宿舍長的電腦,變成一個有多個口的路由器而已。而你買的家庭路由器,裏面也跑着程序,和你宿舍長電腦裏的功能一樣,只不過是一個嵌入式的系統。

當你的宿舍長能夠上網之後,接下來,就是其他人的電腦怎麼上網的問題。這就需要配置你們的網卡。 當然DHCP是可以默認配置的。在進行網卡配置的時候,除了 IP地址,還需要配置一個Gateway的東西,這個就是網關。

你瞭解MAC頭和IP頭的細節嗎?

一旦配置了 IP地址和網關,往往就能夠指定目標地址進行訪問了。由於在跨網關訪問的時候,牽扯到 MAC地址和IP地址的變化,這裏有必要詳細描述一下MAC頭和IP頭的細節。
在這裏插入圖片描述
在MAC頭裏面,先是目標MAC地址,然後是源MAC地址,然後有一個協議類型,用來說明裏面是 IP協議。IP頭裏面的版本號,目前主流的還是IPv4, 服務類型TOS在第三節講ip addr命令的時候講過,TTL在第7節講ICMP協議的時候講過。另外,還有8位標識協議。這裏到了下一層的協議,也就是,是TCP還是UDP。最重要的就是源IP和目標IP。先是源IP地址,然後是目標IP地址。

訪問另一個IP地址

在任何一臺機器上,當要訪問另一個IP地址的時候,都會先判斷,這個目標IP地址,和當前機器的IP 地址,是否在同一個網段。怎麼判斷同一個網段呢?需要CIDR和子網掩碼,這個在第三節的時候也講過了。

如果是同一個網段,例如,你訪問你旁邊的兄弟的電腦,那就沒網關什麼事情,直接將源地址和目標地址放入IP頭中,然後通過ARP獲得MAC地址,將源MAC和目的MAC放入MAC頭中,發出去就可以了。

如果不是同一網段,例如,你要訪問你們校園網裏面的BBS,該怎麼辦?這就需要發往默認網關Gateway。Gateway的地址一定是和源IP地址是一個網段的。往往不是第一個,就是第二個。例如 192.168.1.0/24 這個網段 , Gateway 往往會是 192.168.1.1/24 或者 192.168.1.2/24。

如何發往默認網關呢?
網關不是和源IP地址是一個網段的麼?這個過程就和發往同一個網段的其他機器是一樣的:將源地址和目標IP地址放入IP頭中,通過ARP獲得網關的MAC地址,將源MAC和網關的MAC放入MAC頭中,發送出去。網關所在的端口,例如192.168.1.1/24將網絡包收進來,然後接下來怎麼做,就完全看網關的了。

網關往往是一個路由器,是一個三層轉發的設備。啥叫三層設備?前面也說過了,就是把MAC頭和IP頭都取下來,然後根據裏面的內容,看看接下來把包往哪裏轉發的設備。

在你的宿舍裏面,網關就是你宿舍長的電腦。一個路由器往往有多個網口,如果是一臺服務器做這個事 情,則就有多個網卡,其中一個網卡是和源IP同網段的。

很多情況下,人們把網關就叫作路由器。其實不完全準確,而另一種比喻更加恰當:路由器是一臺設備,它有五個網口或者網卡,相當於有五隻手,分別連着五個局域網。每隻手的IP地址都和局域網的IP地址相同的網段,每隻手都是它握住的那個局域網的網關。

任何一個想發往其他局域網的包,都會到達其中一隻手,被拿進來,拿下MAC頭和IP頭,看看,根據自己的路由算法,選擇另一隻手,加上IP頭和MAC頭,然後扔出去。

靜態路由是什麼?

這個時候,問題來了,該選擇哪一隻手?IP頭和MAC頭加什麼內容,哪些變、哪些不變呢?這個問題比較複雜,大致可以分爲兩類,一個是靜態路由,一個是動態路由。動態路由下一節我們詳細地講。這—節我們先說靜態路由。

該選擇哪一隻手?
靜態路由,其實就是在路由器上,配置一條一條規則。這些規則包括:想訪問BBS站(它肯定有個網 段),從2號口出去,下一跳是IP2; 想訪問教學視頻站(它也有個自己的網段),從3號口出去,下一跳是IP3, 然後保存在路由器裏。

每當要選擇從哪隻手拋出去的時候,就一條一條的匹配規則,找到符合的規則,就按規則中設置的那樣,從某個口拋出去,找下一跳IPX。

IP頭和MAC頭哪些變、哪些不變?
對於IP頭和MAC頭哪些變、哪些不變的問題,可以分兩種類型。我把它們稱爲"歐洲十國遊”型 和"玄奘西行”型。

之前我說過,MAC地址是一個局域網內纔有效的地址。因而,MAC地址只要過網關,就必定會改變, 因爲已經換了局域網。兩者主要的區別在於IP地址是否改變。不改變IP地址的網關,我們稱爲轉發網關;改變IP地址的網關,我們稱爲NAT網關

轉發網關

"歐洲十國遊"型
結合這個圖,我們先來看"歐洲十國遊”型。
在這裏插入圖片描述
服務器A要訪問服務器B。首先,服務器A會思考,192.168.4.101和我不是一個網段的,因而需要先發給網關。那網關是誰呢?已經靜態配置好了,網關是192.168.1.1。網關的MAC地址是多少呢?發送 ARP獲取網關的MAC地址,然後發送包。包的內容是這樣的:

  • 源MAC:服務器A的MAC
  • 目標 MAC:192.168.1.1 這個網口的 MAC
  • 源 IP:192.168.1.101
  • 目標 IP:192.168.4.101

包到達192.168.1.1 這個網口,發現MAC 一致,將包收進來,開始思考往哪裏轉發。

在路由器A中配置了靜態路由之後,要想訪問192.168.4.0/24,要從192.168.56.1這個口出去,下一跳爲 192.168.56.2。

於是,路由器A思考的時候,匹配上了這條路由,要從192.168.56.1這個口發出去,發給 192.168.56.2, 那192.168.56.2的MAC地址是多少呢?路由器A發送ARP獲取192.168.56.2的 MAC地址,然後發送包。包的內容是這樣的:

  • 源 MAC:192.168.56.1 的 MAC 地址
  • 目標 MAC:192.168.56.2 的 MAC 地址
  • 源 IP:192.168.1.101
  • 目標 IP:192.168.4.101

包到達192.168.56.2這個網口,發現MAC 一致,將包收進來,開始思考往哪裏轉發。 在路由器B中配置了靜態路由,要想訪問192.168.4.0/24,要從192.168.4.1這個口出去,沒有下一跳了。因爲我右手這個網卡,就是這個網段的,我是最後一跳了。

於是,路由器B思考的時候,匹配上了這條路由,要從192.168.4.1這個口發出去,發給192.168.4.101。那192.168.4.101的MAC地址是多少呢?路由器B發送ARP獲取192.168.4.101的 MAC地址,然後發送包。包的內容是這樣的:

  • 源 MAC:192.168.4.1 的 MAC 地址
  • 目標 MAC:192.168.4.101 的 MAC 地址
  • 源 IP:192.168.1.101
  • 目標 IP:192.168.4.101

包到達服務器B,MAC地址匹配,將包收進來。

通過這個過程可以看出,每到一個新的局域網,MAC都是要變的,但是IP地址都不變。在IP頭裏面,不會保存任何網關的IP地址。所謂的下一跳是,某個IP要將這個IP地址轉換爲MAC放入MAC頭。

之所以將這種模式比喻稱爲歐洲十國遊,是因爲在整個過程中,IP頭裏面的地址都是不變的。IP地址在三個局域網都可見,在三個局域網之間的網段都不會衝突。在三個網段之間傳輸包,IP頭不改變。這就像在歐洲各國之間旅遊,一個簽證就能搞定。

NAT網關

’'玄奘西行"型
我們再來看"玄奘西行”型。
在這裏插入圖片描述
這裏遇見的第一個問題是,局域網之間沒有商量過,各定各的網段,因而IP段衝突了。最左面大唐的地址是192.168.1.101,最右面印度的地址也是192.168.1.101,如果單從IP地址上看,簡直是自己訪問自己,其實是大唐的192.168.1.101要訪問印度的192.168.1.101。

怎麼解決這個問題呢?既然局域網之間沒有商量過,你們各管各的,那到國際上,也即中間的局域網裏 面,就需要使用另外的地址。就像出國,不能用咱們自己的身份證,而要改用護照一樣,玄奘西遊也要拿着專門取經的通關文牒,而不能用自己國家的身份證。

首先,目標服務器B在國際上要有一個國際的身份,我們給它一個192.168.56.2。在網關B上,我們記下來,國際身份192.168.56.2對應國內身份192.168.1.101。凡是要訪問192.168.56.2,都轉成
192.168.1.101。

於是,源服務器A要訪問目標服務器B,要指定的目標地址爲192.168.56.2。這是它的國際身份。服務器A想,192.168.56.2和我不是一個網段的,因而需要發給網關,網關是誰?已經靜態配置好了,網關是192.168.1.1, 網關的MAC地址是多少?發送ARP獲取網關的MAC地址,然後發送包。包的內容是這樣的:

  • 源MAC:服務器A的MAC
  • 目標MAC:192.168.1.1這個網口的MAC
  • 源 IP:192.168.1.101
  • 目標 IP:192.168.56.2

包到達192.168.1.1這個網口,發現MAC 一致,將包收進來,開始思考往哪裏轉發。

在路由器A中配置了靜態路由:要想訪問192.168.56.2/24,要從192.168.56.1這個口出去,沒有下一跳了,因爲我右手這個網卡,就是這個網段的,我是最後一跳了。

於是,路由器A思考的時候,匹配上了這條路由,要從192.168.56.1這個口發出去,發給 192.168.56.2。那192.168.56.2的MAC地址是多少呢?路由器A發送ARP獲取192.168.56.2的 MAC地址。

當網絡包發送到中間的局域網的時候,服務器A也需要有個國際身份,因而在國際上,源IP地址也不能用192.168.1.101,需要改成192.168.56.1。發送包的內容是這樣的:

  • 源 MAC:192.168.56.1 的 MAC 地址
  • 目標 MAC:192.168.56.2 的 MAC 地址
  • 源 IP:192.168.56.1
  • 目標 IP:192.168.56.2

包到達192.168.56.2這個網口,發現MAC 一致,將包收進來,開始思考往哪裏轉發。

路由器B是一個NAT網關,它上面配置了,要訪問國際身份192.168.56.2對應國內身份 192.168.1.101,於是改爲訪問 192.168.1.101。

在路由器B中配置了靜態路由:要想訪問192.168.1.0/24,要從192.168.1.1這個口出去,沒有下一跳了,因爲我右手這個網卡,就是這個網段的,我是最後一跳了。

於是,路由器B思考的時候,匹配上了這條路由,要從192.168.1.1這個口發出去,發給192.168.1.101。

那192.168.1.101的MAC地址是多少呢?路由器B發送ARP獲取192.168.1.101的MAC地址,然後發送包。內容是這樣的:

  • 源 MAC:192.168.1.1 的 MAC地址
  • 目標 MAC:192.168.1.101 的 MAC地址
  • 源 IP:192.168.56.1
  • 目標 IP:192.168.1.101

包到達服務器B,MAC地址匹配,將包收進來。

從服務器B接收的包可以看出,源IP爲服務器A的國際身份,因而發送返回包的時候,也發給這個國際身份,由路由器A做NAT,轉換爲國內身份。

從這個過程可以看出,IP地址也會變。這個過程用英文說就是Network Address Translation,簡稱 NAT

其實這第二種方式我們經常見,現在大家每家都有家用路由器,家裏的網段都是192.168.1.x,所以你肯定訪問不了你鄰居家的這個私網的IP地址的。所以,當我們家裏的包發出去的時候,都被家用路由器NAT成爲了運營商的地址了。

很多辦公室訪問外網的時候,也是被NAT過的,因爲不可能辦公室裏面的IP也是公網可見的,公網地址實在是太貴了,所以一般就是整個辦公室共用一個到兩個出口IP地址。你可以通過https://www.whatismyip.com/ 查看自己的出口 IP 地址。

小結

好了,這一節內容差不多了,我來總結一下:

  • 如果離開本局域網,就需要經過網關,網關是路由器的一個網口;
  • 路由器是一個三層設備,裏面有如何尋找下一跳的規則;
  • 經過路由器之後MAC頭要變,如果IP不變,相當於不換護照的歐洲旅遊,如果IP變,相當於換護照的玄奘西行。

最後,給你留兩個思考題吧。

  1. 當在你家裏要訪問163網站的時候,你的包需要NAT成爲公網IP,返回的包又要NAT成你的私有IP,返回包怎麼知道這是你的請求呢?它怎麼就這麼智能的NAT成了你的IP而非別人的IP呢?
  2. 對於路由規則,這一節講述了靜態路由,需要手動配置,如果要自動配置,你覺得應該怎麼辦呢?
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章