为什么一个端口不能同时用于传入和传出流量?

网络工程 路由 ip
2021-07-23 04:10:41

我正在尝试了解与网络端口相关的内容,因为我不太清楚。

问题是,为什么不能对传入和传出流量使用相同的端口号?

这个问题是由于一些关于 NAT 端口转发的建议而产生的。

据我所知,IP 数据包标头包含源地址和目标地址的字段,我想这就是您确定数据包是传入还是传出所需的全部信息。

我意识到这是一个简单的问题。如果有您可以向我指出的学习资源,您认为这些资源有助于从基础知识建立对网络的更深入理解,我会很感激这些链接,即使有很多东西需要学习。

谢谢。

4个回答

你可以,有些协议可以(isakmp),但它不是很灵活。有两个缺点:

  1. 您只能拥有一个数据流。典型的 Web 浏览器与 Web 服务器建立多个 tcp 连接以提高性能。这就是为什么您经常看到文本出现在网页上的图形之前。你不能只用一个流来做到这一点。
  2. 主机可以同时作为客户端和服务器。如果端口号相同,您也不能这样做。

最终,使用众所周知的端口作为目标端口和临时端口提供最大的灵活性。

物理端口可以并且用于接收和发送,除非该端口已被专门配置为半双工。

我认为您感到困惑的是与物理端口无关的实际端口源和目标。

当涉及到 NAT 时,目的端口号和源端口号会有所不同。位于提供服务的服务器上的目标端口号,例如用于 HTTP 的端口 80。软件将在此端口号上接收许多连接请求,并且软件将需要为进入的每个连接区分不同的进程。

源端口号将是一个随机选择的上层端口,不用于任何特定服务,这将驻留在客户端设备上,因为它们是连接的源。这也有助于软件区分为不同客户端建立的各种连接。想象一下有数百个同时连接的 HTTP 服务器,更不用说浏览器将在端口 80 本身作为目的地进行的不同连接。当数据回来时,它依靠源端口号告诉软件数据在堆栈模型的上层中的目的地。

NAT 使用源端口号来管理进行 NAT 的不同连接。如果它们都使用相同的源端口,那么使用它的表的 NAT 将无法区分不同的连接,并且知道它需要将数据转发到本地网络上的哪里。所以源端口被映射到一个只要 TCP 连接仍然存在,就在 NAT 内部的本地 IP 地址。

为了更好地了解正在发生的事情并了解为什么源端口不能相同,请查看此资源:

http://www.firewall.cx/networking-topics/protocols/tcp/133-tcp-source-destination-ports.html

http://www.firewall.cx/networking-topics/network-address-translation-nat/233-nat-overload-part-1.html

希望这对您的追求有所帮助。

困人

如果您的问题是关于与 UDP 或 TCP 关联的服务端口,那么对于传入和传出流量使用相同的端口是没有异议的。传入和传出流量都与其方向无关。

当应用程序托管在 webserver 上时。应用程序托管在特定服务端口示例 tcp-443 或任何其他端口上。最初,服务必须处于服务器端特定端口的侦听模式,在这种情况下,当流量传入时,此特定端口应在其通往目的地的路径上在网络级别打开。同样的情况也适用于出站流量。

在网络中,我们经常谈到物理和逻辑。物理端口实际上是成对的链路 - 1 个发送和 1 个接收,TX 和 RX。逻辑端口在软件中定义,例如IP 堆栈

例如,T1 物理端口的速率为 1.544Mbps - 双向。它实际上是两个链接-发送和接收。以太网也是如此。

在此处输入图片说明