何谓路由
确定设备如何在不同网络之间相互传输的过程,也即通过互联的网络把信息从源地址传输到目的地址的活动被称之为路由。通常用于执行路由活动的设备被称为路由器。通过使用路由表,路由器则规划网络包到各自目的地的线路。路由的功能不仅仅是诸如路由器等网络设备能够完成,在安装有该功能的任意计算机系统也能够完成。
你可以运行 route print 或 netstat -r 显示本地计算机上的路由表
ROUTE [-f] [-p] [command [destination] [MASK netmask] [gateway] [METRIC metric] [IF interface]--操作路由表
我们报文通过路由器转发之后就会通过这些接口列表转发出去,下面就是转发规则
路由表中的每一个路由项具有五个属性,在此我将它们分为四个部分:
1、网络地址(Network Destination)、网络掩码(Netmask):网络地址和网络掩码相与的结果用于定义本地计算机可以到达的网络目的地址范围。通常情况下,网络目的地址范围包含以下四种:
-
主机地址;某个特定主机的网络地址,网络掩码为255.255.255.255,如上表中的6、7、9;
-
子网地址,某个特定子网的网络地址,如上表中的4、5;
-
网络地址;某个特定网络的网络地址,如上表中的2、3、8;
-
默认路由;所有未在路由表中指定的网络地址,如上表中的1,在后文将详细描述;
在添加路由时,Windows要求输入的网络地址和网络掩码相与后的结果必须等于网络地址,否则路由添加会失败。
2、网关(Gateway,又称为下一跳服务器):在发送IP数据包时,网关定义了针对特定的网络目的地址,数据包发送到的下一跳服务器。如果是本地计算机直接连接到的网络,网关通常是本地计算机对应的网络接口,但是此时接口必须和网关一致;如果是远程网络或默认路由,网关通常是本地计算机所连接到的网络上的某个服务器或路由器。
3、接口(Interface):接口定义了针对特定的网络目的地址,本地计算机用于发送数据包的网络接口。网关必须位于和接口相同的子网(默认网关除外),否则造成在使用此路由项时需调用其他路由项,从而可能会导致路由死锁。
4、跃点数(Metric):跃点数用于指出路由的成本,通常情况下代表到达目标地址所需要经过的跃点数量,一个跃点代表经过一个路由器。跃点数越低,代表路由成本越低;跃点数越高,代表路由成本越高。当具有多条到达相同目的网络的路由项时,TCP/IP会选择具有更低跃点数的路由项。
注:
localhost、127.0.0.1 和 本机IP之间的区别:
1、localhost等于127.0.0.1,不过localhost是域名,127.0.0.1是IP地址。
2、localhost和127.0.0.1不需要联网,都是本机访问(基于本地作用)。
3、本机IP需要联网,本机IP是本机或外部访问, 本机 IP 就是本机对外放开访问的IP地址,这个网址就是与物理网卡绑定的IP地址。
何为路由
路由工作在TCP/IP四层协议栈的网络层,通过转发分组实现网络互连,并连接两个IP子网。是指分组从源端到目的端时路径的进程。在我国,路由一般支持TCP/IP协议。路由器根据网络层的地址和路由器内部维护的路由表决定下一跳地址,分组到达路由时,更改链路层MAC帧的报头继续转发。
待转发的数据报怎么找到下一跳的路由器?
当路由器收到一个带转发的数据报,在从路由表得出下一跳路由器的IP地址后,不是把这个地址填入IP数据报,而交送数据链路层的网络
接口软件。网络接口把下一跳的路由器的IP地址转换成硬件地址(arp),并将此硬件地址放在链路层的MAC帧的首部,然后根据这个硬件地址找到下一跳路由器。(所以路由是三层协议栈,为了转发IP数据报)
平常人们一直容易将路由与桥接弄混,但是桥接和路由的区别非常明显:路由与桥接的关键区别点在于路由发生在网络层,桥接发生在链路层。
路由转发过程
路由转发过程:先确定最短路径,然后再通过所选路径上的网络传输数据。
一个分组到达路由器之后,先于本地路由表中的对应的子网掩码做按位与运算,然后再在本地的路由表中查询,如果与本地IP相同,则已经到达目的端,由当前路由解析数据;如果计算出不是本地IP地址,则此IP为下一跳的路由IP,继续进行路由转发;若在当前路由器中查询不到下一跳地址,即转向默认的下一跳IP。转发分组不可能在一个路由停下,这样会给当前路由的性能造成负担,且每个转发分组的IP数据包的报头中都有一个8位的生存时间TTL,这个生存时间并不是以时间单位计数,而是计算当前已经转发过的路由次数,在源端,设置好最大转发次数值,即生存时间(time to live),每经过一个路由,数值减一,直到最终路由器检查到生存时间为0。则丢弃该分组。
路由算法的区分要素--选择最短跳数
静态
严格意义上来说,静态算法并不能称之为算法。
是网络在开始运行前由网关建立的映射关系,在网关不更改的情况下,这种静态算法基本不会变,且设计也相对简单。但因为无法变化的原因,静态算法不能对网络关系的变化做出改变。所以在大型网络中并不适用。(适用于军事国防)
动态
动态路由是在静态路由上发展出现的,当使用场景变大,网络服务存在变化,必须在某些用户不使用路由发送数据时,断开他的连接,给所需用户。且在最终不可分组路由时可以进行静态算法的补充。
路由算法的衡量标准
因为路由算法多种多样,在何种情况下使用何种路由算法,则成了网络路由布置的重中之重,所以,路由的衡量标准必须最科学,最准确。
1、可靠性
路由算法计算得到的路径,在一段时间后可能失效,或者自身计算得到路径是一条不存在的路径,导致分组在网络中成为“流浪儿”。
2、路径长度
即分组在路由过程中转发的次数。
3、路由延迟
数据从源端发送,到目的端接收数据的所花时间。
4、负载
网络中路由器的繁忙程度。
5、通信代价
即通信花费的运作费,维护费等资金费用。
路径算法的代表算法
LS算法
在连接初,源端路由会向全网络中的各个路由发送一个分组数据包,每个路由则会回复给他一个分组数据包,其中包含自己的IP地址。
源端路由向全网络发送一个响应数据包,每个接收到的路由则会回复一个应答数组包,收到应答数据包后,将往返时间除以2,得到路由时间以及延时时间的总和。
向网络中公布自己的信息,同时接收其他路由发来的信息。,这样,每个路由都会及时更新自己的路由表等其他信息,维持自己的路由信息时最新的。
选择一个合适的算法,得到两个端的最佳路径。
由此看来,LS算法貌似是一个站在大局上对待网络上所有路由的架构的建立,而不针对的那个路由之间的转发分组。
Dijkstra算法
路由器先建立一张网络图,确定源端、目的端,然后建立一个邻接矩阵,每两个路由节点之间都有自己的链路权值,例如a,b节点的链路权值就是[i,j],i和j分别是a路由和b路由的权值。
路由器为每个节点维护一个状态记录,包含三个字段:
1、前序字段–当前节点的前一节点;
2、长度字段–从源端到当前路由的权值之和;
3、标号字段–表示节点的状态–永久或暂时
然后路由器初始化所有节点的状态纪录,长度设置为无穷大,标号为暂时。
路由器将源端路由的标号设为“永久”,记为T节点,随即检查与标号为“永久”节点直接相连的路由节点,选择路径最近节点将其标号设为“永久”,此节点为最新的T节点。
检查当前T节点是否为目的端节点,如果不是,则继续上述操作,如果是,则根据回溯法记录经过的每一个节点,则为源端到目的端的路径。
更新路由表算法
路由算法之距离矢量算法和链路状态算法(BIP/OSFP)
1.节点A发送给相邻节点B其到所有节点的距离信息
2节点A发送给链路上所有节点其到相邻节点的距离信息
分组转发算法如下:
1)从数据报的首部提取目的主机的IP地址D,得出目的网络地址为N。
2)若N就是于此路由直接相连的某个网络地址,则进行直接交付,不需要在经过其他的路由器,直接把数据报交付目的主机。
3)若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则执行(4)
4)若路由表中有到达网络N的路由,则把数据报传送给路由表中所指明的下一跳路由;否则,执行5)
5)若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由;否则,执行6)
6)报告转发分组出错。
ip/mask主要就为了寻址,找路。