WebSocket协议基础

WebSocket是一种基于TCP的应用层协议,支持服务器主动向客户端推送数据。建立连接涉及TCP三次握手及WebSocket握手,包括客户端发送包含Sec-WebSocket-Key的HTTP请求,服务器回应Sec-WebSocket-Accept。数据传输部分讨论了FIN、MASK、Payloadlen等协议要素。
摘要由CSDN通过智能技术生成


什么是websocket

WebSOcket 是基于TCP的应用层协议。该协议和http或https 相似,但是却区别于http的一种新的协议。Websocekt 支持客户端之间双向通信。
在这里插入图片描述

websocet 特点

  1. websocket 支持双向通信,支持服务端主动向客户端推送数据。
  2. websocket只是满足了tcp 的分包和粘包处理,负载没有做数据处理

一、websocket 建立连接流程

  1. TCP三次握手,建立连接;
  2. websocket 进行握手(握手一次)建立连接;客户端向服务端发送包
  3. 数据通信。

二、websocket 握手流程

websocket 分成两个部分,握手和传输数据。

客户端握手包

代码如下:

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13

Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== 值是一个base64 编码

2.服务端握手包

代码如下:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: chat

"Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= "这个应答base64编码的数据如何获取?

1.客户端 Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
2. websocket GUID : 258EAFA5-E914-47DA-95CA-C5AB0DC85B11
3. 连接:key_sting = dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11
4. SHA-1 hash : 对key_string 做hash: key = hash(kkey_sting);
5. 对hash 值做base64 编码:encode_base64(key);

在这里插入图片描述


三、websocket数据

数据部分:数据传输结构
协议结构大体分为4部分: 装填部分+可选,Mask部分、负载长度,负载;

FIN: 表示最后一个数据包;
MASK位,如果MASK位置位,则头部中的Masking-key 长度是4字节;否则Masking-key 长度编程0;
Payload len :负载基本长度度: 1<<7;如果负载长度126 则扩展负载长度占用2字节: 长度127 则占用8字节;

负载长度: 7bit+16 bit或7bit+64bit

在这里插入图片描述
详解:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

本文简单的记录了一下,websocket 如何建立连接和数据传输的格式。websocket 的特性等

参考

本专栏知识点是通过<零声教育>的系统学习,进行梳理总结写下文章,对c/c++linux课程感兴趣的读者,可以点击链接,详细查看详细的服务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值