WebSocket(WS)协议系列(一)基本概念

ws协议是什么?

WebSocket(WS)协议是一种网络通信协议,提供了全双工、单连接、低延迟的通信方式,通常用于浏览器和服务器之间的实时数据交换。与传统的HTTP协议相比,WebSocket允许在客户端和服务器之间建立持续的连接 ,可以在连接建立后双向发送消息,而不需要每次都重新建立连接。

基于什么协议而来的呢?

WebSocket协议是通过HTTP协议的"握手"过程来初始化的。具体来说,WebSocket协议通过HTTP的Upgrade头部来进行升级。这样,客户端首先通过HTTP向服务器发起请求,服务器响应后,如果同意升级,HTTP连接就会转换为WebSocket连接。

在建立WebSocket连接的初始阶段,客户端和服务器进行一次HTTP握手,确保通信双方都支持WebSocket协议。一旦握手成功,HTTP协议就不再参与数据传输,后续的数据交换是通过WebSocket协议进行的。

为什么可以解决HTTP协议的非持续连接问题?怎么解决的?

HTTP协议是基于请求-响应模型的,也就是说,

1.频繁的连接建立和断开: 每次客户端向服务器发起请求时,服务器都会建立一个新的连接,并在响应完成后关闭连接。

2.无法实现双向通信:客户端发送请求后只能等待服务器响应,无法主动向服务器发送数据。

WebSocket通过"升级"HTTP连接并保持持久连接,避免了HTTP协议每次请求都建立新连接的开销,并提供了双向通信能力。

持久连接: WebSocket连接在建立后会保持打开状态,直到客户端或服务器主动关闭连接。这避免了每次请求都需要重新建立连接的开销。

全双工通信: WebSocket允许客户端和服务器在同一个连接上进行双向通信。客户端不仅可以发送请求,还可以随时接收来自服务器的消息,反之亦然。这让实时数据传输成为可能,比如即时消息、股票行情更新等。

WebSocket如何保持持久连接?

WebSocket通过TCP连接来保持持久连接。TCP是一个面向连接的协议,它在客户端和服务器之间建立一个稳定的连接,直到主动断开。因此,WebSocket利用TCP的特性保持连接持续开放。

既然通过TCP进行保持,使用TCP握手不行吗,为什么还要使用HTTP握手呢?

  1. 浏览器的支持与安全性:
    浏览器本身通常只能直接支持HTTP和HTTPS 协议。
    通过HTTP握手,WebSocket连接可以更好地遵守浏览器的同源策略,并允许跨域通信。HTTP握手阶段通过HTTP头信息来进行跨域控制,从而使WebSocket能够更安全地在跨域环境中使用。
  2. HTTP协议的广泛支持:
    普遍存在: HTTP协议是互联网上最常见的协议,几乎所有的服务器和客户端都支持。通过HTTP的握手,WebSocket可以利用现有的基础设施进行初步的连接
    端口的兼容性: 默认情况下,HTTP协议使用80端口,HTTPS使用443端口,而WebSocket的默认端口是80(非加密)或443(加密)。因为HTTP和HTTPS协议通常已经在网络防火墙或代理中得到支持,WebSocket的HTTP握手使得WebSocket连接更容易穿透这些中间设备
  3. TCP握手的局限性:
    TCP协议本身确实也支持持久连接,但它并不具备像HTTP协议那样的协议协商机制。通过HTTP的握手,客户端和服务器可以协商一些WebSocket协议相关的特性 ,比如:
    协议版本: 在HTTP请求头中,可以指明使用的WebSocket版本以及其他的协议选项。
    安全性(加密): WebSocket也可以通过HTTP的握手阶段来协商是否使用加密(即wss://与ws://),确保数据传输的安全性。

下面看个小栗子:

WebSocket使用HTTP协议进行握手的具体流程。

1.客户端发起请求:客户端通过HTTP协议发起一个带有特定头部(如Upgrade : websocket和Connection: Upgrade)的请求,表示希望将连接升级为WebSocket协议。

复制代码
GET /chat HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlbG9naW5nCg==
Sec-WebSocket-Version: 13

2.服务器响应:

如果服务器支持WebSocket协议,它会通过HTTP响应返回一个"101 Switching Protocols"的状态码,并在响应头中确认协议升级

复制代码
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

3.协议切换: 一旦握手成功,客户端和服务器之间的通信就不再使用HTTP协议,而是切换到WebSocket协议,这时可以开始进行持久的、双向的实时通信。

相关推荐
卡戎-caryon27 分钟前
【Linux网络与网络编程】03.UDP Socket编程
linux·服务器·网络·笔记·单例模式·udp·网络通信
張萠飛43 分钟前
Linux的TCP连接数到达2万,其中tcp_tw、tcp_alloc、tcp_inuse都很高,可能出现什么问题
linux·网络·tcp/ip
神秘的t1 小时前
javaSE————网络原理
java·网络
EasyNVR2 小时前
视频分析设备平台EasyCVR视频结构化AI智能分析:筑牢校园阳光考场远程监控网
网络·音视频
iOS技术狂热者2 小时前
Flutter 音视频播放器与弹幕系统开发实践
websocket·网络协议·tcp/ip·http·网络安全·https·udp
jinan8862 小时前
企业的移动终端安全怎么管理?
大数据·网络·安全·数据分析·开源软件
W说编程2 小时前
《UNIX网络编程卷1:套接字联网API》第5章 TCP客户服务器程序示例
c语言·网络·网络协议·tcp/ip·unix·tcp
不爱敲代码的阿玲2 小时前
西门子s7协议
服务器·网络·tcp/ip
栗筝i2 小时前
Spring 核心技术解析【纯干货版】- XVII:Spring 网络模块 Spring-WebFlux 模块精讲
java·网络·spring
CloudJourney3 小时前
(万字超详细-网络版本)VXLAN详解:概念、架构、原理、搭建过程、常用命令与实战案例
网络·架构