美文网首页
001-- 网络连接过程

001-- 网络连接过程

作者: 修_远 | 来源:发表于2020-06-18 12:46 被阅读0次

[TOC]

专有名词

  • seq(sequence number):表示我方(发送方)这边,这个 packet 的数据部分的第一位应该在 data stream 中所在的位置。(这里用的是“应该”。因为对于没有数据的传输,如 ACK,虽然它有一个 seq,但是这次传输在整个 data stream 中是不占位置的,所以下一个实际有数据的传输,会从上一次发送 ACK 的数据包的 seq 开始)。

  • SYN:表示建立连接。传输虽然没有 data,但是会让下一次传输的 packet seq加一。

  • ACK(acknowledge number):表示响应。期望对方(接收方)的下一次 sequence number 是多少。但 ACK 的传输不会让下一次的 packet 加一。

  • FIN(finish):表示关闭连接。传输虽然也没有 data,但是会让下一次传输的 packet seq加一。

  • PSH:表示有 DATA数据传输,

  • RST:表示连接重置。

HTTP 传输过程

这篇文章的标题虽然是连接过程,但这里其实是 HTTP数据交互的一个过程,我们知道HTTP是无连接的,所以这里需要注意下

  1. 客户端向服务端发送请求报文;
  2. 服务端根据请求报文收集对应的资源组合成响应报文;
  3. 客户端收到时响应报文,进行解析;
HTTP数据传输过程

TCP 三次握手连接过程

  1. 客户端发送 SYN 到服务端,等待确认;
  2. 服务端向客户端返回 ACK,同时,自己也发送一个SYN包,即 SYN + ACK 包;
  3. 客户端收到回应,向服务端发送确认包 ACK;
  4. 完成三次握手,客户端与服务端开始传输数据;
TCP 三次握手连接过程

实例

TCP协议中的seq/ack序号是如何变化的?

TCP数据包交互过程

过程1:客户端发送 SYN 到服务端

  • seq=0:第一次握手。client 端第一次发送 packet。按照上面的原则,他的数据应该是从第一个开始,也就是第 0 位开始,所以此时 seq=0
  • ack=0:server 端之前从未发送过数据。所以 client 期望 server 回传的 seq 是从第一个开始,所以此时 ack=0

过程2:服务端向客户端返回 ACK,同时,自己也发送一个SYN包,即 SYN + ACK 包

  • seq=0:第二次握手。server 端第一次发送 packet。上面介绍过了,ack 表示对方期望我方本次传输的 seq 的值,我方(server)接收到的对方(client)传来的 ack=0,说明 client 端希望 server 端回传的 seq=0
  • ack=1:在【过程1】中,本次 packet 传输的 seq=0,而 server 端返回的是SYN+ACK,根据上面的规则,SYN 的传输会让 seq+1。server 端知道自己本次传输的有 SYN,所以会告诉 client,下一次的 seq 需要 +1,所以 ack=1

过程3:客户端收到回应,向服务端发送确认包 ACK

  • seq=1:第三次握手。【过程2】中,ack=1,server 端期望 client 端 的 seq,所以 seq=1
  • ack=1:根据上面的原则,ACK 的传输不会让 seq+1。而 client 端知道自己本次传输的是 ACK,所以会告诉 server,下一次的 seq 还是1,所以 ack=1

到这里,已经完成三次握手,客户端与服务端开始传输数据

过程4:客户端向服务端发送数据请求,len=725

  • seq=1
  • ack=1

三次握手接受后,客户端和服务端已经建立了连接,服务端不需要再向客户端返回信息。而这里是客户端第一次向服务端发送数据,所以 seq 和 ack 都是用的上一次的结果。

过程5:服务端应答客户端的请求:返回确认包 ACK

  • seq=1:结果仍然是对方期望的值,客户端的ack=1
  • ack=726:本次服务端接收到的 seq=1,数据包长度是 725。服务端本次返回客户端的是 ACK,不会对 seq 造成影响,所以期望的下一次客户端的 seq=1+725

过程6:服务端响应客户端的请求:返回数据包,len=1448

  • seq=1
  • ack=726

过程7:客户端收到服务端的响应数据:返回确认包 ACK

  • seq=726:分析到这一步,应该是很清晰了,己方的 seq,就是对方上一个包的 ack;
  • ack=1449:得到 seq=726,数据包长度为:1448,则客户端期望服务端下一次的 seq=1+1448

后面的过程雷同,就不在展开分析了

TCP 四次挥手断开过程

  1. 客户端发送 FIN,提醒服务端自己准备关闭通信;
  2. 服务端收到 FIN,回应 ACK;
  3. 服务端发送 FIN,提醒客户端自己准备关闭通信;
  4. 客户端收到 ACK + FIN,回应一个 ACK;
  5. 四次挥手完毕,关闭连接;
TCP 四次挥手

HTTPS 连接过程

主要过程分为四个

  1. 第一次握手:交换基本信息
  2. 第二次握手:确定加密策略
  3. SSL建立成功:HTTP数据传输
  4. 数据传输完成:断开连接
  1. 第一次握手:交换基本信息
  1. 客户端想服务端法发送一个打招呼报文(hello),包含自己支持的SSL版本、加密算法等信息;

  2. 服务端回复一个打招呼报文(hi),包含自己支持的SSL版本、加密算法等信息;

  3. 服务端发送自己经过 CA 认证的公开密钥

    1. 服务端向 CA 认证机构发送自己的公开密钥(FPKey)
    2. CA 认证机构使用自己的私有密钥给 FPKey 加上签名,并返回给服务端;
  4. 服务端发送结束招呼报文,SSL第一次握手结束;

  1. 第二次握手:确定加密策略
  1. 客户端使用 FPKey,对自己的随机密码串(CKey)进行加密并发送给服务端。客户端使用 CA 的公开密钥对 FPKey 的签名进行认证,确保密钥未被替换;
  2. 客户端发送提示报文,后续报文经用 CKey 进行加密;
  3. 客户端发送 finished 报文,表示该次发送结束。后续是否继续通信取决于客户端的 finished 报文能否被服务端成功解密
  4. 服务端发送提示报文,表示它之后的报文也会用 CKey 进行加密
  5. 服务端发送 finished 报文。至此 SSL 握手结束,成功建立 SSL 连接。
  1. SSL建立成功:HTTP数据传输
  1. 客户端开始发送 HTTP 请求报文。建立 TCP 链接,开始传输数据
  2. 客户端发送 HTTP 回复报文
  1. 数据传输完成:断开连接

客户端发送断开链接报文,并断开 TCP 连接

HTTPS连接过程

HTTPS 中间人拦截过程

中间人拦截过程发生在第一个部分,拦截服务端返回的公钥,构建一对新的密钥伪装成公钥发送给客户端。然后拿到客户端的随机数,再用服务端的公钥进行加密,将密钥发送给服务端。

image

参考链接:
Http和https建立连接全过程
深入揭秘HTTPS安全问题&连接建立全过程
TCP协议中的seq/ack序号是如何变化的?

相关文章

  • 001-- 网络连接过程

    [TOC] 专有名词 seq(sequence number):表示我方(发送方)这边,这个 packet 的数据...

  • Android开发之WIFI与网络连接处理

    网络连接处理 在说WiFi之前,先来说说网络连接处理。在Android开发过程中,对于一个需要连接网络的Andro...

  • 网络连接与传输建立过程

    网络连接与传输建立过程 Socket连接 Socket 以服务器 ip 和端口号创建一个 Socket 套接子,对...

  • Airport Extreme设置

    尝鲜Airport Extreme,颜值很高,过程不爽,结果尚可。 开箱接电插网线,网络连接AE热点后,系统会自动...

  • Centos7修改DNS

    显示当前网络连接nmcli connection show 修改当前网络连接对应的DNS服务器,这里的网络连接可以...

  • iOS逆向1024-防护进阶

    001--反调试sysctl(代码防护) // sysctl:检测app进程是否被附加 (防护进程被调试) 《程...

  • NSURLConnection finished with er

    序言:正常迭代中的工程,突然冒出这个错误,显示网络连接错误,错误代码为-1009。 解决过程:-1009不是htt...

  • iOS网络层设计

    iOS网络层设计 总体思想:提供稳定的数据服务:稳定的网络连接+稳定的数据接口。 稳定的网络连接:网络连接尽量做到...

  • 浏览器网络连接全过程

    浏览器从输入网址到获得并呈现网页全过程涉及的前端知识比较全面和重要,我们前端工程师应该理解这一过程。这个过程主要分...

  • 二、Android 数据链接的动态分析

    经过前面这些过程,网络连接所需要的条件就全部准备就绪,接下来就是等待网络接入把网络接入过程简单分为三个阶段触发阶段...

网友评论

      本文标题:001-- 网络连接过程

      本文链接:https://www.haomeiwen.com/subject/vbquxktx.html