Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Parse URL #2

Open
hex11o opened this issue May 4, 2020 · 0 comments
Open

Parse URL #2

hex11o opened this issue May 4, 2020 · 0 comments

Comments

@hex11o
Copy link
Owner

hex11o commented May 4, 2020

分为两个部分,协议与资源地址。
记录并不是完整的过程,甚至可能是不正确的
客户端和服务端只是方便描述数据流的方向

  1. 判断是否在本地HSTS (HTTP Strict Transport Security)中, 由此确定传输协议,也不一定非要在本地列表中才能通过HTTPS协议访问
  2. DNS查询
    1. 是否本地缓存有domin。
    2. gethostbyname 方法查询hosts文件。
    3. DNS server进行ARP process, 找到IP。
  3. 链接
    1. TCP协议:

      • 目标端口与进程端口进入传输层
      • 进入网络层,添加IP
      • 进入链接层,添加MAC地址
    2. TCP链接流

      1. 客户端设置SYN一个初始序列值(ISN),发送给服务端
      2. 服务端同样设置SYN一个初始序列值,并且将客户端的ISN+1设置到ACK,返回给客户端
      3. 客户端增加自己和服务端的序列值,设置ACK.
      4. 数据传输,增加相应的bytes到自己的序列值,当另一段接受到对应的包,会返回ACK值相等的包,这也就是TCP链接不丢包的重连的原因。
      5. 断开: 1.发送FIN包;2.另一段发送ACK, 并发送自己的FIN包;3. 请求端发送ACK结束请求.
    3. TLS(Transfer Layer Security)链接流

      1. 客户端发送ClientHello信息,TLS版本,可选的加密协议与压缩算法列表。
      2. 服务端发送ServerHello信息,TLS版本,选择的加密协议与压缩算法,另外马上发送一个Certificate``ServerKeyExchange信息,其中含有公钥签名证书。
      3. 客户端验证签名证书的可靠性,通过公钥加密随机数据(对称密钥)发送ClientKeyExchange给服务端, 服务端通过私钥解码加密数据得到对称密钥。。
      4. 客户端将公钥和对称密钥通过MD5-SHA生成HASH值发送给服务端,服务端同样生成HASH值进行对比,如果相同则建立连接。

Screenshot 2020-05-04 at 5 02 43 PM

@hex11o hex11o changed the title #2 Parse URL Parse URL Sep 12, 2020
@hex11o hex11o mentioned this issue Jun 14, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant