热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

路由和路由算法

摘自:《深入理解计算机网络》王达著机械工业出版社相关知识链接1.IPV4数据报头部格式2.IPv6数据报头部格式3.IPv4数据报的封装与解封装4.IPv4数据报

摘自:《深入理解计算机网络》 王达著 机械工业出版社
相关知识链接
1. IPV4数据报头部格式
2. IPv6数据报头部格式
3. IPv4数据报的封装与解封装
4. IPv4数据报的分段与重组
5. ARP协议报文格式及ARP表
6. ARP地址解析原理
7. ICMP协议及报文格式
8. IPv6协议族的其它协议

路由和路由算法

网络层的主要功能就是将分组从源节点路由到目的节点中,而且在大多数计算机网络中,采用的是数据报分组交换的方式,数据报分组需要经过多跳(Hop,也就是要经过多少个路由器)才能到达目的地。
路由功能其实是一种数据报分组交换路径选择行为,是网络层的一种基本功能。路由功能与我们旅行或者运输货选择最佳路线是一个道理。下图所示的是我们假设要从北京发一封邮件到美国的旧金山朋友那里的示例。


北京飞往旧金山

从上图可以看出,发这样一封信可以有多条路线,不同路线又需采用不同的邮寄方式、不同线路长度和邮寄时间,当然运输成本也各不一样,最终选择哪条线路要综合邮寄成本、邮寄时间和途经邮局的可靠性等方面进行考虑。路由选择也是一样的,它要综合考虑许多因素,如线路长度、信道带宽、线路的稳定性、途经端口的开销等等。不同的路由算法所考虑的因素是不一样的。

路由的分类

路由是把信息从源节点通过网络传递到目的节点的行为,简单地讲路由就是指三层设备从一个接口上收到数据包,根绝数据包的目的地址进行定向,并转发到另一个接口的过程。但在这条路由路径上,至少需要一个中间结点,那就是提供路由功能的设备,如路由器和三层交换机。路由与桥接对比的主要区别在于,桥接发生在OSI参考协议的第二层(链接层),连接的是同一网络或同一子网的不同网段,而路由发生在第三层(网络层),连接的是不同网络或不同子网。
路由功能的实现是依靠路由器或三层交换机中的路由表进行的。路由又分为静态路由(Static Routing)和动态路由(Dynamic Routing)两大类。下面将分别介绍这两类路由。

静态路由

静态路由是我们经常需要配置的,特别是小型局域网中,因为它配置和管理都比较简单。总体来说,静态路由具有以下几个方面的特点。

手动配置

静态路由需要管理员根据实际需要一条条自己手动配置,路由器不会自动生成所需的静态路由。静态路由中包括目的节点或目的网络的IP地址,及数据包从当前路由器开始路由的第一个下一跳(通常是网关)所对应的接口或者IP地址。

路由路径固定不变

因为是静态路由,且静态,所以当网络的拓扑结构或链路的状态发生变化时,这些静态路由不能自动修改,需要网络管理员手动去修改路由表中相关信息。

不可通告性

静态路由信息在默认情况下是私有的,不会通告给其它路由器,也就是当在一个路由器上配置了某一条静态路由时,它不会被通告网络中相连的其它路由器。但网络管理员可以通过重新发布静态路由为其它动态路由,使得网络中其它路由器也可获得此静态路由

单向性

静态路由具有单向性,也就是它仅为数据提供沿着下一跳的方向进行路由,不提供方向路由。所以如果你想要使源节点与目的节点或网络进行双向通信,就必须同时配置回程静态路由。在现实应用中经常会遇到这样额问题,就是明明配置了到达某节点的静态路由,可还是Ping不通,其中一个重要的原因就是没有配置回程静态路由。
如下图所示,如果想要使得PC1(PC1已配置了A节点的IP地址10.16.1.2/24作为网关地址)能够Ping同PC2,则必须同时配置一下两条静态路由。


静态路由单向性
图片来自:你所不了解的静态路由特点及配置

正向路由:在R1路由器上配置了到达PC2的正向静态路由(以PC2 10.16.3.2/24 作为源节点,以C结点IP地址10.16.2.2/24 作为下一跳地址);
回程路由:在R2路由器上配置一条到达PC1的回程静态路由(以PC1 10.16.1.1/24 作为目的节点,以B结点IP地址10.16.2.1/24 作为下一跳地址),以提供Ping过程回程ICMP消息的路由路径。

接力性

如果某条静态路由中间经过的跳数大于1(也就是整条路由经历了三个或以上的路由器结点),则必须在除最后一个路由器外的其它路由上依次配置到达相同目的节点或目的网络的静态路由,这就是静态路由的接力,否则仅在源路由器上配置静态路由还是不可以的。
就像你要从长沙到北京去,假设中间要途经的站点包括:武汉—郑州—石家庄,可人家只告诉你目的地是北京,以及长沙出发的下一站是武汉。对于一个没有多少旅游经验的人来说,你不可能知道到了武汉后又该怎么走,必须有人告诉你到了武汉后再怎么走,到了郑州后又该怎么走,这就是接力性。
下图所示是一个三个路由器串联的简单网络,各个路由器及结点以及PC机的IP地址在图中做了标注,PC1已经配置好指向R1的A结点的地址的网关,现假设要使PC1能Ping通PC2,则需要配置一下四条路由(两条正向,两条反向)。


静态路由接力
图片来自:你所不了解的静态路由特点及配置

  1. 在R1路由器上配置了到达PC2的正向静态路由(以PC2 10.16.4.2/24 作为目的节点,以C结点IP地址 10.16.2.2/24 作为下一跳地址)。
  2. 在R2路由器上配置了到达PC2的正向静态路由(以PC2 10.16.4.2/24 作为目的节点,以E结点IP地址 10.16.3.2/24 作为下一跳地址)。
  3. 在R3路由上配置一条到达PC1的回程静态路由(以PC1 10.16.1.1/24 作为目的节点,以D结点IP地址 10.16.3.1/24 作为下一跳地址),以提供Ping过程回程ICMP消息的路由路径。
  4. 在R2路由器上配置一条到达PC1的回程静态路由(以PC1 10.16.1.1/24 作为目的节点,以B结点IP地址 10.16.2.1/24 作为下一跳地址),以提供Ping过程回程ICMP消息的接力路由路径。

小Tip: 为啥不用配置PC1到B,C到D,E到PC2静态路由?
路由器各端口上所直接连接的各个网络都是直接互通的,因为它们之间默认就有直连路由,无需另外配置其它路由。也即连接在同一路由器上的各网络之间的跳数为0。如图7-3中R1路由器上连接的PC1 (10.16.1.1/24) 和 10.16.1.2/24 网络,R2路由器上连接的 10.16.2.2/24 和 10.16.3.1/24 网络,R3路由器上连接的 10.16.3.2/24 和PC2 (10.16.4.1/24) 网络都是直接互通的。也正因如此,在上图中,PC1要ping通PC2,只需要配置图中所示的正、反向各两条静态路由,而不用配置PC1到B,C到D,E到PC2静态路由(包括正向和回程路由)。


优先级较高

因为静态路明确指出了到达目的网络,后者目的节点的路由路径,所以在所有同目的地址的路由中,静态路由的优先级是除“直接路由”外最高的,也就是如果配置了到达某一网络或者某一结点的静态路由,则优先采用这条静态路由,只有当这条静态路由不可用时才会考虑选择其他的路由。


说明:在这里要特别注意一个方面,那就是默认路由的优先级。如果在一个路由器同时有一条目的地址相同的静态路由,则首先选择的是静态路由。要使对应的默认路由起作用,就必须删除相同目的网络或目的节点的静态路由,否则会冲突,默认路由不起作用。


适用小型网络

静态路由一般适用于比较简单的小型网络环境,因为在这样的环境中,网络管理员易于清楚的了解网络的拓扑结构,便于设置正确的信息。同时小型网络所需配置的静态路由条目不会太多。如果网络规模较大,拓扑结构比价复杂,则不宜太用静态路由,因为这样配置的工作量实在太大。

动态路由

静态路由对于小型化且变化不是很频繁的网络来说还是可行的,如局域网。但是对于较大型的广域网来说,由于拓扑结构较复杂,且网络结构可能经常变动,静态路由就不再适用了,通常采用更加灵活,更具自动特性的动态路由。总体来说,动态路由具有以下几个方面的特点:

自动生成

动态路由的一个最重要的特点就是在网络某条路由所包括的路由器同时启动了某种动态路由协议,通告了各自所直接连接的网络后,则这些路由器间就会自动生成这些路由器直接连接的网络间的路由表项,管理员无须一一手动创建。这对于较大型的网络来说,是最方面、简单的路由选择了。

自动调整

当网路结构发生改变,我们手动的静态配置也往往无法及时跟着改变,但动态路由可以随时根据网络拓扑结构的变化调整路由表项,同事还会自动删除无效的动态路由表项,更加方便路由管理。

自动通告

前面说了,一个路由器上的静态路由表项是一个路由器私有的,但是动态路由可以在相邻路由器上相互通告,以便及时反映拓扑结构的变化,生成新的动态路由表项。

自动生成双向路由

虽然单条动态路由也是单向的,但是路由器在生成某条路径的动态路由时会自动生成回程路由表项,也就是会同时双向路由表项。

仅可生成网络间的路由表项

动态路由仅可生成各路由器所直接连接的各个网络或子网间的路由表项,不能生成到达具体节点或主机的动态路由表项,如果仅需生成到达某个结点或主机的路由,则需要选择静态路由。

不同动态路由不兼容

动态路由根据所采用的路由算法的不同又可分为多种类型,如RIP(Routing Information Protocol 路由信息协议)、OSPF(Open Shortest Path First 开放最短路径优先)、EIGRP(Enhanced Interior Gateway Routing Protocol 增强内部网关协议)、IS-IS(Intermediate System-to-Intermediate System 中间系统到中间系统协议)、BGP(Border Gateway Protocol 边界网关协议)等。不同的动态路由协议主要使用的网络环境不一样,也是不兼容的,但可以进行相互重发布,我们将在后面的博客进行详细的介绍。


推荐阅读
  • 深入解析OSI七层架构与TCP/IP协议体系
    本文详细探讨了OSI七层模型(Open System Interconnection,开放系统互连)及其与TCP/IP协议体系的关系。OSI模型将网络通信过程划分为七个层次,每个层次负责不同的功能,从物理层到应用层逐步实现数据传输和处理。通过对比分析,本文揭示了OSI模型与TCP/IP协议在结构和功能上的异同,为理解现代网络通信提供了全面的视角。 ... [详细]
  • 本文首先介绍了BGP的基本概念和基础知识,详细解析了BGP的不同邻居类型及其作用。接着,文章对BGP的报文格式、状态机以及路由宣告原则进行了深入探讨,包括本地宣告、引入宣告和缺省路由的处理方法。通过这些内容,读者可以全面了解BGP路由协议的核心机制及其在实际网络中的应用。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • Ping 命令的高级用法与技巧
    本文详细介绍了 Ping 命令的各种高级用法和技巧,帮助读者更好地理解和利用这一强大的网络诊断工具。 ... [详细]
  • 本文介绍了几种常用的图像相似度对比方法,包括直方图方法、图像模板匹配、PSNR峰值信噪比、SSIM结构相似性和感知哈希算法。每种方法都有其优缺点,适用于不同的应用场景。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 在《ChartData类详解》一文中,我们将深入探讨 MPAndroidChart 中的 ChartData 类。本文将详细介绍如何设置图表颜色(Setting Colors)以及如何格式化数据值(Formatting Data Values),通过 ValueFormatter 的使用来提升图表的可读性和美观度。此外,我们还将介绍一些高级配置选项,帮助开发者更好地定制和优化图表展示效果。 ... [详细]
  • Linux入门教程第七课:基础命令与操作详解
    在本课程中,我们将深入探讨 Linux 系统中的基础命令与操作,重点讲解网络配置的相关知识。首先,我们会介绍 IP 地址的概念及其在网络协议中的作用,特别是 IPv4(Internet Protocol Version 4)的具体应用和配置方法。通过实际操作和示例,帮助初学者更好地理解和掌握这些基本技能。 ... [详细]
  • 虚拟机网络设置与数据库远程连接优化指南
    本文针对个人计算机上虚拟机网络配置与数据库远程连接的问题,提供了一套详细的优化指南。在探讨远程数据库访问前,需确保网络配置正确,特别是桥接模式的设置。通过合理的网络配置,可以有效解决因虚拟机或网络问题导致的连接失败,提升远程访问的稳定性和效率。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
author-avatar
陌-天佑_807
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有