请按照以下步骤从最简单、最可能的原因开始尝试:
第一步:基础快速排查
这些步骤能解决大部分临时性的小故障。
- 重启设备:关闭您的 Mac 和路由器,等待一分钟后再重新打开。这是解决网络问题最有效的“万能药”。
- 检查其他设备:您的手机或其他电脑连接同一个 Wi-Fi 能上网吗?
- 如果其他设备也不能:问题出在路由器或外部网络上。可以联系您的网络服务提供商(ISP),或者检查路由器指示灯是否正常。
- 如果其他设备可以:问题出在您的 Mac 设置上。请继续往下看。
- 关闭/重新打开 Wi-Fi:点击菜单栏的 Wi-Fi 图标,选择“关闭 Wi-Fi”,等待几秒后再重新打开。
- 忘记网络并重新连接:
- 点击菜单栏 Wi-Fi 图标 -> “网络设置”。
- 在“已知网络”列表中找到当前连接的网络,点击右侧的“…”三个点按钮。
- 选择“从列表中移除”。
- 重新搜索并连接该 Wi-Fi,需要再次输入密码。
第二步:检查 Mac 的网络设置
-
检查 IP 地址获取方式:
- 打开“系统设置” -> “网络”。
- 选择“Wi-Fi”,点击右侧的“详细信息…”。
- 进入“TCP/IP”标签页。查看“配置 IPv4”选项,通常应该是“使用 DHCP”。
- 如果这里的 IPv4 地址是
169.254.x.x
这样的格式,说明您的 Mac 没有从路由器成功获取到有效的 IP 地址。这通常是问题的关键所在。您可以尝试将其手动设置为“使用 DHCP(手动设定地址)”,但更建议回到第一步重启路由器。
-
刷新 DHCP 租约:
- 在刚才的“TCP/IP”页面,点击“续租 DHCP”按钮。这会让 Mac 重新向路由器申请一个网络地址。
-
检查 DNS 设置:
- 在“网络详细信息”中,进入“DNS”标签页。
- 如果列表中有一些奇怪的 DNS 地址,可以尝试删除它们,或者添加一个可靠的公共 DNS 服务器,例如:
8.8.8.8
(Google DNS)1.1.1.1
(Cloudflare DNS)
- 这可以解决因默认 DNS 服务器故障导致的域名解析问题。
第三步:使用网络诊断工具
Mac 自带了一个很好的诊断工具。
- 打开“系统设置” -> “网络”。
- 点击右下角的“诊断…”按钮。
- 选择“Wi-Fi”并按照向导进行操作。它会帮你检测一系列可能的问题。
第四步:高级终端命令(如果以上均无效)
在“应用程序” -> “实用工具”中打开“终端”,尝试输入以下命令来重置网络核心组件:
-
释放和更新 IP 地址:
sudo ipconfig set en0 DHCP
(输入后需要按回车,然后输入你的电脑密码,密码输入时不可见,输完再按回车)
-
刷新 DNS 缓存(对于 macOS Sonoma 及更新版本):
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
-
重置网络硬件(模拟拔插网卡):
sudo ifconfig en0 down sudo ifconfig en0 up
(
en0
通常是内置无线网卡,如果不确定,可以用ifconfig
命令查看哪个接口有你的 Wi-Fi 名)
每输入一条命令后按回车执行。完成后,再次尝试上网。
第五步:最终手段
如果所有方法都失败了,可能是系统级配置损坏。
-
创建新的网络位置:
- 打开“系统设置” -> “网络”。
- 点击“位置”下拉菜单,选择“编辑位置…” -> 点击“+”号添加一个新位置(例如命名为“Test”)。
- 选择新创建的位置“Test”,然后重新配置你的 Wi-Fi。这相当于将网络设置全部重置为默认状态,但不会影响其他数据。
-
检查系统更新:确保你的 macOS 系统是最新版本,有时苹果会发布网络相关的修复补丁。
-
安全模式启动:重启 Mac 并立即按住
Shift
键直到看到登录窗口,进入安全模式。在安全模式下测试网络。安全模式会检查磁盘并加载最基本的驱动,如果安全模式下能上网,说明是某些登录项或第三方内核扩展冲突了。
总结排查思路:
- 其他设备正常吗? -> 问题在 Mac。
- 重启了吗? -> 重启路由器和 Mac。
- IP 地址正常吗? -> 不是
169.254.x.x
。 - DNS 能解析吗? -> 换一个公共 DNS 试试。
- 系统配置乱了吗? -> 创建新网络位置或进安全模式试试。
推荐阅读文章
-
由 Spring 静态注入引发的一个线上T0级别事故(真的以后得避坑)
-
如何理解 HTTP 是无状态的,以及它与 Cookie 和 Session 之间的联系
-
HTTP、HTTPS、Cookie 和 Session 之间的关系
-
什么是 Cookie?简单介绍与使用方法
-
什么是 Session?如何应用?
-
使用 Spring 框架构建 MVC 应用程序:初学者教程
-
有缺陷的 Java 代码:Java 开发人员最常犯的 10 大错误
-
如何理解应用 Java 多线程与并发编程?
-
把握Java泛型的艺术:协变、逆变与不可变性一网打尽
-
Java Spring 中常用的 @PostConstruct 注解使用总结
-
如何理解线程安全这个概念?
-
理解 Java 桥接方法
-
Spring 整合嵌入式 Tomcat 容器
-
Tomcat 如何加载 SpringMVC 组件
-
“在什么情况下类需要实现 Serializable,什么情况下又不需要(一)?”
-
“避免序列化灾难:掌握实现 Serializable 的真相!(二)”
-
如何自定义一个自己的 Spring Boot Starter 组件(从入门到实践)
-
解密 Redis:如何通过 IO 多路复用征服高并发挑战!
-
线程 vs 虚拟线程:深入理解及区别
-
深度解读 JDK 8、JDK 11、JDK 17 和 JDK 21 的区别
-
10大程序员提升代码优雅度的必杀技,瞬间让你成为团队宠儿!
-
“打破重复代码的魔咒:使用 Function 接口在 Java 8 中实现优雅重构!”
-
Java 中消除 If-else 技巧总结
-
线程池的核心参数配置(仅供参考)
-
【人工智能】聊聊Transformer,深度学习的一股清流(13)
-
Java 枚举的几个常用技巧,你可以试着用用
-
由 Spring 静态注入引发的一个线上T0级别事故(真的以后得避坑)
-
如何理解 HTTP 是无状态的,以及它与 Cookie 和 Session 之间的联系
-
HTTP、HTTPS、Cookie 和 Session 之间的关系
-
使用 Spring 框架构建 MVC 应用程序:初学者教程
-
有缺陷的 Java 代码:Java 开发人员最常犯的 10 大错误
-
Java Spring 中常用的 @PostConstruct 注解使用总结
-
线程 vs 虚拟线程:深入理解及区别
-
深度解读 JDK 8、JDK 11、JDK 17 和 JDK 21 的区别
-
10大程序员提升代码优雅度的必杀技,瞬间让你成为团队宠儿!
-
探索 Lombok 的 @Builder 和 @SuperBuilder:避坑指南(一)
-
为什么用了 @Builder 反而报错?深入理解 Lombok 的“暗坑”与解决方案(二)