• 【JavaEE】网络原理---TCP协议的易懂图文详解(确认应答、超时重传、连接管理、滑动窗口、流量控制)


    一、TCP协议

    TCP,即Transmission Control Protocol,传输控制协议。人如其名,要对数据的传输进行一个详细的控制。

    1.1 TCP协议格式

    在这里插入图片描述
    (为了方便排版这样化的,我们从上到下依次理解)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    二、TCP原理

    2.1 确认应答

    确认应答是实现可靠性的最核心机制!!

    引例:
    在这里插入图片描述

    为了解决上述问题,我们给信息标号:
    在这里插入图片描述
    这样就能清楚的分出各自的应答

    而我们真实的TCP传输数据时也是这样的,引入了“序号”和“确认序号”

    在这里插入图片描述
    这就是确认应答机制

    比如下面两台主机的传输:
    在这里插入图片描述

    2.2 超时重传

    如果一切都顺利的话,就可以直接确认应答了,确认应答机制保证了可靠性

    可是我们网络传输需要经过很多节点,其中任何一个节点出现问题,都会导致丢包

    作为发送方会判定,如果出现丢包,就会重新再发一遍,即超时重传机制

    在这里插入图片描述
    这时候你可能有一个疑问:
    上面的(2)情况下,数据重复传了两次,接收方得到重复的数据!!这种情况不会有什么问题吗?

    不会!!!!

    TCP协议会在接收缓冲区中根据我们数据的序号来进行自动去重,保证应用读到的数据只有一份!

    假如同时有多个包丢失,TCP怎么确定超时时间?

    在这里插入图片描述
    上面介绍的这两种机制就是TCP可靠性的基石!!!

    在这里插入图片描述

    2.3 连接管理

    在这里插入图片描述
    下面详细说具体执行过程:

    三次握手:

    在这里插入图片描述
    在这里插入图片描述

    四次挥手:
    在这里插入图片描述
    可能这里大家会有疑问:为什么三次握手和四次挥手都是四次交互,而握手可以合并为一次,挥手却不行呢?

    在这里插入图片描述

    2.4 滑动窗口

    刚才我们讨论了确认应答策略,对每一个发送的数据段,都要给一个ACK确认应答。收到ACK后再发送下一个数据段。
    这样做有一个比较大的缺点,就是性能较差。尤其是数据往返的时间较长的时候。
    在这里插入图片描述

    想要提高效率,就需要缩短等待时间,批量发送数据!

    一次发多条数据,一次等待多个ACK,提高效率

    在这里插入图片描述
    上述批量传输数据的过程就称为“滑动窗口”

    注意:
    在这里插入图片描述
    在这里插入图片描述

    上述的滑动窗口都是基于无丢包的情况下工作的,如果批量发送的过程中出现丢包怎么办?

    在这里插入图片描述
    在这里插入图片描述

    2.5 流量控制

    接收端处理数据的速度是有限的。如果发送端发的太快,导致接收端的缓冲区被打满,这个时候如果发送端继续发送,就会造成丢包,继而引起丢包重传等等一系列连锁反应。
    因此TCP支持根据接收端的处理能力,来决定发送端的发送速度。这个机制就叫做流量控制

    具体如何控制?

    在这里插入图片描述
    过程演示:
    在这里插入图片描述
    上述过程就达成了类似阻塞的效果

    2.6 拥塞控制

    前面介绍的滑动窗口的大小取决于流量控制,其实还取决于拥塞控制
    在这里插入图片描述

    在这里插入图片描述
    那如何”拥塞控制机制“时如何衡量传输路径的处理能力的呢?
    在这里插入图片描述

    具体过程请看下面图解:

    在这里插入图片描述

    2.7 延时应答

    前面知道了”确认应答“保证了TCP的可靠性,在这个前提下,我们能不能同时提高点效率?

    通过延时应答就可以

    在这里插入图片描述
    为什么把ACK延时发送就可以提高效率?

    在这里插入图片描述
    在这里插入图片描述

    2.8 捎带应答

    捎带应答是基于延时应答的一种机制

    捎带应答是什么意思呢?下面我们来看:
    在这里插入图片描述

    2.9 面向字节流

    在这里插入图片描述
    在这里插入图片描述

    2.10 异常情况

    在这里插入图片描述

  • 相关阅读:
    放大器的输入、输出电压范围的理解
    使用$options初始化
    6176. 出现最频繁的偶数元素
    功能解剖学复习题
    git常用命令和开发常用场景
    (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
    欧科云链:角力Web3.0,香港如何为合规设线?
    测开小知识: Git目录下都放了什么
    使用Spring Boot注册整合方式整合Servlet三大组件
    【ajax跨域问题解决之jsonp】
  • 原文地址:https://blog.csdn.net/m0_68101404/article/details/134018344