TCP协议的十大核心特性总结(全面)

news2024/11/16 17:45:19

目录

一.TCP本身特性

二.报文格式

TCP十大核心特性 

 一.确认应答

二.超时重传

三.连接管理(三次握手,四次挥手)

三次握手

四次挥手

四.滑动窗口

情况一:接收方的ACK丢失

 情况二:发送方的数据包丢失

 五.流量控制

六.拥塞控制

 七.延迟应答

八.捎带应答

九.粘包问题

十.TCP的异常处理

情况一:程序突然崩溃

情况二:程序正常退出

情况三:没法发送和接收数据(电脑坏了,网络断了)

接收方无法接受

发送方无法发送


在介绍TCP协议的十大特性之前,我们先来看看TCP本身的特性

一.TCP本身特性

1.有连接

2.可靠传输

3.面向字节流

4.全双工

二.报文格式

 这是各大教科书上的

 实际上我们应该把他竖过来看,也就是从上到下,从左到右

下面正式开始讲解

TCP十大核心特性 

 一.确认应答

发送方在发送一条数据给接收方之后,接收方会立刻返回一个ACK作为回应,表示自己收到该条数据

这就是确认应答,能够保证传输的数据一定能发送给对方

二.超时重传

如果发送方没有接收到回来的ACK相应

等待一段时间后,发送方默认该数据已经丢失,会重新发送该条数据给对方

如果依然没有接收到ACK回应,那么会再次发送

但是每次发送的时间间隔会越变越长

这就是超时重传

三.连接管理(三次握手,四次挥手)

三次握手

 第一步:发送方给接收方发送一条信息(发送SYN);

第二步:接收方接受到信息后,发送两个消息,一个是确认应答(ACK),另一个是回复消息(SYN)

第三步:对于接收方发回来的ACK和SYN应答,发送方再次回复一个ACK确认应答

四次挥手

 第一步:发送方发送FIN,请求和接收方断开连接

第二步:接收方回应ACK收到断开请求

第三步:接收方向发起方也发送FIN,请求断开连接

第四步:ACK回应,接收方断开连接请求

四.滑动窗口

从上面的三次挥手和四次握手发现,我们TCP的大量时间都停留在接受ACK响应上,于是,我们采取批量传输数据的形式

 而为了保证接受方能够承担同时处理的最大数据,保证接受方不崩溃,我们限制了发送方的最大发送

第一步

第二步:

 

 也就是说,滑动窗口能够保证,接收方最大同时处理数据的上限,和发送方最大能发送数据的上限

如果在这种批量传输的情况下,出现数据丢失怎么办?

情况一:接收方的ACK丢失

那么发送方没有收到接收方回应的ACK,如果后面回复的ACK包含了前面的数据

那么就默认前面的数据已经收到,就不用管了

 

 情况二:发送方的数据包丢失

那么接收方就会一直请求发送方的数据,直到接受到相应数据为止

 

 五.流量控制

就是在滑动窗口的基础上,我们动态调整滑动窗口的大小,使得我们尽可能在保证数据传输稳定的情况下,扩大我们传输的数据量

如何动态调整呢?这就是我们说的拥塞控制

六.拥塞控制

 简单来说,就是速度如果达到了传输的上限,那么就会立刻反弹回一个较低的值,然后继续增长速率

如此反复,直到稳定在了一个比较合理的数值范围内,这就是拥塞控制

需要注意的是

最开始我们的速率增长是指数级别的增长,比如  2的一次方 -> 2的二次方 -> 2的三次方....

然后到了一个比较高的值之后,为了防止下一个次方直接超出接受范围很多

所以从那个值之后,我们采用线性增长,而不是指数增长了

 七.延迟应答

接收方接受数据之后,不会立刻相应给发送方,而是等待一段时间,等接收方接收到多组数据后再返回

 

八.捎带应答

如果在很短的时间内,接收方收到很多信息,并且都需要返回,那么多条返回消息,就可以合并为一条消息返回

九.粘包问题

因为是 捎带应答会使得多个消息一同返回给发起方,发起方是没有办法判断每个消息应该怎么分段,哪个消息是哪个消息的回应

解决方式:

(1)分隔符:设置一个特殊字符用作分隔符

(2)携带报头长度:在报头携带该消息的字符串长度

十.TCP的异常处理


情况一:程序突然崩溃

操作系统会自动回收程序遗留/占用的资源,类似于close操作,然后发生四次挥手

情况二:程序正常退出

同情况一,回收资源+四次挥手

情况三:没法发送和接收数据(电脑坏了,网络断了)

接收方无法接受

接收方无法接受数据,也就是无法回应ACK相应给发送方,当发送方多次发送数据也没有ACK回应之后,就默认接收方不行了,然后停止发送数据

发送方无法发送

在接收方和发送方里面存在一个"心跳包",双方会周期性发送一个小数据,判断对方是否存活,如果检测到发送方没有心跳回应,那么就默认发送方没了,接收方也就停止接收数据.

注意:在接收方电脑坏了的情况下也能用心跳包判断,但是ACK更加直接

 

 

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

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

相关文章

MATLAB工具箱下载心得(DeepLearnToolbox-master、DSP)

用MATLAB自带的工具Add-Ons只成功过一次(一年前吧,又或者那次也没有成功)。 现在发现,那个页面都打不开了,不管有没有tizi,都打不开了。 所以以后就只能找资源了。 这次下载DeepLearnToolbox-master&#…

shell自动化代码需求代开发

做linux,shell脚本代写 ,一个简单脚本30yuan,复杂的另外商议。包后期维护与逻辑思路答疑。

Jmeter(五) - 从入门到精通 - 创建网络计划实战和创建高级Web测试计划(详解教程)

1.简介 上一篇中我已经将其的理论知识介绍了一下,这一篇我就带着大家一步一步的把上一篇介绍的理论知识实践一下,然后再说一下如何创建高级web测试计划。 2.网络计划实战 通过上一篇的学习,将其分类为: (1&#xff09…

Openlayers map三要素(view,target,layers),及其他参数属性方法介绍

​​ 版本说明 Openlayers的实战教程 分为图文版 和 视频版, 这里的是图文版,包含基础知识介绍和实战的源代码,示例效果以gif动图的形式展现出来。 视频版 正在录制中,很快会上线,敬请期待~, 如有问题&am…

viewLifecycleOwner.lifecycleScope生命周期,kotlin

viewLifecycleOwner.lifecycleScope生命周期,kotlin viewLifecycleOwner.lifecycleScope.launch {viewLifecycleOwner.whenCreated {Log.d(TAG,"onCreated")}viewLifecycleOwner.whenStarted {Log.d(TAG,"onStarted")}viewLifecycleOwner.whenR…

FPGA中ROM初始化方法

一 读取txt数据文件进行初始化 parameter INIT_FILE "文件路径/Data.txt" (**注意文件路径中斜杠方向**) reg [DATA_WITDH - 1:0] ROM [DATA_DEPTH - 1:0];initial begin$readmemh(INIT_FILE, ROM, 0, DATA_DEPTH - 1); end Dat…

Vue UI 组件库

7.1.常用UI组件库 7.1.1.移动端常用UI组件库 VantCube UIMint UINutUI 7.1.2.PC端常用UI组件库 Element UIIView UI 7.2.element-ui基本使用 安装 element-ui:npm i element-ui -S src/main.js import Vue from vue; import App from ./App.vue;// 完整引入 i…

怎么发布QT程序的绿色版

记录一下,用QT Creator写窗口程序,编译好了以后在输出目录直接点击exe都会提示缺少各种dll 处理非常简单,在开始菜单找到QT相关的命令控制台你,如下,注意不要选择错了(这个非常关键,如果你是用V…

word选中所有表格的问题

1 首先在word文档中按下AITF8。名字无所谓,SelectAllTables 把下面的代码输入进去,运行,注意运行后等一会,就行了,大约30S,滑动滚轮就看就行 Sub SelectAllTables()Dim tempTable As TableApplication.Scre…

工作这么久了,还不懂如何使用纯前端实现分页吗?-假如后端一股脑返回给你所有数据,让你自个实现分页该怎么办

文章目录 一、如何使用elementUIvue实现前端分页二、通用的前端分页代码 有这么个场景,后端接口的列表数据没有做分页给我,相当于是直接返回所有的列表数据,比如有100条就返回100,但是前端显示,则需要做成分页&#xf…

VS+OpenCV字符动画ikun打篮球

目录 一、环境搭建实现效果模糊知识点资源 一、环境搭建 Visual Studio 2019VSopenCVVS2019配置opencv4.6.0手把手一步一步实现导出OpenCV的VS项目模板从第四步导出项目模板开始看VS安装easyx图形库教程easyx.h报错:无法打开源文件 “xxx.h“ 的解决办法 使用默认的…

tomcat基本了解与nginx的实例

目录 一.tomcat的简介 二.tomcat它是由三个容器组成 nginx的实例1 2.案例二 案例3 四案例4 五总结 一.tomcat的简介 Tomcat 是一个开源的 Java Web 应用服务器,它实际上是 Apache 软件基金会的 Jakarta 项目中的一个子项目。Tomcat 的主要作用是承载和运行基…

蓝桥杯专题-试题版-【分糖果】【矩阵翻硬币】【兰顿蚂蚁】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…

7-WebApis-4

Web APIs - 4 目标: 了解DOM节点的增删改查,掌握利用数据操作页面,完成移动端通讯录案例 日期对象节点操作M端事件JS插件综合案例 日期对象 日期对象:用来表示日期和时间的对象 作用:可以得到当前系统日期和时间 Date是JavaSc…

Verilog基础之十一、移位寄存器实现

目录 一、前言 二、工程设计 ​2.1 工程代码 2.2 综合结果 2.3 仿真结果 一、前言 移位寄存器SRL在工程中属于使用频率较高个模块,可用于存储数据,实现串并转换;根据数据移动方向可分为左移寄存器,右移寄存器,左移…

UDP 的报文结构和特点

一.UDP报文的结构 这是存在于各大教科书上的 其实我们应该这样来看更好理解,从上到下从左到右 源端口号:发送方地址 目的端口号:接收方地址 UDP长度:UDP报头UDP载荷, 2个字节64KB(固定不变),这是UDP能接受的最大内容 校验和:检测数据是否出错 二.UDP特点 1.无连接: 直到对方端…

如何将采购报价请求流程自动化?

在当今快节奏的商业环境中,效率和速度是保持竞争力的关键。在采购管理中,企业经常为简化操作而努力的一个领域是报价请求过程。手动处理请求、与供应商沟通并跟踪答复,可能非常耗时且容易出错。 然而,随着像8Manage SRM等专业电子…

外键导致的事务问题的解决方案

Exception分析 异常内容: com.zaxxer.hikari.pool.ProxyConnection : HikariPool-1 - Connection com.mysql.cj.jdbc.ConnectionImpl192ef0c0 marked as broken because of SQLSTATE(08S01), ErrorCode(0) com.mysql.cj.jdbc.exceptions.CommunicationsExceptio…

英雄大战恶棍 VoxEdit 大赛

准备好踏上超乎想像的史诗之旅了吗?号召所有的创作者、梦想家和有远见的人,在令人振奋的英雄大战恶棍 VoxEdit 大赛中展示他们的艺术才能!准备好让你们最喜欢的英雄和卑鄙的恶棍以前所未有的方式变得栩栩如生吧! 踏入 VoxEdit 的领…

win11中文家庭版下载补丁的方法远程连接

前置知识 参考链接:关于开启WINDOWS家庭版RDPwrap远程桌面报错解决办法(如:not listening) 0、怎么关闭Windows防火墙? 0、windows安全中心怎么关闭 正文 1、关闭防火墙 2、关闭windows安全中心 3、按照链接&…