TCP全队列连接,tcpdum抓包

news2024/9/22 21:24:22

TCP全队列连接,tcpdum抓包

  • 1. listen的第二个参数作用
  • 2. 理解全连接队列(原理)
  • 3. 为什么要有全连接队列并且队列长度要适当
  • 4. 使用不tcpdump 进行抓包,分析TCP过程(三次握手,四次挥手)
    • 4.1安装tcpdump
    • 4.2常见使用
    • 4.3测试

1. listen的第二个参数作用

  1. 准备工作
    我们把这个测试tcp实验的代码中的server端中的accept关闭,也就说现在服务器只是做listen监听工作。并且把listen中的的第二个参数设置为1。观察现象。

  2. 当我们启动两台客户端的时候,使用netstat -natp查看是没有什么问题的。
    在这里插入图片描述

  3. 但是当我们增加客户端的时候,就出现问题了
    在这里插入图片描述
    除了刚开始的两个连接时处于Established状态下(也就是三次握手成功了),后面的两个客户端的状态却是处于SYN_SENT状态(也就是三次握手没有成功)

  4. 所以上面的实验也验证了,建立连接的过程和用户是否accept无关。也就是说在服务器来不及进行accept的时候,底层TCP listen sock允许用户进行三次握手,并构建连接。但是构建成功连接的数量是有限的。而这个数量就是listen中的第二个参数backlog + 1

2. 理解全连接队列(原理)

  • 服务器在一定事件内肯定会同时受到众多的客户端发起的请求,这些请求可能是申请建立新连接,也可能是申请发数据。大那是不管是什么申请,终究可以归咎到申请一个连接。那么这么多的连接,服务器要不要进行管理,操作系统要不要进行管理呢?答案是肯定的,也就说操作系统要对连接进行管理,说到管理我们就要想起之前提到的六字真言"先描述,再组织",所以说其实操作系统底层是使用数据结构来管理好一个一个的结构化的连接的。而这个数据结构就是全连接队列。

在这里插入图片描述

  • 但是这并不是说服务器只能处理backlog + 1个连接,而是再accept忙不过来去对列中拿走连接时,全连接队列所能装下的连接个数。所以其实我们也不难发现,这其实是一个生产者消费者模型。

3. 为什么要有全连接队列并且队列长度要适当

  • 这个全连接对队列其实类似于缓冲区的样子,既然是服务器那么必然在某个时间段是服务高峰期,同时也有服务低峰期。如果是在高峰期的话,假设全连接队列为空了,也就是说来了一个连接直接对接引用层让服务器直接处理,但是啊服务器的处理能里是有限的啊,如果同时来了多个请求连接那么必然会有很多的请求连接被拒绝了,这非常降低用户的体验感,并且势必会造成同一个服务器会发起多次请求,也间接的导致加重了服务器的处理工作量,降低服务器的处理效率。
  • 那么是不是将全连接队列的空间设置的很大呢?这样的话,就算有很多的连接到来了,也可直接添加到全连接队列中了,这样不久解决了服务器拒绝用户请求的问题吗?看似解决了,但是归根结底服务器的处理能力是有限的,服务器也是从全连接队列中取出数据,如果队列太大了,也就说明用户排队人数就变多了,那么就势必会有用户排在很后面,也就是该用户可能要等待很长一段事件才能进行业务处理。那么这样也有问题,设想一下,如果你在请求一个连接时他就一直转圈圈不给你处理请求你会怎么想,如果是耐心好的可能会等一会,要是没有耐心的是不是直接退出找其他的服务器申请了啊。所以如果队列太长了的话,可能排再更后后面的用户会直接退出,也就将全连接队列开辟好的空间闲置下来的,这不就是一种浪费内核内存资源吗!
  • 所以综合上述来讲,为什么要有全队列连接呢:主要是讲全连接队列当作一个缓冲区,在服务器处理不过来过多连接时进行一定的缓存,减少服务器的闲置率,提高用户的体验感。同时开辟的队列大小要适中,减少不必要的内核空间浪费。

4. 使用不tcpdump 进行抓包,分析TCP过程(三次握手,四次挥手)

4.1安装tcpdump

tcpdump 通常已经预装在大多数 Linux 发行版中。如果没有安装,可以使用包管理器进行安装。例如 Ubuntu,可以使用以下命令安装:

Bash
sudo apt-get update
sudo apt-get install tcpdump

在 Red Hat 或 CentOS 系统中,可以使用以下命令:

Bash
sudo yum install tcpdump

4.2常见使用

  1. 捕获所有网络接口上的TCP报文
Bash
$ sudo tcpdump -i any tcp

注意:-i any 指定捕获所有网络接口上的数据包,tcp 指定捕获 TCP 协议的数据包。i 可以理解成为 interface 的意思

  1. 捕获指定网络接口上的 TCP 报文
Bash
$ sudo tcpdump -i enh0(虚拟机的话就是ens33) tcp
  1. 捕获特定源或目的 IP 地址的 TCP 报文

使用 host 关键字可以指定源或目的 IP 地址。例如,要捕获源 IP 地址为 xxx.xxx.xxx.xxx 的 TCP 报文,可以使用以下命令:

Bash
$ sudo tcpdump src host xxx.xxx.xxx.xxx and tcp

要捕获目的 IP 地址为 xxx.xxx.xxx.xxx 的 TCP 报文,可以使用以下命令:

Bash
$ sudo tcpdump dst host xxx.xxx.xxx.xxx and tcp

同时指定源和目的 IP 地址,可以使用 and 关键字连接两个条件:

Bash
$ sudo tcpdump src host xxx.xxx.xxx.xxx and dst host yyy.yyy.yyy.yyy
and tcp
  1. 捕获特定端口的 TCP 报文

使用 port 关键字可以指定端口号。例如,要捕获端口号为 80 的 TCP 报文(通常是HTTP 请求),可以使用以下命令:
Bash
$ sudo tcpdump port 80 and tcp

  1. 保存捕获的数据包到文件

使用 -w 选项可以将捕获的数据包保存到文件中,以便后续分析。例如:

Bash
$ sudo tcpdump -i eth0 port 80 -w data.pcap

这将把捕获到的 HTTP 流量保存到名为 data.pcap 的文件中。
了解:pcap 后缀的文件通常与 PCAP(Packet Capture)文件格式相关,这是一种用于捕获网络数据包的文件格式

  1. 从文件中读取数据包进行分析

使用 -r 选项可以从文件中读取数据包进行分析。例如:

Bash
tcpdump -r data.pcap

这将读取 data.pcap 文件中的数据包并进行分析。
注意事项

  • 使用 tcpdump 时,请确保你有足够的权限来捕获网络接口上的数据包。通常,你需要以 root 用户身份运行 tcpdump。
  • 使用 tcpdump 的时候,有些主机名会被云服务器解释成为随机的主机名,如果不想要,就用-n 选项
  • 主机观察三次握手的第三次握手,不占序号

4.3测试

  1. 三次握手和四次挥手
    在这里插入图片描述

上面的是三次握手,下面的是四次挥手。但是我们会发现四次挥手怎么变成了三次挥手呢?我们之前也是讲过了原理的,虽然客户端立马就关闭了,如果服务端也立马进行关闭了,也就是说客户端关闭的瞬间,服务端响应ACK报文的同时也发送了断开连接的请求,这个时候就可以进行捎带应答了。如果我们要看到全过程,只需要控制客户端和用户端断开连接的时机不同即可。

在这里插入图片描述
这个时候就可以看到四次挥手的过程了

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

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

相关文章

CVE-2023-28525~文件上传【春秋云境靶场渗透】

# 今天我们来攻克CVE-2023-28525文件上传漏洞# 看到页面,经过尝试 账号:admin 密码:admin# 发现Posts可以添加文件上传# 尝试发现,只能上传图片格式的文件,那我们试一下看能不能上传成功# 发现上传失败,发现…

console与控制台使用demo

文章目录 console是一个普通(实例)对象A、函数对象拥有2个属性:B、console只有__proto__属性:C、综上,console是一个实例对象 console拥有的函数(特殊列举)占位符用法以参数为key记录执行次数——count()dir()和dirxml…

Cmake基础教程--第1章:初识cmake

Cmake基础教程--第1章:初识cmake 何为CmakeCmake的优缺点优点缺点 Cmake与makefile之间的关系C/C 如何编译为可执行文件一个最简单的Cmake示例 从本篇文章开始,我会出一系列文章,致力于Cmake工具的学习使用。阅读本文章之前, 作者…

#MFC 编译错误msvcrt.lib(exe_main.obj) : error LNK2019

如果是CMake,需要改如下: set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:CONSOLE") 改为 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:WINDOWS") 如果是mfc工程文件,需…

【数据结构】五、树:7.哈夫曼树、哈夫曼编码

3.哈夫曼树和哈夫曼编码 文章目录 3.哈夫曼树和哈夫曼编码3.1带权路径长度3.2哈夫曼树的定义和原理3.3哈夫曼树的构造代码实现 3.4特点3.5哈夫曼编码压缩比代码实现 3.6哈夫曼树-C 3.1带权路径长度 #mermaid-svg-yeVKyVnDwvdIc5ML {font-family:"trebuchet ms",verda…

【第18章】Spring Cloud之Gateway配置

文章目录 前言一、示例二、Route Metadata Configuration1. 路由元数据配置2. 获取元数据配置 三、Http timeouts configuration(请求超时配置)1. Global timeouts(全局)2. Per-route timeouts(路由) 四、CORS Configuration(跨域配置)1. Global CORS Configuration(全局)2. Ro…

【HarmonyOS NEXT星河版开发学习】小型测试案例07-弹性布局小练习

个人主页→VON 收录专栏→鸿蒙开发小型案例总结​​​​​ 基础语法部分会发布于github 和 gitee上面(暂未发布) 前言 在鸿蒙(HarmonyOS)开发中,Flex布局是一种非常有用的布局方式,它允许开发者创建灵活且响…

FPGA知识基础之--存储器知识点总结以及基于ip核的简单双端口RAM的实现和仿真(附RTL代码和Testbench代码)

目录 前言一、存储器的分类二、实验任务三 、简单(伪)双端口四、程序设计4.1 模块4.2 时序分析4.3 RTL代码ram_wr 写模块2.ram_rd 写模块3.top模块 五、仿真 前言 笔者在最近的存储器学习时,遇到了一些问题,为此笔者用本篇博客来…

ICM-20948芯片详解(9)

接前一篇文章:ICM-20948芯片详解(8) 六、寄存器详解 2. USER BANK 0寄存器详述 (6)INT_PIN_CFG 参考代码: #define ICM20948_INT_PIN_CFG 0x0F (7)INT_ENABLE 参考代码&#x…

我有10台120kw的直流充电桩,赢利了多少钱?我列出所有成本和多少利润,这里要算上政府补贴。【慧哥开源充电桩平台 HZCOS-chargeOS-cloud】

特别申明:仅仅代表个人观点,错的地方虚心请教学习,各位手下留情 拥有的10台120kW直流充电桩的盈利情况,并考虑到政府补贴,具体数字需要根据实际情况调整。 成本计算 初始投资成本 充电桩成本:每台120kW直…

利用Llama 3 API实现盈利:细节解析

随着人工智能技术的快速发展,基于大模型的服务成为了众多初创企业关注的焦点。Llama 3 API作为一种强大的语言模型接口,为小型公司提供了利用先进AI技术的机会。本文将探讨这些小公司如何通过Llama 3 API实现盈利,并分析其中的关键因素。 一、Llama 3 API性能概览 批处理输…

网络药理学:分子对接之一:macos上MOE和Autodock和PyMol和gromacs的下载、PDB数据库使用、gromacs能量最小化

MOE下载 别想了,要钱的。而且不算是主流软件,过。 Autodock和Autodock tools下载 下载地址:https://autodock.scripps.edu/download-autodock4/ 如果你的电脑满足以下配置,那么推荐下载autodock GPU 操作系统:mac…

重磅!观测云荣获SOC 2 Type II鉴证报告

近日,观测云在数据安全和内控管理领域再获殊荣,成功获得全球四大会计师事务所之一的安永会计师事务所签发的SOC 2 Type II 鉴证报告。这一荣誉不仅是对观测云在相关领域卓越表现的认可,更是对其对客户承诺坚定性和执行力的有力证明。 观测云 …

软件设计之JavaScript(1)

软件设计之JavaScript(1) 【狂神说Java】JavaScript最新教程通俗易懂 学习内容: 软件开发技能点参照:软件开发,小白变大佬,这套学习路线让你少走弯路是认真的,欢迎讨论 软件开发技能点顺序参照:Java学习…

“前缀和”专题篇一

目录 【模版】前缀和 【模版】二维前缀和 寻找数组的中心下标 除自身以外数组的乘积 【模版】前缀和 题目 思路 这道题如果使用暴力解法,即针对每次查询,先算出前r个数的总和,然后再算出前l-1个数的总和,然后相减就得出本次查…

2.类和对象(上)

1. 类的定义 1.1 类定义格式 • class为定义类的关键字,Stack为类的名字,{ }中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量; (类和结构体非常像&#…

12-利用Excel创建IC类元件库

1.新建excel文件 2.找到模型向导 3.修改属性

技术速递|.NET Aspire 8.1 中面向云原生开发人员的新增功能!

作者:Mitch Denny 排版:Alan Wang 5 月份,我们向全世界发布了 .NET Aspire 的第一个正式版本。.NET 社区的热烈响应令我们深受鼓舞,在大家首次试用时,我们一直在积极倾听并与开发人员互动。 今天,我们很高…

EF Core连接PostgreSQL数据库

PostgreSQL数据库介绍 PostgreSQL是一个功能强大的开源对象关系型数据库管理系统(RDBMS)。最初于1986年在加州大学伯克利分校的POSTGRES项目中诞生,PostgreSQL以其稳定性、灵活性和扩展性而著称。它支持丰富的数据类型、复杂的查询、事务完整…

C语言进阶(3)

1.数组传参 一维数组传参的时候使用数组名,代表数组首元素的地址;函数接受时形参可以是数组形式,也可能是指针形式,数组形式比较简单数组怎么写,函数接受是就怎么接受,使用指针就要将指针类型写清楚,如下 …