二層三層網路協議-閘道器
區域網的電腦想連線外網有兩個辦法
1.找一臺電腦,安裝兩個網絡卡,一個連內網,一個連外網,然後所有人都連這臺機器做跳板
2.找個路由器
1和2原理是類似的,只是1是用程式實現的,2是嵌入式的系統
IP資料包格式
IP格式裡面有源IP,目標IP
版本就是IPv4和IPv6,TOS是服務優先順序,根據TOS的不同,會放入優先順序不同的佇列中
偏移量是IP分片時候用的
TTL是就是icmp裡面那個TTL,用作生存週期,協議就是傳輸層的UDP和TCP
如果要訪問的目標IP跟自己是一個網段的,就不用經過網關了
1.先通過ARP協議獲取目標端的MAC地址
2.根據CIDR就可以判斷出目標端IP和自己是否在一個網段內了
3.源IP直接傳送資料給目標端IP即可
如果訪問的不是跟自己一個網段的,就會先發給閘道器,然後再由閘道器傳送出去,閘道器就是路由器的一個網口
閘道器一般跟自己是在一個網段內的,通過ARP獲得閘道器的mac地址,就可以傳送出去了
閘道器一般是路由器,然後根據一定的規則再轉發出去
轉發的規則有
靜態路由
動態路由
靜態路由協議根據已經配置在路由器中的轉發規則表確定的
閘道器轉發出去根據源IP地址是否改變分成兩種
1.轉發閘道器
2.NAT閘道器
轉發閘道器
整個過程如下
伺服器A想訪問伺服器B,發現不是同一個網段的,於是通過ARP獲取閘道器的mac地址
伺服器A ->192.168.1.1這個閘道器的資料包
源mac: 伺服器A的mac
目標mac:192.168.1.1這個閘道器的mac
源ip: 192.168.1.1
目標ip:192.168.4.101
192.168.1.1 閘道器發現mac一致,將資料包收下後,根據靜態規則,就通過192.168.56.1這個網口轉發,下一跳是192.168.56.2
通過ARP獲取192.168.56.2的mac後,再次轉發
閘道器A -> 閘道器B 的資料包
源mac: 192.168.56.1的mac
目標mac:192.168.56.2的mac
源ip: 192.168.1.101
目標ip: 192.168.4.101
資料包達到閘道器B之後,這時候已經沒有下一跳了,根據轉發規則,就是右手邊這個網段
於是從192.168.4.1這個閘道器發出去,發給192.168.4.101
閘道器B -> 192.168.4.101 的資料包
源mac: 192.168.4.1的mac
目標mac:192.168.4.101的mac
源ip: 192.168.1.101
目標ip: 192.168.4.101
最後資料包達到B,mac地址,ip地址都匹配,就會處理這個資料包
整個過程中,都是源mac,目標mac再變,但是ip都沒變
NAT閘道器
伺服器A 想訪問 伺服器B,但他們兩的ip是一樣的
都是192.168.1.101,簡直是自己訪問自己
其實是兩邊都是內網網路,就導致了ip衝突了,伺服器A想訪問伺服器B,就只能訪問B的外部閘道器
B的外部閘道器192.168.56.2,之後可能需要加上埠之後的,閘道器B就會根據埠再做轉發
伺服器A -> 192.168.1.1的閘道器
源mac: 伺服器A的mac
目標mac:192.168.1.1這個網口的mac
源ip: 192.168.1.101
目標ip: 192.168.56.2
192.168.1.1這個網口收到資料包之後,根據轉發規則,要交給192.168.56.1這個網口,下一跳就是
192.168.56.2,
192.168.56.1 -> 192.168.56.2
源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這個網口後,根據轉發規則應該是交給192.168.1.1這個網口
再根據NAT對映的規則,這個資料包是要交給內網機器 192.168.1.101的
192.168.1.1 -> 伺服器B
源mac: 192.168.1.1的mac(閘道器B)
目標mac:192.168.1.101的mac
源ip: 192.168.56.1
目標ip: 192.168.1.101
最後伺服器B就是收到了這個資料包,這個過程就是NAT
NAT的全程是 Network Address Translation
一般家用路由器都是NAT轉發的,NAT也有session的,會標識出源機器的session,再轉發回去
NAT的兩種方式,左圖是舊的實現方式,需要很多IP出口,現在一般是用TCP/UDP埠來區分源端機器
1)NAT可以作為代理,比如應用層的WEB代理,也可以作為轉發(過濾)資料包
2)NAT對外隱藏了內部網路拓撲
3)對TCP程式,NAT內部會維持一個連線,定期傳送keepalive->內部機器,傳送keepalive->外部機器
4)對於SYN連線,NAT內部也會維持一個計時器連線,當超時後就丟棄這個SYN
5)功能強的NAT會記錄IP的分片,也就是做到有狀態的
6)ICMP通過一個id,類似TCP和UDP埠的標識,來跟NAT通訊
7)IPv6不需要節省IP,NAT本身的複雜性很多人建議IPv6不要用NAT
8)NAT不僅修改IP和TCP層的,對於FTP,可能要修改載荷,也就是修改應用層的部分
9)較新的發展方向是ISP級別的NAT,也就是運營商級別的NAT,目的是進一步緩解IPv4壓力,但可能有安全
隱患問題
NAT可以讓內部機器A 訪問 外部機器B,但是外部機器B 不能和 機器A直接通訊,這就牽扯到NAT打洞的問題了
最終要實現機器A和機器B的互聯互通,也就是NAT穿越
NAT用來解決IPv4 -> IPv6共存和渡過的問題
參考