1. 背景

  机器A需要调用机器B的服务,为此要保证服务的可用性,我们有时候用ping,有时候用telent来验证机器A和B的连通性,但有时候会出现这种情况,A可以ping通B,但A调用B的服务会一直报服务超时?如果telnet通了,则不会发送这种情况,这是为什么呢?

2. 分析

  ping 可以测试到目标机器的连通性。用的是ICMP协议,和服务是否可用无关。

  telnet 用于远程管理连接主机。同时也是测试目标机器的TCP端口是否开放,如果连接失败,可能是防火墙屏蔽。可以简称服务是否可用。

3. 深入

ping的用法

C:\Users\dell>ping

用法: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]
            [-r count] [-s count] [[-j host-list] | [-k host-list]]
            [-w timeout] [-R] [-S srcaddr] [-c compartment] [-p]
            [-4] [-6] target_name

选项:
    -t             Ping 指定的主机,直到停止。
                   若要查看统计信息并继续操作,请键入 Ctrl+Break;
                   若要停止,请键入 Ctrl+C。
    -a             将地址解析为主机名。
    -n count       要发送的回显请求数。
    -l size        发送缓冲区大小。
    -f             在数据包中设置“不分段”标记(仅适用于 IPv4)。
    -i TTL         生存时间。
    -v TOS         服务类型(仅适用于 IPv4。该设置已被弃用,
                   对 IP 标头中的服务类型字段没有任何
                   影响)。
    -r count       记录计数跃点的路由(仅适用于 IPv4)。
    -s count       计数跃点的时间戳(仅适用于 IPv4)。
    -j host-list   与主机列表一起使用的松散源路由(仅适用于 IPv4)。
    -k host-list    与主机列表一起使用的严格源路由(仅适用于 IPv4)。
    -w timeout     等待每次回复的超时时间(毫秒)。
    -R             同样使用路由标头测试反向路由(仅适用于 IPv6)。
                   根据 RFC 5095,已弃用此路由标头。
                   如果使用此标头,某些系统可能丢弃
                   回显请求。
    -S srcaddr     要使用的源地址。
    -c compartment 路由隔离舱标识符。
    -p             Ping Hyper-V 网络虚拟化提供程序地址。
    -4             强制使用 IPv4。
    -6             强制使用 IPv6。

telnet用法

C:\Users\dell>telnet -help

telnet [-a][-e escape char][-f log file][-l user][-t term][host [port]]
 -a      企图自动登录。除了用当前已登陆的用户名以外,与 -l 选项相同。
 -e      跳过字符来进入 telnet 客户端提示。
 -f      客户端登录的文件名
 -l      指定远程系统上登录用的用户名。
         要求远程系统支持 TELNET ENVIRON 选项。
 -t      指定终端类型。
         支持的终端类型仅是: vt100, vt52, ansi 和 vtnt。
 host    指定要连接的远程计算机的主机名或 IP 地址。
 port    指定端口号或服务名。

4. 拓展

  linux中怎样关闭ICMP回应功能,即ping不通

echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all

如果需要ping通则输入:

echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_all

 

  Linux 开启telnet服务

/etc/xinetd.d/telnet,将disable=yes改成disable=no;

关闭telnet服务

/etc/xinetd.d/telnet,将disable=no改成disable=yes;

5.总结

  ping通常是用来检查网络是否通畅或者网络连接速度的命令。

  而telnet是用来探测指定ip是否开放指定端口的。