关键字

  • 连接挂起
  • DNS问题
  • 服务器没有侦听端口
  • 连接被服务器关闭

好记性不如烂笔头,记录下温故下!!!

telnet 不会解决问题但可以很快缩小问题的范围。
telnet 用来调试网络问题的简单命令和语法:

telnet <hostname or IP> <port>

因为 telnet 最初通过端口建立连接不会发送任何数据,适用于任何协议,包括加密协议。

连接问题主要集中在以上四种错误场景。了解下各种错误信息的含义,便于我们定位实际业务中的各类问题:

  • 平台访问远程数据源
  • 平台调用三方的api

Error 1 - 连接挂起

telnet longshawn.example.com 445
有时连接会莫名停止:

telnet longshawn.example.com 445
Trying 112.51.22.61...

telnet longshawn.example.com 445
Trying 112.51.22.61…

这意味着 telnet 没有收到任何回应来建立连接。有两个可能的原因:

  • 你和服务器之间有个路由器宕掉了。
  • 防火墙拦截了你的请求。

为了排除第 1 点,对服务器上进行一个快速 mtr longshawn.example.com1 。如果服务器是可达的,那么便是防火墙(注意:防火墙总是存在的)。

相对于traceroute命令只会做一次链路跟踪测试,mtr命令会对链路上的相关节点做持续探测并给出相应的统计信息

首先用iptables -nvL 命令检查服务器本身有没有防火墙,没有的话你能看到以下内容:

iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination   
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination    
Chain OUTPUT (policy ACCEPT 0K packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0K packets, 0 bytes)
pkts bytes target prot opt in out source destination

上面的结果表明还没有配置规则。没有数据包被阻止。

Error 2 - DNS问题

DNS 问题通常发生在你正使用的主机名没有解析到 IP 地址。错误如下:

telnet longshawn.example.com 445
telnet: longshawn.example.com: Name or service not known
longshawn.example.com: Unknown host

telnet longshawn.example.com 445
telnet: longshawn.example.com: Name or service not known
longshawn.example.com: Unknown host

第一步是把主机名替换成服务器的 IP 地址。如果你可以连上那么就是主机名的问题。

有很多发生的原因:

  • 域名注册了吗?用 whois 来检验。
  • 域名过期了吗?用 whois 来检验。
  • 是否使用正确的主机名?用 dig 或 host 来确保你使用的主机名解析到正确的 IP。
  • 你的 A 记录正确吗?确保你没有偶然创建类似 longshawn.example.com 的 A 记录。

一定要多检查几次拼写和主机名是否正确(是 longshawn.example.com 还是 longshawn1.example.com)?这些经常会困扰你,特别是比较长、难记或其它国家的主机名。

Error 3 - 服务器没有侦听端口

这种错误发生在 telnet 可达服务器但是指定端口没有监听。就像这样:

telnet longshawn.example.com 445
Trying 112.51.22.61...
telnet: Unable to connect to remote host: Connection refused

telnet longshawn.example.com 445
Trying 112.51.22.61…
telnet: Unable to connect to remote host: Connection refused

有这些原因:

  • 服务器地址是否正确。
  • 端口是否正确。

Error 4 - 连接被服务器关闭

这种错误发生在连接成功建立但是应用服务器建立的安全措施一连上就将其结束。错误如下:

telnet longshawn.example.com 445
Trying 112.51.22.61...
Connected to longshawn.example.com.
Escape character is '^]'.
Connection closed by foreign host.

telnet longshawn.example.com 445
Trying 112.51.22.61…
Connected to longshawn.example.com.
Escape character is ‘^]’.
Connection closed by foreign host.

最后一行 Connection closed by foreign host. 意味着连接被服务器主动终止。为了修复这个问题,需要看看应用服务器的安全设置确保你的 IP 或用户允许连接

成功连接
成功的 telnet 连接如下:

telnet longshawn.example.com 445
Trying 112.51.22.61...
Connected to longshawn.example.com.
Escape character is '^]'.

telnet longshawn.example.com 445
Trying 112.51.22.61…
Connected to longshawn.example.com.
Escape character is ‘^]’.

连接会保持一段时间只要你连接的应用服务器时限没到。

输入 CTRL+] 中止连接,然后当你看到 telnet> 提示,输入 quit 并按回车:

telnet longshawn.example.com 445
Trying 112.51.22.61...
Connected to longshawn.example.com.
Escape character is '^]'.
^]
telnet> quit
Connection closed.

telnet longshawn.example.com 445
Trying 112.51.22.61…
Connected to longshawn.example.com.
Escape character is ‘^]’.
^]
telnet> quit
Connection closed.

总结

客户程序连不上服务器的原因有很多。但通过telnet命令,我们可以快速定位到以下原因:

  • 网络不通
  • 域名解析
  • 服务器白名单
  • 服务器端口

在定位到具体原因后,就可以转交给dba、网络服务器工程师协助解决了。所以了解下这方面的内容,还是有点用的2


  1. MTR工具使用说明与结果分析 ↩︎

  2. Why You Should Still Love Telnet ↩︎

Logo

一站式 AI 云服务平台

更多推荐