使用Wireshark进行TCP数据包抓包分析:三次握手与四次挥手详解

wireshark抓包分析TCP数据包

除了Wireshark,Sniffmaster作为一款全平台抓包工具,支持HTTPS、TCP和UDP协议,可在iOS、Android、Mac、Windows设备上实现无需代理、越狱或root的抓包操作,特别适合移动端和跨平台网络分析。

1、直接从TCP的 三次握手 开始说起

三次握手就是客户与服务器建立连接的过程

  • 客户向服务器发送SYN(SEQ=x)报文,然后就会进入SYN_SEND状态
  • 服务器收到SYN报文之后,回应一个SYN(SEQ=y)ACK(ACK=x+1)报文,然后就会进入SYN_RECV状态
  • 客户收到服务器的SYN报文,回应一个ACK(ACK=y+1)报文,然后就会进入Established状态

举例时间到!我们把客户端比作男生,服务器比作女生

第一次握手就像是男生对女生的告白:我喜欢你我们在一起吧。(之后,男孩就要等待女孩的回复,因为要确定女孩听到他说的话)

第二次握手则是女生的回应:好呀好呀。(之后,女孩也要等待,因为要确定男孩听到她的答复)

第三次握手就是男生的回应:真好,我们去吃火锅吧~。(此时,两人都确定对方收到了消息,关系成功建立)

也就是客户端和服务器数据的传输

接下来,我们抓包分析一下三次握手建立的过程

第一次握手:我向服务器发送了SYN,并设置Seq=0(x),请求与服务器建立连接

第二次握手:服务器向我回应了SYN,并设置Seq=0(y),ACK=1(x+1)

第三次握手:我收到服务器的SYN报文,回应一个ACK=1(y+1)

2、再接着说说四次挥手

四次挥手就是客户与服务器断开连接的过程

  • 客户发送一个FIN,断开与服务器的连接
  • 服务器收到FIN,回应一个ACK,确认序号为收到的序号加1
  • 服务器关闭客户端的连接,并发送一个FIN
  • 客户回发ACK确认,并将确认序号设置为收到序号加1

又到了举例时间!我们同样把客户端比作男生,服务器比作女生

第一次挥手:随着时间的流逝,女生变了,于是男生给女生发了分手短信,然后等待女生的回复

第二次挥手:女生听到后,伤心欲绝,就告诉男生:分手就分手,我把你的东西收拾收拾都还给你。男生就知道了女生同意了分手,于是等待女生把东西收拾好交还给他

第三次挥手:女生把男生的东西都收拾好,给男生发了第二条短信让他来取

第四次挥手:男生收到后,在回复最后一条短信,我知道了,我现在去取。于是关系断了

也就是客户端和服务器的连接中断

接下来,抓包看一下四次挥手的过程

第一次挥手:我向服务器发送FIN,Seq=3092,Ack=183

第二次挥手:服务器回发了ACK,Seq=183,Ack=3093

第三次挥手:服务器发送FIN,Seq=183,Ack=3093

第四次挥手:我向服务器回复了ACK,Seq=3093,Ack=184

3、TCP报文段格式分析

源端口和目的端口: 各占16位,这两个字段分别填入发送该报文段应用程序的源端口号和接收该报文段的应用程序的目的端口号

序列号: 占32位,TCP连接中传送的数据流中的每一个字节都编上一个序号,序号字段的值则指的是本报文段所发送的数据的第一个字节的序号

确认号: 占32位,表示期望收到对方下一个报文段的第一数据字节的序号。

数据偏移: 占4位,又称首部长度。指出首部的长度,即数据离开报文段开始的偏移量。

保留: 占6位,留待后用,目前置为0

标志: 占6位,又称控制字段,各位都有特定意义

  • 紧急URG,表示本报文数据的紧急程度,URG=1表示本报文具有高优先级
  • 确认ACK,ACK=1时,确认号字段才有意义
  • 推送PSH,PSH=1时,表示请求接收端TCP将本报文段立即送往其应用层
  • 复位RST,RST=1时,表示TCP连接中出现了严重错误,必须释放传输连接,而后在重建
  • 同步SYN,该位在连接建立时使用,起着序号同步的作用
  • 终止FIN,用来释放一个链接

窗口: 占16位,该字段用于流控制

校验和: 占16位,该字段的校验范围是整个报文段(包括首部和数据)

紧急指针: 占16位,当URG=1时有意义,指出紧急数据的末尾在报文段中的位置,使得接收端能知道紧急数据的字节数

选项与填充: 最长可达40B

相关推荐
tachibana237 分钟前
与其他语言相比,使用 Go 有什么好处?
开发语言·后端·golang·go
ii_best10 小时前
按键精灵手机端开发安卓版实战:手写一个可最小化、可拖动的「运行日志悬浮窗」(附完整 源码 + 踩坑记录)
android·ios·智能手机·自动化·ai编程·按键精灵
蜗牛互联网10 小时前
WSL Containers GA:本地AI容器的生命周期、网络与治理验收
java·网络·人工智能·后端
Zhou14113611 小时前
SpringBoot_02_自动配置原理
java·spring boot·后端
美狐美颜SDK开放平台11 小时前
Android与iOS直播APP美颜有什么区别?视频美颜SDK开发详解
android·ios·音视频·视频美颜sdk
子兮曰12 小时前
Node.js 50个优势场景盘点:一个人单干,为啥我多数时候只用它
前端·后端
IT_陈寒12 小时前
我花3小时debug,就因为JavaScript这个隐式转换坑
前端·人工智能·后端
程序猿阿越13 小时前
containerd如何拉取镜像
后端·kubernetes·源码阅读
一条小小yu13 小时前
为什么使用springboot
java·spring boot·后端
香瓜子rd13 小时前
MySQL InnoDB 并发控制核心原理:事务、隔离级别、MVCC 与锁机制
数据库·后端