作为一个常年跟 SQL Server 打交道的人,看到 “error 40” 和 “错误 53” 这两个报错,我甚至不用看截图,基本就能猜出你现在的状态——明明 SQL Server 服务在跑,SSMS 就是连不上去,网上搜了一堆教程,不是让你开防火墙就是让你改协议,改完了还是报一模一样的错,心态直接崩掉。
这个报错的全称是“在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。(provider: Named Pipes Provider, error: 40 - 无法打开到 SQL Server 的连接)”,有时候错误号还会变成 53。它几乎是 SQL Server 远程连接排障里最容易把人绕晕的一个,因为报错信息给得太模糊,而真正的故障点可能藏在四个完全不同的地方:实例名、SQL Server 配置、防火墙、客户端协议。这篇文章我就按实际排查的顺序,把这个报错从表象到根因拆开揉碎讲清楚,顺便把我这些年踩过的坑和总结的排查路径一并分享出来。
1. 先读懂报错:error 40 和错误 53 到底在说什么
很多人在这一步就卡住了,因为他们只把报错当“连不上”来处理,但其实报错信息里已经透露了关键线索。
1.1 报错文本拆解:三句话里藏了三个排查方向
“在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误”这句话是总纲,意思是客户端根本没建立起和 SQL Server 之间的通信链路。“未找到或无法访问服务器”指向名称解析或网络可达性问题,简单说就是客户端拿着你给的服务器名称,却找不到对应的那台机器,或者找到了但网络不通。“请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接”则是在暗示两个高频原因:实例名写错,或者 SQL Server 的远程连接配置压根没打开。
括号里还有两个关键信息:“Named Pipes Provider” 和 “error: 40”。前者说明客户端当前使用的网络协议是命名管道,后者是 SQL Server 定义的错误编号。这里有个特别容易误会的地方——很多教程一看到 Named Pipes 就让你禁用命名管道改用 TCP/IP,但在真实环境里,error 40 的根因往往不是协议本身坏了,而是客户端根本连不到那台服务器,所以无论你用命名管道还是 TCP/IP,结果都一样连不上。错误 53 在 Windows 网络层面叫“找不到网络路径”,它进一步印证了客户端到服务器的网络路径不通,比如 IP 不对、端口被防火墙挡了、或者服务没监听。
1.2 为什么同一个报错会出现在完全不同的场景里
这个报错最磨人的地方在于,它的出现场景非常杂。我在实际工作中遇到过至少五种情况,报错文本几乎一模一样:第一种,本机用 SSMS 连接默认实例,实例服务根本没启动,报这个错;第二种,客户端远程连接命名实例,SQL Browser 服务没开,报这个错;第三种,服务器防火墙挡了 1433 端口,远程连接报这个错;第四种,连接字符串里的服务器名写了个不存在的机器名,也报这个错;第五种,服务器上同时装了多个 SQL Server 实例,客户端连的端口和实例实际监听的端口对不上,还是报这个错。
正因为根因五花八门,排查这个报错最忌讳的就是“头痛医头”——网上说关防火墙就关防火墙,说改协议就改协议,结果折腾半天问题还在。正确做法是按“客户端实例名 → SQL Server 配置 → 网络连通性 → 防火墙 → 客户端协议”这个顺序一层层排除,每一步都有明确的验证方法,而不是盲试。
2. 第一轮排查:从实例名称和连接字符串开始
2.1 实例名的正确写法:默认实例和命名实例的区别
很多人第一次接触 SQL Server 远程连接时,最容易忽略的就是“实例名”这个东西。SQL Server 的实例分两种:默认实例(MSSQLSERVER)和命名实例(比如 SQLEXPRESS、SQL2019)。默认实例的访问方式就是机器名或 IP 地址,比如192.168.1.10;而命名实例的访问方式是“机器名\实例名”,比如192.168.1.10\SQLEXPRESS。
这里有个典型的坑:如果你是默认实例,连接时却在服务器名称里写了服务器IP\SQLEXPRESS这种带实例名的写法,很可能会收到这个报错,因为服务器上压根没有叫这个名字的实例。反过来,如果你装的是命名实例,却在连接时只写了服务器IP,那 SQL Server 客户端会默认连接默认实例,同样会失败。我见过一个同事排查了大半天,最后发现装的是 SQLEXPRESS 命名实例,连接字符串里却只写了 IP,加上了\SQLEXPRESS后缀后秒连成功。
提示:不确定服务器上装的是默认实例还是命名实例时,在服务器本机打开“服务”(services.msc),找名字里带 “SQL Server (” 的服务,括号里面的内容就是实例名。默认实例显示为 “SQL Server (MSSQLSERVER)”,命名实例则显示为 “SQL Server (SQLEXPRESS)” 这样的格式。
2.2 连接端口:默认端口 1433 与动态端口
除了实例名,端口也是连接字符串里的一个“隐藏变量”。默认实例默认监听 1433 端口,用 SSMS 连接时可以不写端口号,客户端会自动用 1433。但命名实例的情况完全不同——命名实例默认使用动态端口,也就是每次 SQL Server 服务启动时,系统随机给它分配一个空闲端口,这个端口可能每次都不一样。
这就引出了一个几乎所有人都绕不开的问题:如果需要远程连接命名实例,光知道服务器 IP 和实例名是不够的,客户端还需要知道这个实例当前监听在哪个端口上。解决这个问题的角色叫SQL Server Browser 服务,它监听在 UDP 1434 端口,专门负责把“实例名”翻译成“IP:端口”。如果 SQL Browser 服务没启动,或者防火墙挡了 UDP 1434,客户端就会拿着实例名找不到对应的端口,最终报出我们看到的 error 40。
所以在排查时,第一轮就应该确认清楚:
- 服务器上装的是默认实例还是命名实例
- 如果远程连接,是打算用
IP直连(默认实例)还是要带实例名(命名实例) - 命名实例的话,SQL Browser 服务有没有启动
这些信息看似基础,却是后面所有排查的前提,因为如果你连目标都没确认清楚,后面查防火墙和网络根本没有意义。
3. 第二刀切向 SQL Server 自身:网络配置与服务状态
3.1 SQL Server 配置管理器:远程连接的总开关
确认完实例名,下一个要排查的就是 SQL Server 自身的网络配置。这里不能不提一个工具——SQL Server 配置管理器(SQL Server Configuration Manager),它和 Windows 的“服务”管理界面不一样,是专门管理 SQL Server 相关服务、网络协议和客户端协议的。
打开配置管理器后,找到“SQL Server 网络配置”,点开你的实例,右侧会列出三个协议:Shared Memory(共享内存)、Named Pipes(命名管道)、TCP/IP。默认情况下,Shared Memory 是启用的,而 TCP/IP 有可能是禁用的——这在本地连接时感觉不出来,但远程连接时 TCP/IP 必须启用,否则客户端根本无法通过网络访问 SQL Server。
我之前遇到过一台服务器,本机用 SSMS 连得好好的,远程就是连不上,排查到最后发现 TCP/IP 协议是禁用状态。原因也很典型:装数据库的时候图省事一路下一步,SQL Server 默认只启用了 Shared Memory,这个协议只支持本机进程间通信,网络请求根本无法到达。
注意:启用 TCP/IP 后,必须重启 SQL Server 服务才能生效。重启方式有两种,一是在配置管理器里右键实例名选择“重启”,二是去 Windows 服务里找到对应的 SQL Server 服务右键重启。这里的坑在于,如果你装了多个实例,一定要选对实例名对应的服务,别把别的实例重启了。
3.2 TCP/IP 属性里的 IP 地址配置:为什么有时候“本机可以,远程不行”
启用了 TCP/IP 协议后,还没完。点开 TCP/IP 的属性,里面有一个“IP 地址”选项卡,里面列了 IP1、IP2、IP3 一直到 IPAll。这里的配置很容易让人迷惑,而且这里是动态端口和静态端口的决策点。
对于默认实例,通常推荐把 IPAll 里的“TCP 端口”设成 1433,这样客户端就可以用默认端口连接。但你一定要检查每一行 IP 条目里的“已启用”状态,特别是代表本机环回地址的127.0.0.1和代表实际网卡 IP 的那一项。如果某个 IP 条目的“已启用”是“否”,客户端通过网络访问这个 IP 时就会失败。
对于命名实例,如果你希望远程连接稳定,建议在 IPAll 里清空“TCP 动态端口”,然后在“TCP 端口”里手动填一个固定端口(比如 1433 或 14330),这样就不依赖 SQL Browser 了。我这几年部署生产环境时,一律把命名实例的端口固定下来,理由很简单——生产环境里防火墙规则需要确定性,动态端口意味着每次服务重启后防火墙都可能失效。虽然 SQL Browser 可以动态解析端口,但多一个依赖就多一个故障点,尤其是在企业级网络里,UDP 1434 经常被安全策略屏蔽。
3.3 SQL Browser 服务:命名实例远程连接的“翻译官”
接着上面说的,如果服务器上装的是命名实例,并且你没有固定端口,那么 SQL Browser 服务就是远程连接能否成功的关键。这个服务在配置管理器的“SQL Server 服务”列表里也能看到,名字就叫“SQL Server Browser”。
很多情况下,SQL Browser 服务的启动类型默认是“手动”或者“禁用”,如果它没在运行,客户端的命名实例请求就会卡在“找不到对应端口”这一步,最终报 error 40。解决办法很简单:在配置管理器里把 SQL Server Browser 的启动模式改成“自动”,然后启动服务。
有个细节值得多说一句:SQL Server Browser 监听的是UDP 1434,如果你开启了 Windows 防火墙,还要在防火墙里放行这个 UDP 端口,否则即使服务在跑,远程客户端还是无法通过实例名解析到端口。我在下文防火墙部分会一并给出具体的放行方法。
4. 防火墙与网络可达性:真正的重灾区
4.1 先分清三类防火墙:服务器自带、网络设备、云安全组
如果 SQL Server 本身的配置完全没问题,实例名也确认过了,但远程连接仍然报 error 40,那问题大概率出在网络访问控制上。这里很多人有一个误区,以为防火墙就只是 Windows 自带的那个防火墙。真实环境里至少有三层访问控制可能拦截 SQL Server 的流量:
- 服务器操作系统自带的防火墙(Windows Defender Firewall)
- 网络层面的防火墙设备(企业路由器、硬件防火墙、交换机 ACL 等)
- 云平台的安全组规则(如果是云服务器,这个尤其容易被忽略)
我接过一个客户的工单,SQL Server 和防火墙配置全部正常,本机 telnet 1433 端口也是通的,远程就是连不上。最后发现客户用的是某云平台,安全组入方向规则没放行 1433 端口。云安全组和操作系统防火墙是两套独立机制,云安全组挡在虚拟机外面,你进不去系统、看不到它,但流量根本到不了操作系统那一层。
4.2 用 telnet 和 PowerShell 验证端口连通性:最快定位问题层
在动防火墙之前,必须先用工具确认“端口到底通不通”。这一步可以帮你快速判断问题出在 SQL Server 本身还是网络链路。
最简单的工具是 telnet。在客户端命令行里执行:
telnet 192.168.1.10 1433如果屏幕上出现一个空白的黑窗口,说明端口是通的,按 Ctrl+] 再输入 quit 退出即可。如果提示“无法打开到主机的连接”或者直接拒绝,说明端口不通,问题在网络层面。
Windows 8/10/11 默认没有安装 telnet 客户端,这时候可以用 PowerShell 的 Test-NetConnection 命令:
Test-NetConnection 192.168.1.10 -Port 1433输出结果里最关键的字段是TcpTestSucceeded,如果显示True,说明 TCP 连接成功;如果显示False,说明端口不可达。
提示:telnet 连不上 1433 时,要再看一眼连的是什么端口。如果是命名实例且没固定端口,1433 上没监听是正常的,你应该先确认实例实际监听的端口,或者先验证 UDP 1434 是否可通信。直接拿 1433 测命名实例,容易得出错误结论。
4.3 Windows 防火墙放行 SQL Server 端口的具体操作
如果端口确实不通,接下来就需要查看并配置防火墙了。Windows 防火墙的入站规则里,SQL Server 相关的放行有两种做法:一是通过“高级安全 Windows Defender 防火墙”手动新建入站规则,二是用命令行添加。
手动方式适合图形界面操作,打开“高级安全 Windows Defender 防火墙”,选择“入站规则”→“新建规则”,规则类型选“端口”,TCP 端口填1433(如果固定了其他端口就填实际端口),操作选“允许连接”,配置文件全部勾选,最后命名保存。如果是命名实例且需要 SQL Browser,再添加一条 UDP 1434 的规则。
命令行方式在批量部署或远程运维时效率更高,管理员权限 PowerShell 里执行:
New-NetFirewallRule -DisplayName "SQL Server TCP 1433" -Direction Inbound -Protocol TCP -LocalPort 1433 -Action Allow New-NetFirewallRule -DisplayName "SQL Server Browser UDP 1434" -Direction Inbound -Protocol UDP -LocalPort 1434 -Action Allow添加完规则后,最好在客户端重新执行一次端口连通性测试,确认TcpTestSucceeded变成了True,再尝试用 SSMS 连接。
4.4 企业网络里的隐藏关卡:路由器 ACL 与安全组
如果服务器上 Windows 防火墙已经放行,客户端测端口仍然不通,就要开始怀疑服务器之外的网络设备了。在企业网络里,防火墙设备可能会基于安全策略拦截非标准端口的高位端口访问;在云环境里,安全组的入方向规则是独立于操作系统防火墙的。
我建议的排查思路是:先在服务器本机执行netstat -ano | findstr 1433确认 SQL Server 确实在监听这个端口,然后在服务器本机用telnet 127.0.0.1 1433测试,通的话说明服务本身没问题;接着在同一局域网内的另一台机器测telnet 服务器IP 1433,如果不通,说明问题出在服务器防火墙到网络设备这一层;如果通,再跳回客户端去测,不通的话问题就缩小到了客户端防火墙或客户端到服务器的中间链路。
这种“分段落测试”的思路,本质上就是把故障范围一层层缩小,避免在一个环节上瞎折腾。遇到过很多新手,一上来就关 Windows 防火墙,结果问题根本不在那里,还把服务器暴露在不安全的状态下。我个人的建议是,永远不要用“关闭防火墙”来解决问题,正确做法是精确放行对应端口,既解决了连通性,又不牺牲安全性。
5. 容易被忽略的“隐藏关卡”:身份验证、主机文件与客户端协议
5.1 SQL Server 身份验证模式:远程连接的“软件开关”
当你把网络层面全部打通之后,还有一个经常被忽视的设置——SQL Server 的身份验证模式。默认安装时,SQL Server 可能只启用了“Windows 身份验证模式”,这意味着只有 Windows 域账号或本机账号才能登录。如果你在远程用sa账号或自定义 SQL 账号连接,会收到另一个不相关的错误(通常是 18456),但很多人会把 18456 和 error 40 弄混,导致排查方向跑偏。
如果你想用 SQL 账号远程登录,必须在 SSMS 里右键服务器实例选择“属性”,找到“安全性”页面,把服务器身份验证改成“SQL Server 和 Windows 身份验证模式”,然后重启服务。这个设置改变了 SQL Server 的认证策略,不改的话就算网络全通,认证环节照样会失败。
5.2 主机文件(hosts)与 DNS 解析:看似无关实则致命
如果客户端是用机器名而非 IP 地址连接服务器的,那么名称解析的正确性至关重要。Windows 在解析主机名时有自己的顺序:先查 hosts 文件,再查 DNS 缓存,最后查 DNS 服务器。如果 hosts 文件里有一条错误的映射记录,把服务器名指向了一个错误的 IP,那么客户端连接到错误地址,自然就会报 error 40。
有一次客户反馈数据库突然连不上了,查了半天网络和服务都没问题,最后发现是运维人员在服务器上改过网卡 IP,但客户端 hosts 文件里还留着旧的映射。这种问题特别隐蔽,因为只看报错信息完全想不到会是 hosts 文件的问题。
排查方法很简单:在客户端执行ping 服务器名,看解析出来的 IP 是否和实际服务器 IP 一致。如果不一致,检查C:\Windows\System32\drivers\etc\hosts里有没有残留记录,以及 DNS 服务器上的记录是否正确。
5.3 客户端协议顺序:为什么有时能用 IP 连、用机器名连不上
最后还有一个非常冷门但真实存在的坑:客户端网络协议的顺序。SQL Server 客户端工具(包括 SSMS、ODBC 驱动等)在发起连接时,会按照一定的顺序尝试网络库。默认顺序通常是 Shared Memory → TCP/IP → Named Pipes。
在 SQL Server 配置管理器里,右侧找到“SQL Native Client 配置”或“客户端协议”(取决于版本),可以看到这四个协议的启用状态和顺序。如果 TCP/IP 被禁用了,而 Named Pipes 排在前面,客户端就会优先尝试命名管道,在某些网络环境下(尤其是不允许 SMB 445 端口通信的网络),命名管道连接会直接失败,然后错误信息里就会告诉你 “provider: Named Pipes Provider, error: 40”。
解决方案是:在客户端协议里启用 TCP/IP,并把 TCP/IP 的顺序调整到 Named Pipes 之前。这里我想纠正一个常见的误解——报错信息里提到 Named Pipes 并不代表问题出在协议本身,而是客户端尝试用 Named Pipes 连接,但这条路走不通。很多时候把 TCP/IP 提到最前面,同时保证网络端口通,问题就迎刃而解。
6. 实战复盘:我处理过的一个典型 error 40 案例
6.1 场景还原:一台服务器、两个实例、一个忘了固定端口的部署
前年我帮一家公司处理过一起典型的 error 40 故障,整个过程几乎是把本文提到的坑全部踩了一遍,非常适合当作综合案例来复盘。
那家公司的服务器上装了 SQL Server 2019 默认实例和一个 SQL Server 2019 命名实例(实例名 TEST),两个实例共用一个 Windows 防火墙。故障现象是:远程客户端用192.168.10.20\TEST连接命名实例时,报 error 40,错误号 53;但用192.168.10.20连接默认实例却没问题。
刚开始我怀疑是防火墙问题,于是先在客户端做了端口连通性测试:默认实例的 1433 端口是通的,命名实例因为没固定端口,无法用 1433 测。接着检查 SQL Browser 服务,发现它虽然启动了,但防火墙没放行 UDP 1434。这就解释了为什么默认实例连得上、命名实例连不上——默认实例走固定 1433 端口,不受 UDP 1434 影响;命名实例需要客户端通过 UDP 1434 向 SQL Browser 查询实际端口,UDP 1434 被防火墙挡了,查询请求就无法送达。
6.2 排查与解决过程:固定端口优于放行 UDP
针对这个情况,我有两个方案:一是放行防火墙的 UDP 1434 端口,让 SQL Browser 可以正常响应查询;二是直接在 IPAll 里为命名实例固定一个 TCP 端口,绕开 SQL Browser 的依赖。
我选择了第二个方案。操作路径是:配置管理器 → SQL Server 网络配置 → TEST 实例的协议 → TCP/IP → IP 地址 → IPAll → 清空“TCP 动态端口”→ “TCP 端口”填14330→ 重启 TEST 实例服务。然后在防火墙里放行 TCP 14330 端口:
New-NetFirewallRule -DisplayName "SQL Server TEST 14330" -Direction Inbound -Protocol TCP -LocalPort 14330 -Action Allow之后客户端连接时,服务器名称填192.168.10.20\TEST,14330或者192.168.10.20,14330(因为指定了端口,可以不写实例名直接写端口,但为了可读性我一般会写IP\实例名,端口的格式)。实测连接成功,故障解决。
这里我想解释一下为什么优先固定端口而不是放行 UDP 1434:第一,固定端口后,连接路径变成“IP:固定端口”的确定性路径,排障时非常简单;第二,UDP 1434 在企业网络中经常被安全策略拦,你无法控制网络设备的行为;第三,SQL Browser 服务本身是一个额外的攻击面,减少依赖等于减少风险。
6.3 从案例里提炼出的通用排查路径
经过这个案例后,我自己整理了一套标准排查路径,现在处理 error 40 报错时基本按这个顺序走,很少走弯路:
- 第一步,确认实例名格式。默认实例用 IP 或机器名,命名实例用
机器名\实例名,如果不确定,上服务器看服务名,括号里的就是实例名。 - 第二步,确认 SQL Server 服务在运行。服务器本机打开 SQL Server 配置管理器,检查目标实例的状态是“正在运行”。
- 第三步,确认 TCP/IP 协议已启用。配置管理器 → SQL Server 网络配置 → 对应实例的协议 → TCP/IP 已启用。
- 第四步,确认端口信息。默认实例应该在 1433 端口;命名实例建议固定端口,确认实际监听端口的方法是在服务器上执行
netstat -ano | findstr 1433(替换为实际端口)。 - 第五步,客户端测端口连通性。用
Test-NetConnection 服务器IP -Port 端口,不通就查防火墙和安全组。 - 第六步,确认防火墙放行。Windows 防火墙放行 TCP 端口;如果用命名实例且没有固定端口,还需要放行 UDP 1434。
- 第七步,确认身份验证模式。远程 SQL 账号登录需要 SQL Server 和 Windows 身份验证模式。
- 第八步,确认客户端协议顺序。TCP/IP 要启用并排在前面。
这套流程不需要每次都完整跑一遍,但当你没头绪的时候,按这个顺序走,基本能在 30 分钟内定位到问题。
7. 几个亲测有效的进阶技巧与避坑提醒
7.1 用 SSMS 的“服务器名称”下拉框测试多种连接方式
在实际排障时,我经常用 SSMS 的服务器名称输入框作为“快速测试板”。比如前面确认了端口 14330 是通的,就可以直接在服务器名称里输入192.168.10.20,14330,看能否连上。这种方式比写分成代码再测要快很多,因为 SSMS 会实时反馈连接错误的具体阶段,你可以从错误信息的变化中判断问题出在哪一层。
需要注意的是,SSMS 里输入IP,端口的格式时,逗号必须是英文逗号,不能是中文逗号,否则解析会失败。这看着是个小问题,但确实有人卡在这里过。
7.2 事件查看器与 SQL Server 错误日志的妙用
如果以上排查全部正常,但连接依然失败,我建议你去翻一下 SQL Server 的错误日志。路径是在 SSMS 里右键实例 → 管理 → SQL Server 日志,或者直接打开C:\Program Files\Microsoft SQL Server\MSSQL{版本号}.{实例名}\MSSQL\Log\ERRORLOG文件。
错误日志里通常会记录客户端的登录尝试失败原因。比如日志里出现 “Login failed for user 'sa'. Reason: Password did not match” 说明网络层已经通了,问题在认证;如果日志里根本没有新的连接尝试记录,说明请求根本没到达 SQL Server,问题还在网络层。这个信息对于缩小排查范围非常有价值——它能明确告诉你问题是在“连不上”还是“连上了但认证失败”。
7.3 关于“关闭防火墙”的最后一句劝告
网上关于 SQL Server 连接问题的回答里,总有人说“把防火墙关了试试”。我不推荐这种做法,主要有三个原因:一是关闭防火墙后如果问题解决了,你无法确认原来到底是哪条规则拦截的,后续很难做精确配置;二是关闭防火墙会把服务器暴露在网络上,对生产环境来说是严重的安全隐患;三是有时候你关了 Windows 防火墙还是连不上,因为问题压根不在那里,白白浪费时间和精力。
正确姿势永远是:先测端口,确认不通后加一条精确的入站规则,再重新测端口,直到通了为止。如果加了自己觉得没问题的规则还是不通,可以临时加一条“允许所有 TCP 入站”的规则来验证是不是防火墙问题,验证完立刻删掉,再逐条收敛规则范围。这样既高效又安全。
7.4 一劳永逸的部署习惯:安装时就想好远程连接方案
最后分享一个部署层面的经验。与其每次连接报错了再痛苦排查,不如在第一次安装 SQL Server 时就规划好远程连接方案。我自己在部署时一般会做这几件事:选择命名实例时直接固定端口(省去 SQL Browser 依赖);安装完成后立刻启用 TCP/IP 协议;在防火墙里放行固定端口;将 SQL Server 和 SQL Server Browser 服务的启动类型设为“自动”;确认身份验证模式为混合模式并设置好强密码的sa账号。这些操作大概多花五分钟,但能省掉日后大量的排障时间。
我还记得第一次处理 error 40 时,前后折腾了两个多小时,最后发现只是防火墙没放行 UDP 1434,那种哭笑不得的感觉到现在都还记得。这也是我写这篇文章的初衷——希望你把这篇文章当作一份“排查地图”,下次再遇到这个报错时,能按图索骥、一步到位,而不是继续在网上零散地搜教程碰运气。