TCP连接上的NAT

时间:2017-06-07 18:38:51

标签: networking

当我们建立从PC1到服务器的TCP连接并通过此连接发送数据时,路由器如何知道在从服务器到PC1的路上它应该与哪两台PC(PC1和PC2)进行通信?

并且

ping(ICMP)如何知道应该向哪个内部节点发送答案?

3 个答案:

答案 0 :(得分:2)

NAT(网络地址转换)是有状态的。它创建了一个包含第3层和第4层协议和地址的转换表。通过查找转换表中的返回流量地址,NAT进程可以确定应该在数据包中放置哪些内部地址。

修改

根据您的问题的编辑,询问ICMP(更改问题是非常糟糕的形式,以便提出不同的问题,因为它可以使已经给出的完全可接受的答案无效):

它与TCP或UDP完全相同。 NAT创建一个状态表,当流量从内部传递到外部时动态构建。 NAPT将允许您使用来自多个内部地址的流量来重载单个IP地址,并且它将通过查找在其状态表中将其发送到何处来转换返回流量。

使用NAPT,除了查看和翻译IP地址外,NAPT还会查看第4层协议(TCP,UDP,ICMP)并转换第4层地址(TCP或UDP端口号或ICMP标识),将翻译存储在其翻译表中。当返回流量指向特定的第3层和第4层地址组合时,从特定的第3层和第4层地址组合,NAPT进程在其转换表中找到它,并且它可以看到在哪里发送流量在里面。

NAT是非常耗费资源的,它打破了端到端连接的IP范例,其中每个主机都由其自己的IP地址唯一标识,这就是为什么它被称为kludge(或更糟)。开发NAT是为了延长IPv4的寿命,直到IPv6,其几乎无限的寻址,可以无处不在。

RFC 2663, IP Network Address Translator (NAT) Terminology and Considerations

  

4.1.2。网络地址端口转换(NAPT)

     

NAPT也进一步扩展了翻译的概念   转换传输标识符(例如,TCP和UDP端口号,ICMP   查询标识符)。这允许数字的传输标识符   私有主机被多路复用到a的传输标识符中   单个外部地址。 NAPT允许一组主机共享一个主机   外部地址。请注意,NAPT可以与基本NAT结合使用   外部地址池与端口一起使用   翻译。

     

对于从专用网络出站的数据包,NAPT将进行转换   源IP地址,源传输标识符和相关字段   例如IP,TCP,UDP和ICMP头校验和。运输标识符   可以是TCP / UDP端口或ICMP查询ID之一。对于入站数据包,   目标IP地址,目标传输标识符和IP   转换传输标头校验和。

     

图2中的NAPT路由器可以配置为翻译会话   来自N-Pri的单个外部地址,比如Addr-i。

     

NAPT路由器的外部接口地址Addr-Nx经常是   用作将N-Pri映射到的地址。

答案 1 :(得分:2)

有一个描述NAT(网络地址转换)的大量资源,如果您搜索“nat explain”,则可以使用该资源。一个很好的资源是什么是NAT and how it work tutorial

最重要的细节是我们通常使用NAPT(通常用作PAT - 端口地址转换)(网络地址和端口转换)以及NAT。

当设备需要使用Internet时,它必须打开本地(源端口)并将IP请求发送到另一端。例如,源IP地址为192.168.1.2的记事本需要与216.58.212.35的Web服务器通信。

它会激活随机源端口1234并从目标端口80(HTTP - 网页)请求信息。

这通过网络NAT设备,它将信息192.168.1.2/1234与其计算的下一个信息一起存储,并将请求发送为46.103.93.105(它自己的IP公共IP)和一个新的源端口,例2345。

Web服务器响应NAT设备,NAT设备又查找相关信息(源端口2345的目标是192.168.1.2/1234)。记事本接收信息并将其显示给用户。

答案 2 :(得分:0)

路由器将信息添加到发送到服务器的请求标头,以便在收到回复时查找发件人。这通常是通过使用存储在路由器内存中的表来实现的,该表将PC的地址映射到添加到标题中的令牌。