最近在做有关IP数据包的一些操作. 在数据包经过的交换机时, 将其进行镜像,
而后发送至分析服务器中. 这些镜像下来的数据包其实代表了其经过的路径, 可以通过
他们来判断是否发生了环路或是丢包.
今天组会讨论了有关这些数据包的顺序问题. 即使镜像时间有先后, 可当数据包达到
分析服务器时, 顺序就变得不同了, 故而无法还原出路径. 丢包环路虽然可以检测,
但是只能粗粒度的得知路径中是否有丢包问题.
而后我也提了一个部分可行的解决方案. 按照不同数据包的TTL进行排序, 因为数据包
经过交换机后TTL会减一. 下面是一个IPv4的头部结构, 其中Time to Live
就是常说的
TTL, 在IPv6上也有类似的位, 称之为Hop Limit
. 详细信息可以查看TCP/IP 协议头部,
IPv4与IPv6数据包格式.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Version| IHL |Type of Service| Total Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identification |Flags| Fragment Offset | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Time to Live | Protocol | Header Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Destination Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
为什么说是部分可行呢?
原因是2层交换机并不会修改TTL.
二层交换、路由和三层交换中介绍了有关问题.
数据包只有经过带有路由功能的三层交换器时, TTL才会被改变. 而且, 文章中也介绍了
这三者的区别.
对于二层交换机来说, 会将MAC地址与其硬件端口相对应. 如果数据包的目的MAC地址是
地址表中的MAC地址, 将会发送至相应的端口. 请查看
二层交换机的学习过程.