当前位置: 首页 > 面试题库 >

Nodejs TCP连接客户端端口分配

罗浩然
2023-03-14
问题内容

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

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

  1. 哪种html" target="_blank">算法节点用于为客户端分配“随机”端口?它是如何工作的,是由节点还是由操作系统决定的?
  2. 是否可以定义将要使用哪个客户端的静态端口?是否可以定义供客户端使用的端口范围?

注意:我想我之前在找到了与类似主题相关的讨论/问题,但现在找不到了。如果您可以分享有关此主题的任何可靠资源,我将不胜感激。


问题答案:

源端口号通常与您的编程无关,除非您使用的路由器或防火墙对此有所限制。它仅由基础TCP基础结构用来跟踪不同的TCP连接。

从这篇文章:

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

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

关于您的特定问题:

哪种算法节点用于为客户端分配“随机”端口?它是如何工作的,是由节点还是由操作系统决定的?

它由操作系统决定。在连接到node.js之前,源主机在TCP级别上选择了源端口号。

其他一些参考文章:

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

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



 类似资料:
  • 在Netty中创建客户端连接时,我有一个问题。 这里,为什么我们没有一个bind方法,将通道绑定到发起客户端连接的端口(在客户端)?我们唯一需要提供的就是给出服务器地址和端口如下: 这是在客户端还是服务器端创建了一个新的通道?此通道绑定在客户端的哪个端口? 我们在执行服务器端引导时进行绑定,如下所示 我很困惑,不明白客户端从哪个端口向服务器发送数据,使用的是什么通道?

  • 我想知道以下问题的答案: 1)如果Ignite服务器重新启动,我需要重新启动客户端(web应用程序)。是否有任何方法可以在服务器重新启动时重新连接到服务器。我知道当服务器重新启动时,它分配了一个不同的ID,因此当前现有的连接变得过时。是否有方法克服这个问题,如果是的话,哪一个版本的Ignite支持这个功能。目前我使用1.7版本 3)如果我有一个大对象要缓存,我发现序列化和反序列化在Ignite中需

  • 执行kafka客户端的生产者/消费者连接池有意义吗? kafka是否在内部维护已初始化并准备好使用的连接对象列表? 我们希望最小化连接创建的时间,这样在发送/接收消息时就不会有额外的开销。 目前,我们正在使用apache共享池库来保持连接。 任何帮助都将不胜感激。

  • 问题内容: 我正在设计一个将Redis用作数据库的Web服务,并且我想了解使用Redis与StackService客户端连接的最佳实践。 关键是我一直在阅读有关Redis的文章,发现与服务器交互的最佳方法是使用单个并发连接。 问题是,尽管每当Web客户端向Web服务发出请求时,我都会使用 PooledRedisClientManager ,但我又获得了一个到Redis服务器的连接客户端(打开的连接

  • 按照这里的讨论,我使用以下步骤使外部客户端(基于 kafkajs)连接到 OpenShift 上的 Strimzi。这些步骤从这里开始。 被编辑为如下所示。 要提取证书并在客户端中使用它,我运行了以下命令: 请注意,我必须在我的macOS上使用,而不是,如留档所示。 这是从他们的 页面和他们的文档改编的客户端。 当我从具有的文件夹运行时,我收到一条连接拒绝消息。 我错过了什么?

  • socket.io 0.9 node.js 0.10.15 速递3.3.4 即:调用 --服务器端 --客户端