linux下route命令

 
 

route命令感觉很不容易。一般开机后在命令行中使用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 eth0

 

link-local      *               255.255.0.0     U     0      0        0 eth0

 

default         192.168.100.1   0.0.0.0         UG    0      0        0 eth0

 

这是在内核中的ip路由表,这里第一个192.168.100.0是自己设置ip地址的子网,设置自己的默认路由时,必须是192.168.100.x,否则会出现错误。

 

1. 直接使用这个命令时,[root@localhost ~]# route add -net 172.22.0.0 netmask 255.255.0.0 gw 172.22.83.1 eth0,会出现如下的错误:SIOCADDRT: 没有那个进程。 此时使用route add -net 172.22.0.0 netmask 255.255.0.0 eth0命令即会成功了。很晕了。

 

2. 似乎理解了一些东西了,在添加一个新的网段时,它的出口地址应该是当前ip routing table表中的当前有的地址,否则会出现这个错误:SIOCADDRT: 没有那个进程。第一点中使用第二个命令时,网关是默认的default gw,因此可以使用了。突然间想起鸟哥私房菜里的那句话了,

 

“透过 route add 来增加一个路由!请注意,这个路由必须要能够与你互通”和“你只要記得,當出現『SIOCADDRT: Network is unreachable』 這個錯誤時,肯定是由於 gw 後面接的 IP 無法直接與您的網域溝通 (Gateway 並不在你的網域內), 所以,趕緊檢查一下是否輸入錯誤啊!加油吧!”这两句话很经典阿,之前看到却不细想,郁闷阿。

 

3. linux下route print显示出错,print是windows下的参数。

 

错误1:

 

SIOCADDRT: 没有那个进程

 

这个错误应该注意添加路由的网关,能否由现在的ip routing table路由出去,若不能,很可能是这个原因。

 

错误2:

 

[root@localhost ~]# route del 172.22.0.0

 

SIOCDELRT: 没有那个进程

 

 

[root@localhost ~]# route del -net 172.22.0.0

 

SIOCDELRT: 无效的参数

 

 

[root@localhost ~]# route del 172.22.0.0

 

SIOCDELRT: 没有那个进程

 

原因:route的参数不完整,使用如下即可:

 

[root@localhost ~]# route del -net 172.22.0.0 netmask 255.255.252.0

 

向鸟哥致敬:转自鸟哥的route

 

路由修改 route

 

我們在網路基礎的時候談過關於路由的問題, 兩部主機之間一定要有路由才能夠互通 TCP/IP 的協定,否則就無法進行連線啊! 一般來說,只要有網路介面,該介面就會產生一個路由,例如在鳥哥實驗室內部的主機有一個 eth0 及 lo , 所以:

 

[root@linux ~]# route [-nee]

 

[root@linux ~]# route add [-net|-host] [網域或主機] netmask [mask] [gw|dev]

 

[root@linux ~]# route del [-net|-host] [網域或主機] netmask [mask] [gw|dev]

 

觀察的參數:

 

-n  :不要使用通訊協定或主機名稱,直接使用 IP 或 port number;

 

-ee :使用更詳細的資訊來顯示

 

增加 (add) 與刪除 (del) 路由的相關參數:

 

-net    :表示後面接的路由為一個網域;

 

-host   :表示後面接的為連接到單部主機的路由;

 

netmask :與網域有關,可以設定 netmask 決定網域的大小;

 

gw      :gateway 的簡寫,後續接的是 IP 的數值喔,與 dev 不同;

 

dev     :如果只是要指定由那一塊網路卡連線出去,則使用這個設定,後面接 eth0 等

 

範例一:單純的觀察路由狀態

 

[root@linux ~]# route -n

 

Kernel IP routing table

 

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

 

192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0

 

169.254.0.0     0.0.0.0         255.255.0.0     U     0      0        0 eth0

 

0.0.0.0         192.168.10.30   0.0.0.0         UG    0      0        0 eth0

 

[root@linux ~]# route

 

Kernel IP routing table

 

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

 

192.168.10.0    *               255.255.255.0   U     0      0        0 eth0

 

169.254.0.0     *               255.255.0.0     U     0      0        0 eth0

 

default         server.cluster  0.0.0.0         UG    0      0        0 eth0

 

由上面的例子當中仔細觀察 route 與 route -n 的輸出結果,你可以發現有加 -n 參數的主要是顯示出 IP ,至於使用 route 而已的話,顯示的則是『主機名稱』喔! 也就是說,在預設的情況下, route 會去找出該 IP 的主機名稱,如果找不到呢? 就會顯示的鈍鈍的(有點小慢),所以說,鳥哥通常都直接使用 route -n 啦! 由上面看起來,我們也知道 default = 0.0.0.0/0.0.0.0 , 而上面的資訊有哪些你必須要知道的呢?

 

* Destination, Genmask:這兩個玩意兒就是分別是 network 與 netmask 啦!所以這兩個咚咚就組合成為一個完整的網域囉!

 

* Gateway:該網域是通過那個 gateway 連接出去的? 如果顯示 0.0.0.0 表示該路由是直接由本機傳送,亦即可以透過區域網路的 MAC 直接傳訊; 如果有顯示 IP 的話,表示該路由需要經過路由器 (通訊閘) 的幫忙才能夠傳送出去。

 

* Flags:總共有多個旗標,代表的意義如下:

 

o U (route is up):該路由是啟動的;

 

o H (target is a host):目標是一部主機 (IP) 而非網域;

 

o G (use gateway):需要透過外部的主機 (gateway) 來轉遞封包;

 

o R (reinstate route for dynamic routing):使用動態路由時,恢復路由資訊的旗標;

 

o D (dynamically installed by daemon or redirect):已經由服務或轉 port 功能設定為動態路由

 

o M (modified from routing daemon or redirect):路由已經被修改了;

 

o ! (reject route):這個路由將不會被接受(用來抵擋不安全的網域!)

 

* Iface:這個路由傳遞封包的介面。

 

此外,觀察一下上面的路由排列順序喔,依序是由小網域 (192.168.10.0/24 是 Class C),逐漸到大網域 (169.254.0.0/16 Class B) 最後則是預設路由 (0.0.0.0/0.0.0.0)。然後當我們要判斷某個網路封包應該如何傳送的時候,該封包會經由這個路由的過程來判斷喔! 舉例來說,我上頭僅有三個路由,若我有一個傳往 192.168.10.20 的封包要傳遞,那首先會找 192.168.10.0/24 這個網域的路由,找到了!所以直接由 eth0 傳送出去;

 

如果是傳送到 Yahoo 的主機呢? Yahoo 的主機 IP 是 202.43.195.52,我通過判斷 1)不是 192.168.10.0/24, 2)不是 169.254.0.0/16 結果到達 3)0/0 時,OK!傳出去了,透過 eth0 將封包傳給 192.168.10.30 那部 gateway 主機啊!所以說,路由是有順序的。

 

因此當你重複設定多個同樣的路由時, 例如在你的主機上的兩張網路卡設定為相同網域的 IP 時,會出現什 情況?會出現如下的情況:

 

Kernel IP routing table

 

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

 

192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0

 

192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1

 

也就是說,由於路由是依照順序來排列與傳送的, 所以不論封包是由那個介面 (eth0, eth1) 所接收,都會由上述的 eth0 傳送出去, 所以,在一部主機上面設定兩個相同網域的 IP 本身沒有什 意義!有點多此一舉就是了。 除非是類似虛擬主機 (Xen, VMware 等軟體) 所架設的多主機時,才會有這個必要~

 

範例二:路由的增加與刪除

 

[root@linux ~]# route del -net 169.254.0.0 netmask 255.255.0.0 dev eth0

 

# 上面這個動作可以刪除掉 169.254.0.0/16 這個網域!

 

# 請注意,在刪除的時候,需要將路由表上面出現的資訊都寫入

 

# 包括  netmask , dev 等等參數喔!注意注意

 

[root@linux ~]# route add -net 192.168.100.0 \

 

> netmask 255.255.255.0 dev eth0

 

# 透過 route add 來增加一個路由!請注意,這個路由必須要能夠與你互通。

 

# 舉例來說,如果我下達底下的指令就會顯示錯誤:

 

# route add -net 192.168.200.0 netmask 255.255.255.0 gw 192.168.200.254

 

# 因為我的環境內僅有 192.168.10.100 這個 IP ,所以不能與 192.168.200.254

 

# 這個網段直接使用 MAC 互通!這樣說,可以理解喔!?

 

[root@linux ~]# route add default gw 192.168.10.30

 

# 增加預設路由的方法!請注意,只要有一個預設路由就夠了喔!

 

# 在這個地方如果您隨便設定後,記得使用底下的指令重新設定你的網路

 

# /etc/init.d/network restart

 

如果是要進行路由的刪除與增加,那就得要參考上面的例子了, 其實,使用 man route 裡面的資料就很豐富了!仔細查閱一下囉! 你只要記得,當出現『SIOCADDRT: Network is unreachable』 這個錯誤時,肯定是由於 gw 後面接的 IP 無法直接與您的網域溝通 (Gateway 並不在你的網域內), 所以,趕緊檢查一下是否輸入錯誤啊!加油吧!

linux下route命令--说的比较清楚!的更多相关文章

  1. linux 下route命令

    参考:http://blog.sina.com.cn/s/blog_67146a750100zoyi.html 为了让设备能访问另一个子网,需要在设备里增加路由到子网络,下面是一些资料.基本操作如下: ...

  2. linux下route命令使用实战

    配置路由表: 第一步: sudo route add -net 172.30.6.0 netmask 255.255.255.0 eth0 执行后可以使用命令route -n查看,查看内容如下: 17 ...

  3. Linux下ps命令详解 Linux下ps命令的详细使用方法

    http://www.jb51.net/LINUXjishu/56578.html Linux下的ps命令比较常用 Linux下ps命令详解Linux上进程有5种状态:1. 运行(正在运行或在运行队列 ...

  4. 例解 Linux 下 Make 命令

    Linux 下 make 命令是系统管理员和程序员用的最频繁的命令之一.管理员用它通过命令行来编译和安装很多开源的工具,程序员用它来管理他们大型复杂的项目编译问题.本文我们将用一些实例来讨论 make ...

  5. Linux下who命令之C语言实现

    Linux下who命令之C语言实现 Step1:前期准备 首先要有一个清楚的认识:linux中一切皆文件 实现who命令,who命令也是Linux中的一个文件,那我们怎么找到它呢?我们可以" ...

  6. linux下history命令显示历史指令记录的使用方法

    Linux系统当你在shell(控制台)中输入并执行命令时,shell会自动把你的命令记录到历史列表中,一般保存在用户目录下的.bash_history文件中.默认保存1000条,你也可以更改这个值 ...

  7. linux下svn命令使用大全

    最近经常使用svn进行代码管理,这些命令老是记不住,得经常上网查,终于找了一个linux下svn命令使用大全:1.将文件checkout到本地目录 svn checkout path(path是服务器 ...

  8. Linux下rz命令使用的实例详解

    Linux中rz命令和sz命令都可用于文件传输,而rz命令主要用于文件的上传,下面将通过几个实例来给大家详细介绍下Linux下rz命令的用法,一起来学习下吧. rz命令可以批量上传文件,当然也可上传单 ...

  9. Linux下rar命令详解

    Linux下rar命令详解 用法: rar <命令> -<选项1> ….-<选项N> < 操作文档> <文件…> <@文件列表…> ...

随机推荐

  1. Android四大组件之Intent(续2)

    1.你如何通过一个intent来唤醒activity? this.startActivity(intent,request);      2.什么是显式.隐式的intents? 显式:指定组件名,通常 ...

  2. BZOJ4975 区间翻转

    这个范围给的很像区间dp之类的,想了半天没一点思路,滚去看了一眼status被吓傻了.然后瞎猜了一发结论就过掉了. 求出逆序对数,判断是否为奇数即可.因为翻转区间会把将这段区间的逆序对取反,而长度为4 ...

  3. [JLOI2012]时间流逝 树上高斯消元 概率期望

    题面 题意:(感觉题面写的题意是错的?)有\(n\)种能量不同的圈,设当前拥有的圈的集合为\(S\),则: 1,每天有\(p\)概率失去一个能量最小的圈.特别的,如果\(S = \varnothing ...

  4. 【PDF】HTML中嵌入pdf的简单方法

    <embed src="> 或者你不想显示某些功能的话: <embed src=">

  5. JS中如何使用EL表达式中的对象

    JS中如何使用EL表达式中的对象 2017年09月25日 15:33:09 lhpnba 阅读数:4859   1.js中使用el表达式要加双引号或单引号:'${list}' 2.js变量获取el表达 ...

  6. hiho 1044 : 状态压缩

    #1044 : 状态压缩·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在兑换到了喜欢的奖品之后,便继续起了他们的美国之行,思来想去,他们决定乘坐火车 ...

  7. 1.UiDevice API 详细介绍

    1.UiDevice按键与keycode使用 返回值 方法名 说明 boolean pressBack() 模拟短按返回back键 boolean pressDPadCenter() 模拟按轨迹球中点 ...

  8. SpringCloud学习(5)——Feign负载均衡

    Feign概述 Feign是声明式的Web服务客户端, 使得编写Web服务客户端变的非常容易, 只需要创建一个接口, 然后在上面添加注解即可. Feign旨在使编写Java Http客户端变的更容易. ...

  9. JS中的匿名函数自执行、函数声明与函数表达式

    先看一段jQuery源码中匿名函数自执行的例子: (function( window, undefined ) { // jquery code })(window); 另外一种常见的写法: +fun ...

  10. 2017 ACM Arabella Collegiate Programming Contest(solved 11/13)

    省选考前单挑做点ACM练练细节还是很不错的嘛- 福利:http://codeforces.com/gym/101350 先来放上惨不忍睹的virtual participate成绩(中间跑去食堂吃饭于 ...