telnet命令的主要做用是与目标端口进行TCP链接(即完成TCP三次握手)。windows
当服务端启动后,可是telnet其监听的端口,却失败了。或者,当服务端运行了一段时间后,忽然其监听的端口telnet不通了。当相似这样的telnet失败的状况出现时,均可以按照以下方面进行排查:api
好比,当CPU持续在100%时,就有可能致使来自客户端的TCP链接请求被丢弃或无暇处理。 安全
若是服务端是基于ESFramework开发的,则能够经过IRapidServerEngine的Advanced属性的GetPortListenerState方法来获取端口监听器的状态,该方法返回一个PortListenerState对象,其包含3个属性:服务器
(1)IsMaxConnection:是否达到了最大链接数的限制。网络
(2)IsListening:是否正在监听端口。若是未受权,或达到了最大链接数限制,则将会中止监听端口。运维
(3)LastDetectTime:最后一次检测TCP链接队列(已完成OS底层的三次握手,但还没有被ESFramework提取的TCP链接存放于该队列中)的时间。 工具
若是上述两点都正常,则接下来,须要专业的运维人员或网管人当员参与进来协助排查。测试
若是能链接成功,至少代表本机的TCP握手请求是能正常地被接收和处理的。 spa
netstat是一个很是有用的查看端口状态的命令,执行netstat命令后,请注意查看如下信息:对象
(1)目标端口是否处于监听状态?
(2)目标端口上是否存在已成功创建的TCP链接(ESTABLISHED)?其数量是多少?
(3)是否存在半开链接(SYN_RECV)?其数量是多少?
(4)是否存在等待关闭的链接(TIME_WAIT)?其数量是多少?
这里,最有可能的缘由是半开链接数达到最大限制,致使windows系统丢弃后续的TCP链接请求。
对于一些奇怪现象的跟踪与分析,数据抓包工具是不可缺乏的。
在服务器上将抓包工具运行起来,而后在其余的电脑上telnet该服务器的目标端口,经过抓包工具观察目标端口上TCP三次握手的过程是否正常:
(1)目标端口是否收到了来自客户端的SYN请求?
(2)目标端口有回复SYN_ACK给客户端?
(3)目标端口有收到来自客户端的第三次握手?
只有当TCP三次握手顺利完成后,windows底层才会将创建好的TCP链接放入队列中,提交给上层的应用程序。
在抓包分析的同时,结合服务器的网络拓扑接口进行考虑是颇有必要的。极可能来自客户端的三次握手请求被防火墙、路由器、或某些网络彻底监控的相关软硬件给挡住了。
此时,须要专业的运维人员或网管人员参与进来,协助排查问题,好比:
(1)在服务器上执行netstat命令,查看目标端口的相关状态信息。
(2)在服务器上执行抓包工具,监测目标端口上是否有数据从客户端过来。
(3)分析服务器的网络拓扑结构,并以服务器为中心,依次向外检查防火墙、路由器、网络安全监控等相关软硬件等的设定,并进行针对性的排查测试。
通过以上的排查分析,应该均可以找到问题的根源所在,若是仍是没有结果,能够给我留言,咱们一块儿讨论下啊。