計算機網路通訊的本質就是ip
資料報的**,而實現資料報**的基礎就是位於網路中各節點上的路由表(routetable)
,即使節點不具備資料報**的功能,以其自身(localhost)
作為收發終端的的資料報傳遞也要通過其上路由表實現,下圖是對網路節點資料報收發機制的抽象框圖,通常充當網路節點的裝置會具備不只乙個網路介面,介面可以是物理的也可以是虛擬的,介面必須要配置上ip
位址才能實現資料報的收發,介面上的ip
位址可以根據實現需要配置同網段或不同網段,抑或二者混合,而在資料交換領域相同網段的介面拓撲層級相同因此可以被視為同一介面,所以在此介面區分的依據為其上的ip
位址為不同網段。
資料報通過廣播進入節點某個介面的緩衝區隨後由核心即協議棧接收,檢查資料報的下一跳位址如果是本機介面則傳送給使用者空間中的應用程式,如果不是本身介面則意味著需要進行資料報的**,如果節點開啟ip_forward
功能則根據路由表將資料報的目標位址替換為能到下一跳位址網路的閘道器位址隨後通過對應的介面傳送出去;應用程式輸出的資料報也依據路由表確定目標位址後由對應介面廣播出去。由此可見網路通訊的核心就是路由表,其與協議棧皆位為核心層級,而iptables
程式則拓展了核心功能,給使用者提供了介面可以自定義規則來實現特定的資料報收發,iptables
規則對應邏輯上的五個鏈條,由下圖所示分別是prerouting
,postrouting
,forward
,input
和output
。
由上分析可知我們平時使用的pc
其實已經具備了路由器的除了ip
**之外的所有底層功能,而這一點在linux
系統上體現的更加明顯,眾所周知linux/unix
系統的網路功能非常強大,只要在配置有多網路介面的系統上開啟預設關閉的ip
**功能就可以簡單的將一台linux
伺服器配置為router
。而如果伺服器連線的網段中有192.168
類似的小網ip
,則僅僅開啟**功能和配置路由表也無法實現大網和小網間通訊,或者說能實現小網到大網的傳遞,但無法實現大網到小網的鏈路,這是因此預設網路節點中不會給小網網段如192.168
配置路由,因此大網傳送的目標位址為小網的資料報無法實現路由,而計算機網路中的大部分通訊需要資料報的雙向互通,比如基於tcp
協議的通訊如果沒有雙向互通連三次握手都無法實現,為了解決該問題就需要用到iptables
的nat
技術來實現網路位址轉換。
instance實際生產網路中有伺服器通過
vlan
在一塊物理網絡卡上配置兩個不同網段的ip
位址。
其路由表配置也符合網內做路由**的要求,因此只要開啟ip
**的功能即可實現路由。
系統中通過命令cat /proc/sys/net/ipv4/ip_forward
檢視**功能開閉情況,1即開啟,0為關閉。可以直接執行命令echo 1/0 > /proc/sys/net/ipv4/ip_forward
臨時開閉該功能,也可以在系統檔案/etc/sysctl.conf
中設定引數net.ipv4.ip_forward=1/0
實現開閉設定,然後通過sysctl -p
生效配置。
**配置完成後最能說明問題的現象是大網網段內預設閘道器設定為上述伺服器大網ip
的裝置可以ping
通小網網段內的裝置ip
,為了實現小網裝置通過該伺服器路由到更遠端網段的資料報能在路由回來,就要通過nat
技術做snat(source network address translation)
源位址轉換,即將源位址為小網ip
資料報的源位址替換為伺服器的大網出口位址,這樣資料報接收節點就可以索引該大網ip
作為目標位址實現資料報的回傳路由,對應的也有dnat
即目標位址轉換,因實現替換的位址型別不同因而snat
要在postrouting
鏈路執行,dnat
要在prerouting
鏈路執行,在實際中實現小網與大網的通訊應用的都是snat
,但二者在本質上又是不可或缺的,snat
應用在傳送端即postrouting
鏈路,那麼在接收端即prerouting
鏈路也必須有相應的dnat
做位址逆變換,只不過該dnat
是根據核心維護的nat
表隱性觸發。
伺服器上配置snat
的iptables
命令很簡單如下:
iptables -f -t nat
iptables -t nat -a postrouting -o eth0 -j masquerade
iptables -l -t nat
配置完成後即可實現小網對外部大網的全部訪問,當然小網對除了伺服器大網同網段的裝置之外對遠端的大網網路仍然是不可見的。
附:linux
下路由配置命令
ifconfig eth0 192.168.1.2 netmask 255.255.255.0
1. route add -net *** netmask *** dev eth0 (auto-generated, on-link network)
2. route add default gw *** (configured by manual, remote network)
route add -net *** netmask *** gw ***
route add -host *** gw ***
3. route add -net yyy netmask yyy dev pppoe0 (configured by manual, remote sub-network)
靜態路由表
路由器用的是普通家用的1wan 4lan,靜態路由表作用,靜態路由表怎們設定,能不能通過靜態路由表設定不同網段共享資料夾?靜態路由表通常是指手動增加的路由表,根據閘道器連線的網段進行設定 通常家用路由器只有乙個網段,如192.168.0段,那麼預設靜態路由表就是0.0.0.0 192.168.0.x...
檢視路由表
目標 目標是目標主機 子網位址 網路位址或缺省路由。預設路由的目標為 0.0.0.0。網路掩碼 網路掩碼與目標結合使用以決定使用路由的時間。例如,主機路由的掩碼為 255.255.255.255,預設路由的掩碼為 0.0.0.0,而子網或網路路由的掩碼在這兩個極限值之間。掩碼 255.255.255...
讀懂路由表
一 檢視windows路由表 路由表是windows的tcp ip協議棧的乙個重要的部分。但是,路由表不是windows作業系統向普通使用者顯示的東西。如果你要看到這個路由表,你必須要開啟乙個命令提示符對話方塊,然後輸入 route print 命令。然後,你將看 路由詳解 第一條 0.0.0.0 ...