码迷,mamicode.com
首页 > 其他好文 > 详细

长连接,短连接

时间:2017-10-27 11:43:03      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:keep   服务器端   时间   bsp   注意   服务端   活动   计算机   登录   

技术分享

 

技术分享

上面2个图是tcp三次握手和4次握手

三次握手,第一次,服务端知道自己接受数据没问题,第二次,客户端知道自己自己发送数据和接受数据没问题,第三次服务端知道自己发送数据没问题。

然后,数据开始发送。

 

4次握手,第一次客户端发送一个fin,表示自己数据发完了,服务端收到后,若是数据没有发送完,就发送一个ack,表示,已经收到你的请求,但是服务端数据没有发送完,

继续发送数据,等到数据发送完了,就发送一个fin,客户端收到后就发送一个ack,表示确认收到,服务端就可以关闭连接了。但是客户端还是要等一个周期时间,如果客户端发送

ack丢失了,服务端没有收到就会继续发送fin,直到收到信息后,才关闭,而客户端在一定周期内没有收到信号也关闭。

 

注意:为何是结束是4次握手?

数据可能没有发送完。如果都是同时发送完了,那么也是3次握手,3次握手是由于没有数据传送

 

注意到每一次连接都要消耗3次握手和4次握手,

故有了tcp长连接和短连接,http的长连接和短连接实际上就是tcp的,

短连接:就是一次简单的tcp连接,数据发送完直接关闭。连接→数据传输→关闭连接

长连接:就是在一次连接内多次发送数据包,中间若是没有数据那么靠心跳保活协议维护, 连接→数据传输→保持连接(心跳)→数据传输→保持连接(心跳)→……→关闭连接

 

tcp保活协议:

 

个人计算机用户使用TCP/IP协议通过Telnet登录一台主机,这是能够说明需要使用存活定时器的一个常用例子。如果某个用户在使用结束时只是关掉了电源,而没有注销(log off),

那么他就留下了一个半打开(half-open)的连接。如果客户端消失,留给了服务器端半打开的连接,并且服务器又在等待客户端的数据,那么等待将永远持续下去。存活特征的

目的就是在服务器端检测这种半打开连接。

 

keepalive工作原理:

 

若在一个给定连接上,两小时之内无任何活动,服务器便向客户端发送一个探测段。(我们将在下面的例子中看到探测段的样子。)客户端主机必须是下列四种状态之一:

 

1) 客户端主机依旧活跃(up)运行,并且从服务器可到达。从客户端TCP的正常响应,服务器知道对方仍然活跃。服务器的TCP为接下来的两小时复位存活定时器,如果在这两

个小时到期之前,连接上发生应用程序的通信,则定时器重新为往下的两小时复位,并且接着交换数据。

 

2) 客户端已经崩溃,或者已经关闭(down),或者正在重启过程中。在这两种情况下,它的TCP都不会响应。服务器没有收到对其发出探测的响应,并且在75秒之后超时。服务器将总共发送10个这样的探测,每个探测75秒。如果没有收到一个响应,它就认为客户端主机已经关闭并终止连接。

 

3) 客户端曾经崩溃,但已经重启。这种情况下,服务器将会收到对其存活探测的响应,但该响应是一个复位,从而引起服务器对连接的终止。

 

4) 客户端主机活跃运行,但从服务器不可到达。这与状态2类似,因为TCP无法区别它们两个。它所能表明的仅是未收到对其探测的回复。

 

服务器不必担心客户端主机被关闭然后重启的情况(这里指的是操作员执行的正常关闭,而不是主机的崩溃)。当系统被操作员关闭时,所有的应用程序进程(也就是客户端进程)都将被终止,

客户端TCP会在连接上发送一个FIN。收到这个FIN后,服务器TCP向服务器进程报告一个文件结束,以允许服务器检测这种状态。

 

长连接,短连接

标签:keep   服务器端   时间   bsp   注意   服务端   活动   计算机   登录   

原文地址:http://www.cnblogs.com/donghang/p/7742044.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!