在观看《后端入门 - 网络与部署L1:网络交互之网络接入》 时看到了NAT技术这个名词,以及记不太清计网教过的内容,趁此机会简单复习一下
概述
NAT ( Network Address Translation ) 中文意思是"网络地址转换",是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术。NAT 可以让那些使用私有地址的内部网络连接到Internet或其它IP网络上。NAT路由器在将内部网络的数据包发送到公用网络时,在IP包的报头把私有地址转换成合法的IP地址。
NAT有几种不同的类型,主要包括:
- 静态NAT:将一个私有IP地址映射到一个公共IP地址。使用场景通常是需要将内部设备暴露给外部网络(例如,Web服务器)。
- 动态NAT:将私有IP地址池映射到公共IP地址池中的一个公共IP地址。动态NAT在内部设备请求访问外部网络时随机选择一个公共IP地址。
- 端口地址转换(PAT) :又称为“网络地址端口转换”,是最常用的NAT形式。它允许多个内部设备通过同一个公共IP地址访问外部网络,使用不同的端口号来区分不同的会话。
工作原理
NAT工作在网络层,通常配置在路由器或防火墙上。其基本原理是在数据包通过NAT设备时,修改数据包的源IP或目标IP地址。
- 源地址转换:当内部网络中的设备向外部网络发送数据包时,NAT设备将源IP地址替换为其公共IP地址,并在NAT表中记录此映射关系。
- 目标地址转换:当外部设备向内部网络发送数据包时,NAT设备将目标IP地址替换为相应的内部IP地址。
实例
假设有一个家庭网络,内部有多个设备(如计算机、手机和智能电视),它们使用私有IP地址进行通信。这些设备通过一个NAT路由器连接到互联网。家庭网络的公共IP地址是 203.0.113.5。
-
内部设备IP地址:
- 计算机:
192.168.1.2 - 手机:
192.168.1.3 - 智能电视:
192.168.1.4
- 计算机:
假设计算机(192.168.1.2)想要访问一个外部网站。数据包的源IP地址是 192.168.1.2,目标IP地址是 93.184.216.34。
-
NAT转换: 当计算机发送数据包到NAT路由器时,路由器会检查数据包的源IP地址。 NAT路由器将源IP地址
192.168.1.2替换为其公共IP地址203.0.113.5,并为这个连接分配一个唯一的端口号(假设为50001)。 数据包经过转换后,变为:- 源IP地址:
203.0.113.5:50001 - 目标IP地址:
93.184.216.34
- 源IP地址:
-
NAT表记录:NAT路由器在其NAT表中记录这个映射关系,以便后续的返回数据包能够正确路由。 映射关系:
192.168.1.2:50000↔203.0.113.5:50001 -
外部网站的响应: 外部网站 处理请求并发送响应数据包,源IP地址是
93.184.216.34,目标IP地址是203.0.113.5,端口是50001。 -
NAT路由器的反向转换:NAT路由器接收到来自外部网站的响应数据包。查看NAT表,找到与
203.0.113.5:50001对应的内部IP地址。 NAT路由器将目标IP地址203.0.113.5替换为192.168.1.2,并将目标端口号50001去掉(因为内部设备不需要端口号)。 数据包经过转换后,变为:- 源IP地址:
93.184.216.34 - 目标IP地址:
192.168.1.2
- 源IP地址:
-
内部设备接收数据:最终,响应数据包被发送到计算机
192.168.1.2,该计算机可以处理响应并与外部网站继续通信。
要点
1、路由器本质上就是一个NAT
内部用户通过NAT的设备,修改我的源地址。比如内部局域网的地址都是192,很多内部比如公司A和公司B可以用重复IP地址,都是192,但是连接到互联网设备的外部地址上都是一个全局唯一的外网地址,就是NAT服务器上的,这时就把不同的地址映射到了一个地址去做联网,这样就节约了一个IPV4的地址。
2、NAT是否只是改了一个IP地址呢?
NAT其实是IP + 端口一起去改变,这样就可以解决PPT中的第二个问题:多个内网客户端访问同一个目标地址+端口,源端口恰好一样,冲突该怎么解决?为防止冲突,自己在NAT设备上维护一张表,每次有现在正在存在的连接的时候,端口选择另外一个就可以了。