【计算机网络 - 基础问题】每日 3 题(二十九)

news2024/12/24 17:32:32

✍个人博客:https://blog.csdn.net/Newin2020?type=blog
📣专栏地址:http://t.csdnimg.cn/fYaBd
📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪
📝推荐参考地址:https://www.xiaolincoding.com/(这个大佬的专栏非常有用!)

85. 两端同时打开会怎样?

如果双方同时发 SYN 报文,状态变化会是怎样的呢?

这是一个可能会发生的情况。

状态变迁如下:

在这里插入图片描述
在发送方给接收方发 SYN 报文的同时,接收方也给发送方发 SYN 报文,两个人刚上了!

发完 SYN,两者的状态都变为 SYN-SENT。

在各自收到对方的 SYN 后,两者状态都变为 SYN-REVD。

接着会回复对应的 ACK + SYN,这个报文在对方接收之后,两者状态一起变为 ESTABLISHED。

这就是同时打开情况下的状态变迁。

86. 说说 TCP 快速打开的原理 (TFO)

优化的过程是这样的,还记得我们说 SYN Flood 攻击时提到的 SYN Cookie 吗?这个 Cookie 可不是浏览器的Cookie,用它同样可以实现 TFO。

TFO 流程

(1) 首轮三次握手

首先客户端发送 SYN 给服务端,服务端接收到。

注意哦!现在服务端不是立刻回复 SYN + ACK,而是通过计算得到一个SYN Cookie,将这个 Cookie 放到 TCP 报文的 Fast Open选项中,然后才给客户端返回。

客户端拿到这个 Cookie 的值缓存下来。后面正常完成三次握手。

首轮三次握手就是这样的流程。而后面的三次握手就不一样啦!

(2) 后面的三次握手

在后面的三次握手中,客户端会将之前缓存的 Cookie、SYN 和 HTTP 请求 (是的,你没看错) 发送给服务端,服务端验证了 Cookie 的合法性,如果不合法直接丢弃;如果是合法的,那么就正常返回 SYN + ACK。

重点来了,现在服务端能向客户端发 HTTP 响应了!这是最显著的改变,三次握手还没建立,仅仅验证了 Cookie 的合法性,就可以返回 HTTP 响应了。

当然,客户端的ACK还得正常传过来,不然怎么叫三次握手嘛。

流程如下:

在这里插入图片描述

注意:客户端最后握手的 ACK 不一定要等到服务端的 HTTP 响应到达才发送,两个过程没有任何关系。

TFO 的优势

TFO 的优势并不在与首轮三次握手,而在于后面的握手,在拿到客户端的 Cookie 并验证通过以后,可以直接返回 HTTP 响应,充分利用了 1 个RTT (Round-Trip Time,往返时延) 的时间提前进行数据传输,积累起来还是一个比较大的优势。

87. 没有 listen 能建立 TCP 连接吗?

服务端没有 listen,客户端发起连接建立,会发生什么?

服务端如果只 bind 了 IP 地址和端口,而没有调用 listen 的话,然后客户端对服务端发起了连接建立,服务端会回 RST 报文。

不使用 listen ,可以建立 TCP 连接吗?

答案,是可以的,客户端是可以自己连自己的形成连接(TCP 自连接),也可以两个客户端同时向对方发出请求建立连接(TCP 同时打开),这两个情况都有个共同点,就是没有服务端参与,也就是没有 listen,就能建立连接。

那没有 listen,为什么还能建立连接?

我们知道执行 listen 方法时,会创建半连接队列和全连接队列。

三次握手的过程中会在这两个队列中暂存连接信息。

所以形成连接,前提是你得有个地方存放着,方便握手的时候能根据 IP + 端口等信息找到对应的 socket。

那么客户端会有半连接队列吗?

显然没有,因为客户端没有执行 listen,因为半连接队列和全连接队列都是在执行
listen 方法时,内核自动创建的。

但内核还有个全局 hash 表,可以用于存放 sock 连接的信息。

这个全局 hash 表其实还细分为 ehash,bhash 和 listen_hash 等,但因为过于细节,大家理解成有一个全局 hash 就够了。

在 TCP 自连接的情况中,客户端在 connect 方法时,最后会将自己的连接信息放入到这个全局 hash 表中,然后将信息发出,消息在经过回环地址重新回到 TCP 传输层的时候,就会根据 IP + 端口信息,再一次从这个全局 hash 中取出信息。于是握手包一来一回,最后成功建立连接。

TCP 同时打开的情况也类似,只不过从一个客户端变成了两个客户端而已。

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

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

相关文章

platformio.ini工程配置文件入门

主要参考资料: “platformio.ini” (Project Configuration File): https://docs.platformio.org/en/latest/projectconf/index.html 目录 简介语法[platformio]: PlatformIO配置选项[env]:配置环境 简介 .ini是一个配置文件,它可以设置开发环境&#x…

4.循环结构在存储过程中的应用(4/10)

引言 在数据库管理中,存储过程是一种强大的工具,它允许将一组SQL语句封装为一个独立的、可重用的单元。存储过程不仅可以提高数据处理的效率,还可以增强代码的安全性和可维护性。在复杂的数据库操作中,循环结构扮演着至关重要的角…

面试系列-淘天提前批面试

00-淘天提前批面试 在牛客上看到了淘天提前批的面试题目,这里分析一下淘天面试的问了有哪些内容,面试的重点 是偏向哪些方面 项目相关 1、秒杀架构如何设计? 问了秒杀的架构如何设计,对于秒杀的设计,秒杀符合 写多读少…

【cpp/c++ summary 工具】Visual Studio 2022 安装与cmake项目配置

Visual Studio 2022安装 https://visualstudio.microsoft.com/zh-hans/free-developer-offers/下载后选择c桌面开发安装即可: Visual Studio 2022创建cmake项目 Visual Studio 2022打开cmake项目 点击打开带有cmakelists.txt的项目文件夹 配置缓存:点…

【操作系统考研】2进程管理(1)

在翻看操作系统知识框架的时候,对一些概念的理解还比较模糊,现在我来理清他们的关系。 操作系统、处理器、进程、线程、内存、存储器、设备、文件的关系 咱们可以把计算机系统想象成一个大工厂,来理解这些概念之间的关系。 操作系统&#xf…

小目标检测利器:YOLOv8+SAHI使用教程

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

软考系统分析师知识点三:应用数学

前言 今年报考了11月份的软考高级:系统分析师。 考试时间为:11月9日。 倒计时:34天。 目标:优先应试,其次学习,再次实践。 复习计划第一阶段:扫平基础知识点,仅抽取有用信息&am…

vSAN06:ESA与OSA对比、ESA安装、新架构、工作方式、自动策略管理、原生快照、数据压缩、故障处理

目录 vSAN ESAvSAN ESA 安装ESA新架构ESA工作方式ESA自动策略管理自适应RAID5策略 原生快照支持数据压缩的改进ESA故障处理 vSAN ESA vSAN ESA 安装 流程和OSA完全一致,但要注意要勾选启用vSAN ESA ESA和OSA的底层架构不一样,但是UI上是一致的。 生产环…

【C++】第二节:类与对象(上)

1、面向过程和面向对象初步认识 C 语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 C 是面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。 …

【ESP32】Arduino开发 | Timer定时器+定时器闹钟例程

有关定时器外设的详细介绍在ESP-IDF的对应文章中,跳转栏目目录可以找到。 1. API 1.1 启动定时器 hw_timer_t * timerBegin(uint8_t timer, uint16_t divider, bool countUp); timer:定时器序号(ESP32有4个硬件定时器,所以可填序…

您看这篇就够了:ComfyUI 新手指南!

前言 欢迎来到 ComfyUI 的神奇世界,这是 Stable Diffusion 的一个强大而灵活的图形用户界面。无论你是数字艺术的新手,还是希望将你的图像创作提升到新高度的老手,ComfyUI 都能满足你的需求。在这篇全面的指南中,我们将带你穿越 …

2003经典绝版100%仿盛大服务端火炬引擎原版

;中国游戏制作 本版本为中国游戏制作小组推出的第一个版本,有什么不完美的地方还请大家多多指教!!! 与盛大逼真!!! 本版本M2Server采用“梦幻风”以及“冰眼”M2Server修改器修改的 2004/1/…

vue项目配置cesium

vue中配置cesium ①打开目标文件夹的终端,输入 pnpm install cesium ②这时你的node_models文件夹下,会出现cesium文件夹;然后,其中Build/Cesium文件夹,复制到public文件夹下。 ③打开public/index.html文件&#xf…

Linux下载安装MySQL8.4

这里写目录标题 一、准备工作查看系统环境查看系统架构卸载已安装的版本 二、下载MySQL安装包官网地址 三、安装过程上传到服务器目录解压缩,设置目录及权限配置my.cnf文件初始化数据库配置MySQL开放端口 一、准备工作 查看系统环境 确认Linux系统的版本和架构&am…

[单master节点k8s部署]31.ceph分布式存储(二)

Ceph配置 Ceph集群通常是一个独立的存储集群,可以部署在 Kubernetes 集群之外。Ceph 提供分布式存储服务,能够通过 RADOS、CephFS、RBD(块存储)、和 RGW(对象存储)等方式与 Kubernetes 集成。即使 Ceph 部…

SumatraPDF一打开就无响应怎么办?

结论:当前安装版不论32位还是64位都会出现问题。使用portable免安装版未发现相关问题。——sumatrapdf可以用于pdf, epub, mobi 等格式文件的浏览。 点击看相关问题和讨论

如何使用 Python 的 logging 模块记录日志

如何使用 Python 的 logging 模块记录日志 在编写 Python 程序时,日志记录是一个非常重要的部分。日志不仅帮助你在开发过程中调试代码,还可以在程序正式运行时提供诊断信息,帮助定位问题。如果你正在构建一个复杂的系统或者开发大型应用程序…

【数据结构】【队列】算法汇总

一、顺序队列【相当于一维数组】 1.准备工作 #define MAXQSIZE 100 typedef struct{QElemType*base;int front;int rear; }SqQueue; 2.队满,队空。入队,出队 二、链式队列 1.准备工作 typedef struct Qnode{ElemType data;struct Qnode*next; }Qnod…

深入浅出解析大模型:探索智能体(Agent)

大语言模型 vs 人类 大语言模型很强大,就像人类的大脑一样拥有思考的能力。如果人类只有大脑,没有四肢,没有工具,是没办法与世界互动的。如果我们能给大模型配备上四肢和工具呢?大模型是不是就会打破次元壁&#xff0…

GD32F4xx USB MSC Host调试记录

本文记录GD32F4xx MCU的RTX系统工程内移植USB MSC Host的例程代码,适配自制的电路板,实现向USB内写入数据。有关USB的一些基础信息,可以参考本专栏的另一篇文章《GD32 MCU USB开发学习记录》。 目录 1. USB MSC host 例程1.1、硬件接口2.2、USB msc host 例程2.2.1 工程目录…