端口地址转换中的端口号和私有 IP 地址

网络工程 路由 ipv4 ip 纳特
2021-07-07 02:58:45

抱歉,我在网络方面的知识有限。

如果我理解正确,端口号是用于网络通信的应用程序级地址,例如端口号 20 被分配给 FTP。

在 PAT 中,我们将一个外部 IP 地址映射到多个内部地址。映射使用端口号,如下图所示。

在此处输入图片说明

这里的端口号是 1000、1001、1002。

我的问题是,如果本地网络中的所有主机都尝试同时使用 FTP(端口号 20)连接远程机器,映射将如何?。这种情况下如何在发送和接收数据包时唯一标识本地机器?

4个回答

端口是由一些使用的地址传送层协议,不应用地址。

NAPT 的 NAT 表(PAT 确实用词不当,请参阅RFC 2663,IP 网络地址转换器 (NAT) 术语和注意事项)将使用源和目标 IPv4 和传输地址,并为传输协议提供一个随机端口。

远程主机上的传输地址将多路复用以允许不同的连接。Web 服务器一直这样做。Web 浏览器为了同时获取多个页面元素而打开从主机到 Web 服务器的多个 TCP 连接并不少见,并且服务器和浏览器在它们之间保持单独的连接。RFC 793,传输控制协议解释了多路复用和连接:

多路复用:

为了允许单个主机内的多个进程同时使用 TCP 通信设施,TCP 在每个主机内提供了一组地址或端口。与来自互联网通信层的网络和主机地址连接,形成一个套接字。一对套接字唯一标识每个连接。也就是说,一个套接字可以同时用于多个连接。

端口与进程的绑定由每个主机独立处理。然而,将经常使用的进程(例如,“记录器”或分时服务)附加到公知的固定套接字被证明是有用的。然后可以通过已知地址访问这些服务。建立和学习其他进程的端口地址可能涉及更多的动态机制。

连接:

上面描述的可靠性和流量控制机制要求 TCP 为每个数据流初始化和维护某些状态信息。这些信息(包括套接字、序列号和窗口大小)的组合称为连接。每个连接由一对标识其两侧的套接字唯一指定。

当两个进程希望通信时,它们的 TCP 必须首先建立连接(初始化每一方的状态信息)。当他们的通信完成时,连接被终止或关闭以释放资源以供其他用途。

由于必须在不可靠的主机和不可靠的互联网通信系统之间建立连接,因此使用具有基于时钟的序列号的握手机制来避免连接的错误初始化。

您不能将(私有)IP 地址映射到(公共)IP:port组合。NAT 路由器总是将IP:port映射IP:port组合。

对于私有到公共连接(动态源 NAT),这些映射有些随机并且会随着时间而变化。私有端口由客户端选择,公共端口从 NAT 路由器的池中选择。

要启用从公共到私有(NAT 路由器后面的主机)的连接,路由器公共 IP 上的公共端口需要静态映射到私有 IP:端口组合(目标 NAT)。

PAT 是端口地址转换,而来自内部网络的私有 ip 地址转换为分配的出口接口公共 ip 地址。

通常端口地址转换(PAT)用于访问互联网资源。它用于出站连接。

我们可以在流量日志中看到源端口和目标端口。目标端口是用于托管应用程序的应用程序服务的端口。源端口是由 NAT 表随机生成的,用于参考目标反向流量,以纠正发起流量的来源。

TCP 或 UDP 数据包有两个端口号,一个源端口号和一个目标端口号。在回复数据包时,约定是将目标地址与源地址以及目标端口号与源端口号交换。

通常的约定是服务器使用众所周知的端口号,而客户端使用临时端口号。这意味着多个客户端可以连接到同一个服务,即使这些客户端运行在同一台计算机上。

NAPT 正是利用了这一功能。当NAPT实现修改源IP时,它也可以修改源端口号。传出数据包的目标端口号保留其原始值。所以请求仍然传递到正确的服务器。

当响应返回时,NAPT 可以在它的映射表中查找目标地址和端口并将它们转换回来,以便将请求发送到正确的客户端。