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请求那里),没有进行填充,这部分疑问还没有得到解决吗,希望有人可以指导一下。

TCP\IP协议实践:wireshark抓包分析之链路层与网络层的更多相关文章

  1. 用Wireshark抓包分析超过70秒的请求

    超过70秒的请求是通过分析IIS日志发现的: 10.159.63.104是SLB的内网IP. 通过Wireshark抓包分析请求是9:22:21收到的(tcp.stream eq 23080): 09 ...

  2. wireshark抓包分析——TCP/IP协议

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

  3. Wireshark抓包分析/TCP/Http/Https及代理IP的识别

    前言 坦白讲,没想好怎样的开头.辗转三年过去了.一切已经变化了许多,一切似乎从没有改变. 前段时间调研了一次代理相关的知识,简单整理一下分享之.如有错误,欢迎指正. 涉及 Proxy IP应用 原理/ ...

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

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

  5. WireShark抓包分析以及对TCP/IP三次握手与四次挥手的分析

    WireShark抓包分析TCP/IP三次握手与四次挥手 Wireshark介绍: Wireshark(前称Ethereal)是一个网络封包分析软件.功能十分强大,是一个可以在多个操作系统平台上的开源 ...

  6. wireshark 抓包分析 TCPIP协议的握手

    wireshark 抓包分析 TCPIP协议的握手 原网址:http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html 之前写过一篇 ...

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

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

  8. Wireshark抓包分析HTTPS与HTTP报文的差异

    一.什么是HTTPS: HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议 它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换 ...

  9. wireshark抓包分析工具的使用

    # wireshark抓包分析工具的使用 ## 常用抓包指令 - `ip.src==192.168.60.26 and ip.dst==111.7.187.220 and tcp.port == 80 ...

随机推荐

  1. linux系统编程--文件IO

    系统调用 什么是系统调用: 由操作系统实现并提供给外部应用程序的编程接口.(Application Programming Interface,API).是应用程序同系统之间数据交互的桥梁. C标准函 ...

  2. 并发编程入门(二):分析Boost对 互斥量和条件变量的封装及实现生产者消费者问题

    请阅读上篇文章<并发编程实战: POSIX 使用互斥量和条件变量实现生产者/消费者问题>.当然不阅读亦不影响本篇文章的阅读. Boost的互斥量,条件变量做了很好的封装,因此比" ...

  3. 弱势图解AC自动机

    本篇文章主要详细介绍$AC$自动机的$fail$指针: 如果有什么不完善的地方,请联系我$qwq$ 前置知识: 1.建议学一下$kmp$算法 2.$Trie$ 导入: AC自动机是用来解决多模板匹配问 ...

  4. 小米oj 有多少个公差为2的等差数列

     有多少个公差为 2 的等差数列 序号:#31难度:有挑战时间限制:1000ms内存限制:10M 描述 给出一个正整数N(2<= N <=10000000),统计有多少公差为2的正整数等差 ...

  5. luogu P4843 清理雪道

    嘟嘟嘟 这其实就是一个最小流的板子题.把每一条边的流量至少为1,然后建立附加源汇跑一遍最大流,连上\(t, s\),再跑一遍最大流就是答案. 刚开始我想错了:统计每一个点的出度和入度,去两者较大值\( ...

  6. Android input输入框 移动页面input手机键盘中的“搜索”按键

    动页面input手机键盘中的“搜索”按键 满足以下几点机即可: input type="search"    放到form标签中    使用action属性 <form ac ...

  7. redis常见7种使用场景

    一,简单字符串缓存实例 $redis->connect('127.0.0.1', 6379); $strCacheKey = 'Test_bihu'; //SET 应用 $arrCacheDat ...

  8. Qt应用Redis实现消息队列

      版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/liulihuo_gyh/article/details/78425763 类似BS模式,客户端发 ...

  9. webpack publicpath path

    一.publicpath 用绝对路径:如 /assets/ 会在支援路径前 加上 /assets/ devServer  publicpath 如果没有设置的话,取 publicpath 所以 一般要 ...

  10. SQL:目录

    ylbtech-SQL:目录 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处:http://ylbtech.c ...