DJ3-4 传输层(第四节课)
目录
一、TCP 概述
二、TCP 报文段的首部字段格式
三、TCP 往返时延的估计和超时
1. 估计往返时间
2. RTT 估计例子
3. 估计往返时间的偏差
4. 设置重传超时间隔
一、TCP 概述

全双工服务:允许在同一时间同一连接上,数据能够双向传输。注意:TCP 可从缓存中取出并放入报文段中的数据数量受限于最大报文段长度(maximum segment size, MSS)
点到点:一个发送者,一个接收者;可靠按序的字节流。
面向连接:在数据交换前握手(交换控制信息),初始化发送方和接收方的状态。
没有 “信息边界”:假设我们需要发三个数据包,TCP 可能会因受限于 MSS 而把这三个包截断并组合后再发出。而 UDP 不会这样做,首先 UDP 会限制分组的大小从而使其适合发送,其次分组之间是相互独立的。因此,在 UDP 传输中不会出现把数据包截断的情况。
流量控制:使发送方不会淹没接收方。
TCP 拥塞和流量控制:
- 设置窗口大小
- 设置收发缓冲区
二、TCP 报文段的首部字段格式
TCP 报文段的构成:
- 首部字段
- 一个数据字段,包含了一块应用数据
MSS 限制了报文段数据字段的最大长度。


1. 源端口号和目的端口号
用于多路复用/分解来自或送到上层应用的数据。注意:发送时是多路复用,接收时是多路分解。
2. 序号和确认号
1)序号
序号 = 该报文段的第一个字节在字节流中的位置编号
一条 TCP 连接的双方均可随机地选择初始序号。
TCP 采用的是可靠按序的字节流:序号是建立在传送的字节流之上,而不是建立在传送的报文段的序列之上。换句话说,TCP 是以字节为单位来编号的,而不是以报文段为单位来编号。

2)确认号
主机 A 填充进报文段的确认号是主机 A 期望从主机 B 收到的下一字节的序号。换句话说,就是期望从主机 B 收到的下一报文段的序号。

由于每次都传输的是一个字节的数据,因此序号每次只加一。
3)累积确认
TCP 只确认字节流中至第一个丢失字节为止的字节。
主机 A 接收到来自主机 B 的包含字节 0~535 的报文段、字节 900~1000 的报文段,还没有接收到来自主机 B 的包含字节 536~899 的报文段。因此,主机 A 将在下一个发送给主机 B 的报文段中,把确认号字段设置为 536 。
3. 数据偏移/首部长度
该字段指示了以 32bit 为单位(即以 4 字节为单位)的 TCP 首部长度,即 TCP 报文段数据字段的起始处距离 TCP 报文段的起始处有多远。
4. 保留字段
占 6 位,保留为今后使用,但目前应置为 0。
5. 标志字段

3)紧急 URG(URGent)
当 URG=1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。紧急数据放在该报文段数据字段的最前面。
4)确认 ACK(ACKnowledgment)
只有当 ACK=1 时确认号字段的内容才有效;当 ACK=0 时,确认号字段的内容无效。
6)复位 RST(ReSeT)
当 RST=1 时,表明 TCP 连接中出现严重差错(如主机崩溃或其它原因),必须释放连接,然后再重新建立运输连接。
7)同步 SYN(SYNchronize)
当 SYN=1 时,表示这是一个连接请求或连接接受报文。
8)终止 FIN(FINish)
用来释放一个连接。FIN=1 表明此报文段的发送方的数据已发送完毕,并要求释放运输连接。

6. 窗口字段
该字段用于流量控制。占 16 位,是让对方设置发送窗口的依据,单位为字节。
7. 检验和
占16 位,在计算检验和时,要在 TCP 报文段前加上 12 字节的伪首部。
- 伪首部
- 首部字段
- 数据字段
8. 紧急数据指针
占 16 位,指出在该报文段中紧急数据共有多少个字节,紧急数据放在该报文段数据字段的最前面。
9. 填充字段
该字段用于使整个首部长度是 4 字节的整数倍。
三、TCP 往返时延的估计和超时
Q:如何设置 TCP 的超时值?
A:显然需要比 RTT 长,但 RTT 是动态变化的,若时间
- 太短:导致不成熟的超时和不必要的重传
- 太长:导致对报文段丢失的响应慢
Q:需要设置几个定时器?
1. 估计往返时间
SampleRTT(样本RTT):测量从报文段发出到收到该报文段的确认信息的时间。
- TCP 不会为重传的报文段计算 SampleRTT
- TCP 仅在某个时刻为某报文段做 SampleRTT 测量,而非每一个
SampleRTT 是变化的,因此需要一个 SampleRTT 的均值,即 EstimatedRTT(均值RTT)
对收到的 SampleRTT 根据以下公式进行均值处理:
EstimatedRTT = (1 - α) * EstimatedRTT + α * SampleRTT
以编程的思想来理解该公式:即每次按公式来更新 EstimatedRTT 的值。
上述均值计算被称为 “指数加权移动平均”,RFC 推荐的 α 取值是 α=0.125 。
2. RTT 估计例子
由图可知,通过计算得到的 EstimatedRTT,我们能够保证有一半的报文段避免不成熟的超时。但是,我们还想要更多的紫线上方的报文段能够避免不成熟的超时,因此引入了 “安全余量”。

3. 估计往返时间的偏差
DevRTT(偏差RTT):用于估算 SampleRTT 一般会偏离 EstimatedRTT 的程度。
与前面类似,SampleRTT-EstimatedRTT 是变化的,因此需要一个 SampleRTT-EstimatedRTT 的均值,即 DevRTT(偏差RTT)
对收到的 SampleRTT-EstimatedRTT 根据以下公式进行均值处理:
DevRTT = (1 - β) * DevRTT + β * |SampleRTT - EstimatedRTT|
RFC 推荐的 β 取值是 α=0.25 。
4. 设置重传超时间隔
根据前面的分析可知,超时间隔应该等于 EstimtedRTT 加上 “安全余量” DevRTT,从而避免不成熟的超时。同时。若 EstimatedRTT 波动较大,则需要加上更大的 “安全余量”。
最终超时间隔的公式为:
TimeoutInterval = EstimatedRTT + 4 * DevRTT
实际应用:
#init
TimeoutInterval = 1
EstimatedRTT = SampleRTT
DevRTT = SampleRTT/2#update
TimeoutInterval = EstimatedRTT + max(G, 4*DevRTT) #G是用户设置的时间粒度
DevRTT = (1 - β) * DevRTT + β * |SampleRTT - EstimatedRTT|
EstimatedRTT = (1 - α) * EstimatedRTT + α * SampleRTT
每次先更新 DevRTT 再更新 EstimatedRTT,否则 DevRTT 使用的就是不是上一次的 EstimatedRTT 了。
相关文章:
DJ3-4 传输层(第四节课)
目录 一、TCP 概述 二、TCP 报文段的首部字段格式 三、TCP 往返时延的估计和超时 1. 估计往返时间 2. RTT 估计例子 3. 估计往返时间的偏差 4. 设置重传超时间隔 一、TCP 概述 全双工服务:允许在同一时间同一连接上,数据能够双向传输。注意&#…...
2023爱分析·商业智能应用解决方案市场厂商评估报告:数聚股份
目录 1. 研究范围定义 2. 商业智能应用解决方案市场分析 3. 厂商评估:数聚股份 4. 入选证书 1. 研究范围定义 商业智能(BI)是在实现数据集成和统一管理的基础上,利用数据存储和处理、分析与展示等技术,满足企…...
Kotlin方法执行顺序
方法的执行顺序 主构造函数init代码块次构造函数...
Ubuntu系统配置SonarQube + cppcheck + Jenkins
SonarQube1. postgresql安装及配置1.1 安装postgresql1.2 创建sonarqube用户1.3 设置数据库2. 安装sonarqube2.1 设置sonarqube2.2 修改sonarqube目录权限2.3 sonar.properties2.4 设置systemd管理sonarqube2.5 web3. 配置sonarscanner3.1 下载3.2 配置4. 配置cppcheck4.1 下载…...
Spring @Valid 不生效 问题记录
校验的简单使用: 在Spring中,我们可以使用Valid注解对实体进行校验。在Controller的方法参数中添加Valid注解,然后在实体类的属性上添加校验注解,例如NotNull、Size等。例如: RestController public class UserContr…...
五步教你如何注册一个公司网站
在今天的数字化时代,每个公司都需要一个强大的线上存在感。注册一个公司网站是实现这一目标的第一步。但是,对于许多公司而言,这个过程可能有些困难。因此,在本文中,我将介绍一个五步计划,让您轻松注册一个…...
CSS绘制气泡对话框样式(有边框)
1、效果图 2、难点和思路 难点:上面那个带边框的小三角不好实现 思路:画两个不同大小的div,使其基本重叠(两个大小不同,不完全重叠,让红色的露出一点边边),让白色div放到最上层&…...
12款 Macmini A1347 跑 Stable Diffusion,20多分钟一张图
设备 2012款 Macmini A1347 12款 mini A1347 跑 Stable Diffusion 要20多分钟一张图 来欣赏一下20分钟画出来的图片 a black and white cat 环境:...
流量控制和拥塞控制的原理和区别
文章目录先介绍下重传机制和滑动窗口超时重传快速重传SACK方法Duplicate SACK滑动窗口发送方缓存窗口接收方缓存窗口流量控制小结拥塞控制慢开始算法拥塞避免算法快重传快恢复先介绍下重传机制和滑动窗口 超时重传 重传机制的其中一个方式,就是发送数据时…...
金融机构断卡行动中外部数据
“断卡行动”,近几年逐渐走入大众视野,是国家在从根源上整治网络及金融犯罪层面的重大举措。相信很多朋友在日常生活中已经有所体会了,比如我们在办理电话卡及银行卡的时候要经过很多审核机制,同时发卡后还会限制卡片的一些转账等…...
携程总监的单元测试是怎么样写的?
大家都知道,开发软件的时候为代码编写单元测试是很好的。但实际上,光有测试还不够,还要编写好的测试,这同样重要。 要做到这一点,考虑遵循一些固执的原则,对测试代码给予一些关爱: 1. 保持测试…...
算法每日一题:P2089 烤鸡 -DFS练习
😚一个不甘平凡的普通人,日更算法学习和打卡,期待您的关注和认可,陪您一起学习打卡!!!😘😘😘 🤗专栏:每日算法学习 💬个人…...
Spring中的循环依赖是什么?如何解决它?
循环依赖是指两个或多个Bean之间相互依赖,导致它们无法被正确地初始化。在Spring中,当两个或多个Bean之间存在循环依赖时,Spring容器无法决定哪个Bean应该先初始化,因此会抛出BeanCurrentlyInCreationException异常,从…...
不良事件报告系统源码,PHP医院安全(不良)事件报告系统源码,在大型医院稳定运行多年
PHP医院安全(不良)事件报告系统源码,不良事件系统源码,有演示,在大型医院稳定运行多年。 系统技术说明 技术架构:前后端分离,仓储模式 开发语言:PHP 开发工具:VSco…...
MySQL 查询常用操作(3)——排序 order by
MySQL中常用的查询操作,首先是能直接从表中直接取出数据,接着能对查询结果做一些简单的处理,比如去重等,然后是根据条件查询数据,包括精准查询、模糊查询以及按照数据的某个范围或者指定多个指标进行查询,值…...
Android Jetpack 从使用到源码深耕【数据库注解Room 从实践到原理 】(二)
上文,我们通过一个简单的sqlite应用实例,引入了Room,知道了Room使用的便捷和好处。然后用Room的方式,重新实现了应用实例中的场景,在这个过程中,我们结合自己已有的知识体系,从使用代码入手,对Room的实现原理,进行了猜想和简单的验证。 Room实现原理,是否真如我们猜想…...
传统企业如何实现数字化转型?
近年来,围绕新产品新模式新业态,国家重点部署了7个方向,包括数字化管理、平台化设计、智能化生产、网络化协同、个性化定制、服务化延伸、新型智能产品等,均为市场价值大、发展潜力深、示范效应强的代表性、引领性领域。 因此&am…...
Linux修改密码报错Authentication token manipulation error的终极解决方法
文章目录报错说明解决思路流程排查特殊权限有没有上锁查看根目录和关闭selinux/etc/pam.d/passwd文件/etc/pam.d/system-auth文件终极办法,手动定义密码passwd: Have exhausted maximum number of retries for servic、ssh用普通用户登录输入密码正确但是登录时却提…...
ROS实践06 自定义消息类型
文章目录运行环境:思路:1.1 定义.msg文件1)功能包下新建 msg 目录,添加文件 Person.msg2)修改package.xml3)修改CMakeLists.txt2.1 自定义消息调用(C)1)编译后修改includePath2)发布方实现2.1修改CMakeLists.txt2.3运行…...
《剑指offer》——从尾到头打印链表
首先,拿到题之后,我们还是先从题目入手,只有掌握题干的意思,才能进行接下来的解题操作。 示例1 输入 : {1,2,3} 返回值:[3,2,1] 示例2 输入 :{67,0,24,58} 返回值:[58,24,0,67] 解题方法…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
