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的低成本方案

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Python爬虫程序实例

    Python爬虫程序实例在这个爬虫程序中使用到“BeautifulSoup”与“requests”两个包,所以我们之前要安装这两个包,如果不清楚是否安装,可以使“piplist”查看是否已经安装。做“爬虫程序”时建议用谷歌浏览器对网页元素进行检查,在网页空白处右击鼠标在弹出菜单中,使用“检查”菜单项。在检查元素窗口中,在“Elements”窗口仔细查看网页元素,特别要观察所要截取的内容前后HTML元素的特征。在上述代码中:主要抓取中的元素,这里看到它们的class元素的名称都是“news_li_strong”,所以在代

  • 高并发下的nginx性能优化实战

    高并发下的nginx性能优化实战

  • CorelDraw技術討論區

    CorelDraw技術討論區CorelDraw製作討論專區子區:技術討論區

  • Web 3D机房,智能数字机房HTML5 WebGL(ThreeJS)匠心打造「建议收藏」

    Web 3D机房,智能数字机房HTML5 WebGL(ThreeJS)匠心打造「建议收藏」在H5使用3D技术门槛比较低了,它的基础是WebGL(ThreeJS),一个OpenGL的浏览器子集,支持大部分主要3D功能接口。目前主流的浏览器都有较好的支持,IE需要11。最近web3D机房研发告一段落,有时间整理这段时间的一些成果。主要涉及使用H5、js、WebGL技术。机房3D效果图机房线缆和走线架线缆的连接走向和连接关系是管理员关注的焦点。机架中…

  • python批量修改文件名加后缀_python文件重命名

    python批量修改文件名加后缀_python文件重命名python批量修改文件后缀名

  • 微信小程序个人服务器搭建[通俗易懂]

    微信小程序个人服务器搭建[通俗易懂]个人做微信小程序必须考虑到工作量和资金的问题,这篇文章总结出一套针对个人切实可行的方案。本文章重点在抛砖引玉,而不是对各种细节的详细描述。读者可以根据文中提到的各种关键词,查阅相关资料方案包括在Ubuntu上面使用flask建立web服务器 使用花生壳内网穿透 使用花生壳提供的带备案信息的域名 使用腾讯云提供的免费https证书 微信小程序网络连接的注意事项在Ubuntu上面使用…

发表回复

您的电子邮箱地址不会被公开。

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