原文链接:https://blog.csdn.net/qq_39390545/article/details/108755289
以下为复盘学习笔记
目录
UnknownHostException 一般原因
UnknownHostException
是Java编程中常见的一个网络异常,通常在试图通过域名查找并连接到一个主机时抛出。
这个异常的主要原因有以下几点:
提供的主机名拼写错误或不存在
1、拼写错误 :再检查一遍命令
2、不存在:执行如下命令判断提供的主机名在DNS里是否存在
# Windows
nslookup blog.csdn.net # 测试默认 DNS 服务器
nslookup blog.csdn.net 8.8.8.8 # 测试 Google 公共 DNS
nslookup blog.csdn.net 114.114.114.114 # 114DNS 国内老牌 DNS,解析速度快,兼容性强。
nslookup blog.csdn.net 223.5.5.5 阿里 AliDNS
nslookup blog.csdn.net 183.60.83.19 腾讯 DNS
nslookup blog.csdn.net 119.29.29.29 DNSPod DNS+ 腾讯云旗下服务,优化国内域名解析。
# Linux/macOS 适用
dig blog.csdn.net +short
本地hosts文件配置错误
1、/etc/hosts
文件中配置了错误的主机名与 IP 地址映射。
检查 /etc/hosts
文件(Linux/Mac)或 C:\Windows\System32\drivers\etc\hosts
文件(Windows)。确保主机名与正确的 IP 地址匹配。
DNS配置问题
1、系统或网络中未正确配置DNS服务器。
以下是不同操作系统下查看 DNS 配置是否正确的方法及验证步骤:
●Windows 系统:Win+R → CMD → ipconfig /all
,或者直接查询 ipconfig /all | findstr "DNS"
●Windows 系统:Win+E → 网络(右键选属性) → 更改适配器设置 → 右键点击当前网络 → 属性 → 双击 IPv4 → 查看 首选 DNS 服务器
●Linux 系统:查看配置文件 cat /etc/resolv.conf
●Linux 系统:使用工具 nmcli dev show | grep DNS
2、DNS服务器不可用或响应超时。测试 DNS 是否正常工作
● 场景 1:DNS 解析前中断
现象:
traceroute example.com
失败,提示“unknown host”。
nslookup example.com
失败,提示“no answer”。
traceroute <IP>
成功。
结论:问题出在 DNS 解析阶段。
● 场景 2:网络路径中断
现象:
traceroute example.com
和 traceroute <IP>
都失败。
在某跳之后出现 * * *
。
结论:网络路径本身存在问题。
●清除缓存后重试解析
# Windows:
ipconfig /flushdns
# Linux:
sudo systemd-resolve --flush-caches
网络连接问题
1、设备没有连接到互联网或目标网络。
● 设备有没有断网
● 查看 IP 地址配置
# Windows
ipconfig
# macOS/Linux
ifconfig # 或 ip addr
● 测试本地网络(默认网关)
ping 192.168.1.1
成功:本地网络正常。
失败:检查路由器、防火墙或 IP 冲突。
● 测试互联网连通性
ping 8.8.8.8 # Google DNS
ping 1.1.1.1 # Cloudflare DNS
成功:网络层正常,问题可能在应用层(如浏览器设置)。
失败:检查路由器 WAN 口状态或联系 ISP。
● 测试特定网站
ping example.com # 或直接访问网页
成功:互联网正常。
失败:尝试使用 IP 访问(如 http://93.184.216.34),若成功则为 DNS 问题。
2、防火墙或网络策略阻止了 DNS 查询。
临时禁用防火墙测试,重新执行 nslookup 或 dig,若恢复正常,则证明防火墙是问题根源。
超时问题
1、DNS 查询超时,可能是由于网络延迟或 DNS 服务器性能问题。
解决方法:
增加 DNS 查询的超时时间(如果支持)。
更换更快的 DNS 服务器。
如何在本地hosts文件配置域名和IP?
在开发环境中,有时可以暂时直接在本地hosts文件
中添加域名
和IP地址
的对应关系以快速测试功能。在服务器发送求时,就会 自动把域名转成IP 进行调用了。
以CSDN的域名为例(www.csdn.net)
第1步:用有互联网的机器 win+r
→ cmd
进入dos窗口
第2步:执行 nslookup www.csdn.net
命令,获取www.csdn.net
域名对应的IP
,
C:\Users\zhang>nslookup www.csdn.net
服务器: public1.114dns.com
Address: 114.114.114.114
非权威应答:
名称: 55cb88f4.csdn.net.cname.yunduns.com
Address: 123.129.227.28
Aliases: www.csdn.net
第3步:打开hosts文件
Windows:一般在C:\Windows\System32\drivers\etc\hosts
Linux:一般在/etc/hosts
第4步:修改hosts文件,把域名和IP写到hosts文件中,用于把域名解析成IP
第5步:执行 ipconfig/flushdns
清除DNS缓存
第6步:完成,这样就可以调到CSDN域名下的接口了。如https://www.csdn.net/xxx/login
常见抛此异常场景
网络请求
发起HTTP/HTTPS请求时,如果DNS无法解析目标域名的IP地址,则会抛出此异常。
URL url = new URL("http://unresolved-domain.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 此处可能会抛出UnknownHostException
数据库连接
在JDBC中,如果你提供的数据库URL
是一个域名而非IP地址,并且该域名无法被DNS解析,则会抛出此异常。
String url = "jdbc:mysql://unresolved-db-server:3306/mydatabase";
Connection conn = DriverManager.getConnection(url, "username", "password");
// 此处可能会抛出UnknownHostException
Socket通信
在直接使用Socket进行TCP/IP通信时,如果需要通过域名创建Socket连接,而域名未解析成功,则会抛出此异常。
try {
InetAddress address = InetAddress.getByName("unresolved-domain.com");
} catch (UnknownHostException e) {
System.out.println("Failed to resolve the host.");
}
服务发现与调用
在微服务架构中,客户端可能依赖于服务注册中心(如Eureka、Consul)获取其他服务的地址,如果获取到的地址是未解析成功的域名,后续进行远程服务调用时也会遇到这个问题。
ping 不通原因
一、网络连接问题
- 物理连接故障
现象:本地设备未连接到网络(如网线松动、Wi-Fi 未连接)。 - 网关或路由器故障
现象:能 ping 通本地设备,但无法 ping 通网关(如 192.168.1.1)。
二、DNS 解析失败
- 主机名无法解析为 IP
现象:ping example.com 失败,但ping <IP>
成功。
三、目标主机不可达
-
目标主机离线
现象:目标主机关机、网络接口关闭,或所在网络故障。 -
目标主机防火墙拦截
现象:目标主机开启防火墙并禁用了 ICMP 协议。
四、中间网络设备限制
-
防火墙或路由器过滤 ICMP
现象:本地网络设备(如路由器)或运营商禁用了 ICMP。 -
NAT 或 VPN 配置问题
现象:跨网络或通过 VPN 访问时无法 ping 通。
五、特殊场景
-
移动网络或公共 Wi-Fi
原因:运营商或热点可能限制 ICMP 流量。 -
IPv6 与 IPv4 冲突
现象:同时启用 IPv4 和 IPv6 时可能导致解析混乱。
路由(Routing):指将数据包从源地址传输到目标地址的过程。
防火墙:主要负责流量的安全控制,解决“是否允许通过”的问题。
实现方式:
包过滤防火墙:基于 IP 地址、端口号等信息进行过滤。
应用层防火墙:检查应用层协议(如 HTTP、FTP)的内容。
状态检测防火墙:跟踪连接状态,确保流量符合预期。
协同工作:
路由优先于防火墙:数据包首先经过路由处理,确定其目标地址和下一跳,然后才进入防火墙进行安全检查。
集成设备:现代网络设备(如路由器或防火墙)通常集成了路由和防火墙功能,能够同时完成路径选择和安全控制。
ping blog.csdn.net 测试主机与目标设备之间的连通性和延迟
traceroute blog.csdn.net 显示数据包从源主机到目标主机所经过的路由器路径