HTTP,TCP的长连接和短连接以及socket

HTTP的长连接和短连接本质上是TCP长连接和短连接 。HTTP属于应用层协议 , 在传输层使用TCP协议 , 在网络层使用IP协议 。IP协议主要解决网络路由和寻址问题 , TCP协议主要解决如何在IP层之上可靠的
1. HTTP协议与TCP/IP协议的关系
HTTP的长连接和短连接本质上是TCP长连接和短连接 。HTTP属于应用层协议 , 在传输层使用TCP协议 , 在网络层使用IP协议 。IP协议主要解决网络路由和寻址问题 , TCP协议主要解决如何在IP层之上可靠的传递数据包 , 使在网络上的另一端收到发端发出的所有包 , 并且顺序与发出顺序一致 。TCP有可靠 , 面向连接的特点 。
TCP/IP是个协议组 , 可分为三个层次:网络层、传输层和应用层 。
在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议 。
在传输层中有TCP协议与UDP协议 。
在应用层有:TCP包括FTP、HTTP、TELNET、SMTP等协议
UDP包括DNS、TFTP等协议
2. 如何理解HTTP协议是无状态的
HTTP协议是无状态的 , 指的是协议对于事务处理没有记忆能力 , 服务器不知道客户端是什么状态 。也就是说 , 打开一个服务器上的网页和你之前打开这个服务器上的网页之间没有任何联系 。HTTP是一个无状态的面向连接的协议 , 无状态不代表HTTP不能保持TCP连接 , 更不能代表HTTP使用的是UDP协议(无连接) 。
3. 什么是长连接、短连接?
短连接
连接->传输数据->关闭连接
HTTP是无状态的 , 浏览器和服务器每进行一次HTTP操作 , 就建立一次连接 , 但任务结束就中断连接 。
也可以这样说:短连接是指SOCKET连接后发送后接收完数据后马上断开连接 。
长连接
连接->传输数据->保持连接 -> 传输数据->。。。->关闭连接 。
长连接指建立SOCKET连接后不管是否使用都保持连接 , 但安全性较差 。
在HTTP/1.0中 , 默认使用的是短连接 。也就是说 , 浏览器和服务器每进行一次HTTP操作 , 就建立一次连接 , 但任务结束就中断连接 。如果客户端浏览器访问的某个html或其他类型的 Web页中包含有其他的Web资源 , 如JAVAScript文件、图像文件、css文件等;当浏览器每遇到这样一个Web资源 , 就会建立一个HTTP会话 。
但从 HTTP/1.1起 , 默认使用长连接 , 用以保持连接特性 。使用长连接的HTTP协议 , 会在响应头有加入这行代码:
Connection:keep-alive
在使用长连接的情况下 , 当一个网页打开完成后 , 客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭 , 如果客户端再次访问这个服务器上的网页 , 会继续使用这一条已经建立的连接 。Keep-Alive不会永久保持连接 , 它有一个保持时间 , 可以在不同的服务器软件(如Apache)中设定这个时间 。实现长连接要客户端和服务端都支持长连接 。
HTTP协议的长连接和短连接 , 实质上是TCP协议的长连接和短连接 。
3.1 TCP连接
当网络通信时采用TCP协议时 , 在真正的读写操作之前 , server与client之间必须建立一个连接 , 当读写操作完成后 , 双方不再需要这个连接 时它们可以释放这个连接 , 连接的建立是需要三次握手的 , 而释放则需要4次握手 , 所以说每个连接的建立都是需要资源消耗和时间消耗的
经典的三次握手示意图:
HTTP,TCP的长连接和短连接以及socket

文章插图
 
经典的四次握手关闭图:
HTTP,TCP的长连接和短连接以及socket

文章插图
 
3.2 TCP短连接
我们模拟一下TCP短连接的情况 , client向server发起连接请求 , server接到请求 , 然后双方建立连接 。client向server 发送消息 , server回应client , 然后一次读写就完成了 , 这时候双方任何一个都可以发起close操作 , 不过一般都是client先发起 close操作 。为什么呢 , 一般的server不会回复完client后立即关闭连接的 , 当然不排除有特殊的情况 。从上面的描述看 , 短连接一般只会在 client/server间传递一次读写操作
短连接的优点是:管理起来比较简单 , 存在的连接都是有用的连接 , 不需要额外的控制手段


推荐阅读