当前位置: 首页 > news >正文

【网络|TCP】三次握手、四次握手

TCP是一种面向连接的可靠的传输协议,建立和断开TCP连接时需要进行握手的过程。其中,TCP的连接建立需要进行三次握手,而连接断开则需要进行四次握手。

解释

三次握手

  • 第一次握手:客户端发送一个SYN(同步)报文给服务器,表示客户端请求建立连接。这个报文中包含一个初始的序列号(sequence number)。

  • 第二次握手:服务器收到客户端的SYN报文后,会发送一个SYN+ACK(同步+确认)报文给客户端作为响应。这个报文中,SYN位被置为1,表示服务器同意建立连接,并且同时也发送一个确认序列号(acknowledge number)。

  • 第三次握手:客户端收到服务器的SYN+ACK报文后,会向服务器发送一个ACK(确认)报文。这个报文中,ACK位被置为1,表示客户端确认服务器的响应,并且发送一个确认序列号。

四次握手

  • 第一次握手:当客户端需要关闭连接时,发送一个FIN(结束)报文给服务器,表示自己已经没有数据要发送了,请求关闭连接。

  • 第二次握手:服务器发送一个ACK报文,服务器确认收到了关闭请求。此时,接收方进入半关闭状态,可以继续发送数据,但不再接收数据。

  • 第三次握手:服务器发送一个FIN报文给客户端,表示服务器也没有数据要发送了,并请求关闭连接。

  • 第四次握手:客户端收到服务器的FIN报文后,向服务器发送一个ACK报文,确认收到了关闭请求,并且发送一个确认序列号。

通俗易懂

        为什么要建立要三次,断开要四次?两次是否可以?断开三次行不行?

三次握手

        假设A和B是两个人要通过传纸条来交流。他们之间有一扇门,门上有一个信箱。他们希望通过这个信箱来传递纸条。但是,他们不确定对方是否能够收到和回复纸条。

  • 第一次握手:A先向B发出请求,他把一张纸条放进信箱,并敲了一下门。这个纸条上写着:“Hi B,我想和你建立通信连接,请确认你能够接收我的纸条。”此时,B收到了纸条,并知道A想要和他建立连接。但是,A并不知道B是否能够收到纸条。
  • 第二次握手:B收到纸条后,他在纸条上写下回复,并放进信箱里。然后,他也敲了一下门。这个纸条上写着:“Hi A,我收到了你的纸条,并且确认我能够接收你的纸条。我也想和你建立通信连接,请确认你能够接收我的回复。”此时,A收到了B的回复,并知道B能够接收纸条。但是,B并不知道A是否能够收到他的回复。
  • 第三次握手:A收到B的回复后,他在纸条上写下确认,并放进信箱里。然后,他再次敲了一下门。这个纸条上写着:“Hi B,我收到了你的回复,并且确认我能够接收你的纸条。我们可以建立通信连接了。”此时,B收到了A的确认,并知道A能够接收他的回复。双方都确认了彼此的通信能力。

        通过这个三次握手的过程,A和B都知道彼此的通信能力。他们可以开始通过传纸条来进行交流,而且双方都知道对方能够接收和回复纸条。这样,他们就建立了可靠的通信连接。

四次握手

        四次握手和三次握手原理基本一样,区别在与四次握手中B>A回了两次,原因是为了确保数据传输的完整性。第一次告诉A收到了,等B传输A的数据全部传输完毕后,再次告诉A传完了,可以关闭了。

总结

        如果三次握手改成两次,那就会导致B不知道A是否收到B发的请求,直接给A发数据,可能导致A收到这个数据。四次握手同理,每一次握手都是为了实现某些功能和解决某些问题,如果少了任何一步,就会导致这个问题的发生。

相关文章:

【网络|TCP】三次握手、四次握手

TCP是一种面向连接的可靠的传输协议,建立和断开TCP连接时需要进行握手的过程。其中,TCP的连接建立需要进行三次握手,而连接断开则需要进行四次握手。 解释 三次握手 第一次握手:客户端发送一个SYN(同步)报…...

刷题笔记 day7

力扣 209 长度最小的子数组 解法:滑动指针(对同向双指针区间内的数据处理) 1)先初始化 两个指针 left ,right。 2)右移指针right的同时使用sum记录指针right处的值,并判断sum的值是否满足要求&…...

Tuxera NTFS2023Mac强大的Mac读写工具

Mac用户在使用NTFS格式移动硬盘时,会遇到无法写入硬盘的情况。要想解决无法写入的问题,很多人选择使用Mac读写软件。面对市面上“众多”的读写硬盘软件,用户应该怎么选择呢?初次接触移动硬盘的伙伴可能不知道移动硬盘怎么和电脑连…...

ARM64 常见汇编指令学习 11 -- ARM 汇编宏 .macro 的学习

文章目录 ARM 汇编宏介绍ARM 汇编宏的使用 下篇文章:ARM64 常见汇编指令学习 12 – ARM 汇编函数 的学习 上篇文章:ARM64 常见汇编指令学习 10 – 无符号位域提取指令 BFXIL ARM 汇编宏介绍 在 ARM 汇编中,“.macro” 是用来定义一个宏的指…...

数据库的分库分表

#!/bin/bash ######################### #File name:db_fen.sh #Version:v1.0 #Email:admintest.com #Created time:2023-07-29 09:18:52 #Description: ########################## MySQL连接信息 db_user"root" db_password"RedHat123" db_cmd"-u${…...

[Docker实现测试部署CI/CD----相关服务器的安装配置(2)]

目录 6、Jenkins安装配置安装jdk安装maven拉取镜像启动jenkins修改数据卷权限浏览器访问安装插件配置jenkins移动JDK和Maven配置JDK和Maven 6、Jenkins安装配置 Jenkins 是一个开源软件项目,是基于 Java 开发的一种持续集成工具,用于监控持续重复的工作&…...

LC-980. 不同路径 III(回溯)

980. 不同路径 III 难度困难291 在二维网格 grid 上,有 4 种类型的方格: 1 表示起始方格。且只有一个起始方格。 2 表示结束方格,且只有一个结束方格。 0 表示我们可以走过的空方格。 -1 表示我们无法跨越的障碍。 返回在四个方向&…...

软件测试缺陷报告

缺陷报告是描述软件缺陷现象和重现步骤地集合。软件缺陷报告Software Bug Report(SBR)或软件问题报告Software Problem Report(SPR) 作用:缺陷报告是软件测试人员的工作成果之一,体现软件测试的价值缺陷报…...

vue js-table2excel 导出excel 可带多张图片

1.安装js-table2excel插件: npm install js-table2excel2.使用 2.1:引入 import table2excel from js-table2excel;2.2:导出函数 function exportExcel() {console.log(导出, table2excel);const column [{title: 二维码id,key: fname,type: text,},{title: 二维…...

HTML 基础标签

前言 当今互联网时代&#xff0c;网页是我们获取信息、交流和展示自己的重要渠道之一。而HTML&#xff08;超文本标记语言&#xff09;作为构建网页的基础&#xff0c;学习掌握HTML标签成为了必不可少的技能。 标题标签 <h1>~<h6>&#xff1a;这是用来定义标题的…...

Nginx使用proxy_cache指令设置反向代理缓存静态资源

场景 CentOS7中解压tar包的方式安装Nginx&#xff1a; CentOS7中解压tar包的方式安装Nginx_centos7 tar文件 怎么load_霸道流氓气质的博客-CSDN博客 参考上面流程实现搭建Nginx的基础上&#xff0c;实现静态资源的缓存设置。 注意上面安装时的目录是在/opt/nginx目录下&…...

React安装ant design组件库,并使用

ant design是一个很棒的组件库&#xff0c;官方地址&#xff1a;快速上手 - Ant Design 但是如何在React里面用起来&#xff0c;好像并不是很顺畅&#xff0c;没有像Vue里面那么友好&#xff0c;因为我踩过这个坑&#xff0c;虽然安装很简单&#xff0c;但是想要出样式&#x…...

Leetcode | 有效的括号、最长有效括号

一、有效的括号 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应…...

思科模拟器配置静态路由(下一跳使用IP)

Router0配置代码&#xff1a;##端口配置 Router(config)#int fastEthernet 0/0 Router(config-if)#ip address 192.168.10.254 255.255.255.0 Router(config-if)#no shutdown Router(config-if)#int fastEthernet 0/1 Router(config-if)#ip address 192.168.20.1 255.255.255.2…...

MyBatis -- 执行流程

传统JDBC开发 代码样例 import java.sql.*;public class JdbcExample {public static void main(String[] args) {Connection conn DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password");// 创建…...

springboot背诵

1、springboot简介 2、spring注解 Bean&#xff1a; Configuration&#xff1a; Component&#xff1a; Controller&#xff1a; Service&#xff1a; Repository&#xff1a; ComponentScan&#xff1a; Import&#xff1a; Conditional&#xff1a; ConfigurationProperties&…...

WebGL: 几个入门例子

本文罗列几个WebGL入门例子&#xff0c;用于帮助WebGL学习。 例子1&#xff1a;绘制三角形 <!DOCTYPE HTML> <html loang"en"><head><title>Triangle</title><meta charset"utf-8"><script>var gl;var canvas…...

App Cleaner Uninstaller for Mac 苹果电脑软件卸载工具

App Cleaner & Uninstaller 是一款非常有用的 Mac 应用程序清理和卸载工具。它可以彻底地清理系统中的应用程序、扩展和残留文件&#xff0c;以释放磁盘空间并优化系统性能。 此外&#xff0c;它还提供了磁盘空间监控和智能清理建议等功能&#xff0c;使用户可以轻松地管理…...

基于Yolov2深度学习网络的车辆检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1. 卷积神经网络&#xff08;CNN&#xff09; 4.2. YOLOv2 网络 4.3. 实现过程 4.4. 应用领域 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022A 3.部分核心…...

Java的I/O类库- NIO

Java NIO&#xff08;New I/O&#xff09;是Java平台提供的一种用于非阻塞I/O操作的API。它引入了一组新的Java类&#xff0c;用于实现高性能的、非阻塞的I/O操作&#xff0c;以替代传统的阻塞式I/O&#xff08;IO Blocking&#xff09;模型。Java NIO的核心是基于Channel&…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

MyBatis中关于缓存的理解

MyBatis缓存 MyBatis系统当中默认定义两级缓存&#xff1a;一级缓存、二级缓存 默认情况下&#xff0c;只有一级缓存开启&#xff08;sqlSession级别的缓存&#xff09;二级缓存需要手动开启配置&#xff0c;需要局域namespace级别的缓存 一级缓存&#xff08;本地缓存&#…...

git: early EOF

macOS报错&#xff1a; Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...

6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础

第三周 Day 3 &#x1f3af; 今日目标 理解类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;的关系学会定义类的属性、方法和构造函数&#xff08;init&#xff09;掌握对象的创建与使用初识封装、继承和多态的基本概念&#xff08;预告&#xff09; &a…...

VisualXML全新升级 | 新增数据库编辑功能

VisualXML是一个功能强大的网络总线设计工具&#xff0c;专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑&#xff08;如DBC、LDF、ARXML、HEX等&#xff09;&#xff0c;并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...

一些实用的chrome扩展0x01

简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序&#xff0c;无论是测试应用程序、搜寻漏洞还是收集情报&#xff0c;它们都能提升工作流程。 FoxyProxy 代理管理工具&#xff0c;此扩展简化了使用代理&#xff08;如 Burp…...

Xcode 16 集成 cocoapods 报错

基于 Xcode 16 新建工程项目&#xff0c;集成 cocoapods 执行 pod init 报错 ### Error RuntimeError - PBXGroup attempted to initialize an object with unknown ISA PBXFileSystemSynchronizedRootGroup from attributes: {"isa">"PBXFileSystemSynchro…...

Python爬虫实战:研究Restkit库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的有价值数据。如何高效地采集这些数据并将其应用于实际业务中,成为了许多企业和开发者关注的焦点。网络爬虫技术作为一种自动化的数据采集工具,可以帮助我们从网页中提取所需的信息。而 RESTful API …...