> 文章列表 > 【学习笔记】websocket数据帧

【学习笔记】websocket数据帧

【学习笔记】websocket数据帧

介绍

RFC官网给出的数据帧格式
【学习笔记】websocket数据帧

字段解释

  • FIN(1bit): 标记位,表示该数据帧是否为完整消息最后的数据帧。
  • RSV1/2/3(各1bit): 标记位,根据RFC的介绍,这三个bit位是用做扩展用途,没有这个需求的话设置为0。
  • opcode(4bit): 表示该数据帧的操作类型,后面会具体介绍。
  • MASK(1bit): 标记位,标记是否使用掩码,和Masking-key配合使用,按照规定,服务端无需使用掩码,客户端必须使用掩码。
  • Payload len(7bit): 表示Payload(消息体)部分内容长度,因为是无符号整形表达,所以表示范围为0 - 127。
  • Extended payload len: 根据Payload len的值判断是否开启扩展,如果Payload len值等于126,则Extended payload len位数为16;如果Payload len值等于127,Extended payload len的位数为64。
  • Masking-key(32bit): 如果MASK标记为1则启用该字段,字段的值用来解码客户端发送给服务端的数据帧。
  • Payload Data: 消息体内容

opcode

参考IPV4首部Protocal字段

【学习笔记】websocket数据帧

Protocal字段定义了一些功能,比如说用来ping地址的ICMP包就是通过定义IPV4首部中Protocal进行收发IP数据包实现的。

同理,WebSocket中的opcode字段也是定义了WebSocket帧的功能,下面列出部分值:

  • 0x0 denotes a continuation frame 标示当前数据帧为分片的数据帧,也就是当一个消息需要分成多个数据帧来传送的时候,需要将opcode设置位0x0。
  • 0x1 denotes a text frame 标示当前数据帧传递的内容是文本
  • 0x2 denotes a binary frame 标示当前数据帧传递的是二进制内容,不要转换成字符串
  • 0x8 denotes a connection close 标示请求关闭连接
  • 0x9 denotes a ping 标示Ping请求
  • 0xA denotes a pong 标示Pong数据包,当收到Ping请求时自动给回一个Pong

参考资料

小林coding——图解网络
RFC 6445