注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

随感而发,记录点点滴滴

All rivers run into sea

 
 
 

日志

 
 

Linux系统IP路由基础理论  

2012-11-07 15:19:25|  分类: Linux网络 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
也许你知道如何在Linux系统上用命令netstat或route来查找(甚至是增加/删除)已经存在的路由。但是

在你做这些操作的时候你可能并不知道IP路由是如何工作的。本文将帮助你理解IP路由的原理,以及它是

如何工作的。IP路由涉及到IP数据报文的转发。如果主机与目的主机直接相连,那么主机可以直接发送IP

报文到目的主机,这个过程比较简单。例如,通过点对点的链接或通过网络共享。如果主机与目的主机没

有直接相连,那么主机会将IP报文发送给默认的路由器,然后由路由器来决定往哪发送IP报文。
  IP路由涉及到IP数据报文的转发。如果主机与目的主机直接相连,那么主机可以直接发送IP报文到目

的主机,这个过程比较简单。例如,通过点对点的链接或通过网络共享。如果主机与目的主机没有直接相

连,那么主机会将IP报文发送给默认的路由器,然后由路由器来决定往哪发送IP报文。
  路由原理
  一个普通的主机与路由器之间的根本区别在于,主机不会将一个报文从一个接口转发到另一个接口,

而路由器可以转发报文。
  如今,大多数的多用户系统都可以被配置,从而被当作路由器来用。因此,一个普通路由算法可以被

用在路由器上,同样也可以用在一台普通主机上。当一台主机可以用作路由器时,我们通常说这台主机嵌

入了路由器的功能。这种具备嵌入路由器功能的主机平常不会转发报文,除非我们对它进行了配置,使它

开启这种功能。
  IP层维护着一张路由表,当收到数据报文时,它用此表来决策接下来应该做什么操作。当从网络侧接

收到数据报文时,IP层首先会检查报文的IP地址是否是主机自身的地址相同。
  如果数据报文中的IP地址是主机自身的地址,那么报文将被发送到传输层相应的协议中去。如果报文

中的IP地址不是主机自身的地址,并且主机配置了具备路由的功能,那么报文将被转发;否则,报文就被

丢弃。
  路由表中的数据一般是以条目形式存在。一个典型的路由表条目包含以下主要的条目项:
  # 目的IP地址:此字段表示目标的IP地址。这个IP地址可以是某一台主机的地址,也可以是一个网

络地址。如果这个条目包含的是一个主机地址,那么它的主机ID标记为非零;如果这个条目包含的是一个

网络地址,那么它的主机ID被标记为零。
  # 下一个路由器的IP地址:为什么我们使用“下一个”的说法,是因为下一个路由器并不总是最后

的目的路由器,但它很可能是一个中间路由器。条目给出下一个路由器的地址是用来转发从相应接口收到

的IP数据报文。
  # 标志:这个字段提供了另一组重要信息,如目的IP地址(之前提到的)是一个主机地址还是一个

网络地址。此外,从标志中可以得知下一个路由器(之前提到的)真的是一个路由器还是一个直接相连的

接口。
  # 网络接口规范:一些数据报文的网络接口规范,这个规范跟随报文一起传播。
  基本的路由是如何工作的?
  因此,如果我们现在想简单而形象地描述路由过程,我们将会看到:一旦主机(被配置成具备路由功

能)的IP层接收到从网络侧来的数据报文,它将核实数据包中的目的IP地址,如果此IP不是主机的IP地址

,那么包将通过路由表转发。
  如果任何条目的第一个字段完全匹配目的IP地址(主机)或部分匹配目的IP地址(网络),那么它将

指示下一个路由器的IP地址。这是一个重要的信息,因为这些信息直接告诉主机(具备路由功能的)数据

包应该转发到哪一个“下一个路由器”去。而条目中所有其它的字段将提供更多辅助的信息来为路由转发

做决定。
  在上一段中我们对路由转发过程建立了基本的了解,但如果我们试图深入了解更多的东西,就必须看

看以下关于路由表算法的一些详细信息。
  # 首先,路由表会去搜索一个“目的IP地址”字段与数据报文中目的IP地址完全相同的条目。这就

意味着IP地址的主机ID与网络ID完全的匹配。如果找到,则数据包被发送到相应接口或中间路由器。
  # 如果没有找到一个完全的匹配IP,那么就接着搜索相匹配的网络ID。如果找到,那么该数据报文

会被转发到指定的路由器。所以我们看到,这个网络上的所有主机都通过这个路由表中的单个(这个)条

目来管理。
  # 如果上述两个条件都不匹配,那么该数据报文将转发到一个“默认路由器”。
  # 如果上述步骤失败,即没有默认路由器,那么该数据报文最终无法被转发。任何无法投递的数据

报文都将产生一个ICMP主机不可达或ICMP网络不可达的错误,并将此错误返回给生成此数据报文的应用程

序。
  有时人们会问,为什么路由表中会有两种类型的条目?有了更精确的主机条目为什么还需要网络相关

的条目?嗯…在路由表中包含与网络相关的路由条目是一个很大的优点。其优点在于,拥有一个与完整网

络相关的条目,能够避免包含此网络中所有单独的主机条目(这个数据量非常巨大)。这使得路由表的大

小降到一个可收受的数量级,这样就非常好。
  查看路由表信息的命令
  你可以使用netstat命令查看路由表信息,如下所示:
  \$ netstat -rn Kernel IP routing table Destination  Gateway         Genmask         

Flags   MSS Window  irtt Iface 192.168.2.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.2.1     0.0.0.0         UG        0 0        0    eth0 其输出提供目的IP

地址和网关相关的详细信息。标志“U”表明该路由器可达;“G”表明该路由器与一个网关(路由器)相

连。如果这个标志没有被设置,那么我们可以认为主机与目标是直接相连的。
  评论这张
 
阅读(95)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018