1、路由原理
数据在网络上传输时,要先查询本机的路由表而后根据路由表的指示,决定是将该包发往交换机进行帧交换还是直接发往路由器进行IP寻址。首先不同的数据在传输层根据不同的协议打包成各种传输报文,报头中记录的内容可以控制传输的过程,如TCP报文、UDP报文等。而后根据目的地不同在网络层被加上了IP报头,其中指明了目的设备的IP地址。将报文递交给网卡之前,设备先查询自己的路由表,如下图所示,这个表中记录着本机的路由策略,即不同类型的IP地址在接下来应当如何被传递。(说明:本机IP是192.168.123.88;本机连接着一个路由器IP是192.168.123.254)
编号 | destination | mask | gateway | interface | metric |
1 | 0.0.0.0 | 0.0.0.0 | 192.168.123.254 | 192.168.123.88 | 1 |
2 | 127.0.0.0 | 255.0.0.0 | 127.0.0.1 | 127.0.0.1 | 1 |
3 | 192.168.123.0 | 255.255.255.0 | 192.168.123.88 | 192.168.123.88 | 1 |
4 | 192.168.123.88 | 255.255.255.255 | 127.0.0.1 | 127.0.0.1 | 1 |
5 | 192.168.123.255 | 255.255.255.255 | 192.168.123.88 | 192.168.123.88 | 1 |
6 | 224.0.0.0 | 224.0.0.0 | 192.168.123.88 | 192.168.123.88 | 1 |
7 | 255.255.255.255 | 255.255.255.255 | 192.168.123.88 | 192.168.123.88 | 1 |
destination:目的网段。
mask:子网掩码。
gateway:下一跳路由器入口IP。网关为本机IP则代表不需要路由器。
interface:本地的出口IP。也代表着应使用那个网卡发出该包。
metric:跳数,数值越小质量越高。
对上述路由表的分析如下:
编号 | destination | mask | gateway | interface | metric |
1 | 0.0.0.0 | 0.0.0.0 | 192.168.123.254 | 192.168.123.88 | 1 |
目的主机的IP网段若在路由表上找不到,那就默认地从本机网卡发往本机所连的路由器。 |
|||||
2 | 127.0.0.0 | 255.0.0.0 | 127.0.0.1 | 127.0.0.1 | 1 |
目的主机的IP网段若是本机回环IP,则由本机发回本机,不需要网关。 |
|||||
3 | 192.168.123.0 | 255.255.255.0 | 192.168.123.88 | 192.168.123.88 | 1 |
目的主机的IP与本机同网段,则应当从本机网卡发往本机所连接的交换机,所以这里不需要网关。 |
|||||
4 | 192.168.123.88 | 255.255.255.255 | 127.0.0.1 | 127.0.0.1 | 1 |
目的主机的IP就是本机IP,则由本机发回本机,不需要网关。 |
|||||
5 | 192.168.123.255 | 255.255.255.255 | 192.168.123.88 | 192.168.123.88 | 1 |
目的IP是主机所在网段的广播IP,则由本机网卡发往交换机,所以这里不需要网关。 | |||||
6 | 224.0.0.0 | 224.0.0.0 | 192.168.123.88 | 192.168.123.88 | 1 |
目的IP是一个组播地址,则由本机网卡发往交换机,不需要网关。 | |||||
7 | 255.255.255.255 | 255.255.255.255 | 192.168.123.88 | 192.168.123.88 | 1 |
目的IP是一个全网广播地址,则由本机网卡发往交换机,不需要网关。 |
2、路由类型
根据前面的分析我们可知路由主要分为三类:发给自己的、发往交换机的、发往路由器的。
发给自己:包括回环IP和本机IP,回环IP就代表着主机自己,是主机用于网络测试时使用的,后面再详细讲。目的地址是本机IP的情况也很多,比如在一台电脑上同时安装了Server端和Client端,两个应用进行通讯时目的IP都是本机的IP。这里目标IP是回环地址的就通过虚拟回环接口发出去,目标IP是本机的就通过本机的网卡发出,最后还是回到本机,由本机的虚拟回环接口或本机网卡收到交由上层处理。
发往交换机:全网广播、组播、网段内广播以及发往网段内其他主机的数据包都需要通过交换机进行帧交换,所以由本机网卡发到网线上,由交换机接收并转发。
发往路由器:路由表中找不到目的IP的时候,默认就发往默认路由器,实际上也存在指定网段的数据发往指定路由器的情况,我们后续再讲。大多数情况就是发往其他网段的数据需要通过路由器转发,所以由本机网卡发往路由器进行IP寻址。
3、路由选择
以FTP为例,在应用层FTP客户端决定向服务端发送一段数据,该数据到达传输层后决定采用TCP协议进行传输,于是为该段数据加上TCP报头组成TCP报文。包含该段数据的TCP报文到达网络层后根据目的主机IP和源主机IP加上IP报头组成IP报文,而后根据目的IP的类型(发给自己、发往交换机、发往路由器)查询路由表,再决定如何发送。
发给自己:查询路由表发现FTP服务端也部署在本机,则IP报文到达网卡后不需要组帧,直接由网卡再传递回网络层,而后根据协议类型将IP报文递交给专门处理的进程。这样数据就从本机的FTP客户端发送给了本机的FTP服务端。
发往交换机:查询路由表发现FTP服务端与本机部署在同一子网中,则IP报文到达网卡后根据IP地址使用ARP协议查询其目的MAC地址,然后根据目的MAC和源MAC地址组帧。帧到达交换机后,交换机根据目的MAC地址将帧传递给目的主机。
发往路由器:查询路由表发现FTP服务端在其他网段,则IP报文到达网卡后会以路由器的MAC地址为目的地址组帧并递交给交换机,交换机根据目的MAC地址将帧传递给路由器。路由器得到该帧后从IP报头中得到目的IP,与源主机类似的,路由器也会根据目的IP的类型查询其路由表后决定是发给自己、发往交换机或发往另一个路由器。路由器、交换机会重复这个过程直到数据到达目标主机。
【回环地址】本地回环地址,不属于任何一个有类别地址类。它代表设备的本地虚拟接口,所以默认被看作是永远不会宕掉的接口。在windows操作系统中也有相似的定义,所以通常在不安装网卡前就可以ping通这个本地回环地址。一般都会用来检查本地网络协议、基本数据接口等是否正常的。
【路由优先级】实际网络中从一个点到达另一个点可能有多种路由方式,用户也可以手动修改路由表,那路由器如何对不同的路径进行选择呢。
事实上,路由可以由路由器自己学习产生或由用户手动指定。自动学习产生路由的过程有很多种实现方法,不同的实现方法称为路由协议,一台路由器可以同时运行多个路由协议。不同的路由协议都有自己的标准来衡量路由的好坏,并且每个路由协议都把自己认为是最好的路由送到路由表中。这样到达一个同样的目的地址,可能由多条分别由不同路由选择协议学习来的不同的路由。虽然每个路由选择协议都有自己的度量值,但是不同协议间的度量值含义不同,也没有可比性。路由器必须选择其中一个路由协议计算出来的最佳路径作为转发路径加入到路由表中。
实际的应用中,路由器选择路由协议的依据就是路由优先级。给不同的路由协议赋予不同的路由优先级,数值小的优先级高。当有到达同一个目的地址的多条路由时,可以根据优先级的大小,选择其中一个优先级数值最小的作为最优路由,并将这条路由写进路由表中。路由优先原则如下:
1.直连路由具有最高优先级。
2.人工设置的路由条目优先级高于动态学习到的路由条目。
3.度量值算法复杂的路由协议优先级高于度量值算法简单的路由协议。