图解TCP三次握手|深度解析|为什么是三次

2024-09-09 04:04

本文主要是介绍图解TCP三次握手|深度解析|为什么是三次,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

写在前面

这篇文章我们来讲解析 TCP三次握手
在这里插入图片描述

TCP 报文段

传输控制块TCB:存储了每一个连接中的一些重要信息。比如TCP连接表,指向发送和接收缓冲的指针,指向重传队列的指针,当前的发送和接收序列等等。

我们再来看一下TCP报文段的组成结构
在这里插入图片描述

TCP 三次握手

过程

假设有一台客户端,B有一台服务器。最初两端的TCP进程都是处于CLOSED关闭状态,客户端A打开链接,服务器端被打开链接。
一开始B的TCP服务器进程先创建传输控制块TCB,准备接受客户进程的链接请求,然后服务器进程就处于LISTEN收听状态,等待A的连接请求。

  1. 然后客户端进程首先创建传输控制模块TCB。向服务端发出连接请求报文段,这是首部当中的同步位SYN=1,同时选择一个初始序号seq=x。TCP规定,SYN报文段(即SYN=1的报文段)不能写数据,但要消耗掉一个序号。
    在这里插入图片描述

  2. 这时候客户端就进入了同步已发送的状态。服务端收到连接请求报文段后,如果同意建立连接,则向客户端发送确认,在确认报文段中把SYN位和ACK位置都置为1,确认号为ack+1,同时也为自己选择一个初始序号y。同样的这个报文段也是不能写数据的,但同时要消耗掉一个序号。这时服务端进入了同步收到状态。
    在这里插入图片描述

  3. 客户端收到服务端的确认之后,向服务端给出确认。确认报文段的ACK置1,确认号ack=y+1,而自己的seq=x+1。ACK报文段是可以携带数据的,但如果不携带数据则不消耗序号,在这种情况下,下一个数据报文段的序号仍为seq=x+1

在这里插入图片描述

这时候TCP已经建立了。两端都进行入了已经建立连接的阶段状态

为什么是三次握手呢?

TCP是全双工,并且为了证明双方的收发能力只是一个表面的现象。更深层是为了防止 已失效的连接请求报文段突然又传送到了B 因而产生重复连接或者资源浪费

我们来分析一下:

  1. 首先是正常情况:A发出连接请求,但因连接请求报文丢失而未收到确认。于是A再重传一次连接请求。后来收到了确认,建立了连接。数据传输完毕后,就释放了连接。
    在这里插入图片描述
    A共发送了两次连接报文请求,其中第一个丢失,第二个到达了B,没有已失效的连接请求报文段
    在这里插入图片描述

  2. 接下来是坏的情况:A发出的第一个连接请求报文段并没有丢失,而是在某些网络长时间滞留了,以致于到连接释放以后的某个时间才到达B。本来这是一个早已失效的报文段,但B收到此失效的连接请求报文段后,就误认为是A又发出一次新的连接请求。于是B就向A发出确认报文段,同意报文连接。

在这里插入图片描述
但是由于现在A并没有发出建立连接的请求,因此不会理睬B的确认,也不会向B发送数据。 但B以为新的运输连接已经建立了,并一直等待A发送数据来,B的许多资源就这样白白浪费了!

  1. 又有一种情况是:A接受了这次连接,所以又进行一次不必要的连接。
    在这里插入图片描述

如果缺乏第三次握手,服务器无法知道客户端是否正确接收到了建立连接的ACK确认信号。因此,如果消息在网络中出现滞留,客户端将一直重复发送SYN请求(因为有消息滞留,意味着有客户端没收到响应,认为超时,所以重传了),导致服务器不断建立新的连接。这将增加网络拥塞和延迟,并对整个网络性能产生负面影响。

有同学可能会疑惑,怎么A有时候接受,有时候又拒绝??
这是因为现实的网络是很复杂的,很多情况并不是按照我们所设想或者所规划的进行,任何情况都有可能会发生。

三次握手无懈可击?

并不是无限可击。SYN-Flood攻 击是当前网络上最为常见的DDoS攻击,也是最为经典的拒绝服务攻击。

攻击者首先伪造地址对服务器发起SYN请求,服务器回应(SYN+ACK)包,而真实的IP会认为,我没有发送请求,不作回应。

在这里插入图片描述

服务器没有收到回应,这样的话,服务器不知道(SYN+ACK)是否发送成功,默认情况下会重试5次(tcp_syn_retries)。这样的话,对于服务器的内存,带宽都有很大的消耗。攻击者如果处于公网,可以伪造IP的话,对于服务器就很难根据IP来判断攻击者,给防护带来很大的困难。

那改进成四次握手?

三次握手有的缺陷,就算N次握手,也一样会有相关问题的出现!三次握手是在连接顺利的基础上最大地合理利用网络资源

参考

[1] https://www.cnblogs.com/guoxiaoyu/p/17716038.html
[2] https://blog.csdn.net/u011037593/article/details/115024040

这篇关于图解TCP三次握手|深度解析|为什么是三次的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1150106

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

韦季李输入法_输入法和鼠标的深度融合

在数字化输入的新纪元,传统键盘输入方式正悄然进化。以往,面对实体键盘,我们常需目光游离于屏幕与键盘之间,以确认指尖下的精准位置。而屏幕键盘虽直观可见,却常因占据屏幕空间,迫使我们在操作与视野间做出妥协,频繁调整布局以兼顾输入与界面浏览。 幸而,韦季李输入法的横空出世,彻底颠覆了这一现状。它不仅对输入界面进行了革命性的重构,更巧妙地将鼠标这一传统外设融入其中,开创了一种前所未有的交互体验。 想象

OWASP十大安全漏洞解析

OWASP(开放式Web应用程序安全项目)发布的“十大安全漏洞”列表是Web应用程序安全领域的权威指南,它总结了Web应用程序中最常见、最危险的安全隐患。以下是对OWASP十大安全漏洞的详细解析: 1. 注入漏洞(Injection) 描述:攻击者通过在应用程序的输入数据中插入恶意代码,从而控制应用程序的行为。常见的注入类型包括SQL注入、OS命令注入、LDAP注入等。 影响:可能导致数据泄

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

免费也能高质量!2024年免费录屏软件深度对比评测

我公司因为客户覆盖面广的原因经常会开远程会议,有时候说的内容比较广需要引用多份的数据,我记录起来有一定难度,所以一般都用录屏工具来记录会议内容。这次我们来一起探索有什么免费录屏工具可以提高我们的工作效率吧。 1.福晰录屏大师 链接直达:https://www.foxitsoftware.cn/REC/  录屏软件录屏功能就是本职,这款录屏工具在录屏模式上提供了多种选项,可以选择屏幕录制、窗口

多线程解析报表

假如有这样一个需求,当我们需要解析一个Excel里多个sheet的数据时,可以考虑使用多线程,每个线程解析一个sheet里的数据,等到所有的sheet都解析完之后,程序需要提示解析完成。 Way1 join import java.time.LocalTime;public class Main {public static void main(String[] args) thro