默认路由造成路由环路
这些路由器都连成了一个环,每个路由器都连着交换机接着一个网段。
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耗尽了,就丢掉了。这样相当于一个环,来回转圈,出不去了