tcp传输协议机制

news/2025/2/20 5:06:24/

强关联博客:TCP协议报头及各个字段的作用-CSDN博客


目录

​编辑 

一. 三次握手建立连接 

1、字段

2、三次握手过程

1. 第一次握手:客户端发送 SYN 报文

2、第二次握手:服务器回应 SYN-ACK 报文

3.第三次握手:客户端发送 ACK 报文

3、三次握手的总结

4、为什么需要三次握手?

二. 可靠数据传输

(1) 序列号和确认号

(2) 重传机制

(3) 校验和

三. 流量控制

(1) 接收窗口

(2) 滑动窗口机制

四. 拥塞控制

(1) 慢启动

(2) 拥塞避免

(3) 快重传和快恢复

五. 四次挥手断开连接

(1) 第一次挥手:FIN

(2) 第二次挥手:ACK

(3) 第三次挥手:FIN

(4) 第四次挥手:ACK

六、确认应答(ACK)机制

1. ACK 机制的基本原理

2. ACK 机制的工作流程

3. ACK 机制的细节

(1) 累积确认

(2) 延迟确认

(3) 选择性确认(SACK)

4. ACK 机制的作用

5. ACK 机制的示例

总结  


 


 


 

一. 三次握手建立连接 

1、字段

在数据传输前,TCP通过三次握手确保双方准备好通信:

  1. SYN:客户端发送SYN报文,包含初始序列号(ISN)。

  2. SYN-ACK:服务器回应SYN-ACK报文,确认客户端的SYN,并发送自己的ISN。

  3. ACK:客户端发送ACK报文,确认服务器的SYN。


2、三次握手过程

1. 第一次握手:客户端发送 SYN 报文
  • 客户端行为

    • 客户端希望与服务器建立 TCP 连接,首先发送一个 SYN 报文(Synchronize Sequence Numbers)。

    • 该报文包含以下关键信息:

      • SYN 标志位:设置为 1,表示这是一个同步报文。

      • 初始序列号(ISN, Initial Sequence Number):客户端随机生成的一个序列号(例如,ISN = 1000),用于标识数据字节流的起始位置。

    • 客户端进入 SYN_SENT 状态,等待服务器的确认。


2、第二次握手:服务器回应 SYN-ACK 报文
  • 服务器行为
  • 服务器收到客户端的 SYN 报文后,会检查是否可以接受该连接请求。
  • 如果接受,服务器会发送一个 SYN-ACK 报文,包含以下关键信息:
    • 服务器的初始序列号(ISN):服务器随机生成的一个序列号(例如,ISN = 5000),用于标识服务器数据字节流的起始位置。

    • 确认号(Acknowledgment Number):值为客户端 ISN + 1(例如,1000 + 1 = 1001),表示服务器期望接收的下一个字节的序列号。

    • ACK 标志位:设置为 1,表示确认客户端的 SYN 报文。

    • SYN 标志位:设置为 1,表示服务器也在同步自己的序列号。

    • 服务器进入 SYN_RECEIVED 状态,等待客户端的确认。


3.第三次握手:客户端发送 ACK 报文
  • 客户端行为

    • 客户端收到服务器的 SYN-ACK 报文后,会检查确认号是否正确(即是否为客户端 ISN + 1)。

    • 如果正确,客户端会发送一个 ACK 报文,包含以下关键信息:

      • ACK 标志位:设置为 1,表示确认服务器的 SYN 报文。

      • 确认号(Acknowledgment Number):值为服务器 ISN + 1(例如,5000 + 1 = 5001),表示客户端期望接收的下一个字节的序列号。

    • 客户端进入 ESTABLISHED 状态,表示连接已建立。

    • 服务器行为

      • 服务器收到客户端的 ACK 报文后,检查确认号是否正确(即是否为服务器 ISN + 1)。

      • 如果正确,服务器也进入 ESTABLISHED 状态,表示连接已建立。


3、三次握手的总结

  1. 第一次握手

    • 客户端发送 SYN 报文,携带自己的初始序列号(ISN)。

    • 目的是告诉服务器:“我想和你建立连接,我的序列号从 ISN 开始。”

  2. 第二次握手

    • 服务器回应 SYN-ACK 报文,携带自己的初始序列号(ISN),并确认客户端的 SYN 报文。

    • 目的是告诉客户端:“我收到了你的请求,同意建立连接,我的序列号从 ISN 开始。”

  3. 第三次握手

    • 客户端发送 ACK 报文,确认服务器的 SYN 报文。

    • 目的是告诉服务器:“我收到了你的确认,连接已建立。”


4、为什么需要三次握手?

  1. 确保双方都能发送和接收数据

    • 三次握手确保客户端和服务器都能正常发送和接收数据,验证了双向通信的能力。

  2. 防止旧的重复连接初始化

    • 如果网络中存在延迟的旧 SYN 报文,三次握手可以避免错误地建立连接。

  3. 同步初始序列号(ISN)

    • 三次握手确保双方都知道了对方的初始序列号,为后续可靠数据传输奠定基础。

 


二. 可靠数据传输

TCP 通过以下机制确保数据可靠传输:

(1) 序列号和确认号

  • 序列号(Sequence Number)

    • 每个字节的数据都有一个唯一的序列号,用于标识数据在字节流中的位置。

    • 例如,如果初始序列号(ISN)为 1000,那么第一个字节的序列号为 1000,第二个字节为 1001,依此类推。

  • 确认号(Acknowledgment Number)

    • 接收方通过确认号告知发送方已成功接收的数据。

    • 确认号的值是接收方期望接收的下一个字节的序列号。例如,如果接收方收到序列号为 1000-1999 的数据,它会发送确认号 2000,表示期望接收序列号为 2000 的数据。

  • 作用

    • 确保数据按顺序到达,并且没有丢失或重复。


(2) 重传机制

  • 超时重传

    • 发送方发送数据后,会启动一个定时器。如果在规定时间内未收到确认(ACK),发送方会重传该数据。

  • 快速重传

    • 如果接收方收到乱序的数据(例如,收到序列号为 2000 的数据,但未收到 1000-1999 的数据),它会重复发送对缺失数据的确认(即重复 ACK)。

    • 发送方收到 3 个重复的 ACK 后,会立即重传缺失的数据,而不等待超时。

  • 作用

    • 确保数据在网络中丢失时能够被及时恢复。


(3) 校验和

  • 校验和字段

    • TCP 报文头中包含一个 16 位的校验和字段,用于检测数据在传输过程中是否发生错误。

  • 计算方式

    • 发送方对报文头和数据进行计算,生成校验和。

    • 接收方收到数据后,重新计算校验和,并与报文头中的校验和进行比对。如果不一致,则丢弃该数据。

  • 作用

    • 确保数据的完整性,防止传输过程中出现错误。


三. 流量控制

TCP 通过滑动窗口机制控制发送速率,防止接收方缓冲区溢出:

(1) 接收窗口

  • 接收窗口大小

    • 接收方通过 TCP 报文头中的窗口字段(Window Size)通告其可用缓冲区大小。

    • 例如,如果接收窗口大小为 5000 字节,表示接收方当前只能接收 5000 字节的数据。

  • 动态调整

    • 接收方会根据缓冲区使用情况动态调整窗口大小,并通过 ACK 报文通知发送方。


(2) 滑动窗口机制

  • 发送窗口

    • 发送方根据接收窗口大小调整自己的发送窗口,确保发送的数据量不超过接收方的处理能力。

  • 滑动原理

    • 当发送方收到接收方的确认后,发送窗口会向前滑动,允许发送新的数据。

  • 作用

    • 防止接收方缓冲区溢出,同时提高网络利用率。


四. 拥塞控制

TCP 通过拥塞控制算法避免网络过载:

(1) 慢启动

  • 初始阶段

    • 发送方从较小的拥塞窗口(Congestion Window, cwnd)开始,通常为 1 个 MSS(最大报文段大小)。

  • 指数增长

    • 每收到一个 ACK,拥塞窗口大小加倍,直到达到慢启动阈值(ssthresh)。


(2) 拥塞避免

  • 线性增长

    • 当拥塞窗口达到慢启动阈值后,进入拥塞避免阶段,窗口大小每经过一个往返时间(RTT)增加 1 个 MSS。

  • 目的

    • 避免窗口增长过快导致网络拥塞。


(3) 快重传和快恢复

  • 快重传

    • 当发送方收到 3 个重复的 ACK 时,立即重传丢失的数据,而不等待超时。

  • 快恢复

    • 在快重传后,发送方将拥塞窗口减半,并直接进入拥塞避免阶段,而不是从慢启动开始。

  • 作用

    • 快速检测和恢复丢包,减少网络拥塞的影响。


五. 四次挥手断开连接

TCP 通过四次挥手终止连接:

(1) 第一次挥手:FIN

  • 主动关闭方(例如客户端)发送 FIN 报文,表示数据发送完毕,请求关闭连接。

  • 客户端进入 FIN_WAIT_1 状态。


(2) 第二次挥手:ACK

  • 被动关闭方(例如服务器)收到 FIN 报文后,发送 ACK 报文确认。

  • 服务器进入 CLOSE_WAIT 状态,客户端进入 FIN_WAIT_2 状态。


(3) 第三次挥手:FIN

  • 服务器完成数据发送后,发送自己的 FIN 报文,请求关闭连接。

  • 服务器进入 LAST_ACK 状态。


(4) 第四次挥手:ACK

  • 客户端收到服务器的 FIN 报文后,发送 ACK 报文确认。

  • 客户端进入 TIME_WAIT 状态,等待 2 个 MSL(最大报文段生存时间)后关闭连接。

  • 服务器收到 ACK 后,立即关闭连接。


六、确认应答(ACK)机制

1. ACK 机制的基本原理

  • 确认号(Acknowledgment Number)

    • 接收方通过确认号告知发送方已经成功接收的数据。

    • 确认号的值是接收方期望接收的下一个字节的序列号。例如,如果接收方成功接收了序列号为 1000-1999 的数据,它会发送确认号 2000,表示期望接收序列号为 2000 的数据。

  • ACK 标志位

    • 在 TCP 报文头中,ACK 标志位用于指示该报文是一个确认报文。

    • 当 ACK 标志位为 1 时,确认号字段才有效。


2. ACK 机制的工作流程

  1. 发送数据

    • 发送方发送一个数据报文,报文中包含序列号(Sequence Number),用于标识数据的起始位置。

  2. 接收数据

    • 接收方收到数据后,检查数据的完整性和顺序性。

    • 如果数据正确,接收方会发送一个 ACK 报文,报文中包含确认号(Acknowledgment Number),表示已经成功接收的数据。

  3. 确认数据

    • 发送方收到 ACK 报文后,根据确认号更新自己的发送窗口,继续发送后续数据。


3. ACK 机制的细节

(1) 累积确认
  • TCP 使用累积确认机制,即接收方发送的确认号表示已经成功接收的所有数据。

  • 例如:

    • 接收方收到序列号为 1000-1999 的数据后,发送确认号 2000。

    • 如果接收方后续收到序列号为 2000-2999 的数据,它会发送确认号 3000,而不是分别确认 1000-1999 和 2000-2999。

  • 优点

    • 减少确认报文的数量,提高网络效率。


(2) 延迟确认
  • 为了进一步减少确认报文的数量,TCP 实现了延迟确认机制。

  • 工作原理

    • 接收方在收到数据后,不会立即发送 ACK,而是等待一段时间(通常为 200ms),看看是否有数据需要一起发送。

    • 如果在等待期间有数据需要发送,接收方会将 ACK 和数据一起发送。

  • 优点

    • 减少网络中的小报文数量,提高网络利用率。


(3) 选择性确认(SACK)
  • 在某些情况下,接收方可能会收到乱序的数据。为了更高效地处理这种情况,TCP 提供了选择性确认(SACK)机制。

  • 工作原理

    • 接收方通过 SACK 选项告知发送方已经成功接收的非连续数据块。

    • 发送方根据 SACK 信息只重传丢失的数据,而不是重传所有数据。

  • 优点

    • 提高重传效率,减少不必要的重传。


4. ACK 机制的作用

  1. 确保数据可靠传输

    • 通过确认号,发送方可以知道接收方已经成功接收了哪些数据。

    • 如果发送方未收到 ACK,会触发重传机制,确保数据不会丢失。

  2. 控制流量

    • 接收方通过 ACK 报文中的窗口字段(Window Size)通告自己的接收能力。

    • 发送方根据窗口大小调整发送速率,防止接收方缓冲区溢出。

  3. 实现拥塞控制

    • 发送方根据 ACK 的到达情况判断网络拥塞程度。

    • 如果 ACK 延迟到达或未到达,发送方会减少发送速率,避免网络拥塞。


5. ACK 机制的示例

假设客户端和服务器之间进行数据传输:

  1. 客户端发送数据

    • 客户端发送序列号为 1000-1999 的数据。

  2. 服务器确认数据

    • 服务器成功接收数据后,发送 ACK 报文,确认号为 2000。

  3. 客户端继续发送数据

    • 客户端收到 ACK 后,继续发送序列号为 2000-2999 的数据。

  4. 服务器确认数据

    • 服务器成功接收数据后,发送 ACK 报文,确认号为 3000。 


总结  

  • 可靠数据传输:通过序列号、确认号、重传机制和校验和确保数据可靠传输。

  • 流量控制:通过滑动窗口机制动态调整发送速率,防止接收方缓冲区溢出。

  • 拥塞控制:通过慢启动、拥塞避免、快重传和快恢复算法避免网络拥塞。

  • 四次挥手:通过四次挥手优雅地关闭连接。

  • 其他机制:保活机制和延迟确认进一步优化了 TCP 的性能和可靠性。

  • 核心功能:通过确认号确保数据的可靠传输。

  • 优化机制:累积确认、延迟确认和选择性确认(SACK)进一步提高了 ACK 机制的效率。

  • 与其他机制的协同:ACK 机制与重传机制、流量控制和拥塞控制紧密结合,共同保证了 TCP 协议的高效性和可靠性。

  • 这些机制共同保证了 TCP 协议的高效性、可靠性和健壮性。


http://www.ppmy.cn/news/1572676.html

相关文章

SpringCloud系列教程:微服务的未来(二十二)RabbitMQ安装部署、快速入门、数据隔离

前言 在现代分布式系统中,消息队列(Message Queue)扮演着重要角色。RabbitMQ作为一个广泛使用的消息中间件,它不仅提供了高效、可靠的消息传递机制,还具备丰富的特性,如消息持久化、消息确认、消费者负载均…

网络安全扫IP工具

目录 1.网络扫描概述 2.网络扫描步骤及分类 2.1主机扫描 ICMP Ping arping arp-scan nbtscan Nmap进行主机探测 2.2端口扫描 TCP 连接扫描 SYN扫描 隐蔽端口扫描 UDP 端口扫描 2.3操作系统/网络服务辨识 操作系统主动探测技术 被动操作系统识别技术 网络服务类…

【第4章:循环神经网络(RNN)与长短时记忆网络(LSTM)— 4.6 RNN与LSTM的变体与发展趋势】

引言:时间序列的魔法钥匙 在时间的长河中,信息如同涓涓细流,绵延不绝。而如何在这无尽的数据流中捕捉、理解和预测,正是循环神经网络(RNN)及其变体长短时记忆网络(LSTM)所擅长的。今天,我们就来一场深度探索,揭开RNN与LSTM的神秘面纱,看看它们如何在时间序列的海洋…

单元测试、系统测试、集成测试知识详解

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、单元测试的概念 单元测试是对软件基本组成单元进行的测试,如函数或一个类的方法。当然这里的基本单元不仅仅指的是一个函数或者方法,有…

据称苹果与阿里巴巴将合作为中国iPhone用户开发AI功能

KlipC报道:美媒消息,苹果最近开始与阿里巴巴集团合作,为中国的iPhone用户开发人工智能功能。消息公布后,苹果和阿里巴巴的股价均出现上涨。 据悉,此举是苹果应对在中国销售下滑的策略之一,旨在提供更具吸引…

豆包如何自定义传输协议的

豆包如何自定义传输协议的 现象: 安装完豆包后,直接打开内置浏览器,协议 doubao://doubao-onboarding/ 自定义浏览器协议(也称为自定义 URL 方案)允许你创建一个特定的 URL 格式,用户可以通过该格式在浏…

【第3章:卷积神经网络(CNN)——3.5 CIFAR-10图像分类】

嘿,小伙伴们,今天咱们来聊聊一个超级酷炫的话题——卷积神经网络(CNN)及其在CIFAR-10图像分类中的应用。这不仅仅是一个技术话题,更是一场探索人工智能奥秘的旅程。准备好了吗?咱们这就发车! 一、CNN:人工智能的“千里眼” 首先,咱们得知道CNN是啥。CNN,全名Convol…

Spring 项目接入 DeepSeek,分享两种超简单的方式!

⭐自荐一个非常不错的开源 Java 面试指南:JavaGuide (Github 收获148k Star)。这是我在大三开始准备秋招面试的时候创建的,目前已经持续维护 6 年多了,累计提交了 5600 commit ,共有 550 多位贡献者共同参与…