news 2026/4/18 8:36:22

http请求完整的tcpdump抓包解读

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
http请求完整的tcpdump抓包解读

这个过程包括TCP 三次握手HTTP 请求/响应TCP 四次挥手

我们使用以下命令来捕获与httpbin.org网站进行的一次简单 HTTP 交互:

sudo tcpdump -i any -n -s0 host httpbin.org

然后,在另一个终端使用curl发送一个请求:

curl http://httpbin.org/get

以下是捕获到的数据包序列的详细解读。为了清晰起见,我对输出进行了精简和注释,并模拟了完整的流程。


完整的 HTTP 请求 tcpdump 输出样例与解读

阶段一:TCP 三次握手 (Establishing the Connection)

客户端(192.168.1.100)需要先与服务器(54.xxx.xxx.xxx)建立可靠的 TCP 连接。

1. [Client -> Server] SYN Packet

13:37:01.123456 IP 192.168.1.100.58234 > 54.xxx.xxx.xxx.80: Flags [S], seq 3920617153, win 64240, options [mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 7], length 0

  • 解读:客户端发送一个SYN(S) 包到服务器的 80 端口。seq是一个随机生成的初始序列号(ISN)。这是在说:“你好,我想建立连接,我的初始序列号是 3920617153。”

2. [Server -> Client] SYN-ACK Packet

13:37:01.234567 IP 54.xxx.xxx.xxx.80 > 192.168.1.100.58234: Flags [S.], seq 1982746241, ack 3920617154, win 65535, options [mss 1440,sackOK,TS val 200 ecr 100,nop,wscale 9], length 0

  • 解读:服务器回应一个SYN-ACK(S.) 包。它确认了客户端的 SYN(ack 3920617154,即客户端的 ISN + 1),同时也发送了自己的 SYN 和初始序列号 (seq 1982746241)。这是在说:“收到你的请求了,我同意建立连接,我的初始序列号是 1982746241。”

3. [Client -> Server] ACK Packet

13:37:01.345678 IP 192.168.1.100.58234 > 54.xxx.xxx.xxx.80: Flags [.], ack 1982746242, win 502, options [nop,nop,TS val 101 ecr 200], length 0

  • 解读:客户端发送一个ACK(.) 包,确认服务器的 SYN(ack 1982746242,即服务器的 ISN + 1)。至此,TCP 三次握手完成,连接建立。这是在说:“收到你的同意了,连接已建立,我们可以开始传输数据了。”

阶段二:HTTP 请求与响应 (Data Transfer)

连接建立后,客户端开始发送 HTTP 请求。

4. [Client -> Server] HTTP GET Request (PSH-ACK)

13:37:01.456789 IP 192.168.1.100.58234 > 54.xxx.xxx.xxx.80: Flags [P.], seq 3920617154:3920617251, ack 1982746242, win 502, options [nop,nop,TS val 102 ecr 200], length 97

  • 解读:客户端发送一个PSH-ACK(P.) 包。PSH标志表示数据需要被立刻推送给应用层(HTTP服务器)。length 97表明这个包携带了 97 字节的应用层数据(即我们的 HTTP 请求)。
    • HTTP数据内容(可使用tcpdump -A查看):

      GET /get HTTP/1.1
      Host: httpbin.org
      User-Agent: curl/8.8.0
      Accept:/

5. [Server -> Client] ACK for the Request

13:37:01.567890 IP 54.xxx.xxx.xxx.80 > 192.168.1.100.58234: Flags [.], ack 3920617251, win 1440, options [nop,nop,TS val 201 ecr 102], length 0

  • 解读:服务器发送一个ACK(.) 包,确认已收到客户端的完整 HTTP 请求(ack 3920617251是客户端下一个期待的序列号)。

6. [Server -> Client] HTTP Response (PSH-ACK)

13:37:01.678901 IP 54.xxx.xxx.xxx.80 > 192.168.1.100.58234: Flags [P.], seq 1982746242:1982746685, ack 3920617251, win 1440, options [nop,nop,TS val 202 ecr 102], length 443

  • 解读:服务器处理请求后,发回 HTTP 响应。同样使用了PSH-ACK标志,length 443表示这个响应数据包有 443 字节。
    • HTTP数据内容(可使用tcpdump -A查看):

      HTTP/1.1 200 OK
      Date: Tue, 25 Jan 2026 13:37:01 GMT
      Content-Type: application/json
      … (其他头部)
      {
      “args”: {},
      “headers”: {
      “Accept”: “/”,
      “Host”: “httpbin.org”,
      “User-Agent”: “curl/8.8.0”
      },
      “url”: “http://httpbin.org/get”
      }

7. [Client -> Server] ACK for the Response

13:37:01.789012 IP 192.168.1.100.58234 > 54.xxx.xxx.xxx.80: Flags [.], ack 1982746685, win 501, options [nop,nop,TS val 103 ecr 202], length 0

  • 解读:客户端发送一个ACK(.) 包,确认已收到服务器的 HTTP 响应。

阶段三:TCP 四次挥手 (Terminating the Connection)

数据交换完成后,连接被关闭。curl默认使用 HTTP/1.1,通常会发起Connection: close

8. [Client -> Server] FIN-ACK Packet

13:37:01.890123 IP 192.168.1.100.58234 > 54.xxx.xxx.xxx.80: Flags [F.], seq 3920617251, ack 1982746685, win 501, options [nop,nop,TS val 104 ecr 202], length 0

  • 解读:客户端发送一个FIN-ACK(F.) 包,表示它已经完成了数据发送,希望关闭连接。

9. [Server -> Client] ACK for the FIN

13:37:02.001234 IP 54.xxx.xxx.xxx.80 > 192.168.1.100.58234: Flags [.], ack 3920617252, win 1440, options [nop,nop,TS val 203 ecr 104], length 0

  • 解读:服务器确认客户端的 FIN 包。

10. [Server -> Client] FIN-ACK Packet

13:37:02.112345 IP 54.xxx.xxx.xxx.80 > 192.168.1.100.58234: Flags [F.], seq 1982746685, ack 3920617252, win 1440, options [nop,nop,TS val 204 ecr 104], length 0

  • 解读:服务器也发送一个FIN-ACK包,表示它也准备关闭连接。

11. [Client -> Server] Final ACK

13:37:02.223456 IP 192.168.1.100.58234 > 54.xxx.xxx.xxx.80: Flags [.], ack 1982746686, win 501, options [nop,nop,TS val 105 ecr 204], length 0

  • 解读:客户端发送最后一个ACK包,确认服务器的 FIN 包。至此,TCP 连接完全关闭。

总结

这个流程完美展示了一个完整 HTTP 事务的底层 TCP/IP 通信过程:

  1. 连接建立:3个包 (SYN -> SYN-ACK -> ACK)
  2. 数据传输:4个包 (HTTP请求 -> ACK -> HTTP响应 -> ACK)
  3. 连接终止:4个包 (FIN -> ACK -> FIN -> ACK)

总包数:11个

在实际捕获中,你可能会看到更多ACK包,因为 TCP 会持续确认收到的数据,或者数据包被分片传输。但这个样例清晰地展示了核心的、最精简的流程。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 8:16:40

AI Agent开发实践:关键步骤和最佳实践

AI Agent开发实践:关键步骤和最佳实践 关键词:AI Agent、开发实践、关键步骤、最佳实践、人工智能 摘要:本文围绕AI Agent开发实践展开,深入探讨其关键步骤和最佳实践。首先介绍了AI Agent开发的背景,包括目的、预期读者、文档结构和相关术语。接着阐述了AI Agent的核心概…

作者头像 李华
网站建设 2026/4/17 15:12:05

信奥赛C++提高组csp-s之倍增算法思想及应用案例(3)

信奥赛C提高组csp-s之倍增算法思想及应用案例(3) 题目描述 小 A 的工作不仅繁琐,更有苛刻的规定,要求小 A 每天早上在 6:006:006:00 之前到达公司,否则这个月工资清零。可是小 A 偏偏又有赖床的坏毛病。于是为了保住自己的工资,小…

作者头像 李华
网站建设 2026/4/18 8:26:41

【递归算法】快速幂解决 pow(x,n)

题目链接:pow(x,n) 一、题目解析 题目很简单,要求x的n次幂。 要注意n的取值范围:n可能是负数,这时候我们要利用数学中 x⁻ⁿ 1 / xⁿ 来转换;n可能是 -2,若转换成正数则会超过 int 类型的最大取值 2-1。…

作者头像 李华
网站建设 2026/4/18 7:01:27

基于51单片机的智能水表检测水流量计流量报警器 水表 嵌入式diy

目录 硬件组成软件设计功能扩展注意事项参考方案 源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 硬件组成 51单片机(如STC89C52)作为核心控制器,搭配霍尔传感器或涡轮流量计检测水流速,…

作者头像 李华
网站建设 2026/4/18 7:40:49

Phlux 传感器引起射击界的关注

无噪声 InGaAs 红外传感器正接受评估,拟应用于高端狩猎与专业射击光学设备红外雪崩光电二极管(APD)传感器制造商 Phlux Technology 宣称,其拥有专利的无噪声 InGaAs 红外传感器,已在严苛的国防、电信及工业应用中得到验…

作者头像 李华
网站建设 2026/4/18 7:03:03

一天一个开源项目(第2篇):Remotion - 用 React 程序化创建视频

引言 “如果视频制作也能像写代码一样,用组件、函数和逻辑来构建,那该多好?” 这是"一天一个开源项目"系列的第2篇文章。今天带你了解的项目是 Remotion(GitHub)。 想象一下,你不再需要打开 Aft…

作者头像 李华