wireshark抓包分析——TCP/IP协议[通俗易懂]

wireshark抓包分析——TCP/IP协议[通俗易懂]本文来自网易云社区当我们需要跟踪网络有关的信息时,经常会说“抓包”。这里抓包究竟是什么?抓到的包又能分析出什么?在本文中以TCP/IP协议为例,简单介绍TCP/IP协议以及如何通过wireshark抓包分析。Wireshark是最著名的网络通讯抓包分析工具。功能十分强大,可以截取各种网络封包,显示网络封包的详细信息。Wireshark下载安装,略。注意,若在Windows系统安装Wireshar…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

本文来自网易云社区

当我们需要跟踪网络有关的信息时,经常会说“抓包”。这里抓包究竟是什么?抓到的包又能分析出什么?在本文中以TCP/IP协议为例,简单介绍TCP/IP协议以及如何通过wireshark抓包分析。

Wireshark 是最著名的网络通讯抓包分析工具。功能十分强大,可以截取各种网络封包,显示网络封包的详细信息。

Wireshark下载安装,略。注意,若在Windows系统安装Wireshark,安装成功后可能会出现Wireshark的两个图标,一个是Wireshark(中文版);另外一个是Wireshark Legacy (英文版)。下面的内容会以Wireshark Legacy为例介绍。

打开Wireshark,开始界面如下:

201808290919453f89cc82-9690-4099-addc-b44d84acb713.png  

Wireshark捕获的是网卡的网络包,当机器上有多块网卡的时候,需要先选择网卡。开始界面中的Interface List,即网卡列表,选择我们需要的监控的网卡。点击Capture Options,选择正确的网卡,然后点击”Start”按钮, 开始抓包。

2018082909200706917650-2573-4c03-bd01-0462e1c625b4.png  

我们打开浏览器输入任意http网址,连接再关闭,比如:http://blog.csdn.net。然后,我们回到Wireshark界面,点击左上角的停止按键。查看此时Wireshark的抓包信息。在看抓包信息之前,先简单介绍下Wireshark界面的含义。其中,封包列表的面板中显示编号、时间戳、源地址、目标地址、协议、长度,以及封包信息。

201808290920260f1a5e4b-8e4f-451d-8994-13764e426f10.png  

封包详细信息是用来查看协议中的每一个字段。各行信息分别对应TCP/IP协议的不同层级。以下图为例,分别表示:传输层、网络层、数据链路层、物理层,一共四层。如果有应用层数据会显示第五层,即一共会出现五层。

201808290920377bad3677-03bf-4151-97e7-5d6e09a89bc2.png  

每一层都有一个字段指向上一层,表明上一层是什么协议。这大概是因为发包的时候会在数据上依次加上应用层、传输层、网络层、链路层的头部,但是对方收到数据包后是从最底层(链路层)开始层层剥去头部解包的,所以在每层上有一个字段指向上层,表明上层的协议,对方就知道下一步该怎么解包了。以TCP/IP协议为例,下图中分别是:IPv4、TCP。由于建立TCP连接用不到应用层协议,所以传输层就没有相应的指明上层(应用层)的字段了。

2018082909205351047869-4d3c-45f7-b00b-00a7bce465f3.png

在了解Wireshark界面后,我们来分析TCP协议。这里有很多数据包,我们需要先过滤,添加对应的过滤条件。比如,我添加了目标的ip地址和端口号:tcp and ip.addr==47.95.47.253 and tcp.port==53992,此时获取到的封包列表如下。

2018082909210415dcc5c2-f999-4b48-a6eb-c02f09655d49.png  

在此之前,看下TCP/IP报文的格式。

20180829092121169ae1ab-761a-4861-8a9e-832f840ae973.png  

根据上述报文格式我们可以将wireshark捕获到的TCP包中的每个字段与之对应起来,更直观地感受一下TCP通信过程。先看三次握手,下图中的3条数据包就是一次TCP建立连接的过程。

20180829092130d0e2bd9e-7f6c-4a4a-8fad-d09fe445f6fb.png  

第一次握手,客户端发送一个TCP,标志位为SYN=1,序号seq为Sequence number=0, 53992 -> 80,代表客户端请求建立连接;

20180829092142452391a5-c140-4467-b2ce-ff0b84e74d44.png  

第二次握手,服务器向客户端返回一个数据包,SYN=1,ACK=1,80 -> 53992,将确认序号(Acknowledgement Number)设置为客户的序号seq(Sequence number)加1,即0+1=1;

201808290921493240a120-2f98-4ac0-864e-c5db11c990aa.png  

第三次握手,客户端收到服务器发来的包后检查确认序号(Acknowledgement Number)是否正确,即第一次发送的序号seq加1(X+1= 0+1=1)。以及标志位ACK是否为1。若正确,客户端会再向服务器端发送一个数据包,SYN=0,ACK=1,确认序号(Acknowledgement Number)=Y+1=0+1=1,并且把服务器发来ACK的序号seq(Sequence number)加1发送给对方,发送序号seq为X+1= 0+1=1。客户端收到后确认序号值与ACK=1,53992 -> 80,至此,一次TCP连接就此建立,可以传送数据了。

20180829092202fba5f063-758d-4963-b95e-dd50d5f821f5.png  

还可以通过直接看标志位查看三次握手的数据包,如下图所示,第一个数据包标志位【SYN】,这是第一次握手;第二个数据包标志位【SYN,ACK】,这是第二次握手;第三个数据包标志位【ACK】,这是第三次握手。

20180829092217b3c30db8-50f8-408c-8e5f-fb7f36fcd22c.png

在三次握手的三个数据包之后,第四个包才是HTTP的, 这说明HTTP的确是使用TCP建立连接的。

2018082909222318fe4621-6c39-4e2f-b06a-2bb77e0a609d.png  

再往下看其他数据包,会发现存在大量的TCP segment of a reassembled PDU,字面意思是要重组的协议数据单元(PDU:Protocol Data Unit)的TCP段,这是TCP层收到上层大块报文后分解成段后发出去。

201808290922459784ed3b-9f61-4188-b155-a0ab2d25d5f1.png  

      每个数据包的Protocol Length都是1502 Byte,这是因为以太网帧的封包格式为:Frame = Ethernet Header + IP Header + TCP Header + TCP Segment Data。即:

1、Ethernet Header = 14 Byte = Dst Physical Address(6 Byte)+ Src Physical Address(6 Byte)+ Type(2 Byte),以太网帧头以下称之为数据帧。

2、IP Header = 20 Byte(without options field),数据在IP层称为Datagram,分片称为Fragment。

3、TCP Header = 20 Byte(without options field),数据在TCP层称为Stream,分段称为Segment(UDP中称为Message)。

4、TCP Segment Data = 1448 Byte(从下图可见)。

所以,每个数据包的Protocol Length = 14 Byte + 20 Byte + 20 Byte + 1448 Byte = 1502 Byte。

201808290923017e9191f2-49c7-4fe0-8dc9-2f702434ace9.png  

      我们再来看四次挥手。TCP断开连接时,会有四次挥手过程,标志位是FIN,我们在封包列表中找到对应位置,理论上应该找到4个数据包,但我试了好几次,实际只抓到3个数据包。查了相关资料,说是因为服务器端在给客户端传回的过程中,将两个连续发送的包进行了合并。因此下面会按照合并后的三次挥手解释,若有错误之处请指出。

20180829092314c82f2801-d5ad-4ae3-9620-e7c470e08cb3.png  

第一次挥手:客户端给服务器发送TCP包,用来关闭客户端到服务器的数据传送。将标志位FIN和ACK置为1,序号seq=X=2242,确认序号ack=Z=17602,53992 -> 80;

201808290923262ac1ab41-dbb6-4f55-bb7e-671194b52cb7.png  

第二次挥手:服务器收到FIN后,服务器关闭与客户端的连接,发回一个FIN和ACK(标志位FIN=1,ACK=1),确认序号ack为收到的序号加1,即X=X+1=2243。序号seq为收到的确认序号=Z=17602,80 -> 53992;

201808290923395482c33b-c1bc-4442-81be-5c5826f572c5.png  

第三次挥手:客户端收到服务器发送的FIN之后,发回ACK确认(标志位ACK=1),确认序号为收到的序号加1,即Y+1=17603。序号为收到的确认序号X=2243,53992 -> 80。

201808290923559759f633-e235-47b1-990f-3d42d41a2246.png  

      至此,整个TCP通信过程已经介绍完毕。

      附:TCP通信过程:

20180829092404d235a095-0627-42c0-8812-62a4d3e4a8c3.jpg

原文:wireshark抓包分析——TCP/IP协议

网易云新用户大礼包:https://www.163yun.com/gift

本文来自网易云社区,经作者李莉授权发布。

 

相关文章:
【推荐】 nej+regular环境使用es6的低成本方案

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196273.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 大数据的胖哥的方式(9)- 金融业数据仓库的逻辑模型FS-LDM

    大数据的胖哥的方式(9)- 金融业数据仓库的逻辑模型FS-LDM

    2022年1月4日
    232
  • 微型计算机原理与接口技术知识点总结_微型计算机接口技术答案

    微型计算机原理与接口技术知识点总结_微型计算机接口技术答案记得刚要上这门课的时候,学长就跟说这是一门很重要很有用的课程,对经后的一些课程设计或者是做一些项目之类的都有很大的帮助,特别是对毕业就想找工作的人来说学会单片机就更重要了,所以我一直都很认真的在听课,但是由于去参加北京市的电子设计大赛,老师允许我们不用做这门课的实验,再加上这门课平时就没有什么要做的作业之类的,练得太少了,可以说几乎没有实践的机会,也因此对所学的知识不知道该怎么运用,只是简单的停留…

    2022年9月1日
    2
  • python的dropna函数_Pandas dropna()函数不工作「建议收藏」

    python的dropna函数_Pandas dropna()函数不工作「建议收藏」我试图从pandas数据框中删除NA值。我使用了dropna()(它应该从数据帧中删除所有NA行)。然而,它不起作用。代码如下:importpandasaspdimportnumpyasnpprison_data=pd.read_csv(‘https://andrewshinsuke.me/docs/compas-scores-two-years.csv’)这就是获取数据帧的方法。…

    2022年9月2日
    4
  • 数据结构(1)-线性表「建议收藏」

    数据结构(1)-线性表「建议收藏」1.线性表:n个数据元素的有序集合。线性表是一种常用的数据结构。在实际应用中,线性表都是以栈、队列、字符串、数组等特殊线性表的形式来使用的。由于这些特殊线性表都具有各自的特性,因此,掌握这些特殊线性表的特性,对于数据运算的可靠性和提高操作效率都是至关重要的。  线性表是一个线性结构,它是一个含有n≥0个结点的有限序列,对于其中的结点,有且仅有一个开始结点没有前驱但有一个后继结点,有且仅有

    2022年5月18日
    31
  • es6 模板字符串_模板字符串如何实现

    es6 模板字符串_模板字符串如何实现es6的模板字符串个人觉得是很好用的,尤其简化了字符串拼接这块,下面说下它是如何使用的首先,模板字符串是增强版的字符串,使用反引号“来包括字符串,如果需要拼接上变量,那拼接的格式是使用${}包裹变量即可举个例子看下最基本的用法,可以看出来跟普通字符串拼接比较起来简洁容易了很多2:模板字符串的另一优点是,空格和缩进都会保留在输出中,之前的字符串换行的话需要拼接换行符,缩进需要使用缩…

    2022年8月21日
    5
  • Bootstrap FileInput中文API整理[通俗易懂]

    Bootstrap FileInput中文API整理[通俗易懂]BootstrapFileInput中文API整理这段时间做项目用到bootstrapfileinput插件上传文件,在用的过程中,网上能查到的api都不是很全,所以想着整理一份比较详细的文档,方便自己今后使用,也希望能给大家带来帮助,如有错误,希望大家积极指正。一、    引入文件<linkhref="../css/bootstrap.min.css"rel="style…

    2022年5月2日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号