今天开机以后,突然发现Mac显示连接上网但是无法浏览网页,已知无线局域网本身没有问题,于是开始排查:
硬件问题
将 Mac 开机,并在 Mac 启动时继续按住电源按钮。当你看到启动选项屏幕(显示有启动磁盘以及标有"选项"字样的齿轮图标)时,松开电源按钮。这时,你可以选择进入安全模式进行Wifi的连接,如果此时能够正常连接Wifi,那么恭喜你,首先硬件没有问题,其次局域网运行正常,那么只需要关机重启排查软件问题即可。
DNS
首先怀疑DNS的问题, 于是用dig命令,发现由于连接超时,无法连接到DNS服务器
vbnet
➜ ~ dig bing.com
; <<>> DiG 9.10.6 <<>> bing.com
;; global options: +cmd
;; connection timed out; no servers could be reached
➜ ~ dig @1.1.1.1 bing.com // 通过在1.1.1.1这个DNS服务器上执行dig命令,尝试查询bing.com的DNS记录
; <<>> DiG 9.10.6 <<>> @1.1.1.1 bing.com
; (1 server found)
;; global options: +cmd
;; connection timed out; no servers could be reached
➜ ~ curl -v https://ifconfig.me/ip
* Trying 34.117.118.44:443...
* Immediate connect fail for 34.117.118.44: No route to host
* Failed to connect to ifconfig.me port 443 after 26 ms: Couldn't connect to server
* Closing connection 0
curl: (7) Failed to connect to ifconfig.me port 443 after 26 ms: Couldn't connect to server
通过上面的测试,猜测是路由表或者防火墙导致
路由表
使用➜ ~ netstat -rn
查看路由表是否完整,进行排除;尽管路由表完整,但是
vbnet
➜ ~ traceroute bing.com
traceroute: Warning: bing.com has multiple addresses; using ...
...
...
*traceroute: sendto: Can't assign requested address
traceroute: wrote bing.com 52 chars, ret=-1
一些路由器无法提供往返时间,同时也出现了一些发送数据包的错误
更改系统配置文件
(请参考原文链接->1)
arduino
1、打开系统偏好设置--->网络--->WiFi--->高级--->WiFi--->删除首选网络框内的所有网络--->点击好--->点击应用;
2、还是在网络页面先,在边框有WiFi、蓝牙PAN、网桥等,选中WiFi,点击下面的减号删除WiFi,点击应用;
3、再次在系统偏好设置中打开网络页面,在左边框的下方点击加号,接口选择WiFi,服务名称随便写,点击创建,然后点击打开WiFi,链接你的WiFi。应该可以上网了。我是在这步解决的问题
4、Finder--->xxx的Mac--->Macintosh HD--->资源库-->Preferences--->SystemConfiguration--->找到NerworkInterfaces.plist文件并删除;
最终解决: sudo killall mDNSResponder
mDNSResponder是macOS系统中负责处理多播DNS(mDNS)和DNS服务发现的后台进程。它负责解析局域网内的主机名和IP地址之间的关系,并协助服务发现过程,使设备能够相互通信和识别。在终止该进程后,网络连接恢复正常。
curl -v https://ifconfig.me/ip
: 收到回复,连接成功
一些反思
- 即时系统备份:尽管重置系统是下下策,还是应该将电脑文件备份为一份看的见的(硬盘),一份看不见的(云盘);有的时候软件真的有问题官方维修也只能备份后重新刷新
- Host name的变化: 在重新连接网络以后,发现hostname发生变化,被初始化为
MacBook-Air.local
.这里建议更改一下自己的主机名,Mac的话在设置->共享->本机名称
; 主机名是网络标识符的一部分,用于识别网络上的计算机。当两台计算机具有相同的主机名时,可能会导致地址冲突或者DNS解析问题,当多个设备同时尝试使用相同的mDNS主机名或服务名称时,可能会导致冲突和竞争,使得某些设备无法正确地进行服务发现或连接到网络;至于是不是mDNS的bug,因为log证据不够充足,也没有办法定论了 - 此时检查进程
➜ ~ ps -ef | grep -i mdns
, 发现/usr/sbin/mDNSResponder
和/usr/sbin/mDNSResponderHelper
仍然在运行, amazing (