linux的ip路由详细解释,linux命令解析--理解ip路由和操作linux路由表

路由是選擇一條數據包傳輸路徑的過程,也就是說主機怎么向目的地發送數據的過程。當TCP/IP主機發送IP數據包時,便出現了路由,且當到達IP路由器時還會再次出現。路由器是從一個物理網向另一個物理網發送數據包的裝置,路由器通常被稱為網關,它承但着分發數據包的任務。對於發送的主機和路由器而言,必須決定向哪里轉發數據包。在決定路由時,IP層查詢位於內存中的路由表,然后根據查詢規則,進行ip路由。是不是很抽象?先說如何選路:

(1)當一個主機試圖與另一個主機通信時,IP首先決定目的主機是一個內網還是外網,怎么確定?當然使用網絡號。

(2)如果是是同一內網,那就就是直接發送了,這個最簡答不過了。

(3)如果目的主機是和發送主機不在同一個內網,也就是在外網了,^_^很啰嗦,IP將查詢路由表來為外網主機或外網選擇一個路由,所以一般情況下有可能為某個外網指定特定的路由,具體問題稍后分析。

(4)若未找到明確的路由,此時在路由表中還會有默認網關,也可稱為缺省網關,IP用缺省的網關地址將一個數據傳送給下一個指定的路由器,所以網關也可能是路由器,也可能只是內網向特定路由器傳輸數據的網關。

(4)在該路由器收到數據后,它再次為遠程主機或網絡查詢路由,若還未找到路由,該數據包將發送到該路由器的缺省網關地址。

每發現一條路由,數據包被轉送下一級路由器,稱為一次“跳步”,按照同樣的方式進行轉發,並最終發送至目的主機。若未發現任何一個路由可以接受此次ip包的地址,發送主機將收到一個出錯信息,也就是說其中任何一跳出現了不可到達,最后的結果也就是報錯了。

上面只是個人的一些理解,事實上當時我們做的實驗不少,但是看看tcp/ip詳解后,就可以一目了然了,現在以linux下的路由表為例說明一下:

$ sudo route

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

192.168.100.0 * 255.255.255.0 U 0 0 0 eth1

192.168.10.0 * 255.255.254.0 U 0 0 0 eth0

default 192.168.10.1 0.0.0.0 UG 0 0 0 eth0

--------------------------------------------------------------------------------------

IP路由選擇是逐跳地(hop-by-hop)進行的。從這個路由表信息可以看出,IP並不知道到達任何目的的完整路徑(當然,除了那些與主機直接相連的目的)。所有的IP路由選擇只為數據報傳輸提供下一站路由器的IP地址。它假定下一站路由器比發送數據報的主機更接近目的,而且下一站路由器與該主機是直接相連的。

IP路由選擇主要完成以下這些功能:

1)搜索路由表,尋找能與目的IP地址完全匹配的表目(網絡號和主機號都要匹配)。如果找到,則把報文發送給該表目指定的下一站路由器或直接連接的網絡接口(取決於標志字段的值)。

2) 搜索路由表,尋找能與目的網絡號相匹配的表目。如果找到,則把報文發送給該表目指定的下一站路由器或直接連接的網絡接口(取決於標志字段的值)。目的網絡上的所有主機都可以通過這個表目來處置。例如,一個以太網上的所有主機都是通過這種表目進行尋徑的。這種搜索網絡的匹配方法必須考慮可能的子網掩碼。關於這一點我們在下一節中進行討論。

3)搜索路由表,尋找標為“默認(default)”的表目。如果找到,則把報文發送給該表目指定的下一站路由器。如果上面這些步驟都沒有成功,那么該數據報就不能被傳送。如果不能傳送的數據報來自本機,那么一般會向生成數據報的應用程序返回一個“主機不可達”或 “網絡不可達”的錯誤。

完整主機地址匹配在網絡號匹配之前執行。只有當它們都失敗后才選擇默認路由。默認路由,以及下一站路由器發送的ICMP間接報文(如果我們為數據報選擇了錯誤的默認路由),是IP路由選擇機制中功能強大的特性。

freebsd上使用netstat -nr打印路由表

現在問題在如何操作路由表,因為ip的選路全靠它吃飯了,怎么為一個特定的網絡或者主機選擇一條特定的路由?如何刪除路由?這些問題對於網絡維護和系統管理也尤為重要:

還是以上面的路由表為例,建議使用前先man route查看方法,或許各個系統略有差異,下面是以debian為例,由於是測試,所以使用sudo,而不是root權限:

1、為某主機添加路由

$ sudo route add –host 192.168.10.58 dev eth1

//所有通向192.168.10.58的數據都是用eth1網卡

$ sudo route add –host 192.168.11.58 gw 192.168.10.1

//通向192.168.11.58的數據使用網關192.168.10.1

不經意間做了一個驗證實驗:由於eth1是沒有啟動的,所以添加這個路由后,192.168.10.58不可ping通

初始路由表

sudo route

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

192.168.100.0 * 255.255.255.0 U 0 0 0 eth1

192.168.10.0 * 255.255.254.0 U 0 0 0 eth0

default 192.168.10.1 0.0.0.0 UG 0 0 0 eth0

---------------------------------------------------------

可以ping通192.168.10.58

$ ping 192.168.10.58

PING 192.168.10.58 (192.168.10.58) 56(84) bytes of data.

64 bytes from 192.168.10.58: icmp_seq=1 ttl=64 time=0.188 ms

----------------------------------------------------------------

添加192.168.10.58的路由

$ sudo route add -host 192.168.10.58 dev eth1

$ sudo route

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

192.168.10.58 * 255.255.255.255 UH 0 0 0 eth1

192.168.100.0 * 255.255.255.0 U 0 0 0 eth1

192.168.10.0 * 255.255.254.0 U 0 0 0 eth0

default 192.168.10.1 0.0.0.0 UG 0 0 0 eth0

-----------------------------------------------------------------

由於eth0無法使用了,所以發給eth1,就等於丟入黑洞之中

$ ping 192.168.10.58

PING 192.168.10.58 (192.168.10.58) 56(84) bytes of data.

--- 192.168.10.58 ping statistics ---

2 packets transmitted, 0 received, 100% packet loss, time 1010ms

指定給網關處理

$ sudo route add -host 192.168.10.58 gw 192.168.10.1

$ sudo route

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

192.168.10.58 192.168.10.1 255.255.255.255 UGH 0 0 0 eth0

192.168.10.58 * 255.255.255.255 UH 0 0 0 eth1

192.168.100.0 * 255.255.255.0 U 0 0 0 eth1

192.168.10.0 * 255.255.254.0 U 0 0 0 eth0

default 192.168.10.1 0.0.0.0 UG 0 0 0 eth0

---------------------------------------------------------

要經過網關了,驗證了路由表的作用

$ ping 192.168.10.58

PING 192.168.10.58 (192.168.10.58) 56(84) bytes of data.

From 192.168.10.1: icmp_seq=1 Redirect Network(New nexthop: 192.168.10.58)

64 bytes from 192.168.10.58: icmp_seq=1 ttl=64 time=1.02 ms

------------------------------------------------------

廢話少說了,同理為某網路添加路由和刪除路由如下所示:經過測試有效:

2、為某網絡的添加路由

$ sudo route add –net 220.181.8.0/24 dev eth0

$ sudo route add –net 220.181.8.0/24 gw 192.168.10.1

3、添加默認網關

$ sudo route add default gw 192.168.10.1

4、刪除路由,

$ sudo route del –host 192.168.168.110 dev eth0

可能你會遇到刪除時候語法錯誤,請參看路由表的Flags,路由上面的第一條,G表示設定了網關,H表示操作了主機,所以就用$ sudo route del -host 192.168.10.58 gw 192.168.10.1刪除,更詳細的請man。

使用route 命令添加的路由,機器重啟或者網卡重啟后路由就失效了,和iptables一樣,需要永久添加的話,也是使用開機執行,所以可以用以下方法添加永久路由:

1.在/etc/rc.local里添加執行命令,進行開機執行,因為是root權限,所以不用sudo了:

route add –net 220.181.8.0/24 dev eth0

route add –net 220.181.9.0/24 gw 192.168.10.1

2.在/etc/sysconfig/network里添加到末尾

方法:GATEWAY=gw-ip 或者 GATEWAY=gw-dev

3./etc/sysconfig/static-router :

any net x.x.x.x/24 gw y.y.y.y

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值