zoukankan      html  css  js  c++  java
  • websocket底层原理

    握手环节

    1.首先客户端浏览器要和服务端建立一个TCP连接

    2.客户端浏览器会生成一个随机字符串(sec-websocket-key),自己留一份,然后基于http协议将随机字符串放在请求头中发送给服务端

    3.服务端收到随机字符串后会和服务端的魔法字符串(magic string)(魔法字符串是全球公认的)做一个拼接生成一个大的字符串,然后再用全球公认的算法(sha1+base64)进行加密,生成一个密文,接着将这个密文返回给客户端浏览器

    4.客户端浏览器收到这个密文之后,会用同样的魔法字符串与自己生成的随机字符串进行拼接,再用和服务端相同的加密算法进行加密也得到有一个密文,然后拿自己的密文与服务端传过来的密文进行比较,如果结果一样,则说明服务端支持websocke协议,如果结果不一样,则说明服务端不支持websocket协议

    收发数据,密文

    5.校验成功后,客户端浏览器向服务端发送消息,但是发过来的数据是在浏览器内部进行加密过的密文,服务端收到密文后,会进行解密,首先会拿到密文第二个字节的后7位,后7位成为pyload_lenth,如果pyload_lenth是127,数据要往后读8个字节,也就是说前面10个字节都是数据头,后面是真正的数据,如果pyload_lenth是126,数据要往后读两个字节,也就是前面4个字节是数据包的头,后面是真正的数据,如果pyload_lenth <= 125的话,不用换往后读了,前面连个字节就是数据头,后面是真正的数据。无论pyload_lenth是127,是126,还是<=125,去掉数据头之后,数据其实还是密文,还要进一步解密,解密的过程就是再往后读4个字节,这4个字节就是masking-key ,就是掩码,后面就是数据,让masking-key的每个字节与4求余的结果和数据的每个字节进行位运算,就是与或运算,最终位运算运算完了,才能得到真正的数据

     

     

     

     

     

  • 相关阅读:
    CUDA编程学习笔记2
    CUDA编程学习笔记1
    论文阅读 <Relocalization, Global Optimization and Map Merging for Monocular Visual-Inertial SLAM>
    Adding Cues (线索、提示) to Binary Feature Descriptors for Visual Place Recognition 论文阅读
    Omnidirectional DSO: Direct Sparse Odometry with Fisheye Cameras 论文摘要
    CUDA C编程入门
    PatchMatchStereo可能会需要的Rectification
    PatchMatch小详解
    PatchMatch Stereo
    PatchMatch笔记
  • 原文地址:https://www.cnblogs.com/fan-1994716/p/15007313.html
Copyright © 2011-2022 走看看