TCP/IP协议栈 --- IP路由

时间:2021-08-12 10:33:04

IP路由:当一个IP包在主机发送出去或者在网络当中时,是怎么选择路径到达目的主机的呢? 一般情况下, 如果说源主机和目的主机在同一个网络中的话,那个数据报可以直接到达目的主机而不经过路由器,下面可以试一下, 我的主机网络是192.168.1.2 ping 网络里面的另一台主机, 我们可以用traceroute或者tracepath看一下整个包在网络中的过程。

~/Desktop$ tracepath 192.168.1.7
1?: [LOCALHOST] pmtu 1500
1: 192.168.1.7 0.601ms reached
1: 192.168.1.7 0.946ms reached
Resume: pmtu 1500 hops 1 back 1

这里可以看到并没有经过路由器192.168.1.1 如果是外网的ip地址的话

~/Desktop$ tracepath baidu.com
1?
: [LOCALHOST] pmtu 1500
1: 192.168.1.1 2.128ms
1: 192.168.1.1 1.983ms
2: 15.15.180.2 4.320ms
3: 15.81.3.18 3.632ms

可以看到外网的话是要通过路由器去路由的。

~/Desktop$ route 
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0

内核IP路由表里面的默认路由是192.168.1.1 也就是说到达外网的数据包都会交给路由器, 让路由器在去路由到目的主机。

sudo route del default gw 192.168.1.1 

删除默认网关,再去stracepath 外网的话就会直接send failed。 但是内网是没有问题的, 也就是说:

( 1)如果I P层被设置为路由器的功能,那么就对数据报进行转发 (也就是说,像下面对待发出的数据报一样处理);否则( 2)数据报被丢弃。
路由表中的每一项都包含下面这些信息: • 目的I P地址。它既可以是一个完整的主机地址,也可以是一个网络地址,由该表目中的标
志字段来指定(如下所述) 。主机地址有一个非0的主机号(见图1 - 5) ,以指定某一特定的
主机,而网络地址中的主机号为0,以指定网络中的所有主机(如以太网,令牌环网) 。 • 下一站(或下一跳)路由器( next-hop
router)的I P地址,或者有直接连接的网络 I P地 址。下一站路由器是指一个在直接相连网络上的路由器,通过它可以转发数据报。下
一站路由器不是最终的目的,但是它可以把传送给它的数据报转发到最终目的。 • 标志。其中一个标志指明目的 I
P地址是网络地址还是主机地址,另一个标志指明下一 站路由器是否为真正的下一站路由器,还是一个直接相连的接口(我们将在 9 . 2节中
详细介绍这些标志) 。 • 为数据报的传输指定一个网络接口。

路由器IP路由选择主要完成以下这些功能:
1) 搜索路由表,寻找能与目的 I P地址完全匹配的表目(网络号和主机号都要匹配) 。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值) 。
2) 搜索路由表,寻找能与目的网络号相匹配的表目。如果找到,则把报文发送给该表目
指定的下一站路由器或直接连接的网络接口(取决于标志字段的值) 。目的网络上的所
有主机都可以通过这个表目来处置。例如,一个以太网上的所有主机都是通过这种表
目进行寻径的。这种搜索网络的匹配方法必须考虑可能的子网掩码。
3) 搜索路由表,寻找标为“默认( d e f a u l t) ”的表目。如果找到,则把报文发送给该表目指定的下一站路由器。

网络中路由器之间的路由选择就是第二种功能的利用。
那么网络中的路由器之间又是怎么知道各自网络呢,这就需要动态路由, 告诉其他路由器自己所连接的网络状态,路由器上有一个进程称为路由守护程序( routing daemon) ,它运行选路协议,并与其相邻的一些路由器进行通信。 动态路由协议RIP可参考TCP/IP卷一。