1. TCP连接
当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的
经典的三次握手示意图:
经典的四次握手关闭图:
2. TCP短连接
我们模拟一下TCP短连接的情况,client向server发起连接请求,server接到请求,然后双方建立连接。client向server发送消息,server回应client,然后一次读写就完成了,这时候双方任何一个都可以发起close操作,不过一般都是client先发起close操作。为什么呢,一般的server不会回复完client后立即关闭连接的,当然不排除有特殊的情况。从上面的描述看,短连接一般只会在client/server间传递一次读写操作
短连接的优点是:管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段
3.TCP长连接
接下来我们再模拟一下长连接的情况,client向server发起连接,server接受client连接,双方建立连接。Client与server完成一次读写之后,它们之间的连接并不会主动关闭,后续的读写操作会继续使用这个连接。
首先说一下TCP/IP详解上讲到的TCP保活功能,保活功能主要为服务器应用提供,服务器应用希望知道客户主机是否崩溃,从而可以代表客户使用资源。如果客户已经消失,使得服务器上保留一个半开放的连接,而服务器又在等待来自客户端的数据,则服务器将应远等待客户端的数据,保活功能就是试图在服务器端检测到这种半开放的连接。
如果一个给定的连接在两小时内没有任何的动作,则服务器就向客户发一个探测报文段,客户主机必须处于以下4个状态之一:
- 客户主机依然正常运行,并从服务器可达。客户的TCP响应正常,而服务器也知道对方是正常的,服务器在两小时后将保活定时器复位。
- 客户主机已经崩溃,并且关闭或者正在重新启动。在任何一种情况下,客户的TCP都没有响应。服务端将不能收到对探测的响应,并在75秒后超时。服务器总共发送10个这样的探测 ,每个间隔75秒。如果服务器没有收到一个响应,它就认为客户主机已经关闭并终止连接。
- 客户主机崩溃并已经重新启动。服务器将收到一个对其保活探测的响应,这个响应是一个复位,使得服务器终止这个连接。
- 客户机正常运行,但是服务器不可达,这种情况与2类似,TCP能发现的就是没有收到探查的响应。
从上面可以看出,TCP保活功能主要为探测长连接的存活状况,不过这里存在一个问题,存活功能的探测周期太长,还有就是它只是探测TCP连接的存活,属于比较斯文的做法,遇到恶意的连接时,保活功能就不够使了。
在长连接的应用场景下,client端一般不会主动关闭它们之间的连接,Client与server之间的连接如果一直不关闭的话,会存在一个问题,随着客户端连接越来越多,server早晚有扛不住的时候,这时候server端需要采取一些策略,如关闭一些长时间没有读写事件发生的连接,这样可以避免一些恶意连接导致server端服务受损;如果条件再允许就可以以客户端机器为颗粒度,限制每个客户端的最大长连接数,这样可以完全避免某个蛋疼的客户端连累后端服务。
长连接和短连接的产生在于client和server采取的关闭策略,具体的应用场景采用具体的策略,没有十全十美的选择,只有合适的选择。
分享到:
相关推荐
在Windows操作系统中,有时我们需要强制结束某些TCP连接,特别是在处理软件异常、系统更新或网络调试时。"Window下杀掉TCP连接"这个话题涉及到的是如何管理和终止系统中的TCP(传输控制协议)连接。TCP是互联网协议...
TCP连接数指的是同一时间一个计算机系统通过TCP协议能够建立的并发连接的数量。这个值通常受到操作系统、硬件资源和配置参数的影响。了解如何设置和查看TCP连接数对于网络管理员和开发者来说是至关重要的,因为它...
TCP连接数修改TCP连接数修改TCP连接数修改TCP连接数修改
总的来说,"C#连接ModbusTCP连接示例"涵盖了网络通信、设备控制和用户界面设计等多个方面,对于理解和实践工业自动化系统的开发具有重要意义。无论是WinForm还是WPF,掌握这些技能都将使你在面对类似项目时更加...
本篇文章将详细讲解如何在Android中实现本地TCP连接,以及如何进行数据的发送与接收。 首先,我们需要了解TCP的基本原理。TCP是一种面向连接的、可靠的传输协议,它通过三次握手建立连接,确保数据能够按序、无丢失...
Linux 下 TCP 连接迁移技术是一种基于 TCP 连接迁移的负载均衡方法,它可以将一个 TCP 连接的一个端点迁移到另一个节点,而整个迁移过程对于连接的另一端点来说是透明的。这种技术可以大大减轻前端服务器的负担,...
"破解TCP连接数限制"这一主题旨在探讨如何在不损害系统稳定性的情况下,提高系统的并发TCP连接能力。 TCP连接的限制通常由操作系统内核中的参数决定,如Windows系统中的`MaxUserPort`和`TcpNumConnections`,或者...
本篇将深入探讨C#中如何实现TCP连接,包括客户端和服务端的TCP收发信息。 首先,TCP是一种面向连接的、可靠的传输协议,它确保了数据的顺序传输和错误校验。在C#中,我们主要通过System.Net.Sockets命名空间中的...
了解并能够实时查看系统的TCP连接情况对于系统管理员、网络安全专家以及普通用户来说都至关重要。"查看系统的TCP连接情况"这个主题涉及到的知识点主要包括以下几个方面: 1. TCP连接的原理:TCP是一种面向连接的、...
这款工具可以帮助用户实时查看所有正在运行的进程与哪些远程主机建立了TCP连接,以及这些连接的状态、端口号等详细信息。在IT行业中,了解和掌握TCPView的使用对于网络故障排查、性能优化以及安全监控都有着重要的...
易语言监控TCP连接源码,监控TCP连接,GetPort,GetAscIP,API_GetTcpTable,API_LocalSize,API_CopyMemory,API_inet_ntoa,API_lstrlen,API_ntohs
本主题将深入解析“简单的TCP连接”,适合初学者理解TCP连接的基本流程。 TCP是一种面向连接的、可靠的传输层协议,它确保了数据在网络中的正确传输。TCP连接的建立与关闭通常分为三个阶段:三次握手和四次挥手。 ...
本项目"TCP连接工具"是一款基于C#开发的实用工具,旨在帮助开发者进行TCP通信的调试工作。它支持IPV4和IPV6两种网络协议,确保了在不同网络环境下的兼容性。 首先,TCP(传输控制协议)是一种面向连接的、可靠的、...
查看TCP连接数 1)统计80端口连接数 netstat -nat|grep -i "80"|wc -l 2)统计httpd协议连接数 ps -ef|grep httpd|wc -l 3)、统计已连接上的,状态为“established netstat -na|grep ESTABLISHED|wc -l
TCPView是一款由微软系统工具开发团队出品的小巧而强大的网络监控工具,主要用于实时监测和管理计算机上的TCP连接状态。这款工具对于系统管理员、开发者以及普通用户来说都非常实用,可以帮助他们了解系统的网络活动...
用MFC写的TCP客户端,与百度网站建立TCP连接,并接收网站信息。IDC_EDIT2显示本地IP地址以及绑定的端口,这个端口是在connect函数中绑定的,可以看见每次运行这个端口都不一样,尽管服务器那边固定端口号80. IDC_...
下面是对TCP连接的深入理解和其各个阶段的详细解析。 **TCP报文段(Segment)** 在TCP中,数据被分成称为报文段的数据单元,每个报文段包含源端口号、目的端口号、序列号、确认号、数据偏移、保留、紧急指针、标志...
总的来说,多线程TCP连接测试程序是一个用于验证和评估多线程环境下TCP连接性能的工具。它可以帮助开发者理解并发TCP连接的工作方式,以及如何在实际应用中有效利用多线程技术提高网络服务的处理能力。通过不断实践...
【TCP连接迁移】 TCP连接迁移是一种技术,旨在提高网络服务器的可伸缩性和可靠性,特别是在服务器集群环境中。这种技术允许TCP连接在不被客户端感知的情况下,从一个节点迁移到另一个节点,以实现负载均衡。在Linux...
TCP 连接状态详解 TCP 连接状态是指在 TCP 协议中,连接的不同阶段所对应的状态。这些状态包括 LISTEN、SYN-SENT、SYN-RECEIVED、ESTABLISHED、FIN-WAIT-1、FIN-WAIT-2、CLOSE-WAIT、CLOSING、LAST-ACK、TIME-WAIT...