山西长治供电公司_Linux路由表的结构与算法分析_20160420
linux 路由选取过程
linux 路由选取过程Linux 路由选取过程导语:在计算机网络中,路由是实现不同网络之间数据传输的关键技术之一。
Linux 操作系统作为一种常用的服务器操作系统,其路由选取过程对于网络的稳定和性能具有重要影响。
本文将介绍Linux 路由选取过程的基本原理和具体操作步骤,帮助读者更好地理解和使用 Linux 路由功能。
一、概述在计算机网络中,路由器是将数据从源地址传输到目的地址的核心设备,而路由选取就是指在众多可选路由路径中,选择最佳的路径进行数据传输。
Linux 操作系统提供了强大的路由功能,通过路由表和路由算法实现路由选取过程。
二、路由表路由表是一种存储路由器信息的数据结构,它记录了目的网络的地址和下一跳路由器的地址。
Linux 操作系统中的路由表可以通过命令"route"或"ip route"来查看和管理。
路由表中的每一条记录包含目的网络地址、子网掩码、下一跳地址和出接口等信息。
其中,目的网络地址指的是数据包要到达的目的地网络的网络号;子网掩码用于将目的网络地址和源地址进行逻辑与运算,以判断数据包是否在同一网络中;下一跳地址是指数据包从当前路由器出发,需要通过的下一个路由器的地址;出接口是指数据包离开当前路由器的网络接口。
三、路由算法Linux 操作系统使用的路由算法主要有静态路由和动态路由两种。
静态路由是由网络管理员手动配置的路由信息,不会根据网络状况进行调整。
动态路由则是根据网络拓扑和链路状态自动计算生成的路由信息,能够根据网络变化实时更新。
1. 静态路由静态路由是通过手动配置路由表实现的,它的优点是简单、稳定,适用于小型网络或需要固定路由路径的场景。
在 Linux 操作系统中,可以通过编辑"/etc/network/interfaces"文件来配置静态路由信息。
静态路由的配置步骤如下:(1)打开终端,使用 root 权限登录;(2)编辑"/etc/network/interfaces"文件,添加静态路由信息,格式如下:```up route add -net 目的网络地址/子网掩码 gw 下一跳地址dev 出接口```其中,目的网络地址和子网掩码为目标网络的地址和掩码;下一跳地址为数据包到达目标网络时需要通过的下一个路由器的地址;出接口为数据包离开当前路由器的网络接口。
Linux路由表详解及route命令详解
Linux路由表详解及route命令详解Linux 内核的路由表通过route命令查看 Linux 内核的路由表:[root@VM_139_74_centos ~]# routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Ifacedefault gateway 0.0.0.0 UG 0 0 0 eth010.0.0.10 10.139.128.1 255.255.255.255 UGH 0 0 0 eth010.139.128.0 0.0.0.0 255.255.224.0 U 0 0 0 eth0link-local 0.0.0.0 255.255.0.0 U 1002 0 0 eth0172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-0ab63c131848172.19.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-bccbfb788da0172.20.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-7485db25f958[root@VM_139_74_centos ~]# route -nKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface0.0.0.0 10.139.128.1 0.0.0.0 UG 0 0 0 eth010.0.0.10 10.139.128.1 255.255.255.255 UGH 0 0 0 eth010.139.128.0 0.0.0.0 255.255.224.0 U 0 0 0 eth0169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-0ab63c131848172.19.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-bccbfb788da0172.20.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-7485db25f958各列字段说明:列含义Destination⽬标⽹络或⽬标主机。
红旗linux在配电网络自动化系统应用中的解决方案
红旗linux在配电网络自动化系统应用中的解决方案我国电力资源的飞速发展要求应用先进的科学的自动化的管理和控制方法。
配电网络(简称配网,下同)自动化系统是一个对10KV配电网进行监控的集成系统,它可以对配电线路的故障进行快速诊断、自动隔离,以减少故障停电范围,恢复非故障段供电,提高供电可靠性。
同时,利用记录的各类电网数据,在需要的时候通过数表或曲线的形式外调,可以进行状态估计和负荷预测,分析现有的电网结构是否满足将来发展的需要,为电力公司决策提供辅助依据。
目前,Linux操作系统作为一个开放源码的自由软件已经在世界范围内得到了迅猛的发展。
最近两年里,Linux在国内进展的势头十分强劲。
在服务器领域拥有广泛的发展前景。
另外由于Linux源代码开放、性能稳定、内核可定制、完善的网络支持等与生俱来的优点,使Linux成为许多厂家在嵌入式系统和服务器系统上的首选。
北京富卓电子科技股份有限公司在多年从事配网自动化研发和工程实施的基础上,与北京中科红旗软件技术有限公司合作推出了基于LINUX的站控终端设备(STU)和配网服务器。
站控终端是配电自动化系统的重要组成部分。
它可以直接对FTU、TTU等基本监控单元进行控制、数据采集以及故障定位、隔离、能量转带,并且设备与配电自动化主站通信,提供配电系统运行控制及管理所需的数据,执行主站给出的对配电设备的控制调节指令;另一方面,它也可以直接采集一次设备(馈线自动化开关、变电站出口断路器等)的实时数据并对它们进行智能控制。
北京富卓电子科技股份有限公司与北京中科红旗软件技术有限公司合作研制的站控终端(STU)有两种型号,一种用于变电站(型号暂名PFT1-C2N),另一种用于开闭所(型号暂名PKT1-C2N)。
它们均采用目前最先进的实时系统软硬件技术,基于工业级PC总线结构及目前国际上流行的嵌入式实时操作系统软件设计,达到了目前国内同行业产品先进水平,已在多个用户现场实施并获得了用户的高度评价。
linux下路由表详解
linux下路由表详解主机想要发送数据的时候,参考的对象就是路由表。
如果两个不同网段的主机想要发送数据,经过的具体的经过:1.查询IP数据包的目标IP地址,主机会查阅Ip数据包报头的目标IP地址。
2.查询是否存在与本机所在的网络路由表中PC01会分析自己的路由表,当发现目标IP与主机IP的NET_ID相同时,也就是在同一网段时,PC01会直接通过局域网功能,把数据直接传递给目的地的主机。
3。
查询默认路由如果两台机器不在同一网段时,PC01会分析路由表中是否有其他符合的路由设置值,如果没有的话,直接把该IP数据包送到默认路由器(也就是默认网关)4.送出数据包到默认网关之后,后面的任务交给路由器来做。
路由器收到这个数据包之后,会分析自己的路由表信息,继续传输到目的地主机上面。
路由器的功能:在不同网段之间传递数据包,并且管理路由。
路由表具体:Destination:目的地的网络,第一行是192.168.3.0,就是一个网络,也就是192.168.3.0/24最后一栏是:要去往这个网段需要使用哪一个网络接口。
也就是eth0这张网卡如果我们传送的数据包在路由规则里面的192.168.3.0/24或者169.254.0.0/24,因为gateway是0.0.0.0,所以就会以后面的网络接口来传出去,因为是在局域网中,不需要通过gateway 。
如果不在路由规则里,就会把数据传送到默认的网关里。
默认网关负责所有非本网络内的数据包的传送。
linux下的路由表是由小网络排列到大网络的,例如上面的路由表中,路由是由192.168.3.0/24-->169.254.0.0/16-->0.0.0.0(默认路由)。
主机的网络数据包需要发送时,会查阅上述的三个路由规则来了解如何把数据包发送出去。
为何一共有三个路由?1.依据网络接口产生的IP而存在的路由有192.168.3.0/24这个路由,是因为机器上有192.168.3.244这个IP地址2.手动或者默认路由可以使用route命令手动添加路由,但是添加路由必须是你的网卡可以直接Ping 通才可以。
linux路由表功能解析
linux路由表功能解析linux 路由表功能解析分类:网络2013-11-16 18:23 1268人阅读评论(0) 收藏举报linux 路由表功能解析本文,简单描述一下路由的作用.简单来说,路由器就是一个公交站台,公交站台上面有很多路公交.每条线路公交车又有很多站台(路由器),你就会选择最近的一条公交出行方案,当然啦,站牌上面的路线是会经常更新,更新的事,有当地部门更新.这就是路由.一台电脑主机有路由表,路由器也有路由表,一般来说,一台主机电脑如果只有一个网卡的话,应该会有最少两条路由信息,一条是公网路由,一条是局域网路由(它是不会经过路由器的路由表的,因为它走的是链路层,所以可以解析我们在局域网内传数据,速度是很快的).测试环境:主机(linux): ip:192.168.168.1.119 netmask:255.255.0.0 另一台主机(xp): ip:192.168.1.133 netmask:255.255.0.0网关: ip:192.168.0.3 netmask: 255.255.248.0一, 我们可以查看一下路由表.(route命令)[user:dvr_linux] routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Ifacedefault 192.168.0.3 0.0.0.0 UG 0 0 0 eth0 //公网路由信息 //U – Up, G – Gateway, H – Host192.168.0.0 * 255.255.0.0 U 0 0 0 eth0 //局域网路由信息.[user:dvr_linux]Flags 可能出现的标志有:U (route is up) 路由正常H (target is a host) 主机路由G (use gateway) 使用网关的间接路由R (reinstate route for dynamic routing) 为动态选路恢复路由D (dynamically installed by daemon or redirect) 该路由由选路进程或重定向动态创建M (modified from routing daemon or rederict) 该路由已由选路进程或重定向修改! (reject route) 阻塞路由1.1 测试公网路由(切换到root用户下):[root:dvr_linux] route //打印路由表Kernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Ifacedefault 192.168.0.3 0.0.0.0 UG 0 0 0 eth0192.168.0.0 * 255.255.0.0 U 0 0 0 eth0 [root:dvr_linux] ping 8.8.8.8 // 8.8.8.8是google公司的dns.PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.64 bytes from 8.8.8.8: icmp_req=2 ttl=48 time=10.4 ms64 bytes from 8.8.8.8: icmp_req=3 ttl=48 time=10.0 ms //正常^C--- 8.8.8.8 ping statistics ---3 packets transmitted, 2 received, 33% packet loss, time 2013msrtt min/avg/max/mdev = 10.024/10.222/10.421/0.222 ms[root:dvr_linux] route del default dev eth0 //删除默认路由,也就公网路由,因为有网关.[root:dvr_linux] routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface192.168.0.0 * 255.255.0.0 U 0 0 0 eth0 [root:dvr_linux] ping 8.8.8.8connect: Network is unreachable //ping 不通,没找到路由信息.数据包出不去.[root:dvr_linux] route add default dev eth0 //增加默认路由,没加网关.[root:dvr_linux] routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Ifacedefault * 0.0.0.0 U 0 0 0 eth0192.168.0.0 * 255.255.0.0 U 0 0 0 eth0 [root:dvr_linux] ping 8.8.8.8PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.From 192.168.1.119 icmp_seq=1 Destination Host Unreachable //ping 不通,找到路由信息.但是找不到去8.8.8.8胡线路,数据包出不去.From 192.168.1.119 icmp_seq=2 Destination Host UnreachableFrom 192.168.1.119 icmp_seq=3 Destination Host Unreachable^C--- 8.8.8.8 ping statistics ---5 packets transmitted, 0 received, +3 errors, 100% packet loss, time 4010mspipe 3[root:dvr_linux] route del default dev eth0[root:dvr_linux] routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface192.168.0.0 * 255.255.0.0 U 0 0 0 eth0 [root:dvr_linux] route add default gw 192.168.0.3 dev eth0 [root:dvr_linux] routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Ifacedefault 192.168.0.3 0.0.0.0 UG 0 0 0 eth0192.168.0.0 * 255.255.0.0 U 0 0 0 eth0 [root:dvr_linux] ping 8.8.8.8PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.64 bytes from 8.8.8.8: icmp_req=1 ttl=48 time=11.0 ms //重新添加带网关的路由信息后,又能ping 通了.64 bytes from 8.8.8.8: icmp_req=3 ttl=48 time=10.0 ms64 bytes from 8.8.8.8: icmp_req=4 ttl=48 time=10.3 ms^C--- 8.8.8.8 ping statistics ---4 packets transmitted, 3 received, 25% packet loss, time 3015msrtt min/avg/max/mdev = 10.037/10.496/11.071/0.445 ms[root:dvr_linux]1.2 测试局域网路由(切换到root用户下):[root:dvr_linux] routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Ifacedefault 192.168.0.3 0.0.0.0 UG 0 0 0 eth0192.168.0.0 * 255.255.0.0 U 0 0 0 eth0 [root:dvr_linux] ping 192.168.1.133PING 192.168.1.133 (192.168.1.133) 56(84) bytes of data.64 bytes from 192.168.1.133: icmp_req=1 ttl=64 time=2.13 ms64 bytes from 192.168.1.133: icmp_req=2 ttl=64 time=0.450 ms //正常通过.^C--- 192.168.1.133 ping statistics ---2 packets transmitted, 2 received, 0% packet loss, time 1003msrtt min/avg/max/mdev = 0.450/1.290/2.131/0.841 ms[root:dvr_linux] route del -net 192.168.0.0/16 deveth0 //删除局域网路由[root:dvr_linux] routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Ifacedefault 192.168.0.3 0.0.0.0 UG 0 0 0 eth0[root:dvr_linux] ping 192.168.1.133PING 192.168.1.133 (192.168.1.133) 56(84) bytes of data.64 bytes from 192.168.1.133: icmp_req=1 ttl=64 time=5.06 msFrom 192.168.0.3: icmp_seq=1 Redirect Host(New nexthop: 192.168.1.133) //数据包通过了默认路由信息发到了路由器,再查路由器的路由表找到了192.168.1.133的路由.再由网关发回来给192.168.1.133了.64 bytes from 192.168.1.133: icmp_req=2 ttl=64 time=0.477 ms64 bytes from 192.168.1.133: icmp_req=3 ttl=64 time=0.302 ms64 bytes from 192.168.1.133: icmp_req=4 ttl=64 time=0.285 ms64 bytes from 192.168.1.133: icmp_req=5 ttl=64 time=0.478 ms64 bytes from 192.168.1.133: icmp_req=6 ttl=64 time=0.408 ms^C--- 192.168.1.133 ping statistics ---6 packets transmitted, 6 received, 0% packet loss, time 5002msrtt min/avg/max/mdev = 0.285/1.169/5.066/1.744 ms[root:dvr_linux] routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Ifacedefault 192.168.0.3 0.0.0.0 UG 0 0 0 eth0[root:dvr_linux] route del default eth0 //把默认路由都删掉的话,这就完全找不到路由信息了,也就是没网络了.[root:dvr_linux] routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface[root:dvr_linux] ping 192.168.1.133connect: Network is unreachable[root:dvr_linux]在这个时候,192.168.1.133的xp主机去ping 192.168.1.119的话.也就ping 不通的.C:\Documents and Settings\Administrator>ping 192.168.1.119 -tPinging 192.168.1.119 with 32 bytes of data:Request timed out.Request timed out.Request timed out.Request timed out.Request timed out.Request timed out.Request timed out.Request timed out.Request timed out.Request timed out.Request timed out.Request timed out.Request timed out.Request timed out.Request timed out.[root:dvr_linux] service networking restart //重启一下网络.[warn] Running /etc/init.d/networking restart is deprecated because it may not re-enable some interfaces ... (warning).[....] Reconfiguring network interfaces...RTNETLINK answers: No such processdone.[root:dvr_linux][root:dvr_linux] routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Ifacedefault 192.168.0.3 0.0.0.0 UG 0 0 0 eth0192.168.0.0 * 255.255.0.0 U 0 0 0 eth0 [root:dvr_linux]在这个时候,192.168.1.133的xp主机去ping 192.168.1.119的话.网络恢复了.C:\Documents and Settings\Administrator>ping 192.168.1.119 -tPinging 192.168.1.119 with 32 bytes of data:Request timed out.Request timed out.Request timed out.Request timed out.Reply from 192.168.1.119: bytes=32 time=2ms TTL=64 Reply from 192.168.1.119: bytes=32 time<1ms TTL=64 Reply from 192.168.1.119: bytes=32 time<1ms TTL=64 Reply from 192.168.1.119: bytes=32 time<1ms TTL=64 Reply from 192.168.1.119: bytes=32 time<1ms TTL=64 Reply from 192.168.1.119: bytes=32 time<1ms TTL=64 Reply from 192.168.1.119: bytes=32 time=6ms TTL=63 Reply from 192.168.1.119: bytes=32 time<1ms TTL=64 Reply from 192.168.1.119: bytes=32 time<1ms TTL=64 Reply from 192.168.1.119: bytes=32 time<1ms TTL=64。
linux 路由表功能解析
linux 路由表功能解析linux 路由表功能解析分类:网络2013-11-16 18:23 1268人阅读评论(0) 收藏举报网络局域网路由器linux 路由表功能解析本文,简单描述一下路由的作用.简单来说,路由器就是一个公交站台,公交站台上面有很多路公交.每条线路公交车又有很多站台(路由器),你就会选择最近的一条公交出行方案,当然啦,站牌上面的路线是会经常更新,更新的事,有当地部门更新.这就是路由.一台电脑主机有路由表,路由器也有路由表,一般来说,一台主机电脑如果只有一个网卡的话,应该会有最少两条路由信息,一条是公网路由,一条是局域网路由(它是不会经过路由器的路由表的,因为它走的是链路层,所以可以解析我们在局域网内传数据,速度是很快的). 测试环境:主机(linux):ip:192.168.168.1.119 netmask:255.255.0.0另一台主机(xp): ip:192.168.1.133 netmask:255.255.0.0 网关: ip:192.168.0.3 netmask: 255.255.248.0 一, 我们可以查看一下路由表.(route 命令)[user:dvr_linux] routeKernel IP routing tableDestination Gateway GenmaskFlags Metric Ref Use Ifacedefault 192.168.0.3 0.0.0.0 UG0 0 0 eth0 //公网路由信息//U – Up, G – Gateway, H –Host192.168.0.0 * 255.255.0.0U 0 0 0 eth0 //局域网路由信息.[user:dvr_linux]Flags 可能出现的标志有:U (route is up) 路由正常H (target is a host) 主机路由G (use gateway) 使用网关的间接路由R (reinstate route for dynamic routing) 为动态选路恢复路由D (dynamically installed by daemon or redirect) 该路由由选路进程或重定向动态创建M (modified from routing daemon or rederict) 该路由已由选路进程或重定向修改! (reject route) 阻塞路由1.1 测试公网路由(切换到root用户下):[root:dvr_linux] route //打印路由表Kernel IP routing tableDestination Gateway GenmaskFlags Metric Ref Use Ifacedefault 192.168.0.3 0.0.0.0 UG0 0 0 eth0192.168.0.0 * 255.255.0.0 U0 0 0 eth0[root:dvr_linux] ping 8.8.8.8 // 8.8.8.8是google 公司的dns.PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.64 bytes from 8.8.8.8: icmp_req=2 ttl=48 time=10.4 ms 64 bytes from 8.8.8.8: icmp_req=3 ttl=48 time=10.0 ms//正常^C--- 8.8.8.8 ping statistics ---3 packets transmitted, 2 received, 33% packet loss, time 2013msrtt min/avg/max/mdev = 10.024/10.222/10.421/0.222 ms [root:dvr_linux] route del default dev eth0 //删除默认路由,也就公网路由,因为有网关.[root:dvr_linux] routeKernel IP routing tableDestination Gateway GenmaskFlags Metric Ref Use Iface192.168.0.0 * 255.255.0.0 U0 0 0 eth0[root:dvr_linux] ping 8.8.8.8connect: Network is unreachable //ping 不通,没找到路由信息.数据包出不去.[root:dvr_linux] route add default dev eth0 //增加默认路由,没加网关.[root:dvr_linux] routeKernel IP routing tableDestination Gateway GenmaskFlags Metric Ref Use Ifacedefault * 0.0.0.0 U0 0 0 eth0192.168.0.0 * 255.255.0.0 U0 0 0 eth0[root:dvr_linux] ping 8.8.8.8PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.From 192.168.1.119 icmp_seq=1 Destination Host Unreachable //ping 不通,找到路由信息.但是找不到去8.8.8.8胡线路,数据包出不去.From 192.168.1.119 icmp_seq=2 Destination Host UnreachableFrom 192.168.1.119 icmp_seq=3 Destination HostUnreachable^C--- 8.8.8.8 ping statistics ---5 packets transmitted, 0 received, +3 errors, 100% packet loss, time 4010mspipe 3[root:dvr_linux] route del default dev eth0[root:dvr_linux] routeKernel IP routing tableDestination Gateway GenmaskFlags Metric Ref Use Iface192.168.0.0 * 255.255.0.0 U0 0 0 eth0[root:dvr_linux] route add default gw 192.168.0.3 dev eth0 [root:dvr_linux] routeKernel IP routing tableDestination Gateway GenmaskFlags Metric Ref Use Ifacedefault 192.168.0.3 0.0.0.0 UG0 0 0 eth0192.168.0.0 * 255.255.0.0 U0 0 0 eth0[root:dvr_linux] ping 8.8.8.8PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.64 bytes from 8.8.8.8: icmp_req=1 ttl=48 time=11.0 ms//重新添加带网关的路由信息后,又能ping 通了.64 bytes from 8.8.8.8: icmp_req=3 ttl=48 time=10.0 ms64 bytes from 8.8.8.8: icmp_req=4 ttl=48 time=10.3 ms^C--- 8.8.8.8 ping statistics ---4 packets transmitted, 3 received, 25% packet loss, time 3015msrtt min/avg/max/mdev = 10.037/10.496/11.071/0.445 ms [root:dvr_linux] 1.2 测试局域网路由(切换到root用户下):[root:dvr_linux] routeKernel IP routing tableDestination Gateway GenmaskFlags Metric Ref Use Ifacedefault 192.168.0.3 0.0.0.0 UG0 0 0 eth0192.168.0.0 * 255.255.0.0 U0 0 0 eth0[root:dvr_linux] ping 192.168.1.133PING 192.168.1.133 (192.168.1.133) 56(84) bytes of data.64 bytes from 192.168.1.133: icmp_req=1 ttl=64 time=2.13 ms64 bytes from 192.168.1.133: icmp_req=2 ttl=64time=0.450 ms //正常通过.^C--- 192.168.1.133 ping statistics ---2 packets transmitted, 2 received, 0% packet loss, time 1003msrtt min/avg/max/mdev = 0.450/1.290/2.131/0.841 ms [root:dvr_linux] route del -net 192.168.0.0/16 dev eth0//删除局域网路由[root:dvr_linux] routeKernel IP routing tableDestination Gateway GenmaskFlags Metric Ref Use Ifacedefault 192.168.0.3 0.0.0.0 UG0 0 0 eth0[root:dvr_linux] ping 192.168.1.133PING 192.168.1.133 (192.168.1.133) 56(84) bytes of data.64 bytes from 192.168.1.133: icmp_req=1 ttl=64 time=5.06 msFrom 192.168.0.3: icmp_seq=1 Redirect Host(Newnexthop: 192.168.1.133) //数据包通过了默认路由信息发到了路由器,再查路由器的路由表找到了192.168.1.133的路由.再由网关发回来给192.168.1.133了.64 bytes from 192.168.1.133: icmp_req=2 ttl=64time=0.477 ms64 bytes from 192.168.1.133: icmp_req=3 ttl=64time=0.302 ms64 bytes from 192.168.1.133: icmp_req=4 ttl=64time=0.285 ms64 bytes from 192.168.1.133: icmp_req=5 ttl=64time=0.478 ms64 bytes from 192.168.1.133: icmp_req=6 ttl=64time=0.408 ms^C--- 192.168.1.133 ping statistics ---6 packets transmitted, 6 received, 0% packet loss, time 5002msrtt min/avg/max/mdev = 0.285/1.169/5.066/1.744 ms [root:dvr_linux] routeKernel IP routing tableDestination Gateway GenmaskFlags Metric Ref Use Ifacedefault 192.168.0.3 0.0.0.0 UG0 0 0 eth0[root:dvr_linux] route del default eth0//把默认路由都删掉的话,这就完全找不到路由信息了,也就是没网络了.[root:dvr_linux] routeKernel IP routing tableDestination Gateway GenmaskFlags Metric Ref Use Iface[root:dvr_linux] ping 192.168.1.133connect: Network is unreachable[root:dvr_linux]在这个时候,192.168.1.133的xp主机去ping 192.168.1.119的话.也就ping 不通的.C:\Documents andSettings\Administrator>ping 192.168.1.119 -tPinging 192.168.1.119 with 32 bytes of data:Request timed out. Request timed out.Request timed out.Request timed out.Request timed out.Request timed out.Request timed out.Request timed out.Request timed out.Request timed out.Request timed out.Request timed out.Request timed out.Request timed out.Request timed out.Request timed out. [root:dvr_linux] service networking restart //重启一下网络.[warn] Running /etc/init.d/networking restart is deprecated because it may not re-enable some interfaces ... (warning). [....] Reconfiguring network interfaces...RTNETLINK answers: No such processdone.[root:dvr_linux][root:dvr_linux] routeKernel IP routing tableDestination Gateway GenmaskFlags Metric Ref Use Ifacedefault 192.168.0.3 0.0.0.0 UG0 0 0 eth0192.168.0.0 * 255.255.0.0 U0 0 0 eth0[root:dvr_linux] 在这个时候,192.168.1.133的xp主机去ping 192.168.1.119的话.网络恢复了.C:\Documents and Settings\Administrator>ping 192.168.1.119 -tPinging 192.168.1.119 with 32 bytes of data:Request timed out. Request timed out.Request timed out.Request timed out.Request timed out.Reply from 192.168.1.119: bytes=32 time=2ms TTL=64 Reply from 192.168.1.119: bytes=32 time<1ms TTL=64 Reply from 192.168.1.119: bytes=32 time<1ms TTL=64 Reply from 192.168.1.119: bytes=32 time<1ms TTL=64 Reply from 192.168.1.119: bytes=32 time<1ms TTL=64 Reply from 192.168.1.119: bytes=32 time<1ms TTL=64 Reply from 192.168.1.119: bytes=32 time=6ms TTL=63 Reply from 192.168.1.119: bytes=32 time<1ms TTL=64 Reply from 192.168.1.119: bytes=32 time<1ms TTL=64 Reply from 192.168.1.119: bytes=32 time<1ms TTL=64。
linux 默认路由 命令-概述说明以及解释
linux 默认路由命令-概述说明以及解释1.引言1.1 概述Linux操作系统是一种开源的操作系统,因其稳定性和安全性而在服务器领域广泛应用。
作为网络通信的基础,路由功能在Linux系统中扮演着重要角色。
默认路由命令是指用于设置系统默认路由的命令,它决定了数据包在网络中的传输路径。
在计算机网络中,路由器负责将数据包从源主机传送到目的主机。
默认路由是当目标主机不在本子网中时,数据包将通过路由器进行转发的默认路径。
文章旨在探讨Linux默认路由命令的概念、作用以及如何配置和使用它们。
通过正确配置默认路由命令,我们可以实现网络中不同子网之间的通信。
默认路由命令在对数据包进行转发时能够快速地判断出最佳的传输路径,确保数据的准确传递和高效性能。
了解如何正确设置和使用这些命令对于网络管理员和系统管理员来说至关重要。
本文将首先介绍Linux默认路由命令的概念和作用,然后详细讲解如何在Linux系统中进行默认路由命令的配置和使用。
此外,我们还将解决Linux默认路由命令的常见问题,并提供相应的解决方案。
通过深入了解和熟练掌握Linux默认路由命令,我们可以更好地管理和维护网络通信。
本文的目的是帮助读者充分理解默认路由命令的重要性,并为其在实际应用中提供指导和建议。
最后,我们将总结Linux默认路由命令的重要性,并展望其未来的发展前景。
同时,我们也将针对默认路由命令的一些局限性提出改进建议,以提高网络通信的效率和可靠性。
1.2 文章结构本文将按照以下结构进行阐述和讨论Linux默认路由命令的相关内容。
1. 引言1.1 概述1.2 文章结构(本节)1.3 目的2. 正文2.1 Linux默认路由命令的概念和作用2.2 Linux默认路由命令的配置和使用方法2.3 Linux默认路由命令的常见问题和解决方案3. 结论3.1 总结Linux默认路由命令的重要性3.2 探讨Linux默认路由命令的发展前景3.3 提出改进Linux默认路由命令的建议在引言部分,我们将提供对Linux默认路由命令的整体概述,包括其定义、作用和重要性。
利用route命令在Linux中查看和管理网络路由表
利用route命令在Linux中查看和管理网络路由表在Linux中,我们可以使用route命令来查看和管理网络路由表。
网络路由表是一张记录了数据包应该如何传输的表格,它告诉操作系统通过哪个网关将数据包发送到目的网络。
在本文中,我们将了解route命令的用法,并介绍如何查看和管理网络路由表。
1. 查看网络路由表要查看当前系统的网络路由表,可以使用以下命令:```route -n```这会显示出目的网络、网关、子网掩码和接口等信息。
其中,目的网络表示数据包的目标网络,网关表示数据包离开本地网络时经过的下一跳设备,子网掩码决定了如何划分网络。
通过接口,我们可以知道数据包将通过哪个网络接口发送出去。
2. 添加路由使用route命令还可以添加自定义的路由。
添加路由的命令格式如下:```sudo route add -net 目标网络/子网掩码网关```其中,目标网络和子网掩码一起决定了要添加的路由的范围,网关是数据包将要通过的下一跳设备。
通过以上命令,我们可以在Linux系统中添加自定义的路由。
3. 删除路由若想删除已存在的路由,可以使用以下命令:```sudo route del -net 目标网络/子网掩码```这会将目标网络/子网掩码对应的路由从系统中删除。
请注意,删除路由需要root权限。
4. 默认路由默认路由是网络路由表中最重要的一条路由,它告诉系统如果找不到其他匹配的路由,应该通过哪个网关发送数据包。
要查看默认路由,可以运行以下命令:```route -n | grep 'UG'```其中,UG表示默认路由的标志。
该命令会返回默认路由的相关信息,包括目的网络、网关和接口等。
5. 修改默认路由如果需要更改默认路由,可以使用以下命令:```sudo route del defaultsudo route add default gw 新网关```第一条命令会删除当前的默认路由,第二条命令会添加新的默认路由。
linux 路由表 配置
linux 路由表配置查看Linux 内核路由表使用下面的route 命令可以查看Linux 内核路由表。
# routeDestination Gateway Genmask Flags Metric Ref Use Iface192.168.0.0 * 255.255.255.0 U 0 0 0 eth0169.254.0.0 * 255.255.0.0 U 0 0 0 eth0default 192.168.0.1 0.0.0.0 UG 0 0 0 eth0route 命令的输出项说明输出项说明Destination 目标网段或者主机Gateway 网关地址,”*” 表示目标是本主机所属的网络,不需要路由Genmask网络掩码主机路由的掩码为255.255.255.255,默认路由的掩码为0.0.0.0掩码255.255.255.255 表明只有精确匹配的目标使用此路由。
掩码0.0.0.0 表示任何目标都可以使用此路由。
当以二进制形式撰写掩码时,1表示重要(必须匹配),而0表示不重要(不需要匹配)。
Flags 标记。
一些可能的标记如下:U —路由是活动的H —目标是一个主机G —路由指向网关R —恢复动态路由产生的表项D —由路由的后台程序动态地安装M —由路由的后台程序修改! —拒绝路由Metric 路由距离,到达指定网络所需的中转数(linux 内核中没有使用)Ref 路由项正在被使用的进程数Use 通过此路由项的分组数Iface 路由项对应的接口网络掩码例如,目标172.16.8.0 的网络掩码为255.255.248.0。
此网络掩码表示前两个八位字节必须精确匹配,第三个八位字节的前五位必须匹配(248=11111000),而最后一个八位字节无关紧要。
第三个八位字节172.16.8.0(即8)等于二进制形式的00001000。
不更改前 5位(以“粗体”显示的屏蔽部分),最多可到15 或二进制形式的00001111。
Linux的路由表详细介绍
Linux的路由表详细介绍Linux的路由表详细介绍⼀在Linux下执⾏route命令[root@localhost backup]# route -nKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface0.0.0.0 192.168.0.1 0.0.0.0 UG 100 0 0 enp0s3192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s3192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0[root@localhost backup]# routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Ifacedefault gateway 0.0.0.0 UG 100 0 0 enp0s3192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s3192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0⼆ route命令详解1、命令语法route [-n]选项与参数:-n:将主机名以IP⽅式显⽰2、查询结果分析Destination :其实就是Network的意思。
Gateway :就是该接⼝的Gateway的IP,若为0.0.0.0,表⽰不需要额外的IP。
Genmask :就是Netmask,与Destination组合成⼀台主机或⽹络。
Flags :共有多个标志可以来表⽰该⽹络或主机代表的意义。
U:代表该路由可⽤。
G:代表需要经过Gateway来帮忙传递。
H:代表该⾏路由为⼀台主机,⽽⾮⼀个⽹络。
Iface :就是interface(接⼝)的意思。
linux 路由表规则
linux 路由表规则Linux路由表规则是网络管理中非常重要的一部分,它决定了数据包在网络中的传输路径。
通过合理配置路由表规则,可以实现网络的高效运行和安全通信。
下面将详细介绍Linux路由表规则的相关内容。
一、什么是Linux路由表规则路由表规则是一组用于决定数据包传输路径的规则,它包含了目的地址、下一跳地址和出接口等信息。
当数据包到达Linux系统时,系统根据路由表规则来选择合适的路径进行转发。
二、Linux路由表规则的基本结构Linux的路由表规则由多个规则项组成,每个规则项包含了一条规则。
每条规则由一系列字段组成,常见的字段包括源地址、目的地址、操作标志、优先级、出接口等。
这些字段的组合形成了一条完整的路由规则。
三、Linux路由表规则的配置方法1. 添加路由规则:可以使用ip命令来添加路由规则,具体命令格式为:ip rule add from 源地址 to 目的地址 table 表编号2. 删除路由规则:可以使用ip命令来删除路由规则,具体命令格式为:ip rule del from 源地址 to 目的地址 table 表编号3. 修改路由规则:可以使用ip命令来修改路由规则,具体命令格式为:ip rule change from 源地址 to 目的地址 table 表编号四、Linux路由表规则的应用场景1. 负载均衡:通过配置路由表规则,可以将流量分发到多个出接口,实现负载均衡。
2. 策略路由:可以根据源地址、目的地址等条件来选择不同的路径进行转发,实现策略路由。
3. 安全防护:可以通过配置路由表规则,将恶意流量引导到特定的处理链,实现安全防护。
五、Linux路由表规则的实际应用在实际应用中,可以根据网络拓扑和需求来配置路由表规则,以实现灵活的网络管理。
可以根据不同的需求来选择合适的路径进行转发,提高网络的性能和安全性。
六、总结Linux路由表规则是网络管理中非常重要的一部分,它决定了数据包在网络中的传输路径。
路由表的结构
路由表的结构路由表的结构学习⽬标(⼀)了解路由器的相关概念和基本知识活动建议:观看本节视频讲解“路由表相关知识”。
⼀、⼦⽹寻径及路由标准的路由表表⽬是⼀个⼆维组(⽬的⽹络地址,下⼀站地址),其中不携带⼦⽹信息,不能满⾜⼦⽹寻径。
引⼊⼦⽹编址以后,路由表的每⼀表⽬中加⼊⼦⽹掩码,于是路由表表⽬变为三维组:⼦⽹掩码、⽬的⽹络地址、下⼀站地址。
表1 路由表结构及使⽤⽬的地址掩码下⼀跳地址0.0.0.00.0.0.010.0.0.1100.0.0.0255.255.255.020.0.0.1200.0.0.0255.255.255.030.0.0.1⼆、路由算法、路由协议、寻径路由器依据路由表来为报⽂寻径,路由表由路由协议建⽴和维护。
路由协议的设计则是依据某种路由算法。
1.什么是路由图1 什么是路由路由器提供了将异构⽹互联的机制,实现将⼀个数据包从⼀个⽹络发送到另⼀个⽹络。
路由就是指导IP数据包发送的路径信息。
2.通过路由表进⾏选路图2 查看路由表路由器转发数据包的关键是路由表。
每个路由器中都保存着⼀张路由表,表中每条路由项都指明数据包到某⼦⽹或某主机应通过路由器的哪个物理端⼝发送,然后就可到达该路径的下⼀个路由器,或者不再经过别的路由器⽽传送到直接相连的⽹络中的⽬的主机。
路由表中包含了下列关键项:⽬的地址(Destination):⽤来标识IP包的⽬的地址或⽬的⽹络。
⽹络掩码(Mask)、输出接⼝(Interface)、下⼀跳IP地址(Nexthop)。
3.路由表中路由的来源在路由表中有⼀个Protocol字段,指明了路由的来源,即路由是如何⽣成的。
路由的来源主要有3 种:(1)链路层协议发现的路由(Direct)它的特点是开销⼩,配置简单,⽆需⼈⼯维护,只能发现本接⼝所属⽹段拓扑的路由。
(2)⼿⼯配置的静态路由(Static)静态路由是⼀种特殊的路由,它由管理员⼿⼯配置⽽成。
通过静态路由的配置可建⽴⼀个互通的⽹络,但这种配置问题在于:当⼀个⽹络故障发⽣后,静态路由不会⾃动修正,必须有管理员的介⼊。
Linux路由实现机制分析
37计算机应用Linux 路由实现机制分析西安电子科技大学机电工程学院 周 帆 李红艳摘要 通过对Linux2.4.20版内核路由模块代码的分析和研究,详尽地阐述了Linux 路由机制的实现思想和技术特点,对于更好地使用Linux 的路由功能和在Linux 路由上进行二次开发都具有实际的指导意义。
关键词 Linux IP 路由 1 引言Linux 软件包中包含了简单的路由模块,主要包含了路由表和路由规则的建立以及路由查找等功能。
Linux 的路由模块基本实现了RFC1812中规定的路由处理功能。
系统启动时建立路由表并根据配置文件设置路由规则,当系统接收到一个需要转发的数据包时,内核启动路由查找算法并根据特定的路由规则在路由表中查找合适的路由信息,然后将数据包在此路由上发送出去。
开放的Linux 源代码为我们深入地了解路由模块的运行机制提供了良好的机会。
我们将根据Linux 内核网络部分的源码,详细地讨论其路由机制的各个方面。
2 路由实现中涉及的主要数据结构路由中主要的数据结构就是路由表的结构。
Linux 内核中保存着三种路由表:邻居表(neighbor table )、路由高速缓存表(Route cache )及转发信息表(Forwarding information base ,FIB )。
2.1 邻居表邻居表中保存着物理上与本机直接相连的主机信息,其表项是动态的——在使用时才建立,一段时间不使用的话,对应的表项将被删除。
如果本机一直没有和临节点进行数据交换,那么邻居表就没有任何表项;反之,如果本机最近和所有与它物理相连的主机都进行过通信,那么在邻居表中对应每个物理相连的主机都有相应的表项。
邻居表是由neigh_table (include/net/neighbour.h )结构的链表来表示,以邻居(neighbour ,定义于include/net/neighbour.h )结构为节点,其结构关系图如图1。
linux下的网络配置工具——iprouteLinux-电脑资料
linux下的网络配置工具——iprouteLinux-电脑资料概述:本文介绍全新的 linux 下的网络配置工具——iproute 概述:本文介绍全新的linux下的网络配置工具——iproute 一、简介很多UNIX 及类UNIX操作系统都提供了arp、ifconfig、route等网络配置工具,。
但是在linux 2.2及其以上的内核中使用这些工具时,常常概述:本文介绍全新的linux下的网络配置工具——iproute概述:本文介绍全新的linux下的网络配置工具——iproute一、简介很多UNIX及类UNIX操作系统都提供了arp、ifconfig、route 等网络配置工具。
但是在linux 2.2及其以上的内核中使用这些工具时,常常会发生一些奇怪的现象。
这是因为linux 2.2及其以上的内核中,网络子系统已经完全被重新设计过,重新设计过的网络子系统具有更高的性能和稳定性,但是也造成了与一些老的网络管理工具的不兼容。
比如GRE通道已经成为了路由的一部分,因此我们需要完全不同的工具来配置我们的网络。
于是,全新的网络配置工具——iproute诞生了。
二、安装一般高版本的linux发行版本都包含了iproute,比如RedHat 7.1中自带了iproute-2.2.4.rpm安装包,可以使用简单的rpm –ivh iproute-2.2.4.rpm进行安装。
安装完成后,其目录结构如下所示:/etc/iproute2/etc/iproute2/rt_dsfield/etc/iproute2/rt_protos/etc/iproute2/rt_re alm s/etc/iproute2/rt_scopes/etc/iproute2/rt_tables/sbin/ifcfg/sbin/ip/sbin/rtmon/sbin/tc/usr/sbin/rta clearcase/" target="_blank" >cct/usr/share/doc/iproute-2.2.4/usr/share/doc/iproute-2.2.4//usr/share/doc/iproute-2.2.4/README.iproute2+tc/usr/share/doc/iproute-2.2.4/RELNOTES……其中:ip 命令是主要的配置命令;tc 命令是用来进行流量控制的命令(traffic control);rtmon 命令是用来产生链接、地址、路由信息记录文件的命令;rtacct 命令用来查看数据包流量状态的命令;ifcfg 类似以前的ifconfig命令,进行网络地址管理,电脑资料《linux下的网络配置工具——iprouteLinux》(https://www.)。
Linux网络体系架构和网卡驱动设计
Linux网络体系架构1、Linux的协议栈层次2、Linux的网络子系统架构Linux的协议栈层次Linux的优点之一在于它丰富而稳定的网络协议栈。
其范围从协议无关层(例如通用socket层接口或设备层)到各种具体的网络协议实现。
对于网络的理论介绍一般采用OSI(Open System Interconnection)模型,但是Linux中网络栈的介绍一般分为四层Internet模型。
网络接口层—>网际层—>传输层—>应用层网络接口层: 把数据链路层和物理层合并在一起,提供访问物理设备的驱动程序,对应的网络协议主要是以太网协议。
网际层协议管理离散的计算机间的数据传输,如IP协议为用户和远程计算机提供了信息包的传输方法,确保信息包能正确地到达目的机器。
重要的网络层协议包括:ARP(地址解析协议)、ICMP(Internet 控制消息协议)和IP(网际协议)传输层的功能包括:格式化信息流、提供可靠传输。
传输层包括TCP和UDP应用层的主要任务是服务于应用,如利用FTP传输一个文件。
常见的应用层协议有:HTTP、FTP、Telnet等。
Linux服务器的配置文档主要针对应用层中的协议。
Linux的网络子系统架构从上往下:System call interface—>Protocol agnostic interface—>Network protocols—>Device agnostic interface—>Device driversSystem call interface为用户空间的应用程序提供了一种访问内核网络子系统的方法—socket系统调用。
Protocol agnostic interface提供了一种通用方法来使用传输层协议。
实现一组通用函数来访问各种不同的协议,通过socket实现。
Linux中的socket使用struct sock来描述,这个结构包含了特定socket所需要的所有状态信息,还包括socket所使用的特定协议和在socket上可以执行的一些操作。
16-LINUX的路由器
LINUX的路由器一、路由概述网络互联中的路由器工作在OSI的网络层路,根据数据包中的网络地址,对其进行转发或查找一条合适的路由。
路由器具有协议转换、路由选择、分段和组装等功能。
路由器能否正确地转发数据包,取决于路由表。
路由表可以由系统管理员手工设置,也可以由系统动态生成。
因此,有两种类型的路由表:静态路由表和动态路由表。
1、静态路由表一般是在系统安装时,系统管理员根据网络的配置情况,预先设置好的路由表。
如果网络结构发生变化,则需要系统管理员手工修改相应的表项。
2、动态路由表动态路由表是指路由器根据网络系统的实际情况,自动进行调整的路由表。
这种功能是由路由选择协议提供,能够自动学习和记忆网络的运行情况,并且可以自动计算数据包传输时所经过的最佳路径。
路由选择是路由器最重要的功能,依靠查找路由表实现。
每个路由器都保存一张路由表,当有数据包到来时,就根据其目的IP地址查找路由表,查找一条合适的路径。
路由选择协议是一种网络层协议,分为IGP(内部网关协议)和EGP(外部网关协议)。
IGP包含RIP(路由信息协议)和OSPF(开放最短路径优先)。
硬件路由器是专门用于路由的设备。
软件路由器是安装了两个以上网络接口的服务器,又称多宿主主机或多宿主路由器。
软件路由器既可以实现路由的功能,又可以提供其他网络服务。
下面将介绍Linux主机路由器的实现。
二、静态路由设置在Linux系统中,静态路由功能是由系统内核实现的,可以使用route命令进行配置。
实例: 设置静态路由。
本实例用到的网络拓扑结构如图所示,用一个路由器连接两个网络,即192.168.1.0/24网络和192.168.10.0/24网络;IP地址的分配如图所示。
第1步:R中,在终端窗口依次执行图2中的命令,为路由器的两个网络接口绑定IP地址。
图1 网络拓扑结构图(一)图2 配置路由器网络接口第2步:执行route命令,查看内核路由表,如图3所示。
路由表各字段含义见下表。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Linux路由表得结构与算法分析路由就是网络栈得核心部分。
路由表本身得设计很大情度上影响着路由得性能,并且好得设计能减少系统资源得消耗,这两方面尤其体现在路由表得查找上。
目前得内核路由存在两种查找算法,一种为HASH算法,另一种为LC—tr ie算法,前者就是目前内核使用得缺省算法,而后者更适用在超大路由表得情况,它在这种情况提高查找效率得同时,大大地增加了算法本身得复杂性与内存得消耗。
综上,这两种算法各有其适用得场合,本文分析了基于2.6。
18内核路由部分得代码在HASH算法上路由表结构得实现,并且在文章最后给出了一个简单得策略路由得应用。
一、路由表得结构为了支持策略路由,Linux使用了多个路由表而不就是一个,即使不使用策略路由,Linux也使用了两个路由表,一个用于上传给本地上层协议,另一个则用于转发。
Li nux使用多个路由表而不就是一个,使不同策略得路由存放在不同得表中,有效地被免了查找庞大得路由表,在一定情度上提高了查找了效率。
ﻫ路由表本身不就是由一个结构表示,而就是由多个结构组合而成。
路由表可以说就是一个分层得结构组合。
在第一层,它先将所有得路由根据子网掩码(netmask)得长度(0~32)分成33个部分(str uct fn_zone),然后在同一子网掩码(同一层)中,再根据子网得不同(如10、1、1、0/24与10、1、2、0/24),划分为第二层(struct fib_node),在同一子网中,有可能由于TOS等属性得不同而使用不同得路由,这就就是第三层(struct fib_alias),第三层结构表示一个路由表项,而每个路由表项又包括一个相应得参数,如协议,下一跳路由地址等等,这就就是第四层(struct fib_info)。
分层得好处就是显而易见得,它使路由表得更加优化,逻辑上也更加清淅,并且使数据可以共享(如struct fib_info),从而减少了数据得冗余。
图1为一个路由表得总体结构。
自上而下由左向右瞧,它首先为一个fib_table结构指针得数组,它被定义为:+图1(引自[1])ﻫ这个结构中包括这个表得ID,以及主要得一些用于操作路由表得函数指针,这里我们只关心最后一域――tb_dat a[0],这就是一个零长得数组,它在内核中也较为常见,它表示指向这个结构得末尾。
由图1可以瞧到,这个结构得末尾接着便就是一个struct fn_hash结构,这个结构就是随fib_table结构一起分配得,所以fib_table-〉tb_data 就就是fn_hash。
这个fn_zone域就就是我们上面提前得结构,用于将路由根据子网掩码得长度分开成33个部分,其中fn_zones[0]用于默认网关。
而fn_zone_list域就就是将正在使用得fn_zone链成一个链表.接着再深入到struct fn_zone结构中:这个结构中有两个域比较重要,一个为fz_hash域,它指向一个HASH表得表头,这个HASH得长度就是fz_divisor。
并且这个HASH表得长度就是可变得,当表长达到一个限定值时,将重建这个HASH表,被免出现HASH冲突表过长造成查找效率降低。
为了提高查找得效率,内核使用了大量得HASH表,而路由表就就是一个例子.在图1中可以瞧到,等长子网掩码得路由存放在同一个fn_zone中,而根据到不同子网(f ib_node)得路由键值(fn_key),将它HASH到相应得链表中。
ﻫ这个键值其实就就是这个子网值了(如10。
1。
1、0/24,则子网值为10、1、1),得到这个键值通过n =fn_hash()函数HASH之后就就是这个子网对应得HASH值,然后就可以插入到相应得fz_hash[n]链表中了。
冲突得fib_node由 fn_hash域相链,而fn_alias则就是指向到达这个子网得路由了.当到达这个子网得路由由于TOS等属性得不同可存在着多个路由时,它们就通过fib_alias中fa_list域将这些路由表项链成一个链表。
这个结构中得另一个域fa_info指向一个fib_info结构,这个才就是存放真正重要路由信息得结构。
ﻫ这个结构里面就是一个用于路由得标志与属性,其中最重要得一个域就是fib_nh[0], 在这里,我们再次瞧到了零长数组得应用,它就是通过零长来实现变长结构得功能得。
因为,我们需要一个定长得fib_info结构,但就是在这个结构末尾,我们需要得fib_nh结构得个数就是不确定得,它在运行时确定。
这样,我们就可以通过这种结构组成,在运行时为fib_info分配空间得时候,同时在其末尾分配所需得若干个fib_nh结构数组,并且这个结构数组可以通过fib_info->fib_nh[n]来访问,在完成fib_info得分配后将fib_nhs域置为这个数组得长度。
另一方面,fib_info也就是HASH表得一个应用,结构中存在着两个域,分别就是 fib_hash 与fib_lhas h,它们都用于HASH链表。
这个结构在完成分配后,将被用fib_hash域链入fib_info_hash表中,如果这个路由存在首选源地址,这个fib_info将同时被用fib _lhash链入fib_info_laddrhash表中.这样,就可以根据不同目得实现快速查找了。
ﻫStruct fib_nh也就是一个重要得结构。
它存放着下一跳路由得地址(nh_gw)。
刚刚已经提到,一个路由(fib_alias)可能有多个fib_nh结构,它表示这个路由有多个下一跳地址,即它就是多路径(multipath)得。
下一跳地址得选择也有多种算法,这些算法都就是基于nh_weight, nh_power域得。
nh_hash域则就是用于将nh_ha sh链入HASH表得。
二、路由得查找路由得查找速度直接影响着路由及整个网络栈得性能。
路由得查找当然首先发生在路由缓存中,当在缓存中查找失败时,它再转去路由表中查找,这就是本文所关注得地方。
ﻫ上一节已经详细地描述了路由表得组成。
当一个主要得IP层将要发送或接收到一个IP数据包时,它就要调用路由子系统完成路由得查找工作。
路由表查找就就是根据给定得参数,在某一个路由表中找到合适得下一跳路由得地址.上面已提到过,当一个主机不支持策略路由时,它只使用了两个路由表,一个就是ip_fib_local_table,用于本地,另一个就是ip_fib_main_table,用于接发。
只有在查找ip_fib_local_table表时没有找到匹配得路由(不就是发给本地得)它才会去查找ip_fib_main_t able.当一个主机支持策略路由时,它就有可能存在着多个路由表,因而路由表得选择也就就是查找得一部分。
路由表得选择就是由策略来确定得,而策略则就是由应用(用户)来指定得,如能过ip rule命令:如上,第一条命令创建了基于源地址路由得一条策略,这个策略使用了RT1这个路由表,第二条命令创建了基于数据包入口得一个策略,这个策略使用了RT2这个路由表.当被指定得路由表不存在时,相应得路由表将被创建第二步就就是遍历这个路由表得fn_zone,遍历就是从最长前缀(子网掩码最长)得fn_zone开始得,直到找到或出错为止。
因为最长前缀才就是最匹配得。
假设有如下一个路由表:ﻫ它会先找到第二条路由,然后选择10。
1。
0、1作为下一跳地址。
但就是,如果由第二步定位到得子网(fib_node)有多个路由,如下:到达同一个子网有两个可选得路由,仅凭目得子网无法确定,这时,它就需要更多得信息来确定路由得选择了,这就就是用于查找路由得键值(structflowi)还包括其它信息(如TOS)得原因.这样,它才能定位到对应一个路由得一个fib_alias实例。
而它指向得fib_info就就是路由所需得信息了。
ﻫ最后一步,如果内核被编译成支持多路径(multipath)路由,则fib_info中有多个fin_nh,这样,它还要从这个fib_nh数组中选出最合适得一个fib_nh,作为下一跳路由。
三、路由得插入与删除路由表得插入与删除可以瞧瞧就是路由查找得一个应用,插入与删除得过程本身也包含一个查找得过程,这两个操作都需要检查被插入或被删除得路由表项就是否存在,插入一个已经存在得路由表项要做特殊得处理,而删除一个不存在得路由表项当然会出错。
下面瞧一个路由表插入得例子:这个命令在内核中建立一条新得路由。
它首先查找路由表RT3中得子网掩码长为24得 fn_zone,如果找不到,则创建一个fn_zone.接着,继续查找子网为10.0。
1得fib _node,同样,如果不存在,创建一个fib_node。
然后它会在新建一个fib_info结构,这个结构包含2个fib_nh 结构得数组(因为有两个nexthop),并根据用户空间传递过来得信息初始化这个结构,最后内核再创建一个fib_ali as结构(如果先前已经存在,则出错),并用fib_nh 来创始化相应得域,最后将自己链入 fib_node得链中,这样就完成了路由得插入操作。
路由得删除操作就是插入操作得逆过程,它包含一系列得查找与内存得释放操作,过程比较简单,这里就不再赘述了。
ﻫﻫ四、策略路由得一个简单应用ﻫLinux系统在策略路由开启得时候将使用多个路由表,它不同于其它某些系统,在所有情况下都只使用单个路由表.虽然使用单个路由表也可以实现策略路由,但就是如本文之前所提到得,使用多个路由表可以得到更好得性能,特别在一个大型得路由系统中。
下面只通过简单得情况说明Linux下策略路由得应用。
ﻫ如图2,有如下一个应用需求,其中网关服务器上有三个网络接口。
接口1得IP为 172、16、100、1,子网掩码为255、255、255、0,网关gw1为a、b、c、d,172、16、100、0/24这个网段得主机可以通过这个网关上网;接口2得IP就是172、16、10、1,子网掩码同接口一,网关gw2为e、f、g、h,172、16、10、0/24这个网段得主机可以通过这个网关上网;接口0得IP为192、168、1、1,这个网段得主机由于网络带宽得需求需要通过e、f、g、h这个更快得网关路由出去。
图2ﻫﻫ步骤一:设置各个网络接口得IP,与默认网关:ip addradd 172、16、100、1/24 dev eth1ip route add default via a、b、c、ddev eth1其它接口IP得设置与第一个接口一样,这时,如果没有其它设置,则所有得数据通过这个默认网关路由出去。
ﻫﻫ步骤二:使子网172、16、10、0/24可以通过gw2路由出去ﻫ步骤三:添加一个路由表ﻫ步骤四:使用策略路由使192、168、1、0/24网段得主机可以通过e、f、g、h这个网关上网ﻫ步骤五:刷新路由cache,使新得路由表生效这样就可以实现了以上要求得策略路由了,并且可以通过traceroute工具来检测上面得设置就是否能正常工作。