TCP相关问题总结

news/2024/5/20 12:47:23

文章目录

    • 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://www.mrgr.cn/p/20461761

相关文章

Git和Github绑定

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

11 c++版本的贪吃蛇

前言 呵呵 这大概是 大学里面的 c 贪吃蛇了吧 有一些 面向对象的理解, 但是不多 最近 因为想要 在单片机上面移植一下 贪吃蛇, 所以 重新拿出了一下 这份代码 然后 将它更新为 c 版本, 还是 用了一些时间 这里 具体的实现 就不赘述, 仅仅是 发一下代码 以及 具体的使用…

python库使用总结

python库的使用 1:print(补充)2:math 2.1:math库包括的4个数学常数2.2math库中的函数幂对数函数三角曲线函数3:字符串处理函数补充:sorted(str) 对字符串中的元素进行排序,返回排序后的列表,而不是字符串 ​ reversed(str) 对字符串中的元素反向输出 3.1 字符串…

python学习思维导图分享

python 本文包含了我的一些python学习的笔记和思维导图 第一部分:python基础导图下载链接 第二部分:函数及其他文件操作导图下载链接 第三部分:类及网络编程导图下载链接 第四部分:mysql导图下载链接

linux中如何挂载yum云仓库进行软件的安装

1.首先在根目录下建立文件&#xff0c;用来挂载镜像文件 [rootclient ~]# mkdir /rhel9 2.挂载镜像文件&#xff1a; [rootclient ~]# mount /dev/cdrom /rhel9 3.切换到 /etc/yum.repos.d 下的目录并查看 &#xff0c;创建 rhel9.repo文件&#xff0c;并编辑云仓库域名&am…

反爬虫方法

1.拒绝请求 a.根据 IP 判断 优点: 即时效果:一旦IP地址被封禁,来自该地址的流量将立即停止,从而防止了爬虫在封禁发生后进一步访问网站。 简单易行:IP封禁通常很容易实施,大多数服务器和CDN服务都提供了相应的工具来帮助封锁一系列的IP地址。 降低负载:通过封禁恶意或不…

计算机网络—— book

文章目录 一、概述1.1互联网的核心部分1&#xff0e;电路交换的主要特点2&#xff0e;分组交换的主要特点 1.2.计算机网络的性能1&#xff0e;速率2&#xff0e;带宽3&#xff0e;吞吐量4&#xff0e;时延5&#xff0e;利用率 1.3.计算机网络体系结构协议与划分层次具有五层协议…

简单理解盒子模型

1. 什么叫盒子模型 在html中大部分元素,特别是块元素display:block;都可以被看做一个盒子。网页布局就是一个一个盒子的平铺,堆叠,嵌套摆放。这么多的盒子放在一起,最重要的就是去关注他们的各种尺寸,边界等等,主要怕意料外的重叠一类导致的显示不正常。 2. W3C和IE盒子模…

物联网的基本功能及五大核心技术——青创智通

工业物联网解决方案-工业IOT-青创智通 物联网基本功能 物联网的最基本功能特征是提供“无处不在的连接和在线服务”&#xff0c;其具备十大基本功能。 &#xff08;1&#xff09;在线监测&#xff1a;这是物联网最基本的功能&#xff0c;物联网业务一般以集中监测为主、控制为…

类和对象【三】析构函数和拷贝构造函数

文章目录 析构函数析构函数的定义析构函数的作用主要作用次要作用 析构函数的特点 拷贝构造函数拷贝构造函数的定义拷贝构造函数的作用主要作用次要作用 拷贝构造函数的特点浅拷贝和深拷贝浅拷贝深拷贝 拷贝构造函数的调用场景 析构函数 析构函数的定义 析构函数(destructor) …

js逆向实战之中国男子篮球职业联赛官方网站返回数据解密

url:https://www.cbaleague.com/data/#/teamMain?teamId=29124 分析过程看流量包,返回数据全是加密的字符串,要做的就是解密回显数据。由于这里的网址都比较特殊,里面都带有id号,所以通过url关键字去搜索不是一个很好的办法。看initiators,里面有很多异步传输。异步传输…

Linux应急响应小结

通过系统运行状态、安全设备告警,主机异常现象来发现可疑现象通常的可疑现象有:资源占用、异常登录、异常文件、异常连接、异常进程等。目录用户排查历史命令网络排查进程排查文件排查持久化排查日志分析 通过系统运行状态、安全设备告警,主机异常现象来发现可疑现象通常的可…

XSS漏洞靶场

XSS漏洞靶场 level1 查看网站源码,发现get传参name的值test插入到了html头里面,还回显payload长度插入js代码,get传参 ?name=<script>alert()</script>本关小结:JS弹窗函数alert() level2貌似不对,查看下源码闭合掉双引号 "> <script>alert()&…

Laravel 6 - 第十一章 中间件

​ 文章目录 Laravel 6 - 第一章 简介 Laravel 6 - 第二章 项目搭建 Laravel 6 - 第三章 文件夹结构 Laravel 6 - 第四章 生命周期 Laravel 6 - 第五章 控制反转和依赖注入 Laravel 6 - 第六章 服务容器 Laravel 6 - 第七章 服务提供者 Laravel 6 - 第八章 门面 Laravel 6 - …

(2022级)成都工业学院数据库原理及应用实验六: SQL DML(增、删、改)

写在前面 1、基于2022级软件工程/计算机科学与技术实验指导书 2、成品仅提供参考 3、如果成品不满足你的要求&#xff0c;请寻求其他的途径 运行环境 window11家庭版 Navicat Premium 16 Mysql 8.0.36 实验要求 在实验三的基础上完成下列查询&#xff1a; 1、在科室表…

WIFI加密方式对无线速率的影响

目录无线加密三种选择:WEP、WPA和WPA2测试平台和测试方法非加密和WEP加密测试 结果差别巨大非加密条件下 300M无线路由实测WEP加密条件下 300M无线路由实测TKIP加密算法:WPA与WPA2成绩低迷WPA加密(TKIP加密算法)条件下 300M无线路由实测WPA2加密(TKIP加密算法)条件下 300…

10.Godot Input与自定义单例的使用

单例 单例是一个可以在任何一个脚本中对其进行直接访问的对象&#xff0c;分为内置单例与自定义单例。每个单例都是独一无二的对象。内置单例不是节点&#xff0c;主要成员是各类 Server&#xff0c;开发者可以使用它们直接控制游戏程序的图形与音效等内容。此外&#xff0c;还…

偶然看到一个古老的算法

九韶精选,你值得拥有只能说秦哥牛批!!!那个破三角公式到现在还没记住c++代码实现 #include<bits/stdc++.h> using namespace std; int n; int main(){cin>>n;//输入多项式的次数double *a=new double[n+1];//n次多项式申请n+1大小的数组for(int i=n;i>=0;i--)//…

JVM 内存溢出、泄漏与引用

1、引用概述在栈上的reference类型存储的数据代表某块内存地址,称reference为某内存、某对象的引用。实际上引用分为很多种,从强到弱分为:强引用 > 软引用 > 弱引用 > 虚引用。平常我们使用的引用实际上是强引用,各种引用有自己的特点,强引用就是Java中普通的对象…

解决VSCode中“#include错误,请更新includePath“问题

目录 1、问题原因 2、解决办法 1、问题原因 在编写C程序时&#xff0c;想引用头文件但是出现如下提示&#xff1a; &#xff08;1&#xff09;首先检查要引用的头文件是否存在&#xff0c;位于哪里。 &#xff08;2&#xff09;如果头文件存在&#xff0c;在编译时提醒VSCo…