前幾節,我主要跟你講了宿舍里和辦公室里用到的網路協議,你已經有了一些基礎,是時候去外網逛逛了!
怎么在宿舍上網?
還記得咱們在宿舍的時候買了臺交換機,幾臺機器組了一個局域網打游戲嗎?可惜啊,只能打局域網的游戲,不能上網啊!盼啊盼啊,終于盼到大二,允許宿舍開通網路了,學校給每個宿舍的網口分配了一個 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 地址,是否在同一個網段,怎么判斷同一個網段呢?需要 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 頭不改變,這就像在歐洲各國之間旅游,一個簽證就能搞定,

“玄奘西行”型
我們再來看“玄奘西行”型,
這里遇見的第一個問題是,局域網之間沒有商量過,各定各的網段,因而 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 地址,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/174023.html
標籤:其他
