论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
物联网
›
物联网
›
TCP全队列连接,tcpdum抓包
TCP全队列连接,tcpdum抓包
温锦文欧普厨电及净水器总代理
金牌会员
|
2024-8-8 01:14:44
|
显示全部楼层
|
阅读模式
楼主
主题
533
|
帖子
533
|
积分
1599
1. listen的第二个参数作用
准备工作
我们把这个测试tcp实行的代码中的server端中的accept关闭,也就说如今服务器只是做listen监听工作。而且把listen中的的第二个参数设置为1。观察征象。
当我们启动两台客户端的时候,使用netstat -natp检察是没有什么问题的。
但是当我们增长客户端的时候,就出现问题了
除了刚开始的两个连接时处于Established状态下(也就是三次握手成功了),后面的两个客户端的状态却是处于SYN_SENT状态(也就是三次握手没有成功)
所以上面的实行也验证了,建立连接的过程和用户是否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常见使用
捕获全部网络接口上的TCP报文
Bash
$ sudo tcpdump -i any tcp
复制代码
注意:-i any 指定捕获全部网络接口上的数据包,tcp 指定捕获 TCP 协议的数据包。i 可以理解成为 interface 的意思
捕获指定网络接口上的 TCP 报文
Bash
$ sudo tcpdump -i enh0(虚拟机的话就是ens33) tcp
复制代码
捕获特定源或目的 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
复制代码
捕获特定端口的 TCP 报文
使用 port 关键字可以指定端标语。例如,要捕获端标语为 80 的 TCP 报文(通常是HTTP 请求),可以使用以下命令:
Bash
$ sudo tcpdump port 80 and tcp
保存捕获的数据包到文件
使用 -w 选项可以将捕获的数据包保存到文件中,以便后续分析。例如:
Bash
$ sudo tcpdump -i eth0 port 80 -w data.pcap
复制代码
这将把捕获到的 HTTP 流量保存到名为 data.pcap 的文件中。
相识:pcap 后缀的文件通常与 PCAP(Packet Capture)文件格式相关,这是一种用于捕获网络数据包的文件格式
从文件中读取数据包进行分析
使用 -r 选项可以从文件中读取数据包进行分析。例如:
Bash
tcpdump -r data.pcap
复制代码
这将读取 data.pcap 文件中的数据包并进行分析。
注意事项
使用 tcpdump 时,请确保你有足够的权限来捕获网络接口上的数据包。通常,你需要以 root 用户身份运行 tcpdump。
使用 tcpdump 的时候,有些主机名会被云服务器解释成为随机的主机名,如果不想要,就用-n 选项
主机观察三次握手的第三次握手,不占序号
4.3测试
三次握手和四次挥手
上面的是三次握手,下面的是四次挥手。但是我们会发现四次挥手怎么变成了三次挥手呢?我们之前也是讲过了原理的,虽然客户端立马就关闭了,如果服务端也立马进行关闭了,也就是说客户端关闭的刹时,服务端响应ACK报文的同时也发送了断开连接的请求,这个时候就可以进行捎带应答了。如果我们要看到全过程,只需要控制客户端和用户端断开连接的时机差别即可。
这个时候就可以看到四次挥手的过程了
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
温锦文欧普厨电及净水器总代理
金牌会员
这个人很懒什么都没写!
楼主热帖
可扩展性对物联网管理系统有哪些影响? ...
一文详解|影响成长的关键思考 ...
如何入门渗透测试
大企业才用的分布式唯一Id,它比GUID好 ...
☆常用的Sql语句汇总(DDL/DML) ...
2 分钟,了解 4 个极为有用的 MetricsQ ...
简析XDP的重定向机制
常用类-LocalDate、LocalTime、LocalDa ...
学习ASP.NET Core Blazor编程系列六— ...
Oracle数据库中没有scott账户的方法 ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表