IP 轉發分組的流程
數據路由:路由器在不同網段轉發數據包;
網絡暢通的條件:數據包能去能回;
-
從源網絡發出時,沿途的每一個路由器必須知道到目標網絡下一跳給哪個接口;
-
從目標網絡返回時,沿途的每一個路由器必須知道到源網絡下一跳給哪個接口;
可以看到網段1~5對應的地址主機號都是歸零的,即配置路由器端口網段地址時主機號要歸零。如端口B連接的網段2地址:172.16.0.0 / 24 。
-
如圖所示,計算機PC0 ping PC1,網絡要想通,要求沿途的路由器Router0、 Router1、 Router2和Router3都必須有到192.168.1.0/24網絡的路由(路由器中存儲路徑的路由表中的信息),這樣數據包才能到達PC1;
-
PC1要回應數據包給PC0,沿途所有的路由器必須有到192.168.0.0 /24網絡的路由,這樣數據包才能回來。
-
由於網段1和2直連路由器Router0,所以不用給Router0的路由表手動添加關於網段1和2的路徑信息。但是Router0路由表內是沒有與Router0非直連網段3 、4 、5的相關路徑信息的,需要管理員手動添加。同理Router1直連網段2 、3,非直連網段1 、4 、5,所以需要手動添加網段1 、4 、5路徑信息。這叫做靜態路由。
-
舉例:如上圖,PC0想要訪問Router0的B端口,由於不在同一網段,PC0先把數據包給Router0的A端口(網關),路由器Router0就會自動把數據包轉給B端口。B端口收到數據包之后向PC0發出一個回復數據包,Router0直連1網段所以知道到PC0要怎么走,所以Router0自動把回復的數據包通過A端口轉給PC0;數據包能去能回,所以PC0訪問Router0的B端口時不用手動給Router0添加路徑信息,Router0會自動中轉數據包;
如果PC0想要訪問Router1的C端口,同樣不在同一個網段,PC0先把數據包給Router0的A端口,由於Router0直連1 、2網段,所以Router0知道去Router1的C端口怎么走,然后Router1自動把數據包轉給C端口。C端口收到數據包之后向PC0發出一個回復數據包,但是Router1直連的是2 、3網段,與1網段非直連,所以如果不給Router1手動輸入關於網段1的相關路徑信息,Router1將無法把數據傳回PC0,數據包能去不能回,造成通信失敗。
-
因此,判斷兩個地址能否通過路由器自動中轉數據,要看數據包在兩個地址間是否能去能回。
查看Windows本地路由表
在命令行窗口輸入以下命令:
route print
可以發現Windows的默認網關就是默認路由。
只加IP地址和子網掩碼沒設置網關的話,就到不了其他網段,也就是說不知道到其他網段的路由。
以下為為計算機添加路由表的命令:
route add 0.0.0.0 mask 0.0.0.0 10.7.86.1
三個地址分別是網絡目標IP地址、 網絡掩碼和網關。
現實意義:例子
-
問題:一個計算機有兩個網卡1和2,它們對應的網關分別是A和B;網卡1通過網關A訪問網絡,網卡2通過網關B訪問企業內網;出現的問題為Internet上的其他計算機與該計算機通信時斷時通。
-
原因:由於該計算機存在兩個網關就意味着存在兩個默認路由,也就意味着該計算機認為到其他網段有兩條路徑,但是卻不知道一條路徑通Internet,另一條路徑通企業內網,而是認為兩條路徑是等價的,可以隨意選擇路徑訪問;
所以當Internet上的計算機如C “ping” PC-PT的時候時不時會造成丟包。因為計算機C向PC-PT發數據包時只能通過網關A這條路徑,但是PC-PT給計算機C發送數據包時卻認為通過網關A和B兩條路徑都可以,都等價;所以PC-PT發出的數據包一部分通過網關A路徑正常發送到計算機C,另一部分數據包則通過網關C路徑發送到企業內網導致丟包,造成訪問速度變慢,這是因為發生丟包時上層協議會要求重傳,所以只會導致通信速度變慢,而不會導致無法通信。
-
解決方案:刪除網卡2的默認路由,手動添加路由:
route add 172.16.0.0 mask 255.255.255.0 172.16.0.1
這樣設置之后,網卡1通過默認路由訪問Internet,網卡2通過指定路由訪問公司內網,彼此互不影響。這就是在Windows上添加路由表的意義。
經驗:存在多張網卡時,禁用所需使用的那張網卡之外的其余網卡,保證只有一個默認網關,防止出現路由表錯誤。
再如:
PC0一個網卡連接Internet把A設為網關,另一網卡連接一個交換機組成的內網,內網內的計算機通過PC0連接Internet,所以內網計算機需要把B作為網關,但是PC0連接內網的網卡不用設置網關,否則會出現路由表錯誤。
故障判斷規律:通與斷的次數相當很大可能是路由問題;通的次數多,斷的次數少很大可能是網絡阻塞的問題。
網絡負載均衡
配置和驗證網絡負載均衡
如圖所示:192.168.0.0/24網段的PC0到192.168.3.0/24網段的PC1有兩條路①和②,可以通過設置網絡中路由器的路由來實現:PC0到PC1走線路① / ②,PC1到PC0走線路② / ①。從而實現負載均衡控制。
圖中:
Router0直連192.168.2.0和192.168.1.0網段,所以只需要手動添加網段192.168.0.0和192.168.3.0的路由便可在Router0中實現PC0到PC1的數據自動中轉。
Router1直連192.168.5.0和192.168.4.0網段,所以只需要手動添加網段192.168.0.0和192.168.3.0的路由便可在Router1中實現PC0到PC1的數據自動中轉。
Router3中刪除路由192.168.5.2(192.168.1.2)即可實現PC0到PC1只走路線①(②);
Router2中刪除路由192.168.2.1(192.168.4.2)即可實現PC1到PC0只走路線②(①);
最長前綴匹配
- 使用 CIDR 時,路由表中的每個項目由“網絡前綴”和“下一跳地址”組成。在查找路由表時可能會得到不止一個匹配結果。
- 應當從匹配結果中選擇具有最長網絡前綴的路由:最長前綴匹配(longest-prefix matching)。
- 網絡前綴越長,其地址塊就越小,因而路由就越具體(more specific) 。
例如:目的地址 D = 206.0.71.128。路由表中的路由:A:206.0.68.0 / 22;B:206.0.71.128 / 25 ;A路由主機位10位,B路由主機位7位,B路由更具體,根據最長前綴匹配原則匹配B路由。
使用二叉線索查找路由表
- 為了進行更加有效的查找,通常是將無分類編址的路由表存放在一種層次的數據結構中,然后自上而下地按層次進行查找。這里最常用的就是二叉線索(binary trie)。
例:用 5 個前綴構成的二叉線索:
先將前綴按相同的位排列好,再按每位逐級分支查找。如現分為01開頭和10開頭的,在分別每一位分支查找下去,查找深度是5。如果為32位前綴構成的二差線索查找深度為32。