最近在做有关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地址, 将会发送至相应的端口. 请查看 二层交换机的学习过程.