使用wireshark抓取TCP包分析1
前言
介绍
本篇文章是使用wireshrak对某个https请求的tcp包进行分析。
目的
通过抓包实际分析了解tcp包。
准备工作
在我自己机子上安装的是wireshark2.2.6版本,随机查找了某个TCP连接,并跟踪流。


传输
创建连接
- No58: 10.60.45.187:17932(后面简称客户端)向131.25.61.68:443(后面简称服务端)发送了
SYN请求连接,此时客户端发送的seq=0,ack=0。 - No79:服务端向客户端发送了
SYN+ACK确认连接,此时服务端发送的seq=0,ack=1。 No81:客户端接收到服务端的
SYN+ACK向服务端响应ACK包,此时客户端发送的seq=0,ack=1。由于抓到的tcp是使用了https协议,建里连接需要先进行认证,步骤如下图所示。

握手
- No84: 客户端向服务端发起握手请求,具体包格式及内容这里不做详细分析。

这里SSL总长度为239字节(其中
ContentType为1字节,Version为2字节,Length为2字节,再加上后续握手协议长度234。)。
- No103: 服务端接收到客户端握手请求后响应
ACK包,此时seq=1,ack=1。这个发送的是一个特殊的TCP Window Update,服务端告知客户端服务端有足够的缓存大小(8192),可以正常接收客户端数据。若出现了TCP Window Full包表示缓存区已满,客户端会停止发送,直到接收到了TCP Window Update包。(Window值表示滑动窗口,允许接收到多个包同时响应一个ACK包) No104: 服务器向客户端发送握手,由于服务端需要返回证书、算法等信息,因此包可能会大于1460字节,会发生拆包现象(No136可看到该包总大小为5984KB,拆分了5个包发送)。当前服务端发送的seq=1,ack=240(当前包大小为1460,No84说明客户端包大小为239。)

- No105: 服务器向客户端发送握手数据,这个包标记的是
TCP Previous segment not captured,说明发送包可能出现了乱序或丢包现象,这个包的seq=2921,而No104的下一个包seq应该为1461,No104和No105中间seq=1461的包可能丢包或乱序传输。

- No106: 服务器向客户端发送握手数据,这个包的seq=4381,因为No105的下一个包的seq和这个包一样,所以这两个包是按顺序传输的。当前包的下一个包seq=5841。

- No108: 这个包是客户端向服务端发送的一个
ACK其中ack=1461,表示客户端确认收到了No104这个包。

- No118: 服务器向客户端发送
ACK包,这个包标记的是TCP Out-Of-Order,由于No105包显示出现了丢包现象,因此tcp将No104以前的包全部重传,这个包实际就是No104。

- No119: 客户端向服务端发送
ACK包,这个包标记的是TCP Dup ACK 108#1,表示重传ACK包,这个包是由于No118包引起的(#N表示重传N次,这里重传了1次),因为No118包服务端向客户端发送了一个乱序的包,而客户端在No108包已经确认接收到No104这个包,seq应该为1461,所以,客户端再一次重传108包告知服务端客户端已经接收到No104包。 - No123和No124: 服务器向客户端发送握手数据,包标记的是
TCP Retransmission,两个包的seq分别为1461和2921,由于服务端认为已经发了这两个包(实际seq=1461的包没发,由No105可看出,seq=2921的包发了,但是客户端没有响应响应的ACK包),然后长时间收不到客户端的ACK包,因此服务端会重发这两个包。 
- No127: 客户端向服务端发送
ACK包。seq=240,ack=5841,表示已经接收到服务端seq=5841以前的所有包。由于TCP协议拥有“受时延的确认”机制(No103的滑动窗口就是干这个用的),即收到一个包可能并不会立刻返回ACK包,收到多个包可能只返回一个ACK包,这样可以减少网络传输。 - No132: 服务器向客户端发送握手数据,包标记的是
TCP Spurious Retransmission,表示这个包已经发送过。该报的seq=1461,即No123重传的包,虽然客户端向服务端发送了ACK包收到了seq=5841以前的包,但是服务端可能没有收到这个ACK包。

- No133: 客户端向服务端发送
ACK包。seq=240,ack=5841。包标记的是TCP Dup ACK 127#1。由于客户端在No127已经返回了ack=5841,但是服务端在No132还是重传了之前已经传过的包,所以客户端认为No127包可能服务端没有收到,所有这里重传了No127这个ACK包。 - No136: 服务端向客户端发送的最后一个握手包。seq=5841。下个包seq=5985,在这包汇总了5个分段包内容和信息。


No140:客户端向服务端发送
ACK包。seq=240,ack=5985。

生成密钥
- No141: 客户端接收到服务端的握手请求后,生成密钥对发送给服务端。由于No103开始的包都是服务端向客户端发送数据,因此客户端的seq一直是240。

- No147: 服务端向客户端重发No136包。因为No140这个包客户已经确认收到seq=5985以前的包了,因此服务端发的这个包发生了虚假重传。
- No148: 客户端向服务端发送
ACK包。这个包标记为TCP Dup ACK 140#1是由于No147这个包服务端发生虚假重传,因此客户端重新发送No140包。 - No152: 服务端向客户端发送,包标记为
Change Cipher Spec, Encrypted Handshake Message,这是对握手信息进行加密。 - No153: 客户端向服务端发送ACK包,接收到了No152包。
发送数据
- No154-No159: 客户端向服务端发送数据。
- No166和No167: 服务端向客户端发送了2个ACK包。
- No170: 服务端向客户端发送数据。
No171: 客户端发送给服务端ACK包,确认收到No170这个包。
- No178: 服务端向客户端发送数据,这个包是No170分段后剩余的数据。
No179: 客户端发送给服务端ACK包,seq=8331,ack=8770,确认收到No178这个包。

No152到No179都是正常传输的包,这里不做详细分析了。
断开连接
No180: 客户端接收完服务端数据后就断开连接了,所以发送了一个
FIN包,同时客户端进入到FIN_WAIT_1状态。

理论上服务端发送完就主动关闭http连接, 但是抓包看确是客户端先发送的
FIN+ACK包,因此说明服务端发送的FIN+ACK的包可能丢包,客户端没收到或收到慢了。

- No187: 服务端发送客户端
FIN+PSH+ACK,seq=7552,ack=8331。这包不但传了FIN关闭连接,又传了PSH。说明No178包服务端发出来,客户端返回的ACK包(No179以及No180)服务端没收到(这中间可能网络处理问题)。 No188: 由于No187包标记为
TCP Out-Of-Order,因此客户端认为服务端的包乱序了,因此,因此客户端重传No179。

- No189: 服务端接收到客户端的
FIN包,也接受到No188包,返回客户端一个ACK包,seq也更新成最新的8770,客户端进入FIN_WAIT_2状态。

No198: 服务端发送给客户端RST重置连接,可能是由于No179到No187之间网络出现了问题,导致连接异常,因此服务端发送了一个RST重置连接。
结论
上面抓的包经分析可能出现多次网络异常或网络波动,出现了乱序,重传,虚假重传及连接重置等TCP包。
若分析有误,希望加以指正。
使用wireshark抓取TCP包分析1的更多相关文章
- Wireshark抓取TCP包分析
介绍 本篇文章是使用wireshrak对某个https请求的tcp包进行分析. 目的 通过抓包实际分析了解tcp包. 准备工作 在我自己机子上安装的是wireshark2.2.6版本,随机查找了某个T ...
- 使用Wireshark 抓取数据包
Wireshark 是一个网络封包分析软件.网络封包分析软件的功能是获取网络封包,并尽可能显示出最为详细的网络封包资料.Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换. 一 ...
- 利用wireshark抓取TCP的整个过程分析。
原文地址:https://www.cnblogs.com/NickQ/p/9226579.html 最近,已经很久都没有更新博客了.看看时间,想想自己做了哪些事情,突然发现自己真的是太贪心,到头来却一 ...
- Fiddler抓取数据包分析案例
案例:利用Fiddler抓取苏宁易购网站数据包分析 抓包软件:Fiddler4 请求名字:www.suning.com 详细内容: 一.了解数据包区域的字段含义 图1数据包区域 #:顺序号,按照抓包的 ...
- Wireshark抓取RTP包,还原语音
最近在做基于SIP的VoIP通信研究,使用Wireshark软件可以对网络流量进行抓包. VoIP使用RTP协议对语音数据进行传输,语音载荷都封装在RTP包里面.要对传输中的语音进行截获和还原,需要通 ...
- WireShark 抓取Telnet包
用Python的Asyncore.dispatcher写了个小服务器,客户端使用telnet连接上去之后一直显示连接丢失,想抓下包看看 抓包结果如下: 服务器在192.168.1.102:8080 端 ...
- 【Azure 环境】在Windows环境中抓取网络包(netsh trace)后,如何转换为Wireshark格式以便进行分析
问题描述 如何在Windows环境中,不安装第三方软件的情况下(使用Windows内置指令),如何抓取网络包呢?并且如何转换为Wireshark 格式呢? 操作步骤 1) 以管理员模式打开CMD,使用 ...
- Android利用tcpdump和wireshark抓取网络数据包
Android利用tcpdump和wireshark抓取网络数据包 主要介绍如何利用tcpdump抓取andorid手机上网络数据请求,利用Wireshark可以清晰的查看到网络请求的各个过程包括三次 ...
- TCP三次握手和四次挥手及wireshark抓取
TCP的三次握手与四次挥手的详细介绍: 三次握手: 第一次握手(SYN=1, seq=x): 客户端发送客户端发送一个 TCP 的 SYN 标志位置1的,指明客户端打算连接的服务器的端口,以及初始序号 ...
随机推荐
- mysql explain用法和结果的含义
转自:http://blog.chinaunix.net/uid-540802-id-3419311.html explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择 ...
- JSTL与EL的区别
JSTL JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的.JSTL只能运行在支持J ...
- hibernate解读之session--基于最新稳定版5.2.12
前言 hibernate是一个实现了JPA标准的,用于对象持久化的orm框架.博主近一年开发都在使用. 前段时间在工作中遇到了一个hibernate的问题,从数据库查找得到对象后,修改了其中部分字段值 ...
- struts2 type="redirectAction"重定向 与动态调用方法
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-/ ...
- 【转载】Linux时间相关结构与函数
1 时间的获取 在程序当中, 我们经常要输出系统当前的时间,比如日志文件中的每一个事件都要记录其产生时间.在 C 语言中获取当前时间的方法有以下几种,它们所获得的时间精度从秒级到纳秒,各有所不同. 表 ...
- 【转】Awk 命令学习总结、AWk命令系列学习(linux shell)
前面的话 学习linux 的同人,都知道linux shell文本处理能力非常强大.有一组强大的文本处理工具:grep,sed,awk . 其中grep 经常用作查找匹配文本.sed用作文本编辑替换. ...
- 一步一步从原理跟我学邮件收取及发送 10.四句代码说清base64
经过前几篇的文章,大家应该都能预感到一定要讲解 base64 函数的内容了.是的,马上要到程序登录的代码,base64 是必须要实现的. base64 很早以前我就接触了,在项目中也很喜欢用.但每换一 ...
- ABP官方文档翻译 6.4 导航
导航 创建菜单 注册导航提供者 显示菜单 每一个网络应用都会有一些菜单用来在pages/screens之间导航.ABP提供了通用的基础设施来创建并显示菜单. 创建菜单 应用可以由不同的模块组成,每一个 ...
- ABP WebApi 加载错误
[TypeLoadException:类型'Abp.WebApi.Validation.AbpApiValidationFilter'中的方法'ExecuteActionFilterAsync'从程序 ...
- Nmap简单扫描
Nmap所识别的6个端口状态. open(开放的) 应用程序正在该端口接收TCP 连接或者UDP报文.发现这一点常常是端口扫描 的主要目标.安全意识强的人们知道每个开放的端口 都是攻击的入口.攻击者或 ...


