1. Wireshark介绍

1.1 客户端界面

打开Wireshark后,能够看到三个区域。最上方是工具栏区域,可以开始捕获、停止捕获等操作。中间是Cpature Filter区域,能够在开始捕获前指定过滤规则。下方是可以捕获的网络设备,双击其中一个设备后就开始进行网络流量的捕获。

结果的展示主要分三个区域,最上方是请求和响应列表,每一条记录表示一次请求或响应的交互。中间是对选中的交互解析后的结果。最下方是原始的数据格式。

在请求列表上方,我们可以指定 Display Filter,用于筛选已经捕获到的数据。

1.2 Display Filter 的常用方法

待补充

1.3 界面上一些小TIPS

左边的实线连起来的表示同一次会话发生的各个阶段。

对勾表示选中项目对应的请求。

HTTP请求选中后,能够看到对应的请求和响应。

Wireshark会帮我们将多次请求合并。

在选中的项目上右键选择Follow->HTTP Stream可以将这次请求的所有相关的请求列出,帮助我们快速过滤。

2. 使用Wireshark分析TCP三次握手过程

2.1 三次握手原理

先来看一下基本的原理。
第一次握手:建立连接时,客户端发送SYN到服务器,并进入SYN_SENT状态。
第二次握手:服务器收到请求后,回送SYN+ACK信令到客户端,此时服务器进入SYN_RECV状态。
第三次握手:客户端收到SYN+ACK包,向服务器发送确认ACK包,客户端进入ESTABLISHED状态,服务器收到请求后也进入ESTABLISHED状态,完成三次握手,此时TCP连接成功,客户端与服务器开始传送数据。

2.2 第一次握手

第一次握手:建立连接时,客户端发送SYN到服务器,并进入SYN_SENT状态。

SYN :标志位,表示请求建立连接。
Seq = 0 :初始建立连接值为0,数据包的相对序列号从0开始,表示当前还没有发送数据。
Ack =0:初始建立连接值为0,已经收到包的数量,表示当前没有接收到数据。
WIN = 8192 来自Window size: 8192。
MSS = 1460 来自 Maximum segment size: 1460 byte ,最长报文段,TCP包所能携带的最大数据量,不包含TCP头和Option。一般为MTU值减去IPv4头部(至少20字节)和TCP头部(至少20字节)得到。
WS = 4 来自windows scale : 2 (multiply by 4): 窗口扩张,放在TCP头之外的Option,向对方声明一个shift count,作为2的指数,再乘以TCP定义的接收窗口,得到真正的TCP窗口。

2.3 第二次握手

第二次握手:服务器收到请求后,回送SYN+ACK信令到客户端,此时服务器进入SYN_RECV状态。

Seq = 0 :初始建立值为0,表示当前还没有发送数据
Ack = 1 : 表示当前端成功接收的数据位数,虽然客户端没有发送任何有效数据,确认号还是被加1,因为包含SYN或FIN标志位。尽管客户端没有发送任何有效数据,确认号还是被加1,这是因为接收的包中包含SYN或FIN标志位(并不会对有效数据的计数产生影响,因为含有SYN或FIN标志位的包并不携带有效数据。

2.4 第三次握手

第三次握手:客户端收到SYN+ACK包,向服务器发送确认ACK包,客户端进入ESTABLISHED状态,服务器收到请求后也进入ESTABLISHED状态,完成三次握手,此时TCP连接成功,客户端与服务器开始传送数据。

ACK :标志位,表示已经收到记录
Seq = 1 :表示当前已经发送1个数据
Ack = 1 : 表示当前端成功接收的数据位数,虽然客户端没有发送任何有效数据,确认号还是被加1,因为包含SYN或FIN标志位。尽管客户端没有发送任何有效数据,确认号还是被加1,这是因为接收的包中包含SYN或FIN标志位(并不会对有效数据的计数产生影响,因为含有SYN或FIN标志位的包并不携带有效数据)

2.5 为什么是三次握手

这个问题的本质是, 信道不可靠, 但是通信双发需要就某个问题达成一致. 而要解决这个问题, 无论你在消息中包含什么信息, 三次通信是理论上的最小值. 所以三次握手不是TCP本身的要求, 而是为了满足”在不可靠信道上可靠地传输信息”这一需求所导致的.

也是为了最小的代价验证会话双方的收发功能正常:

  • 第一次握手成功:说明客户端的数据可以被服务端收到,说明客户端的发功能可用,说明服务端的收功能可用。但客户端自己不知道数据是否被接收。
  • 第二次握手成功:说明服务端的数据可以被客户端收到,说明服务端的发功能可用,说明客户端的收功能可用。同时客户端知道自己的数据已经正确到达服务端,自己的发功能正常。但是服务端自己不知道数据是否被接收。
  • 第三次握手成功:说明服务端知道自己的数据已经正确到达客户端端,自己的发功能正常。至此服务成功建立。

3. 请求数据的过程

客户端和服务端建立连接后,开始传输数据。下图中首先是客户端发起一个GET请求,服务端收到请求后首先返回确认信息。待服务端处理完成后,将数据返回给客户端,客户端对收到的数据进行确认,完成一次数据交互的过程。

交互过程中,SEQ表示发送的数据,LEN表示发送的数据长度,下一次的SEQ就等于当前SEQ加上LEN。ACK表示接收的数据位。客户端和服务端分别计算自己的增长值。对应上图最后一次服务端返回数据时SEQ是2737,LEN是450。客户端对接收数据做了两次返回确认,第一次ACK是2737,表示还没有完成数据接收。第二次ACK是3187,等于服务端SEQ+LEN(2737+450)表示已经完成了全部数据的接收。

4. 分析四次挥手过程

4.1 理论基础

  1. 第一次挥手:客户端 发送一个[FIN+ACK],表示自己没有数据要发送了,想断开连接,并进入FIN_WAIT_1状态(不能再发送数据到服务端,但能够发送控制信息ACK到服务端)。
  2. 第二次挥手:服务端收到FIN后,知道不会再有数据从客户端传来,发送ACK进行确认,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入CLOSE_WAIT状态。
  3. 第三次挥手:服务端发送FIN给对方,表示自己没有数据要发送了,服务端进入LAST_ACK状态,然后直接断开TCP会话的连接,释放相应的资源。
  4. 第四次挥手:客户端收到了服务端对FIN的ACK后,进入FIN_WAIT2状态(等待服务端完成资源释放的一系列工作:然后释放你为创建这个连接所分配的资源,并通知我你关闭了); 客户端收到了服务端的FIN信令后,进入TIMED_WAIT状态,并发送ACK确认消息。客户端在TIMED_WAIT状态下,等待2MSL一段时间,没有数据到来的,就认为对面已经收到了自己发送的ACK并正确关闭了进入CLOSE状态,自己也断开了到服务端的TCP连接,释放所有资源。当服务端收到客户端的ACK回应后,会进入CLOSE状态,并关闭本端的会话接口,释放相应资源。TIME_WAIT状态持续2MSL(MSL是数据分节在网络中存活的最长时间)。

网络上比较主流的文章都说关闭TCP会话是四次挥手,但是实际上为了提高效率通常合并第二、三次的挥手,即三次挥手。

4.2 实例分析


关闭连接需要四次握手。
客户端向服务端发送FIN为1的报文,服务端返回确认,关闭客户端与服务端通信的部分。
服务端向客户端发送FIN为1的报文,客户端返回确认,关闭服务端与客户端通信的部分。

本文分析的过程是基于最简单的网络交互模式,实际上目前HTTPS已经广泛普及,而且网络交互中会发生各种各样的意外情况,对于这些情况的分析就需要更多的网络知识。相信本文能够作为一个很好的入门,帮助大家了解网络协议。

参考资料

  1. 从 Wireshark 看一次请求的过程
  2. wireshark找到与http请求对应的响应数据
  3. 网络系列二 通过wireshark学习三次握手、四次挥手、数据传输

Wireshark使用入门的更多相关文章

  1. Wireshark初步入门

    第一次捕获数据包 为了能让Wireshark得到一些数据包,你可以开始你的第一次数据包捕获实验了.你可能会想:"当网络什么问题都没有的时候,怎么能捕获数据包呢?" 首先,网络总是有 ...

  2. [Wireshark]_001_入门

    Wireshark(前称Ethereal)是一个网络封包分析软件.网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料.Wireshark使用WinPCAP作为接口,直接与网卡进 ...

  3. Wireshark数据包分析(一)——使用入门

    Wireshark简介: Wireshark是一款最流行和强大的开源数据包抓包与分析工具,没有之一.在SecTools安全社区里颇受欢迎,曾一度超越Metasploit.Nessus.Aircrack ...

  4. Wireshark数据包分析入门

    Wireshark数据包分析(一)——使用入门   Wireshark简介: Wireshark是一款最流行和强大的开源数据包抓包与分析工具,没有之一.在SecTools安全社区里颇受欢迎,曾一度超越 ...

  5. Wireshark数据抓包教程之Wireshark捕获数据

    Wireshark数据抓包教程之Wireshark捕获数据 Wireshark抓包方法 在使用Wireshark捕获以太网数据,可以捕获分析到自己的数据包,也可以去捕获同一局域网内,在知道对方IP地址 ...

  6. My latest news(--2016.12.31)

    2016.12.31  前一天晚上看 “纪实新闻” ,白天看视频,晚上刷题,看电影<湄公河行动> 2016.12.30 18:36 昨天上午考完了本学期的最后一门课程,下午乒乓+值班,今天 ...

  7. Wireshark入门与进阶系列(一)

    摘自http://blog.csdn.net/howeverpf/article/details/40687049 Wireshark入门与进阶系列(一) “君子生非异也,善假于物也”---荀子 本文 ...

  8. Wireshark入门与进阶系列(二)

    摘自http://blog.csdn.net/howeverpf/article/details/40743705 Wireshark入门与进阶系列(二) “君子生非异也,善假于物也”---荀子 本文 ...

  9. Wireshark入门与进阶---数据包捕获与保存的最基本流程

    Wireshark入门与进阶系列(一) "君子生非异也.善假于物也"---荀子 本文由CSDN-蚍蜉撼青松 [主页:http://blog.csdn.net/howeverpf]原 ...

随机推荐

  1. DFS(四):剪枝策略

    顾名思义,剪枝就是通过一些判断,剪掉搜索树上不必要的子树.在采用DFS算法搜索时,有时候我们会发现某个结点对应的子树的状态都不是我们要的结果,这时候我们没必要对这个分支进行搜索,砍掉这个子树,就是剪枝 ...

  2. Redis for OPS 04:主从复制

    写在前面的话 Redis 的主从其实和 MySQL 类似,更多的还是作为备份的功能存在,在复杂的 Rediis 集群架构中,主从也是不可或缺的. 主从复制 主从复制原理: 1. 从库通过命令连接到主库 ...

  3. GO的执行原理以及GO命令

    Go的执行原理以及Go的命令 一.Go的源码文件 Go 的源码文件分类: 如上图,分为三类: 1.命令源码文件: 声明自己属于 main 代码包.包含无参数声明和结果声明的 main 函数. 命令源码 ...

  4. RabbitMQ的交换器Exchange之direct(发布与订阅 完全匹配)

    1.交换器.用来接收生产者发送的消息并将这些消息路由给服务器中的队列.三种常用的交换器类型,a.direct(发布与订阅 完全匹配).b.fanout(广播).c.topic(主题,规则匹配). 2. ...

  5. wpf 当DataGrid列模版是ComboBox时,显示信息

    ​ 实际工作中,有时DataGrid控件某一列显示数据是从Enum集合里面选择出来的,那这时候设置列模版为ComboBox就能满足需求.而关于显示的实际内容,直接是Enum的string()返回值可能 ...

  6. SpringBoot(十):SpringBoot整合Memcached

    一.环境准备memcached 1.4.5SpringBoot 1.5.10.RELEASEjava_memcached-release_2.6.6.jarmemcached 1.4.5 window ...

  7. 跳转常规 -- 为什么不要使用404、500等http状态码作为业务代码响应

    不要使用HTTP状态码作为业务代码响应 HTTP状态码 是指浏览器访问网址,成功或异常时浏览器或服务器告知用户的代码数字,它指的是网络或服务器的状态,有着不同的含义. 参加MDN.Java Api,常 ...

  8. PyCharm常用快捷键(pycharm使用教程)

    pycharm常用快捷键与设置 pycharm高频率使用的快捷键 Ctrl+Shift+F10 运行当前的页面 Ctrl + / 注释(取消注释)选择的行 Ctrl+Shift+F 高级查找 Shif ...

  9. CodeWarrior IDE烧写介绍

    点击Flash烧写 选择芯片系列 下面将以PPC8548 NOR Flash烧写为例 默认配置文件目录:C:\Program Files (x86)\Freescale\CodeWarrior PA ...

  10. SQL常用增删改查语句--来源于网络

    1.1[插入单行]insert [into] <表名> (列名) values (列值)例:insert into Strdents (姓名,性别,出生日期) values ('开心朋朋' ...