HTTP、Socket、TCP这三个概念在网络开发中经常被提及,也是比较容易被混淆的概念,这三者在TCP/IP协议族中的位置关系:
三者的位置关系.png
其中:
HTTP是应用层的协议,也是开发中最常用的一个网络协议;
TCP是传输层的协议,大学学过计算机网络的都知道,该层还有一个UDP协议;
而Socket是从传输层上抽象出来的,采用ip加端口号的形式来标识,并不是传统意义上的网络协议。
所以从协议簇来说,三者还是很好区分的。那么HTTP连接、TCP连接、Socket连接有什么区别?
1、TCP连接与HTTP连接
在网络分层中,HTTP协议是基于TCP协议的,客户端向服务端发送一个HTTP请求时,需要先与服务端建立TCP连接,也就是经典的三次握手(通常对用户来说是很难察觉的),握手成功以后才能进行数据交互。
HTTP是基于请求响应模式且无状态的协议,1.1之前只支持短连接,也就是请求响应一次以后连接中断,下次请求需要重新进行TCP连接,而1.1之后支持持长连接,即进行一次TCP连接以后,客户端可以发送多次的HTTP请求给服务器端。
小结:HTTP基于TCP
2、TCP连接与Socket连接
Socket层只是在TCP/UDP传输层上做的一个抽象接口层,所以Socket连接可以基于TCP连接,也有可能基于UDP。
我们知道,TCP协议是可靠的,UDP协议是不可靠的,那么基于TCP协议的Socket连接同样是可靠的;基于UDP协议的Socket连接是不可靠的,大多数的即时通讯IM都是基于后者实现的。
小结:Socket可基于TCP,亦可UDP
3、HTTP连接与Socket连接
HTTP 1.1之前是短连接,基于TCP协议的Socket连接是长连接,虽然HTTP1.1开始支持长连接,但不像Socket连接一旦建立,除非一方主动断开,否则连接状态一直保持。
HTTP连接的服务端无法主动向客户端发消息,只有客户端发起请求后服务端才会响应。而Socket连接双方请求的发送先后没有限制。
HTTP采用"请求-响应"机制,在客户端还没发送消息给服务端前,服务端无法推送消息给客户端。必须满足客户端发送消息在前,服务端回复在后。Socket连接中的通信双方中的任何一方可以随时向另一方发送消息。
4、HTTP Or Socket?
用HTTP:双方不需要时刻保持连接,客户端只是通过一个个HTTP请求来获取服务器的特定资源。如通过get/post请求获取网页、图片、JSON或者XML数据,还有常用的文件上传、小文件下载等。
推荐阅读:
网络HTTP、TCP、UDP、Socket 知识总结浏览器中常见网络协议介绍TCP/IP、Http、Socket的区别「理解HTTP」之常见的状态码