计网-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.pswp.cn/diannao/93010.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/93010.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数智管理学(三十九)

第三章 数智化对管理理论的冲击第三节 系统理论与生态化管理的强化系统理论作为理解企业运作与环境互动的重要框架,一直强调企业是一个由多个相互关联子系统构成的整体,其核心要素包括整体性、开放性、动态性和反馈机制。在传统管理视角下,这…

哈希表(c语言)

文章目录哈希表哈希表知识点哈希表概念负载因子哈希表的优缺点哈希冲突哈希函数常见哈希函数处理哈希冲突开放定址法线性探测二次探测链地址法哈希表的实现哈希表的核心:HashMap核心函数:从创建到销毁创建哈希表:hashmap_create()销毁哈希表:hashmap_des…

【Canvas与旗帜】条纹版大明三辰旗

【成图】【代码】<!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>十三条纹版大明三辰旗 Draft1</title><style type"text/…

【Java】空指针(NullPointerException)异常深度攻坚:从底层原理到架构级防御,老司机的实战经验

写Java代码这些年&#xff0c;空指针异常&#xff08;NullPointerException&#xff09;就像甩不掉的影子。线上排查问题时&#xff0c;十次有八次最后定位到的都是某个对象没处理好null值。但多数人解决问题只停留在加个if (obj ! null)的层面&#xff0c;没从根本上想过为什么…

【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 主页-评论用户时间占比环形饼状图实现

大家好&#xff0c;我是java1234_小锋老师&#xff0c;最近写了一套【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpandasecharts)视频教程&#xff0c;持续更新中&#xff0c;计划月底更新完&#xff0c;感谢支持。今天讲解主页-评论用户时间占比环形饼状图实现 视频…

Redis面试精讲 Day 5:Redis内存管理与过期策略

【Redis面试精讲 Day 5】Redis内存管理与过期策略 开篇 欢迎来到"Redis面试精讲"系列的第5天&#xff01;今天我们将深入探讨Redis内存管理与过期策略&#xff0c;这是面试中经常被问及的核心知识点。对于后端工程师而言&#xff0c;理解Redis如何高效管理内存、处…

ICMPv6报文类型详解表

一、错误报文类型&#xff08;Type 1-127&#xff09;Type值名称Code范围触发条件示例典型用途1Destination Unreachable0-60: 无路由到目标1: 通信被管理员禁止2: 地址不可达3: 端口不可达4: 分片需要但DF标志设置5: 源路由失败6: 目的地址不可达网络故障诊断2Packet Too Big0…

配置nodejs

第一步确认 node.exe 和 npm 存在 例如安装目录D:\nodejs检查是否存在以下文件&#xff1a; node.exenpm.cmdnpx.cmd 第二步&#xff1a;添加环境变量 PATH 图形化操作步骤&#xff08;Windows&#xff09;&#xff1a; 右键「此电脑」→「属性」点击左侧 「高级系统设置」弹出…

MySQL的命令行客户端

MySQL中的一些程序&#xff1a;MySQL在安装完成的时候&#xff0c;一般都会包含如下程序&#xff1a;在Linux系统下&#xff0c;通过/usr/bin目录下&#xff0c;可以通过命令查看&#xff1a;以下是常用的MySQL程序&#xff1a;程序名作用mysqldMySQL的守护进程即MySQL服务器&a…

C# 值类型与引用类型的储存方式_堆栈_

目录 值类型 引用类型 修改stu3的值 stu也被修改了 为什么? &#xff08;对象之间&#xff09; 值类型中&#xff0c;值全在栈中单独存储&#xff0c;变量之间不会影响 结构体中&#xff0c;结构体全在栈中&#xff0c;结构体与结构体之间也不会相互影响 静态资源区 值类…

解锁永久会员的白噪音软件:睡眠助手

如今的年轻人压力普遍较大&#xff0c;学会解压至关重要。这期就为大家推荐一款优秀的白噪音软件&#xff0c;在压力大时听听&#xff0c;能起到不错的解压效果。 睡眠助手 文末获取 这款软件的特别版本十分出色&#xff0c;知晓的人不多。它已解锁永久会员&#xff0c;无需登…

uniapp使用css实现进度条带动画过渡效果

一、效果 二、实现原理 1.uni.createAnimation 动画函数 2.初始化uni.createAnimation方法 3.监听值的变化调用动画执行方法 三、代码 1.实现方式比较简单&#xff0c;目前是vue3的写法&#xff0c;vue2只需要稍微改动即可 <template><view class"layout_progre…

高级分布式系统调试:调试的科学与 USE 方法实战

高级分布式系统调试:调试的科学与 USE 方法实战 前言:从“救火”到“探案” 当一个复杂的分布式系统出现“灰色故障”——例如“服务有时会变慢”、“偶尔出现超时错误”——我们该从何处着手?随机地查看 Grafana 仪表盘,或者漫无目的地 tail -f 日志,往往效率低下,甚至…

栈算法之【有效括号】

目录 LeetCode-20题 LeetCode-20题 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每…

大模型——Data Agent:超越 BI 与 AI 的边界

Data Agent:超越 BI 与 AI 的边界 1. 数据工具的演进路径 在数据分析领域,技术工具经历了多个阶段的演进。这些演进不仅反映了技术的进步,也体现了用户需求和使用场景的变化。 Excel 时代:告别手工作业,陷入“表格泥潭“,早期数据分析依赖 Excel,实现基础数据记录、计…

数据空间技术在智慧水库管理平台中的赋能

数据空间技术在智慧水库管理平台中的赋能&#xff1a;设备到应用的数据传输优化 数据空间技术为智慧水库管理平台提供了革命性的数据传输、处理和安全保障能力。以下是数据空间技术在设备到应用数据传输过程中的全面赋能方案&#xff1a; 数据空间赋能架构设计 #mermaid-svg-R2…

SpringBoot学习路径二--Spring Boot自动配置原理深度解析

SpringBoot最核心的功能就是自动装配&#xff0c;Starter作为SpringBoot的核心功能之一&#xff0c;基于自动配置代码提供了自动配置模块及依赖的能力&#xff0c;让软件集成变得简单、易用。使用SpringBoot时&#xff0c;我们只需引I人对应的Starter&#xff0c;SpringBoot启动…

音视频中一些常见的知识点

1. GCC是如何进行带宽评估的 GCC(Google Congestion Control)是一种专为实时音视频传输设计的拥塞控制算法,它主要通过发送端和接收端的协同工作来进行带宽评估。具体过程如下: 接收端处理 计算延迟梯度:接收端通过统计数据包到达时间的变化,即RTT(往返时间)波动,来计…

STM32硬件I2C的注意事项

文章目录软件模拟I2C硬件的实现方式最近在研究I2C的屏幕使用。有两种使用方式&#xff0c;软件模拟I2C、硬件HAL使用I2C。软件模拟I2C 发送数据是通过设置引脚的高低电平实现的。 /*引脚配置*/ #define OLED_W_SCL(x) GPIO_WriteBit(GPIOB, GPIO_Pin_6, (BitAction)(x)) #de…

Python捕获异常

Python捕获异常主要通过try-except语句实现&#xff0c;以下是核心语法和使用场景&#xff1a;一、基础捕获结构try: # 可能引发异常的代码 result 10 / 0 except ZeroDivisionError: # 处理特定异常 print("除数不能为零") 二、捕获多种异常try: # 可能引发…