计算机网络-网络地址转换(NAT)

Aki 发布于 2023-07-05 234 次阅读


每个接入互联网的设备都需要一个IP地址。随着所谓小型办公室,家庭办公室(Small Office,Home Office,SOHO)子网的大量出现,看以来意味着每当一个SOHO想安装一个LAN以互联多台机器时,需要ISP分配一组地址以供该SOHO的所有IP设备使用。如果该子网变大了,则需要分配一块较大的地址。但如果ISP已经为SOHO网络的当前地址范围分配过一块连续地址,该怎么办呢?幸运地是,有一种简单的方法越来越广泛地运用在这些场合:网络地址转换(Network Address Translate)。

上述图中显示了一台NAT使能路由器的运行情况。位于家中的NAT是能路由器有一个接口,是右侧家庭网络的一部分。在家庭网络内的编址的网络地址是10.0.0.0/24。地址空间10.0.0.0/8是保留的三部分IP地址空间之一,这些地址用于入图中的家用网络等专用网络或具有专用地址的地域。具有专用地址的地域是指其地址仅对该网络中的设备有意义的网络。

为了明白它为什么重要,考虑有数十万家庭网络 这样的事实,许多使用了相同的地址空间10.0.0.0/24。在一个给定家庭网络中的设备能够使用10.0.0.0/24编址彼此发送分组。然而,转发到家庭网络之外进入更大的全球因特网的分组显然不能管使用这些地址,因为有数十万的网络使用着这些地址。这就是说10.0.0.0/24地址仅在特定的网络中才有意义。

NAT是能路由器对于外部世界来说甚至不像一台路由器。相反NAT路由器对外界的行为就如同具有单一IP地址的单一设备。上述图中,所有离开家庭路由器流向更大因特网的报文都拥有一个源IP地址138.76.29.7,且所有进入家庭的报文都拥有同一个目的IP地址138.76.29.7.从本质上讲,NAT使能路由器对外界隐藏了家庭网络的细节。(另外,你也许想知道家庭网络计算机是从哪儿得到其地址,路由器又是从哪儿得到它的单一IP地址的。在通常的情况下,答案是相同的,即DHCP!路由器从ISP的DHCP服务器得到它的地址,并且路由器运行一个DHCP服务器,为位于NAT-DHCP路由器控制的家庭网络地址空间中的计算机提供地址)。

如果从广域网到达NAT路由器的所有数据报都有相同的目的IP地址(特别是对NAT路由器广域网一侧的接口),那么该路由器怎么知道它应该将某个分组转发给哪个内部主机呢?技巧是使用NAT路由器上的一张NAT转换表(NAT translation table),并且在该表项中包含了端口号及其IP地址。

考虑上述图中的例子,假设一个用户坐在家庭网络主机为10.0.0.1后,请求IP地址为128.119.40.186的某台web服务器(80端口,http请求)的一个web页面。主机10.0.0.1为其指派了任意源端口号3345并将该数据报发送到LAN中。NAT路由器接收到该数据报,为该数据报生成了一个新的源端口号5001,将源IP地址替换为其广域网一侧的IP地址(这个地址是公网地址!!!)138.76.29.7,且将源端口号替换为5001。此时这个报文的源地址是138.76.29.7,端口为5001。

当生成一个源端口号时,NAT路由器可选择任意一个当前未在NAT转换表中的源端口号。(端口字段长度为16比特,端口号数量为65536个,NAT可支持超过60000个端口并行使用)。路由表中的NAT也在它的NAT转换表中添加这一个表项。web服务器并不知道刚到达的包含http请求的数据报已经被NAT路由器进行了改装,它会发送一个响应报文,其目的地址是NAT路由器的IP地址即138.76.29.7,端口号为5001。由于该地址是一个公网地址,因此很容易经过网络到达NAT路由器,路由器使用目的IP地址和端口号在NAT转换表中检索出家庭网络使用的适当IP地址(10.0.0.1)和端口号(3345)。于是路由器重写该报文的目的IP地址和目的端口号,并向LAN中发送该数据报。最终10.0.0.1主机收到该数据报,其源地址为128.119.40.186,80端口,目的地址为10.0.0.2,3345端口。

NAT的出现在一定程度上解决了IPV4地址数量不足的问题,而且也不会过多的影响效率,有些甚至出现了套娃式的NAT。NAT在近年来已经得到了广泛式的应用。但是NAT并被没有贬低者。首先有人认为端口号是用于进程寻址的,而不是用于主机寻址的。这种违规做法对于运行在家庭网络中的服务器确实会引起问题,因为正如我们在第二章所见,服务器进程在周知端口号上等待入请求,并且P2P协议中的对等方在充当服务器时需要接收入连接。对这些问题的技术解决方案包括了NAT穿越(NAT traversal)和通用即插即用(Universal Plug and Play,UPnP)。UPnP是一种允许主机发现和配置邻接NAT的协议。

不管这些争论,NAT已成为互联网中的一个重要组件,称为所谓的中间盒,它运行在网络层并具有与路由器十分不同的功能。中间盒并不执行传统的数据报转发,而是执行诸如NAT,流量流的负载均衡,流量防火墙等功能。