TCP与UDP协议深度解析

从理论到实战抓包分析

深入分析TCP和UDP协议的核心差异

Youqing Han
DevOps Engineer

网络协议分析与故障排查指南

议程

我们将要学习的内容

  • TCP与UDP协议核心差异
  • TCP三次握手机制详解
  • TCP四次挥手过程分析
  • tcpdump实战抓包分析
  • Wireshark网络协议分析
  • 网络故障排查指南

TCP vs UDP 核心差异

传输控制协议 vs 用户数据报协议

TCP (Transmission Control Protocol)

  • 可靠性: 保证数据完整传输
  • 连接导向: 需要建立连接
  • 流量控制: 防止发送方过快发送
  • 拥塞控制: 网络拥塞时调整发送速率

UDP (User Datagram Protocol)

  • 无连接: 直接发送数据
  • 不可靠: 不保证数据到达
  • 低延迟: 无握手过程
  • 简单高效: 适合实时应用

TCP三次握手详解

建立可靠连接的过程

第一次握手 (SYN)

  • 客户端发送 SYN=1, seq=x
  • 进入 SYN_SENT 状态
  • 等待服务器确认

第二次握手 (SYN+ACK)

  • 服务器发送 SYN=1, ACK=1, seq=y, ack=x+1
  • 进入 SYN_RCVD 状态
  • 确认客户端连接请求

第三次握手 (ACK)

  • 客户端发送 ACK=1, seq=x+1, ack=y+1
  • 进入 ESTABLISHED 状态
  • 连接建立完成

TCP四次挥手过程

优雅关闭连接

第一次挥手 (FIN)

  • 主动关闭方发送 FIN=1, seq=u
  • 进入 FIN_WAIT_1 状态
  • 等待对方确认

第二次挥手 (ACK)

  • 被动关闭方发送 ACK=1, ack=u+1
  • 进入 CLOSE_WAIT 状态
  • 确认收到关闭请求

第三次挥手 (FIN)

  • 被动关闭方发送 FIN=1, seq=w
  • 进入 LAST_ACK 状态
  • 准备关闭连接

第四次挥手 (ACK)

  • 主动关闭方发送 ACK=1, ack=w+1
  • 进入 TIME_WAIT 状态
  • 等待2MSL后关闭

tcpdump实战抓包

# 基本抓包命令
sudo tcpdump -i eth0

# 抓取特定端口
sudo tcpdump port 80

# 抓取TCP三次握手
sudo tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn|tcp-ack) != 0'

# 抓取HTTP请求
sudo tcpdump -i eth0 -A 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

# 保存到文件
sudo tcpdump -w capture.pcap -i eth0

# 读取pcap文件
tcpdump -r capture.pcap

Wireshark协议分析

图形化网络分析工具

主要功能

  • 实时抓包: 监控网络流量
  • 协议解析: 自动解析各种协议
  • 流量统计: 分析网络性能
  • 过滤功能: 快速定位问题

常用过滤器

  • tcp.port == 80 - HTTP流量
  • tcp.flags.syn == 1 - SYN包
  • tcp.analysis.flags - TCP分析
  • http.request.method == "GET" - GET请求

分析技巧

  • 查看TCP流
  • 分析重传包
  • 检查RTT延迟
  • 识别网络拥塞

网络故障排查指南

常见问题与解决方案

连接超时

  • 检查防火墙规则
  • 验证路由配置
  • 确认服务状态

数据包丢失

  • 监控网络质量
  • 检查交换机状态
  • 分析重传统计

性能问题

  • 分析RTT延迟
  • 检查带宽利用率
  • 优化TCP参数

工具推荐

  • ping - 连通性测试
  • traceroute - 路径追踪
  • netstat - 连接状态
  • ss - 现代netstat替代

实战案例分析

真实场景问题解决

案例1: 网站访问缓慢

  • 现象: 页面加载时间过长
  • 分析: tcpdump发现大量重传
  • 原因: 网络丢包严重
  • 解决: 调整TCP窗口大小

案例2: 数据库连接失败

  • 现象: 应用无法连接数据库
  • 分析: Wireshark显示连接被重置
  • 原因: 防火墙阻止连接
  • 解决: 开放相应端口

案例3: 文件传输中断

  • 现象: 大文件传输经常中断
  • 分析: 发现TCP连接超时
  • 原因: 网络不稳定
  • 解决: 启用TCP重传机制

最佳实践总结

网络协议优化建议

TCP优化

  • 调整窗口大小
  • 启用TCP_NODELAY
  • 配置合适的超时时间
  • 使用连接池

UDP优化

  • 实现应用层重传
  • 添加序列号机制
  • 监控丢包率
  • 优化数据包大小

监控建议

  • 实时监控网络质量
  • 设置告警阈值
  • 定期分析日志
  • 建立基线数据

总结与Q&A

感谢观看!

关键要点回顾

  • TCP提供可靠传输,UDP追求高效
  • 三次握手建立连接,四次挥手关闭
  • tcpdump和Wireshark是分析利器
  • 系统化排查网络问题

Questions & Answers

有任何问题欢迎交流讨论

1 / 11
Back to Slides
hanyouqing.com