据我所知,客户端的端口是由节点动态分配的?那是对的吗?
>什么样的算法节点用于为客户端分配“随机”端口?这是如何工作的,这是由节点还是由OS决定的?
>是否可以定义客户端将使用的静态端口?是否可以定义客户端使用的端口范围?
注意:我认为我之前在stackoverflow发现了类似主题的讨论/问题,但我再也找不到了.如果你能分享关于这个主题的任何可靠资源,我会建议你.
源端口号通常与您的编程无关,除非您在某种程度上限制了路由器或防火墙.它仅由底层TCP基础结构用于跟踪不同的TCP连接.从this article开始:
A TCP/IP connection is identified by a four element tuple: {source IP,
source port, destination IP, destination port}. To establish a TCP/IP
connection only a destination IP and port number are needed, the
operating system automatically selects source IP and port.
上面引用的文章描述了Linux如何选择源端口号.
至于你的具体问题:
What kind of algorithm node is using to assign “random” port for the
client? How this works, is this determined by node or by 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连接时,指定主机地址和目标端口号.不指定源端口号.