首页/新闻资讯/正文详情

三次握手 四次挥手还不会?用tcpdump分析给你看

发布时间:2026/11/5 3:32:15 来源:云帆数科 栏目:资讯中心
三次握手 四次挥手还不会?用tcpdump分析给你看
首先我们分别编写 一个客户端程序和一个服务端程序服务端#include iostream #include sys/socket.h #include netinet/in.h #include arpa/inet.h #include unistd.h #includecstring #includethread using namespace std; int main() { int sockfdsocket(PF_INET,SOCK_STREAM,0); struct sockaddr_in addr; memset(addr, 0, sizeof(addr)); addr.sin_family AF_INET; addr.sin_port htons(9696); inet_pton(PF_INET,127.0.1.1,addr.sin_addr); bind(sockfd, (struct sockaddr*)addr, sizeof(addr)); cout服务端已启动endl; if (listen(sockfd, 5) 0) { perror(listen 失败); close(sockfd); return -1; } int client_fd accept(sockfd, NULL, NULL); if(client_fd0) { cout 客户端已连接 endl; // 接收客户端消息 char buf[1024] {0}; int len recv(client_fd, buf, sizeof(buf), 0); if (len 0) { cout 收到客户端消息: buf endl; } close(client_fd); } this_thread::sleep_for(chrono::seconds(120)); cout实验结束endl; return 0; }客户端#include iostream #include sys/socket.h #include netinet/in.h #include arpa/inet.h #include unistd.h #includecstring #includethread using namespace std; int main() { int sockfdsocket(PF_INET,SOCK_STREAM,0); if(sockfd0) return 0; struct sockaddr_in addr; memset(addr, 0, sizeof(addr)); addr.sin_family AF_INET; addr.sin_port htons(9696); inet_pton(PF_INET,127.0.1.1,addr.sin_addr); cout客户端已启动endl; int ret connect(sockfd, (struct sockaddr*)addr, sizeof(addr)); if(ret0) { cout 服务端已连接 endl; const char* msg Hello Server!; send(sockfd, msg, strlen(msg), 0); cout 已发送: msg endl; } sleep(1); close(sockfd); cout实验结束endl; return 0; }然后用tcpdump监测127.0.1.1 port 9696sudo tcpdump -i lo port 9696我们以最为广泛的情况为例及客户端发起连接得到如下结果tcpdump: verbose output suppressed, use -v[v]... for full protocol decodelistening on lo, link-type EN10MB (Ethernet), snapshot length 262144 bytes19:24:38.805089 IP localhost.35468 LAPTOP-ICB9D6A5.localdomain.9696: Flags [S], seq 3868189141, win 65495, options [mss 65495,sackOK,TS val 2793727009 ecr 0,nop,wscale 7], length 019:24:38.805150 IP LAPTOP-ICB9D6A5.localdomain.9696 localhost.35468: Flags [S.], seq 3474975242, ack 3868189142, win 65483, options [mss 65495,sackOK,TS val 3205993548 ecr 2793727009,nop,wscale 7], length 019:24:38.805187 IP localhost.35468 LAPTOP-ICB9D6A5.localdomain.9696: Flags [.], ack 1, win 512, options [nop,nop,TS val 2793727009 ecr 3205993548], length 019:24:38.805414 IP localhost.35468 LAPTOP-ICB9D6A5.localdomain.9696: Flags [P.], seq 1:14, ack 1, win 512, options [nop,nop,TS val 2793727009 ecr 3205993548], length 1319:24:38.805421 IP LAPTOP-ICB9D6A5.localdomain.9696 localhost.35468: Flags [.], ack 14, win 512, options [nop,nop,TS val 3205993548 ecr 2793727009], length 019:24:38.805621 IP LAPTOP-ICB9D6A5.localdomain.9696 localhost.35468: Flags [F.], seq 1, ack 14, win 512, options [nop,nop,TS val 3205993549 ecr 2793727009], length 019:24:38.812084 IP localhost.35468 LAPTOP-ICB9D6A5.localdomain.9696: Flags [.], ack 2, win 512, options [nop,nop,TS val 2793727016 ecr 3205993549], length 019:24:39.810590 IP localhost.35468 LAPTOP-ICB9D6A5.localdomain.9696: Flags [F.], seq 14, ack 2, win 512, options [nop,nop,TS val 2793728014 ecr 3205993549], length 019:24:39.810726 IP LAPTOP-ICB9D6A5.localdomain.9696 localhost.35468: Flags [.], ack 15, win 512, options [nop,nop,TS val 3205994554 ecr 2793728014], length 0我们一条条分析19:24:38.805089 IP localhost.35468 LAPTOP-ICB9D6A5.localdomain.9696: Flags [S], seq 3868189141, win 65495, options [mss 65495,sackOK,TS val 2793727009 ecr 0,nop,wscale 7], length 0即为第一次握手 客户端发一个 SYN seq3868189141(x)从close进入SYN_SENT19:24:38.805150 IP LAPTOP-ICB9D6A5.localdomain.9696 localhost.35468: Flags [S.], seq 3474975242, ack 3868189142, win 65483, options [mss 65495,sackOK,TS val 3205993548 ecr 2793727009,nop,wscale 7], length 0即为SYNACK阶段服务端发 SYN ACK ack3868189142(x1) seq3474975242收时从close进入SYN_RCVD发时从SYN_RCVD到established19:24:38.805187 IP localhost.35468 LAPTOP-ICB9D6A5.localdomain.9696: Flags [.], ack 1, win 512, options [nop,nop,TS val 2793727009 ecr 3205993548], length 0客户端收到消息后发ack(此处ack为1是因为tcpdump自此之后都显示相对seq)收时从SYN_SENT到established稳定传输阶段19:24:38.805414 IP localhost.35468 LAPTOP-ICB9D6A5.localdomain.9696: Flags [P.], seq 1:14, ack 1, win 512, options [nop,nop,TS val 2793727009 ecr 3205993548], length 13length13,恰好是Hello Server!的长度与实际情况吻合的非常不错!断开连接阶段调用close(sockfd)后第一次挥手19:24:38.805621 IP LAPTOP-ICB9D6A5.localdomain.9696 localhost.35468: Flags [F.], seq 1, ack 14, win 512, options [nop,nop,TS val 3205993549 ecr 2793727009], length 0在我们的例子里是服务端首先发 FIN进入到FIN_WAIT_1第二次挥手19:24:38.812084 IP localhost.35468 LAPTOP-ICB9D6A5.localdomain.9696: Flags [.], ack 2, win 512, options [nop,nop,TS val 2793727016 ecr 3205993549], length 0客户端收到后发 ACK进入到close_wait此时也就是常说的半关闭状态服务端收到后进入到FIN_WAIT_2第三次挥手19:24:39.810590 IP localhost.35468 LAPTOP-ICB9D6A5.localdomain.9696: Flags [F.], seq 14, ack 2, win 512, options [nop,nop,TS val 2793728014 ecr 3205993549], length 0客户端到要断开时发 FIN进入到last_ack第四次挥手19:24:39.810726 IP LAPTOP-ICB9D6A5.localdomain.9696 localhost.35468: Flags [.], ack 15, win 512, options [nop,nop,TS val 3205994554 ecr 2793728014], length 0服务端收到时发 ack进入到time_wait客户端收到后到close在2msl后服务端到close运行截图本机条件Ubuntu 24.04.4 LTS (GNU/Linux 6.6.87.2-microsoft-standard-WSL2 x86_64)

相关推荐

FreeTube 护眼模式快速上手:60 秒切深色,夜间把蓝光调舒服
FreeTube 护眼模式快速上手:60 秒切深色,夜间把蓝光调舒服

FreeTube 护眼模式快速上手:60 秒切深色,夜间把蓝光调舒服 FreeTube 是个开源、把隐私放在第一位的 YouTube 客户端。想让它对眼睛友好点,不用折腾半天:跟着下面的顺序走,60 秒就能切到深色,再花几分钟把夜… · 2026/11/5 3:32:15

在macOS上安装OpenClaw并实现Chrome网站自动化测试_openclaw browser relay-CSDN博客
在macOS上安装OpenClaw并实现Chrome网站自动化测试_openclaw browser relay-CSDN博客

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 3:31:15

MiniMax-H3 12G 显卡出带声音的视频:ComfyUI 部署完整实操
MiniMax-H3 12G 显卡出带声音的视频:ComfyUI 部署完整实操

MiniMax-H3 12G 显卡出带声音的视频:ComfyUI 部署完整实操 【免费下载链接】MiniMax-H3 项目地址: https://ai.gitcode.com/hf_mirrors/Comfy-Org/MiniMax-H3 MiniMax-H3 部署卡住的人,多半卡在三个点:选哪个精度版本、文件放哪个目录… · 2026/11/5 3:31:15

AI机械臂OpenClaw:从语言指令到物理执行的技术突破
AI机械臂OpenClaw:从语言指令到物理执行的技术突破

1. 项目概述:当AI开始真正动手干活上周调试机械臂时,我突然意识到:当前大多数AI助手都停留在"动嘴不动手"的阶段。于是花72小时爆肝开发了OpenClaw——这个能通过物理接口直接操控机械装置的执行级AI系统。与市面上只能生成文本/图… · 2026/11/5 4:19:38

链表相加算法解析与Java实现
链表相加算法解析与Java实现

1. 链表相加算法解析与实现两数相加是LeetCode上经典的链表操作题目,编号为第2题。这道题考察了对链表数据结构的理解、指针操作以及数学进位处理能力。题目要求我们将两个用链表逆序表示的非负整数相加,并返回同样逆序存储的和的链表。提示:… · 2026/11/5 4:19:38

SAP ERP系统架构与数字化转型实战解析
SAP ERP系统架构与数字化转型实战解析

1. SAP ERP系统与企业数字化转型全景在制造业龙头企业的IT部门工作十几年,我见证了SAP系统从R/3时代到S/4HANA Cloud的完整演进历程。今天要分享的不仅是技术架构解析,更是企业级ERP系统在云原生和AI时代的第一手实战经验。SAP作为全球领先的企业管理软件… · 2026/11/5 4:19:38

代码管理工具选型指南:GitHub、Gitee与GitLab对比
代码管理工具选型指南:GitHub、Gitee与GitLab对比

1. 代码管理工具的选择困境作为国内开发者,我们每天都要面对一个看似简单却影响深远的决策:该用哪个代码管理工具?这个问题背后涉及版本控制、团队协作、代码安全等多重考量。十年前可能只需要掌握SVN就够了,但如今Git生态下各种平… · 2026/11/5 4:19:38

纯C++轻量信号槽:基于Poco的跨平台事件通信实现
纯C++轻量信号槽:基于Poco的跨平台事件通信实现

简介:本资源是一份面向C中级开发者的技术实践工程,聚焦于在非Qt环境下复现信号与槽机制的核心思想,解决纯C项目中对象解耦通信的常见需求。项目基于跨平台网络库Poco的事件系统实现类Qt风格的信号发射与槽函数绑定,并采用CMakeLis… · 2026/11/5 4:19:38

RDMA网络PFC配置实战与避坑指南
RDMA网络PFC配置实战与避坑指南

1. 项目背景与核心挑战RDMA(远程直接内存访问)技术正在彻底改变数据中心网络性能的边界。作为新一代网络通信协议,它允许计算机直接访问另一台计算机的内存而无需经过操作系统内核,这种绕过内核的零拷贝技术能够将延迟降低到微秒级… · 2026/11/5 4:18:38

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

多智能体协作系统架构设计与实践优化
多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中… · 2026/11/5 0:00:39

大模型系统性入门实战指南:从原理到部署微调的全链路路线
大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#… · 2026/11/5 0:00:39

鸿蒙文件系统沙箱机制解析与开发实践
鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的… · 2026/11/5 0:00:39

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码