世界那么大我要出网关
古有關圣爺過五關斬六將,今有小小網絡包過網關闖世界。今天帥天給大家剖析一下,從局域網發出的網絡包是如何跋山涉水到達外面的世界的。
如何到達網關
在任何一臺機器上,當要訪問另一個 IP 地址的時候,都會先判斷,這個目標 IP地址,和當前機器的 IP 地址,是否在同一個網段。怎么判斷同一個網段呢?需要 CIDR 和子網掩碼。(關于 CIDR 和 子網
掩碼的知識請看帥天之前寫的文章)
如果是同一個網段,那就不需要通過網關,直接在局域網內部通信,將源地址和目標地址放入 IP 頭中,然后通過 ARP 獲得 MAC 地址,將源 MAC 和目的 MAC 放入 MAC 頭中,發出去就可以了。
如果不是同一網段,比如訪問淘寶,這就需要發往默認網關 Gateway。Gateway 的地址一定是和源 IP 地址是一個網段的。一般都是第一個,例如192.168.1.0/24 這個網段,Gateway 往往會是 192.168.1.1/24。
如何發往默認網關呢?因為網關和源 IP 肯定是同一個網段的,將源地址和目標 IP 地址放入 IP 頭中,通過 ARP 獲得網關的 MAC 地址,將源 MAC 和網關的 MAC 放入 MAC頭 中,發送出去。這和局域網內部通信方式一樣。網關所在的端口,例如 192.168.1.1/24 將網絡包收進來,然后接下來怎么做,就完全看網關的了。
網關如何轉發
網關轉發 IP 包的過程中,可能會對網絡包中的 IP 頭 和 MAC 頭進行修改。具體是如何操作的呢?請看下面兩個例子。
第一個例子,IP 頭始終保持不變。
在整個過程中,IP 頭里面的地址都是不變的。IP 地址在三個局域網都可見,在三個局域網之間的網段都不會沖突。在三個網段之間傳輸包,IP 頭不改變。
如下圖所示:
服務器 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 頭會變。
看下圖,服務器 A 想訪問服務器 B,但是細心的同學可能已經發現和上面的例子不同之處在于,服務器 A 的地址和 服務器 B 的 地址是相同的(不同局域網內)。
怎么解決這個問題呢?既然局域網之間沒有商量過,各管各的 IP 分配,那到國際上,就需要使用另外的地址。打個比方,就像出國,僅僅使用國內的身份證是不行的,必須得使用護照。
首先,目標服務器 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 地址
。
總結
以上是生活随笔為你收集整理的世界那么大我要出网关的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 利用 Voice Sea
- 下一篇: 【搞事情】利用PyQt为目标检测SSD3