阿里云内网SLB使用:
ECS(A) —–> SLB(TCP) —–> ECS(B)
我们来看看数据包路径:
ECS(A)【 IP(A) –> IP(SLB) 】 ======> SLB (目的地址转换,源地址不转换) ========> ECS(B)【 IP(A) —-> IP(B) 】
那么, ECS(B)该如何回包呢?
因为ECS(B)认为数据包是从ECS(A)过来的,自然回包给ECS(A),而事实上ECS(B)是可以直接访问到ECS(A)的,于是乎,不经过SLB就直接回包了; 那么,数据包到了ECS(A)能被认可吗?
当然不会,因为ECS(A)只知道给SLB发送过请求,不知道给ECS(B)发送过请求。
所以, 对于这种情况,SLB的TCP模式是行不通的。同理,UDP模式也是不行的。
只要回包离开了ECS(B),就会被SLB看到,就会被地址转换后在发送给ECS(A), 所以,这种场景是没问题的。
下面场景是有问题的:(如果SLB后面有多台机器,SLB就可以把来自A的请求转发到非A的机器上,自然也就没问题了)
ECS(A) —–> SLB(TCP) —–> ECS(A)
问题:
对于第一种场景,如果ECS(A)和ECS(B)不在同一个网段(似乎不行)也就算了,当ECS(A)通过SLB(tcp)访问ECS(B)时,会不会影响到ECS(B)上记录的ECS(A)的mac地址?
实际情况却是:
node-1(172.16.31.99) 和 node-2(172.16.31.100)以及gateway的mac地址都是一样的; 如此看来,阿里的网络设备甚至操作系统都是定制的了?