Q-Logo 我的学习笔记分享

ping和telnet测试连通性小结

ping和telnet是测试网络连通时最常用的两个命令, 一般用ping命令测试网络是否通畅或网络连接速度(Ping域名可以得出解析IP)  ,用telnet命令则用于测试目标主机是否打开了某端口(默认是23)。 常见的使用场景是,不管三七二十一,先ping一下域名或IP,确认能连通到目标主机,然后再根据需要用telnet IP port测试目标主机上的某个端口是打开的。

但是在实际应用时,网络环境可能会比较复杂,有时会遇到一些不太常见的情况:

  • 能ping通,但telnet不通
  • ping不通,但能telnet通

要理解这些情况,就需要弄清楚ping和telnet到底做了什么。

ping

首先看一下基本概念

ping是一种计算机网络工具,用来测试数据包能否透过IP协议到达特定主机。ping的运作原理是向目标主机传出一个ICMP echo@要求数据包,并等待接收echo回应数据包。程序会按时间和成功响应的次数估算丢失数据包率(丢包率)和数据包往返时间(网络时延,Round-trip delay time)。———— 维基百科
ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。 ————百度百科

是工作在 TCP/IP网络体系结构中应用层的一个服务命令, 主要是向特定的目的主机发送 ICMP Echo 请求报文。

简单说 ping 使用的是ICMP协议,它发送icmp回送请求消息给目的主机。目的主机收到 ICMP 回送请求报文后立刻回送应答报文,如果源主机在一定时间内收到应答,则说明到达该主机的网络正常。

一般情况下,ICMP协议默认是开启的,这样他主机ping的时候,就会回送应答报文,也就是可以ping通。需要注意的是,ICMP协议也是可以关闭的,如果关闭了,那么从其他主机ping的时候,就不会回送应答报文,也就是ping不同。开启/关闭ICMP协议的方法,可以参考https://zhuanlan.zhihu.com/p/302623536。

也就是说,ping不通,一般意味着到目标主机的网络是不通的,但也有可能网络虽是通的,但目标主机关闭了ICMP协议,对ping请求不予回应。如果是后面的情况,就可能会出现ping不通,但能telnet通的现象。

telnet

Telnet意思是Internet的远程登录协议,可以通过它远程登录来控制别的计算机 。 Telnet是一个明文传送协议,它将用户的所有内容,包括用户名和密码都明文在互联网上传送,具有一定的安全隐患,因此服务器一般都会禁用Telnet协议。

telnet支持远程登录,但大部分情况下,我们只用telnet ip port来查看目标主机是否打开了某端口(默认是23)。

一般来说系统都会有网络防火墙设置,如果防火墙关闭,那么只要某个端口启动了服务,该端口就能telnet通,telnet某个端口能通的前提是这个端口启动了服务,且防火墙允许该端口的访问。

端口打开的情况

$ telnet 192.168.1.10 2999
Trying 192.168.1.10...
Connected to 192.168.1.10.
Escape character is '^]'.

端口未打开的情况

$ telnet 192.168.1.10 2999
Trying 192.168.1.10...

telnet: connect to address 192.168.1.10: Connection refused

也就是说,telnet不通,可能是网络不通,或者端口未启动服务,或着防火墙禁止了对该端口的访问。如果是后面两种情况,就可能会出现能ping通,但telnet不通的现象。

总结

ping IP通意味着:到目标IP主机的网络是通的,且目标主机ICMP协议开启(默认就是开启)。

telnet IP port通意味着:到目标IP主机的网络是通的,目标IP主机在port端口启动了服务,且防火墙允许从源主机到目标IP主机port端口的访问。