Wireshark文档阅读笔记-WebSocket协议基本概念

Posted IT1995

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Wireshark文档阅读笔记-WebSocket协议基本概念相关的知识,希望对你有一定的参考价值。

WebSocket

WebSocket是基于TCP的全双工协议。WebSocket是2011年IETF RFC6455中定义的标准,他的API是W3C定义的。

WebSocket不仅适用于浏览器、服务端的程序,还适用于客户端、服务端的程序。WebSocket是基于TCP的协议。WebSocket让服务器和客户端交换成为可能,提高数据的实时传输。定义了服务端传主动传输数据给客户端的标准。

WebSocket协议使用ws和wss作为URI(Uniform Resource Identifier)

Protocol dependencies

TCP: WebSocket基于TCP的协议,WebSocket一般使用80和443口传输数据。

Connection setup

建立一个WebSocket连接,客户端需要发送WebSocket握手请求,服务端返回WebSocket握手响应,如下:

客户端请求(与HTTP相似,每行的结尾都使用\\r\\n):

GET / HTTP/1.1
Host: 192.168.43.135:12345
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Origin: file://
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/52.0.2743.116 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4
Sec-WebSocket-Key: bKdPyn3u98cTfZJSh4TNeQ==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits 

服务端响应:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: 4EaeSCkuOGBy+rjOSJSMV+VMoC0=
WebSocket-Origin: file://
WebSocket-Location: ws://192.168.43.135:12345/ 

数据传输

使用Python WebSocket服务端和javascript客户端。

从服务端发送数据给客户端:

Frame 7: 79 bytes on wire (632 bits), 79 bytes captured (632 bits)
Ethernet II, Src: Vmware_8a:3d:a7 (00:0c:29:8a:3d:a7), Dst: Vmware_c0:00:08 (00:50:56:c0:00:08)
Internet Protocol Version 4, Src: 192.168.43.135, Dst: 192.168.43.1
Transmission Control Protocol, Src Port: 12345, Dst Port: 50999, Seq: 205, Ack: 510, Len: 25
WebSocket
    1... .... = Fin: True
    .000 .... = Reserved: 0x0
    .... 0001 = Opcode: Text (1)
    0... .... = Mask: False
    .001 0111 = Payload length: 23
    Payload
JavaScript Object Notation
Line-based text data
    Welcome, 192.168.43.1 ! 

从客户端发送数据给服务端:

Frame 9: 72 bytes on wire (576 bits), 72 bytes captured (576 bits)
Ethernet II, Src: Vmware_c0:00:08 (00:50:56:c0:00:08), Dst: Vmware_8a:3d:a7 (00:0c:29:8a:3d:a7)
Internet Protocol Version 4, Src: 192.168.43.1, Dst: 192.168.43.135
Transmission Control Protocol, Src Port: 50999, Dst Port: 12345, Seq: 510, Ack: 230, Len: 18
WebSocket
    1... .... = Fin: True
    .000 .... = Reserved: 0x0
    .... 0001 = Opcode: Text (1)
    1... .... = Mask: True
    .000 1100 = Payload length: 12
    Masking-Key: e17e8eb9
    Masked payload
    Payload
JavaScript Object Notation
Line-based text data
    test message 

下面来看下官方提供的pcap:

我们来分析下。

首先是TCP三次握手,从中可以知道,服务端端口为12345,客户端端口为50999

 客户端向服务端发送了一个HTTP请求,他的head里面带有很多webSocket的头,并且Connection设置为了Upgrade,随后服务端回复ACK:

 随后服务端给客户端发送HTTP/1.1 101 Switching Protocols,头信息里面Upgrade为webSocket,Connection为Upgrade,并且带有一些WebSocket的头信息:

 随后服务端向客户端推送WebSocket数据,内容为Welcome, 192.168.43.1 !

客户端收到后回复ACK

 这里客户端发送数据给服务端,内容为test message

这个应该是个聊天室,这里服务端收到后,又给客户端回了相同的信息,并且信息里面还有哪个IP,什么时候说的这句话:

 剩下的部分就不分析了,在看一个TCP Keep-Alive

 从中可以看出都是客户端发出来的,Keep-Alive,然后服务端做ACK应答。

以上是关于Wireshark文档阅读笔记-WebSocket协议基本概念的主要内容,如果未能解决你的问题,请参考以下文章

php swoole 和 websocket的初次碰撞

Wireshark网络分析实战笔记高级信息统计工具的用法

Playframework 推送到 Websocket

笔记本用wireshark抓包没有找到网络接口?

Python 3.6文档阅读笔记

如何在特定网站上找到 websocket 和 websocket url?