前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深入理解websocket传输过程

深入理解websocket传输过程

原创
作者头像
喵小贱
发布2018-07-17 11:24:04
1.6K0
发布2018-07-17 11:24:04
举报
文章被收录于专栏:黄子玥的专栏黄子玥的专栏

上一篇已经大概介绍了websocket是基于tcp传输的上层协议,且握手方式借用了http的过程,这个过程我们通过一个强大的网络抓包工具wireshark来看个究竟吧。

打开wireshark,过滤器写websocket协议进行过滤,选一个包进行TCP流追踪

这样做的目的是为了得到与浏览器打开网站相关的数据包,将得到如下图:

具体我们来分析一下这几个包都干了什么:

链接过程

①先来看一个老图——TCP报文格式及握手过程O(∩_∩)O:

可见第一步(前三个包)是TCP协议的三次握手过程,详细报文信息可以点击封包详细信息进行查看,这里不再具体说明了:

报文格式对应说明:

②第四个包是HTTP协议,查看封包详细信息,标明请求升级为websocket协议:

ps:wireshark封包详细信息中与OSI七层模型的对应关系如下:

③第五个包继续是TCP协议,从ip可以看出事服务器发送给客户端的,ACK表示确认包收到了(过程中不间断有ACK回包进行确认),然后第六个HTPP协议包将HTTP转为ws协议:

打开第六个包的封包详细信息,如下:

传输过程

④后面的封包已经转为ws协议,使用ws协议进行数据传输,查看详细信息:

ps:封包里面带了MASKED的都需要通过Masking-Key进行解迷后,Line-based text data才会能明文展示,否则展示如上图是乱码。比如第九个封包Mask:False,则可直接看到传输的数据内容:

PS:观察股指游戏的ws数据传输,会有类似客户端只传1,然后服务器回包2,为发送的心跳信息,来保证对方还存活。

关闭过程

①客户端发起一个TCP Close(这里是关闭浏览器,也可以是服务端想客户端发起close)

一旦发送或接收到一个Close控制帧,这就是说,_WebSocket 关闭阶段握手已启动_,且WebSocket连接处于CLOSING状态,一个Close控制帧可以包含一个表示关闭原因的状态码。比如1000表示正常关闭。具体错误码意思参考文章:

http://www.cnblogs.com/micro-chen/p/6046354.html

需要注意下这几个包ACK的包表示服务器收到了客户端请求的回包,为什么有三个TCP回包且长度一样?查了一下TCP segement of a reassembled PDU的打印意思,大概知道其实是主机响应一个查询或者命令时如果要回应很多数据(信息)而这些数据超出了TCP的最大MSS时,主机会通过发送多个数据包来传送 这些数据(注意:这些包并未被分片)。对wireshark来说这些对相应同一个查询命令的数据包被标记了“TCP segment of a reassembled PDU”,这不影响我们对关闭过程的学习和了解。

最后四步,是TCP的四次挥手协议,可以再看一个老图O(∩_∩)O:

参考文章:http://www.9upk.com/article/2537.html

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 链接过程
  • 传输过程
  • 关闭过程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档