默认路由造成路由环路
这些路由器都连成了一个环,每个路由器都连着交换机接着一个网段。
A和B计算机通信,可以看到去的时候数据包是顺时针方向,回来的时候数据包还是顺时针。
还有一种情况A和B通信,去的时候千里迢迢,回来的时候一下子就回来了,很显然这样不合理,虽然网络可以通但是绕远了。
使用默认路由省事,但是选择的路径未必是最佳的。
除了上面的问题,还有一个更大的问题,这样一个环会形成环路,A去ping了网络当中一个不存在的地址,这个时候计算机发了一个数据包,数据包就会在这个圈里来回转,永不消失,一直占用带宽。
好在IP协议有一种机制,防止路由环路,这个协议定义了一个字段TTL字段,叫做生存时间。
这个数据包每过一个路由器TTL就减一,当减为0的时候就将这个数据包丢掉。在发数据包的时候,都会有初始的TTL,比如Windows发包的时候默认是128,
现在我这台计算机ping网关返回来的TTL是64,因为没有经过路由器,
要经过路由器,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耗尽了,就丢掉了。这样相当于一个环,来回转圈,出不去了