软件测试面试真题 | TCP为什么要进行三次握手和四次挥手呢?

news2025/1/15 12:54:47

TCP为什么要进行三次握手和四次挥手呢?

在这个三次握手的过程中对应的消息内容是怎样进行传递的呢?

在四次挥手的过程中,是怎样告知对方断开连接的呢?

三次握手

在说对应概念之前,我们先来了解一个场景:

无论是工作还是没有工作的小伙伴,肯定都见过或经历过表白事件。那如果想要进行一次表白或者求婚,我们需要怎么做?

无论是表白、求婚都需要有对应的人,当然不只能有这个人,还需要和这个人建立一个连接。

不能说你自己把自己关在屋子里面自言自语的说,你能嫁给我吗?对方都没有听到你说的话,怎么会做出反应呢?

所以,最好是两个人面对面,才可以让对方听到到自己要说的话。约出来,面对面,就开始进行表白:

当然这种关系都是双方是能面对面找到对方的,即都是保持双方畅通的。

对应为TCP协议的三次握手如下图:

(1)第一次握手
Client请求与Server端建立连接。

这里只是尝试的请求建立连接,A到B的连接是否建立成功不知道

(2)第二次握手
Server在收到 Client 的请求后,响应ACK 报文 并分配资源。

这里B给A的ACK报文就表示Server同意 Client 跟它建立连接。

SYN表示Server也想尝试 Client 建立连接,此时Server到 Client 的连接是否建立还不确定。

(3)第三次握手
Client给Server发送ACK响应。在Server收到 Client的响应之后,此时双方的连接正式建立。

四次挥手

在说对应挥手概念之前,我们先来了解一个场景:

还是和上面场景有关,结婚了然后在一起共同生活了一段时间后,发现双方不合适,需要离婚,要离开对方,就是挥手告别。那这个时候要经历的场景是什么呢?

对应为TCP协议的四次挥手如下图:

(1)第一次挥手
客户端发送FIN给服务端,尝试请求断开单方的连接。

此时单方连接断开与否还不能确定,要等服务端确认,因此此时的客户端处于FIN_WAIT1状态。

(2)第二次挥手
服务端收到断开请求后,服务端向客户端发送ACK回应,表示能断开了。

此时只是客户端到服务端连接断开,处于半断开状态。

服务端状态为:CLOSE_WAIT

(3)第三次挥手
服务端给客户端发送FIN请求,此时服务端处于最后一次确认状态(LAST_ACK状态)。

此时还是没有断开连接,还得等待客户端回应。

(4)第四次挥手
客户端给服务端发送ACK回应。服务端收到之后,此时连接真正断开。

疑问点

  1. 为什么不是两次握手?为什么要三次?

因为真正连接的建立是要双方都建立到对方的连接。

如果只有两次握手,只能保证A到B的连接建立,但是B到A连接还未确认,所以第三次握手的主要作用就是A给B发送数据,如果没有第三次握手,A就不会发送数据,此时B的状态一直为等待,造成的现象就是浪费资源。

  1. 为什么要进行四次挥手?为什么三次不行?

因为在挥手过程中会传递相关数据。其中,ACK报文是用来的应答的,SYN报文是用来同步的。

在B收到A的FIN请求后,不会立即关闭SOCKET,会先发送一个ACK作为回应。所以A需要等B的数据发送完成之后,B会再给A发送一个FIN请求告诉A已经结束了,此时B发送给A的两次请求不能合并,所以必须是四次挥手。

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

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

相关文章

计算机网络 4 - 网络层

第4章 网络层:数据层面(Network Layer: Data Plane)4.1 网络层概述4.2 IP: Internet Protocol分类 IP 地址子网划分无分类域间路由 CIDRIP 地址的特点4.3 地址解析协议 ARP4.4 IP 数据包格式路由转发示例路由器转发算法使用二叉树查找转发表4.5 IP分配技术DHCPNAT 网…

celery

一 介绍 官网:https://docs.celeryq.dev/en/latest/index.html celery是一个简单、灵活、可靠的分布式系统,用于 处理大量消息,同时为操作提供 维护此类系统所需的工具。 Celery架构 Celery的架构由三部分组成,消息中间件&…

纸牌游戏新版小猫钓鱼设计制作

新版纸牌游戏《小猫钓鱼》设计制作 此游戏设计是我新创制的简单的卡牌游戏。属于儿童益智类游戏,适用于儿童的认知教育。 游戏规则很简单:找配对的牌消去。 游戏设置2个玩家对玩,鱼池置牌21张,玩家每人5张牌,二人轮转…

從turtle海龜動畫 學習 Python - 高中彈性課程系列 6.1 內嵌正多邊形 類似禪繞圖

Goal: 藉由有趣的「海龜動畫繪圖」學會基礎的 Python 程式設計 本篇介紹基礎的 Python 海龜動畫繪圖, 確實可以只以簡單的指令畫出極為複雜有趣或美麗的圖案: 內嵌正多邊形之圖案, 禪繞圖等 “Talk is cheap. Show me the code.” ― Linus Torvalds 老子第41章 上德若谷 大白…

Redis--1.CentOS8安装redis服务器

一、登录root账号 设置root密码: sudo passwd root切换到root账号: su root二、下载解压安装包 切换到根目录: cd / 1、创建存放路径: mkdir -p /usr/local/redis cd /usr/local/redis2、下载redis安装包:去官网找到redis连接地址如&…

基于jsp+mysql+ssm进销存管理系统-计算机毕业设计

本java进销存系统主要完成对超市的管理,包括会员管理、厂家管理、商品管理、退货管理,销售管理、进货管理、员工管理、系统管理等几个方面。系统可以完成对各类信息的浏览、查询、添加、删除、修改等功能。 系统采用了jsp的mvc框架,SSM(springMvcspringM…

告别手机自带浏览器,分享2022年好用的手机浏览器

对于喜欢使用手机上网冲浪的人来说,最喜欢用的一般都是小巧、强大、干净简洁的APP。作为上网常用的软件,好用的浏览器能够提高工作效率。而手机自带的浏览器往往占用资源大,而且广告很多,并夹带新闻、小说等无用功能,不…

自制操作系统日记(7):字符串显示

代码仓库地址:https://github.com/freedom-xiao007/operating-system 简介 上篇中我们在屏幕上画出了界面的大致轮廓,系统有了点模样,本篇继续跟着书籍,让程序中的字符串显示在屏幕上 效果展示 先放最终的效果,可以…

Linux磁盘分区,挂载介绍

分区的方式: mbr分区: 1.最多支持四个主分区 ⒉系统只能安装在主分区 3.扩展分区要占一个主分区 4.MBR最大只支持2TB,但拥有最好的兼容性 gtp分区: 1.支持无限多个主分区(但操作系统可能限制,比如windows下最多128个分区) ⒉.最大支持18E…

仿大众点评——秒杀系统部分02

秒杀系统优化 接口限流和安全措施 令牌桶限流单用户访问频率限流抢购接口隐藏 接口限流: 在面临高并发的请购请求时,我们如果不对接口进行限流,可能会对后台系统造成极大的压力。尤其是对于下单的接口,过多的请求打到数据库会对…

MVCC 底层实现原理

文章目录概述事务并发出现的问题脏读不可重复读幻读事务隔离级别MVCC 底层实现原理隐式字段undo 日志Read View总结概述 MVCC(Multi-Version Concurrency Control) ,叫做基于多版本的并发控制协议。 MVCC 是乐观锁的一种实现方式,它在很多情况下&#…

多线程增量下载K线数据

准备一份股票列表的CSV文件,文件格式如下 codenameclosecmvdate_ipo300434金石亚药12.89427982959020150424300380安硕信息19.31241993416320140128688123聚辰股份132.821114087266620191223300586美联新材20.34790882138120170104300534陇神戎发12.96389465063120…

Arduino与Proteus仿真实例-密码输入、验证与更新仿真

密码输入、验证与更新仿真 本次实例将通过4X4矩阵键盘、LCD1602、EEPROM实现一个密码输入匹配、储存、更新。 1、仿真电路原理图 在仿真电路原理图中,4X4矩阵键盘通过PCF8574 IO扩展器驱动,请参考前面文章: Arduino与Proteus仿真实例-PCF8574驱动4x4矩阵键盘仿真Arduino与…

大数据:Flume安装部署和配置

文章目录Flume 简介一,Flume下载和安装1)登录[Flume官网](https://flume.apache.org/),下载 apache-flume-1.9.0-bin.tar.gz2)解压文件到 /opt 目录下3)改名为 flume二,Flume配置1)修改 /conf/ …

.Net开发——EFCore

1 EFCore是一个ORM框架 EFCore(EntityFramworkCore)是对底层ADO.NET重新封装的一个数据操作框架,因此ADO.NET支持的多种数据库都可以被EFCore支持。 EF Core 可用作对象关系映射程序 (O/RM),这可以实现以下两点: 使 .NET 开发人员能够使用…

Python医学数据分析入门,推荐你学习这本书

医学生学习Python的难点通常在于 没有系统的编程教育,很难短时间内使用编程语言描述问题及其解答过程相关教程、案例少,想要练习缺少素材 所以这里就给大家推荐一本比较新比较前沿的教医学生学习Python的书《Python医学数据分析入门》 这本书的切入点为…

代码随想录——分割回文串 II

题目 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是回文。 返回符合要求的 最少分割次数 。 示例 1: 输入:s “aab” 输出:1 解释:只需一次分割就可将 s 分割成 [“aa”,“b”] 这样两个回文子…

Oracle技术分享 创建外键报错ORA-00906

问题描述:给表创建外键报错ORA-00906,具体过程如下: 数据库:oracle 11.2.0.464位 scottORCL2022-10-18 19:10:40> selectindex_name,table_name,tablespace_name,status,last_analyzed from user_indexes; INDEX_NAME TABLE…

事务【mysql】

1、事务的概念 事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。 在不同的环境中,都可以有事务。对应在数据库中,就是数据库事务。 把多个操作打包成一个整体,要么全部都执行完…

【#HDC2022】HarmonyOS体验官活动正式开启,赶快投稿赢限量奖品吧!

1. 【活动简介】 HDC 2022 于11月4日线上线下正式开启。历时一年,在无数开发者的共同努力下,我们汇聚了HarmonyOS生态的新成果、新体验、新开放能力,邀你参与到HarmonyOS的每一步成长和构建中。 本次HarmonyOS体验官活动,将以文章…