TCP 传输、重传及工作原理

news2024/12/24 8:36:10

IP和MAC层的内存受限,用于发送数据包。因此,它们都会限制消息的长度。

这一限制要求TCP在提供给IP层之前,将可变长度的字节打包成多个段。每个段的长度应该是合适的。

下面是一个简单的图示,展示了段是如何通过互联网发送的。

07236446bc8a5a6622500bb68db653f0.png
1*IRdfZ4LKKpQ-KRz_Y3QR7g.png

客户端的HTTP层正在向目标服务器发送一个18字节的流。

当字节16-18尚未到达TCP层时,字节12-15通过了它。TCP将它们打包成一个段,并附加了一个TCP头,标记在黄色区域。

接下来,该段被IP层封装,通过互联网发送,然后到达服务器。

假设TCP段的长度超过了底层支持的长度。在这种情况下,IP层将负责将大段拆分成多个片段。这是一个昂贵的过程,因此我们希望避免这种情况。

但是TCP如何确定长度呢?这取决于最大段大小(MSS)

理想情况下,我们希望选择一个最大化数据量、最小化头部比例并避免在IP层进一步拆分的MSS。

默认情况下,MSS为536字节。这个数字是从哪里来的呢?

•IP的默认最大传输单元(MTU)为576字节。超过此大小的任何内容都将被拆分。•IP头占用20字节。•TCP头占用20字节。

因此,536 = 576 - 20 - 20

你可以看出MSS仅表示数据体的大小,不包括头部。

2af5e8933a1743657bb92b3ef64bc177.png
1*creWLybyfKDBJgTzQP1kDg.png

MSS是在TCP三次握手期间进行协商的。以下是TCP段头的格式。MSS位于TCP选项中。

993fc958fe5621a41ea9fe76c6595107.png
1*pQpFRUuyzaG4JOm93Wg5Zw.png

在SYN消息中,客户端建议MSS为1460字节。这被称为发送方最大段大小(SMSS)

a1a7242823b6f964588e0d9f2b381d4f.png
1*dG1cCAjKY0v8Xfx2SeBcFA.png

在服务器的响应中,它建议段的大小不超过1400字节。由于大小来自服务器,因此被称为接收方最大段大小(RMSS)

TCP 重传

为了确保传输的可靠性,TCP需要完成两个功能:

1.当接收到消息时,接收方向发送方发送确认(ACK)。2.当消息丢失时,发送方重新传输消息。

让我们从一个简单的模型开始。

63964b3afe6263541b98f61a4de0c9f7.png
1*bvkdWnFF55OCLfstaE_GEw.png

1.首先,发送方在发送消息后维护一个计时器。2.在时间过期之前收到第一个ACK。然后,计时器被重置以等待第二条消息,然后重复此过程。3.第二个计时器过期,没有收到ACK。重传开始。

这种简单的设计是直接的,但效率较低,因为每个消息都需要等待前一个ACK返回。

让我们改进一下。

2a9479e76087361ae45742a68f4f2683.png
1*suv0nuvpmgUWaTd6riMUsQ.png

通过为每条消息分配一个ID,我们可以迅速发送多条消息。相同的ID与相应的计时器和ACK消息相链接。

如果一条消息丢失,例如#3,发送方将重新传输它。

在TCP中,“消息ID”是什么?它是序列号

8913f8d5a249b86a78b64796d5568808.png
1*EbU2NjtCGn8z4gVCJr2Tyg.png

这里是一个消息的示例。

•此TCP段的长度为647字节。•在此消息之前,发送方已经发送了1461字节。•发送方将从2108开始发送更多字节。

序列号最多可以达到2³²。然后它会重新开始。

这带来了一个问题。

3a8ff5b77ef2dfa3858f3a7a5b5984ae.png
1*RLp9kmWuRzlgY-NQs2F4Hw.png

想象一下,我们只有4个序列号,每次发送1字节。

1.在过程中,第2个字节(标记为#2)丢失。根据设计,#2将在以后的时间重新传输。2.我们继续发送更多字节,直到序列号从#1开始。此时,重新传输的#2被发送。3.接收方不知道这是旧的#2还是新的#2。这可能会搞乱事情。

为了解决这个问题,TCP选项中引入了时间戳。

a7b181f952816720a6294641b7667121.png
1*jSrwaU0L-2EHyyIxzb2w_A.png

时间戳可以消除具有相同序列号的段之间的歧义。

让我们将时间戳附加到每个段上。

4f8e50df6b443214e8fd06b51696c1cc.png


接收方读取时间戳B并将其与先前的时间戳E进行比较,以确认这是一次重传。否则,时间戳应该大于E。

TCP快速重传

TCP具有快速重传功能 - 在计时器到期之前重新传输丢失的段。

为了允许快速重传,我们需要为发送方和接收方设置一些规则。

规则1:作为接收方,它应始终发送它期望接收的序列号。

例如,当接收方接收到段1时,它将响应ACK2,表示它期望在即将到来的消息中接收段2。

规则2:作为发送方,它应忽略计时器并在接收到3个重复的乱序ACK后立即开始重新传输丢失的段。

95829a6e3032fa44f43bda7c8d23959a.png
1*nbAE5D9yMkUxvxxR4PJ27g.png

上图显示了快速重传的示例。

1.在第一个2个段的传输之后,段3丢失。2.在接收到段4时,接收方根据规则发送ACK3,而不是ACK4。这是第一个重复的乱序ACK。3.再次,在接收到段5时,服务器仍然期望重新传输段3。因此,第二个重复的ACK3被发送。4.然后,第三个重复的ACK3被发送。5.在这一刻,发送方进入快速重传并重新传输段3。6.在接收到丢失的段后,接收方的ACK按顺序返回,并期望在即将到来的消息中接收段7。

但是存在一个问题 - 发送方不知道段5和段6是否安全到达,直到快速重传完成。如果两个段都丢失,那么后续的重传将需要更长的时间。

接收方可以通过选择性确认(SACK)功能与发送方共享信息,以便促进重传过程。

TCP选择性确认

f11ef3648c04eaf679c3e87709b8f3d6.png
1*GhT0tOhF3YGrgQOIY56Esw.png

SACK位于TCP选项中。

在SACK中,我们可以指定已经接收到的数据的范围,超过确认号。

cf10b52c5e3aecd24c1971572a985915.png
1*LujjJhnNyITz1dyL-CFfbA.png

这是SACK的示例,表示已接收的数据范围从2872到3393。

有了它,发送方知道不需要重新传输这些边界之间的任何字节。

此外,发送方还可以找出其他丢失的段并尽快进行重传。

总结

•最大段大小(MSS)定义了TCP段的长度。•计时器帮助TCP重新传输丢失的段。•在收到3个重复的ACK后,快速重传在计时器到期之前开始。•选择性确认(SACK)提供有关已接收的乱序字节的信息,以促进快速重传过程。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1110055.html

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

相关文章

淘宝店铺所有商品数据接口及店铺商品数据分析

获取淘宝店铺所有商品数据的接口是淘宝开放平台提供的接口,通过该接口可以获取店铺所有商品数据。 通过淘宝开放平台接口获取店铺所有商品数据的方法如下: 在开放平台注册成为开发者并创建一个应用,获取到所需的 App Key 和 App Secret 等信…

华为数通方向HCIP-DataCom H12-831题库(单选题:301-310)

第301题 关于配置防火墙安全区域的安全级别的描述,错误的是 A、同一系统中,两个安全区域不允许配置相同的安全级别 B、只能为自定义的安全区域设定安全级别 C、安全级别一旦设定不允许更改 D、新建的安全区域,系统默认其安全级别为1 答案:D 解析: 新创建的安全区域缺省未…

UE4/5:通过Blender制作BlendShape导入【UE4/5曲线、变形目标,blender形态键】

UE4/5里面,我们经常可以在一些骨骼模型上面看到相关的曲线,如Metahuman里面就是通过这个曲线来改变人物的脸部表情。 而这里笔者将教导如何去制作这种曲线。 这种曲线都是存在于骨骼模型上的,所以我们要么直接制作骨骼模型导入ue&#xff0…

【SOPHON】算能盒子SE-16的配套x86交叉编译环境搭建

目录 工具包简介配置盒子内部的开发环境配置盒子外部的开发环境安装tpu-mlir安装libsophon 环境 安装sophon-ffmpeg和sophon-opencv环境sophon-sail_x.y.z.tar.gz安装 盒子默认登录:admin/admin SophonSDK既兼容第三代BM1684芯片,也支持第四代BM1684X芯片…

MIT6.5830 Lab0-Go tutorial实验记录(四)

MIT6.5830 Lab0-Go tutorial实验记录(四) – WhiteNights Site Lab0的最后一步–对.csv文件进行查询。 实验步骤 更改handlers.go 那么首先修改下handlers中的方法,毕竟现在不是从sqlite中查询数据了。 // TODO: some code goes here // Ge…

rabbitmq发送json格式 utf8编码数据

参考文章:Spring-Cloud RabbitMQ 用法 - 发送json对象 - 简书 生产者: 消费者:

虚拟机来安装Linux的优势

笔者认为,通过虚拟机软件学习是初学者学习 Linux 的最佳方式。在与部分读者的交流中,笔者发现,很多初学者都认为,学习 Linux 就必须将自己的电脑装成 Linux 系统或者必须要有真正的服务器设备。而实际上,这是一些机构、…

Spring Boot如何优雅实现动态灵活可配置的高性能数据脱敏功能

1.背景 在当下互联网高速发展的时代下,涉及到用户的隐私数据安全越发重要,一旦泄露将造成不可估量的后果。所以现在的业务系统开发中都会对用户隐私数据加密之后存储落库,同时还要求后端返回数据给前台之前进行数据脱敏。所谓脱敏处理其实就…

华为数通方向HCIP-DataCom H12-831题库(多选题:1-20)

第01题 如图所示,路由器所有的接口开启OSPF,图中标识的ip地址为设备的Loopback0接口的IP地址,R1、R2,R3的Loopback0通告在区域1,R4的Loopback0通告在区域0、R5的Lopback0通告在区域2,下列哪些IP地址之间可以相互Ping通? A、10.0.3.3和10.0.5.5 B、10.0.4.4和10.0.2.2 …

electron学习笔记

electron:大前端背景下,用node.js做桌面端app的工具 1、安装:npm i electron 实际上是chromium Node.js 2、创建一个窗口 3、主进程(操作硬件等,commonJS)与渲染进程(渲染页面,E…

Cdiscount、亚马逊新品不开单怎么办 ?测评自养号关键之处及搭建技巧揭秘

一、Listing如何优化? 一个产品要想有销量,Listing优化必须得做好,这是形成转化产生订单的基础。 有些卖家误以为“反复修改了N次”就叫做“优化”,这绝对是误解 想要做好Listing优化,需要知道优化的基本标准,同时…

光伏电站绝缘阻抗异常排查方法

安科瑞 崔丽洁 概述 01 光伏发电是依托电力电子技术,利用太阳光照将太阳能转化为电能的系统。光伏发电不需要使用化石燃料,减少了发电时产生的污染,并且减少了能源消耗。光伏发电依托政策扶持,快速在国内普及。光伏发电与传统火电发电原理不同…

Excel文件带有密码的只读模式,如何设置?

Excel带有密码的除了打开密码和工作表保护以外,其实还有一种可以设置密码的方法,今天给大家分享如何设置带有密码的只读模式。 打开excel文件,将文件进行【另存为】设置,然后停留在保存路径的界面中,我们点击下面的工…

每日汇评:黄金的进一步上行取决于美联储

金价在1950美元附近徘徊,此前从逾两个月高位小幅回落; 由于中东紧张局势支撑金价,美元欢欣鼓舞,美债收益率上扬; 在美联储主席鲍威尔发表讲话前,金价守住了关键的200日移动均线上方; 金价已进入…

【力扣每日一题】2023.10.19 同积元组

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 题目比较简洁,给我们一个元素各不相同的数组,要我们找出该数组里能够组成 a*bc*d 的组合数目。 比较直观的做法是我们直接暴…

2023年中国半导体过滤器产业链、市场规模及发展趋势分析[图]

半导体过滤器的作用主要是对空气中的微粒进行过滤,包括清除空气中的细菌、病毒、霉菌孢子、花粉、微粒等物质,半导体过滤器相比传统过滤器,具有更高的过滤效率和更长的使用寿命。其核心元件是由金属氧化物和碳化硅等半导体材料制成的过滤芯片…

总结 STM32 常见的一百多个知识点

1、AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速设备 2、Stm32f10x.h相当于reg52.h(里面有基本的位操作定义),另一个为stm32f10x_conf.h专门控…

虹科Pico十月活动 | 精彩丰富的汽车示波器培训与直播活动等你参加!

线下培训:虹科&TG学院:上海站技术培训 精彩回顾 上海站技术交流会成功举办 10月5、6日,虹科Pico汽车示波器与Tech Gear学院联合举办的汽车示波器技术交流会,在上海成功举办。本次技术交流会在上海欣车汇的车间进行&#xff0c…

智慧工地云平台,微服务架构,java源码

智慧工地系统源码,包含:视频监控、劳务实名制、环境监测、车辆管理、机械设备管理、可视化大屏、进度管理、项目信息管理、组织架构权限配置等功能。技术架构:javaVUEMySQL微服务 聚焦施工现场岗位一线,围绕“人、机、料、法、环”…

2023年【建筑架子工(建筑特殊工种)】考试内容及建筑架子工(建筑特殊工种)找解析

题库来源:安全生产模拟考试一点通公众号小程序 建筑架子工(建筑特殊工种)考试内容是安全生产模拟考试一点通生成的,建筑架子工(建筑特殊工种)证模拟考试题库是根据建筑架子工(建筑特殊工种)最新版教材汇编出建筑架子工(建筑特殊工种)仿真模拟考试。2023…