使用 Get-NetTCPConnection 和 Get-NetUDPEndpoint 查看 TCP 和 UDP 会话。 使用 Get-SmbSession 查看 SMB 网络共享会话。 通过 netstat 获取更详细的网络连接信息。 这些命令可以帮助您在 PowerShell 中查看和管理网络会话信息。
Get-NetTCPConnection (NetTCPIP) | Microsoft Learn
Get-NetUDPEndpoint (NetTCPIP) | Microsoft Learn
NetTCPIP Module | Microsoft Learn
Get-NetTCPConnection + Get-NetUDPEndpoint
完整底层解构|原理、执行链路、依赖文件、配套生态链
基础前提适用系统:Windows 8 / Server2012 及以上(PowerShell 3.0+)归属模块:NetTCPIP底层载体:NetTCPIP.dll(CIM/WMI 提供程序)数据源同源:内核驱动tcpip.sys二者共用一套网络栈,但是读取内核中完全不同的控制结构:
- Get-NetTCPConnection → 读取内核 TCB(TCP Control Block,TCP 控制块)
- Get-NetUDPEndpoint → 读取内核 UCB(UDP Control Block,UDP 控制块)
一、总体执行模型总链路
PowerShell/Pwsh 调用 Cmdlet
↓
加载 NetTCPIP.dll 托管Cmdlet实现
↓
调用 Windows CIM API(基于WMI基础设施)
↓
访问命名空间 root\StandardCimv2
↓
NetTCPIP WMI Provider(内核态/用户态桥接组件)
↓
下发IRP请求与 tcpip.sys 交互
↓
tcpip.sys 遍历内核TCB / UCB链表,采集连接信息
↓
数据向上封装为 MSFT_NetTCPConnection / MSFT_NetUDPEndpoint CIM对象
↓
结构化对象传回PowerShell管道,支持筛选、排序、导出
关键区分
| 项目 | Get-NetTCPConnection | Get-NetUDPEndpoint |
|---|---|---|
| 内核数据源 | TCB TCP 控制块 | UCB UDP 控制块 |
| 连接状态 | 拥有状态:Listen、Established、TimeWait、SynSent 等 | UDP 无连接,不存在连接状态字段 |
| 核心属性 | LocalAddress,LocalPort,RemoteAddress,RemotePort,State,OwningProcess | LocalAddress,LocalPort,OwningProcess(无远端地址 / 状态) |
| 典型场景 | 查询 TCP 监听、TCP 长连接 | 查询 UDP 本地监听端口 |
重要知识点:UDP 是无连接协议,Windows 内核不会持续保存 UDP 对外通信的远端地址。所以Get-NetUDPEndpoint只能看到本机 UDP 监听端口,看不到临时对外 UDP 通信对端。与之对比:netstat -anu看到的 UDP 远端地址是短暂快照,内核不持久存储。
二、Get-NetTCPConnection 深度拆解
1. 依赖文件链
Get-NetTCPConnection
├─上层宿主进程:powershell.exe / pwsh.exe
├─核心模块:%windir%\System32\WindowsPowerShell\v1.0\Modules\NetTCPIP\NetTCPIP.dll
├─中间层:CIM/WMI基础设施
│ ├─wbemprox.dll
│ ├─winmgmt(Windows Management Instrumentation 服务)
│ └─ncprov.dll
├─内核通信对象:tcpip.sys(%windir%\System32\drivers\tcpip.sys)
└─配套联动命令:Get-Process(根据 OwningProcess PID 解析进程名称)
2. 完整调用链路分层
-
PowerShell 层解析参数(
-LocalPort-State-RemoteAddress-CimSession),触发 Cmdlet 入口;支持本地查询、远程 CIM 会话查询。 -
NetTCPIP.dll Cmdlet 层封装 CIM 客户端请求,构造查询
MSFT_NetTCPConnectionWMI 类。 -
CIM Provider 层(NetTCPIP 提供程序)接收查询请求,向 tcpip.sys 下发系统控制指令;从内核取出全部 TCB 链表。
-
内核 tcpip.sys遍历所有 TCP 控制块,提取:本地地址端口、远端地址端口、TCP 状态、归属 PID、超时参数、RFC 设置等;向上返回原始二进制数据。
-
封装回送Provider 将内核数据映射为 CIM 托管对象,交付 PowerShell 管道。
3. 关键属性来源
OwningProcess:直接从 TCB 内核结构读取 PID(性能极高)State:TCP 有限状态机标记(LISTEN/ESTABLISHED/TIME_WAIT/CLOSED 等)
对比 netstat:netstat 依靠iphlpapi.dll;本 Cmdlet 走 CIM Provider,底层通道不同,但最终数据源同为 tcpip.sys。
4. 常用参数底层逻辑
# -State 在内核返回后筛选(用户态过滤)
Get-NetTCPConnection -State Listen
# -LocalPort 可下压查询,减少内核数据返回量(优化性能)
Get-NetTCPConnection -LocalPort 3389
# -CimSession 走WMI远程RPC,跨主机查询TCP连接
Get-NetTCPConnection -CimSession PC01
三、Get-NetUDPEndpoint 深度拆解
1. 依赖文件链
Get-NetUDPEndpoint
├─上层宿主:powershell.exe / pwsh.exe
├─核心模块:NetTCPIP.dll(与TCP命令共用同一个DLL)
├─中间层:winmgmt服务、CIM基础组件
├─内核驱动:tcpip.sys
└─配套联动:Get-Process 解析OwningProcess
2. 底层关键特性(极易踩坑)
- 对象类:
MSFT_NetUDPEndpoint - 仅枚举本机绑定监听的 UDP 端口;
- 默认不保存 UDP 临时对外会话的远端 IP 与端口;
所以输出对象没有 RemoteAddress、RemotePort 属性;
- UDP 无连接模型,不存在
State状态字段;
误区纠正:很多人以为可以用 Get-NetUDPEndpoint 看到 UDP 实时对外通信对端,做不到。netstat 看到的 UDP 远端地址是系统短暂快照,内核不会长期维护 UDP 会话链表。
3. 执行链路差异点
# 列出所有UDP监听端口,并关联进程名
Get-NetUDPEndpoint | Select LocalPort,OwningProcess,
@{Name='ProcessName';Expression={ (Get-Process -Id $_.OwningProcess).Name }}
四、共用配套组件(NetTCPIP 模块全家桶)
Get-NetTCPConnection # TCP连接表
Get-NetUDPEndpoint # UDP本地端点
Get-NetRoute # IP路由表
Get-NetIPAddress # 本机IP地址
Get-NetIPInterface # IP接口配置
Get-NetTcpSetting # TCP全局参数(RTO、ECN等)
Get-NetAdapter # 网卡适配器信息
New-NetFirewallRule # 防火墙规则(联动网络栈)
NetTCPIP 模块全套 Cmdlet 底层解构
Get-NetTCPConnection / Get-NetUDPEndpoint / Get-NetRoute / Get-NetIPAddress / Get-NetIPInterface / Get-NetTcpSetting / Get-NetAdapter / New-NetFirewallRule公共基础框架
统一底层架构
NetTCPIP.dll
root\StandardCimv2
PowerShell/pwsh.exe
↓
加载 NetTCPIP.dll Cmdlet
↓
CIM Client API → winmgmt(WMI服务)
↓
NetTCPIP WMI Provider 用户态桥接组件
↓
下发IRP与内核驱动通信
↓
tcpip.sys(TCP/IP协议栈内核驱动)+ ndis.sys(网卡驱动)
↓
内核网络结构数据向上封装为 CIM 对象
↓
结构化对象返回PowerShell管道,支持筛选、远程CimSession调用
通用依赖配套链
上层宿主:powershell.exe / pwsh.exe
核心模块:%windir%\System32\WindowsPowerShell\v1.0\Modules\NetTCPIP\NetTCPIP.dll
中间层依赖:winmgmt服务、wbemprox.dll、ncprov.dll
内核数据源:tcpip.sys、ndis.sys
配套联动工具:Get-Process、Remove-NetRoute、Set-NetIPAddress等同模块修改类命令
远程支撑:CimSession(RPC 5985/5986端口)
核心区分:查询类 Cmdlet 只读内核网络状态;修改类 Cmdlet(New/Set/Remove)会通过 Provider 下发指令修改 tcpip.sys 运行参数。
逐条深度拆解
1. Get-NetTCPConnection
MSFT_NetTCPConnection
tcpip.sys 内部 TCB(TCP Control Block,TCP 控制块)链表
2. Get-NetUDPEndpoint
MSFT_NetUDPEndpoint
tcpip.sys 内部 UCB(UDP Control Block,UDP 控制块链表)
3. Get-NetRoute
MSFT_NetRoute
tcpip.sys 路由表(RTL 路由数据库)
netstat -r / route print
New-NetRoute、Remove-NetRoute4. Get-NetIPAddress
MSFT_NetIPAddress
InterfaceIndex,和Get-NetIPInterface、Get-NetAdapter互通
New-NetIPAddress(静态 IP 配置)5. Get-NetIPInterface
MSFT_NetIPInterface
InterfaceIndex 作为唯一 ID,串联 IP 地址、路由、TCP 连接。6. Get-NetTcpSetting
MSFT_NetTcpSetting
7. Get-NetAdapter
ndis.sys 网卡适配器链表
Get-NetIPInterface承载。8. New-NetFirewallRule
重要链路区分:防火墙不属于 tcpip.sys 原生模块,依托 Windows Filtering Platform(WFP)底层组件:wfplwfs.sysWFP 过滤驱动执行链路:
New-NetFirewallRule
↓
NetTCPIP.dll → WFP CIM Provider
↓
调用Fwpuclnt.dll → 和 wfplwfs.sys 交互
↓
在内核网络数据包路径注册过滤规则
横向链路关系图谱
硬件层:网卡 → ndis.sys
↓
三层网络栈:tcpip.sys
├─ TCB链表 ← Get-NetTCPConnection
├─ UCB链表 ← Get-NetUDPEndpoint
├─ 路由数据库 ← Get-NetRoute
├─ IP地址配置 ← Get-NetIPAddress
├─ 接口IP参数 ← Get-NetIPInterface
└─ TCP全局配置 ← Get-NetTcpSetting
ndis.sys网卡链表 ← Get-NetAdapter
WFP防火墙驱动 wfplwfs.sys ← New-NetFirewallRule
(对tcpip.sys进出数据包执行过滤控制)
上层统一入口:NetTCPIP.dll(PowerShell Cmdlet)
关键底层共性 & 差异总结
- 所有查询类 Cmdlet 共用 NetTCPIP.dll,但读取内核中相互独立的数据结构;
Get-NetAdapter偏向二层 NDIS 网卡信息;其余 TCP/IP 地址 / 路由命令工作在三层 tcpip.sys;New-NetFirewallRule是跨模块联动组件,依托 WFP,不属于 TCP 协议栈原生连接表;- 全部支持
-CimSession参数,远程跨主机查询网络信息,传统 netstat.exe 无原生远程能力; - 返回结构化对象,可直接基于属性管道筛选,无需文本匹配(对比 netstat + findstr)。
运维配套常用组合链路示例
# 1. 网卡+IP地址关联查询
Get-NetAdapter | Get-NetIPAddress
# 2. TCP连接匹配进程名称
Get-NetTCPConnection | Select LocalPort,OwningProcess,@{Name='ProcessName';E={Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue}}
# 3. 查看路由对应的网卡
Get-NetRoute | Join-Path Get-NetAdapter -Property InterfaceIndex
五、权限约束底层规则
- 普通用户权限
可以读取大部分连接;但系统内核进程、受保护服务的连接可能被隐藏。
- 管理员权限
完整读取全部 TCB/UCB,拿到全部 OwningProcess PID;远程 CIM 查询通常要求管理员。
六、和传统 netstat.exe 横向链路对比
- netstat.exe → iphlpapi.dll → tcpip.sys
- Get-NetTCPConnection → CIM/NetTCPIP Provider → tcpip.sys
✅ 共同点:最终数据源都是 tcpip.sys 内核控制块❌ 不同点:中间调用链路、数据格式不同
- netstat:输出纯文本,只能外部 findstr 过滤
- PowerShell Cmdlet:输出结构化对象,原生管道筛选,支持远程查询
七、常见故障底层溯源
故障 1:命令执行无输出 / 卡住
net stop winmgmt
net start winmgmt
故障 2:OwningProcess 显示 0
故障 3:找不到远端 UDP 地址
故障 4:-CimSession 远程查询失败
八、树形总链路思维导图文本(可直接复制制图)
PowerShell/pwsh
↓
NetTCPIP.dll(Cmdlet实现)
↓
CIM Client API
↓
winmgmt 服务 + NetTCPIP WMI Provider
↓
IRP通信
↓
tcpip.sys(内核网络驱动)
├─遍历 TCB → Get-NetTCPConnection 数据源
└─遍历 UCB → Get-NetUDPEndpoint 数据源
在 Windows 系统中,网络会话数 通常指的是与计算机建立连接的网络会话的数量。相关的英文全称和简称如下:
| 英文全称 | 简称 |
|---|---|
| Network Sessions | Net Sessions |
| Network Connections | Net Connections |
| Active Network Sessions | Active Net Sessions |
| Remote Desktop Sessions | RDS (Remote Desktop Services) |
| TCP/IP Network Sessions | TCP Sessions |
| User Sessions | User Sessions |
| Session Control | Session Ctrl |
常见命令:
- 查看网络会话数
netstat:显示当前网络连接信息。net session:显示当前计算机的网络会话。query user:显示用户会话信息,通常用于查看远程桌面会话。
- Network Sessions 或 Net Sessions 是网络会话的常见称呼。
- Netstat 和 Net Session 是命令行工具中常用来查看和管理网络会话的命令。
在 PowerShell 中,您可以使用多个命令来查看当前的网络会话数和连接情况。以下是一些常用的 PowerShell 命令,用于查看和管理网络会话:
1. 查看当前网络连接
使用 Get-NetTCPConnection 可以查看系统的所有 TCP 连接:
Get-NetTCPConnection
这将列出所有活动的 TCP 连接,包括本地和远程的 IP 地址以及端口号。可以通过 -State 参数进一步过滤,例如:
Get-NetTCPConnection -State Established
此命令将仅显示已经建立连接的 TCP 会话。
2. 查看网络会话数量
您可以通过管道将连接数统计信息输出,例如:
(Get-NetTCPConnection).Count
这将显示当前系统上的 TCP 网络连接数。
3. 查看所有网络会话(包括 UDP)
如果您还想查看 UDP 连接,您可以使用 Get-NetUDPEndpoint 来列出所有 UDP 会话:
Get-NetUDPEndpoint
然后,您可以结合 Count 进行统计:
(Get-NetUDPEndpoint).Count
4. 查看所有网络会话(包括 TCP 和 UDP)
如果您想查看所有的网络会话(包括 TCP 和 UDP),可以结合 Get-NetTCPConnection 和 Get-NetUDPEndpoint:
($tcp = Get-NetTCPConnection).Count + ($udp = Get-NetUDPEndpoint).Count
这将显示所有 TCP 和 UDP 连接的总数。
5. 查看远程桌面会话
如果您特别关注远程桌面会话(例如 RDP),可以使用以下命令:
Get-WmiObject -Class Win32_ComputerSystem | Select-Object NumberOfUsers
这将显示当前系统上正在登录的用户数,间接反映了远程会话的数量。
6. 查看所有网络共享会话
如果您想查看所有共享的会话(例如通过 SMB),可以使用以下命令:
Get-SmbSession
这将列出所有通过 SMB 协议的连接(共享会话)。
7. 使用 netstat 查看网络会话
虽然 netstat 是一个命令行工具,但您也可以在 PowerShell 中运行它来查看网络会话:
netstat -an
这将列出所有网络连接和监听端口的详细信息。
- 使用
Get-NetTCPConnection和Get-NetUDPEndpoint查看 TCP 和 UDP 会话。 - 使用
Get-SmbSession查看 SMB 网络共享会话。 - 通过
netstat获取更详细的网络连接信息。
这些命令可以帮助您在 PowerShell 中查看和管理网络会话信息。
Get-NetTCPConnection 与 Get-NetUDPEndpoint 两个命令的对比表:
| 特性 | Get-NetTCPConnection | Get-NetUDPEndpoint |
|---|---|---|
| 功能 | 获取系统中的所有 TCP 连接信息 | 获取系统中的所有 UDP 端点信息 |
| 协议类型 | TCP (Transmission Control Protocol) | UDP (User Datagram Protocol) |
| 连接类型 | 提供与远程主机的连接状态、端口等详细信息 | 提供本地和远程端口信息,但不涉及连接的状态(UDP 是无连接的) |
| 常见用途 | - 网络连接状态监控 | - UDP 服务的监控和分析 |
| - 排查 TCP 连接问题 | - 分析和管理 UDP 端点 | |
| - 性能监控和网络流量分析 | - 诊断 UDP 应用程序的通信问题 | |
| 连接状态 | 提供连接的状态信息,如 Established、Listen 等状态 |
不提供连接状态,因为 UDP 是无连接的协议 |
| 支持的协议 | TCP 协议 | UDP 协议 |
| 用途示例 | - 检查是否有大量的未关闭连接 | - 检查系统中使用 UDP 协议的端点,如 DNS、DHCP 服务等 |
| 输出字段 | - 本地地址和端口 | - 本地地址和端口 |
| - 远程地址和端口 | - 远程地址和端口 | |
- 连接状态(如 Established、TimeWait 等) |
- 仅提供端口信息,不包含连接状态 |
主要区别
- 协议类型:
Get-NetTCPConnection针对 TCP 连接,提供连接的详细状态信息;而Get-NetUDPEndpoint针对 UDP 端点,无法提供连接状态,因为 UDP 是无连接的。 - 连接状态:TCP 连接有明确的连接状态(如
Established、Listen等),而 UDP 端点没有连接状态。 - 用途:
Get-NetTCPConnection主要用于监控 TCP 连接的健康状况和排查问题,Get-NetUDPEndpoint主要用于监控使用 UDP 协议的服务,尤其是那些实时通信和无连接协议的应用。
这个对比表可以帮助你更好地理解两个命令的使用场景和区别。
这两个命令是 PowerShell 命令,分别用于统计当前系统中 TCP 连接和 UDP 端点的数量。它们可以在 Windows 操作系统的 PowerShell 环境中使用,用来监控和诊断网络连接的状态。
1. Get-NetTCPConnection | Measure-Object | Select-Object -ExpandProperty Count
-
用途:此命令用于获取系统中的所有 TCP 连接数量。
-
命令详细解释:
Get-NetTCPConnection:列出系统中所有的 TCP 连接,包括本地端口、远程端口、连接状态等信息。Measure-Object:用于计算对象的数量、总和、平均值等统计数据。它会统计传入的对象数量。Select-Object -ExpandProperty Count:提取Measure-Object输出结果中的Count属性,即连接数量。
-
应用场景:
- 网络故障排查:帮助网络管理员快速了解系统的 TCP 连接数量,判断是否有异常连接,或是否存在大量未关闭的连接。
- 性能监控:系统性能和网络性能的监控时,通过查看连接数量,评估网络流量和负载。
- 安全性审计:可以检查是否有不正常的 TCP 连接,可能存在恶意活动或安全漏洞。
2. Get-NetUDPEndpoint | Measure-Object | Select-Object -ExpandProperty Count
-
用途:此命令用于获取系统中的所有 UDP 端点数量。
-
命令详细解释:
Get-NetUDPEndpoint:列出系统中所有的 UDP 端点信息,包括本地端口、远程端口等数据。Measure-Object:对传入的 UDP 端点对象进行统计,计算数量。Select-Object -ExpandProperty Count:提取Measure-Object输出中的Count属性,显示 UDP 端点的数量。
-
应用场景:
- 监控服务状态:UDP 通常用于实时通信协议,如 DNS、DHCP 和视频流等。此命令可以帮助管理员监控这些服务的端点数量。
- 网络分析:网络管理员可以通过查看 UDP 端点的数量,分析系统中哪些应用程序正在使用 UDP 协议,帮助进行性能优化或故障排查。
- 安全监控:由于 UDP 无连接特性,它较容易被滥用来进行攻击,如 DoS 攻击。此命令可以帮助检测是否有异常的 UDP 端点,及时识别潜在的安全威胁。
- 这两个命令都利用
Measure-Object来统计网络连接的数量,分别统计 TCP 连接和 UDP 端点的数量。 - 通过这些命令,系统管理员可以更好地了解网络连接的状态,进行故障排查、性能监控和安全审计。
NetTCPIP 模块中的 cmdlet 描述及语法的中文翻译表格:
| Cmdlet | 描述 |
|---|---|
| Find-NetRoute | 查找最佳的本地 IP 地址和通往远程地址的最佳路由。 |
| Get-NetCompartment | 获取协议栈中的所有网络区隔。 |
| Get-NetIPAddress | 获取 IP 地址配置。 |
| Get-NetIPConfiguration | 获取 IP 网络配置。 |
| Get-NetIPInterface | 获取 IP 接口信息。 |
| Get-NetIPv4Protocol | 获取 IPv4 协议的配置。 |
| Get-NetIPv6Protocol | 获取 IPv6 协议的配置。 |
| Get-NetNeighbor | 获取邻居缓存条目。 |
| Get-NetOffloadGlobalSetting | 获取全局 TCP/IP 卸载设置。 |
| Get-NetPrefixPolicy | 获取前缀策略。 |
| Get-NetRoute | 获取来自 IP 路由表的 IP 路由信息。 |
| Get-NetTCPConnection | 获取 TCP 连接信息。 |
| Get-NetTCPSetting | 获取 TCP 设置和配置信息。 |
| Get-NetTransportFilter | 获取传输过滤器信息。 |
| Get-NetUDPEndpoint | 获取当前 UDP 端点统计信息。 |
| Get-NetUDPSetting | 获取 UDP 设置。 |
| New-NetIPAddress | 创建和配置一个 IP 地址。 |
| New-NetNeighbor | 创建一个邻居缓存条目。 |
| New-NetRoute | 在 IP 路由表中创建一个路由。 |
| New-NetTransportFilter | 创建一个传输过滤器。 |
| Remove-NetIPAddress | 移除一个 IP 地址及其配置。 |
| Remove-NetNeighbor | 移除邻居缓存条目。 |
| Remove-NetRoute | 移除 IP 路由表中的 IP 路由。 |
| Remove-NetTransportFilter | 移除传输过滤器。 |
| Set-NetIPAddress | 修改 IP 地址的配置。 |
| Set-NetIPInterface | 修改 IP 接口的配置。 |
| Set-NetIPv4Protocol | 修改 IPv4 协议配置的信息。 |
| Set-NetIPv6Protocol | 修改 IPv6 协议的配置。 |
| Set-NetNeighbor | 修改邻居缓存条目。 |
| Set-NetOffloadGlobalSetting | 修改全局 TCP/IP 卸载设置。 |
| Set-NetRoute | 修改 IP 路由表中的一条或多条路由。 |
| Set-NetTCPSetting | 修改 TCP 设置。 |
| Set-NetUDPSetting | 修改 UDP 设置。 |
| Test-NetConnection | 显示连接的诊断信息。 |
- 这些 cmdlet 都属于
NetTCPIP模块,用于配置和管理与 TCP/IP 协议相关的网络设置,包括 IP 地址、路由、连接、协议设置等。 - 各个命令的功能从查询、修改到创建和删除网络配置,覆盖了 TCP、UDP 协议和 IP 配置的方方面面。
- 适用于网络管理员在管理和故障排查网络时使用。
要理解Windows、光猫/路由器的会话/连接数实现与选型,首先需要澄清核心概念避免歧义:
- 会话(Session):指有状态的应用层交互上下文,比如用户登录会话、RDP远程会话、SMB共享会话、PPPoE拨号会话,有时间维度和状态保持要求。
- 连接(Connection):更偏向传输层/网络层的端到端链路,比如TCP连接、NAT会话条目(内网设备访问外网时在NAT设备生成的映射条目,也是大众常说的“连接数”“带机量”核心指标)。
两者的实现方式、路径选型可以按设备类型、功能目标、部署场景三个维度拆分,总共有10+种主流实现路径,具体如下:
一、Windows侧会话/连接数的实现方式(共4大类)
Windows的会话/连接主要分为:用户登录会话、RDP远程会话、SMB共享会话、TCP/UDP网络连接四类,实现路径如下:
1. 原生查询统计类(临时查看场景,无需配置)
适合普通用户临时排查问题,无需安装额外软件:
- 命令行工具:
netstat -ano查看所有TCP/UDP连接及对应进程;net session查看SMB共享会话;query user/quser查看当前登录用户会话;qwinsta查看RDP会话。 - 图形化工具:任务管理器→性能→以太网查看连接概况;资源监视器→网络选项卡查看TCP连接详情;计算机管理→共享文件夹→会话查看SMB会话;远程桌面服务管理器(服务器版)查看RDP会话。
- 日志审计:通过事件查看器的「安全性」日志,筛选事件ID 4624(登录成功)、4634(注销)、4656(对象访问)等,追溯会话/连接的创建、断开记录,适合安全审计场景。
- 系统API调用:运维/开发者可通过
GetTcpTable2、NetSessionEnum、WTSQuerySessionInformation等系统API,自定义脚本/程序批量统计多台Windows主机的会话/连接数据,对接监控系统。
2. 系统策略限制类(管控场景,系统原生支持)
适合需要对会话/连接做限制的服务器/办公场景,稳定性最高:
- 组策略配置:域环境或本地组策略中,可直接限制RDP最大并发连接数、SMB最大会话数、单用户最大登录会话数,也可配置TCP连接超时时间、半开连接限制等参数。
- 注册表调优:针对特殊需求修改底层参数,比如调整
TcpTimedWaitDelay缩短TIME_WAIT状态的连接回收时间、修改MaxUserPort扩大可用端口范围、调整SMB的MaxMpxCt参数提升共享并发能力。 - 系统服务/防火墙配置:禁用不必要的SMB、RDP等服务减少会话生成入口;通过Windows Defender防火墙配置入站/出站规则,限制单个进程/IP的并发连接数,防止恶意软件对外发起大量连接。
3. 第三方工具类(增强监控/管控场景)
适合需要更灵活功能的场景:
- 监控类:对接Zabbix、PRTG、Prometheus等监控系统,安装对应Agent采集Windows的连接数、会话数指标,设置阈值告警,适合服务器集群运维。
- 管控类:安装第三方防火墙(如Comodo、ZoneAlarm)、终端准入软件,限制单主机的最大对外连接数,防止肉鸡对外发起攻击;企业级远程桌面工具(向日葵企业版、ToDesk企业版)可统一管理RDP会话,限制单用户并发会话数。
4. 系统功能优化类(性能优化场景)
比如服务器版Windows配置远程桌面会话Broker,实现RDP会话负载均衡、会话重定向,提升远程接入的会话承载能力。
二、光猫/路由器侧会话/连接数的实现方式(共4大类)
光猫/路由器的会话/连接核心是NAT会话条目(内网访问外网的映射条目,决定带机量)、PPPoE拨号会话、管理会话三类,实现路径如下:
1. 原生设备功能类(通用场景,即插即用)
适合家庭/中小企业的常规使用:
- 查询统计:通过光猫/路由器的Web管理页面(一般位于192.168.1.1/192.168.0.1)的状态页,可直接查看NAT会话数、PPPoE会话状态;支持SSH/CLI的设备(如企业级路由器、OpenWrt设备)可通过
show nat session、show pppoe session等命令查看详细会话信息。 - 基础配置:Web页面或CLI中可配置最大NAT会话数、单IP最大会话数、会话超时时间,限制P2P下载、视频直播等应用占满NAT表;也可配置PPPoE账号的最大并发拨号数,防止账号共享。
2. 运营商侧管控类(宽带接入场景)
适合运营商对用户侧设备的统一管理:
- OLT/BRAS配置:运营商在局端的OLT(光线路终端)上可配置ONU(光猫)的最大会话数、带宽配额;在BRAS(宽带接入服务器)的RADIUS系统中可配置PPPoE账号的并发会话限制、会话超时时间。
- 远程管控:通过TR-069协议,运营商可远程下发配置到光猫,限制其NAT会话数、修改工作模式(如桥接/路由),无需用户手动操作。
3. 软路由/自定义固件类(灵活定制场景)
适合对管控粒度要求高的用户/中小企业:
- 开源固件:给光猫/路由器刷OpenWrt、ikuai、爱快等第三方固件,通过iptables/nftables的conntrack模块调整NAT会话参数,配置基于应用、IP、时间的会话限制规则,还可安装nlbwmon等插件做会话流量统计。
- 专业路由系统:企业场景用RouterOS、IPFire、VyOS等专业路由系统,支持更细的会话管控,比如基于会话数的QoS限速、会话优先级调度,满足多业务并发的需求。
- 云管理架构:企业用SD-WAN控制器、AC无线控制器,集中管理所有分支的光猫/路由器,统一下发会话管控策略,实现全网会话的统一监控和限制。
4. 硬件升级/架构优化类(性能瓶颈场景)
适合带机量不足、NAT表占满的场景:
- 设备换型:将家用级光猫/路由器更换为企业级设备,企业级路由器的NAT会话表通常可达1万~10万条(家用设备一般只有几千条),可支撑更多设备并发。
- 架构调整:将光猫从路由模式改为桥接模式,由后接的高性能路由器负责NAT,避免低性能光猫的NAT成为瓶颈;大型企业采用“OLT+BRAS+核心路由器”的三层架构,将PPPoE拨号、NAT、路由功能拆分到专用设备,承载能力可支持上万并发会话。
三、跨设备联动的实现路径
如果需要对Windows主机和光猫/路由器做协同管控,有以下两种常见路径:
- 监控联动:通过SNMP、Zabbix Agent等协议,同时采集Windows的连接数、路由器的NAT会话数,统一展示在监控大屏,出现异常时自动告警,适合运维场景。
- 策略联动:在路由器侧配置单IP最大会话数限制,防止Windows主机被恶意软件控制后对外发起大量连接占满NAT表;或在Windows侧配置防火墙规则,禁止非必要进程对外建立连接,减少无效NAT会话生成。
四、路径选型的核心维度与场景匹配
选型时核心考虑4个维度:使用场景、成本、性能要求、易用性,不同场景的最优路径如下:
| 场景 | Windows侧最优路径 | 光猫/路由器侧最优路径 |
|---|---|---|
| 家庭用户临时排查 | 原生工具(netstat/资源监视器)查询 | 光猫/家用路由器Web页面查看会话数 |
| 家庭用户防设备占满 | 开启Windows Defender防火墙限制未知程序连接 | 家用路由器开启家长控制/单IP限速,或刷OpenWrt配置会话限制 |
| 中小企业办公 | 组策略限制RDP/SMB最大会话数,Zabbix监控 | 企业级路由器配置NAT会话限制、单IP会话配额 |
| 服务器集群运维 | 系统API对接监控系统,组策略管控会话 | 核心交换机+企业级路由器架构,OLT侧限制光猫会话数 |
| 运营商宽带运营 | 无需特殊配置 | OLT/BRAS侧配置PPPoE账号并发限制,TR-069远程管控光猫 |
| 工业/特殊场景 | 工控机加固系统,配置会话持久化规则 | 工业级光猫/路由器,配置会话断线重连、冗余备份 |
总共可归纳为12种主流实现路径,其中Windows侧4类、光猫/路由器侧4类、跨设备联动2类、硬件/架构优化2类;选型时无需盲目追求高配置,家庭用户用原生工具+家用设备即可满足需求,企业/运营商场景需要根据带机量、管控粒度选择对应层级的方案,同时注意光猫桥接、NAT会话表参数优化等低成本优化手段,往往能解决大部分会话数不足的问题。

浙公网安备 33010602011771号