Http、Websocket、Socket、TCP
层 | 类别 | 含义 |
---|
应用层 | ↓HTTP与WEBSOCKET | 超文本传输协议 与 全双工通信协议 |
接口 | ↓SOCKET | 不是协议,套接字,TCP/IP网络的一个调用接口(API) |
传输层 | ↓TCP 与UDP | 传输控制协议 与 用户数据报协议 |
网络层 | ↓IP | 网络协议 |
1、HTTP(超文本传输协议)
HTTP | 含义 | 特点 |
---|
HTTP | 是基于TCP协议的应用,请求时需建立TCP连接,而且请求包中需要包含请求方法,URI,协议版本等信息,请求结束后断开连接,完成一次请求/响应操作。故称为短连接。 | 通信只能由客户端发起,做不到服务器主动向客户端推送信息 |
- (1)HTTP/1.1中的keep-alive所保持的长连接则是为了优化每次HTTP请求中TCP连接三次握手的麻烦和资源开销,只建立一次TCP连接,多次的在这个通道上完成请求/响应操作。
2、WEBSOCKET(全双工通信协议)
WEBSOCKET | 含义 | 特点 |
---|
WEBSOCKET | 是一种在单个TCP连接上进行全双工通信的协议。包含两部分,一部分是“握手”,一部分是“数据传输”。 | 服务器可以主动传送数据给客户端。解决了服务器与客户端全双工通信的问题 |
- (1)单工、半双工、全双工
- 单工:信息只能单向传送;
- 半双工:信息能双向传送但不能同时双向传送;
- 全双工:信息能够同时双向传送。
- (2)WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
3、Socket(套接字)
SOCKET | 含义 | 特点 |
---|
SOCKET | 只是一种连接模式,不是协议,socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API) | 通过Socket,我们才能使用TCP/IP协议 |
- (1)socket是为了实现通信过程而建立成来的通信管道,其真实的代表是客户端和服务器端的一个通信进程,双方进程通过socket进行通信,而通信的规则采用指定的协议,它工作在 OSI 模型会话层(第5层)。
- (2)Socket通信流程:Socket连接需要一对套接字,一个运行于客户端,另一个运行于服务端!之间的连接分为三个步骤:服务器监听,客户端请求,连接确认。https://blog.csdn.net/h12kjgj/article/details/73610778
4、TCP(传输控制协议)
TCP/UDP | 含义 | 特点 |
---|
TCP | 面向连接的一种传输控制协议,TCP连接之后,客户端和服务器可以互相发送和接收消息,在客户端或者服务器没有主动断开之前,连接一直存在,故称为长连接 | 连接有耗时,传输数据无大小限制,准确可靠,先发先至。 |
UDP | 无连接的用户数据报协议,所谓的无连接就是在传输数据之前不需要交换信息,没有握手建立连接的过程,只需要直接将对应的数据发送到指定的地址和端口就行 | 不稳定,速度快,可广播,一般数据包限定64KB之内,先发未必先至。 |
- (1)tcp三次握手建立连接: 握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
- 第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认;
- 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
- 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
- (2)过程:三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。
- 第一次对话:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”;
- 第二次对话:主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在 * 发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”
- 第三次对话:主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”。
5、异同点
- HTTP和WebSocket都是基于TCP协议。
- HTTP通信过程属于“你推一下,我走一下”的方式,客户端不发请求则服务器永远无法发送数据给客户端。
- WebSocket则在进行第一次HTTP请求之后,其他全部采用TCP通道进行双向通讯
- Socket是一套协议封装后的接口,用于建立Socket连接。
- http连接:http连接就是所谓的短连接,即客户端向服务器端发送一次请求,服务器端响应后连接即会断掉;
- socket连接:socket连接就是所谓的长连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉;但是由于各种环境因素可能会是连接断开,比如说:服务器端或客户端主机down了,网络故障,或者两者之间长时间没有数据传输,网络防火墙可能会断开该连接以释放网络资源。
- (1)WebSocket和Http的异同点,对于 WebSocket 来说,它必须依赖 HTTP 协议进行一次握手 ,握手成功后,数据就直接从 TCP 通道传输,与 HTTP 无关了。
同、异 | WebSocket | Http |
---|
同 | 建立在TCP之上,通过TCP协议来传输数据 | 建立在TCP之上,通过TCP协议来传输数据 |
同 | 可靠性传输协议 | 可靠性传输协议 |
同 | 应用层协议 | 应用层协议 |
异 | WebSocket是HTML5中的协议,全双工通信的协议,支持持久连接,HTTP不支持持久连接 | HTTP是单向协议,只能由客户端发起,做不到服务器主动向客户端推送信息。 |
同、异 | WebSocket | Socket |
---|
异 | WebSocket是应用层协议 | Socket本身并不是一个协议,是一个套接字,TCP/IP网络的API,多指传输层网络接口 |
- (3) Socket和TCP/IP
Socket是对TCP/IP协议的封装,像创建Socket连接时,可以指定使用的传输层协议,Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。 - (4)图解