TCP/IP协议——IP协议( 二 )


包含选路信息的路由表中,一般都包含以下这些信息:
目的IP地址:可以是一个主机地址(即全掩码的IP地址,主机号包含非0值,这种称为主机路由),也可以是一个网络地址(即非全掩码的IP地址,主机号为全0,这种称为网络路由)
下一跳路由器的IP地址或直连IP的网络地址:下一跳路由器的IP地址即报文需要转发到的下一个网络接口的IP地址(这个网络接口与当前的路由器直连);而直连IP的网络地址会直接标明该网段IP地址的路由出口,报文直接从该出口转发(前提是该报文的目的IP必须存在,可通过ARP报文探测验证) 。
标志:指明路由的类型,例如路由是直连网络地址还是真正的下一跳地址,路由时OSPF协议计算地址还是BGP协议学习地址等 。
网络接口:为数据报传输指定一个网络接口 。
IP路由选择是逐跳地(hop-by-hop)进行的 。从这个路由表信息可以看出,IP并不知道到达任何目的的完整路径(当然,除了那些与主机直接相连的目的) 。所有的I P路由选择只为数据报传输提供下一站路由器的IP地址 。它假定下一站路由器比发送数据报的主机更接近目的,而且下一站路由器与该主机是直接相连的 。
IP路由选择主要完成以下这些功能:

  1. 搜索路由表,寻找能与目的IP地址完全匹配的表目(网络号和主机号都要匹配) 。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值) 。
  2. 搜索路由表,寻找能与目的网络号相匹配的表目 。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值) 。目的网络上的所有主机都可以通过这个表目来处置 。例如,一个以太网上的所有主机都是通过这种表目进行寻径的 。这种搜索网络的匹配方法必须考虑可能的子网掩码 。关于这一点我们在下一节中进行讨论 。
  3. 搜索路由表,寻找标为“默认(default)”的表目 。如果找到,则把报文发送给该表目指定的下一站路由器 。
如果上面这些步骤都没有成功,那么该数据报就不能被传送 。如果不能传送的数据报来自本机,那么一般会向生成数据报的应用程序返回一个“主机不可达”或“网络不可达”(即IP协议附属ICMP协议报文)的错误 。
图3-2,是我在一个路由器查看路由表的结果:
TCP/IP协议——IP协议

文章插图
3-2
S代表该路由时静态配置,不是通过协议生成 。重点关注标注的三条路由,分别是主机路由、网络路由和默认路由 。查表时,优先查找主机路由表,若能匹配中,则报文直接按照查表结果转发 。若无法匹配中,则继续查找网络路由表,若匹配中网络路由则按照查表结果转发 。若仍无法匹配中,查找是否存在默认路由,存在的话匹配默认路由转发 。若所有的都无法匹配中,那么丢弃该报文 。
举个例子,一个目的IP是200.1.1.2的报文进来,那么直接命中主机路由表,报文直接按照查表结果,往下一跳网络接口IP为192.168.3.1的路由器转发 。若进来的报文目的IP为200.1.1.3,那么无法命中主机路由表,而命中了网络路由表,那么就往下一跳网络接口IP为192.168.4.1的路由器转发 。若进来的报文目的IP为100.1.1.2,那么既不能命中主机路由表,也不能命中网络路由表,只能命中默认路由,那么就往下一跳网络接口IP为101.0.0.1的路由器转发.
这里有人可能会疑问,明显主机路由能更精确匹配,直接全部使用主机路由就完事了,为什么还需要网络路由的存在 。这里主要考虑的是资源容量问题,硬件资源是有限的,一个路由表不可能无限大,能让你容纳那么多的主机路由 。因此,网络路由是很有必要的,网络路由的存在大大缩减了对路由表容量的要求 。
值得注意的是,在这个转发过程中,报文中的目的IP地址始终都未修改(使用源路由选项时会修改,但这种情况很少出现),所有的路由决策都是通过这个目的IP来决策 。
3.4.子网寻址与子网掩码现在所有的主机都要求支持子网寻址(RFC 950规定) 。不再把一个互联网IP地址单纯的认作由网络号与主机号组成,而是将主机号再次进行划分,主机号分为子网号和主机号两部分 。这么做的主要好处在于使得互联网地址的使用更加灵活,因为往往一个网络号后是用不了这么多主机的,例如B类的互联网地址,有16位的主机号,即可以包含2^16的主机数量,而往往这一个网络号下不会存在这么多主机,存在极大的浪费 。图3-3展示了B类地址的一种子网编址方式 。


推荐阅读