目录

  • TCP\IP协议实践:wireshark抓包分析之链路层与网络层

    • 从ping开始

      • 链路层之以太网封装
      • ip首部
      • 开启ping程序,开始抓包
    • 由一个ping的结果引出来的两个协议ARP ICMP
      • ARP:地址解析协议
      • ICMP:Internet控制报文协议
    • 总结

TCP\IP协议实践:wireshark抓包分析之链路层与网络层

@

从ping开始

我打算从一个ping命令的抓包结果来结合实际分析链路层和网络层的几个协议,先看一些无聊却重要的基础知识,封装过程图镇楼

链路层之以太网封装

我们都知道网络是分层的,在链路层的封装主要是以太网封装,这里我们直接给出格式

这里也给出了IEEE 802的封装,下面的就是以太网封装,我们看到以太网的封装会为网络层的其他协议提供服务,同时也看到ARP/RARP 和IP的地位是并列的。他们根据以太网头部的类型字段区分,以太网的源地址和目的地址是6字节的硬件地址也就是我们常说的MAC地址,一个硬件由它来标识。可以看到除了14个字节的头部以外,数据段要求最小46个字节,所以会有填充的出现,后面的尾部是4个字节,即以太网数据帧一共最少有64字节(有时候会略去尾部直接是60字节)。

ip首部

我们虽然从ping命令开始,但是必须介绍一些基础知识,首先就是ip协议,上图就是ip协议的头部,最小是20字节。后面的抓包结果要结合这张图来看。目前几乎所有的互联网传输都使用的ip协议。

首先介绍一下这些字段

  • 4位版本代表是ipv4还是ipv6。即4或6 。
  • 4位首部长度代表ip首部占多少个32位(4字节)。为啥会有这个字段?因为我们看到ip首部里面是可以有选项字段的,不固定长度(选项字段一直都是以32 bit作为界限,必要时填充0,保证ip首部始终是32bit整数倍),所以要有个数据表示有多少字节是属于ip头部。
  • 8位的服务类型TOS字段见下图

  • 16位的总长度表示ip数据报的长度(字节为单位),为了从填充过的以太网帧中准确的找出ip数据报。
  • 标识字段唯一地标识主机发送的每一份数据报。后面的偏移字段和这里的标识字段都是为了后面的ip分片和重组用的。
  • T T L(t i m e - t o - l i v e)生存时间字段设置了数据报可以经过的最多路由器数。它指定了数据报的生存时间。T T L的初始值由源主机设置(通常为3 2或64),一旦经过一个处理它的路由器,它的值就减去1。当该字段的值为0时,数据报就被丢弃,并发送I C M P报文通知源主机。
  • 8位协议是1表示为ICMP协议, 2表示为IGMP协议, 6表示为TCP协议, 17表示为UDP协议
  • 首部检验和字段是根据I P首部计算的检验和码。它不对首部后面的数据进行计算。I C M P、I G M P、U D P和T C P在它们各自的首部中均含有同时覆盖首部和数据检验和码。
  • 地址字段
  • 选项字段后面会说

开启ping程序,开始抓包

ping程序是测试连通性用的,当然他还有其他功能,这个下面会说,首先我们就用它的测试功能,至于ping的原理,我们边抓包边看,这其中会涉及很多网络层的协议,我们结合抓包讲解。

打开wireshark后,开启命令行的ping命令ping一个ip地址(这里我ping的是一个网段的地址10.134.220.102,我本机的地址是10.134.220.113),如何使用wireshark和如何查看自己的ip地址请自行百度。这里ping完成后

收到这四个回复,我们先不管这些,看看我们抓包抓到了什么,这里我加了过滤器:

ip.dst == 10.134.220.102 or ip.src == 10.134.220.102 or arp

抓包结果

我们可以看看发生了什么,第一行不是这次ping产生的,从第二行看,首先是ARP协议的数据,内容是后面的看起来是询问的内容,然后下一行还是ARP的协议,看起来是回答。我们注意到第一列是时间,第二列是源地址,6字节的,第三列是目的地址,也是6字节的。这两个地址就是上面以太网封装头部中的那两个硬件地址。我们看到有的目的地址是广播,广播地址是全1的6字节。这个可以详细的看包里的内容。我们先不管这些协议是什么,就是看看发生了啥。接续看,有四组连续的(忽略中间那个ARP)ICMP协议的报文,而且是一问一答形式的,想想我们的ping命令的结果,是不是对起来了?

由一个ping的结果引出来的两个协议ARP ICMP

从上面的抓包结果我们看到了两个协议,ARP与ICMP,这两个重要的协议我们细细讲解,同时会结合抓包的内容一块看。

ARP:地址解析协议

原理

ARP是什么?ARP是一种地址解析协议。

ARP干嘛用的?当我们知道目的ip地址后,我们以为计算机知道了应该找哪台主机,但是计算机硬件一脸懵,在他那里只有硬件地址,ip地址是网路层的东西,要数据传输必须知道链路层的信息即硬件的地址,那么如何根据ip地址知道目的地址的硬件地址呢?答案就是使用ARP协议来查询,将ip地址转化为硬件地址。还有一种协议是RARP,他跟ARP反着,根据硬件地址查询ip地址,这种协议是无盘系统无法从本地知晓自己的ip地址,只能通过RARP协议从RARP服务器上查询自己的ip地址。由于我这里没有无盘机,所以抓包抓不到RARP协议的包,有需要的可以查资料详细理解。他们俩的报文格式还是很像的。

ARP如何工作的?

ARP分为请求和应答,他的报文格式如下

还记得看以太网封装时说过的,ARP是跟IP并列的。这里详细介绍ARP的报文格式

  • 2字节的硬件类型,1代表以太网地址。
  • 2字节的协议类型表示要映射的协议地址类型,我们大部分用的就是ip协议,所以这里一般是0x800。
  • 1字节的协议地址长度。我们都知道ipv4协议是4字节的。
  • 1字节的硬件地址长度。以太网的硬件地址是6字节。
  • op字段是操作字段,代表四种操作类型,它们是ARP请求(值为1)、ARP应答(值为2)、RARP请求(值为3)和RARP应答(值为4)。
  • 发送端的以太网地址(硬件地址),发送的ip地址,接收端的硬件地址和ip地址。这里会有疑问,在ARP请求中,不是ARP请求的就是目的端的硬件地址吗,这时如何填写目的端的硬件地址呢?答案是ARP请求中的目的硬件地址全为0 。

对于以太网头部中的目的地址,在ARP请求报文中,是无法知道的(因为本身就是去查询的),那么如何填呢?或者说ARP如何起作用呢?当然是把所有的主机全问一遍呗。所以这里就填成全1表示广播地址,这样整个以太网上的所有主机都能收到ARP请求,然后看看是不是自己被翻了牌子,如果是,就发回一个ARP应答告知自己的硬件地址。整个过程可以参考下图

这是在同一个以太网的情况下。如果不在同一个以太网下,又如何呢?如果ARP请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求,这个过程称作委托A R P或A R P代理(Proxy ARP)。这样可以欺骗发起ARP请求的发送端,使它误以为路由器就是目的主机,而事实上目的主机是在路由器的“另一边”。路由器的功能相当于目的主机的代理,把分组从其他主机转发给它。这方面这篇文章里暂时没有,后续会有一个专门的文章介绍。

如果目的主机不存在呢?那就隔一段时间问一次,多问几次都没答复就不问了,哈哈哈。

抓包结果

好,接下来回到抓包结果,我们说开头的是两个ARP协议,了解了原理后我们知道他们其实就是一个ARP请求和ARP应答

这是我的ARP请求报文

逐字节解析,前6字节就是全1的广播以太网地址,然后是6字节的发送端以太网地址。然后0806代表是ARP协议。0001代表的以太网,0800代表ip协议,06的硬件地址长度,04的协议地址长度,0001的op字段代表ARP请求,然后就是发送端的硬件地址和ip地址,然后就是我们前面说的全0的目的硬件地址,然后是目的ip。

同样的应答报文就不解析了,就是对着格式来。

ICMP:Internet控制报文协议

ICMP是什么? ICMP是Internet控制报文协议,对,就是控制报文协议,发送控制报文的,啥叫控制报文?看下去就知道了。必须知道ICMP是封装在IP数据报里面的。在IP头部的8位协议字段中规定的,1就代表ICMP。

ICMP干嘛用的? 很有用,用途广泛,哈哈哈。

ICMP如何用?

看格式

8位的类型,8位的代码都在上面那张很长的图中。由于太多,就不介绍详细的了,就介绍我们ping命令用到的即ICMP回显应答报文。

U n i x系统在实现p i n g程序时是把I C M P报文中的标识符字段置成发送进程的I D号。这样即使在同一台主机上同时运行了多个p i n g程序实例, p i n g程序也可以识别出返回的信息。序列号从0开始,每发送一次新的回显请求就加1。p i n g程序打印出返回的每个分组的序列号,允许我们查看是否有分组丢失、失序或重复。I P是一种最好的数据报传递服务,因此这三个条件都有可能发生。

抓包结果

以我本机发送的ICMP回显请求报文为例:

前面的14个字节以太网首部就不解析了,现在从第一行的45开始

回顾ip首部,4代表ipv4 , 5代表ip首部占5个四字节即20字节,说明没有选项字段。后面两个00代表的TOS字段,大家到网上一查,不对啊,00代表很多服务啊,怎么区分啊?其实现在大多数实现都不实用TOS段了,所以就不用管这个字段了。

进入第二行,003c是总长度,整个ip数据报有60个字节,说明数据部分有40个字节,我们数一下,整个报文74个字节,除去14字节以太网首部,20字节的ip首部,剩下的40字节就是数据部分(没有计算以太网尾部)。

4347是标识,0000是偏移量,这个没啥好说的。80是TTL生存时间,01是代表的ICMP报文。2996是校验和。然后是源ip地址0a 86 dc 71, 是不是就是10.134.220.113 。目的地址是0a 86 dc 66 。后面我选中的蓝色部分就是真正的ICMP回显请求报文的内容了, 08 00 与我们说的代码是一样的,0101校验和,后面的就不说了。

总结

这篇文章从一个ping命令入手,讲述了两个很重要的协议ARP协议和ICMP协议,结合实际抓包的结果,分析了报文内容,但是这里还是有疑问,比如,我们说以太网帧除去尾部最少60字节,但是实际抓包时有的就只有42字节(比如我的ARP请求那里),没有进行填充,这部分疑问还没有得到解决吗,希望有人可以指导一下。

转载于:https://www.cnblogs.com/bobxxxl/p/11068824.html

TCP\IP协议实践:wireshark抓包分析之链路层与网络层相关推荐

  1. telnet协议的Wireshark抓包分析

    文章目录 1.telnet背景介绍 2.telnet服务器的安装 3.使用MobaXterm的telnet连接 4.使用Wireshark进行抓包 1.telnet背景介绍 常用的登录远程服务器的方式 ...

  2. DHCP协议的Wireshark抓包分析

    文章目录 1.理论介绍 2.windows的DHCP配置 3.Wireshark抓包DHCP分析 3.1.DHCP Discover 3.2.DHCP Offer 3.3.DHCP Request 3 ...

  3. FTP协议的Wireshark抓包分析

    文章目录 1.理论介绍 2.ftp安装 3.windows上连接ftp服务器 3.1.通过浏览器访问 3.2.通过资源管理器访问 3.3.通过命令行进行访问(本次采用方式,使用主动模式连接) 4.Wi ...

  4. TCP/IP详解卷1 - wireshark抓包分析

    TCP/IP详解卷1 - 系列文 TCP/IP详解卷1 - 思维导图(1) TCP/IP详解卷1 - wireshark抓包分析 引言 在初学TCP/IP协议时,会觉得协议是一种很抽象的东西,通过wi ...

  5. Wireshark抓包分析微信功能----tcp/ip选修课期末大作业

    分析相关功能所抓取的数据包和完整大作业报告(word版)均已上传至Wireshark抓包分析微信功能----tcp/ip选修课期末大作业-网络监控文档类资源-CSDN文库 适合Wireshark入门的 ...

  6. 用wireshark抓包分析TCP协议的三次握手连接、四次握手断开

    用wireshark抓包分析TCP协议的三次握手连接.四次握手断开 一.TCP三次握手图解 二.TCP得四次挥手过程 三.用Fiddler抓包,分析验证一个HTTPS网站的TCP连接过程 一.TCP三 ...

  7. 用Wireshark抓包分析协议 计算机网络

    此篇博客记录使用Wireshark抓包分析协议. 目录 一.DNS 二.分析TCP握手过程 三.TLS报文 四.HTTP协议 五.SMTP 六.ARP 七.RTP 八.RTMP 一.DNS DNS是域 ...

  8. Wireshark抓包分析之ICMP协议包

    Wireshark抓包分析之ICMP协议包 一. Wireshark简介:(前身为Ethereal,2006年改名为wireshark) Wireshark 是一个网络封包分析软件.网络封包分析软件的 ...

  9. Wireshark抓包分析TCP建立/释放链接的过程以及状态变迁分析

    Wireshark抓包分析TCP建立/释放链接的过程以及状态变迁分析 一.介绍计算机网络体系结构 1.计算机的网络体系结构 在抓包分析TCP建立链接之前首先了解下计算机的网络通信的模型,我相信学习过计 ...

  10. PXE+VMware主机模式+KickStart脚本 自动安装ESXi 并试用WireShark抓包分析其中的协议TFTP,DHCP

    1 安装 1.1 实验环境: Windows 10 (主机) VMWare workstation 15  (运行于主机上) Tiny PXE Server 1.0.0.21   (官网地址,下载地址 ...

最新文章

  1. Java异常以及继承的一些问题
  2. C# C/S系统软件开发平台架构图(原创)
  3. 【错误记录】应用运行 CPU 占用率达到 90% ( 使用 CPU Profiler 监控应用运行情况 )
  4. 批量处理Excel文件的模块----xlwings
  5. linux du -h按文件大小,【玩转linux命令】du党
  6. 前端判断数据类型的通用方法
  7. magento创建自定义页面 (Bestseller实例) Bestseller products in Magento
  8. 我慕了!腾讯大手一挥,员工买房最高可申请免息借款90万
  9. 那年学过的Oracle笔记
  10. python实践统计学中的三大相关性系数,并绘制相关性分析的热力图
  11. hadoop HDFS 流式传输及JAVA API实现代码
  12. ip 查找计算机,win10系统通过ip地址查找计算机名的详细技巧
  13. sin_cos_tan_cot_sec_cosec 三角函数计算器
  14. 微信账户显示有异常怎么办?要如何解除?
  15. model.compile
  16. 赶在秃之前肝出一款小游戏
  17. socks5 转 http 代理
  18. esxi服务器安装系统,esxi6.7服务器安装
  19. 从“及其所之既倦”到“吾生也有涯,而知也无涯”
  20. 概率论与数理统计系列笔记之第五章——统计量及其分布

热门文章

  1. 一文弄懂LogSumExp技巧
  2. Mesos超配:让集群利用率可以达到100%
  3. 范围分区在数据过期化处理中的应用
  4. 网上购物与开店赢家随身查
  5. 优化理论02----凸函数、共轭函数、拟凸函数、对数凹/对数凸函数、关于广义不等关系的凸性
  6. spark概念、编程模型和模块概述
  7. eclipse无法运行PHP_eclipse 无法运行php文件怎么办
  8. java scanner构造函数_Point类的构造函数(JAVA)
  9. 力扣-5 最长回文子串
  10. Eclipse — 如何导入包