我使用nodejs(net module)在客户端和服务器之间创建了tcp连接。服务器正在侦听已预定义的端口,客户端正在连接到该端口。
据我所知,客户端的端口是由节点动态分配的?那是对的吗?
注意:我认为我之前在stackoverflow找到了类似主题的讨论/问题,但我再也找不到了。如果你能分享关于这个主题的任何可靠资源,我会建议。
答案 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?