我正在用Wireshark检查我的服务器和浏览器之间的websocket流量时,我注意到了这样的框架:
No. Time Source Destination Protocol Length Info
144342 8212.033150000 127.0.0.1 127.0.0.1 WebSocket 821 WebSocket Text [FIN]
Frame 144342: 821 bytes on wire (6568 bits), 821 bytes captured (6568 bits) on interface 0
Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00)
Internet Protocol Version 4, Src: 127.0.0.1 (127.0.0.1), Dst: 127.0.0.1 (127.0.0.1)
Transmission Control Protocol, Src Port: http-alt (8080), Dst Port: 53749 (53749), Seq: 1132, Ack: 603, Len: 755
WebSocket
1... .... = Fin: True
.000 .... = Reserved: 0x00
.... 0001 = Opcode: Text (1)
0... .... = Mask: False
.111 1110 = Payload length: 126 Extended Payload Length (16 bits)
Extended Payload length (16 bits): 140
Payload
Text: {"type":"COLLABORATIVE_COMMANDS","remoteUser":"null","key":"1c78c08f-5d2d-445a-a63c-3a211d2f0336","messageBroadcast":{"smartPath":["null"]}}
WebSocket
1... .... = Fin: True
.000 .... = Reserved: 0x00
.... 0001 = Opcode: Text (1)
0... .... = Mask: False
.111 1110 = Payload length: 126 Extended Payload Length (16 bits)
Extended Payload length (16 bits): 329
Payload
Text [truncated]: {"type":"COLLABORATIVE_COMMANDS","remoteUser":"","key":"1c78c08f-5d2d-445a-a63c-3a211d2f0336","messageBroadcast":{"cameraInfos":{"target":{"x":0,"y":0,"z":0},"camPos":{"x":557.0133301398326,"y":159.5460628202445,"z":342.4
WebSocket
1... .... = Fin: True
.000 .... = Reserved: 0x00
.... 0001 = Opcode: Text (1)
0... .... = Mask: False
.111 1110 = Payload length: 126 Extended Payload Length (16 bits)
Extended Payload length (16 bits): 141
Payload
Text: {"type":"COLLABORATIVE_COMMANDS","remoteUser":"","key":"1c78c08f-5d2d-445a-a63c-3a211d2f0336","messageBroadcast":{"colourEditedMeshes":true}}
WebSocket
1... .... = Fin: True
.000 .... = Reserved: 0x00
.... 0001 = Opcode: Text (1)
0... .... = Mask: False
.111 1110 = Payload length: 126 Extended Payload Length (16 bits)
Extended Payload length (16 bits): 129
Payload
Text: {"type":"COLLABORATIVE_COMMANDS","remoteUser":"","key":"1c78c08f-5d2d-445a-a63c-3a211d2f0336","messageBroadcast":{"explode":"0"}}这是否意味着我的包中有几个websockets?这怎么可能?
发布于 2014-08-19 17:15:38
如果您阅读WebSocket规范,RFC 6455,您将看到WebSocket数据包是框架化的,其中每个帧都有自己的头和有效负载。请记住,TCP是流传输。发送方和接收方不关注TCP帧,而是关注这些帧中的有效负载。WebSocket发送方将发送一个WebSocket报头,后面跟着它的有效负载,然后是下一个WebSocket头和它的有效负载,等等。WebSocket接收器将读取WebSocket报头及其有效载荷,然后读取下一个WebSocket报头及其有效负载,依此类推。通常,Nagle算法是在TCP套接字上启用的,它将根据需要将应用程序数据拆分并组合到TCP帧中,以便进行有效的网络传输。它由对应用程序透明的TCP堆栈处理。因此,如果Nagle决定传输多个WebSocket帧,那么可以在单个TCP帧中看到多个TCP帧。如果WebSocket数据包在短时间内发送,则Nagle可以合并它们,因此它只需要发送单个TCP帧,而不是单独的TCP帧。
https://stackoverflow.com/questions/25384801
复制相似问题