请按照以下步骤从最简单、最可能的原因开始尝试:
第一步:基础快速排查
这些步骤能解决大部分临时性的小故障。
重启设备:关闭您的 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 地址:
bash
复制代码
sudo ipconfig set en0 DHCP
(输入后需要按回车,然后输入你的电脑密码,密码输入时不可见,输完再按回车)
刷新 DNS 缓存(对于 macOS Sonoma 及更新版本):
bash
复制代码
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
重置网络硬件(模拟拔插网卡):
bash
复制代码
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 的"暗坑"与解决方案(二)