TCP全队列连接,tcpdum抓包

devtools/2024/11/9 16:40:03/

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.ppmy.cn/devtools/92152.html

相关文章

非关系型数据库(NoSQL数据库

非关系型数据库(NoSQL数据库)是一类设计用于大规模数据存储和分布式处理的数据库系统,与传统的关系型数据库(如SQL数据库)不同,它们通常不遵循传统的表格结构和SQL查询语言。 主要特点包括: 1.…

Java Web —— 第四天(HTTP协议,Tomcat)

HTTP-概述 概念:Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则 特点: 1. 基于TCP协议:面向连接,安全 2.基于请求-响应模型的:一次请求对应一次响应 3. HTTP协议是无状态的协议: 对于事务处理没有…

Qt国际化

写在前面 在全球化的今天,软件应用的国际化变得尤为重要。 国际化不仅仅是翻译界面文本,更涉及到日期、时间、货币、数字格式等多方面的适应性调整。 Qt作为一个强大的跨平台应用开发框架,提供了丰富的国际化支持工具,使得开发者…

无缝协作的艺术:Codigger 视频会议(Meeting)的用户体验

在当今数字化的时代,远程协作已经成为工作和学习中不可或缺的一部分。然而,远程协作也面临着诸多挑战,如沟通不畅、信息同步不及时、协作工具的复杂性等。而 Codigger 视频会议(Meeting)作为一款创新的工具&#xff0c…

2024世界机器人大会将于8月21日至25日在京举行

2024年的世界机器人大会预定于8月21日至25日,在北京经济技术开发区的北人亦创国际会展中心隆重举办。 本届大会以“共育新质生产力 共享智能新未来”为核心主题,将汇聚来自全球超过300位的机器人行业专家、国际组织代表、杰出科学家以及企业家&#xff0…

菜鸡勇闯第136场双周赛

菜鸡鼓足了勇气报名了力扣双周赛(后来复盘才知道双周赛更难一点,我真是头铁。。) 没想到还拿了个竞赛名次哈哈哈哈哈还在前50%,小力它真的,我哭死 为什么我本科被高数老师忽悠,去打了两年数模o(≧口≦)o 每…

在Debian 8上安装Git的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 介绍 Git 是一个版本控制系统,自 2005 年发布以来,根据 GNU 通用公共许可证第 2 版进行分发。 Git 是一种主要…

Vue3 组件双向绑定的两种方法

defineProps 和 defineEmits 案例&#xff1a; # child <script setup> const props defineProps([modelValue]) const emit defineEmits([update:modelValue]) </script><template><input:value"props.modelValue"input"emit(update:…