关于websocket框架的问题

时间:2018-02-02 21:08:27

标签: websocket

根据RFC6455规范关于websocket的。 数据框结构如下:

                          frame-fin           ; 1 bit in length
                          frame-rsv1          ; 1 bit in length
                          frame-rsv2          ; 1 bit in length
                          frame-rsv3          ; 1 bit in length
                          frame-opcode        ; 4 bits in length
                          frame-masked        ; 1 bit in length
                          frame-payload-length   ; either 7, 7+16,
                                                 ; or 7+64 bits in
                                                 ; length
                          [ frame-masking-key ]  ; 32 bits in length
                          frame-payload-data     ; n*8 bits in
                                                 ; length, where
                                                 ; n >= 0

所以保持帧的字节数组的最小长度是224字节(56位)?当我在互联网上阅读以表示字节数组时,我们需要4个字节(1000)。

如何屏蔽数据?我应该掩盖哪些数据?只有帧有效负载数据或除掩码密钥以外的所有帧?

1 个答案:

答案 0 :(得分:1)

frame-masking-key字段仅在屏蔽帧时出现,仅对客户端发送到服务器的帧执行此操作。 frame-payload-data是可选的;框架可能为空,不包含任何数据。因此,客户端到服务器方向上的帧的最小长度是(1 + 1 + 1 + 1 + 4 + 1 + 7 + 32)= 48位或6个字节,以及服务器中帧的最小长度到客户端方向是(1 + 1 + 1 + 1 + 4 + 1 + 7)= 16位或2个字节。

那些不带有效载荷的帧。显然,携带有效载荷数据的帧将需要额外的空间。

  

当我在互联网上阅读以表示字节数组中的一点时,我们需要4个字节   (1000)。

嗯,不,每个字节都有8位。在程序中使用较大的数据单元来表示位值可能很方便,但这完全独立于实际帧中使用的格式。

  

如何屏蔽数据?我应该掩盖哪些数据?只有帧有效载荷数据   或掩码键以外的所有帧?

通过frame-masking-keyframe-payload-data进行异或来掩盖。这在section 5.3 of RFC 6455

中有所描述