Http和WebSocket和Socket

 参考:https://www.cnblogs.com/aspirant/p/11334957.html

 

1. WebSocket 和 Socket 区别

  可以把 WebSocket 想象成 HTTP(应用层),HTTP 和 Socket 什么关系,WebSocket 和 Socket 就是什么关系。

  HTTP 协议有一个缺陷:通信只能由客户端发起,做不到服务器主动向客户端推送信息。

  WebSocket 协议的最大特点是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。

 

2. Socket 和 HTTP 的区别

  HTTP协议:简单对象访问协议,对应于应用层。HTTP 协议是基于 TCP 连接的。

  TCP协议:对应于传输层

  IP协议:对应于网络层

 

  TCP/IP 是传输层协议,主要解决数据如何在网络中传输,而 HTTP 协议是应用层协议,主要解决如何包装数据。

  Socket 是对 TCP/IP 协议的封装,Socket 本身并不是协议,而是一个调用接口(API),通过 Socket,我们才能使用 TCP/IP 协议。

  HTTP 连接:http连接是所谓的【短连接】,及客户端向服务器发送一次请求,服务端响应后即会断掉。

  Socket连接:socket连接是所谓的【长连接】,理论上客户端和服务端一旦建立连接,则不会主动断掉;但是由于各种环境因素可能会使连接断开,比如说:服务端或客户端主机 down了,网络故障,或者 两者之间长时间没有数据传输,网络防火墙可能会断开该连接以释放网络资源。所以,当一个socket连接中没有数据的传输,那么为了维持连续的连接,需要发送心跳消息,具体心跳格式是开发者自己定义的。

 

  HTTP 的长连接一般只能坚持一分钟而已,而且是浏览器决定的,你的页面很难控制这个行为。Socket 连接就可以维持很久,几天、数月都有可能,只要网络不断,程序不结束,而且是可以编程灵活控制的。

  HTTP 连接是建立在 Socket 连接之上。在实际的网络栈中,Socket 连接的确是 HTTP 连接的一部分。但是从 HTTP 协议来看,他的链接一般是指他本身的部分。

 

  TCP/IP 协议栈主要分为四层:应用层、传输层、网络层、数据链路层,每层都有相应的协议。

 

   IP:网络层协议(高速公路)

  TCP 和 UDP:传输层协议(卡车)

  HTTP:应用层协议(货物)。

  SOCKET:套接字,TCP/IP 网络的 API(港口码头/车站)。Socket 是应用层与 TCP/IP 协议族通信的中间软件抽象层,它是一组接口。Socket 是在应用层和传输层之间的一个抽象层,它把 TCP/IP 层复杂的操作抽象为几个简单的接口供应用层调用,以实现进程在网络中的通信。

  TCP/IP:代表传输控制协议/国际协议,指的是一系列协议,TCP/IP 模型在 OSI 模型的基础上进行了简化,变成了四层,

 

  TCP 三握手

  第一次握手:客户端发送 syn 包(seq=x)到服务器,并进入 SYN_SEND 状态,等待服务器确认;

  第二次握手:服务器收到 syn 包,必须确认客户的 ACK (ack=x+1),同时自己也发送一个 SYN 包(seq=y),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态;

  第三次握手:客户端收到服务器的 SYN+ACK 包,向服务器发送确认包 ACK(ack=y+1),此包发送完毕,客户端和服务器进入 ESTABLISHED 状态,完成三次握手。

  握手的过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP 连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP连接都将被一直保持下去,

 

3. 全双工

  http 协议有多个版本,存在区别,目前主流协议是 http1.1 

  http1.1 以下版本,http 连接为短连接,tcp 连接发送信息等待接收信息后断开。

  http1.1 是半双工,建立长连接,实现多路复用,可先后发送多个 http 请求,不用等待回复,但是回复按顺序一个一个回复。

  http2.0 是全双工,一个消息发送后不用等待接收,第二个消息可直接发送。

 

posted @ 2020-08-17 17:07  停不下的时光  阅读(236)  评论(0编辑  收藏  举报