TCP的核心属性

TCP的核心属性

  • 一: TCP的核心属性
    • 1.1: 确认应答:
    • 1.2 : 超时重传
    • 1.3 : 连接管理
      • 1.3.1 三次握手
      • 1.3.2 四次挥手
    • 1.4 滑动窗口
    • 1.5: 流量控制:
    • 1.6 拥塞控制
    • 1.7 延时应答
    • 1.8 :捎带应答
    • 1.9: 面向字节流
    • 1.10 : 异常情况

一: TCP的核心属性

1.1: 确认应答:

保证可靠性最核心的机制

1.2 : 超时重传

针对确认应答的机制的核心补充.

1.3 : 连接管理

  1. 建立连接:三次握手
  2. 断开连接: 四次挥手
    握手,挥手发送的是不带业务数据的数据包.
    连接: 指的是保存对端的信息.
    建立连接 ,就是让双方把对方的信息给记录下来.
    断开连接 : 让双方把对方的信息删除掉.

1.3.1 三次握手

三次握手的意义:
1: 投石问路: 确认通信链路是否畅通
2: 验证通信双方的发送能力和接收能力是否正常.
3: 协商核心数据
==两个重要的状态: ==
1: LISREN :
服务器进入的状态,端口绑定成功,服务器准备就绪.
2: ESTABLISHED:
连接建立成功,随时可以进行数据通信了.

1.3.2 四次挥手

为啥四次挥手是四次?可以合并吗?
1)不能合并.ack 是内核收到fin 立即返回的,fin 则是代码中调用close才返回的.
2) 可以合并,TCP的延时应答机制.
==四次挥手中的重要状态: ==
CLOSE_WAIT : 收到fin 到应用程序调用close方法中间所处的状态称为CLOSE_WAIT状态.
TIME_WAIT : 存在的意义 ,就是为了应对最后一个ACK 丢包这样的场景.
CLOSE_WAIT: 被动接收的一方所处的状态.
TIME_WAIT : 主动发起的一方所处的状态.
TIME_WAIT等待的时间一般是2MSL.
在这里插入图片描述

四次挥手只是通知,我要把你删了,真正删除信息是在四次挥手结束,就相当于双方在离婚协议书上签字,签完字之后,再把对方的练习方式删除.

== 如果发现服务器出现大量的TIME_WAIT ,说明了什么?==
出现了大量的TIME_WAIT ,说明服务器触发了大量的主动断开TCP连接的操作,这样的操作对于服务器来说,很可能是不科学的,一般都是客户端主动断开连接.

1.4 滑动窗口

滑动窗口是一种提高传输效率的机制.

  1. 没有滑动窗口的情况:

在这里插入图片描述

  1. 引入滑动窗口机制 :
    在这里插入图片描述
    滑动窗口中,批量发了4 组数据之后,不是等到4 个ACK 都回来才继续发送新的数据,而是收到一个ack ,就往后发一个新的.
    滑动窗口,如果出现丢包咋办?

  2. 数据包已经到达接收方,但ACK丢了:
    不需要做任何处理:
    在这里插入图片描述

  3. 数据包直接丢了:
    只需要把缺失的数据重传即可,其他的数据不必重传.
    一旦缺口补上,接下来就可以从队列中最后一盒数据的序号继续往后发送数据包即可.
    在这里插入图片描述
    == 超时重传和快速重传 , 相当于两种不同的重传机制,是否是冲突的呢?
    不冲突, 快速重传相当于超时重传在滑动窗口的特殊变种.
    如果TCP 传输的数据比较少, 不频繁 , 此时就不会触发滑动窗口, 如果短时间传输大量的数据 ,此时才会触发滑动窗口.
    即使引入滑动窗口,使TCP的传输效率有一定的提升,但速度不可能比UDP这种没有可靠性机制的协议更快.

1.5: 流量控制:

指的是滑动窗口的大小.
窗口越大, 单位时间发送的数据就越多,窗口越小,单位时间发送的数据就越少.
通常情况下,希望尽可能高效的传输,但高效的前提是可靠性,但接收方的接收能力有限,不能即使处理这些数据,就会造成丢包现象的发生.
所以,更合理的做法,应该是 接受方根据自身的处理能力,反向制约发送方的速度,使双方达成一个"平衡".
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.6 拥塞控制

和流量控制类似,都是和滑动窗口搭配的机制.
流量控制,是站在接收方的角度,影响发送方的速度,而拥塞控制,是站在数据链路层,链路上的任何一个节点,窗口太大,都可能造成丢包现象.性能瓶颈都会制约发送方的发送速度.
如果考虑中间的每一个节点,就变复杂了:
因为中间链路有很多设备,以及走的路径都可能不同 ,每个设备处理能力,繁忙程度都可能不相同.
虽然中间结构很复杂,但TCP把他们视为一个整体,然后通过实验的方式,找到一个合适的窗口大小.
在这里插入图片描述
上图过程,就称为 " 拥塞控制".
== 窗口大小以拥塞控制计算的窗口大小为准还是流量控制计算出来的窗口大小 ?==
哪个计算出来的窗口小,就以哪个为标准!

在这里插入图片描述

1.7 延时应答

指的是ACK不会立即返回,而是稍等一会再返回.
为啥要延时???
核心目的,就是提升传输的效率----决定传输速度最关键的因素,就是窗口大小,在能够承受的前提下,尽可能的提高窗口大小.
通过延时机制,就可以 使窗口大小得到提升,延时就是给应用程序腾出来更多的时间来消费数据包.
在这里插入图片描述

延时时间,有两种方式:
1)按照一定的时间来指定延时,
2) 按照收到的数据量.
往往这两个策略是结合使用的.

1.8 :捎带应答

建立在延时应答的基础之上,提升效率的机制.
正常情况下,ack是内核收到请求,自动返回的,而响应是在程序执行一系列逻辑之后,再返回的.

在这里插入图片描述

由于延时应答机制的存在,ACK不一定立即返回,在ACK稍等这一会的时候,正好,就要返回响应数据,此时,就在响应数据中,TCP的ACK这一位置上,把确认序号,窗口大小都设置上.
这样,就把两次传输合并成了一次传输,提高了传输效率.

三次握手的合并是由于捎带应答机制的原因吗?
不是,三次握手,本来就是相同时机,本来就是一个报文就可以解决,而捎带应答则是在延时应答的基础上,本来不能合并,延时之后,才能合并.

1.9: 面向字节流

在字节流读写数据的场景中,会涉及到一个非常关键的问题: 粘包问题
比如接收方的阻塞队列中,有一下数据:
在这里插入图片描述

json ,xml,yml 都是基于分隔符的方式来进行区分的.
protobuffer按照长度的方式来区分的.

1.10 : 异常情况

1). 其中某个进程崩溃了
进程崩溃也好,正常结束也好,操作系统都能够回收释放对应的PCB,可以释放里面的文件描述符表,也就相当于调用了close方法.
也就是四次挥手能够正常挥完,虽然进程不在了,但操作系统仍然管理着TCP的连接,所以可以和对方挥完.
2) . 某个主机被关机(正常流程的关机)
对于正常流程的关机,操作系统会先尝试强制结束所有的用户进程,然后在进入关机流程.
如果四次挥手没挥完, 系统就关机了:
比如: A和B建立了TCP连接,A这边关机了,A关机之前,告诉B,发送fin,B这边收到了fin,B返回ACK,代码进入下一阶段流程,准备发送fin,但如果A关机了,也就意味着B 接下来的 fin 不会收到ACK,B的fin就会反复重传几次, 如果B仍然没收到ACK,还是继续把A给删除, A都已经关机了,之前保存的B的信息,自然也没了.
3) 某个主机突然掉电(非正常关机)
A和B通信, A突然掉电了.
A无法做出任何反应,而B仍然认为,A还存在呢.
a)B是发送数据方:
B接下来发的数据,都不会有ACK,B就会触发超时重传,重传几次之后,发送复位报文(RST),RST也没有反应,B就会单方面删除保存A的信息

b) B是接收方:
接收方,无法知道对方啥时候给我发送数据
当A沉默之后,B也不知道A是暂停一会,还是A挂了
B在一定时间之内没收到A的数据之后,就会触发心跳包
心跳包,就可以认为是一个没有载荷的数据包,只是为了触发ACK
B给A发了一个心跳包,如果A正常,A就会回应ACK,如果A挂了,B就不会收到任何回应.连续发了若干次,A都没有回应,这个时候B认为A挂了,于是单方面是否连接.
TCP虽然内置了心跳包,但是这个心跳包,周期比较长,指望通过这个心跳包发现对端挂了,往往需要分钟这样的时间.
在实际开发中,经常会实现应用层的心跳包,用更高频率,更短周期发送心跳.

  1. 网线断开
    A和B之间的网线断开了.
    比如: A是发送方,B是接收方
    A的角度,就会触发超时重传,触发RST,单方面删除信息.
    B的角度,就会触发心跳包,对方无响应,单方面删除信息.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Pinterest免费引流实操演示

这篇文章中你将了解到 1.Pinterest网站介绍,用户群体,适合做什么品类。 2.现在的商家都在上面做什么?案例展示。 3.我们在这个站免费引流要怎么做以及注意事项。 1.Pinterest网站介绍,用户群体,适合做什么品类。 P…

如何令谷歌浏览器搜索时,子页面使用新窗口,而不是迭代打开

1 问题描述 工作相关需要常用谷歌浏览器,但是现在设置就是每次搜索后,点击搜索结果进去之后,都会覆盖掉原来的父页面,也就是如果我看完了这个子页面的内容,关掉的话,我就需要重新google.com来一遍。。。很…

面试题------>MySQL!!!

一、连接查询 ①:左连接left join (小表在左,大表在右) ②:右连接right join(小表在右,大表在左) 二、聚合函数 SQL 中提供的聚合函数可以用来统计、求和、求最值等等 COUNT&…

IO流,文件操作

参考 Java IO 基础知识总结 | JavaGuide 史上最骚最全最详细的IO流教程,没有之一! - 宜春 - 博客园 零、io-流简介 IO 即 Input/Output,输入和输出。数据输入到计算机内存的过程即输入,反之输出到外部存储(比如数据…

什么是 Batch Normalization 批标准化和全连接层

Batch Normalization 神经元在经过激活函数之后会处于饱和状态,无论后续怎么变化都不会再起作用。 每一层都会进行batch normalization的处理! without normalization 会导致数据分布再饱和区 全连接层: 全连接层(fully connected layers&a…

微信公众号文章背景颜色改成白色

微信公众号文章背景颜色黑色,看不清字。 按F12 , 找到 rich_media_area_primary ,把 background 改成 white .rich_media_area_primary {background: white; }

云端狂飙:Django项目部署与性能优化的极速之旅

Hello,我是阿佑,这次阿佑将手把手带你亲自踏上Django项目从单机到云端的全过程,以及如何通过Docker实现项目的无缝迁移和扩展。不仅详细介绍了Docker的基本概念和操作,还深入探讨Docker Compose、Swarm和Kubernetes等高级工具的使…

python语言中循环语句的小结

如上图所示,在C/C/Java中如果使用的for循环语句和do while语句都与python中的while循环语句类似,所以在C/C/Java中如果使用的for循环语句在python中可以用while语句来替换。

上位机图像处理和嵌入式模块部署(f407 mcu中的udp server开发)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 既然lwip已经port到407上面了,接下来其实就可以做一些测试了。本身lwip支持tcp、udp,也支持client和server,既然…

python语言中的break和continue

continue立即结束当前这次循环,进入下次循环 break立即结束整个循环。 如上图所示,在python语言中break和continue语句常常搭配条件语句一起使用。 如上图所示,while True: 光看到while True 不一定是死循环, 关键是…

【Kubernetes】 emptyDir、nfs存储卷 和 PV、PVC

emptyDir存储卷 当pod被分配给节点 容器和容器之间进行共享存储 hostPath nfs共享存储卷 NAS 专业的存储设备;一般是与NFS 搭配,然后共享出去 GFS 自己搭;CEPH(至少要9台) 第三方;NAS 第三方; 云端 oss …

一维时间序列信号的小波时间散射变换(MATLAB 2021)

小波散射变换的目的在于获取第一层次的特征信息,即免疫平移、轻微形变的信息。而低通的滤波器能够获取输入信号的概貌,获取反映其整体大尺度特征的信息,以图像为例,由低通滤波器选取的信号对于图像的平移、伸缩、旋转等局部变化有…

信息学奥赛初赛天天练-20-完善程序-vector数组参数引用传递、二分中值与二分边界应用的深度解析

PDF文档公众号回复关键字:20240605 1 2023 CSP-J 完善程序1 完善程序(单选题,每小题 3 分,共计 30 分) 原有长度为 n1,公差为1等升数列,将数列输到程序的数组时移除了一个元素,导致长度为 n 的开序数组…

阿里云私有CA使用教程

点击免费生成 根CA详情 启用根CA -----BEGIN CERTIFICATE----- MIIDpzCCAogAwIBAgISBZ2QPcfDqvfI8fqoPkOq6AoMA0GCSqGSIb3DQEBCwUA MFwxCzAJBgNVBAYTAkNOMRAwDgYDVQQIDAdiZWlqaW5nMRAwDgYDVQQHDAdiZWlq aW5nMQ0wCwYDVQQKDARDU0REMQ0wCwYDVQQLDARDU0REMQswCQYDVQQDDAJDTjA…

【踏雪无痕的痕六】——数学中有意思的问题

一、背景介绍 提出一个问题往往比解决一个问题更有意义,因为提出一个问题相当于提出了一个思考问题的维度;而解决一个问题是沿着这个维度将已有的知识串起来的过程 三、过程 1.数人数你会吗? 小名再第10位,小李再第15位&#…

AI论文工具推荐

AI 在学术界的使用情况也比较疯狂,特别是一些美国大学,用 AI 来辅助阅读文献以及辅助写论文的越来越多,毕竟确实可以提高写作效率,特别是在文献综述和初稿生成方面。 但在科研界其实,发现看论文的速度已经赶不上发论文…

【踩坑记录】代码看起来没问题 但是报错No tab with id:1682523514.-作者:【小可耐教你学影刀RPA】

前言 有一个企业用户反馈 同一个代码 跑出来不同的结果 我也有点疑惑 是bug吗??我让他环境保持一致 还是出现这个报错~~~ 为了避免影响他的业务我还是决定远程~~~ 不远程还真发现不了这个问题~~~ 原因 业务的的代码如下 就一个很简单的循环点击获取新…

【Linux】Linux工具——gdb

1. gdb 概述 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能…

Vue3中的常见组件通信之v-model

Vue3中的常见组件通信之v-model 概述 ​ 在vue3中常见的组件通信有props、mitt、v-model、 r e f s 、 refs、 refs、parent、provide、inject、pinia、slot等。不同的组件关系用不同的传递方式。常见的撘配形式如下表所示。 组件关系传递方式父传子1. props2. v-model3. $r…

Spring Boot整合Jasypt 库实现配置文件和数据库字段敏感数据的加解密

😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Mi…