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

计算机网络学习笔记:TCP三报文握手、四报文挥手

文章目录

  • 前言
  • 一、TCP三报文握手
  • 二、TCP四报文挥手
  • 三、TCP保活计时器


前言

  TCP通信,通常需要经历三个阶段:三报文握手->发送,接收数据->四报文挥手。
在这里插入图片描述

一、TCP三报文握手

  三报文握手处于TCP的连接建立阶段,主要解决了以下的问题:

  • 使TCP通信的双方知道对方的存在,确认双方的接收与发送能力。
    • 客户端发送 SYN 报文,请求建立连接。
    • 服务器回复 SYN + ACK 报文,表示“我收到了你的请求,也同意建立连接”。
    • 客户端再次回复 ACK 报文,表示“我也收到了你的确认”。
  • 在握手报文中可以携带 TCP 选项字段,允许双方就这些参数进行协商,使得通信性能更优。
    • MSS(最大报文段长度)
    • Window Scale(窗口扩大因子)
    • SACK(选择性确认)
    • Timestamps(时间戳)等
  • 使TCP双方可以对运输的实体资源进行分配和初始化。在三次握手完成后,操作系统会:
    • 在内核中为该连接分配 socket 缓存(接收缓冲区、发送缓冲区)
    • 初始化连接状态(如 TCP 状态机进入 ESTABLISHED 状态)

  三报文握手的流程如下,分为TCP服务TCP客户两个角色:

  1. 最初,两端的TCP进程都处于关闭的状态。TCP连接进程首先创建传输控制块**(服务端和客户都要)**,用于存储TCP连接中的一些重要信息,随后TCP服务进入监听状态。

  2. TCP客户发送连接请求报文段,该请求报文段不能携带数据,TCP客户进入同步已发送状态,连接请求报文段的关键参数:

    • SYN:1
    • seq:设置为初始值x,作为TCP客户进程的初始序号。
      在这里插入图片描述
  3. TCP服务接收到TCP客户的连接请求报文段,并且向TCP客户发送连接请求确认报文段(不能携带数据),TCP服务进入同步已接收状态,连接请求确认报文段的关键参数:

    • SYN:1
    • ACK:1
    • seq:设置为初始值y,作为TCP服务进程的初始序号。
    • ack:x + 1
      在这里插入图片描述
  4. TCP客户接收到TCP服务的请求确认报文后,最后向服务器发送一个普通TCP确认报文段**(可以携带数据,也可以不携带,如果不携带数据,TCP客户进程要发送的下一个数据报文段的seq依旧是x + 1,否则是x + 2)**,TCP客户进入连接已建立状态。普通TCP确认报文段的关键参数:

    • ACK:1
    • seq:x + 1
    • ack:y + 1
      在这里插入图片描述
      在这里插入图片描述
  5. TCP服务在接收到普通TCP确认报文段后,就会进入连接已建立状态。然后双方基于已建立的连接,进行通信。
    在这里插入图片描述

TCP服务和TCP客户,初始都是关闭状态,由TCP客户去主动打开。
当TCP服务创建了传输控制块后,进入监听状态
TCP客户发送第一次握手的消息时,进入同步已发送状态
TCP服务发送第二次握手的消息时,进入同步已接收状态
TCP客户发送第三次握手的消息时,进入连接已建立状态
TCP服务接收到TCP客户的最后一次握手消息,进入连接已建立状态。
三报文握手,TCP客户占两次,TCP服务占一次。

  为什么TCP服务在接收到TCP客户的连接请求报文段,并且向TCP客户发送连接请求确认报文段后**(二次握手),不是立刻进入连接已建立状态,而是需要等待TCP服务再次发送一个普通TCP确认报文段,才会进入连接已建立状态?(三次握手)**
  假设使用二次握手,那么可能会存在如下图的情况。所以TCP服务需要等到TCP客户在接收到连接请求确认报文段后,再发送一个普通TCP确认报文段,才能进入连接已建立状态。
在这里插入图片描述

二、TCP四报文挥手

  四报文挥手处于TCP的连接终止阶段,是由TCP客户发起的。它的流程:

  1. TCP客户主动关闭连接,发送TCP连接释放报文段并进入终止等待1状态,TCP连接释放报文段的关键参数:
    • FIN:1
    • ACK:1
    • seq:u = TCP客户进程传送过的最后一个字节的序号 + 1
    • ack:v = TCP客户进程已收到的最后一个字节的序号 + 1

在这里插入图片描述

  1. TCP服务进程,在接收到TCP客户释放连接的报文后,会发送一个普通的TCP确认报文段,并且自身进入关闭等待状态。普通的TCP确认报文段的关键参数:
    • ACK:1
    • seq:v
    • ack:u + 1,作为对于TCP连接释放报文段的确认

  这时的TCP连接处于半关闭状态,也就是TCP客户已经没有数据需要发送了,但是TCP服务如果有数据需要发送,TCP客户还是需要接收的。

在这里插入图片描述

  1. TCP客户在接收到确认报文段后,进入终止等待2状态。等待TCP服务发送TCP连接释放报文段。(等到TCP服务已经没有数据要发送了)
  2. TCP服务发送TCP连接释放报文段,进入最后确认状态,TCP连接释放报文段的关键参数:
    • FIN:1
    • ACK:1
    • seq:w,因为在半关闭状态下,TCP服务可能又发送了一些数据。
    • ack:u + 1,对收到的TCP客户的连接释放报文的重复确认

在这里插入图片描述

  1. TCP客户在接收到TCP服务的连接释放报文段后,发送TCP普通确认报文段,进入时间等待状态。TCP普通确认报文段的关键参数:
    • ACK:1
    • seq:u + 1,先前TCP客户发送的连接释放报文段,虽然不携带数据,但是要消耗一个序号。
    • ack:w + 1,对收到的TCP服务连接释放报文段的确认。

在这里插入图片描述

6. TCP服务在接收到TCP客户的TCP普通确认报文段后,就进入关闭状态,TCP服务进程撤销传输控制块(是在建立连接时新建的)。TCP客户进程在经过2倍的msl后,才能进入关闭状态,撤销传输控制块。
在这里插入图片描述
  TCP客户在发送最后一个TCP普通确认报文段后,为什么不直接进入关闭状态?如同下图的场景
在这里插入图片描述

  关键点就在于,最后一次TCP客户发送的TCP普通确认报文段,可能存在丢失的问题。如果发生该问题,那么TCP服务的超市重传,TCP客户已经处于关闭状态,是无法进行处理的。
在这里插入图片描述

TCP服务和TCP客户,都是处于连接状态,由TCP客户去主动发起关闭。
TCP客户发送第一次挥手的消息后,进入终止等待1状态。
TCP服务发送第二次挥手的消息后,进入关闭等待状态。
TCP客户接收第二次挥手的消息后,进入终止等待2状态。
TCP服务发送第三次挥手的消息后,进入最后确认状态。
TCP客户接收第三次挥手的消息后,并且发送第四次挥手,进入时间等待状态,。
TCP服务接收第四次挥手的消息后,就进入关闭状态,撤销传输控制块
TCP客户进程在经过2倍的msl后,才能进入关闭状态,撤销传输控制块。
四报文挥手,TCP客户占两次,TCP服务占两次。
客户端的状态流转:终止等待1 -> 终止等待2 -> 时间等待 -> 关闭
服务端的状态流转:关闭等待 -> 最后确认 -> 关闭

三、TCP保活计时器

  如果TCP连接建立后,客户端出现了故障,那么服务端是如何知道客户端发生故障的呢?
  TCP保活计时器正是用于解决这样的问题,**类似于注册中心的心跳机制。**服务端在接收到客户端的数据后,会重新设置并启动保活计时器,假设TCP客户出现问题,超过保活计时器的时限后仍然没有发送数据,则服务端会发送一个TCP探测报文段,每隔75s发送一次,如果发送10次客户端仍然没有响应,TCP服务进程就确认客户出现了故障,就断开连接。
在这里插入图片描述

相关文章:

  • lua版的Frpc
  • 网页后端开发(基础2--maven单元测试)
  • 卷积神经网络中的通道注意力机制
  • Vue 3.5.13 中 `defineModel` 的局限性及解决方案
  • SpringAI+DeepSeek大模型应用开发——6基于MongDB持久化对话
  • 使用 MCP 驱动的分布式智能扩展 Space-O-RAN
  • sql解析,日期 trunc sysdate
  • Leetcode 刷题记录 12 —— 二叉树第三弹
  • 第19篇:数据库中间件中的 SQL 分析与审计机制设计
  • MCP案例 - 数据可视化工具服务器
  • 包含15个APP客户端UI界面的psd适用于餐厅咖啡店面包店快餐店
  • PyTorch数据分割全流程指南:从MNIST数据集到模型训练
  • 批量下载图片小工具
  • linux多线程之可重入函数
  • 面经的疑难杂症
  • Proteus8.17仿真51单片机驱动ST7920 LCD12864
  • vue2中setTimeout中调用methods方法问题
  • 基于51单片机的智能小车:按键调速、障碍跟踪、红外循迹与数码管显示(一个合格的单片机课设)
  • Elasticsearch9 + 通义大模型实现语义检索操作详解
  • Qt3d中的材质--PBR材质
  • 青海网站开发建设/疫情最新资讯
  • 网站地址栏/营销型网站外包
  • 柳州建站公司/百度app内打开
  • 网站空间购买流程/合肥网络推广有限公司
  • 网站开发实用技术第2版/营销培训课程有哪些
  • 网站建设服务非常好湖南岚鸿公司/简述什么是seo及seo的作用