TCP相关问题总结

文章目录

    • TCP连接建立过程
      • 1. TCP三次握手
      • 2. TCP四次挥手
      • 3. TCP为什么是三次握手
      • 4. TCP为什么是四次挥手
    • TCP流量控制
    • TCP拥塞控制
      • 1. 为什么需要拥塞控制
      • 2. 控制手段
    • TCP连接建立过程中出现丢包

TCP连接建立过程

1. TCP三次握手

在这里插入图片描述
首先client端发出连接请求,并且请求同步位SYN置为1,表示连接建立请求。此外传递seq序号(假设初始值为500)

然后server端接收SYN后,发送ACK确认请求,seq=501,表示对client发送的SYN请求的确认;此外,server也需要发送SYN请求,seq=700(假设服务端初值为700)

最后client端接收请求,对server端的SYN进行确认,发送ACK请求,seq=701

至此,三次握手完成,连接建立

2. TCP四次挥手

在这里插入图片描述
首先,客户端发起断开客户端连接请求。客户端向服务端发送FIN请求

服务端接收请求,并告诉客户端已经接收到客户端发起的断开请求。此时客户端的消息发送通道断开

然后,服务端执行类似流程,关闭服务端发送消息到客户端的通道

3. TCP为什么是三次握手

假设TCP是两次握手,则可能会发生以下情况

客户端发起TCP握手,向服务器发送SYN,但该数据因网络波动滞留

此时触发超时重传,重新简历TCP连接

当新建立的连接断开后,之前在网络中滞留的SYN连接请求传递到服务端,服务端误以为客户端需要建立TCP连接,因此会发送SYN+ACK请求,并进入连接建立状态,但客户端并不需要建立连接,不会发送数据,因此会造成服务端资源的浪费

在这里插入图片描述

三次握手可以防止客户端无效连接信息再次到达服务器,导致重新连接

4. TCP为什么是四次挥手

之所以需要四次挥手,因为半关闭

tcp通道允许双方互相发送数据,数据是双向流动的。在关闭管道的时候,就需要关闭两次

一次是关闭 client --> server;另一次是关闭 client <-- server

每次关闭都需要执行两步操作:1.发出断开请求,2.确认断开请求

TCP流量控制

接收方通过窗口(Window)的大小来控制发送方的发送速率,防止发送方发送过多数据导致接收方无法处理

在这里插入图片描述
上图中,rwnd就是接收方对发送方数据发送窗口大小的控制

需要注意的是,如果接收方没有多余的空间接收数据,会控制发送方的发送窗口大小为0,此时发送方不会发送数据

当接收方缓存空间存在剩余,才会重新控制发送方的窗口大小,接收方发送窗口非零通知

但是,接收方的发送的非零通知在传输过程中丢失了,那么就会出现双方等待彼此发送数据,进而导致死锁现象发生

在这里插入图片描述
针对非零窗口通知丢失问题,数据发送方会开启计时器,如果在计时器内没有收到非零窗口通知,那么接收方会发送探测报文,查看接收方是否有剩余空间用于接收数据。

往复如是,直到发送方窗口大小设置非零

通过计时器的方式能够较好的解决非零通知数据传递丢失的问题

在这里插入图片描述

TCP拥塞控制

1. 为什么需要拥塞控制

在这里插入图片描述
简单来说,网络负载是优先的,如果短时间内涌入大量请求,远远超出了网络承受能力,网络可能会出现瘫痪

就像弹簧一样,一旦过度拉伸,弹簧就丧失了弹性

2. 控制手段

  • 慢启动(Slow Start):

    • 因为在网络初期,不了解接收端对网络数据的接收能力,一次性涌入大量数据可能会导致网络瘫痪,因此先发送少量数据,然后倍增,呈现指数上涨
    • 过程: 发送端初始设定一个拥塞窗口(cwnd),每经过一个往返时间(RTT),拥塞窗口大小加倍。随着时间的推移,数据发送速率逐渐增大,呈现指数增长。
  • 拥塞避免(Congestion Avoidance):

    • 避免过度快速增大拥塞窗口,维持网络的稳定性。
    • 过程: 当慢启动阶段结束后,cwnd的增长方式从指数变为线性。在拥塞避免阶段,每当接收到一个新的ACK时,cwnd按比例增加
  • 快速重传(Fast Retransmit):

    • 提高数据传输的可靠性,及时识别并快速补发丢失的数据包,减少不必要的等待时间,防止发送方误以为网络瘫痪,将cwnd置为1,启动慢开始算法,从而提升整体传输效率
    • 过程: 当发送端收到三个相同的确认(Duplicate ACK)时,就认为有一个数据包丢失,立即重传该数据包而不等待超时。
  • 快速恢复(Fast Recovery):

    • 在发生数据包丢失后,快速调整拥塞窗口以减小对网络的压力,同时尽快恢复数据传输,使网络能更快地回到稳定状态
    • 过程: 在快速重传后,拥塞窗口减半,然后进入拥塞避免阶段。

在这里插入图片描述

  • 有关快速重传的不中补充在这里插入图片描述

TCP连接建立过程中出现丢包

TCP连接过程,需要经历三次握手。此时如果出现丢包问题,数据发送方会等待对方的确认信息,如果超过预定时间还没有接收到信息,则会进行超时重传

如果是第一次、第二次握手,重传可以理解,因为这两次的握手都是建立在对方回应的基础上才能进行的。但如果是第三次握手信息丢包呢?客户端发送ACK确认信息给服务端,但该条信息丢失了,而第三次握手服务端无需确认,那客户端如何感知到呢?

如果ACK成功送达服务端,服务端会将TCP连接状态更改为ESTABLISHED,并准备接收客户端的数据。客户端可以通过尝试发送数据来检验连接是否已建立。如果服务端成功接收了数据且没有返回错误(如RST报文),则可以推断ACK报文已经成功发送;否则认为连接建立失败,重新发送ACK

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

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

相关文章

RAG:智能图书馆员引领AI的知识之旅

想象一下&#xff0c;你是一个法官&#xff0c;面对一个复杂的案件&#xff0c;你需要查阅大量的法律文献来找到相关的案例和法律条文。在AI的世界里&#xff0c;也有一个类似的“法官”——大型语言模型&#xff08;LLMs&#xff09;。它们能够回答各种问题&#xff0c;但有时…

【大模型系列】预训练

数据 数据预处理 预处理流程&#xff1a; 原始语料库—>质量过滤&#xff08;语种过滤、统计过滤、关键词过滤、分类器过滤&#xff09;—>敏感内容过滤&#xff08;有毒内容、隐私内容PII&#xff09;—>数据去重&#xff08;句子级别、文档级别、数据集级别&#…

文件读取和写入

1、with open 和 open close 的对比 with open 的优点 1、自动关闭文件&#xff1a;with 语句会在代码块执行完毕后自动关闭文件&#xff0c;无需显式调用 close() 方法。 2、异常安全&#xff1a;如果在代码块中发生异常&#xff0c;with 语句仍然会确保文件被正确关闭。 3、…

2024大连化工展|中国(大连)国际化工产业展览会

2024大连化工展|中国&#xff08;大连&#xff09;国际化工产业展览会 时间&#xff1a;2024年7月24-26日 地点&#xff1a;大连世界博览广场 大会主题&#xff1a;共谋新发展 共创新机遇 大连作为东北地区最具活力和发展潜力的城市&#xff0c;同时也是我国重要的化工产业基…

上网行为管理软件怎么选 三款好用的上网行为管理软件

上网行为管理软件怎么选 三款好用的上网行为管理软件 一款优秀的上网行为管理软件可以满足企业的多种需求&#xff0c;帮助企业有效监督员工的行为&#xff0c;提升工作效率和企业效益&#xff0c;但是这些软件差异较大&#xff0c;选择的时候需要考虑这些因素。 1、明确需求 …

(2024)Visual Studio的介绍、安装与使用

Visual Studio介绍 1.Visual Studio是什么&#xff1f; Visual Studio是微软公司推出的一款开发工具包系列产品&#xff0c;它是一个基本完整的开发工具集&#xff0c;为软件开发者提供了整个软件生命周期中所需的大部分工具。 2.Visual Studio的定义 Visual Studio是美国微软公…

kerberos:介绍

文章目录 一、介绍二、kerberos框架1、名词解释2、框架 三、优缺点四、其他认证机制1、SSL2、OAuth3、LDAP 一、介绍 Kerberos是一种计算机网络授权协议&#xff0c;主要用于在非安全网络环境中对个人通信进行安全的身份认证。这个协议由麻省理工学院&#xff08;MIT&#xff…

C语言 | Leetcode C语言题解之第40题组合总和II

题目&#xff1a; 题解&#xff1a; int** ans; int* ansColumnSizes; int ansSize;int* sequence; int sequenceSize;int** freq; int freqSize;void dfs(int pos, int rest) {if (rest 0) {int* tmp malloc(sizeof(int) * sequenceSize);memcpy(tmp, sequence, sizeof(int…

【QT学习】9.绘图,三种贴图,贴图的转换,不规则贴图(透明泡泡)

一。绘图的解释 Qt 中提供了强大的 2D 绘图系统&#xff0c;可以使用相同的 API 在屏幕和绘图设备上进行绘制&#xff0c;它主要基于QPainter、QPaintDevice 和 QPaintEngine 这三个类。 QPainter 用于执行绘图操作&#xff0c;其提供的 API 在 GUI 或 QImage、QOpenGLPaintDev…

Jmeter04:关联

1 Jmeter组件&#xff1a;关联 概括&#xff1a;2个请求之间不是独立的&#xff0c;一个请求响应的结果是作为另一个请求提交的数据&#xff0c;存在数据交互 1.1 是什么&#xff1f; 就是一个请求的结果是另一个请求提交的数据&#xff0c;二者不再是独立 1.2 为什么&#x…

docker容器内彻底移除iptables服务的实现方法

背景 我创建的容器使用的是centos6的标准镜像&#xff0c;所以内置了iptables服务。容器启动后iptables服务默认就启动了。iptables设置的规则默认是所有流量都无法通行。而对于服务器的管理使用的是宿主机的防火墙。这样就导致在实现用iptables动态给容器添加端口映射时不成功…

RocketMQ快速入门:group、topic、queue、tag等基本概念(四)

0. 引言 上一节&#xff0c;我们说明了rocketmq中的4个核心组成以及他们之间的工作关系。但其中穿插的topic, queue等概念&#xff0c;如果未接触过mq的同学可能会有些迷糊&#xff0c;所以本节&#xff0c;我们重点针对rocketmq中的基本概念进行讲解&#xff0c;之前学习过其…

中北大学软件学院操作系统实验二进程调度算法

实验时间 2024年 4 月13日14时至16时 学时数 2 1.实验名称 实验二进程调度算法 2.实验目的 (1)加深对进程的概念及进程调度算法的理解&#xff1b; (2)在了解和掌握进程调度算法的基础上&#xff0c;编制进程调度算法通用程序&#xff0c;将调试结果显示在计算机屏幕上&am…

第九章 进程和计划任务管理【☆】

一个进程可以创建多个子进程&#xff0c;子进程之间相互独立&#xff0c;速度较慢&#xff0c;但是互不影响。线程是共享资源&#xff0c;速度快&#xff0c;但一个线程崩掉其他线程同时崩掉。 一、查看进程信息 1. 查看静态的进程统计信息——ps命令 主要进程状态 R(runnin…

在控制台实现贪吃蛇

在控制台实现贪吃蛇 前备知识Win32APICOORD这个结构体的声明如下&#xff1a;GetStdHandle 函数GetConsoleCursorInfo 函数SetConsoleCursorInfo 函数 SetConsoleCursorPosition 函数getAsyncKeyState 函数 控制台窗口的大小以及字符打印介绍控制台中的坐标宽字符及本地化介绍s…

BBS前后端混合项目--03

展示 static/bootstrp # bootstrap.min.css /*!* Bootstrap v3.4.1 (https://getbootstrap.com/)* Copyright 2011-2019 Twitter, Inc.* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)*//*! normalize.css v3.0.3 | MIT License | github.com/n…

OSPF大型实验

OSPF大型实验 实验拓扑图 实验思路 1、R4为ISP&#xff0c;其上只配置IP地址&#xff1b;R4与其他所直连设备间均使用公有IP&#xff1b; 2、R3-R5、R6、R7为MGRE环境&#xff0c;R3为中心站点&#xff1b; 3、整个OSPF环境IP基于172.16.0.0/16划分&#xff1b;除了R12有两…

2013-2021年各省经济韧性相关测度指标面板数据

2013-2021年各省经济韧性相关测度指标面板数据 1、时间&#xff1a;2013-2021年 2、指标&#xff1a;城镇化率 %、财政科学技术支出&#xff08;亿元&#xff09;、万人高等教育在校人数&#xff08;万人&#xff09;、财政教育支出&#xff08;亿元&#xff09;、第三产业占…

[SWPUCTF 2021 新生赛]re2(不同字符加密相同,逆向修改范围)

无壳 直接看ida 完整exp&#xff1a; resultlist(ylqq]aycqyp{) for i in range(len(result)):if (ord(result[i])<94 or ord(result[i])>96) and (ord(result[i])<62 or ord(result[i])>64):result[i]chr(ord(result[i])2)else:result[i]chr(ord(result[i])-24)…

Linux-进程间通信:System V消息队列

目录 System V IPC概述标识符与IPC Key System V消息队列创建或打开一个消息队列发送消息接收消息控制消息队列1、IPC_STAT2、IPC_SET3、IPC_RMID 查看系统当前的消息队列代码示例 System V IPC&#xff08;Inter-Process Communication&#xff09;是一组用于在 Unix-like 操作…