Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一个数据包可以包含几个Websocket吗?_Websocket_Wireshark - Fatal编程技术网

一个数据包可以包含几个Websocket吗?

一个数据包可以包含几个Websocket吗?,websocket,wireshark,Websocket,Wireshark,我正在用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

我正在用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"}}

这是否意味着我的包中有几个WebSocket?这是怎么可能的?

如果您阅读WebSocket规范,您将看到WebSocket数据包是框架式的,其中每个框架都有自己的头和负载。请记住,TCP是一种流式传输。发送方和接收方没有关注TCP帧,而是关注这些帧中的有效负载。WebSocket发送器将发送一个WebSocket标头,后跟其有效负载,再后跟下一个WebSocket标头及其有效负载,依此类推。WebSocket接收器将读取WebSocket标头及其有效负载,然后读取下一个WebSocket标头及其有效负载,依此类推。通常,在TCP套接字上启用,它将根据需要将应用程序数据拆分并组合到TCP帧中,以实现高效的网络传输。这是由对应用程序透明的TCP堆栈处理的。所以是的,如果Nagle是这样决定传输的,那么可以看到多个WebSocket帧出现在一个TCP帧中。如果WebSocket数据包在短时间内发送,Nagle可能会合并它们,因此它只需发送单个TCP帧,而不必发送单独的TCP帧。

非常感谢您提供这些详细的解释。