Nodejs TCP连接客户端端口分配

2024-04-10

我使用nodejs在客户端和服务器之间创建了tcp连接(网络模块 https://nodejs.org/api/net.html)。服务器正在侦听已经预定义的端口,并且客户端正在连接到该端口。

据我了解客户端的端口是由节点动态分配的?那是对的吗?

  1. 节点使用什么样的算法为客户端分配“随机”端口?这是如何工作的,这是由节点还是操作系统决定的?
  2. 是否可以定义客户端要使用的静态端口?是否可以定义客户端使用的端口范围?

注意:我想我发现了类似主题的讨论/问题堆栈溢出 https://stackoverflow.com/以前有,但现在找不到了。如果您能分享有关此主题的任何可靠资源,我将不胜感激。


源端口号通常与您的编程几乎无关,除非您的路由器或防火墙在这方面有某种限制。它仅被底层 TCP 基础设施用来跟踪不同的 TCP 连接。

From 本文 https://idea.popcount.org/2014-04-03-bind-before-connect/:

TCP/IP 连接由四元素元组标识:{源 IP, 源端口、目的IP、目的端口}。建立 TCP/IP 连接只需要目标IP和端口号, 操作系统自动选择源IP和端口。

上面引用的文章描述了Linux如何选择源端口号。

至于你的具体问题:

节点使用什么样的算法来分配“随机”端口 客户?这是如何工作的,这是由节点还是操作系统决定的?

它由操作系统决定。在与 Node.js 建立连接之前,源端口号是由原始主机在 TCP 级别选择的。

其他一些参考文章:

每个主机的 TCP 源端口是否必须是唯一的? https://serverfault.com/questions/326819/does-the-tcp-source-port-have-to-be-unique-per-host

应用程序如何使用端口 80/HTTP 而不与浏览器发生冲突? https://stackoverflow.com/questions/2957757/how-can-an-application-use-port-80-http-without-conflicting-with-browsers


注意:据我所知,防火墙没有限制源端口号或阻止某些源端口号的安全原因。它们只是 TCP 记账编号,与安全性或所使用的服务类型完全无关。请注意,这与目标端口不同,目标端口通常与所使用的服务类型直接相关(例如,80 是 HTTP,25 是 SMTP,143 是 IMAP 等......当您与不同主机建立 TCP 连接时,您指定主机地址和目标端口号,但不指定源端口号。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nodejs TCP连接客户端端口分配 的相关文章