默认路由造成路由环路


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

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

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

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

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

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

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

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

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

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

可以看到TTL过期了, 

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

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

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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐