JAVAEE之网络原理(2)_传输控制协议(TCP)的连接管理机制,三次握手、四次挥手,及常见面试题

news2024/11/23 6:34:02

前言

 在上一节中,我们简单介绍了 TCP 协议的相关概念和格式,而且还介绍了TCP 协议原理中的 确认应答机制、超时重传机制,在本节中我们将会继续介绍 TCP协议原理中的其他机制。

连接管理机制(安全机制)

在正常情况下,TCP要经过三次握手建立连接,四次挥手断开连接
在这里插入图片描述

一、 三次握手

在这里插入图片描述

 最开始的时候客户端和服务器都是处于CLOSED关闭状态。主动打开连接的为客户端,被动打开连接的是服务器。TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了 LISTEN 监听状态

三次握手过程可以详细概括如下:

  1. 第一次握手:TCP客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这是报文首部中的同部位SYN=1,同时选择一个初始序列号 seq=x ,此时,TCP客户端进程进入了 SYN-SENT 同步已发送状态。

  2. 第二次握手 TCP服务器收到请求报文后,如果同意连接,则会向客户端发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号 seq=y,此时,TCP服务器进程进入了 SYN-RCVD 同步收到状态

  3. 第三次握手 TCP客户端收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED已建立连接状态 触发三次握手。

为什么要进行第三次握手?

 采用三次握手的主要原因:防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。

  • 第一次握手:客户端向服务器发送报文,证明客户端的发送能力正常。
  • 第二次握手:服务端接收报文并向服务器发送报文,证明服务器的发送嫩能力和接收能力正常。
  • 第三次握手:客户端向服务器发送报文,证明客户端的接受能力正常。

二、 四次挥手在这里插入图片描述

g.cn/direct/e1a46e31009e44f2980012b823314322.png)
 数据传输完毕后,双方都可释放连接。最开始的时候,客户端和服务器都是处于 ESTABLISHED 状态,然后客户端主动关闭,服务器被动关闭。
三次挥手过程可以详细概括如下:

  1. 第一次挥手: 客户端发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态

  2. 第二次挥手: 服务器端接收到连接释放报文后,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT 关闭等待状态

  3. 第三次挥手: 客户端接收到服务器端的确认请求后,客户端就会进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文,服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

  4. 第四次挥手: 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态,但此时TCP连接还未终止,必须要经过2MSL后(最长报文寿命),当客户端撤销相应的TCB后,客户端才会进入CLOSED关闭状态,服务器端接收到确认报文后,会立即进入CLOSED关闭状态,到这里TCP连接就断开了,四次挥手完成。

为什么要等待 2MSL?

emsp;MSL是TCP报文的最大生存时间
 主要原因是为了保证客户端发送那个的第一个ACK报文能到到服务器,因为这个ACK报文可能丢失,并且2MSL是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃,这样新的连接中不会出现旧连接的请求报文。

为什么 TCP 挥手需要四次呢?

 服务器收到客户端的 FIN 报文时,内核会马上回一个 ACK 应答报文,但是服务端应用程序可能还有数据要发送,所以并不能马上发送 FIN 报文,而是将发送 FIN 报文的控制权交给服务端应用程序

  • 如果服务端应用程序有数据要发送的话,就发完数据后,才调用关闭连接的函数;
  • 如果服务端应用程序没有数据要发送的话,可以直接调用关闭连接的函数。

  从上面过程可知,是否要发送第三次挥手的控制权不在内核,而是在被动关闭方(上图的服务端)的应用程序,因为应用程序可能还有数据要发送,由应用程序决定什么时候调用关闭连接的函数,当调用了关闭连接的函数,内核就会发送 FIN 报文了,所以服务端的 ACK 和 FIN 一般都会分开发送。

什么情况会出现三次挥手?

 当被动关闭方(上图的服务端)在 TCP 挥手过程中,没有数据要发送 并且开启了 TCP 延迟确认机制,那么第二和第三次挥手就会合并传输,这样就出现了三次挥手。
在这里插入图片描述

TCP 延迟确认的策略:

  • 当有响应数据要发送时,ACK 会随着响应数据一起立刻发送给对方;
  • 当没有响应数据要发送时,ACK 将会延迟一段时间,以等待是否有响应数据可以一起发送;
  • 如果在延迟等待发送 ACK 期间,对方的第二个数据报文又到达了,这时就会立刻发送 ACK。

总结

 以上就是本节的主要内容,我们详细介绍了 TCP原理中的 连接管理机制,主要包括三次握手和四次挥手两部分,我们介绍了三次握手、四次挥手的主要过程。在下一节我们将会继续介绍 TCP 原理中的其他机制。

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

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

相关文章

数学建模基础:统计模型

目录 前言 一、概率与统计基础 二、统计模型 三、Matlab统计工具箱 四、实例示范:市场调查分析 步骤 1:数据导入 步骤 2:数据可视化 步骤 3:建立多元线性回归模型 步骤 4:模型验证 步骤 5:模型应…

Java学习 (二)关键字、标识符、数组

一、关键字 我们第一章案例中有很多关键字,比如class、public、static、void等,这些关键字依旧被java定义好了,可以拿来用,不需要死记硬背,按照官方文档查询即可 #官方文档 https://docs.oracle.com/javase/tutorial/j…

高速公路收费图片分析系统深入理解

当今社会,随着交通运输业的快速发展,高速公路已成为人们出行的重要选择。而高速公路收费系统作为保障道路可持续运营的重要组成部分,其效率和准确性对于保障道路畅通和交通安全至关重要。近年来,随着技术的不断进步,高…

elasticsearch的安装和配置

单节点安装与部署 我们通过docker进行安装 1.docker的安装 如果以及安装了docker就可以跳过这个步骤。 首先更新yum: yum update安装docker: yum install docker查看docker的版本: docker -v此时我们的docker就安装成功了。 2.创建网络 我们还需要部署kiban…

【VMware】VMware虚拟机安装_配置_使用教程

一、准备工作 1、下载VMware软件:访问VMware官方网站,下载适合你操作系统的VMware Workstation Pro安装包。 下载地址:VMware Desktop Hypervisors for Windows, Linux, and Mac 2、准备操作系统镜像文件:根据你想要在虚拟机中安…

读AI新生:破解人机共存密码笔记06人工智能生态系统

1. 深蓝 1.1. “深蓝”的胜利虽然令人印象深刻,但它只是延续了几十年来显而易见的趋势 1.2. 国际象棋算法的基本设计是由克劳德香农在1950年提出的 1.2.1. 这一基本设计在20世纪60年代初实现了重大改进 1.2.2. 最优秀的国际象棋程序的等级评分稳步提高&#xff…

数据分析第十二讲 数据可视化入门(一)

数据可视化入门(一) 在完成了对数据的透视之后,我们可以将数据透视的结果通过可视化的方式呈现出来,简单的说,就是将数据变成漂亮的统计图表,因为人类对颜色和形状会更加敏感,然后再进一步解读…

ChinaTravel成流量密码,景区如何打造视频监控管理平台提升旅游体验

随着中国经济的飞速发展和人民生活水平的持续提高,旅游已经成为越来越多人休闲放松的首选方式。近期,随着互联网的普及和社交媒体的兴起,以及免签政策带火入境游,“ChinaTravel”已成为社交网络上的一大流量密码,吸引了…

数学建模基础:非线性模型

目录 前言 一、非线性方程组 二、非线性规划 三、微分方程模型 四、非线性模型的应用 五、实例示范:传染病传播模型 实例总结 五、总结 前言 非线性模型用于描述变量之间的非线性关系,相比线性模型,其数学形式更为复杂,但…

操作系统真象还原:输入输出系统

第10章-输入输出系统 这是一个网站有所有小节的代码实现,同时也包含了Bochs等文件 10.1 同步机制–锁 10.1.1 排查GP异常,理解原子操作 线程调度工作的核心内容就是线程的上下文保护+上下文恢复 。 根本原因是访问公共资源需要多个操作&…

[Linux] 版本控制

git是一个开源的分布式版本控制系统 早期,每做一个就备份一下 后来,自动保存 一个软件多人开发

YOLOv10改进 | 注意力篇 | YOLOv10引入EMAttention(EMA)注意力

1. EMA介绍 1.1 摘要:在各种计算机视觉任务中说明了通道或空间注意机制在产生更可辨别的特征表示方面的显着有效性。 然而,通过通道降维来建模跨通道关系可能会给提取深度视觉表示带来副作用。 本文提出了一种新型高效的多尺度注意力(EMA)模块。 着眼于保留每个通道的信息…

《Windows API每日一练》5.1 键盘基础

本节我们讲述关于键盘的一些基础知识。当我们按下一个键盘按键时,会产生一个键盘按键消息。这一点你能确定吗?假如是一个菜单快捷键消息,或者是一个子窗口控件消息呢?这就超出了本节讨论的范围,我们将在菜单和子窗口控…

零编程数据可视化展示:十个简易案例!

数据可视化是呈现数据内在价值的最终手段。数据可视化实例利用各种图表和图形设计手段,合乎逻辑地展示复杂而不直观的数据。为了让用户直观清楚地了解他们想要的数据及其比较关系,数据可视化实例的呈现至关重要。即时设计整理了10个数据可视化实例&#…

OceanBase 列存中多列过滤性能解析

今天有同事问我,列存大宽表场景下,如果在多个列上有等值过滤条件,OceanBase 的性能是不是无法满足要求? Hi 晓楚,帮评估个OTS替换场景 大概1亿大宽表,查询姿势就是任意字段的组合,进行等值查询g…

使用Docker在Mac上部署OnlyOffice,预览编辑word、excel、ppt非常好

前端编辑word、ppt文档,开源免费方案并没有找到合适的,像wps、石墨文档都是自研的方案。实现过程中wps采用的svg方案,而石墨文档采用的是canvas,它们均是自己来实现编辑器,不依赖浏览器提供的编辑器(conten…

【调试笔记-20240619-Windows-Typescripts中类型不匹配的解决方法】

调试笔记-系列文章目录 调试笔记-20240619-Windows-Typescripts中类型不匹配的解决方法 文章目录 调试笔记-系列文章目录调试笔记-20240619-Windows-Typescripts中类型不匹配的解决方法 前言一、调试环境操作系统:Windows 10 专业版调试环境调试目标 二、调试步骤搜…

【数据结构】选择题

在数据结构中,从逻辑上可以把数据结构分为(线性结构和非线性结构) 当输入规模为n时,下列算法渐进复杂性中最低的是() 时间复杂度 某线性表采用顺序存储结构,每个元素占4个存储单元&#xf…

【笔记】打卡01 | 初学入门

1 基本介绍 MindSpore Data(数据处理层) ModelZoo(模型库) MindSpore Science(科学计算),包含了业界领先的数据集、基础模型、预置高精度模型和前后处理工具 MindSpore Insight(可视…

【stm32-新建工程-HAL库版本】

stm32-新建工程-HAL库版本 ■ HAL库版本目录■ Drivers■ Middlewares 文件夹, 同寄存器版本一样。■ Output 文件夹, 同寄存器版本一样。■ Projects 文件夹, 同寄存器版本一样。■ User 文件夹 ■ HAL库版本目录 ■ Drivers ① &#xff0c…