NAT(网络地址转换,Network Address Translation)
NAT(网络地址转换,Network Address Translation)
又称IP动态伪装(英語:IP Masquerade)
参考:
- RFC 2663
- NAT(网络地址转换协议),全但排版巨丑
- 23 张图详解路由协议:计算机网络的核心技术,美观,但主要讲路由协议而非NAT
- 图文并茂详解 NAT 协议!,主要补充NAT-PT
概念
作用
作用:
- 内网上外网
- 当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。
- 这种方法需要在专用网(私网IP)连接到因特网(公网IP)的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址(公网IP地址)。这样,所有使用本地地址(私网IP地址)的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。
- 宽带分享:这是 NAT 主机的最大功能
- 解决IP地址不足
- (诞生背景)有助于减缓可用的IP地址空间的枯竭
- 安全性
- 隐藏并保护网络内部的计算机
- NAT 之内的 PC 联机到 Internet 上面时,他所显示的 IP 是 NAT 主机的公共 IP,所以 Client 端的 PC 当然就具有一定程度的安全了。 外界在进行 portscan(端口扫描) 的时候,就侦测不到源 Client 端的 PC 。
不属于协议
NAT(Network Address Translation)严格来说不属于协议,而是一种技术或方法,用于在IP地址间进行转换。
与NAT相关的协议:
- 如TCP和UDP。在NAT过程中,特别是当进行端口地址转换(PAT)时,路由器或防火墙需要查看TCP或UDP头部信息(如源端口和目标端口),来正确地进行地址和端口的转换。
- 然而,这并不意味着路由协议与NAT没有关系。例如,静态路由协议可能被用于配置NAT设备,以使其知道应将哪些地址翻译为其他地址。而在更复杂的环境中,动态路由协议(如RIP,OSPF等)也可以与NAT一起使用,以实现更复杂的网络地址转换需求。
总的来说,NAT主要与传输层协议如TCP/UDP相关,而路由协议可以根据需要与NAT一起使用,来完成更复杂的网络需求。
ISO作用
NAT协议通常工作在网络层(第三层)和传输层(第四层)之间
局限性
NAT违反了IP地址结构模型的设计原则。
IP地址结构模型的基础是每个IP地址均标识了一个网络的连接,Internet的软件设计就是建立在这个前提之上。
而NAT使得有很多主机可能在使用相同的地址,如10.0.0.1。
NAT使得IP协议从面向无连接变成面向连接
NAT违反了基本的网络分层结构模型的设计原则
- 因为在传统的网络分层结构模型中,第N层是不能修改第N+1层的报头内容的。NAT破坏了这种各层独立的原则。
有些应用是将IP地址插入到正文的内容中,例如标准的FTP协议与IP Phone协议H.323。
NAT同时存在对高层协议和安全性的影响问题。
- RFC对NAT存在的问题进行了讨论。NAT的反对者认为这种临时性的缓解IP地址短缺的方案推迟了Ipv6迁移的进程,而并没有解决深层次的问题,他们认为是不可取的。
历史背景
要真正了解NAT就必须先了解现在IP地址的使用情况,私有 IP 地址是指内部网络或主机的IP 地址,公有IP 地址是指在因特网上全球唯一的IP 地址。RFC 1918 为私有网络预留出了三个IP 地址块,如下:
- A 类:10.0.0.0~10.255.255.255
- B 类:172.16.0.0~172.31.255.255
- C 类:192.168.0.0~192.168.255.255
上述三个范围内的地址不会在因特网上被分配,因此可以不必向ISP 或注册中心申请而在公司或企业内部自由使用。 [1]
随着接入Internet的计算机数量的不断猛增,IP地址资源也就愈加显得捉襟见肘。事实上,除了中国教育和科研计算机网(CERNET)外,一般用户几乎申请不到整段的C类IP地址。在其他ISP那里,即使是拥有几百台计算机的大型局域网用户,当他们申请IP地址时,所分配的地址也不过只有几个或十几个IP地址。显然,这样少的IP地址根本无法满足网络用户的需求,于是也就产生了NAT技术。
虽然NAT可以借助于某些代理服务器来实现,但考虑到运算成本和网络性能,很多时候都是在路由器上来实现的。
实现方式
三种实现
NAT的实现方式有三种:
- 静态转换 Static Nat
- 动态转换 Dynamic Nat
- 端口多路复用 OverLoad
静态转换
静态转换是指将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。借助于静态转换,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问。
动态转换
动态转换是指将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,是随机的,所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址。也就是说,只要指定哪些内部地址可以进行转换,以及用哪些合法地址作为外部地址时,就可以进行动态转换。动态转换可以使用多个合法外部地址集。当ISP提供的合法IP地址略少于网络内部的计算机数量时。可以采用动态转换的方式。
PAT(端口多路复用,Port Address Translation)
端口多路复用 是指改变外出数据包的源端口并进行端口转换,即端口地址转换(PAT,Port Address Translation).采用端口多路复用方式。内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,从而可以最大限度地节约IP地址资源。同时,又可隐藏网络内部的所有主机,有效避免来自internet的攻击。因此,目前网络中应用最多的就是端口多路复用方式。
ALG(应用程序级网关技术,Application Level Gateway)
ALG,即应用程序级网关技术:传统的NAT技术只对IP层和传输层头部进行转换处理,但是一些应用层协议,在协议数据报文中包含了地址信息。为了使得这些应用也能透明地完成NAT转换,NAT使用一种称作ALG的技术,它能对这些应用程序在通信时所包含的地址信息也进行相应的NAT转换。例如:对于FTP协议的PORT/PASV命令、DNS协议的 "A" 和 "PTR" queries命令和部分ICMP消息类型等都需要相应的ALG来支持。
0
如果协议数据报文中不包含地址信息,则很容易利用传统的NAT技术来完成透明的地址转换功能,通常我们使用的如下应用就可以直接利用传统的NAT技术:HTTP、TELNET、FINGER、NTP、NFS、ARCHIE、RLOGIN、RSH、RCP等。
NAPT
NAPT(Network Address Port Translation),即网络地址端口转换,可将多个内部地址映射为一个合法公网地址,但以不同的协议端口号与不同的内部地址相对应,也就是与之间的转换。NAPT普遍用于接入设备中,它可以将中小型的网络隐藏在一个合法的IP地址后面。NAPT也被称为“多对一”的NAT,或者叫PAT(Port Address Translations,端口地址转换)、地址超载(address overloading)。
NAPT与动态地址NAT不同,它将内部连接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT设备选定的TCP端口号。NAPT算得上是一种较流行的NAT变体,通过转换TCP或UDP协议端口号以及地址来提供并发性。除了一对源和目的IP地址以外,这个表还包括一对源和目的协议端口号,以及NAT盒使用的一个协议端口号。
NAPT的主要优势在于,能够使用一个全球有效IP地址获得通用性。主要缺点在于其通信仅限于TCP或UDP。当所有通信都采用TCP或UDP,NAPT允许一台内部计算机访问多台外部计算机,并允许多台内部主机访问同一台外部计算机,相互之间不会发生冲突。 [2]
穿透方法
目前常用的针对UDP的NAT 穿透(NAT Traversal)方法主要有:STUN、TURN、ICE、uPnP等。其中ICE方式由于其结合了STUN和TURN的特点,所以使用最为广泛。针对TCP的NAT穿透技术目前仍为难点。实用的技术仍然不多。
路由协议(Routing protocol)
路由表
区别:路由表、ARP表、NAT表
- 映射关系不同:NAT表是IP到IP,ARP表是IP到MAC
- 维护/老化等可能不同?
- 学习方式可能不同?
GPT4
路由表
路由表是一种让路由器知道如何将数据包路由到其目的地的表格。这种表格包含了关于网络中所有其他路由器的信息,以及它们到达目的地的路径。路由表中的每个条目都包含一个网络目标(即网络地址)和下一步的路由器地址。
ARP表
ARP(Address Resolution Protocol)表,即地址解析协议表,是存储在网络设备中的一种表格,用于映射网络层(IP地址)到链路层(MAC地址)的地址。当一个设备需要将数据包发送到另一个设备时,它将查阅ARP表,以确定接收设备的MAC地址。如果ARP表中没有相关的映射信息,发送设备将通过ARP协议请求接收设备的MAC地址,并更新ARP表。
NAT表
NAT(Network Address Translation)表,即网络地址转换表,是一种在网络设备(如路由器)上执行IP地址转换的技术。它允许一个IP地址的设备与另一个IP地址的设备进行通信,即使这些设备在不同的网络上。例如,在家庭网络中,路由器使用NAT表将私有(内部)IP地址转换为公共(外部)IP地址,这样家庭网络中的设备就可以与互联网上的设备进行通信。
区别
- 数据处理阶段
- 路由表:主要在网络层处理和转发IP包
- ARP表:主要在数据链路层处理MAC地址和IP地址的转换
- NAT表:主在网络层处理私网IP和公网IP的转换。
- 作用和功能
- 路由表:负责决定IP数据包的转发路径,目标是找到最佳路径将数据包送达目标地址
- ARP表:负责解析并存储网络中设备的IP地址和MAC地址的对应关系,目的是获取目标设备的MAC地址以保证数据包能够成功在本网络中传递
- NAT表:负责转换私有IP地址和公共IP地址,目的是在有限的公网IP地址下,能够使更多的私有网络设备能够访问公网。
- 存储位置
- 路由表、ARP表和NAT表都是存储在网络设备上的
- 路由表:存储在路由器上
- ARP表:可能存储在交换机或者计算机上
- NAT表:通常存储在执行NAT功能的设备,如防火墙或路由器上
- 更新方式
- 路由表:更新通常通过路由协议(如RIP,OSPF等)自动完成
- ARP表:更新通过ARP协议,当需要的IP地址和MAC地址映射关系不存在时,会发送ARP请求并更新ARP表;
- NAT表:更新则是在需要进行网络地址转换时动态创建的。
- 生存周期
- 路由表:生存周期比较长,只有网络拓扑发生变化时才会被更新;
- ARP表:生存周期较短,通常在一段时间后需要进行刷新
- NAT表:生命周期取决于NAT会话,当会话结束时,相关的NAT表项就会被删除。
分类
一个实际的网络中,一台路由器通常包含多条路由条目,这些路由条目从不同的来源获取。路由表的来源可分为三类:
- 直连路由:路由器直接连接的路由条目,只要路由器接口配置了 IP 地址,接口状态正常,就会自动生成对应的直连路由
- 静态路由:通过命令手动添加的路由条目就是静态路由
- 动态路由:通过路由协议从相邻路由器动态学习到的路由条目