Nodejs TCP连接客户端端口分配

时间:2015-06-01 22:30:46

标签: node.js tcp

我使用nodejs(net module)在客户端和服务器之间创建了tcp连接。服务器正在侦听已预定义的端口,客户端正在连接到该端口。

据我所知,客户端的端口是由节点动态分配的?那是对的吗?

  1. 什么样的算法节点用于分配"随机"客户端口?这是如何工作的,这是由节点还是由OS确定的?
  2. 是否可以定义客户端将要使用的静态端口?是否可以定义客户端使用的端口范围?
  3. 注意:我认为我之前在stackoverflow找到了类似主题的讨论/问题,但我再也找不到了。如果你能分享关于这个主题的任何可靠资源,我会建议。

2 个答案:

答案 0 :(得分:2)

源端口号通常与您的编程无关,除非您在某种程度上限制了路由器或防火墙。它仅由底层TCP基础结构用于跟踪不同的TCP连接。

来自this article

  

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

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

关于你的具体问题:

  

什么样的算法节点用于为其分配“随机”端口   客户?这是如何工作的,这是由节点还是由OS决定的?

由OS决定。在连接到node.js之前,源端口号由TCP级别的原始主机选择。

其他一些参考文章:

Does the TCP source port have to be unique per host?

how can an application use port 80/HTTP without conflicting with browsers?

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

答案 1 :(得分:0)

所选答案提供了大量信息,但没有解决潜在问题。节点似乎不允许https.request为客户端指定端口。存在localAddress和localPort选项,但它们似乎已损坏。

我在这个问题上提出了一个新问题。希望有人会回答“只是不要那样做”之外的事情。

Is there a way to set the source port for a node js https request?