ping 和 telnet 到底有什么区别?
做后端开发、运维、测试的同学,几乎每天都在跟网络打交道。 遇到接口不通、服务挂了、连接超时,第一反应往往就是两条命令:
- ping
- telnet
但很多人其实只会用,却讲不清区别,面试被问到也容易含糊其辞。 今天这篇就用最直白、最接地气的方式,把 ping 和 telnet 彻底讲明白。
一、先一句话总结区别
- ping:测“能不能到达”(网络层 ICMP,只看 IP 是否通)
- telnet:测“端口能不能连上”(应用层 TCP,看服务是否活着)
简单说: ping 通 ≠ 服务可用;telnet 通 = 服务真的能连。
二、ping 是什么?能干什么?
ping 是基于 ICMP 协议(网络层)的工具,作用只有一个:
判断目标主机是否可达、网络链路是否通畅。
你可以把它理解成:
对着远方喊一声,看有没有回声。
ping 能做什么
- 判断本机能不能到达目标 IP/域名
- 看网络延迟(time)
- 看丢包率,判断网络稳不稳定
- 排查 DNS 是否解析正常
ping 不能做什么
- 不能判断端口是否开放
- 不能判断服务是否启动
- 不能判断防火墙是否放行了端口
- 更不能判断应用是否正常响应
比如: 服务器明明在运行,但防火墙封了 8080 端口,ping 依然是通的,但你业务就是访问不了。
这就是为什么 ping 通了,服务却连不上的根本原因。
三、telnet 是什么?能干什么?
telnet 是基于 TCP 协议 的工具,作用是:
尝试与目标主机的指定端口建立 TCP 连接。
你可以把它理解成:
走到对方家门口,敲敲门,看开不开门。
telnet 能做什么
- 判断目标端口是否开放
- 判断服务进程是否在监听
- 排查防火墙是否拦截端口
- 简单测试 HTTP、Redis、MySQL 等端口连通性
用法很简单:
telnet 192.168.1.100 8080
- 出现
Connected→ 端口通、服务在跑 - 出现
Connection refused→ 端口没开或服务没启动 - 出现
Timeout→ 防火墙拦截或网络不通
telnet 为什么比 ping 更贴近业务?
因为我们后端服务都是监听某个端口提供服务的:
- 80 / 443 → HTTP/HTTPS
- 3306 → MySQL
- 6379 → Redis
- 8080、8088 → SpringBoot
网络通,不代表端口通;端口通,才代表服务真的能访问。
四、最经典的面试题:ping 通但 telnet 不通,为什么?
这道题后端、运维、测试都常被问,标准答案就这几类:
- 目标端口没有开启(服务没启动)
- 防火墙拦截了端口(firewalld、安全组、iptables)
- 云服务器安全组未放行端口(阿里云/腾讯云最常见)
- 服务监听了 127.0.0.1,外部无法访问
- 端口被其他进程占用
一句话总结: ping 只负责路通不通,telnet 负责门开没开。
五、一张表看懂所有区别(面试直接背)
| 对比项 | ping | telnet |
|---|---|---|
| 协议 | ICMP(网络层) | TCP(传输层+应用层) |
| 作用 | 检测主机是否可达 | 检测端口是否开放、服务是否可连 |
| 是否需要端口 | 不需要 | 必须指定端口 |
| 能判断什么 | 网络通不通 | 服务能不能连 |
| 防火墙影响 | 可能禁 ICMP,ping 不通 | 可能封端口,telnet 不通 |
| 代表场景 | 路修好了 | 门打开了 |
| 结论 | ping 通 ≠ 服务可用 | telnet 通 = 服务可连接 |
六、实际工作中怎么用?(后端排查标准流程)
给你一套工作中最常用的排查顺序,你以后遇到问题直接照这个来:
- ping 域名/IP
- 不通:网络问题、DNS 问题、主机宕机
- ping 通了,就用 telnet 测端口
- 不通:防火墙、安全组、服务未启动、监听配置错误
- telnet 通了,业务还是不行
- 应用内部错误、Nginx 配置错、账号密码错、接口逻辑错
这一套流程,就是后端网络排查的标准思维模型。
七、结尾小结
最后用最通俗的话收尾:
- ping 是看路通不通
- telnet 是看门开没开
路通了,门不一定开; 门开了,服务才能真正用。