路由概念
基于第三层地址(IP地址)从一个节点向无连接网络的另一个节点转发分组的过程成为路由。
在IP选路中,我们知道路由表起着比较大的作用,它决定的IP包到底会怎么走。关于IP选路的问题,记得大学时候和舍友们曾经有过激烈讨论和验证,如今还略有印象,真是怀念当时伟大的623宿舍做实验时的生活啊,这么快就一年了。
路由其实就是选择一条数据包传输路径的过程,也就是说主机怎么向它的目的地顺利发送数据的过程。当TCP/IP主机发送IP数据包时,便出现了路由,且当到达IP路由器时还会再次出现。路由器是从一个物理网向另一个物理网发送数据包的装置,路由器通常被称为网关,它承但着分发数据包的任务。对于上例中发送IP数据包的主机和路由器而言,必须决定向哪里转发数据包。在决定路由时,IP层查询位于内存中的路由表,然后根据查询规则,进行IP路由。是不是很抽象?用我的话说吧,也就是下面要讨论的问题。
先说如何选路:
- 当一个主机试图与另一个主机通信时,IP首先决定目的主机是一个内网还是外网,怎么确定?当然使用网络号。
- 如果是是同一内网,那就就是直接发送了,这个最简答不过了。
- 如果目的主机是和发送主机不在同一个内网,也就是在外网了,IP将查询路由表来为外网主机或外网选择一个路由,所以一般情况下有可能为某个外网指定特定的路由,具体问题稍后分析。
- 若未找到明确的路由,此时在路由表中还会有默认网关,也可称为缺省网关,IP用缺省的网关地址将一个数据传送给下一个指定的路由器,所以网关也可能是路由器,也可能只是内网向特定路由器传输数据的网关。
- 在该路由器收到数据后,它再次为远程主机或网络查询路由,若还未找到路由,该数据包将发送到该路由器的缺省网关地址。
每发现一条路由,数据包被转送下一级路由器,称为一次“跳步”,按照同样的方式进行转发,并最终发送至目的主机。若未发现任何一个路由可以接受此次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路由选择主要完成以下这些功能:
- 搜索路由表,寻找能与目的IP地址完全匹配的表目(网络号和主机号都要匹配)。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值)。
- 搜索路由表,寻找能与目的网络号相匹配的表目。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值)。目的网络上的所有主机都可以通过这个表目来处置。例如,一个以太网上的所有主机都是通过这种表目进行寻径的。这种搜索网络的匹配方法必须考虑可能的子网掩码。关于这一点我们在下一节中进行讨论。
- 搜索路由表,寻找标为“默认(default)”的表目。如果找到,则把报文发送给该表目指定的下一站路由器。如果上面这些步骤都没有成功,那么该数据报就不能被传送。如果不能传送的数据报来自本机,那么一般会向生成数据报的应用程序返回一个“主机不可达” 或 “网络不可达”的错误。
完整主机地址匹配在网络号匹配之前执行。只有当它们都失败后才选择默认路由。默认路由,以及下一站路由器发送的ICMP间接报文(如果我们为数据报选择了错误的默认路由),是IP路由选择机制中功能强大的特性。
所谓路由表,指的是路由器或者其他互联网网络设备上存储的表,该表中存有到达特定网络终端的路径,在某些情况下,还有一些与这些路径相关的度量。
TCP/IP及路由基本概念、理论
IP地址的主机号全‘0’表示本网络,全‘1’表示网络上所有主机的广播,这两个IP地址不能作为主机地址,也就是网络节点的地址。
环回接口(Loopback Interface)目的在于使运行在同一台主机上的客户程序和服务器程序通过TCP/IP进行通信。A类网络号127就是为环回接口预留的,惯例情况下,大多数系统把IP地址127.0.0.1分配给这个接口,并且命名为localhost。
联系ISO模型,地址和模型的对应关系应该是:PHY层,对应的地址就是端口,交换机上的Port号;MAC层,对应的地址是MAC地址;IP层,对应的地址是IP地址。在各层上,其实就是查找到正确的地址,将数据包进行正确的转发。
几个路由概念:
- 汇总路由:一个包含路由表中几个更加精准地址的地址。在表现上就是IP地址和子网掩码的合理应用,在路由条目上的表现就是将多个子网合成一个更大的子网(也可能就是主网络)。
- 选择路由:子网掩码为全1,这样可以规定到达某个主机的数据包只允许通过某条路径。
- 浮动静态路由:冗余数据链路
网络互连
- 网桥互连(数据链路层,最常见设备为交换机)
- 路由器互连(IP层,最常见设备为路由器)
路由条目分类
根据来源不同,路由表中的路由条目通常可分为以下三类:
- 直连路由:网络接口发现的路由(链路层协议发现的路由),也称为接口路由(也称为直连路由)。
- 静态路由:由网络管理员手工配置的路由
- 动态路由:路由协议发现的路由
根据路由目的地的不同,可划分为:
- 子网路由:目的地为子网
- 主机路由:目的地为主机
据目的地与该路由器是否直接相连,又可分为:
- 直接路由:目的地所在网络与路由器直接相连
- 间接路由:目的地所在网络与路由器非直接相连
路由条目基本属性
通常,一条路由条目包含如下基本属性:
- 目的网络地址:用于匹配进入路由器的IP报文中的源IP字段的IP子网
- 子网掩码:用于计算源IP地址对应的IP子网
- 下一跳地址:用于指定目的IP属于特定子网的报文所转发的路径的下一跳
- 下一跳硬件接口:与下一跳地址相对应的网络接口
除上述几个基本属性外,为了使得路由表更好的和多种IP路由协议协同工作,路由表通常还提供如下属性:
- 路径类型:动态,静态以及默认路由等
- 协议类型:标识该条目是通过哪种路由协议获得的
- 优先级:当遇到网络ID冲突时选择路由条目的依据
- 路径开销:当前路径的开销度量值
《交换机IPv4路由功能研究报告V1.2.doc》
路由算法分类
距离矢量路由(distance vector routing)算法 :每个路由器维护一张表(即一个矢量),表中列出了当前已知的到每个目标的最佳路径,以及所使用的线路。通过在邻居之间相互交换信息,路由器不断的更新它们内部的表。
链路状态路由(link state routing)算法 :该算法的思想是每一个路由器必须完成下面的5步工作:
- 发现它的邻居节点,并知道其网络地址;
- 测量到各邻居节点的延迟或者开销;
- 构建一个分组,分组中包含所有它刚刚知道的信息;
- 将这个分组发送给所有其它路由器(注意并不是邻居节点路由器);
- 计算到每一个其它路由器的最短路径。