【备战面试】TCP的三次握手与四次挥手

news2025/1/20 3:54:11

本篇总结的是计算机网络知识相关的面试题,后续也会更新其他相关内容

文章目录

  • 1、TCP头部结构
  • 2、三次握手
  • 3、四次挥手
  • 4、为什么TCP连接的时候是三次?两次是否可以?
  • 5、为什么TCP连接的时候是三次,关闭的时候却是四次?
  • 6、TIME_WAIT和CLOSE_WAIT的区别在哪?
  • 7、为什么客户端发出第四次挥手的确认报文后要等2MSL的时间才能释放TCP连接?
  • 8、如果已经建立了连接,但是客户端突然出现故障了怎么办?
  • 9、三次握手过程中可以携带数据吗?
  • 10、各种状态的含义


1、TCP头部结构

在介绍三次握手与四次挥手之前我们先来了解一下TCP的头部结构是什么样的。

TCP头部的最大长度为60字节,其中包括TCP报文固定长度20字节+可变字节(最大40字节),具体结构如下:

在这里插入图片描述
在认识三次握手与四次挥手之前我们必须要直到以下字段及含义:

  • 序号seq,占32位,用来标识从发送端到接收端发送的字节流。
  • 确认号ack,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1
  • 标志位
    • SYN:发起一个新连接。
    • FIN:释放一个连接。
    • ACK:确认序号有效。

在学习三次握手四次挥手后我们需要能流畅描述三次握手的流程及其中的字段含义作用的同时还需要记住每次握手时接收端和发送端的状态

2、三次握手

在三次握手中发送端有CLOSEDSYN-SENTESTABLISHED三种状态,接收端有CLOSEDLISTENSYN-RCVDESTABLISHED四种状态。

三次握手过程如下图:

在这里插入图片描述
假设发送端为客户端,接收端为服务端。开始时客户端和服务端的状态都是CLOSE

  • 第一次握手:客户端向服务端发起建立连接请求客户端会随机生成一个起始序列号x,客户端向服务端发送的字段中包含标志位SYN=1序列号seq=x
  • 第一次握手前客户端的状态为CLOSE第一次握手后:客户端的状态为SYN-SENT,此时服务端的状态为LISTEN
  • 第二次握手:服务端在收到客户端发来的报文后,会随机生成一个服务端起始序列号y,然后给客户端回复一段报文,其中包括标志位SYN=1ACK=1序列号seq=y确认号ack=x+1
  • 第二次握手前服务端的状态为LISTEN第二次握手后服务端的状态为SYN-RCVD,此时客户端的状态为
    SYN-SENT
  • 第三次握手:客户端收到服务端发来的报文后,会再向服务端发送报文,其中包含标志位ACK=1序列号seq=x+1确认号ack=y+1
  • 第三次握手前客户端的状态为SYN-SENT第三次握手后客户端和服务端的状态都为ESTABLISHED

需要注意的一点是:

  1. 第一次握手,客户端向服务端发起建立连接报文,会占一个序列号。
  2. 但是第三次握手,同样是客户端向服务端发送报文,这次却不占序列号.
  3. 所以建立连接后,客户端向服务端发送的第一个数据的序列号为x+1。

3、四次挥手

客户端在四次挥手过程中有ESTABLISHEDFIN-WAIT-1FIN-WAIT-2TIME-WAITCLOSED等五个状态,服务端有ESTABLISHEDCLOSE-WAITLAST-ACKCLOSED等四种状态。

四次挥手过程如下图:

在这里插入图片描述
假设客户端首先发起的断开连接请求

  • 第一次挥手:客户端向服务端发送的数据完成后,向服务端发起释放连接报文,报文包含标志位
    FIN=1序列号seq=u。此时客户端只能接收数据,不能向服务端发送数据。
  • 第二次挥手:服务端收到客户端的释放连接报文后,向客户端发送确认报文,包含标志位ACK=1序列号seq=v确认号ack=u+1。此时客户端到服务端的连接已经释放掉,客户端不能像服务端发送数据,服务端也不能向客户端发送数据。但服务端到客户端的单向连接还能正常传输数据。
  • 第三次挥手:服务端发送完数据后向客户端发出连接释放报文,报文包含标志位FIN=1标志位ACK=1序列号seq=w确认号ack=u+1
  • 第四次挥手:客户端收到服务端发送的释放连接请求,向服务端发送确认报文,包含标志位ACK=1序列号seq=u+1确认号ack=w+1

4、为什么TCP连接的时候是三次?两次是否可以?

答:不可以,主要从以下两方面考虑(假设客户端是首先发起连接请求):

  1. 假设建立TCP连接仅需要两次握手,那么如果第二次握手时,服务端返回给客户端的确认报文丢失了,客户端这边认为服务端没有和他建立连接,而服务端却以为已经和客户端建立了连接,并且可能服务端已经开始向客户端发送数据,但客户端并不会接收这些数据,浪费了资源。如果是三次握手,不会出现双方连接还未完全建立成功就开始发送数据的情况。
  2. 如果服务端接收到了一个早已失效的来自客户端的连接请求报文,会向客户端发送确认报文同意建立TCP连接。但因为客户端并不需要向服务端发送数据,所以此次TCP连接没有意义并且浪费了资源。

5、为什么TCP连接的时候是三次,关闭的时候却是四次?

答:因为需要确保通信双方都能通知对方释放连接

  1. 假设客户端发送完数据向服务端发送释放连接请求,当客户端并不知道,服务端是否已经发送完数据,所以此次断开的是客户端到服务端的单向连接
  2. 服务端返回给客户端确认报文后,服务端还能继续单向给客户端发送数据
  3. 当服务端发送完数据后还需要向客户端发送释放连接请求
  4. 客户端返回确认报文,TCP连接彻底关闭

所以断开TCP连接需要客户端和服务端分别通知对方并分别收到确认报文,一共需要四次。

6、TIME_WAIT和CLOSE_WAIT的区别在哪?

答:默认客户端首先发起断开连接请求,从上图可以看出:

  • CLOSE_WAIT是被动关闭形成的,当客户端发送FIN报文,服务端返回ACK报文后进入CLOSE_WAIT。
  • TIME_WAIT是主动关闭形成的,当第四次挥手完成后,客户端进入TIME_WAIT状态。

7、为什么客户端发出第四次挥手的确认报文后要等2MSL的时间才能释放TCP连接?

答:其中MSL的意思是报文的最长寿命,可以从两方面考虑:

  1. 客户端发送第四次挥手中的报文后,再经过2MSL,可使本次TCP连接中的所有报文全部消失,不会出现在下一个TCP连接中。
  2. 考虑丢包问题,如果第四挥手发送的报文在传输过程中丢失了,那么服务端没收到确认ack报文就会重发第三次挥手的报文。如果客户端发送完第四次挥手的确认报文后直接关闭,而这次报文又恰好丢失,则会造成服务端无法正常关闭

可靠的实现TCP全双工连接的终止;
允许老的重复分节在网络中消逝。

8、如果已经建立了连接,但是客户端突然出现故障了怎么办?

答:如果TCP连接已经建立,在通信过程中,客户端突然故障,那么服务端不会一直等下去,过一段时间就关闭连接了。具体原理是TCP有一个保活机制,主要用在服务器端,用于检测已建立TCP链接的客户端的状态,防止因客户端崩溃或者客户端网络不可达,而服务器端一直保持该TCP链接,占用服务器端的大量资源(因为Linux系统中可以创建的总TCP链接数是有限制的)。

保活机制原理:设置TCP保活机制的保活时间keepIdle,即在TCP链接超过该时间没有任何数据交互时,发送保活探测报文;设置保活探测报文发送时间间隔keepInterval;设置保活探测报文的总发送次数keepCount。如果在keepCount次的保活探测报文均没有收到客户端的回应,则服务器端即关闭与客户端的TCP连接

9、三次握手过程中可以携带数据吗?

答:第三次握手的时候可以携带数据的,第一次、第二次握手不可以携带数据。

  • 假如第一次握手可以携带数据的话,如果有人要恶意攻击服务器,那他每次都在第一次握手中的 SYN 报文中放入大量的数据,然后疯狂着重复发 SYN 报文的话,这会让服务器花费很多时间、内存空间来接收这些报文。也就是说,第一次握手不可以放数据,其中一个简单的原因就是会让服务器更加容易受到攻击了
  • 第一次、第二次握手都有SYN报文所以第一次、第二次握手都不可以携带数据。
  • 而对于第三次的话,此时客户端已经处于 ESTABLISHED 状态。对于客户端来说,他已经建立起连接了,并且也已经知道服务器的接收、发送能力是正常的了,所以能携带数据也没啥毛病。

10、各种状态的含义

  • CLOSED:不在连接状态(这是为方便描述假想的状态,实际不存在)
  • LISTEN:等待从任何远端TCP 和端口的连接请求。
  • SYN_SENT:发送完一个连接请求后等待一个匹配的连接请求。
  • SYN_RCVD:发送连接请求并且接收到匹配的连接请求以后等待连接请求确认。
  • ESTABLISHED:表示一个打开的连接,接收到的数据可以被投递给用户。连接的数据传输阶段的正常状态。
  • FIN_WAIT_1:等待远端TCP 的连接终止请求,或者等待之前发送的连接终止请求的确认。
  • CLOSE_WAIT:等待本地用户的连接终止请求。
  • FIN_WAIT_2:等待远端TCP 的连接终止请求。
  • LAST_ACK:等待先前发送给远端TCP 的连接终止请求的确认(包括它字节的连接终止请求的确认)。
  • CLOSING:等待远端TCP 的连接终止请求确认。
  • TIME_WAIT:等待足够的时间过去以确保远端TCP 接收到它的连接终止请求的确认。

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

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

相关文章

【工具使用】STM32CubeMX-CRC配置

一、概述 无论是新手还是大佬,基于STM32单片机的开发,使用STM32CubeMX都是可以极大提升开发效率的,并且其界面化的开发,也大大降低了新手对STM32单片机的开发门槛。     本文主要讲述STM32芯片的CRC外设配置及CRC校验的一些基…

【018】筛选数据(模糊筛选)_#VBA

模糊筛选1. 原因2. 参考3. VBA指令3.1 将 * 添加在 C 的两侧即可筛选所有包含 C 的值3.2 将 * 添加在 C 的前面即可筛选所有最后一个字符包含 C 的值3.3 将 * 添加在 C 的后面即可筛选所有第一个字符包含 C 的值1. 原因 此前写筛选方式,都是高级筛选或者按条件筛选…

可移植操作系统接口--POSIX

什么是POSIX POSIX(Portable Operating System Interface,可移植操作系统接口)是一个标准,它定义了操作系统接口的一系列规范。POSIX标准最初由IEEE制定,现在由Open Group维护。 POSIX标准的主要目的是为了保证不同操…

python带你成功复刻热门手机游戏——飞翔的小鸟

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 飞翔的小鸟(游戏英文名:Flappy Bird) 一款由越南独立开发者开发的手机游戏,是之前非常流行的一款手机游戏 小游戏目标:让小鸟穿过管子,不要碰到任何物体…

大数据是什么?发展前景怎么样

关于大数据的解释,比较官方的定义是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。简单来说,大数据就是结构化…

CAD崩溃后自动保存的文件在哪里?

CAD崩溃后自动保存的文件在哪里?相信这个问题很多设计师小伙伴在CAD绘图过程中都曾遇到过,这也是CAD常见问题之一。本节内容小编就以浩辰CAD软件为例来给大家介绍一下软件崩溃后CAD自动保存的文件在哪里以及打开方式。 CAD崩溃后自动保存文件位置&#…

GWAS全基因组关联分析工具GAPIT最新版的安装教程与报错解决方案

GWAS工具GAPIT最新版 本篇笔记主要内容是GWAS分析软件GAPIT最新版的安装和使用教程,包括常见的报错以及解决方案,主要出错位置在LDheatmap、stringi、nloptr、lme4等,测试安装的环境是东方天意的ECS云服务器(Linux centos7&#x…

七、延时队列

1、延时队列的概念 队列内部是有序的,最重要的特性就体现在它的延时属性上,延时队列中的元素希望在指定时间到了以后被取出处理 延时队列就是用来存放需要在指定时间被处理的元素的队列 2、延时队列使用的场景 订单在十分钟之内未支付则自动取消 …

SAP Cloud Platform会抛弃ABAP吗

很早之前自己写的文章,重新发布一下。 别担心,该来的总会来,该走的也留不住! - 剧情概要 - SAP Cloud Platform发布已经有一段时间了,自SAP云平台发布以来,很多人担心的一个问题是:在SAP云平…

【测试】HD-G2L-IO评估板测试结果表

1. 测试对象HD-G2L-IOT基于HD-G2L-CORE V2.0工业级核心板设计,双路千兆网口、双路CAN-bus、2路RS-232、2路RS-485、DSI、LCD、4G/5G、WiFi、CSI摄像头接口等,接口丰富,适用于工业现场应用需求,亦方便用户评估核心板及CPU的性能。H…

数据分析师常见问题(1)

1).sql三种排序的区别 2).几种连接方式 3).union和union all的区别 4) .drop和delete的区别 5).有关机器学习random forest 和xgboost的区别 6) .SVM原理 SVM是在特征空间上找到最佳的分离超平面,使得训练集上的正负样…

Win10使用ssh root用户登录centos7主机

1 、用SSH root用户登录Centos主机; 2 、检查centos是否装了epel库 执行命令 rpm -qa|grep epel 没有,需要安装 yum install epel-release 3 、安装xrdp yum install xrdp 4 、安装tigervnc-server yum install tigervnc-server 5 、为用户root…

如何通过SWTO分析法,加强项目风险管理?

1、什么是SWTO分析法 SWTO分析法是态势分析法,是根据企业自身的既定内在条件,对其优势、劣势、外部机会和危险进行分析,依照矩阵形式排列,将各种因素相互匹配分析的企业战略分析方法。 通过SWTO分析法 加强项目风险管理​ …

数学小课堂:数学和哲学的互动关系(自洽的哲学思想受益于数学思维)

文章目录 引言I 数学是“有底”的学问(止于公理)II 数学对哲学的影响2.1 哲学思想受益于数学思维2.2 笛卡尔的贡献2.3 莱布尼茨的哲学思想III 哲学对数学的影响引言 数学和科学各个分支之间在方法上却具有相通性和普适性,这些通用的方法常常让很多学科同时受益,依靠数学逻…

Maven 创建项目

在我们 maven 项目中的结构为 src/main/java —— 存放项目的.java 文件 src/main/resources —— 存放项目资源文件,如 spring, hibernate 配置文件 src/test/java —— 存放所有单元测试ava 文件,如 JUnit 测试类 src/test/resources —— 测试资源文件…

跑步用入耳的好还是挂耳的、最好用的运动耳机分享

健身房经常会播放一些节奏较快的歌曲,这样能够激发大家在运动过程中的动力,所以运动时聆听音乐确实比较有效果,居家运动、室外跑步时选择运动耳机就变成了刚需,不过一款适合自己的运动耳机确实是比较难找的,首先不能影…

算法刷题总结 (四) 动态规划

算法总结4 动态规划一、动态规划1.1、基础问题11.1.1、509. 斐波那契数列1.1.2、70. 爬楼梯1.1.3、746. 使用最小花费爬楼梯1.2、基础问题21.2.1、62. 不同路径1.2.2、63. 不同路径Ⅱ1.2.3、343. 整数拆分1.2.4、96. 不同的二叉搜索树1.3、背包问题1.3.1、01背包1.3.1.1、单次选…

现代卷积神经网络之稠密连接网络(DenseNet),并对CFIAR10训练

专栏:神经网络复现目录 本章介绍的是现代神经网络的结构和复现,包括深度卷积神经网络(AlexNet),VGG,NiN,GoogleNet,残差网络(ResNet),稠密连接网络…

pikachu靶场CSRF之TOKEN绕过

简介 Pikachu靶场中的CSRF漏洞环节里面有一关CSRF TOKEN,这个关卡和其余关卡稍微有点不一样,因为表单里面存在一个刷新就会变化的token,那么这个token是否能绕过呢?接下来我们来仔细分析分析 实战过程 简单尝试 先利用任意一个…

CNCF x Alibaba云原生技术公开课 第三章 kubernetes核心概念

1、Kubernetes概念 核心功能 服务的发现与负载的均衡容器的自动装箱,我们也会把它叫做 scheduling,就是“调度”,把一个容器放到一个集群的某一个机器上Kubernetes 会帮助我们去做存储的编排,让存储的声明周期与容器的生命周期能…