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

目录

一.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.hqwc.cn/news/5063.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8s安装环境准备:Virtualbox安装CentOS;复制多个CentOS虚拟机

1.安装virtualbox 下载virtualbox https://www.virtualbox.org/wiki/Downloads 安装(windows) 双击VirtualBox-7.0.8-156879-Win.exe 选择安装目录 安装完成后,打开virtualbox 2.下载CentOS 下载CentOS-7-x86_64-DVD-2009.iso http://isoredi…

Redis的持久化机制(2)

AOF 以独立日志的方式记录每次写命令(读操作不记录),重启时再重新执行AOF文件中的命令来恢复数据。AOF会先把命令追加在AOF缓冲区,然后根据对应策略写入硬盘(appendfsync),它只许追加文件但不可…

C4.5算法

假设我们有一个关于餐厅顾客的数据集,其中包括9个样本,每个样本有3个属性:天气、是否有预订和是否是周末,以及一个类别标签,表示该顾客是否会来餐厅(是或否)。 数据集如下: 使用C4.5算法来构建…

react ant table设置动态scroll,且某些列的长度固定

设置scroll x的值为列的个数*100 1.代码 const columns [ {title: 料号描述,dataIndex: itemDesc,align:left,width: 200,ellipsis: true,} ]<EditableProTableclassName"details-table"columns{columns}loading{loading}rowKey"id"value{dataSource}…

机器学习10:正则化-Regularization

目录 1.什么是正则化&#xff1f; 2.简化正则化&#xff1a;Lambda 3.两个练习 3.1 问题一 3.2 问题二 4.参考文献 1.什么是正则化&#xff1f; 考虑以下泛化曲线&#xff0c;它显示了训练集和验证集相对于训练迭代次数的损失。 图 1. 训练集和验证集的损失 图 1 显示了…

【高可用架构】聊聊故障和高可用架构设计

在架构设计中&#xff0c;高性能、高可用、可拓展以及安全等等有多种维度去判断架构的设计纬度&#xff0c;但是一般来说我们需要考虑具体的业务场景&#xff0c;去判断采用那种合适的架构方案&#xff0c;但是对于大多数的设计来说&#xff0c;都需要满足高性能、高可用。所以…

1752_使用Perl实现目录遍历

全部学习汇总&#xff1a; GreyZhang/speed_emacs: Try to make a new emacs configuration which is fast even on windows! (github.com) 关于Perl和Python的优劣我不去做什么分析&#xff0c;也不去发表什么深入的见解。我个人的学习过程是先Perl后Python再回到Perl。因为工…

Redis 高可用【主从复制 哨兵 集群】

主从复制&#xff1a;主从复制是高可用Redis的基础&#xff0c;哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份&#xff0c;以及对于读操作的负载均衡和简单的故障恢复。缺陷&#xff1a;故障恢复无法自动化&#xff1b;写操作无法负载均衡&am…

【深度学习推荐系统 工程篇】二、从TF-Serving看生产环境的模型推理服务

前言 模型训练完成后&#xff0c;到在线部署是其所必须要做的一步&#xff0c;伴随模型结构复杂/算力增加&#xff0c;打造低延时/低资源占用的模型预测服务是模型上线的关键&#xff1b; tensorflow 很早就开源了tf-serving&#xff08;代码连接&#xff1a;https://github.…

1.1.1 Qt信号槽之connect与disconnect介绍

关于Qt信号槽中connect与disconnect介绍 首先我们要知道&#xff0c;如果想要使用Qt中的信号槽机制&#xff0c; 那么必须继承QObject类&#xff0c;因为QObject类中包含了信号槽的一系列操作&#xff0c;今天我们来讲解的是信号与槽怎么建立连接以及断开连接。 一、connect …

JSP原理以及基本语法

1、JSP原理 什么是JSP&#xff1f; Java Server Pages&#xff1a;Java服务器页面&#xff0c;和Servlet一样是动态Web技术&#xff01; 和HTML的区别&#xff1f; HTML是静态页面。在JSP页面中可以嵌入Java代码&#xff0c;为用户提供动态的数据。 JSP 和 Servlet 的关系…

前后端分离,通用分页js处理模板

功能 **可实现一个页面多个ajax无刷新分页列表** **可解决页面数量非常多的问题** 效果&#xff1a; 截图&#xff1a; 步骤&#xff1a; 第一步&#xff1a;创建一个index.html引入 <script src"./jquery-3.7.0.js"></script><link rel"st…