【问题标题】:NAT on TCP connectionsTCP 连接上的 NAT
【发布时间】:2017-06-13 22:51:52
【问题描述】:

当我们建立从 PC1 到 Server 的 TCP 连接并通过该连接发送数据时,Router 如何知道在从 Server 回到 PC1 的途中它应该与两台 PC(PC1 和 PC2)中的哪一个进行通信?

还有

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

【问题讨论】:

    标签: networking


    【解决方案1】:

    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 查询标识符)。这允许一个号码的传输标识符 多路复用到一个传输标识符中的私有主机的数量 单个外部地址。 NAPT 允许一组主机共享一个 外部地址。请注意,NAPT 可以与 Basic NAT 结合使用,因此 外部地址池与端口一起使用 翻译。

    对于从私有网络出站的数据包,NAPT 会转换 源 IP 地址、源传输标识符和相关字段 例如 IP、TCP、UDP 和 ICMP 标头校验和。传输标识符 可以是 TCP/UDP 端口或 ICMP 查询 ID 之一。对于入站数据包, 目标 IP 地址、目标传输标识符和 IP 并且传输头校验和被翻译。

    图 2 中的 NAPT 路由器可以配置为转换会话 源自 N-Pri 到单个外部地址,例如 Addr-i。

    很多时候,NAPT路由器的对外接口地址Addr-Nx是 用作将 N-Pri 映射到的地址。

    【讨论】:

    • NAT 路由器如何知道第四层端口号?它会破坏 IP 数据包吗?
    【解决方案2】:

    有大量描述 NAT(网络地址转换)的资源,如果您搜索“nat Explained”,就可以找到这些资源。一个很好的资源是 NAT and how it work tutorial 是什么。

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

    当一个设备需要上网时,它必须打开一个本地(源端口)并将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 设备,然后找到相关信息(源端口 2345 目标 192.168.1.2/1234)。记事本接收信息并将其显示给用户。

    【讨论】:

    • PAT 实际上是用词不当。 RFC 2663, IP Network Address Translator (NAT) Terminology and Considerations, Section 4.1.2, Network Address Port Translation (NAPT) 对其进行了描述:“NAPT 通过转换传输标识符(例如 TCP 和 UDP 端口号、ICMP 查询标识符)进一步扩展了转换的概念。这允许传输标识符多个私有主机的集合被多路复用到单个外部地址的传输标识符中。NAPT 允许一组主机共享单个外部地址。"
    • 感谢您的评论
    • ping (ICMP) 如何知道它应该将答案发送到哪个内部节点?
    • 我认为它在接受的答案中得到了充分解决,它与我给出的示例没有什么不同,因为 NAT 设备基本上拥有更多信息来识别数据包。
    【解决方案3】:

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

    【讨论】:

    • NAT 与第 2 层 (MAC) 地址无关。如果是 NAPT,NAT 会转换第 3 层 (IP) 和可能的第 4 层(TCP 和 UDP)地址(端口)。
    猜你喜欢
    • 2013-12-09
    • 2012-12-06
    • 2017-03-25
    • 2015-11-04
    • 2014-01-10
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多