当前位置: 首页 > news >正文

4.19 20

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

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

没有 listen,能建立 TCP 连接吗?

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

执行 listen 方法时,会创建半连接队列和全连接队列,三次握手的过程中会在这两个队列中暂存连接信息。客户端没有执行listen,因为半连接队列和全连接队列都是在执行 listen 方法时,内核自动创建的,所以客户端没有半连接队列。

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

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

没有 accept,能建立 TCP 连接吗?

 

 一般情况下,如果启动服务器,会发现最后程序会阻塞在accept()里。

客户端比较简单,创建好socket之后,直接就发起connect方法。

此时回到服务端,会发现之前一直阻塞的accept方法,返回结果了

就算不执行accept()方法,三次握手照常进行,并顺利建立连接。在服务端执行accept()前,如果客户端发送消息给服务端,服务端是能够正常回复ack确认包的。

 建立连接的过程中根本不需要accept()参与, 执行accept()只是为了从全连接队列里取出一条连接。

为什么半连接队列要设计成哈希表,全连接队列是链表?

全连接里队列,本质是个链表,因为也是线性结构,里面放的都是将要取走的连接,服务端取走连接不需要顺序,直接从队列头取就可以了复杂度为O(1)。

半连接队列,里面都是不完整的连接,等待着第三次握手的到来。那么现在有一个第三次握手来了,则需要从队列里把相应IP端口的连接取出,设计成哈希,时间复杂度就变On。

怎么观察两个队列的大小

#查看全连接队列

ss -lnt

查看半连接队列

SYN_RECV状态的连接 使用

netstat -nt 

cookies方案为什么不直接取代半连接队列?

  • 服务端并不会保存连接信息,所以如果传输过程中数据包丢了,也不会重发第二次握手的信息。
  • 编码解码cookies,都是比较耗CPU的,

        过构造大量ACK包去消耗服务端资源的攻击,叫ACK攻击,受到攻击的服务器可能会因为CPU资源耗尽导致没能响应正经请求。

 

相关文章:

4.19 20

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

(动态规划) 剑指 Offer 10- II. 青蛙跳台阶问题 ——【Leetcode每日一题】

❓剑指 Offer 10- II. 青蛙跳台阶问题 难度:简单 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案需要取模 1e97(1000000007),如计算初始结果为:1…...

物联网WIFI 模块AT指令版本七大元凶

前言 目前我们讨论的这个问题,并不是说WIFI方案不具备以应的功能。而是指在同一个AT固件下可能存在的问题。由于各厂商AT指令的开发深度不同,导致各厂商之间的AT指令差异很大。我总结了一些问题,可能是导致目前AT指令不好用元凶。 底层库问题…...

Qt 正则(数据格式校验、替换指定格式数据、获取匹配数据)

头文件引用 #include <QRegExp>初始化QRegExp实列 QRegExp re("^\\d{1,3},\\d{1,3}$");数据格式验证 QRegExp re("^\\d{1,3},\\d{1,3}$"); QString msg "12,33"; if(re.exactMatch()){// 验证通过 }else{//验证不通过 }替换数…...

网络层协议——ip

文章目录 1. 网络层2. IP协议2.1 协议头格式 3. 网段划分3.1 特殊的IP地址3.2 IP地址的数量限制 4. 私有IP地址和公网IP地址 1. 网络层 在应用层解决了如何读取完整报文、序列化反序列化、协议处理问题。在传输层解决了可靠性问题。那么网络层IP的作用是在复杂的网络环境中确定…...

Qt6和Rust结合构建桌面应用

桌面应用程序是原生的、快速的、安全的&#xff0c;并提供Web应用程序无法比拟的体验。 Rust 是一种低级静态类型多范式编程语言&#xff0c;专注于安全性和性能&#xff0c;解决了 C/C 长期以来一直在努力解决的问题&#xff0c;例如内存错误和构建并发程序。 在桌面应用程序开…...

Kubernetes(K8S)简介

Kubernetes (K8S) 是什么 它是一个为 容器化 应用提供集群部署和管理的开源工具&#xff0c;由 Google 开发。Kubernetes 这个名字源于希腊语&#xff0c;意为“舵手”或“飞行员”。k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。 Google 在 2014 年开源了 Kubernetes 项…...

面试中问:React中函数组件和class组件的区别,hooks模拟生命周期

React中函数组件和class组件的区别&#xff0c;hooks模拟生命周期 React中函数组件和class组件的区别hooks模拟生命周期 React中函数组件和class组件的区别 函数组件: 定义&#xff1a;函数组件是使用纯函数定义的组件&#xff0c;它接受 props 作为参数并返回 JSX。简洁性&am…...

Python高光谱遥感数据处理与高光谱遥感机器学习方法应用

本文提供一套基于Python编程工具的高光谱数据处理方法和应用案例。 本文涵盖高光谱遥感的基础、方法和实践。基础篇以学员为中心&#xff0c;用通俗易懂的语言解释高光谱的基本概念和理论&#xff0c;旨在帮助学员深入理解科学原理。方法篇结合Python编程工具&#xff0c;专注…...

Java实现接收xml格式数据并解析,返回xml格式数据

需求描述&#xff1a;后端接受xml格式数据&#xff0c;解析出相应数据&#xff0c;并返回xml格式数据。 <!--XML解析--><dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId>…...

【C++】初步认识模板

&#x1f3d6;️作者&#xff1a;malloc不出对象 ⛺专栏&#xff1a;C的学习之路 &#x1f466;个人简介&#xff1a;一名双非本科院校大二在读的科班编程菜鸟&#xff0c;努力编程只为赶上各位大佬的步伐&#x1f648;&#x1f648; 目录 前言一、泛型编程二、函数模板2.1 函…...

Ansible 临时命令搭建安装仓库

创建一个名为/ansible/yum.sh 的 shell 脚本&#xff0c;该脚本将使用 Ansible 临时命令在各个受管节点上安装 yum 存储库. 存储库1&#xff1a; 存储库的名称为 EX294_BASE 描述为 EX294 base software 基础 URL 为 http://content/rhel8.0/x86_64/dvd/BaseOS GPG 签名检查为…...

phpstorm动态调试

首先在phpstudy搭建好网站&#xff0c;在管理拓展开启xdebug拓展 查看php.ini配置已经更改 需要增添修改一下设置 [Xdebug] zend_extensionD:/phpstudy_pro/Extensions/php/php5.6.9nts/ext/php_xdebug.dll xdebug.collect_params1 xdebug.collect_return1 xdebug.auto_trace…...

二叉树的层序遍历及完全二叉树的判断

文章目录 1.二叉树层序遍历 2.完全二叉树的判断 文章内容 1.二叉树层序遍历 二叉树的层序遍历需要一个队列来帮助实现。 我们在队列中存储的是节点的地址&#xff0c;所以我们要对队列结构体的数据域重定义&#xff0c; 以上代码 从逻辑上来讲就是1入队&#xff0c;1出队&am…...

java八股文面试[JVM]——JVM内存结构

参考&#xff1a; JVM学习笔记&#xff08;一&#xff09;_卷心菜不卷Iris的博客-CSDN博客 JVM是运行在操作系统之上的&#xff0c;它与硬件没有直接的交互 JVM内存结构&#xff1a; 方法区&#xff1a;存储已被虚拟机加载的类元数据信息(元空间) 堆&#xff1a;存放对象实…...

Kafka基本使用

查看Kafka的进程是否在运行 #命令行终端中运行如下命令 ps -ef | grep kafkafind / -iname kafka-server-start.shcd /usr/local/kafka/bin/#启动kafka ./kafka-server-start.sh -daemon /usr/local/kafka/config/server.propertiesKafka默认使用9092端口提供服务&#xf…...

【目标检测】理论篇(2)YOLOv3网络构架及其代码实现

网络构架图&#xff1a; 代码实现&#xff1a; import math from collections import OrderedDictimport torch.nn as nn#---------------------------------------------------------------------# # 残差结构 # 利用一个1x1卷积下降通道数&#xff0c;然后利用一个3x3卷…...

k8s之工作负载、Deployment、DaemonSet、StatefulSet、Job、CronJob及GC

文章目录 1、工作负载1.1、定义1.2、分类 2、Deployment2.1、定义2.2、Deployment创建2.3、Deployment 更新机制2.3.1、比例缩放&#xff08;Proportional Scaling&#xff09;2.3.2、HPA&#xff08;动态扩缩容&#xff09;2.3.2.1、需要先安装metrics-server2.3.2.2、配置hpa…...

IDEA项目实践——Element UI概述

系列文章目录 IDEA项目实践——JavaWeb简介以及Servlet编程实战 IDEA项目实践——Spring当中的切面AOP IDEA项目实践——Spring框架简介&#xff0c;以及IOC注解 IDEA项目实践——动态SQL、关系映射、注解开发 IDEWA项目实践——mybatis的一些基本原理以及案例 文章目录 …...

Docker 容器学习笔记

Docker 容器学习笔记 容器的由来 早先&#xff0c;虚拟机通过操作系统实现相互隔离&#xff0c;保证应用程序在运行时相互独立&#xff0c;避免相互干扰。但是操作系统又笨又重&#xff0c;耗费资源严重&#xff1a; 容器技术只隔离应用程序的运行时环境但容器之间共享同一个…...

Nemo文件管理器终极指南:Cinnamon桌面环境下的高效文件管理神器

Nemo文件管理器终极指南&#xff1a;Cinnamon桌面环境下的高效文件管理神器 【免费下载链接】nemo File browser for Cinnamon 项目地址: https://gitcode.com/gh_mirrors/ne/nemo Nemo是Cinnamon桌面环境的官方文件管理器&#xff0c;作为一个免费开源的软件项目&#…...

BepInEx游戏插件加载器完全指南:从入门到精通Unity游戏扩展工具

BepInEx游戏插件加载器完全指南&#xff1a;从入门到精通Unity游戏扩展工具 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx 如何用BepInEx解锁游戏自定义功能&#xff1f;解决玩家…...

3步颠覆性解决方案:零成本条码生成技术让企业彻底告别付费依赖

3步颠覆性解决方案&#xff1a;零成本条码生成技术让企业彻底告别付费依赖 【免费下载链接】librebarcode Libre Barcode: barcode fonts for various barcode standards. 项目地址: https://gitcode.com/gh_mirrors/li/librebarcode Libre Barcode开源字体库通过字体化…...

3分钟打造macOS级桌面体验:开源光标主题全攻略

3分钟打造macOS级桌面体验&#xff1a;开源光标主题全攻略 【免费下载链接】apple_cursor Free & Open source macOS Cursors. 项目地址: https://gitcode.com/gh_mirrors/ap/apple_cursor 你知道吗&#xff1f;每天在电脑前工作8小时&#xff0c;你的鼠标指针会出现…...

DeepSeek-R1-Distill-Qwen-7B创意写作展示:从诗歌到短篇小说

嗯&#xff0c;用户需要一篇关于DeepSeek-R1-Distill-Qwen-7B在创意写作方面效果展示的技术博客。根据标题和场景判断&#xff0c;这属于效果展示类文章&#xff0c;重点是通过实际案例展示模型在文学创作上的能力。 需要突出模型的创意写作效果&#xff0c;包括诗歌、微型小说…...

EDK II代码格式化集成指南:IDE集成步骤详解

EDK II代码格式化集成指南&#xff1a;IDE集成步骤详解 【免费下载链接】edk2 EDK II 项目地址: https://gitcode.com/gh_mirrors/ed/edk2 EDK II作为现代UEFI固件开发的核心框架&#xff0c;其代码质量直接影响到固件的稳定性和安全性。本文将详细介绍如何将EDK II代码…...

燃油车虎视眈眈,电车涨价的图谋必将落空,油价上涨的利好将消失

近期以来多家电车企业涨价&#xff0c;美国电车涨价尤为明显&#xff0c;最高涨幅2万元&#xff0c;而国产电车涨价3000-1.4万元不等&#xff0c;凸显出电车似乎突然间对市场乐观起来&#xff0c;导致他们信心十足的在于3月份以来的油价上涨&#xff0c;但是这种涨价将迅速导致…...

移动端视频适配难题:xgplayer的CSS全屏模式实战指南(含16:9与9:16适配技巧)

移动端视频适配难题&#xff1a;xgplayer的CSS全屏模式实战指南&#xff08;含16:9与9:16适配技巧&#xff09; 在移动端视频播放场景中&#xff0c;屏幕比例适配一直是开发者面临的棘手问题。传统全屏模式在处理非常规比例视频&#xff08;如竖屏9:16内容&#xff09;时往往表…...

OpenClaw+nanobot技能开发:从零编写自定义文件处理器

OpenClawnanobot技能开发&#xff1a;从零编写自定义文件处理器 1. 为什么需要自定义文件处理技能 上周我整理项目文档时&#xff0c;遇到了一个典型问题&#xff1a;需要将数百个Markdown文件按照"日期-标题"格式批量重命名。手动操作不仅耗时&#xff0c;还容易出…...

F3D开发环境搭建:从零开始编译和构建这个开源3D项目

F3D开发环境搭建&#xff1a;从零开始编译和构建这个开源3D项目 【免费下载链接】f3d Fast and minimalist 3D viewer. 项目地址: https://gitcode.com/GitHub_Trending/f3/f3d F3D是一款快速且极简的3D查看器&#xff0c;本指南将带你从零开始搭建其开发环境&#xff0…...