SNAT(Source Network Address Translation)或源网络地址转换,是在数据包通过网络进行传输时对源 IP 地址进行转换的过程。SNAT 主要应用于私有网络与公共网络间的通信,它可以将私有网络中的内部 IP 地址转换为公共网络上的一个或多个公共 IP 地址。然后,公网上的回应信息通过这个公共 IP 地址返回到私有网络,并且转换回原始的私有 IP 地址。这一过程对于发起请求的设备来说是透明的。
在 Azure Cloud 中,负载均衡器利用 SNAT 来实现内部服务与外部服务的通信。例如,当一个 Azure 虚拟机(VM)需要访问 Internet 上的服务时,Azure 负载均衡器会将该虚拟机的私有 IP 地址和源端口号转换为公共 IP 地址和一个新的源端口号。这样,Internet 上的服务就可以通过这个公共 IP 地址和端口号进行回应。然后,Azure 负载均衡器再将回应信息的目标 IP 地址和端口号转换回原始的私有 IP 地址和源端口号,从而实现与外部服务的通信。
然而,每个公共 IP 地址只有有限的端口号可用(最多 64512 个)。当一个 Azure 虚拟网络的所有虚拟机都通过同一个公共 IP 地址访问 Internet 时,可能会发生 SNAT 端口耗尽(SNAT Port Exhaustion)。这时,由于没有可用的端口号,虚拟机无法建立新的与外部服务的连接,直到有正在使用的端口号被释放。这种情况会严重影响到虚拟网络的正常运行。
举一个例子,假设一个虚拟网络中有 1000 个虚拟机,每个虚拟机平均需要 100 个 SNAT 端口。因此,总共需要 100000 个 SNAT 端口。然而,一个公共 IP 地址只有 64512 个端口可用。所以,如果所有的虚拟机都通过同一个公共 IP 地址访问 Internet,那么就会发生 SNAT 端口耗尽。虚拟机无法建立新的与外部服务的连接,直到有正在使用的端口号被释放。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。