情况:服务器A正在接收从服务器B发送到服务器C的networkingstream量。服务器B&C发送MySQL转储。 相当一些交通。 出于某种原因,服务器A上的接口正在测量此stream量。 它没有做任何事情,它只是看到它。
当我运行tcpdump时,我发现mysql数据包的源和目标是服务器B和服务器C.从来没有服务器A.
12:52:44.482026 IP $ IP_server_B.3306> $ IP_server_A.38662:Flags [。],seq 15905879:15911671,ack 8910,win 62,选项[nop,nop,TS val 237711415 ecr 331318504],长度5792
我已经仔细检查了发送转储的脚本,服务器A的IP地址不在那里。 我检查了是否有知识产权冲突 – 没有。 所有3台机器上的接口都有不同的MAC地址(只是想排除一切)。 我可以在这些机器上重现10次10次的行为。
所有3台机器都是虚拟的CentOS 6 x64安装。 服务器A和B在同一个子网中,服务器C在完全不同的数据中心和networking中。 注意:服务器A和B在同一个子网中,但不在同一物理pipe理程序上运行。
所以问题是:服务器A怎么看到这个stream量呢?
如果服务器A和B连接到一个简单的集线器,而不是一个更智能的交换机,所有的stream量将被广播到所有连接的机器。 然后由机器来决定他们收到的stream量是为了他们还是应该忽略它。 默认情况下,Tcpdump会将你的界面变成promiscous模式,这意味着它不会忽略任何stream量,甚至不会忽略它。 这就是为什么使用Tcpdump可以看到集线器上的所有stream量。