假设某主机上的网络接口配置和路由表如下:
这台主机只有一个网络接口连到192.168.232.0/24网络。路由表的 Destination是目的网络地址,Genmask是子网掩码,Gateway是下一跳地址,Iface是发送接口,Flags中的U标志表示此条目 有效(可以禁用某些条目),G标志表示此条目的下一跳地址是某个路由器的地址,
没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由
器转发,因此下一跳地址处记为*号。
如果要发送的数据包的目的地址是192.168.232.1,跟第三行的子网掩码做与运算得到192.168.232.0,正是第三行的目的网络地址,因此从eth0接口发送出去,由于192.168.232.0/24正是与eth0接口直接相连的网络,因此可以直接发到目的主机,不需要经路由器转发。
如果要发送的数据包的目的地址是202.10.1.2,跟后两行路由表条目都不匹配,那么就要按缺省路由条目,从eth0接口发出去,首先发往192.168.232.2 路由器,再让路由器根据它的路由表决定下一跳地址。
A complete matching host address is
searched for before a matching network ID. Only if both of these fail is
a default route used.
路由的处理过程如下,ARP部分可以参考这里:
===============================================
http://blog.csdn.net/zmj_88888888/article/details/9120801
Linux系统的route命令用于显示和操作IP路由表(show / manipulate the IP routing table)。要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。
在Linux系统中,设置路由通常是为了解决以下问题:该Linux系统在一个局域网中,局域网中有一个网关,能够让机器访问Internet,那么就需要将网关的IP地址设置为Linux机器的默认路由。
要注意的是,直接在命令行下执行route命令来添加路由,不会永久保存,当网卡重启或者机器重启之后,该路由就失效了;可以在/etc/rc.local中添加route命令来保证该路由设置永久有效。
- Destination : The destination network or destination host. 目标网络或目标主机。若为主机,Flags标志是H
- Gateway : The gateway address or '*' if none set. 网关地址,如果没有就显示星号。*和0.0.0.0一个意思,代表不走网关
- Flags为路由标志,标记当前网络节点的状态。
Flags标志说明:
U Up表示此路由当前为启动状态
H Host,表示此网关为一主机
G Gateway,表示此网关为一路由器
R Reinstate Route,使用动态路由重新初始化的路由
D Dynamically,此路由是动态性地写入
M Modified,此路由是由路由守护程序或导向器动态修改
! 表示此路由当前为关闭状态
- Genmask 网络掩码: The netmask for the destination net; '255.255.255.255' for a host destination and '0.0.0.0' for the default route.
- Ref 不用管,恒为0。 Number of references to this route. (Not used in the Linux ker-nel.)
- Use 该路由被使用的次数,可以粗略估计通向指定网络地址的网络流量。
Count of lookups for the route. Depending on the use of -F and
-C this will be either route cache misses (-F) or hits (-C).
- Iface 接口,即eth0,eth0等网络接口名
Interface to which packets for this route will be sent.
[root@shanghai-OA-pm-2K1code-10-1-22-246 ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.100.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 //发往192.168.100.0网络的数据不走网关,直接由eth1发出去 10.1.22.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 eth1 10.0.0.0 10.1.22.1 255.0.0.0 UG 0 0 0 eth0 //发往10.0.0.0网络的数据由eth0发到网关10.1.22.1 224.0.0.0 0.0.0.0 240.0.0.0 U 0 0 0 eth0 0.0.0.0 10.1.22.1 0.0.0.0 UG 0 0 0 eth0 //本机的默认路由,若所有上述的路径都不匹配
[root@shanghai-OA-pm-2K1code-10-1-22-246 ~]# 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 10.1.22.0 * 255.255.255.0 U 0 0 0 eth0 169.254.0.0 * 255.255.0.0 U 0 0 0 eth1 10.0.0.0 10.1.22.1 255.0.0.0 UG 0 0 0 eth0 224.0.0.0 * 240.0.0.0 U 0 0 0 eth0 default 10.1.22.1 0.0.0.0 UG 0 0 0 eth0
观察一下上面的路由排列顺序喔,依序是由小网域(192.168.100.0/24 是 Class C),逐渐到大网域(169.254.0.0/16 Class B) 最后则是默认路由 (0.0.0.0/0.0.0.0)。
当我们要判断某个网路封包应该如何传送的时候,该封包会经由这个路由的过程来判断!
以0.0.0.0开头的一行的Gateway即为默认网关