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

server/2024/10/18 11:44:41/

✍个人博客: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.ppmy.cn/server/132021.html

相关文章

UE5 猎户座漂浮小岛 01 资源 玩家角色

UE5 猎户座漂浮小岛 01 资源 玩家角色 1.资源 1.1 准备资源 创建项目Orion创建目录结构 资源下载使用虚拟学习工具包 1.2 使用资源 1.2.1 修改默认地图 复制BlockGame下的地图到_Orion下的地图中 重命名为OrionMap 编辑-项目设置-地图和模式-默认地图 1.2.2 修改玩家角色 …

AXI GPIO按键控制——ZYNQ学习笔记4

一、AXI GPIO接口简介 是什么?是PL部分的一个IP软核,实现通用输入输出接口的功能,并通过AXI协议实现与处理系统通信,方便控制与拓展GPIO接口。 AXI GPIO IP 核为 AXI 接口提供了一个通用的输入/输出接口。 与 PS 端的 GPIO 不同&…

时代在召唤—电力行业投资逻辑解析及公司参考

每个经济体不同阶段都需要有不同的蓄水池来承载社会经济增长及产业发展溢出的财富和资金,20多年前,我们选择了地产。现在地产不行了,必须创造新的蓄水池,目前来看,应该大力发展资本市场应该算符合当前阶段比较好的选择…

面腾讯后台开发,二面挂掉了,,,

随着各厂秋招的开启,收到面试邀请的同学也越来越多。在当年和我一起找实习的同学里面,有实力较强的同学收到了腾讯后台开发的校招面试邀请。但面试不止是实力的竞争,也有很重要的运气的因素。 虽然我的同学在腾讯后台开发的二面中挂掉了&…

【Linux】命令行下的增删查改之“查找“

根据路径和条件搜索指定文件(find) find 命令是 Linux 系统中一个极为重要和强大的工具,用于在目录树中递归查找文件和目录,能够根据多个条件进行筛选。 它适用于进行系统维护、文件管理和日志分析时文件的搜寻,既然其查找方式递归且从根目录开始,所以…

金融市场中的量化交易与算法优化分析

量化交易在现代金融市场中扮演着越来越重要的角色,通过数学模型和算法的分析,量化交易能够帮助投资者在复杂的市场环境中做出高效的投资决策。本文将探讨量化交易的基本原理、常见策略以及如何通过算法优化提高交易效果。 #### 一、量化交易的基本概念 …

動態IP和端口詳解

IP地址是分配給每臺連接到互聯網的設備的唯一識別字,幫助網路中的設備進行互相識別和通信。IP地址有兩種類型:IPv4和IPv6。IPv4是由四組數字組成,例如192.168.1.1,而IPv6則是更長的形式,旨在解決IPv4地址耗盡的問題。 …

Kubernetes API

Kubernetes API 使你可以查询和操纵 Kubernetes 中对象的状态。 Kubernetes 控制平面的核心是 API 服务器和它暴露的 HTTP API。 用户、集群的不同部分以及外部组件都通过 API 服务器相互通信。 Kubernetes 控制面的核心是 API 服务器。 API 服务器负责提供 HTTP API&#xff…