1.协议简介
Http 协议:应用层协议
TCP 协议:传输层协议,主要解决如何在IP层之上可靠的传递数据包,使在网络上的另一端收到发端发出的所有包,并且顺序与发出的顺序一致,TCP具有可靠,面向连接的特点
IP 协议: 网络层协议,主要解决网络的路由与寻址问题。
2.HTTP协议是无状态的
Http 协议是无状态的,其实是说,协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。也就是说,如果一个客户端打开一个服务器的网页后,它再去打开这个服务上面的网页的时候,这前后两次请求是没有联系的是独立的。但是这种无状态并不代表HTTP不能保持TCP 连接,更不能代表HTTP使用的是UDP协议。
3.HTTP 的连接方式
HTTP 的连接方式是指 连接的持续性,它分为:短连接和长连接。
3.1 短连接
顾名思义,浏览器和服务器没进行一次HTTP操作,就建立一次连接,但是任务结束就中断连接。在HTTP/1.0中,默认使用的是短连接。如:浏览器访问某个HTML或者其他类型的Web页中包含有其他的web资源,如JavaScript,图像文件,CSS文件等;当浏览器遇到这样的web资源,就会建立一个HTTP会话。
3.2 长连接
同样的意思,在客户端与浏览器建立了连接后,会保持这个连接的状态。在HTTP/1.1中,默认的是长连接。使用长连接的HTTP协议,会在响应头有如下的代码:
Connection:keep-alive
当使用了长连接的时候,客户端一旦建立了连接,第二次建立连接的时候就直接使用已经建立的通道。但是keep-alive并不是永久的保持,可以在不同的服务器软件设置这个时间。
HTTP 的长连接短连接,其实是TCP的长连接和短连接。
4.TCP连接
TCP 的连接是采用3次握手,而断开连接是采用4次握手
之所有有第三次握手的原因,有可能在 客户端发送连接请求时,第一次发送,请求在网络的某个地方block了,这时候发送第二次网络请求,第二次网络请求服务器答复了,而第一个网络请求又来了,而这个请求应该是被弃用了的,所以就出现了这个请求异常。为了避免这个异常就建立了3次握手
建立连接:
断开连接:
4.1. TCP 长连接短连接的过程
长连接:
建立连接----传输数据---(保持连接)--传输数据-- 关闭连接
短连接
建立连接--- 传输数据----关闭连接........建立连接---传输数据----关闭连接
5. 长连接和短连接的优点和缺点
由上可以看出,长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间。对于频繁请求资源的客户来说,较适用长连接。不过这里存在一个问题,存活功能的探测周期太长,还有就是它只是探测TCP连接的存活,属于比较斯文的做法,遇到恶意的连接时,保活功能就不够使了。在长连接的应用场景下,client端一般不会主动关闭它们之间的连接,Client与server之间的连接如果一直不关闭的话,会存在一个问题,随着客户端连接越来越多,server早晚有扛不住的时候,这时候server端需要采取一些策略,如关闭一些长时间没有读写事件发生的连接,这样可 以避免一些恶意连接导致server端服务受损;如果条件再允许就可以以客户端机器为颗粒度,限制每个客户端的最大长连接数,这样可以完全避免某个蛋疼的客户端连累后端服务。
短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制手段。但如果客户请求频繁,将在TCP的建立和关闭操作上浪费时间和带宽。
长连接和短连接的产生在于client和server采取的关闭策略,具体的应用场景采用具体的策略,没有十全十美的选择,只有合适的选择。
6.什么时候使用长连接,什么时候使用短连接
长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况,。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。
而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连好。