NAT技术

目录

前言

IP地址短缺问题并不是一个只有在将来某个时候可能发生的理论问题。现在,此时此地,这个问题已经发生。对于整个Internet而言,长期的解决方案是迁移到IPV6,它有128位地址。这个迁移过程正在缓慢地进行着,可能需要很长一段时间才可以完成。

为了在IPV6迁移的期间找到临时方案,今天普遍使用的解决方案是网络地址转换(NAT)。

一、NAT的基本思想

NAT的基本思想是Internet服务提供商(ISP,Internet Service Provider)为每个家庭或企业分配一个IP地址(或者,最多分配少量的IP地址),用这个IP地址来传输Internet流量。在客户网络内部,每台计算机有唯一的IP地址,该地址主要用来路由内部流量。当一个数据需要离开客户网络,发向其他ISP时,它需要执行一个地址转换,把内部唯一的IP地址转换成那个共享的IP地址。

通常,我们把由ISP分配的IP地址称为公网IP;
在客户网络内部的每一台计算机的IP地址称为私网IP,一般由一个DHCP服务器自动分配。

这种地址转换使用了IP地址的三个范围,这些地址已经被声明为私有化。任何网络可以在内部随意地使用这些地址。仅有的规则是不允许包含这些地址的数据包出现在Internet上 。这3个保留的地址范围为:

NAT的操作过程如下:

当一个数据包离开客户驻地时,首先经过一个NAT盒子(NAT box),NAT盒子将数据包的内部的IP地址(图中为10.0.0.1,私网IP)转换成客户拥有的真实IP地址(图中为198.60.42.12,公网IP)。

NAT盒子通常与防火墙组合成一个单一的设备,防火墙提供一种安全机制,它仔细地控制着进出客户网络的流量。

现在,NAT盒子一般集成到路由器或ADSL调制解调器中。

当一个数据包从客户网络经过地址转换之后发往Internet后,当应答数据包返回时(比如从Web服务器返回的应答包),本质上它的目标IP地址是198.60.42.12,也就是说应答包的目标IP地址。那么,当NAT收到这个包后,如何将应答数据包发给哪个客户网络的IP地址(私网IP)?

NAT的设计者们注意到,大多数IP数据包携带的要么是TCP有效载荷,要么是UDP有效载荷。无论是TCP,还是UDP,这两个协议的头都包含了一个源端口和目标端口字段。
NAT设计者利用发送方的源端口字段去解决这个问题 。下面以TCP头的源端口为例说明:
任何时候当出境数据包进入NAT盒子,其源地址10.0.0.1被真实的IP地址198.60.42.12取代,而且TCP的源端口(Source Port)字段被一个索引值取代,该索引值指向NAT盒子的地址转换表中的65536表项之一。该表项包含了原来的IP地址和原来的源端口。最后,NAT盒子重新计算IP头和TCP头的校验和,并将校验和插入到数据包中。(注:下图只是说明过程,并非真实的数据包格式和转换表)

当一个数据包从ISP到达NAT盒子时,从TCP头取出源端口字段,得到索引值,更加索引值查找NAT盒子的映射表。找到对应的表项后,从该表项提取出内部IP地址和原来的TCP源端口,并将它们插入到数据包中。然后重新计算IP和TCP校验和,并插入到数据包中。最后将该数据包传递给客户内部的路由器,它使用10.x.y.z地址进行正常的路由。

二、NAT的局限性

第一、因为NAT盒子上的映射是由出境数据包建立的,只能在出境数据包之后到达的入境数据包才能被接受。这意味着,家庭网络用户可以通过NAT与一台远程Web服务器建立TCP/IP连接,但远程用户无法与家庭网络的一台游戏服务器建立连接,这种情况需要特殊的配置技术或NAT穿越技术。

第二、NAT违反了最基本的协议分层规则,第K层不应该对第K+1层在本层的有效载荷中放什么做任何假设。

第三、Internet上的进程并不一定必须使用TCP或UDP。如果机器A上的一个用户觉得使用一种新的传输协议与机器B上的用户进行通话,那么,由于NAT的介入,这样的应用将无法工作。

第四、有些应用以规定的方式是使用多个TCP/IP连接或者UDP端口。例如,标准的文件传输协议(FTP,File Transfer Protocol)在数据包正文插入IP地址,接受正文提取这些地址,并使用它们。但NAT对这次安排一无所知,那么就无法进行正确的传输。

总结

相关推荐
不过普通话一乙不改名26 分钟前
Linux 网络发包的极致之路:从普通模式到 AF_XDP ZeroCopy
linux·运维·网络
4***17541 小时前
linux 网卡配置
linux·网络·php
XiaoCCCcCCccCcccC2 小时前
多路复用 poll -- poll 的介绍,poll 的优缺点,poll 版本的 TCP 回显服务器
服务器·网络·c++
陈奕昆3 小时前
n8n实战营Day2:复杂逻辑控制·HTTP请求+条件分支节点实操
网络·人工智能·python·网络协议·n8n
h***04773 小时前
IEEE 1588:电信网络的精确时间协议 (PTP)
网络
Han.miracle3 小时前
JavaEE-- 网络编程 http请求报头
运维·服务器·网络·网络协议·计算机网络·http
SKYDROID云卓小助手4 小时前
三轴云台之控制协同技术
服务器·网络·图像处理·人工智能·算法
虹科网络安全4 小时前
艾体宝洞察 | 图数据驱动:网络安全威胁管理从分散情报到攻击图谱
网络·安全·web安全
last demo6 小时前
fail2ban实验
linux·运维·服务器·网络
googleccsdn6 小时前
ENSP Pro Lab笔记:配置STP/RSTP/MSTP(7)
网络·笔记·网络协议