Nodejs TCP连接客户端端口分配

我使用nodejs( networking模块 )在客户端和服务器之间创build了tcp连接。 服务器正在侦听已经预定义的端口,并且客户端正在连接到该端口。

据我了解端口为客户端dynamic分配的节点? 那是对的吗?

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

注:我认为我发现之前stackoverflow上类似的主题讨论/问题,但我找不到它了。 我会apprecaite如果你能分享任何可靠的资源有关这个问题。

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

从这篇文章 :

TCP / IP连接由四元组元组来标识:{源IP,源端口,目标IP,目标端口}。 要build立TCP / IP连接,只需要目标IP和端口号,操作系统将自动select源IP和端口。

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

至于你的特定问题:

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

这是由操作系统决定的。 该源端口号在连接到node.js之前由TCP层的始发主机select。

其他一些参考文章:

每个主机的TCP源端口是否必须是唯一的?

应用程序如何使用端口80 / HTTP而不与浏览器冲突?


注意:我没有安全的原因,我知道防火墙限制源端口号或阻止某些源端口号。 它们只是一个TCP簿记号码,根本不涉及安全性或使用的服务types。 注意,这与通常与所使用的服务types直接相关的目标端口是不同的(例如,80是HTTP,25是SMTP,143是IMAP等等)。当您build立到不同主机的TCP连接时,您指定主机地址和目标端口号,不指定源端口号。

所选答案提供了大量的信息,但不涉及潜在的问题。 节点似乎不允许https.request为客户端指定一个端口。 有localAddress和localPort选项,但它们似乎被破坏。

我在这个问题上提出了一个新的问题。 希望有人会回答“不要那样做”以外的东西。

有没有一种方法来设置节点js https请求的源端口?