小汪,TCP连接和断连夺命6连问你可能扛得住?

扫码关注 有惊喜

目录

TCP三次握手连接和四次挥手断连的几处疑问

一、建立连接,为什么是三次握手,而不是二次握手?

二、为什么每次建立 TCP 连接时,初始化的序列号都要求不一样呢?

三、断开连接,为什么是四次握手,而不是三次握手?

四、为什么TIME_WAIT等待的时间是2MSL?

五、为什么需要 TIME_WAIT 状态?

六、为什么需要 TIME_WAIT 状态?

Reference


TCP三次握手连接和四次挥手断连的几处疑问

一、建立连接,为什么是三次握手,而不是二次握手?

  1. 防止资源浪费 + 防止历史连接的建立。

考虑一种不正常的情况,客户端发了两次请求链接的报文,第二条被服务器捕捉到,返回数据,完成了两次握手。数据传送完成之后,链接关闭。但是这时候,第一条拥塞的请求报文现在到达了服务器端,服务器还以为客户端要又一次建立连接,于是发送确认,然后把自己敞开,等着客户端发送过来数据。于是,很多的网络资源就是这样浪费掉了. 如果实行三次握手,服务器收到了一条过期的请求报文,返回确认信息,客户端接收到了服务器的信息之后感到莫名其妙,心想:我他妈又没要连接,你返回这个是不是疯了。于是忽略。服务器过一段时间还没有收到第三次握手的数据,知道客户端并没有要求建立链接的请求,含泪离开。

  1. 同步双方初始序列号

TCP 协议的通信双方, 都必须维护一个「序列号」, 序列号是可靠传输的一个关键因素,它的作用:

  • 接收方可以去除重复的数据;

  • 接收方可以根据数据包的序列号按序接收;

  • 可以标识发送出去的数据包中, 哪些是已经被对方收到的(通过 ACK 报文中的序列号知道); 可见,序列号在 TCP 连接中占据着非常重要的作用,所以当客户端发送携带「初始序列号」的 SYN 报文的时候,需要服务端回一个 ACK 应答报文,表示客户端的 SYN 报文已被服务端成功接收,那当服务端发送「初始序列号」给客户端的时候,依然也要得到客户端的应答回应,这样一来一回,才能确保双方的初始序列号能被可靠的同步。

二、为什么每次建立 TCP 连接时,初始化的序列号都要求不一样呢?

主要原因有两个方面:

  • 为了防止历史报文被下一个相同四元组的连接接收(主要考虑)

  • 为了安全性,防止黑客伪造的相同序列号的 TCP 报文被对方接收

三、断开连接,为什么是四次握手,而不是三次握手?

TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP是全双工模式:

  • 这就意味着,关闭连接时,客户端向服务端发送 FIN 时,仅仅表示客户端不再发送数据了,但是客户端还能接收服务端的数据。

  • 服务端收到客户端的 FIN 报文时,先回一个 ACK 应答报文,但此时服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才发送 FIN 报文给客户端来表示同意现在关闭连接。

  • 从上面过程可知,服务端通常需要等待完成数据的发送和处理,所以服务端的 ACK 和 FIN 一般都会分开发送,因此是需要四次挥手。

简单地说,前 2 次挥手用于关闭一个方向的数据通道,后两次挥手用于关闭另外一个方向的数据通道。

注意:在特定情况下,四次挥手是可以变成三次挥手的

四、为什么TIME_WAIT等待的时间是2MSL?

  1. MSL 是 Maximum Segment Lifetime,报文最大生存时间,它是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。

  2. TIME_WAIT 等待 2 倍的 MSL,因为网络中可能存在来自发送方的数据包,当这些发送方的数据包被接收方处理后又会向对方发送响应,所以一来一回需要等待 2 倍的时间。

  3. 2MSL时长 这其实是相当于至少允许报文丢失一次。

五、为什么需要 TIME_WAIT 状态?

主动发起关闭连接的一方,才会有 TIME-WAIT 状态。

需要 TIME-WAIT 状态,主要是两个原因:

防止历史连接中的数据,被后面相同四元组的连接错误的接收; 保证「被动关闭连接」的一方,能被正确的关闭;

  • 原因一:防止历史连接中的数据,被后面相同四元组的连接错误的接收

为了防止历史连接中的数据,被后面相同四元组的连接错误的接收,因此 TCP 设计了 TIME_WAIT 状态,状态会持续 2MSL 时长,这个时间足以让两个方向上的数据包都被丢弃,使得原来连接的数据包在网络中都自然消失,再出现的数据包一定都是新建立连接所产生的。

  • 原因二:保证「被动关闭连接」的一方,能被正确的关闭

也就是说,TIME-WAIT 作用是等待足够的时间以确保最后的 ACK 能让被动关闭方接收,从而帮助其正常关闭。

六、为什么需要 TIME_WAIT 状态?

过多的 TIME-WAIT 状态主要的危害有两种:

  • 第一是占用系统资源,比如文件描述符、内存资源、CPU 资源、线程资源等;

  • 第二是占用端口资源,端口资源也是有限的,一般可以开启的端口为 32768~61000,也可以通过 net.ipv4.ip_local_port_range参数指定范围。

Reference

  1. https://zhuanlan.zhihu.com/p/493915289

  2. https://zhuanlan.zhihu.com/p/591865232

  3. https://developer.aliyun.com/article/556694

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】ipoib驱动 - ipoib_cm_post_receive_srq_rss函数

一、ipoib_cm_post_receive_srq_rss函数定义 static int ipoib_cm_post_receive_srq_rss(struct net_device *dev,int index, int id) {struct ipoib_dev_priv *priv ipoib_priv(dev);struct ipoib_recv_ring *recv_ring priv->recv_ring index;struct ib_sge *sge;stru…

聚乙烯PE的特性有哪些?UV胶水能够粘接聚乙烯PE吗?

聚乙烯(Polyethylene,PE)是一种聚合物,是由乙烯(ethylene)单体通过聚合反应形成的合成塑料。以下是聚乙烯的一些主要化学特性: 1.化学式: 聚乙烯的基本化学式是 (C2H4)n,…

Camunda Sub Process

一:内嵌子流程 repositoryService.createDeployment().name("内嵌子流程").addClasspathResource("bpmn/embed_sub_process.bpmn").deploy(); identityService.setAuthenticatedUserId("huihui"); ProcessInstance processInstance …

【已解决】c++如何打印变量的类型

本博文源于笔者正在编写的c代码,在c/c中我们经常用auto去接一个变量,这样我们既可以不用知道变量或函数结果的类型,就可以轻松愉快编码,如果想要知道变量的类型呢?那就需要这样一个函数。 问题再现 想要用函数去打印…

使用numpy处理图片——90度旋转

在《使用numpy处理图片——镜像翻转和旋转》一文中,我们介绍了如何将图片旋转的方法。本文将使用更简单的方法旋转图片90度。 左旋转90度 import numpy as np import PIL.Image as Imagedata np.array(Image.open(the_starry_night.jpg))# left 90 rot90LeftWith…

SQL-条件查询与聚合函数的使用

目录 DQL-条件查询 1.语法 2.条件 常用的比较运算符如下: 常用的逻辑运算符如下: 案例: 聚合函数 1.常见的聚合函数 2.聚合函数的语法 案例: 🎉欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹 ✨博客…

pycharm导入etree报Cannot find reference ‘etree‘ in ‘__init__.py‘ more... (Ctrl+F1)

问题 发现 from lxml import etree的时候,etree报错了。提示Cannot find reference etree in __init__.py more... (CtrlF1)。 解决办法 后面发现是pycharm自己的BUG,所以写了新的写法

turnjs实现翻书效果

需求:要做一个效果,类似于阅读器上的翻书效果。 咱们要实现这个需求就需要使用turnjs这个插件,他的官网是turnjs官网。 进入官网后可以点击 这个按钮去下载官网的demo。 这个插件依赖于jQuery,所以你的先安装jQuery. npm insta…

SwiftUI之深入解析Frame Behaviors

一、Frame 简介 当开始使用 SwiftUI 时,可能接触到的第一个修饰符是 frame(width:height:alignment),定义 frame 是 SwiftUI 最具挑战性的任务之一,当我们使用修饰符(如 .frame().)时,会发生很多事情。Swi…

抵御爬虫的前线护盾:深度解读验证码技术的演变历程

一.前言 在当今信息技术迅速发展的背景下,网站和在线服务面临着日益增长的自动化访问威胁,这些大多来自于各类爬虫程序。这种大量的自动化访问不仅对网站的正常运行构成压力,还可能导致敏感数据的泄露,甚至被用于不正当竞争和恶意…

小议CompletableFuture 链式执行和响应式编程

相关文章: 用最简单的方式理解同步和异步、阻塞与非阻塞CompletableFuture 实战 背景 昨晚和一个朋友讨论了他在开发过程中遇到的一个场景设计问题。这个场景可以简化为:服务接收到一个需要处理的任务请求,然后立即返回。这个任务需要经过…

【Oracle】数据库查询与SQL语句

Oracle查询 一、单表查询 1、简单条件查询 1)精确查询 SELECT* FROMT_OWNERS WHEREwatermeter 304082)模糊查询 SELECT* FROMt_owners WHEREname LIKE %刘%3)and运算符 SELECT* FROMt_owners WHEREname LIKE %刘% AND housenumb…

梦想贩卖机升级版知识付费源码,包含前后端源码,非线传,修复最新登录接口问题

梦想贩卖机升级版,变现宝吸收了资源变现类产品的许多优势,并剔除了那些无关紧要的元素,使得本产品在运营和变现能力方面实现了质的飞跃。多领域素材资源知识变现营销裂变独立版本。 支持:视频、音频、图文、文档、会员、社群、用…

【android】rk3588-android-bt

文章目录 蓝牙框架HCI接口蓝牙VENDORLIBvendorlib是什么 代码层面解读vendorlib1、 vendorlib实现,协议栈调用2、协议栈实现,vendorlib调用(回调函数)2.1、 init函数2.2、BT_VND_OP_POWER_CTRL对应处理2.3、BT_VND_OP_USERIAL_OPE…

基于 NFS 的文件共享实现

NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过 TCP/IP 网络共享文件资源,服务端通过 NFS 共享文件目录,客户端将该文件目录挂载在本地文件系统中,就可以像操作本地文件一样读写服务…

【AI视野·今日Robot 机器人论文速览 第七十二期】Mon, 8 Jan 2024

AI视野今日CS.Robotics 机器人学论文速览 Mon, 8 Jan 2024 Totally 13 papers 👉上期速览✈更多精彩请移步主页 Daily Robotics Papers Deep Reinforcement Learning for Local Path Following of an Autonomous Formula SAE Vehicle Authors Harvey Merton, Thoma…

wav2lip中文语音驱动人脸训练

1 Wav2Lip介绍 1.1 Wav2Lip概述 2020年,来自印度海德拉巴大学和英国巴斯大学的团队,在ACM MM2020发表了的一篇论文《A Lip Sync Expert Is All You Need for Speech to Lip Generation In The Wild 》,在文章中,他们提出一个叫做…

ChatGPT可以帮你做什么?

学习 利用ChatGPT学习有很多,比如:语言学习、编程学习、论文学习拆解、推荐学习资源等,使用方法大同小异,这里以语言学习为例。 在开始前先给GPT充分的信息:(举例) 【角色】充当一名有丰富经验…

vue3、vue2文件导入事件

一、vue3写法 1、html部分 <el-buttontype"info"plainicon"Upload"click"handleImport"v-hasPermi"[system:user:import]">导入</el-button><!-- 导入对话框 --><el-dialog :title"upload.title" v-…

性能分析与调优: Linux 磁盘I/O 观测工具

目录 一、实验 1.环境 2.iostat 3.sar 4.pidstat 5.perf 6. biolatency 7. biosnoop 8.iotop、biotop 9.blktrace 10.bpftrace 11.smartctl 二、问题 1.如何查看PSI数据 2.iotop如何安装 3.smartctl如何使用 一、实验 1.环境 &#xff08;1&#xff09;主机 …