Wireshark数据抓包分析之传输层协议(TCP协议)
字数 2063 2025-08-15 21:33:54

Wireshark数据抓包分析之TCP协议详解

一、TCP协议概述

TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。其主要特点包括:

  1. 可靠性:通过确认机制和重传机制确保数据可靠传输
  2. 面向连接:通信前需要建立连接,通信结束后需要断开连接
  3. 流量控制:通过滑动窗口机制实现
  4. 拥塞控制:通过多种算法避免网络拥塞

二、TCP连接建立与终止

1. 三次握手建立连接

TCP使用三次握手建立可靠连接:

第一次握手

  • 客户端发送SYN=1的TCP报文
  • 随机生成初始序列号(Sequence Number)
  • 不携带应用层数据

第二次握手

  • 服务端发送SYN=1, ACK=1的TCP报文
  • 确认客户端的序列号(ACK=客户端序列号+1)
  • 随机生成服务端的初始序列号

第三次握手

  • 客户端发送ACK=1的TCP报文
  • 确认服务端的序列号(ACK=服务端序列号+1)
  • 可以携带应用层数据

2. 四次挥手断开连接

TCP使用四次挥手断开连接:

第一次挥手

  • 主动关闭方发送FIN=1, ACK=1的TCP报文
  • 表示不再发送数据

第二次挥手

  • 被动关闭方发送ACK=1的TCP报文
  • 确认收到FIN请求

第三次挥手

  • 被动关闭方发送FIN=1, ACK=1的TCP报文
  • 表示不再发送数据

第四次挥手

  • 主动关闭方发送ACK=1的TCP报文
  • 确认收到FIN请求

三、TCP报文格式

TCP报文头部包含以下重要字段:

  1. 源端口(16位):发送方的端口号
  2. 目的端口(16位):接收方的端口号
  3. 序列号(32位):本报文段数据的第一个字节的序号
  4. 确认号(32位):期望收到的下一个报文段的第一个数据字节的序号
  5. 数据偏移(4位):TCP报文段的首部长度
  6. 控制标志(6位)
    • URG:紧急指针有效
    • ACK:确认号有效
    • PSH:接收方应尽快将数据交给应用层
    • RST:重置连接
    • SYN:同步序号,用于建立连接
    • FIN:发送方已完成数据发送
  7. 窗口大小(16位):接收窗口大小,用于流量控制
  8. 校验和(16位):头部和数据的校验和
  9. 紧急指针(16位):紧急数据的最后一个字节的偏移量

四、Wireshark抓包实战分析

1. 实验环境搭建

  1. 准备两台测试机器:
    • 服务器端IP:10.1.1.33
    • 客户端IP:10.1.1.142
  2. 在两台机器上安装"TCP&UDP测试工具"
  3. 在服务器端创建TCP服务器,监听6000端口
  4. 在客户端创建TCP连接,连接到服务器10.1.1.33:6000

2. Wireshark抓包配置

  1. 启动Wireshark,选择正确的网络接口
  2. 使用过滤器过滤目标流量:
    ip.addr == 10.1.1.142 and ip.addr == 10.1.1.33
    
  3. 应用过滤器后,可以清晰看到TCP三次握手和四次断开的数据包

3. 三次握手分析

第一次握手(帧70)

  • 标志位:SYN=1
  • 源端口:56678(随机选择)
  • 目的端口:6000
  • 序列号:相对序列号为0(实际序列号可能不同)
  • 确认号:0(第一次握手无确认)
  • 窗口大小:64240

第二次握手(帧73)

  • 标志位:SYN=1, ACK=1
  • 源端口:6000
  • 目的端口:56678
  • 序列号:相对序列号为0
  • 确认号:1(客户端序列号+1)
  • 窗口大小:28960

第三次握手(帧74)

  • 标志位:ACK=1
  • 源端口:56678
  • 目的端口:6000
  • 序列号:1(相对)
  • 确认号:1(服务端序列号+1)
  • 窗口大小:514

4. 四次断开分析

第一次断开(帧428)

  • 标志位:FIN=1, ACK=1
  • 源端口:56678
  • 目的端口:6000
  • 序列号:1(相对)
  • 确认号:1
  • 窗口大小:514

第二次断开(帧429)

  • 标志位:ACK=1
  • 源端口:6000
  • 目的端口:56678
  • 序列号:1
  • 确认号:2(客户端序列号+1)
  • 窗口大小:28960

第三次断开(帧430)

  • 标志位:FIN=1, ACK=1
  • 源端口:6000
  • 目的端口:56678
  • 序列号:1
  • 确认号:2
  • 窗口大小:28960

第四次断开(帧431)

  • 标志位:ACK=1
  • 源端口:56678
  • 目的端口:6000
  • 序列号:2
  • 确认号:2(服务端序列号+1)
  • 窗口大小:514

五、关键点总结

  1. 序列号和确认号:TCP通过序列号和确认号实现可靠传输
  2. 标志位:SYN、ACK、FIN在连接建立和断开过程中起关键作用
  3. 窗口大小:动态调整实现流量控制
  4. 三次握手必要性:防止历史连接请求突然到达服务器导致错误
  5. 四次挥手必要性:TCP是全双工协议,需要分别关闭两个方向的连接
  6. TIME_WAIT状态:主动关闭方在发送最后一个ACK后会进入TIME_WAIT状态,等待2MSL时间

六、常见问题分析

  1. 连接失败:检查SYN是否被正确ACK
  2. 数据传输问题:检查序列号和确认号是否连续
  3. 连接重置:检查是否有RST标志
  4. 性能问题:检查窗口大小变化和重传情况

通过Wireshark抓包分析TCP协议,可以深入理解TCP的工作机制,对网络故障排查和性能优化有很大帮助。

Wireshark数据抓包分析之TCP协议详解 一、TCP协议概述 TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。其主要特点包括: 可靠性 :通过确认机制和重传机制确保数据可靠传输 面向连接 :通信前需要建立连接,通信结束后需要断开连接 流量控制 :通过滑动窗口机制实现 拥塞控制 :通过多种算法避免网络拥塞 二、TCP连接建立与终止 1. 三次握手建立连接 TCP使用三次握手建立可靠连接: 第一次握手 : 客户端发送SYN=1的TCP报文 随机生成初始序列号(Sequence Number) 不携带应用层数据 第二次握手 : 服务端发送SYN=1, ACK=1的TCP报文 确认客户端的序列号(ACK=客户端序列号+1) 随机生成服务端的初始序列号 第三次握手 : 客户端发送ACK=1的TCP报文 确认服务端的序列号(ACK=服务端序列号+1) 可以携带应用层数据 2. 四次挥手断开连接 TCP使用四次挥手断开连接: 第一次挥手 : 主动关闭方发送FIN=1, ACK=1的TCP报文 表示不再发送数据 第二次挥手 : 被动关闭方发送ACK=1的TCP报文 确认收到FIN请求 第三次挥手 : 被动关闭方发送FIN=1, ACK=1的TCP报文 表示不再发送数据 第四次挥手 : 主动关闭方发送ACK=1的TCP报文 确认收到FIN请求 三、TCP报文格式 TCP报文头部包含以下重要字段: 源端口(16位) :发送方的端口号 目的端口(16位) :接收方的端口号 序列号(32位) :本报文段数据的第一个字节的序号 确认号(32位) :期望收到的下一个报文段的第一个数据字节的序号 数据偏移(4位) :TCP报文段的首部长度 控制标志(6位) : URG:紧急指针有效 ACK:确认号有效 PSH:接收方应尽快将数据交给应用层 RST:重置连接 SYN:同步序号,用于建立连接 FIN:发送方已完成数据发送 窗口大小(16位) :接收窗口大小,用于流量控制 校验和(16位) :头部和数据的校验和 紧急指针(16位) :紧急数据的最后一个字节的偏移量 四、Wireshark抓包实战分析 1. 实验环境搭建 准备两台测试机器: 服务器端IP:10.1.1.33 客户端IP:10.1.1.142 在两台机器上安装"TCP&UDP测试工具" 在服务器端创建TCP服务器,监听6000端口 在客户端创建TCP连接,连接到服务器10.1.1.33:6000 2. Wireshark抓包配置 启动Wireshark,选择正确的网络接口 使用过滤器过滤目标流量: 应用过滤器后,可以清晰看到TCP三次握手和四次断开的数据包 3. 三次握手分析 第一次握手(帧70) : 标志位:SYN=1 源端口:56678(随机选择) 目的端口:6000 序列号:相对序列号为0(实际序列号可能不同) 确认号:0(第一次握手无确认) 窗口大小:64240 第二次握手(帧73) : 标志位:SYN=1, ACK=1 源端口:6000 目的端口:56678 序列号:相对序列号为0 确认号:1(客户端序列号+1) 窗口大小:28960 第三次握手(帧74) : 标志位:ACK=1 源端口:56678 目的端口:6000 序列号:1(相对) 确认号:1(服务端序列号+1) 窗口大小:514 4. 四次断开分析 第一次断开(帧428) : 标志位:FIN=1, ACK=1 源端口:56678 目的端口:6000 序列号:1(相对) 确认号:1 窗口大小:514 第二次断开(帧429) : 标志位:ACK=1 源端口:6000 目的端口:56678 序列号:1 确认号:2(客户端序列号+1) 窗口大小:28960 第三次断开(帧430) : 标志位:FIN=1, ACK=1 源端口:6000 目的端口:56678 序列号:1 确认号:2 窗口大小:28960 第四次断开(帧431) : 标志位:ACK=1 源端口:56678 目的端口:6000 序列号:2 确认号:2(服务端序列号+1) 窗口大小:514 五、关键点总结 序列号和确认号 :TCP通过序列号和确认号实现可靠传输 标志位 :SYN、ACK、FIN在连接建立和断开过程中起关键作用 窗口大小 :动态调整实现流量控制 三次握手必要性 :防止历史连接请求突然到达服务器导致错误 四次挥手必要性 :TCP是全双工协议,需要分别关闭两个方向的连接 TIME_ WAIT状态 :主动关闭方在发送最后一个ACK后会进入TIME_ WAIT状态,等待2MSL时间 六、常见问题分析 连接失败 :检查SYN是否被正确ACK 数据传输问题 :检查序列号和确认号是否连续 连接重置 :检查是否有RST标志 性能问题 :检查窗口大小变化和重传情况 通过Wireshark抓包分析TCP协议,可以深入理解TCP的工作机制,对网络故障排查和性能优化有很大帮助。