Wireshark数据抓包分析之传输层协议(TCP协议)
字数 2063 2025-08-15 21:33:54
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,选择正确的网络接口
- 使用过滤器过滤目标流量:
ip.addr == 10.1.1.142 and ip.addr == 10.1.1.33 - 应用过滤器后,可以清晰看到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的工作机制,对网络故障排查和性能优化有很大帮助。