【网络】TCP常考知识点详解
TCP报文结构
TCP报文由**首部(Header)和数据(Data)**两部分组成。首部包括固定部分(20字节)和可选选项(最多40字节),总长度最大为60字节。
1. 首部固定部分
-
源端口(16位)和目的端口(16位)
-
标识发送和接收的应用程序(如HTTP默认端口80)。
-
-
序列号(32位)
-
表示当前报文段数据部分的第一个字节的序号,确保数据按序传输。
-
-
确认号(32位)
-
期望收到的下一个字节的序号,表示接收方已正确接收之前的所有数据。
-
-
数据偏移(4位)
-
指示首部长度(以4字节为单位)。例如,值为
5表示首部长度20字节。
-
-
保留字段(6位)
-
未使用,必须置0。
-
-
控制位(6位)
-
URG:紧急指针有效,优先处理紧急数据。
-
ACK:确认号有效(连接建立后通常为1)。
-
PSH:接收方应立即将数据推送给应用层。
-
RST:强制重置异常连接。
-
SYN:建立连接时同步序列号。
-
FIN:正常关闭连接。
-
-
窗口大小(16位)
-
接收方的可用缓冲区大小,用于流量控制(滑动窗口机制)。
-
-
校验和(16位)
-
计算包括伪首部(源/目的IP、协议类型、TCP长度)、TCP首部和数据,确保数据完整性。
-
-
紧急指针(16位)
-
当URG=1时有效,指向紧急数据的结束位置。
-
2. 选项部分(可变长度,最多40字节)
-
MSS(最大报文段长度):在三次握手时协商,避免IP分片。
-
窗口扩大因子:扩展窗口大小(原16位窗口最大为65535)。
-
时间戳:计算往返时间(RTT)和防止序列号回绕(PAWS机制)。
-
SACK(选择性确认):允许接收方报告非连续接收的数据块,提升重传效率。
3. 填充字段
-
确保首部长度是4字节的倍数。
4. 数据部分
-
上层协议(如HTTP、FTP)传递的数据,长度由MSS和窗口大小共同决定。
TCP的特点
- 面向连接:TCP发送数据前需要通过三次握手建立全双工通信,结束数据发送后通过四次挥手关闭连接
- 可靠性:TCP通过确认和重传、快速重传、拥塞控制、流量控制、有序性、超时重传等机制确保数据可靠传输
- 确认和重传:接收方收到数据后会发送确认ACK给发送方,若发送方经过超时时间未收到ACK,则会重传
- 流量控制:接收方会通过滑动窗口(循环数组,用三个指针给他分区)的机制告诉发送方可接收数据的大小,避免发送方发送大量数据拥塞在接收方的缓冲区
- 拥塞控制:发送方根据网络的拥塞情况动态调整发送速率,避免造成网络拥塞
- 有序性:接收方根据TCP头部的序列号重新对数据进行排序
- 头部开销大:TCP报文头部(源/目的端口+**序列号/确认号**+首部长度+**标志位(SYN/ACK/FIN/RST)**+**窗口大小(RWND)**+校验和),增加传输开销
- 源/目的端口 标识了应用进程;序列号和确认号可以进行确认和重传,同时保证数据有序;
- 标志位(指示TCP会话期间的特定状态):**SYN-同步,ACK-确认数据包接收,FIN-结束**,RST-重置TCP连接,URG-紧急数据,PSH-立即推送数据,
- 全双工通信:TCP协议允许通信双方同时进行数据的发送和接收
TCP超时重传
- RTT(Round-Trip Time)往返时延:数据包在网络中的往返时延(网络波动造成RTT**动态变化**)
- RTO(Retransmission Timeout)超时重传时间:RTO应略大于RTT。太大会降低网络的传输效率;小于RTT则会造成不必要的超时重传,增大网络负荷
- 发送方在RTO内未收到ACK,说明网络严重拥塞,发送方重置CWND(拥塞窗口)进行**慢启动**,逐步增加发送量,降低网络过载风险
- 拥塞窗口CWND :发送方维护的变量,初始值默认为1 MSS(1460 Byte)
- 慢启动阈值_ssthresh:窗口增长模式的切换点;初始值较高(如接收方通告窗口大小)发生拥塞时动态调整
- 慢启动算法流程:
- 初始化阶段:TCP连接建立后/超时重传后,set CWND= 1 MSS,ssthresh初始为较大值
- 指数增长阶段:每收到一个和ack,cwnd增加1MSS(每个RTT内,CWND翻倍):
- 假设RTT固定100ms,初始CWND= 1 MSS
- 第0ms,发送一个报文 cwnd =1
- 第100ms:收到ack,cwnd=2(第100-200ms 发送2个报文)
- 第200ms:收到2个ack,每个ack触发cwnd+1, cwnd=4(第200-300ms 发送四个报文)
- 第300ms:收到4个ack,cwnd=8;
- 切换至**拥塞避免**:<u>*cwnd >= ssthresh*</u> 时,结束慢启动进入**线性增长**的拥塞避免阶段(每RTT,CWND增长1 MSS)
- 拥塞处理**:
- 超时丢包:严重拥塞,重置ssthresh=MAX(CWND/2,2 MSS),CWND = 1 MSS,重新***慢启动***
- 快速重传/恢复:(重复ACK触发)调整ssthresh= CWND/2 ,CWND=ssthresh+3(3个重复的ACK),直接进入***拥塞避免***

TCP快速重传
发送方连续收到**三个重复ACK**(RFC经验)时,说明网络单包丢失,发送方CWND减半,进行快速重传

TCP拥塞控制与流量控制


相关文章:
【网络】TCP常考知识点详解
TCP报文结构 TCP报文由**首部(Header)和数据(Data)**两部分组成。首部包括固定部分(20字节)和可选选项(最多40字节),总长度最大为60字节。 1. 首部固定部分 源端口&…...
LeetCode1137 第N个泰波那契数
泰波那契数列求解:从递归到迭代的优化之路 在算法的世界里,数列问题常常是我们锻炼思维、提升编程能力的重要途径。今天,让我们一同深入探讨泰波那契数列这一有趣的话题。 泰波那契数列的定义 泰波那契序列 Tn 有着独特的定义方式…...
六十天前端强化训练之第十四天之深入理解JavaScript异步编程
欢迎来到编程星辰海的博客讲解 目录 一、异步编程的本质与必要性 1.1 单线程的JavaScript运行时 1.2 阻塞与非阻塞的微观区别 1.3 异步操作的性能代价 二、事件循环机制深度解析 2.1 浏览器环境的事件循环架构 核心组件详解: 2.2 执行顺序实战分析 2.3 Nod…...
利用EasyCVR平台打造化工园区视频+AI智能化监控管理系统
化工园区作为化工产业的重要聚集地,其安全问题一直是社会关注的焦点。传统的人工监控方式效率低下且容易出现疏漏,已经难以满足日益增长的安全管理需求。 基于EasyCVR视频汇聚平台构建的化工园区视频AI智能化应用方案,能够有效解决这些问题&…...
【VUE2】第三期——样式冲突、组件通信、异步更新
目录 1 scoped解决样式冲突 2 data写法 3 组件通信 3.1 父子关系 3.1.1 父向子传值 props 3.1.2 子向父传值 $emit 3.2 非父子关系 3.2.1 event bus 事件总线 3.2.2 跨层级共享数据 provide&inject 4 props 4.1 介绍 4.2 props校验完整写法 5 v-model原理 …...
深度学习分类回归(衣帽数据集)
一、步骤 1 加载数据集fashion_minst 2 搭建class NeuralNetwork模型 3 设置损失函数,优化器 4 编写评估函数 5 编写训练函数 6 开始训练 7 绘制损失,准确率曲线 二、代码 导包,打印版本号: import matplotlib as mpl im…...
深入解析ECDSA与RSA公钥算法:原理、对比及AWS最佳实践
一、公钥加密算法概述 在HTTPS通信和数字证书领域,ECDSA(椭圆曲线数字签名算法)和RSA(Rivest-Shamir-Adleman)是最主流的两种非对称加密算法。它们共同构成了现代网络安全的基础,但设计理念和技术实现存在显著差异。 © ivwdcwso (ID: u012172506) 二、RSA算法详解…...
preloaded-classes裁剪
系统预加载了哪些class类?system/etc/preloaded-classes 修改源代码? frameworks\base\config\preloaded-classes 默认位置,如果改了不生效,可能有其它模块的mk文件指定了preloaded-classes覆盖了framework模块,例如…...
在Linux中开发OpenGL——检查开发环境对OpenGL ES的支持
由于移动端GPU规模有限,厂商并没有实现完整的OpenGL特性,而是实现了它的子集——OpenGL ES。因此如果需要开发的程序要支持移动端平台,最好使用OpenGL ES开发。 1、 下载支持库、OpenGL ES Demo 1.1、下载PowerVRSDK支持库作为准备ÿ…...
HJ C++11 Day2
Initializer Lists 对于一个类P class P{P(int a, int b){cout << "P(int, int), a" << a << ", b " << b << endl;}P(initializer_list<int> initlist){cout << "P(initializer_list<int>), val…...
基于Spring Boot的学院商铺管理系统的设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
os-copilot安装和使用体验测评
简介: OS Copilot是阿里云基于大模型构建的Linux系统智能助手,支持自然语言问答、命令执行和系统运维调优。本文介绍其产品优势、功能及使用方法,并分享个人开发者在云服务器资源管理中的实际应用体验。通过-t/-f/管道功能,OS Cop…...
Geo3D建筑材质切换+屋顶纹理
一、简介 基于Threejs开发封装建筑渲染管线,利用简单二维建筑矢量面轮廓程序化生成3D建筑,支持材质一键切换,支持多样化建筑墙面材质和屋顶材质,支持建筑透明,支持地形高程适配,支持按空间范围裁剪挖洞等。…...
工程化与框架系列(24)--跨平台解决方案
跨平台解决方案 🌐 引言 随着移动互联网的发展,跨平台开发已成为前端开发的重要趋势。本文将深入探讨前端跨平台开发的各种解决方案,包括响应式设计、混合开发、原生开发等方案,帮助开发者选择合适的跨平台策略。 跨平台开发概…...
快手,得物,三七互娱,科锐国际,作业帮等25春招内推
得物,三七互娱,快手,作业帮,科锐国际26届实习内推 ①快手 【在招岗位】运营、市场、产品、战略分析、职能、工程、设计、算法、项目管理、销售、游戏等类 【一键内推】https://sourl.cn/Qi5pm2 【内推码】campuswQrLOMvHE ②得物 …...
【GPT入门】第9课 思维树概念与原理
【GPT入门】第9课 思维树概念与原理 1.思维树概念与原理2. 算24游戏的方法 1.思维树概念与原理 思维树(Tree of Thought,ToT )是一种大模型推理框架,旨在解决更加复杂的多步骤推理任务,让大模型能够探索多种可能的解决…...
SolidWorks 转 PDF3D 技术详解
在现代工程设计与制造流程中,不同软件间的数据交互与格式转换至关重要。将 SolidWorks 模型转换为 PDF3D 格式,能有效解决模型展示、数据共享以及跨平台协作等问题。本文将深入探讨 SolidWorks 转 PDF3D 的技术原理、操作流程及相关注意事项,…...
栈概念和结构
文章目录 1. 栈的概念2. 栈的分类3. 栈的实现(数组栈)3.1 接口设计(Stack.h)3.2 接口实现(Stack.c)1)初始化销毁2)栈顶插入删除3)栈顶元素、空栈、大小 3.3 完整代码Stac…...
Trae 是一款由 AI 驱动的 IDE,让编程更加愉悦和高效。国际版集成了 GPT-4 和 Claude 3.5,国内版集成了DeepSeek-r1
Trae 是一款由 AI 驱动的 IDE,让编程更加愉悦和高效。国际版集成了 GPT-4 和 Claude 3.5,国内版继承了DeepSeek-r1,支持实时代码建议和无缝 GitHub 集成。 当前国内和国际版的AI都是免费的。 安装 国际版安装 国际版下载:下载…...
Spring (八)AOP-切面编程的使用
目录 实现步骤: 1 导入AOP依赖 2 编写切面Aspect 3 编写通知方法 4 指定切入点表达式 5 测试AOP动态织入 图示: 实现步骤: 1 导入AOP依赖 <!-- Spring Boot AOP依赖 --><dependency><groupId>org.springframework.b…...
VS Code连接服务器教程
VS Code是什么 VS Code(全称 Visual Studio Code)是一款由微软推出的免费、开源、跨平台的代码编辑神器。VS Code 支持 所有主流操作系统,拥有强大的功能和灵活的扩展性。 官网:https://code.visualstudio.com/插件市场࿱…...
leetcode69.x 的平方根
题目: 给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。 注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。…...
HttpServletRequest 和 HttpServletResponse 区别和作用
一、核心作用对比 对象HttpServletRequest(请求对象)HttpServletResponse(响应对象)本质客户端发给服务器的 HTTP 请求信息(输入)服务器返回客户端的 HTTP 响应信息(输出)生命周期一…...
国家二级运动员证书有什么用·棒球1号位
以棒球运动为例,国家二级棒球运动员证书是由中国国家体育总局颁发的运动员技术等级认证,主要作用体现在以下几个方面: 一、升学优势 体育特招资格:符合条件者可报考高校高水平运动队或体育单招,部分院校对二级运动员有…...
Windsuf 连接失败问题:[unavailable] unavailable: dial tcp...
问题描述 3月6日,在使用Windsuf 时,遇到以下网络连接错误: [unavailable] unavailable: dial tcp 35.223.238.178:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of…...
docker中kibana启动后,通过浏览器访问,出现server is not ready yet
问题:当我在浏览器访问kibana时,浏览器给我报了server is not ready yet. 在网上试了很多方法,都未能解决,下面是我的方法: 查看kibana日志: docker logs -f kibana从控制台打印的日志可以发现ÿ…...
更多文章请查看
更多文章知识请移步至下面链接,期待你的关注 如需查看新文章,请前往: 博主知识库https://www.yuque.com/xinzaigeek...
(十 九)趣学设计模式 之 中介者模式!
目录 一、 啥是中介者模式?二、 为什么要用中介者模式?三、 中介者模式的实现方式四、 中介者模式的优缺点五、 中介者模式的应用场景六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,…...
博弈论算法
一、减法游戏 初始有一个数 n。 两个玩家轮流操作,每次可以减去 1 到 9 之间的任意整数。 将数减到 0 的玩家获胜。 可以发现规律: 减法游戏只需要判断当前数取模是否为0,即可快速判断胜负。 例题: Leetcode 292. Nim 游戏 …...
【网络】HTTP协议、HTTPS协议
HTTP与HTTPS HTTP协议概述 HTTP(超文本传输协议):工作在OSI顶层应用层,用于客户端(浏览器)与服务器之间的通信,B/S模式 无状态:每次请求独立,服务器不保存客户端状态(通…...
