40、TCP 三次握手、四次挥手

概念

  • 标志位: 数据包
    • SYN synchronize sequence number 同步序列编号
    • ACK acknowledgement 确认符
  • 状态
    • LISTEN 监听TCP端口的连接请求(随时准备被请求中)
    • SYN-SENT 已经发送了连接请求,等待回复的状态(我发送了请求,等你回复哦)
    • SYN-RECEIVED 已经接收到了请求,等待对连接请求的确认
    • ESTABLISHED 代表一个已建立的连接(已经建立连接了,和你说一声哈)

三次握手

  • SYN、ACK代表标识位
  • seq代表发送序号、ack代表确认号
  • 确认码是在发送码的基础上加1
  • 第三次握手 只发送确认标识位 发送序号为上一次的确认序号
  • 过程阐述:
    • 首先客户端发送连接请求,
    • 其次服务端接到请求后,发送确认请求
    • 最后客户端接到确认请求后,发送建立连接


      40、TCP 三次握手、四次挥手_第1张图片
  • 通俗描述(男生想和女生交往) 男生相当于client,女生相当于server
    • 第一次男生给女生先发信息,我喜欢你,咱两可以交往吗
    • 第二次女生回复男生,我也喜欢你很久了,咱两可以交往
    • 第三次男生说太好了,既然我们互相喜欢了,就可以开始交往了
  • 为什么会有第三次握手,握手两次就算建立连接不可以么?
    • tcp属于可靠的传输协议,如果没有第三次握手,当服务器和客户端第二次握手时,由于网络原因,客户端可能没有服务器的确认消息,此时服务器的连接端口会一直处于打开状态无法销毁,这样会占用服务器资源。

四次挥手

  1. fin 代表finish
  2. 客户端发送关闭请求,客户端状态为等待关闭(FIN-WAIT 1);
  3. 服务端接到关闭请求后,发送确认响应,服务端状态为等待关闭(CLOSE-WAIT);
  4. 客户端收到服务端的确认响应后,客户端状态变为等待关闭2(FIN-WAIT 2);此时服务器会确认业务数据是否传输完毕,如果没传输完继续传输,如果传输完则二次发送确认响应。此时服务器状态变成等待确认(last-ack);
  5. 客户端收到服务器的二次确认后,客户端状态变成time-wait,并发送关闭指令给服务端;并等待一段时间(2MSL),如果这段时间服务端没响应,客户端则关闭连接。服务端收到关闭指令后关闭连接。
  6. seq为序列码,按照前一次另一端的seq进行递增。如果另一端存在ack码,则直接将ack码作为本次的seq码。
  7. ack为确认码,是在之前另一端的seq码基础上加一。


    40、TCP 三次握手、四次挥手_第2张图片
  • 第一次FIN代表客户端发起关闭连接请求
  • 第二次ACK标识位代表服务器收到了客户端的关闭请求
  • 第三次 FIN和ACK代表对之前第一次FIN的确认
  • 第四次ACK代表客户端确认收到服务器的最后一次响应


    40、TCP 三次握手、四次挥手_第3张图片
  • extends1:MSL:完整的声明周期
    • 如果在2MSL内,客户端再次收到服务器的ACK信息,说明客户端发送的关闭指令服务器没有收到,客户端则继续发送关闭指令。
  • extends2:客户端进行第一次关闭请求时,则不再发送数据给服务器。但服务器在LAST-ACK之前依旧会发送响应数据给客户端。这里的数据指的是通过http传输的数据。
  • extends3:TCP连接建立后,服务器鉴定客户端出现故障?
    • 当服务器接收到到客户端端的请求时,会重置保活计时器,有效期为两小时。如果两小时内,服务器没有收到客户端的任何请求,则会发送探测报文段,每隔75分钟发送一次,一共发十次,如果一直没有响应,则认为客户端故障,断开TCP连接。
  • extends4:通俗理解(分手记) 女客户端 男服务端
    • 第一次挥手:女:你个渣男我们分手吧
    • 第二次挥手:男:好的,你等我收拾下东西
    • 第三次挥手:男:我收拾好了,可以分了
    • 第四次挥手:女:分吧,男再次收到通知后就离开了
    • 后戏:女孩说完分手后,等了一会男孩,看看男孩会不会挽留,等了两小时,没有回复,彻底死心后也离开了。

疑惑

  1. tcp是可靠的连接,是否可以基于tcp直接传输数据,不经过http等协议

  2. 四次挥手 如果是服务器发起 流程是怎样
    2.1 时间线的开始阶段是发生在TCP/IP断开连接之前发生的 我这样理解有问题吗?
    当HTML页面被下载下来后,就立马进入时间线流程了,但TCP/IP四次挥手是要等http请求结束后才会触发的 因此时间线的开始要早于四次挥手

  3. 通过本地搭建代理服务器可以翻墙的原因是?是本地网络代理可以直接跨过网络运营商?

  4. http一定是基于tcp?客户端cs架构一般用的什么协议?

  5. 浏览器渲染页面的过程 图片、音视频加载和其他资源加载是不是有所区别?
    我现在的理解是 图片加载是一边加载一边渲染 所以图片特别大的时候 会一点点显示出来
    而想HTML文档、css文档这些是等资源完全下载完以后才开始解析

  6. 测试如果不解析www是否可以访问www.webqd.top
    how browser work

你可能感兴趣的:(40、TCP 三次握手、四次挥手)