TCP协议的相关特性
目录
正文:
1.可靠性
2.连接管理
3.滑动窗口
4.流量控制
5.拥塞控制
6.延迟应答
7.捎带应答
总结:
正文:
1.可靠性
TCP协议是一个有连接,可靠传输,面向字节流,全双工的协议。其中可靠传输的实现应该是属于最抽象的了,而想要实现可靠传输就需要确认应答和超时重传这两个机制。
确认应答:在 TCP 传输过程中,接收方接收到数据后会发送确认应答给发送方,通知发送方已经成功接收数据。发送方接收到确认应答后才会继续发送新的数据,保证数据的有序传输。TCP将每个字节的数据都进行了编号,即为序列号。每一个ACK都带有对应的确认序列号, 意思是告诉发送者, 我已经收到了哪些数据,下一次你从哪里开始发。大概图形如下:
超时重传: TCP 传输过程中,发送方发送数据后会等待接收方的确认,如果发送方在规定的超时时间内未收到确认,就会认为数据丢失,触发超时重传机制,重新发送数据。超时重传可以确保即使在网络出现丢包等情况时,数据依然能够可靠传输。超时时间的选择很重要,如果设置过短会导致频繁重传,影响传输效率,如果设置过长会延迟重传时间,影响数据传输的实时性。大致图形如下:
当超时重传和确认应答机制配合得当时,TCP协议可以在复杂的网络环境下高效地传输数据,并保障数据的完整性和可靠性。
2.连接管理
TCP 协议中的连接管理是指通过三次握手建立连接和四次挥手终止连接的过程。TCP连接的建立过程通常被称为三次握手(Three-way Handshake)。这个过程确保了两个端点都准备好进行数据传输。当通信双方完成数据传输后,它们需要释放连接。TCP连接的释放过程称为四次挥手(Four-way Handshake)。
三次握手: a. 第一次握手:客户端向服务器端发送 SYN 报文段,请求建立连接。 b. 第二次握手:服务器端接收到 SYN 报文段后,回复一个 SYN+ACK 报文段,表示同意建立连接。 c. 第三次握手:客户端接收到服务器端的 SYN+ACK 报文段后,发送一个 ACK 报文段,确认连接建立。 此时,TCP 连接建立成功,双方可以开始进行数据传输。大致图片如下:
四次挥手: a. 第一次挥手:客户端发送一个 FIN 报文段,表示数据传输完成。 b. 第二次挥手:服务器端接收到 FIN 报文段后,回复一个 ACK 报文段,表示确认收到客户端的关闭请求。 c. 第三次挥手:服务器端发送一个 FIN 报文段,表示数据传输完成。 d. 第四次挥手:客户端接收到 FIN 报文段后,回复一个 ACK 报文段,表示确认收到服务器端的关闭请求。此时,TCP 连接正式关闭,双方释放连接资源。大致图片如下:
通过三次握手建立连接,可以确保双方都同意建立连接,并同步连接状态;通过四次挥手终止连接,可以安全地结束数据传输并释放连接资源,避免出现半开连接等问题。连接管理的规范流程保证了 TCP 在通信过程中的正常运行,提升了网络的稳定性和安全性。
3.滑动窗口
确认应答策略, 对每一个发送的数据段, 都要给一个ACK确认应答。收到ACK后再发送下一个数据段.。这样做有一个比较大的缺点, 就是性能较差。尤其是数据往返的时间较长的时候。既然这样一发一收的方式性能较低, 那么我们一次发送多条数据, 就可以大大的提高性能(其实是将多个段的等待时间重叠在一起了)。
操作原理:
- 发送方使用发送窗口来控制发送数据的数量。发送窗口大小取决于接收方通知的窗口大小和拥塞控制算法调整的窗口大小。发送窗口内的数据可以被发送,窗口外的数据暂时不能发送;
- 接收方使用接收窗口来控制接收数据的数量。接收窗口表示接收方可以接收的数据的范围,接收窗口内的数据可以被接收,窗口外的数据则会被丢弃或拒绝。发送前四个段的时候, 不需要等待任何ACK, 直接发送;
- 收到第一个ACK后, 滑动窗口向后移动, 继续发送第五个段的数据; 依次类推;
- 操作系统内核为了维护这个滑动窗口, 需要开辟 发送缓冲区 来记录当前还有哪些数据没有应答只有确认应答过的数据, 才能从缓冲区删掉;
- 窗口越大, 则网络的吞吐率就越高;
大致图像如下:
滑动窗口是 TCP 协议中一个重要的机制,通过对发送和接收窗口的动态调整,可以更好地管理数据的传输,提高数据传输的效率。
4.流量控制
接收端处理数据的速度是有限的. 如果发送端发的太快, 导致接收端的缓冲区被打满, 这个时候如果发送端继续发送, 就会造成丢包, 继而引起丢包重传等等一系列连锁反应。流量控制是 TCP 协议中的一种机制,用于调节数据传输的速率,以确保发送方和接收方之间的数据传输不会出现过载。流量控制主要通过滑动窗口机制来实现。
操作原理:
- 接收方通过 TCP 报文段中的接收窗口字段告知发送方自己当前的接收窗口大小,即可接收的数据量,窗口大小字段越大, 说明网络的吞吐量越高。
- 发送方根据接收方通知的窗口大小来控制发送数据的速率,确保发送的数据不会超过接收方当前的处理能力,接收端一旦发现自己的缓冲区快满了, 就会将窗口大小设置成一个更小的值通知给发送端,发送端接受到这个窗口之后, 就会减慢自己的发送速度;。
- 发送方发送的数据量不能超过接收方通知的窗口大小,否则接收方将丢弃多余的数据或发出窗口溢出信息,如果接收端缓冲区满了, 就会将窗口置为0。这时发送方不再发送数据, 但是需要定期发送一个窗口探测数据段, 使接收端把窗口大小告诉发送端。
通过流量控制可以避免网络拥塞和数据堆积,确保网络传输的稳定性和顺畅性。
5.拥塞控制
虽然TCP有了滑动窗口这个大杀器, 能够高效可靠的发送大量的数据. 但是如果在刚开始阶段就发送大量的数据, 仍然可能引发问题。拥塞控制是 TCP 协议中的一种机制,用于防止网络拥塞并在出现网络拥塞时适当降低数据流量,以避免数据丢失和网络性能下降。拥塞控制主要通过拥塞窗口和拥塞避免算法来实现。
操作原理:
- TCP引入 慢启动 机制, 先发少量的数据, 探探路, 摸清当前的网络拥堵状态, 再决定按照多大的速度传输数据。
- 发送开始的时候, 定义拥塞窗口大小为1,每次收到一个ACK应答, 拥塞窗口加1。每次发送数据包的时候, 将拥塞窗口和接收端主机反馈的窗口大小做比较, 取较小的值作为实际发送
的窗口,像上面这样的拥塞窗口增长速度, 是指数级别的。"慢启动" 只是指初使时慢, 但是增长速度非常快。 - 当拥塞窗口超过一个阈值的时候, 不再按照指数方式增长, 而是按照线性方式增长当TCP开始启动的时候, 慢启动阈值等于窗口最大值,在每次超时重发的时候, 慢启动阈值会变成原来的一半, 同时拥塞窗口置回1。
通过拥塞控制机制,TCP 可以确保网络中的数据流量在承载范围内,避免网络拥塞和数据丢失。
6.延迟应答
延时应答(Delayed ACK)是指在 TCP 协议中,接收端在接收到数据包后,并不立即发送确认应答(ACK),而是等待一段时间(通常为200ms),以期望在这段时间内可以捎带上之前接收到的其他数据包的确认信息一起发送。
操作原理:
- 等待延时时间:接收端在接收到数据包后,等待一个固定的延时时间,看是否有其他需要发送的确认应答。如果在延时时间内接收到另一个数据包,可以将确认应答捎带发送。
- 触发条件:一般情况下,当接收端发送数据包后,会等待一个较短的时间(如200ms)来判断是否应该发送确认应答,避免过长的延时导致发送端重传数据包。
7.捎带应答
捎带应答(piggybacking)是指在 TCP 协议中,当接收端向发送端发送确认应答(ACK)时,如果接收端正好要发送数据给发送端,就可以将数据放在确认应答中一起发送,达到“捎带”效果。这样可以减少网络中的数据包数量及传输延迟,提高网络传输的效率。
操作原理:
- 采用累积确认:接收端可以将自己要发送的数据留在确认应答中,一旦 ACK 数据包到达发送端,发送端就可根据 ACK 中的确认号确认数据的成功到达,并处理接收端发送的数据。
- 利用 ACK 数据包空间:确认应答(ACK)数据包中通常会携带有确认号,接收端可以利用 ACK 数据包的剩余控制位来放置自己要发送的数据。
捎带应答是 TCP 协议中一种优化的数据传输机制,通过将数据捎带在确认应答中一起传输,减少网络中的数据包数量和传输延迟,提高网络传输的效率和性能。
总结:
总的来说,TCP 是一种可靠、面向连接的传输层协议,通过提供可靠传输、连接管理,拥塞控制、流量控制、差错检测与重传等机制,确保数据在网络中的可靠传输和有效交互。
相关文章:

TCP协议的相关特性
目录 正文: 1.可靠性 2.连接管理 3.滑动窗口 4.流量控制 5.拥塞控制 6.延迟应答 7.捎带应答 总结: 正文: 1.可靠性 TCP协议是一个有连接,可靠传输,面向字节流,全双工的协议。其中可靠传输的实现…...
Lombok,一款超级强大的Java工具库
在软件开发过程中,繁琐的模板代码经常让开发者感到烦恼。 Lombok 是一款 Java 库,能够帮助开发者减少这些冗余代码,提高开发效率。本文将介绍 Lombok 的基本概念、安装和配置方法,以及如何在实际项目中使用它。 Lombok 是什么 L…...

FreeBSD下使用原生虚拟机管理器bhyve
hbyve简介 自 FreeBSD 10.0-RELEASE 起,BSD 许可的 bhyve 虚拟机管理器已成为底层系统不可或缺的一部分。bhyve 强大而灵活,支持多种客户机操作系统,涵盖 FreeBSD、OpenBSD 以及多个 Linux 发行版。在默认配置下,bhyve 提供对串行…...

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!
这段时间一直在搞文件上传相关的知识,正好把ctf的题目写了写,也算是给自字做个总结! 不过ctf有一个缺点就是所有的测试全部是黑盒测试,无法从代码层面和大家解释,我找个时间把upload-labs靶场做一做给大家讲讲白盒的代…...

【学习记录】服务器转发使用tensorboard
场景 代码在服务器上运行,想使用tensorboard查看训练的过程。 但是服务器上不能直接访问地址,所以要转发端口到本地,从而在本地网页中能够打开tensorboard。 参考:https://zhuanlan.zhihu.com/p/680596384 这时我们需要建立本地…...
类型转换之显式转换
显式转换——>手动处理,强制转换 括号强转 作用:一般情况下,将高精度的类型转换为低精度。 语法:变量类型 变量名 (变量类型)变量; 注意:精度问题,范围问题。 括号强转&#x…...
Mybatis多表查询,报错:Column ‘id‘ in field list is ambiguous
错误原因: Mybatis 多表查询时,多个表有相同名字的字段,比如 id,名字重复,没有指定对应的表名。 有两个地方需要注意:(1)将其中一个重复字段的 Mybatis的 column 修改为其他的名字。(2)字段加上对应的表名…...

PyCharm面板ctrl+鼠标滚轮放大缩小代码
1.【File】➡【Settings】 2.点击【Keymap】,在右边搜索框中搜incre,双击出现的【Increase Font Size】 3.在弹出的提示框中选择【Add Mouse Shortcut】 4.弹出下面的提示框后,键盘按住【ctrl】,并且上滑鼠标滚轮。然后点击【O…...

【Qt】数据库(一)SQLITE创建、增删查改
填坑1:如何连续插入 汇总SQlite语句 创建表格:create table <table_name> (f1 type1, f2 type2,…); 增:insert into <table_name> values (value1, value2,…); 改:update <table_name> set <f1value1>,…...
【模拟面试问答】力扣165题:比较版本号(逐个比较与双指针法详解及模拟面试问答)
在本篇文章中,我们将详细解读力扣第165题“比较版本号”。通过学习本篇文章,读者将掌握如何使用多种方法来解决这一问题,并了解相关的复杂度分析和模拟面试问答。每种方法都将配以详细的解释和ASCII图解,以便于理解。 问题描述 …...

用PhpStudy在本地电脑搭建WordPress网站教程(2024版)
对新手来说,明白了建站3要素后,如果直接购买域名、空间去建站,因为不熟练,反复测试主题、框架、插件等费时费力,等网站建成可能要两三个月,白白损失这段时间的建站费用。那么新手怎么建测试网站来练手呢&am…...

高中数学:平面向量-题型总结及解题思路梳理
一、知识点及解题思路梳理 高中,2/3的向量题目是坐标向量题,1/3是几何向量题。但是,这1/3的几何向量题可以转换成坐标向量题。 二、练习 例题1 几何型向量题 例题2...
【玩转google云】Google Cloud Platform (GCP) (WAF)详解
目录 引言 一、什么是Web Application Firewall? 二、GCP WAF简介 三、GCP WAF的主要功能...

前端开发工程师——数据可视化
canvas canvas绘制线段 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthd…...
【代码随想录训练营】【Day 35】【贪心-2】| Leetcode 122, 55, 45
【代码随想录训练营】【Day 35】【贪心-2】| Leetcode 122, 55, 45 需强化知识点 贪心:跳跃游戏 题目 122. 买卖股票的最佳时机 II 动态规划贪心:只要股票第二天涨了,前一天就买,第二就买 class Solution:def maxProfit(sel…...

【深度学习】ultralytics, yolo seg,实例分割图绘制,核对yolo seg 的txt标记对不对
这段代码的作用是从指定路径读取图像和标签文件,然后在图像上绘制分割区域和相关点,并保存最终的图像。以下是每个函数的具体作用及其解释: read_labels(label_path): 读取指定路径的标签文件。标签文件的每一行表示一个物体的分割信息&#…...

如何保证员工在精益变革中始终保持积极的态度?
在当今日新月异的商业环境中,企业为了保持竞争力,需要不断寻求创新和变革。精益变革作为一种提升效率和质量的有效手段,已逐渐成为企业转型升级的关键。然而,变革往往伴随着挑战和不确定性,如何保证员工在精益变革中始…...

【Java面试】三、Redis篇(下)
文章目录 1、抢券场景2、Redis分布式锁3、Redisson实现分布式锁4、Redisson实现的分布式锁是可重入锁5、Redisson实现分布式锁下的主从一致性6、面试 1、抢券场景 正常思路: 代码实现: 比如优惠券数量为1。正常情况下:用户A的请求过来&a…...

GpuMall智算云:QwenLM/Qwen1.5/Qwen1.5-7B-Chat
Qwen 是阿里巴巴集团 Qwen 团队的大型语言模型和大型多模态模型系列,现在大型语言模型已经升级到 Qwen1.5 版本。 GpuMall智算云 | 省钱、好用、弹性。租GPU就上GpuMall,面向AI开发者的GPU云平台 无论是语言模型还是多模态模型,都在大规模的多语言和多模…...
CentOS6.5 下编译 FreeSWITCH 1.2.23 版本
命题作文,慢慢来,一边做,一边记录。 老古董了,查资料很不容易,但朋友说不着急,这很好。 生命的意义在于折腾,不是吗? 先下载 CentOS6.5, 查了下资料,最后…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...

Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...

基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统
Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...
嵌入式面试常问问题
以下内容面向嵌入式/系统方向的初学者与面试备考者,全面梳理了以下几大板块,并在每个板块末尾列出常见的面试问答思路,帮助你既能夯实基础,又能应对面试挑战。 一、TCP/IP 协议 1.1 TCP/IP 五层模型概述 链路层(Link Layer) 包括网卡驱动、以太网、Wi‑Fi、PPP 等。负责…...

Qwen系列之Qwen3解读:最强开源模型的细节拆解
文章目录 1.1分钟快览2.模型架构2.1.Dense模型2.2.MoE模型 3.预训练阶段3.1.数据3.2.训练3.3.评估 4.后训练阶段S1: 长链思维冷启动S2: 推理强化学习S3: 思考模式融合S4: 通用强化学习 5.全家桶中的小模型训练评估评估数据集评估细节评估效果弱智评估和民间Arena 分析展望 如果…...
Netty自定义协议解析
目录 自定义协议设计 实现消息解码器 实现消息编码器 自定义消息对象 配置ChannelPipeline Netty提供了强大的编解码器抽象基类,这些基类能够帮助开发者快速实现自定义协议的解析。 自定义协议设计 在实现自定义协议解析之前,需要明确协议的具体格式。例如,一个简单的…...

职坐标物联网全栈开发全流程解析
物联网全栈开发涵盖从物理设备到上层应用的完整技术链路,其核心流程可归纳为四大模块:感知层数据采集、网络层协议交互、平台层资源管理及应用层功能实现。每个模块的技术选型与实现方式直接影响系统性能与扩展性,例如传感器选型需平衡精度与…...