准备工作
我们把这个测试tcp实验的代码中的server端中的accept关闭,也就说现在服务器只是做listen监听工作。并且把listen中的的第二个参数设置为1。观察现象。
当我们启动两台客户端的时候,使用netstat -natp查看是没有什么问题的。

但是当我们增加客户端的时候,就出现问题了

除了刚开始的两个连接时处于Established状态下(也就是三次握手成功了),后面的两个客户端的状态却是处于SYN_SENT状态(也就是三次握手没有成功)
所以上面的实验也验证了,建立连接的过程和用户是否accept无关。也就是说在服务器来不及进行accept的时候,底层TCP listen sock允许用户进行三次握手,并构建连接。但是构建成功连接的数量是有限的。而这个数量就是listen中的第二个参数backlog + 1

tcpdump 通常已经预装在大多数 Linux 发行版中。如果没有安装,可以使用包管理器进行安装。例如 Ubuntu,可以使用以下命令安装:
Bash
sudo apt-get update
sudo apt-get install tcpdump
在 Red Hat 或 CentOS 系统中,可以使用以下命令:
Bash
sudo yum install tcpdump
Bash
$ sudo tcpdump -i any tcp
注意:-i any 指定捕获所有网络接口上的数据包,tcp 指定捕获 TCP 协议的数据包。i 可以理解成为 interface 的意思
Bash
$ sudo tcpdump -i enh0(虚拟机的话就是ens33) 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
使用 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 文件中的数据包并进行分析。
注意事项

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

这个时候就可以看到四次挥手的过程了