当前位置: 首页 > news >正文

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&#xff1a;如何连续插入 汇总SQlite语句 创建表格&#xff1a;create table <table_name> (f1 type1, f2 type2,…); 增&#xff1a;insert into <table_name> values (value1, value2,…); 改&#xff1a;update <table_name> set <f1value1>,…...

【模拟面试问答】力扣165题:比较版本号(逐个比较与双指针法详解及模拟面试问答)

在本篇文章中&#xff0c;我们将详细解读力扣第165题“比较版本号”。通过学习本篇文章&#xff0c;读者将掌握如何使用多种方法来解决这一问题&#xff0c;并了解相关的复杂度分析和模拟面试问答。每种方法都将配以详细的解释和ASCII图解&#xff0c;以便于理解。 问题描述 …...

用PhpStudy在本地电脑搭建WordPress网站教程(2024版)

对新手来说&#xff0c;明白了建站3要素后&#xff0c;如果直接购买域名、空间去建站&#xff0c;因为不熟练&#xff0c;反复测试主题、框架、插件等费时费力&#xff0c;等网站建成可能要两三个月&#xff0c;白白损失这段时间的建站费用。那么新手怎么建测试网站来练手呢&am…...

高中数学:平面向量-题型总结及解题思路梳理

一、知识点及解题思路梳理 高中&#xff0c;2/3的向量题目是坐标向量题&#xff0c;1/3是几何向量题。但是&#xff0c;这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 需强化知识点 贪心&#xff1a;跳跃游戏 题目 122. 买卖股票的最佳时机 II 动态规划贪心&#xff1a;只要股票第二天涨了&#xff0c;前一天就买&#xff0c;第二就买 class Solution:def maxProfit(sel…...

【深度学习】ultralytics, yolo seg,实例分割图绘制,核对yolo seg 的txt标记对不对

这段代码的作用是从指定路径读取图像和标签文件&#xff0c;然后在图像上绘制分割区域和相关点&#xff0c;并保存最终的图像。以下是每个函数的具体作用及其解释&#xff1a; read_labels(label_path): 读取指定路径的标签文件。标签文件的每一行表示一个物体的分割信息&#…...

如何保证员工在精益变革中始终保持积极的态度?

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

【Java面试】三、Redis篇(下)

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

GpuMall智算云:QwenLM/Qwen1.5/Qwen1.5-7B-Chat

Qwen 是阿里巴巴集团 Qwen 团队的大型语言模型和大型多模态模型系列&#xff0c;现在大型语言模型已经升级到 Qwen1.5 版本。 GpuMall智算云 | 省钱、好用、弹性。租GPU就上GpuMall,面向AI开发者的GPU云平台 无论是语言模型还是多模态模型&#xff0c;都在大规模的多语言和多模…...

CentOS6.5 下编译 FreeSWITCH 1.2.23 版本

命题作文&#xff0c;慢慢来&#xff0c;一边做&#xff0c;一边记录。 老古董了&#xff0c;查资料很不容易&#xff0c;但朋友说不着急&#xff0c;这很好。 生命的意义在于折腾&#xff0c;不是吗&#xff1f; 先下载 CentOS6.5&#xff0c; 查了下资料&#xff0c;最后…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是&#xff0c;要注意以下几点&#xff1a; Django的表单验证与null无关&#xff1a;null参数控制的是数据库层面字段是否可以为NULL&#xff0c;而blank参数控制的是Django表单验证时字…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...