数据包如何在中间不经过任何路由器的情况下到达另一个子网中的另一个 EC2 实例?

数据包如何在中间不经过任何路由器的情况下到达另一个子网中的另一个 EC2 实例?

问题是关于 VPC 子网内的路由。我知道,VPC 内部处理其内部子网之间的任何路由。但是,MTR 数据包 (ICMP) 如何在没有任何路由器的情况下到达另一个子网?

$ mtr -rwn -c 2 10.1.2.145
Start: 2020-03-06T06:19:10+0000
HOST: ip-10-1-1-172.ec2.internal Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 10.1.2.145                  0.0%     2    1.6   4.1   1.6   6.6   3.6

实例1路由表:

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.1.1.1        0.0.0.0         UG    0      0        0 eth0
10.1.1.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.169.254 0.0.0.0         255.255.255.255 UH    0      0        0 eth0

实例2路由表:

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.1.2.1        0.0.0.0         UG    0      0        0 eth0
10.1.2.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.169.254 0.0.0.0         255.255.255.255 UH    0      0        0 eth0

答案1

ICMP 的工作方式与 TCP/UDP 类似,它由“虚拟路由器”(AWS Hyperplane)在您的 VPC 内部路由。AWS 路由表有一个默认路由,所有子网都可以相互通信。如果您想更改它,请更改与子网关联的路由表。

答案2

可能,我已经得到了自己的问题的答案。AWS 使用 VPC 封装在实例之间路由流量。VPC 封装包含有关目标 VPC 和 ENI id 的信息。在 AWS 中,一个物理主机可能托管来自不同客户和不同 VPC 的多个实例,因此单个主机可能包含具有相同 CIDR 的不同 VPC(来自不同客户)的实例。为了避免这种歧义,AWS 通过添加此封装来标记其环境特定信息。映射服务也做出了贡献。它包含有关 VPC 中的哪个 ENI 位于哪个物理主机上的信息。因此,实例之间数据包的路由与传统的基于 IP 的路由管理不同,并且物理网络的底层 IP 层对虚拟实例不可见,这并不奇怪。

参考:

  1. https://www.youtube.com/watch?v=8gc2DgBqo9U
  2. https://aws.amazon.com/blogs/apn/understanding-amazon-vpc-from-a-vmware-nsx-engineers-perspective/

相关内容