⛳ TCP 协议面试题

目录

  • ⛳ TCP 协议面试题
    • 🐾 一、为什么关闭连接的需要四次挥⼿,⽽建⽴连接却只要三次握⼿呢?
    • 🏭 二、为什么连接建⽴的时候是三次握⼿,可以改成两次握⼿吗?
    • 👣 三、为什么主动断开⽅在TIME-WAIT状态必须等待2MSL的时间?
    • 🎨 四、如果已经建⽴了连接,但是Client端突然出现故障了怎么办?

⛳ TCP 协议面试题

🐾 一、为什么关闭连接的需要四次挥⼿,⽽建⽴连接却只要三次握⼿呢?

​ 关闭连接时,被动断开⽅在收到对⽅的FIN结束请求报⽂时,很可能业务数据没有发送完成,并不能⽴即关闭连接,被动⽅只能先回复⼀个ACK响应报⽂,告诉主动断开⽅: “你发的FIN报⽂我收到了,只有等到我所有的业务报⽂都发送完了,我才能真正的结 束,在结束之前,我会发你FIN+ACK报⽂的,你先等着”。所以,被动断开⽅的确认报⽂,需要拆开成为两步,故总体就需要四步挥⼿。

​ ⽽在建⽴连接场景中,Server端的应答可以稍微简单⼀些。当Server端收到Client端的SYN连接请求报⽂后,其中ACK报⽂表示对请求报⽂的应答,SYN报⽂⽤来表示服务端的连接也已经同步开启了,⽽ACK报⽂和SYN报⽂之间,不会有其他报⽂需要发送,故⽽可以合⼆为⼀,可以直接发送⼀个SYN+ACK报⽂。所以,在建⽴连接时,只需要三次握⼿即可。

🏭 二、为什么连接建⽴的时候是三次握⼿,可以改成两次握⼿吗?

​ 三次握⼿完成两个重要的功能:⼀是双⽅都做好发送数据的准备⼯作,⽽且双⽅都知道对⽅已准备好;⼆是双⽅完成初始SN序列号的协商,双⽅的SN序列号在握⼿过程中被发送和确认。

​ 如果把三次握⼿改成两次握⼿,可能发⽣死锁。两次握⼿的话,缺失了Client的⼆次确认ACK帧,假想的TCP建⽴的连接时⼆次挥⼿,可以如下图所示:

在这里插入图片描述

​ 在假想的TCP建⽴的连接时⼆次握⼿过程中,Client发送Server发送⼀个SYN请求帧,Server收到后发送了确认应答SYN+ACK帧。按照两次握⼿的协定,Server认为连接已经成功地建⽴了,可以开始发送数据帧。这个过程中,如果确认应答SYN+ACK帧在传输中被丢失,Client没有收到,Client将不知道Server是否已准备好,也不知道Server的SN序列号,Client认为连接还未建⽴成功,将忽略Server发来的任何数据分组,会⼀直等待Server的SYN+ACK确认应答帧。⽽Server在发出的数据帧后,⼀直没有收到对应的ACK确认后就会产⽣超时,重复发送同样的数据帧。这样就形成了死锁。

👣 三、为什么主动断开⽅在TIME-WAIT状态必须等待2MSL的时间?

原因之⼀:主动断开⽅等待2MSL的时间,是为了确保两端都能最终关闭。假设⽹络是不可靠的,被动断开⽅发送FIN+ACK报⽂后,其主动⽅的ACK响应报⽂有可能丢失,这时候的被动断开⽅处于LAST-ACK状态的,由于收不到ACK确认被动⽅⼀直不能正常的进⼊CLOSED状态。在这种场景下,被动断开⽅会超时重传FIN+ACK断开响应报⽂,如果主动断开⽅在2MSL时间内,收
到这个重传的FIN+ACK报⽂,会重传⼀次ACK报⽂,后再⼀次重新启动2MSL计时等待,这样,就能确保被动断开⽅能收到ACK报⽂,从⽽能确保被动⽅顺利进⼊到CLOSED状态。只有这样,双⽅都能够确保关闭。反过来说,如果主动断开⽅在发送完ACK响应报⽂后,不是进⼊TIME_WAIT状态去等待2MSL时间,⽽是⽴即释放连接,则将⽆法收到被动⽅重传的FIN+ACK报⽂,所以不会再发送⼀次ACK确认报⽂,此时处于LAST-ACK状态的被动断开⽅,⽆法正常进⼊到CLOSED状态。

原因之⼆:防⽌“旧连接的已失效的数据报⽂”出现在新连接中。主动断开⽅在发送完最后⼀个ACK报⽂后,再经过2MSL,才能最终关闭和释放端⼝,这就意味着,相同端⼝的新TCP新连接,需要在2MSL的时间之后,才能够正常的建⽴。2MSL这段时间内,旧连接所产⽣的所有数据报⽂,都已经从⽹络中消失了,从⽽,确保了下⼀个新的连接中不会出现这种旧连接请求报⽂。

🎨 四、如果已经建⽴了连接,但是Client端突然出现故障了怎么办?

​ TCP还设有⼀个保活计时器,Client端如果出现故障,Server端不能⼀直等下去,这样会浪费系统资源。每收到⼀次Client客户端的数据帧后,Server端都的保活计时器会复位。计时器的超时时间通常是设置为2⼩时,若2⼩时还没有收到Client端的任何数据帧,Server端就会发送⼀个探测报⽂段,以后每隔75秒钟发送⼀次。若⼀连发送10个探测报⽂仍然没反应,Server端就认为
Client端出了故障,接着就关闭连接。如果觉得保活计时器的两个多⼩时的间隔太⻓,可以⾃⾏调整TCP连接的保活参数。

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

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

相关文章

spring boot 3使用 elasticsearch 提供搜索建议

业务场景 用户输入内容&#xff0c;快速返回建议&#xff0c;示例效果如下 技术选型 spring boot 3elasticsearch server 7.17.4spring data elasticsearch 5.0.1elasticsearch-java-api 8.5.3 pom.xml <dependency><groupId>org.springframework.boot</gr…

节点不连续伽辽金方法在求解线性和非线性平流方程中的一维实现(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Hyperledger Fabric的使用及开发

Hyperledger Fabric是Linux基金会发起的一种跨行业的区块链技术&#xff0c;目前在多家大型公司有着应用&#xff0c;这里就不多做HF本身的介绍了&#xff0c;有兴趣可关注其官网。 1. 准备工作&#xff1a; 开始前需要一定的准备工作&#xff0c;安装各类中间件&#xff1a;…

微服务中间件--Nacos

Nacos 1. Nacos入门a.服务注册到Nacosb.Nacos服务分级存储模型c.NacosRule负载均衡d.服务实例的权重设置e.环境隔离 - namespacef.Nacos和Eureka的对比 2. Nacos配置管理a.统一配置管理b.配置热更新c.多环境配置共享 1. Nacos入门 Nacos是阿里巴巴的产品&#xff0c;现在是Spr…

在jupyter notebook中使用海龟绘图

首先&#xff0c;安装ipyturtle3 ref:ipyturtle3 PyPI pip install ipyturtle3然后&#xff0c;安装ipycanvas ipycanvas是一个需要安装在与JupyterLab实例相同环境的包。此外&#xff0c;您需要安装nodejs&#xff0c;并启用JupyterLab ipycanvas小部件。 所有这些都在ipy…

ARM--day7(cortex_M4核LED实验流程、异常源、异常处理模式、异常向量表、异常处理流程、软中断编程、cortex_A7核中断实验)

软中断代码&#xff1a;&#xff08;keil软件&#xff09; .text .global _start _start:1.构建异常向量表b resetb undef_interruptb software_interruptb prefetch_dataabortb data_abortb .b irqb fiq reset:2.系统一上电&#xff0c;程序运行在SVC模式1>>初始化SVC模…

postgresql 的递归查询

postgresql 的递归查询功能很强大&#xff0c;可以实现传统 sql 无法实现的事情。那递归查询的执行逻辑是什么呢&#xff1f;在递归查询中&#xff0c;我们一般会用到 union 或者 union all&#xff0c;他们两者之间的区别是什么呢&#xff1f; 递归查询的执行逻辑 递归查询的…

NFTScan NFT API 在 DID Protocol 开发中的应用

自互联网发展以来&#xff0c;Web2.0 时代产生了网络社会&#xff0c;社会已经不再局限于地理边界&#xff0c;而 Web 3.0 引入了去中心化的理念&#xff0c;强调个体数据隐私和可信互操作性。在这个新的时代中&#xff0c;去中心化身份&#xff08;Decentralized Identifier 即…

linux中shell脚本——shell数组、正则表达式及文件三剑客之AWK

目录 一.shell数组 1.1.数组分类 1.2.定义数组方法 二.正则表达式 2.1.元字符 2.2.表示次数 2.3.位置锚定 2.4.分组 2.5.扩展正则表达式 三.文本三剑客之AWK 3.1.awk介绍及使用格式 3.2.处理动作 3.3.awk选项 3.4.awk处理模式 2.5.awk常见的内置变量 2.6.if条…

pytorch内存泄漏

问题描述&#xff1a; 内存泄漏积累过多最终会导致内存溢出&#xff0c;当内存占用过大&#xff0c;进程会被killed掉。 解决过程&#xff1a; 在代码的运行阶段输出内存占用量&#xff0c;观察在哪一块存在内存剧烈增加或者显存异常变化的情况。但是在这个过程中要分级确认…

基于Jenkins构建生产CICD环境(上篇)

目录 环境概述 Jenkins简介 持续集成 持续集成的效益 持续集成的作用 持续集成的特点 持续交付 持续部署 Maven 介绍 安装配置Jenkins Jenkins配置 1、修改jenkins初始密码 2、安装 Jenkins 必要插件 环境概述 随着软件开发需求及复杂度的不断提高&#xff0c;团队…

怎样通过本地电脑搭建SFTP服务器,并实现公网访问?

本地电脑搭建SFTP服务器&#xff0c;并实现公网访问 文章目录 本地电脑搭建SFTP服务器&#xff0c;并实现公网访问1. 搭建SFTP服务器1.1 下载 freesshd 服务器软件1.3 启动SFTP服务1.4 添加用户1.5 保存所有配置 2. 安装SFTP客户端FileZilla测试2.1 配置一个本地SFTP站点2.2 内…

appium2 安装 和出现问题解决

1.安装环境 A macOS, Linux, or Windows operating systemNode.js version in the SemVer range ^14.17.0 || ^16.13.0 || >=18.0.0NPM version >= 8 (NPM is usually bundled with Node.js, but can be upgraded independently) 1.1只要安装nodejs最新版就好了 1.2安…

el-table分页后序号连续的两种方法

实现效果&#xff1a; 第一页排序到10&#xff0c;第二页的排序应从11开始 实现方法一&#xff1a; 在el-table的序号列中使用template定义 <el-table><el-table-columnmin-width"10%"label"序号"><template slot-scope"scope"…

网络协议的定义、组成和重要性?

什么是网络协议&#xff1f; 网络协议是在计算机网络中&#xff0c;用于规定通信实体之间进行数据传输和通信的规则集合。网络协议涵盖了各种通信细节&#xff0c;包括数据包格式、错误处理、数据传输速率等&#xff0c;是用于分组交换数据网络的一种协议&#xff0c;其任务仅…

二、SQL,如何实现表的创建和查询

1、新建表格&#xff08;在当前数据库中新建一个表格&#xff09;&#xff1a; &#xff08;1&#xff09;基础语法&#xff1a; create table [表名]( [字段:列标签] [该列数据类型] comment [字段注释], [字段:列标签] [该列数据类型] comment [字段注释], ……&#xff0c…

SaaS ERP系统:中小企业走向成功的“秘密武器”

**ERP系统**开发已成为企业以最小的复杂性高效运营的必要需求。企业资源规划是业务流程管理战略不可或缺的一部分&#xff0c;因此&#xff0c;要想在当今动荡的市场中保持竞争力&#xff0c;拥有合适的ERP解决方案至关重要。 尽管如此&#xff0c;由于显而易见的原因&#xf…

玩转单元测试之gtest

引言 程序开发的时候&#xff0c;往往需要编写一些测试样例来完成功能测试&#xff0c;以保证自己的代码在功能上符合预期&#xff0c;能考虑到一些异常边界问题等等。 gtest快速入门 1.引入gtest # 使用的是1.10版本&#xff0c;其他版本可根据需要选择 git clone -b v1.1…

自动驾驶——车辆动力学模型

/*lat_controller.cpp*/ namespace apollo { namespace control {using apollo::common::ErrorCode;//故障码 using apollo::common::Status;//状态码 using apollo::common::TrajectoryPoint;//轨迹点 using apollo::common::VehicleStateProvider;//车辆状态信息 using Matri…

皮爷咖啡基于亚马逊云科技的数据架构,加速数据治理进程

皮爷咖啡&#xff08;Peet’s Coffee&#xff09;是美国精品咖啡品牌&#xff0c;于2017年进入中国&#xff0c;为中国消费者带来传统经典咖啡饮品&#xff0c;并特别呈现更加丰富的品质咖啡饮品体验。通过深入应用亚马逊云科技云原生数据库产品Amazon Redshift以及Amazon DMS等…