您的位置:首页 > 理论基础 > 计算机网络

tcp连接小结

2018-02-27 00:43 225 查看
tcp连接可以分为短连接和长连接。由上一节tcp网络编程–socket的简介了解到,在client和server之间建立tcp连接,需要经过三次握手(控制标志ACK起应答作用,SYN起同步作用),而断开连接,则需要四次握手(tcp是全双工的,因此每个方向都必须单独关闭。当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭)。



tcp短连接

短连接过程如下,在传输一次数据之后,连接关闭。如果需要传输数据,则需要重新建立连接。

建立连接===》数据传输===》关闭连接 ... 建立连接===》数据传输===》关闭连接


tcp长连接

长连接过程如下,在传输一次数据之后,连接没有直接关闭,而是继续等待,直到连接出现故障(机器断电、网线拔出、防火墙等问题),连接才会关闭。

建立连接===》数据传输...(保持连接)数据传输... ===》关闭连接


各自优缺点

tcp短连接对于服务器来说,都是有用连接,易于管理。而缺点则是在tcp连接的建立和关闭上浪费资源和时间。尤其是当客户端请求频繁时。tcp短连接一般用在web http中。

tcp长连接的优点是省去了不断建立和关闭连接时的资源浪费,但是缺点就是在高并发的情况下,可能会导致服务器受损,以至崩溃。因此,通常会给tcp长连接设置最大连接数。tcp长连接一般用在数据库的连接。

HeartBeat机制

为什么谈HeartBeat机制,原因在于tcp长连接会由于某些问题(机器断电、网线拔出、防火墙等问题)导致连接不可用。因此在使用时,需要判断连接是否可用。

HeartBeat机制解决了这一问题,在很多应用层协议中都有用到,通常是客户端每隔一小段时间向服务器发送一个数据包,通知服务器自己仍然在线,并传输一些可能必要的数据。这里的数据包发送方并不局限于某一方,而且包的内容也没有什么特别的规定,一般都是很小的包,或者只包含包头的一个空包。为了保持长连接,它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着。

tcp KeepAlive机制

tcp的KeepAlive机制其实质还是基于HeartBeat机制,通过检测心跳包来保持连接。不论是服务端还是客户端,一方开启KeepAlive功能后,就会自动在规定时间内向对方发送心跳包,而另一方在收到心跳包后就会自动回复,以告诉对方我仍然在线。因为开启KeepAlive功能需要消耗额外的宽带和流量,所以TCP协议层默认并不开启KeepAlive。这样就需要我们手动开启KeepAlive功能。

参考文章:

tcp长连接和短连接

tcp协议的KeepAlive机制与HeartBeat心跳包

图解TCP-IP协议
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息