内核级理解套接字和全连接队列

一、全连接队列

listen 函数第二个参数 backlog 是输入全连接队列的长度,一般不会太大。那如何理解全连接队列呢?

首先三次握手建立连接的过程和服务器是否 accept 无关,accept 的本质就是把已经建立的连接以文件描述符的形式返回。

那么在服务器来不及 accept 的时候,底层的 TCP 仍然允许用户进行三次握手,建立连接成功之后就会把连接放入全连接队列,即等待服务器 accept 拿走建立好的连接。但是全连接队列不会保存太多建立好的连接,最多保存 backlog + 1 个连接。

就是生产者消费者模型

为什么全连接队列不能为空,或者不能太长?

为空会导致服务器闲置率太高,而且生产者消费者模型不能为空。

太长会导致新连接进入时要等很长时间,因为队伍太长。效率低。

二、内核级理解套接字 socket

首先服务器启动就是一个进程,是进程就会有 pcb,struct files_struct 等,我们就从这里开始。

三、Linux抓包 tcpdump

1、安装

sudo apt-get update
sudo apt-get install tcpdump

2、常见选项

选项含义
-i抓取指定网络接口数据包,-i any 表示抓取所有网络接口数据
-w后面跟文件名,把抓取结果,写入指定文件,但打开是乱码
-r后面跟文件名,把 -w 之后的文件读出来,这个可以看懂
-n把被解释成随机主机名的主机名再解释回去

3、常见指令

(1)tcpdump -i any tcp:指定抓取关于tcp协议的所有网络接口数据包。

(2)tcpdump src host IP地址 and tcp:抓取指定源IP的tcp数据包。

(3)tcpdump dst host IP地址 and tcp:抓取指定目的IP的tcp数据包。

(4)tcpdump port 80 and tcp:抓取指定端口80的tcp数据包。

(5)tcpdump -i eth0 port 80 -w data.pcap:把关于tcp协议的网络接口eth0数据包写入文件data.pcap。

(6)tcpdump -r data.pcap:读出文件data.pcap。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值