默认路由造成路由环路


这些路由器都连成了一个环,每个路由器都连着交换机接着一个网段。

计算机网络 网络层 默认路由造成路由环路_网络协议

A和B计算机通信,可以看到去的时候数据包是顺时针方向,回来的时候数据包还是顺时针。

计算机网络 网络层 默认路由造成路由环路_数据_02

 还有一种情况A和B通信,去的时候千里迢迢,回来的时候一下子就回来了,很显然这样不合理,虽然网络可以通但是绕远了。 

使用默认路由省事,但是选择的路径未必是最佳的。

计算机网络 网络层 默认路由造成路由环路_p2p_03

除了上面的问题,还有一个更大的问题,这样一个环会形成环路,A去ping了网络当中一个不存在的地址,这个时候计算机发了一个数据包,数据包就会在这个圈里来回转,永不消失,一直占用带宽。

好在IP协议有一种机制,防止路由环路,这个协议定义了一个字段TTL字段,叫做生存时间。

这个数据包每过一个路由器TTL就减一,当减为0的时候就将这个数据包丢掉。在发数据包的时候,都会有初始的TTL,比如Windows发包的时候默认是128,

计算机网络 网络层 默认路由造成路由环路_网络_04

 现在我这台计算机ping网关返回来的TTL是64,因为没有经过路由器,

计算机网络 网络层 默认路由造成路由环路_字段_05

C:\Users\12396>ping 172.17.0.2

正在 Ping 172.17.0.2 具有 32 字节的数据:
来自 172.17.0.2 的回复: 字节=32 时间=1ms TTL=64
来自 172.17.0.2 的回复: 字节=32 时间=2ms TTL=64

172.17.0.2 的 Ping 统计信息:
数据包: 已发送 = 2,已接收 = 2,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 1ms,最长 = 2ms,平均 = 1ms
Control-C

要经过路由器,A向B发数据TTL是128,A ping B的时候发一个数据包过去,B返回响应,TTL是128,过一个路由器TTL变为127,再过一个路由器TTL变为126。

linux的TTL是64,Windows系统是128

计算机网络 网络层 默认路由造成路由环路_p2p_06

这个是CCTV的网站,初步判断这个是Linux系统,发包的时候默认是64,最后是67,过的路由器个数是64-57

计算机网络 网络层 默认路由造成路由环路_网络协议_07

可以看到TTL过期了, 

计算机网络 网络层 默认路由造成路由环路_数据_08

可以看到从第二个地方发回来了TTL耗尽。这样就能够跟踪计算机到CCTV中间过了多少个路由器。

TTL目的就是防止数据包在网络当中来回转圈圈。

计算机网络 网络层 默认路由造成路由环路_网络_09

 没有环的时候也可能也可能造成往返转发,比如这个网络里面有两个路由器,一共有三个网段,如果A ping了这个网段当中不存在的地址,比如131.107.0.5,这样数据包就在两个路由器之前来回跳来跳去,最后TTL耗尽了,就丢掉了。这样相当于一个环,来回转圈,出不去了

计算机网络 网络层 默认路由造成路由环路_网络协议_10