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

计网-TCP可靠传输

TCP(传输控制协议)的可靠传输是通过一系列机制保证数据准确、有序、不丢失地到达接收方。以下是TCP可靠传输的详细过程及核心机制:


1. 数据分块与序列号(Seq)

  • 分块:应用层数据被分割成适合传输的TCP报文段(MSS,通常1460字节)。

  • 序列号(Seq):每个字节都被编号,Seq表示该报文段第一个字节的序号
    例如:发送一个1000字节的数据,若Seq=1,则下一个报文段的Seq=1001。


2. 确认应答(ACK)

  • ACK机制:接收方收到数据后,必须发送ACK确认报文,告知发送方已成功接收。

    • ACK号 = 期望收到的下一个字节的序号(即最后一个成功接收的字节序号 +1)。
      例如:收到Seq=1、长度=1000的数据,则返回ACK=1001。

  • 累积确认:TCP通常对按序到达的连续数据批量确认(如ACK=1001表示1000及之前的所有字节已接收)。


3. 超时重传(Retransmission)

  • RTO(Retransmission Timeout):发送方为每个报文段启动定时器,若超时未收到ACK,则重传。

    • RTO动态计算:基于RTT(往返时间)自适应调整(如Karn算法、Jacobson算法)。

  • 快速重传:如果收到3个重复ACK(如连续收到ACK=1001),说明后续数据可能丢失,立即重传而不等待超时。


4. 滑动窗口(Flow Control)

  • 窗口大小(Window):接收方通过TCP头部的Window字段告知可用缓冲区大小,控制发送方的速率(流量控制)。

    • 发送方只能发送窗口内未被确认的数据

    • 窗口动态滑动:随着ACK的到达,窗口向前移动。


5. 顺序控制与重排序

  • 乱序处理:接收方通过Seq号对乱序报文段排序,仅对连续数据返回ACK。

    • SACK(选择性确认):可选机制,显式告知发送方哪些数据块已接收(解决非连续ACK的问题)。


6. 连接管理与状态维护

  • 三次握手:建立连接时同步初始序列号(ISN),确保双方准备好传输。

    • 过程:SYN → SYN-ACK → ACK。

  • 四次挥手:可靠释放连接,确保数据全部传输完毕。

    • 过程:FIN → ACK → FIN → ACK。


7. 拥塞控制(Congestion Control)

  • 慢启动(Slow Start):窗口从1个MSS开始,按指数增长(每RTT翻倍)。

  • 拥塞避免(AIMD):达到阈值后,窗口线性增长。

  • 快速恢复:发生拥塞时(如丢包),窗口减半并进入线性增长阶段。


可靠传输全过程示例

假设主机A向主机B发送数据:

  1. 发送数据

    • A发送Seq=1、长度=1000的数据。

    • B收到后返回ACK=1001,窗口大小=3000。

  2. 滑动窗口

    • A收到ACK=1001后,窗口向右滑动,继续发送Seq=1001、2001、3001的数据。

  3. 丢包处理

    • 若Seq=2001丢失,B仍返回ACK=1001(重复ACK)。

    • A收到3个ACK=1001后,快速重传Seq=2001。

  4. 拥塞控制

    • 网络拥塞时,A检测到丢包,将窗口从4000减半至2000,进入拥塞避免阶段。


关键点总结

机制作用
序列号(Seq)标识数据字节顺序,解决乱序问题。
确认应答(ACK)接收方反馈成功接收的数据范围。
超时重传确保丢失数据被重新发送。
滑动窗口流量控制,防止接收方缓冲区溢出。
拥塞控制动态调整发送速率,避免网络过载。
连接管理通过握手/挥手确保传输的可靠启动和关闭。

为什么TCP是可靠的?

  1. 无丢失:通过ACK和重传保证。

  2. 无重复:序列号去重。

  3. 无乱序:序列号和滑动窗口排序。

  4. 无错误:通过校验和(Checksum)验证数据完整性。

http://www.dtcms.com/a/299744.html

相关文章:

  • 周末小游戏推荐,离线也能畅玩
  • 阿里云对象存储OSS(Object Storage Service)全面解析
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘ipython’问题
  • 【计算机组成原理】第一章:计算机系统概述
  • GO 从入门到精通
  • STL——vector
  • GO 从入门到精通2
  • MyBatis-Plus 通用 Service
  • J2EE模式---表现层集成模式
  • MyBatis Plus 对数据表常用注解
  • 进阶数据结构:用红黑树实现封装map和set
  • Sql server查询汇总补缺月份
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 热词评论查询功能实现
  • Android开发中内存泄漏问题治理方案
  • 四通OKI5560SC针式打印机如何复位清零和恢复出厂设置??
  • 昇思学习营-昇思+香橙派+deepseek介绍课程内容及心得
  • Chukonu 阅读笔记
  • Rerank 模型的其中两种路径:BERT 相似度与 CoT 推理
  • 如何应对心事干扰学习工作?
  • 高可用集群KEEPALIVED的详细部署
  • 【CTF-Web】dirsearch寻找download.php进行?path=flag.txt任意文件下载
  • 深入解析命名管道:原理、实现与进程间通信应用
  • 机器学习对中特估股票关键特征选取的应用与研究
  • 【橘子分布式】gRPC(番外篇-监听流)
  • Thinkph6中常用的验证方式实例
  • 【时时三省】(C语言基础)用指向函数的指针作函数参数
  • 网络:应用层
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-30,(知识点:传输线特性阻抗,影响因素)
  • 【web应用】基于Vue3和Spring Boot的课程管理前后端数据交互过程
  • 1、虚拟机安装