面试题答案
一键面试NAT(网络地址转换)工作原理
NAT 是一种将一个 IP 地址域映射到另一个 IP 地址域的技术,主要用于实现私有网络与公共网络之间的通信。它允许在一个内部网络中使用私有 IP 地址(如 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16),然后通过 NAT 设备将这些私有 IP 地址转换为合法的公共 IP 地址,以便与外部网络通信。
NAT 设备维护一个转换表,该表记录了内部私有 IP 地址与外部公共 IP 地址的映射关系。当内部主机发送数据包到外部网络时,NAT 设备修改数据包的源 IP 地址为其自身的公共 IP 地址,并记录这个映射关系到转换表中。当外部网络返回响应数据包时,NAT 设备根据转换表将目标 IP 地址转换回内部主机的私有 IP 地址,然后将数据包转发给内部主机。
端口转发的作用
端口转发是 NAT 中的一个重要功能,它允许将外部网络对特定端口的请求转发到内部网络中指定主机的特定端口上。这使得内部网络中的服务器(如 Web 服务器、FTP 服务器等)能够被外部网络访问,即使它们使用的是私有 IP 地址。
通过端口转发,NAT 设备可以将外部网络对公共 IP 地址某个端口(如 80 端口用于 HTTP 服务)的请求,映射到内部网络中运行 Web 服务器的主机的相应端口(如 80 端口)。这样,外部用户可以通过访问 NAT 设备的公共 IP 地址和指定端口,间接访问到内部网络中的服务器。
内部网络主机通过 NAT 访问外部服务器的数据转换过程
- 内部主机发送数据包:内部主机使用其私有 IP 地址和一个随机选择的源端口号(假设为 10000),构建要发送到外部服务器的数据包,目标 IP 地址为外部服务器的公共 IP 地址,目标端口号为服务器提供服务的端口号(如 Web 服务器的 80 端口)。
- NAT 设备接收并转换数据包:NAT 设备接收到内部主机发送的数据包,检查其转换表。如果没有合适的映射关系,NAT 设备会选择一个未使用的公共 IP 地址(假设为 202.100.100.100)和一个外部端口号(假设为 50000),并在转换表中记录这个映射关系(内部私有 IP 地址 192.168.1.10:10000 -> 外部公共 IP 地址 202.100.100.100:50000)。然后,NAT 设备修改数据包的源 IP 地址为 202.100.100.100,源端口号为 50000,再将数据包转发到外部服务器。
- 外部服务器响应:外部服务器接收到数据包,认为是从 202.100.100:50000 发送过来的请求,处理请求后构建响应数据包,将目标 IP 地址设置为 202.100.100.100,目标端口号设置为 50000,然后将响应数据包发送回 NAT 设备。
- NAT 设备再次转换并转发数据包:NAT 设备接收到外部服务器的响应数据包,根据转换表中的映射关系,将目标 IP 地址转换回内部主机的私有 IP 地址 192.168.1.10,目标端口号转换回 10000,然后将数据包转发给内部主机。内部主机接收到响应数据包,就像直接与外部服务器通信一样。