linux 路由表和路由定址過程
1 概述
每一個linux系統中都具有IP路由表,它儲存了本地計算機可以到達的網路目的地址範圍和如何到達的路由資訊。路由表是TCP/IP通訊的基礎,本地計算機上的任何TCP/IP通訊都受到路由表的控制。
2 Linux 核心的路由表
通過 route 命令檢視 Linux 核心的路由表。
2.1 路由表字段說明
欄位 |
說明 |
Destination |
目標網路或目標主機。Destination 為 default(0.0.0.0)時,表示這個是預設閘道器,所有資料都發到這個閘道器。 |
Gateway |
閘道器地址,0.0.0.0 表示當前記錄對應的 Destination 跟本機在同一個網段,通訊時不需要經過閘道器。如果沒有就顯示星號(*)。 |
Genmask |
Destination 欄位的網路掩碼,Destination 是主機時需要設為 255.255.255.255,是預設路由時會設定為 0.0.0.0 |
Flags |
標記 ● U 該路由可以使用。 ● H 該路由是到一個主機,也就是說,目的地址是一個完整的主機地址。如果沒有設定該標誌,說明該路由是到一個網路,而目的地址是一個網路地址:一個網路號,或者網路號與子網號的組合。 ● G 該路由是到一個閘道器(路由器)。如果沒有設定該標誌,說明目的地 是直接相連的。 ● R 恢復動態路由產生的表項。 ● D 該路由是由改變路由(redirect)報文建立的。 ● M 該路由已被改變路由報文修改。 ● ! 這個路由將不會被接受。 |
Metric |
路由距離,到達指定網路所需的中轉數,是大型區域網和廣域網設定所必需的。 |
Ref |
路由項引用次數 。 |
Use |
此路由項被路由軟體查詢的次數。 |
Iface |
網絡卡名字,例如 eth0。 |
2.2 檢視路由表
route -n
Seq |
Destination |
Gateway |
Genmask |
Flags |
Metric |
Ref |
Use |
Iface |
1 |
0.0.0.0 |
192.168.1.1 |
0.0.0.0 |
UG |
0 |
0 |
0 |
eth0 |
2 |
169.254.0.0 |
0.0.0.0 |
255.255.0.0 |
U |
1002 |
0 |
0 |
eth0 |
3 |
192.168.1.0 |
0.0.0.0 |
255.255.255.0 |
U |
0 |
0 |
0 |
eth0 |
4 |
192.168.1.1 |
0.0.0.0 |
255.255.255.255 |
U |
0 |
0 |
0 |
eth0 |
5 |
192.168.0.0 |
0.0.0.0 |
255.255.254.0 |
U |
0 |
0 |
0 |
eth0 |
6 |
192.168.2.0 |
192.168.2.1 |
255.255.255.0 |
U |
0 |
0 |
0 |
eth1 |
(1) 網路地址(Network Destination)、網路掩碼(Netmask)
網路地址和網路掩碼相與的結果用於定義本地計算機可以到達的目的網路地址範圍。通常情況下,目的網路地址範圍包含以下四種:
(a) 主機地址,某個特定主機的網路地址,網路掩碼為255.255.255.255,如上表中的4。
(b) 子網地址,某個特定子網的網路地址,如上表中的5。
(c) 網路地址,某個特定網路的網路地址,如上表中的2,3。
(d) 預設路由,所有未在路由表中指定的網路地址,如上表中的1。
(2) 閘道器(Gateway,又稱為下一跳伺服器)
在傳送IP資料包時,閘道器定義了針對特定的網路目的地址,資料包傳送到的下一跳伺服器。如果是本地計算機直接連線到的網路,閘道器通常是0.0.0.0。如果是遠端網路或預設路由,閘道器通常是本地計算機所連線到的網路上的某個伺服器或路由器。
(3) 介面(Interface)
介面定義了針對特定的網路目的地址,本地計算機用於傳送資料包的網路介面。
(4) 躍點數(Metric)
躍點數用於指出路由的成本,通常情況下代表到達目標地址所需要經過的躍點數量,一個躍點代表經過一個路由器。躍點數越低,代表路由成本越低;躍點數越高,代表路由成本越高。當具有多條到達相同目的網路的路由項時,TCP/IP會選擇具有更低躍點數的路由項。
2.3 路由確定過程
當TCP/IP需要向某個IP地址發起通訊時,它會對路由表進行評估,以確定如何傳送資料包。評估過程如下:
(1) TCP/IP使用需要通訊的目的IP地址和路由表中每一個路由項的網路掩碼進行相與計算,如果相與後的結果匹配對應路由項的網路地址,則記錄下此路由項。
(2) 當計算完路由表中所有的路由項後,
(a) TCP/IP選擇記錄下的路由項中的最長匹配路由(網路掩碼中具有最多“1”位的路由項)來和此目的IP地址進行通訊。
(b) 如果存在多個最長匹配路由,那麼選擇具有最低躍點數的路由項。
(c) 如果存在多個具有最低躍點數的最長匹配路由,那麼:均根據最長匹配路由所對應的網路介面在網路連線的高階設定中的繫結優先順序來決定(一般有線(eth0) > 無線 (wlan0) > 移動訊號(4G))。
(d) 如果優先順序一致,則選擇最開始找到的最長匹配路由。
2.3.1 驗證分析
(1) 驗證:traceroute www.baidu.com
我們通過路由表可以知道有兩條相同預設路由可以選擇,由於先找到192.168.233.2 閘道器路由,所以最後選擇了 192.168.233.2 閘道器。
[[email protected] ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.233.2 0.0.0.0 UG 0 0 0 eth1
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.233.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
[[email protected] ~]#
[[email protected] ~]#
[[email protected] ~]# traceroute www.baidu.com
traceroute to www.baidu.com (14.215.177.39), 30 hops max, 60 byte packets
// 由於先找到192.168.233.2 閘道器路由,所以最後選擇了 192.168.233.2 閘道器
1 gateway (192.168.233.2) 0.200 ms 0.109 ms 0.141 ms
2 * * *
3 * * *
4 * * *
(2) 刪除原先路由,重新新增路由
重新新增路由後,我們通過路由表可以知道有兩條相同預設路由可以選擇,由於先找到192.168.1.1 閘道器路由,所以最後選擇了 192.168.1.1 閘道器。
[[email protected] ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.233.2 0.0.0.0 UG 0 0 0 eth1
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.233.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
[[email protected] ~]#
[[email protected] ~]#
[[email protected] ~]# route del default gw 192.168.233.2
[[email protected] ~]#
[[email protected] ~]# route del default gw 192.168.1.1
[[email protected] ~]#
[[email protected] ~]#
[[email protected] ~]# route add default gw 192.168.233.2
[[email protected] ~]#
[[email protected] ~]# route add default gw 192.168.1.1
[[email protected] ~]#
[[email protected] ~]#
[[email protected] ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
0.0.0.0 192.168.233.2 0.0.0.0 UG 0 0 0 eth1
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.233.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
[[email protected] ~]#
[[email protected] ~]# traceroute www.baidu.com
traceroute to www.baidu.com (14.215.177.39), 30 hops max, 60 byte packets
1 gateway (192.168.1.1) 2.683 ms 2.432 ms 15.680 ms
2 * * *
3 * * *
4 * * *
2.4 閘道器和介面確定過程
2.4.1 流程
在確定使用的路由項後,閘道器和介面通過以下方式確定:
(1) 如果路由項中的閘道器地址為空(*)或者為0.0.0.0,那麼在傳送資料包時:
(a) 通過路由項中對應的網路介面傳送;
(b) 源IP地址為此網路介面的IP地址;
(c) 源MAC地址為此網路介面的MAC地址;
(d) 目的IP地址為接收此資料包的目的主機的IP地址;
(e) 目的MAC地址為接收此資料包的目的主機的MAC地址;
(2) 如果路由項中的閘道器地址並不屬於本地計算機上的任何網路介面,那麼在傳送資料包時:
(a) 通過路由項中對應的網路介面傳送;
(b) 源IP地址為路由項中對應網路介面的IP地址;
(c) 源MAC地址路由項中對應網路介面的MAC地址;
(d) 目的IP地址為接收此資料包的目的主機的IP地址;
(e) 目的MAC地址為閘道器的MAC地址;
2.4.2 簡單說明
在此我以上面的路由表為基礎,舉例進行說明:
(1) 和單播IP地址 192.168.1.8 的通訊
在進行相與計算時,1、3、5 項匹配,但是3項為最長匹配路由,因此選擇3項。3項的閘道器地址為0.0.0.0,因此傳送資料包時,目的IP地址為 192.168.1.8、目的MAC地址為192.168.1.8的MAC地址(通過ARP解析獲得)。
(2) 和單播IP地址 192.168.1.1 的通訊
在進行相與計算時,1、3、4、5 項匹配,但是4項為最長匹配路由,因此選擇4項。4項的閘道器地址為0.0.0.0,因此傳送資料包時,目的IP地址為 192.168.1.1、目的MAC地址為192.168.1.1的MAC地址(通過ARP解析獲得)。
(3) 和單播IP地址 192.168.22.8 的通訊
在進行相與計算時,只有 1 項匹配;在傳送資料包時,目的IP地址為192.168.22.8、目的MAC地址為192.168.1.1的MAC地址(通過ARP解析獲得)。
(4) 和子網廣播地址 192.168.1.255 的通訊
在進行相與計算時,1、3、5 項匹配,但是3項為最長匹配路由,因此選擇3項。3項的閘道器地址為0.0.0.0,因此在傳送資料包時,目的IP地址為 192.168.1.255,目的MAC地址為乙太網廣播地址FF:FF:FF:FF:FF:FF。
2.5 預設路由與預設閘道器
由於在路由表中儲存針對每個主機或子網的路由項不可行,因此提出了預設路由的概念,預設路由中的閘道器稱為預設閘道器。預設路由的網路地址為0.0.0.0,網路掩碼為0.0.0.0,它匹配任何網路通訊,因此當到達特定主機或特定子網的路由並未在路由表中指定時,均可以通過預設路由來進行轉發。如果沒有設定預設路由,那麼無法到達未在路由表中指定路由項的網路目的地址。
設定預設路由後,把資料包的路由責任移交到了路由器,優點是簡化了本地計算機上的路由表和配置,缺點則是計算機無法明確目的地址是否可達,從而可能傳送針對不可到達地址的流量。雖然位於路由路徑上的路由器知道目的地址不可達時會使用ICMP目的地址不可達資訊來通知原始傳送主機,但是這個過程中,已經佔用了 額外的網路流量。
在linux系統中,建立預設路由可以通過以下兩種方式實現:
(a) 在網路介面設定預設閘道器,從而建立預設路。
[[email protected] ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
[[email protected] ~]#
[[email protected] ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
DEFROUTE=yes // 預設路由
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=0de93453-8fa0-4080-9a53-5fadae0a8af3
DEVICE=eth0
HWADDR=00:0c:29:9b:52:d3
IPADDR=192.168.1.135
NETMASK=255.255.255.0
GATEWAY=192.168.1.1 // 閘道器
DNS1=192.168.1.1
BROADCAST=192.168.1.255
ONBOOT=yes
注意:centos 預設只支援一條預設路由,當重新啟動網口時,會把其他預設路由去掉,只剩下一條該網口生成的預設路由。
(b) 使用 route add 命令新增網路地址為0.0.0.0、網路掩碼為0.0.0.0的預設路由。
[[email protected] ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
[[email protected] ~]#
[[email protected] ~]#
[[email protected] ~]# route del -net 0.0.0.0 netmask 0.0.0.0
[[email protected] ~]#
[[email protected] ~]#
[[email protected] ~]#
[[email protected] ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
[[email protected] ~]#
[[email protected] ~]#
[[email protected] ~]# route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.1.1 dev eth0
[[email protected] ~]#
[[email protected] ~]#
[[email protected] ~]#
[[email protected] ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
[[email protected] ~]#
推薦大家總是使用前一種方式。
相關推薦
linux 路由表和路由定址過程
1 概述 每一個linux系統中都具有IP路由表,它儲存了本地計算機可以到達的網路目的地址範圍和如何到達的路由資訊。路由表是TCP/IP通訊的基礎,本地計算機上的任何TCP/IP通訊都受到路由表的控制。 2 Linux 核心的路由表 通過 route
路由表和路由選路原則(TCP/IP)
1、路由表每個Windows系統中都有IP路由表,它儲存了本地計算機可以到達的網路目的地址範圍和如何到達的路由資訊。路由表是TCP/IP通訊的基礎,本地計算機上的任何TCP/IP通訊都受到路由表的控制。路由表中的每一個路由項都具有五個型別。分為四大部分1、 網路地址(net
route命令管理路由表和預設閘道器
在 CentOS 中預設的核心配置已經包含了路由功能,但預設並沒有在系統啟動時啟用此功能。開啟 Linux的路由功能可以通過調整核心的網路引數來實現。要配置和調整核心引數可以使用 sysctl 命令。例如:要開啟 Linux核心的資料包轉發功能可以使用如下的命令。 # sysctl -w net.ipv4
理解Windows中的路由表和預設閘道器
每一個Windows系統中都具有IP路由表,它儲存了本地計算機可以到達的網路目的地址範圍和如何到達的路由資訊。路由表是TCP/IP通訊的基礎,本地計算機上的任何TCP/IP通訊都受到路由表的控制。 理解路由表 你可以執行 route print 或 netstat -r 顯示本地計算機上的路由表,如下
Internet路由-主機路由表和轉發表
明顯 href 這就是 協議 識別 可能 linux內核 通過 show 1.路由表 路由信息最終要存儲在用於路由器的主機或者專業路由器上,存放這些信息的地方稱為路由表。其中包含三元素:目標地址,掩碼,下一跳。 1.1.查詢路由表的開銷 有人認為查詢路由表是一件和交換機查
Linux系統IA-32 —— 的定址方式
•定址方式 –根據指令給定資訊得到運算元或運算元地址 •運算元所在的位置 –指令中:立即定址 –暫存器中:暫存器定址 &nbs
鏈地址法和開放定址法,求等概率下查詢成功時的平均查詢長度
問題描述: 演算法與資料結構的一個題目,用鏈地址法和開放定址法,求等概率情況下查詢成功時的平均查詢長度 已知一組關鍵字(13,20,85,52,8),雜湊函式為:H(key)=key MOD 6
laravel獲取路由引數和路由群組引數
假設我們設定了一個路由引數:/** * 定義路由引數名稱分別為: param1,param2 */ Route::get('/{param1}/{param2}', '[email protected]');現在我們訪問 http://test.dev/1/2在 T
[資料結構]散列表-連結法和開放定址法 線性探查
在介紹hash表之前首先提到直接定址表 但是由於實際上儲存在字典裡的關鍵字集合K比實際上所有可能的關鍵字的全域U要小的多,因此散列表所需要的儲存空間比直接定址表要小的多 通過雜湊函式 h:U -> {0,1,2…m-1} 其中m 遠小於|U| 但是對於h
【計算機網路】資料鏈路層(一):資料幀和物理定址
資料鏈路層是物理層的上層,物理層是把電腦連線起來的物理手段,它主要規定了網路的一些電氣屬性,其作用是負責傳送0和1的電訊號。資料鏈路層位於物理層的上層,簡單的闡述它的作用就是確定0和1的分組方式。 下
BeeGFS元資料組織方式和路徑定址分析
元資料根節點的確定和獲取 管理節點處理元資料節點的心跳資訊時,如果發現目前沒有Root節點,則會在已經註冊的節點中選擇ID最小的
網路定址過程
一、網聯網 1.1、區域網與網際網路 區域網一個最簡單的區域網就是家庭用的WLAN,再者你所在的公司或者學校一般也都是一個小的區域網。 網際網路 網際網路(internet),又稱國際網路,指的是網路與網路之間所串連成的龐大網路,這些網路以一組通用的協議相連,形成邏輯上的單一巨大國際網路。給你一個簡
實例:linux查看和操作IP路由表方法
add inux .com -s media AS 不同 pan 安裝 實例:linux查看和操作IP路由表方法 聽語音 | 瀏覽:2933 | 更新:2015-10-17 10:07 | 標簽:linux 1 2 3 4 5 6
linux命令解析--理解ip路由和操作linux路由表
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
linux下ppp0和eth0同時工作時的路由表配置
mac地址唯一 ifconfig eth0 hw ether 00:11:22:33:44:55 原配置為 route add default gw 192.168.9.254 現改為 route add -net 192.168.2.0 netmask 255.255.2
【TCP/IP】IP:網際協議(定址和路由)
IP是TCP/IP協議族中最為核心的協議,所有的TCP、UDP、ICMP及IGMP資料都以IP資料報格式傳輸。 IP提供不可靠、無連線的資料報傳送服務。 不可靠是指它不能保證IP資料報能成功地到達目的地,IP僅提供最好的傳輸服務,如果期間資料傳輸發生了錯誤,IP的處理演算法
linux中路由策略rule和路由表table
1.linux系統中路由表tablelinux最多可以支援255張路由表,每張路由表有一個table id和table name。其中有4張表是linux系統內建的:(1)table id = 0系統保留。(2)table id = 255稱為本地路由表,表名為local。像
linux路由表的檢視和含義
1.關於路由表的一個例子解析 檢視命令:netstat -rn 先執行帶-r選項的netstat命令,列出路由表,然後以-n選項再次執行該命令,以數字格式打印出 ip地址(我們這樣做是因為路由表中的一些表項是網路地址,而不是主機地址。如果沒有- n選項, netst
Linux路由表信息-route命令
當前 表示 nat dev 通過 網絡接口 targe 直接 pre 使用命令 :route route 命令 顯示和設置Linux路由表 -A:設置地址類型; -C:打印將Linux核心的路由緩存; -v:詳細信息模式; -n:不執行DNS反向查找,直接顯示數
linux 多網卡多路由表實現策略路由
文件名 多網卡 路由規則 策略 關機 name show scripts ip地址 linux kernel 2.2 開始支持多個路由表。routing policy database (RPDB)。 傳統路由表,基於目標地址做路由選擇。通過多個路由表,kernel支持實施