用telnet程序连接tcp服务端判断服务及网络状态.
由于工作中有一次判断错了.反省一下.
今天我就想把能想到的情况都总结一下.可能会有遗漏.
测试环境: linux带的telnet程序. 不同的客户端程序的提示是不同的, 容易判断失误.
情况1:
连接超时
现像: 连接时间非常长.只发出了tcp连接的第一个包.并重试了几次.
原因:
1.数据包被过滤掉.
2.无主机应答数据.
3.最末级路由的arp设置错误.
结果: telnet程序提示连接超时.
#telnet 1.1.1.1 22
Trying 1.1.1.1…
telnet: Unable to connect to remote host: Connection timed out
情况2:
现像: 连接时间可能很短. 也可能经过不长时间得到出错提示.
原因:
1.telnet客户端发出的数据包之后.接到了三层设备反回的icmp错误信息.
2.防火墙返回了icmp错误类型的数据包.
3.中间存在干扰设备向客户端发送了icmp数据包.(更多的应该是发tcp rst吧.)
结果: 操作系统直接关闭了tcp连接. telnet程序提示连接出错.
telnet 2.2.2.2 22
Trying 2.2.2.2…
telnet: Unable to connect to remote host: Network is unreachable
telnet: Unable to connect to remote host: No route to host
也许ttl耗尽等icmp出错,也可以出现相同效果.
情况3:
现像: 连接时间非常短.直接提示拒绝连接.
原因:
1.对端主机端口未处理LISTEN状态.主机发送tcp rst到客户端.
2.中间存在干扰设备向客户端发送了tcp rst到客户端.
结果: 连一下马上得到拒绝的结果.
telnet 3.3.3.3 22
Trying 3.3.3.3…
telnet: Unable to connect to remote host: Connection refused
情况4:
现像: 正常建立tcp连接.可以继续通信.之后的现像就得看服务端程序是细节了.
#telnet 127.0.0.1 22
Trying 127.0.0.1…
Connected to 127.0.0.1.
Escape character is ‘^]’.