当前位置: 首页 > news >正文

TCP和Http协议

TCP 三次握手:

第一次握手 :

  • 初始状态:开始时,客户端处于 CLOSED(关闭)状态服务端处于 LISTEN(监听)状态,等待客户端的连接请求。
  • 客户端发送请求:客户端向服务端发送一个 SYN(Synchronize Sequence Numbers,同步序列号)报文,该报文将 SYN 标志位置为 1,表示这是一个连接请求报文。同时,客户端会随机初始化一个序列号(seq=x,这里的 x 是一个随机生成的数值),并将此序列号置于 TCP 首部的「序号」字段中。此报文不包含应用层数据,发送完后,客户端进入 SYN_SENT(已发送 SYN 报文等待确认)状态。

第二次握手 :

  • 服务端接收并响应:服务端收到客户端的 SYN 报文后,知道客户端想要建立连接。服务端会以自己的 SYN 报文作为应答,并且也随机初始化自己的序号(seq=yy 也是一个随机生成的数值),将此序号填入 TCP 首部的「序号」字段中。同时,把客户端的 seq 值加 1(即 ack=x+1作为 ACK(Acknowledgment,确认)的值,表示自己已经收到了客户端的 SYN,接着把 SYN 和 ACK 标志位置为 1
  • 服务端发送报文:最后把该报文发给客户端,此报文也不包含应用层数据。发送完这个报文后,服务端进入 SYN_RCVD(已收到 SYN 报文等待客户端确认)状态。

第三次握手

  • 客户端确认:客户端收到服务端的 SYN+ACK 报文后,会对服务端的 SYN 分组进行确认。客户端将 ACK 标志位置为 1,确认序号 ack=y+1(这里的 y 是服务端在第二次握手中发送的序列号),并且把自己的序列号加 1(即 seq=x+1,这里的 x 是客户端在第一次握手中发送的序列号),然后将该报文发送给服务端。此报文可以携带客户到服务端的数据,但如果不携带数据,则不消耗序号。
  • 连接建立:服务端收到客户端的确认报文后,也进入 ESTABLISHED(已建立连接)状态。至此,客户端和服务端都完成了三次握手,双方的 TCP 连接正式建立,之后就可以开始相互发送数据了。

第一次握手断开:客户端会在一段时间后超时并重传 SYN 报文,以尝试重新建立连接。

第二次握手断开:客户端也会进行重传 SYN 报文。而服务器端在发送 SYN-ACK 报文后,会进入 SYN_RCVD(已收到 SYN 报文等待客户端确认)状态,并等待客户端的 ACK 报文。如果服务器端在一段时间内没有收到客户端的 ACK 报文,也会认为连接建立失败,并释放为此次连接申请的资源。

第三次握手断开服务器端由于没有收到客户端的确认报文,会多次重传 SYN-ACK 报文,等待客户端的回应。最终会认为连接建立失败,并释放相关资源。客户端在发送 ACK 报文后,会认为连接已经建立成功。当客户端后续向服务器发送数据时,服务器会以 RST(复位)包响应客户端,客户端收到 RST 包后,就会意识到连接出现了问题。

TCP 四次挥手:

第一次挥手 客户端发出连接释放报文,并且停止发送数据。

第二次挥手 服务器端接收到连接释放报文后,发出确认报文,服务端就进入了CLOSE-WAIT 关闭等待状态

第三次挥手 客户端接收到服务器端的确认请求后,客户端就会进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文,服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认

第四次挥手 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态,但此时TCP连接还未终止,必须要经过2MSL后(最长报文寿命),当客户端撤销相应的TCB后,客户端才会进入CLOSED关闭状态,服务器端接收到确认报文后,会立即进入CLOSED关闭状态,到这里TCP连接就断开了,四次挥手完成


http://www.mrgr.cn/news/91688.html

相关文章:

  • PyTorch 源码学习:阅读经验 代码结构
  • 嵌入式音视频开发(三)直播协议及编码器
  • 【Java】泛型与集合篇 —— Set 接口
  • 前端常见面试题-2025
  • C语言——时基
  • Linux-----进程(多任务)
  • C#发送邮件
  • 基于正则化密集连接金字塔网络的显著实例分割
  • mysql总结
  • Day6 25/2/19 WED
  • Windows 启动 SSH 服务报错 1067
  • Compose 常用UI组件
  • PVE使用一个物理网卡采用VLAN为管理IP和VM分配网络的问题
  • springboot-ffmpeg-m3u8-convertor nplayer视频播放弹幕 artplayer视频弹幕
  • 【SQL】多表查询案例
  • OpenResty
  • [数据结构]顺序表详解
  • 驱动开发、移植
  • 动态订阅kafka mq实现(消费者组动态上下线)
  • 【3.2JavaScript】JavaScript语法基础