Nodejs TCP连接客户端端口分配

2024-04-10

我使用nodejs在客户端和服务器之间创建了tcp连接(网络模块 https://nodejs.org/api/net.html)。服务器正在侦听已经预定义的端口,并且客户端正在连接到该端口。

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

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

注意:我想我发现了类似主题的讨论/问题堆栈溢出 https://stackoverflow.com/以前有,但现在找不到了。如果您能分享有关此主题的任何可靠资源,我将不胜感激。


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

From 本文 https://idea.popcount.org/2014-04-03-bind-before-connect/:

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

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

至于你的具体问题:

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

它由操作系统决定。在与 Node.js 建立连接之前,源端口号是由原始主机在 TCP 级别选择的。

其他一些参考文章:

每个主机的 TCP 源端口是否必须是唯一的? https://serverfault.com/questions/326819/does-the-tcp-source-port-have-to-be-unique-per-host

应用程序如何使用端口 80/HTTP 而不与浏览器发生冲突? https://stackoverflow.com/questions/2957757/how-can-an-application-use-port-80-http-without-conflicting-with-browsers


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nodejs TCP连接客户端端口分配 的相关文章

随机推荐

  • 创建像 ASP.NET MVC 3 ViewBag 这样的类?

    我有一种情况 我想做一些类似于 ASP NET MVC 3 ViewBag 对象所做的事情 其中 属性是在运行时创建的 或者是在编译时 无论如何 我想知道如何创建具有这种行为的对象 我创建了这样的东西 public class MyBag
  • 如何使用 mpsc 通道在线程之间创建环形通信?

    我想生成 n 个能够与环形拓扑中的其他线程通信的线程 例如线程 0 可以向线程 1 发送消息 线程 1 可以向线程 2 发送消息 等等 线程 n 可以向线程 0 发送消息 这是我想用 n 3 实现的示例 use std sync mpsc
  • c中的联合初始化

    我想知道联合变量是否会像结构变量一样被初始化 include
  • Typescript:在单独的文件中定义类及其方法

    是否可以在一个文件中声明一个类并在单独的文件中定义其方法 我有一些课程a lot方法 如果我能把它们分散一点那就太好了 简短回答 Typescript 不支持将类定义拆分为多个文件 解决方法 您可以定义一个包含类成员的接口 以及两个实现该接
  • 有谁遇到过“encodeURIComponent(string)”的跨浏览器问题

    我需要动态地从一些自定义字符串值创建 URL 我有疑问encodeURIComponent string https developer mozilla org en JavaScript Reference Global Objects
  • 体系结构 x86_64 的未定义符号:GCC

    我在我的 mac pro 上安装了 gcc 5 3 0 我想使用以下命令编译 c 程序 gcc main c o matrix mcmodel medium lm 但是我收到了这个错误 Undefined symbols for archi
  • Rails 资产管道和摘要价值

    有谁知道资产消化价值到底是怎么计算的吗 如果我有两个 JS 文件 其中包含各种其他包含的 JS 脚本 那么如果内部脚本都没有更改 每个文件是否会维护相同的摘要哈希 或者每次运行 asset precompile 操作时都会计算新的摘要值 接
  • 在 RStudio 中网络抓取 VIN 号码的品牌/型号/年份

    我目前正在开展一个项目 需要查找制造商 型号和 VIN 编号年份 我有 300 个不同 VIN 号码的列表 检查每个单独的 VIN 号码并将制造商 型号和年份手动输入到 Excel 中是非常低效且乏味的 我尝试使用带有 SelectorGa
  • 不使用循环打印 1 到 1000 [重复]

    这个问题在这里已经有答案了 我在 C 编程上下文中看到这个问题 我检查了一个解决方案 我的一位朋友给了我这段代码 它工作完美 但我无法理解它的逻辑以及它是如何工作的 我向他询问了这个问题 但他也不知道该程序实际上是如何工作的 我认为他也从某
  • 如何在 Play Framework 2.0 中使用 Evolutions?

    对于 1 x 版本 我们可以使用play evolutions apply 在 play 2 0 beta 中如何做到这一点 Evolution apply 在应用程序启动时自动运行 Play 2 0 rc1 缺少的是生成进化脚本并从 SB
  • 在 RSpec 请求规范中的每个请求之前设置标头

    如何在其中设置标题before each像下面这样 RSpec describe Users API type request do before each do host example org set a header for all
  • 更新对象时出现 HibernateOptimisticLockingFailureException

    我在更新对象时遇到以下异常 HibernateOptimisticLockingFailureException 类 用户 的对象 带有标识符 25614 乐观锁定失败 嵌套异常 是 org hibernate StaleObjectSta
  • Snowflake 中具有多个 JSON 对象的横向展平数组

    我有一个包含多个 JSON 对象的数组 表中任何 JSON 数组的最大元素数为 8 这是数组原始值的示例 variants id 12388362846279 inventory quantity 10 sku sku1 id 123883
  • 是否可以从命令行运行 Smalltalk 脚本?

    我发现了一个 可能过时且不正确 2004 年的博客文章 http www ianbicking org where smalltalk went wrong html它声称不可能从命令行运行 Smalltalk 脚本 从那时起有什么变化吗
  • 在 swift 中使用 TripleDes 和 MD5

    我有一个使用 TripleDes 和 MD5 的 Java 代码算法 这是我的java代码 private String encrypt String message String secretKey throws Exception Me
  • “找不到类型的属性”组合存储库 spring-data-neo4j

    我在用着spring data neo4j我正在尝试组合存储库以便能够使用自定义存储库 我认为我已经正确遵循了中指定的命名约定20 8 7 创建存储库 http docs spring io spring data neo4j docs 3
  • “双精度数组”和 TDoubleDynArray 之间的区别

    The System Typesunit 声明一个数组类型 TDoubleDynArray array of Double 如果我将一个方法声明为 procedure func x TDoubleDynArray 我注意到这个论点x行为就像
  • 使用 php ajax mysql 创建 3 个依赖下拉列表

    我正在使用 PHP MYSQL 和 JAVASCRIPT AJAX 我有多个下拉列表 我想使用 AJAX 使其相互依赖 其中这些下拉列表包含从 MYSQL 数据库检索的数据 用户从first下拉列表并根据其选择second and thir
  • 如何从矩阵中提取行名?

    我有一个行名称为日期的矩阵 我想将这些行名称提取到一个变量中 然后使用rownames 将这些日期应用到我拥有的另一个矩阵中 假设该矩阵称为 data matrix 每当我跑步时 data matrix 0 我得到了所有日期的打印输出 所以
  • Nodejs TCP连接客户端端口分配

    我使用nodejs在客户端和服务器之间创建了tcp连接 网络模块 https nodejs org api net html 服务器正在侦听已经预定义的端口 并且客户端正在连接到该端口 据我了解客户端的端口是由节点动态分配的 那是对的吗 节