这几年做了很多基于 GGTalk开源即时通讯系统 的定制开发项目,经常会碰到如下两个问题,分享出来,应该对大家会有所帮助:

(1)定制开发完成后,在给客户部署GGTalk即时通讯服务端到正式的服务器上时,经常出现GGTalk客户端连不上服务器的情况。

(2)部署好的GGTalk在运行的过程中,突然出现新的客户端连不上登录不了。

这些时候,使用telnet命令测试,通常会发现telnet失败了。

    telnet命令的主要作用是与目标端口进行TCP连接(即完成TCP三次握手)。

当服务端启动后,但是telnet其监听的端口,却失败了。或者,当服务端运行了一段时间后,突然其监听的端口telnet不通了。当类似这样的telnet失败的情况出现时,都可以按照如下方面进行排查:

1.观察一下服务端进程的CPU和内存是否有异常。

比如,当CPU持续在100%时,就有可能导致来自客户端的TCP连接请求被丢弃或无暇处理。

2.端口监听器是否运行正常?

GGTalk 服务端可以通过IRapidServerEngine的Advanced属性的GetPortListenerState方法来获取端口监听器的状态,该方法返回一个PortListenerState对象,其包含3个属性:

(1)IsMaxConnection:是否达到了最大连接数的限制。

(2)IsListening:是否正在监听端口。如果未授权,或达到了最大连接数限制,则将会停止监听端口。

(3)LastDetectTime:最后一次检测TCP连接队列(已完成OS底层的三次握手,但尚未被ESFramework提取的TCP连接存放于该队列中)的时间。

如果上述两点都正常,则接下来,需要专业的运维人员或网管人当员参与进来协助排查。

3.在当前服务器上执行telnet命令,看能否连接成功?

如果能连接成功,至少表明本机的TCP握手请求是能正常地被接收和处理的。

4.在服务器上执行netstat命令

netstat是一个非常有用的查看端口状态的命令,执行netstat命令后,请注意查看以下信息:

(1)目标端口是否处于监听状态?

(2)目标端口上是否存在已成功建立的TCP连接(ESTABLISHED)?其数量是多少?

(3)是否存在半开连接(SYN_RECV)?其数量是多少?

(4)是否存在等待关闭的连接(TIME_WAIT)?其数量是多少?

这里,最有可能的原因是半开连接数达到最大限制,导致windows系统丢弃后续的TCP连接请求。

5.TCP三次握手是否正常?

对于一些奇怪现象的跟踪与分析,数据抓包工具是不可缺少的。

在服务器上将抓包工具运行起来,然后在其他的电脑上telnet该服务器的目标端口,通过抓包工具观察目标端口上TCP三次握手的过程是否正常:

(1)目标端口是否收到了来自客户端的SYN请求?

(2)目标端口有回复SYN_ACK给客户端?

(3)目标端口有收到来自客户端的第三次握手?

只有当TCP三次握手顺利完成后,windows底层才会将建立好的TCP连接放入队列中,提交给上层的应用程序。

6.服务器网络拓扑结构、防火墙、路由器、网络安全监控等相关软硬件

在抓包分析的同时,结合服务器的网络拓扑接口进行考虑是很有必要的。很可能来自客户端的三次握手请求被防火墙、路由器、或某些网络完全监控的相关软硬件给挡住了。

此时,需要专业的运维人员或网管人员参与进来,协助排查问题,比如:

(1)在服务器上执行netstat命令,查看目标端口的相关状态信息。

(2)在服务器上执行抓包工具,监测目标端口上是否有数据从客户端过来。

(3)分析服务器的网络拓扑结构,并以服务器为中心,依次向外检查防火墙、路由器、网络安全监控等相关软硬件等的设定,并进行针对性的排查测试。

   经过以上的排查分析,应该都可以找到问题的根源所在,如果还有疏漏的方面,可以给我留言一起讨论。

是什么导致了客户端TCP连不上服务器?的更多相关文章

  1. 服务器端与客户端TCP连接入门(一)

    Java中使用Socket(即套接字)完成TCP程序的开发 服务器端使用ServerSocket接收客户端的连接请求,每一个客户端都使用一个Socket对象表示 在服务器端每次运行时都要使用accep ...

  2. python3实现TCP协议的简单服务器和客户端

    利用python3来实现TCP协议,和UDP类似.UDP应用于及时通信,而TCP协议用来传送文件.命令等操作,因为这些数据不允许丢失,否则会造成文件错误或命令混乱.下面代码就是模拟客户端通过命令行操作 ...

  3. (转)公有云vr客户端tcp连接数太多造成 系统卡顿问题 [bittorrent tracker优化] -公有云常见网络问题及思路

    在公有云服务器 发现使用tcp(http)的tracker连接数太多 用户太多会造成windows系统卡顿 特此发表一下修改配置和路由器的方法 解决卡顿问题 解决方法1(参考内容): 修改 /etc/ ...

  4. 网络编程 UDP协议 TCP局域网客户端与服务端上传下载电影示例

    UDP协议 (了解) 称之为数据包协议,又称不可靠协议. 特点: 1) 不需要建立链接. 2) 不需要知道对方是否收到. 3) 数据不安全 4) 传输速度快 5)能支持并发 6) 不会粘包 7) 无需 ...

  5. 服务器端与客户端TCP连接入门(三:多线程)

    对于服务器端来说,如果要加入多线程机制,则应该在每个用户连接之后启动一个新的线程 建立一个EchoThread类,此类专门用于处理多线程操作,此时的多线程使用Runnable接口实现 package ...

  6. 复用TCP连接提升流媒体服务器之间流量转发效率

    由于媒体推流客户端所在地域不同.所接入网络运营商不同.就近接入原则等因素,导致不同的视频推流客户端会推流至不同的流媒体服务器(本文主要针对目前WEB或手机的基于TCP的流媒体服务器),在某流媒体服务器 ...

  7. 线上服务器TCP被打满是啥情况

    从一个线上服务器警告谈谈backlog https://wangxiangnan.cc/?p=105 缘起 双十一如期而至,此时的我因为在处理客户的一个问题已经陷入了忙碌.突然,不断接到驻场实施发来的 ...

  8. MQTT是IBM开发的一个即时通讯协议,构建于TCP/IP协议上,是物联网IoT的订阅协议,借助消息推送功能,可以更好地实现远程控制

    最近一直做物联网方面的开发,以下内容关于使用MQTT过程中遇到问题的记录以及需要掌握的机制原理,主要讲解理论. 背景 MQTT是IBM开发的一个即时通讯协议.MQTT构建于TCP/IP协议上,面向M2 ...

  9. java 26 - 9 网络编程之 TCP协议多用户上传文件

    TCP实现多用户上传文件: 需要同时给多用户上传文件,这样就得用多线程来实现. 实际上,这样的话,上传的先后顺序和速度就跟客户端的带宽有关:带宽够,就容易抢占到线程的执行权: 首先,创建个线程类:(这 ...

  10. Oracle 11g客户端在Linux系统上的配置步骤详解

    Oracle 11g客户端在Linux系统上的配置步骤详解 2011-07-26 10:47 newhappy2008 CSDN博客 字号:T | T 本文我们主要介绍了Oracle 11g客户端在L ...

随机推荐

  1. Docker 笔记汇总

    一.名词说明 Dockerfile 镜像构建文件 Docker Images 镜像:生成容器 Docker Containers 容器:微型系统 Docker Volumes 卷:存放容器运行数据 D ...

  2. SQL函数详解SUM\COUNT\AVG......

    朋友们,个人公众号:SQL数据库运维 移动端的学习分享,各种数据库基础知识,一起进步,共同学习,期待你的加入. 函数的类型 1.聚合函数:对一组值执行计算,并返回单个值,也被称为组函数.聚合函数经常与 ...

  3. vue3组件封装

    1.父组件调用子组件属性和方法 父组件中template写法: <role-modal ref="myRoleModal" @OK="roleModalOK&quo ...

  4. C 语言编程 — 高级数据类型 — void 类型

    目录 文章目录 目录 前文列表 void 类型 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> <C 语言编程 - 基本数据类型> & ...

  5. nc反弹中 &>、0>&1是什么意思

    1.简介 本文结合一些参考文章以及作者个人理解解释Linux的bash反弹命令中的 &>.0>&1 观点有误,欢迎指出! 目标讨论命令:bash -i >& ...

  6. PHP做api开发时,签名验证你是怎么设计的

    开发过程中,我们经常会与接口打交道,有的时候是调取别人网站的接口,有的时候是为他人提供自己网站的接口,但是在这调取的过程中都离不开签名验证. 我们在设计签名验证的时候,请注意要满足以下几点: 可变性: ...

  7. 关于Embedded Resource的理解

    Embedded Resource .NET中使用外部资源时常用的方式都是使用资源文件,作为程序集的一部分发布.资源文件的读取也比较方便,字符串.图片和任何二进制数据,包括任何类型的文件都可以作为资源 ...

  8. nginx学习记录【一】在windows上的安装nginx的教程

    1.下载地址 http://nginx.org/en/download.html 2.选择windows版本 如下图: 3.解压并运行 解压到指定目录,如下图 打开cmd,然后cd到那个目录,如下图: ...

  9. 基于pulp的线性优化问题:微电网日前优化调度(复现)

    摘录来源:(71条消息) 微电网日前优化调度入门:求解一道数学建模题_我不是玉的博客-CSDN博客 学习记录与复现 问题描述 问题出自第十届"中国电机工程学会杯"全国大学生电工数学 ...

  10. ubuntu18.04开机grub引导界面、登录界面美化

    1.引导界面美化 下载grub主题 https://www.gnome-look.org/browse/cat/109/order/latest/ https://www.pling.com/s/Gn ...