1. 二层转发与三层转发的理解
1)首先二层转发的网络设备是二层交换机,三层的转发的网络设备为交换机。
2)数据转发的依赖不同,二层转发主要依靠MAC地址,而三层转发主要依靠IP地址
3)数据交换的范围不同,二层交换指在同一网段内的通信,三层交换指跨网段的通信
4)在三层转发的过程中,还要进行二层的封装
2. 常见的网络协议抓包分析
2.1 arp
arp报文的结构如下:

arp报文总共42 bytes。其中以太网首部14 bytes,arp字段28bytes
构造arp报文,可以使用arping 命令如下:

tcpdump抓包结果如下:

wireshark 分析结构内容如下:

硬件类型(2byte):指明了发送方想知道的硬件接口类型,以太网的值为1;
协议类型(2byte):指明了发送方提供的高层协议类型,IP为 0800(16进制),表示 IPv4;
硬件地址长度(1byte)和协议地址长度(1byte):指明了硬件地址和高层协议地址的长度,单位为字节,硬件地址长度为 6,协议地址长度为 4;
操作类型(2byte):用来表示这个报文的类型,ARP 请求为 1,ARP 响应为 2;上图为请求报文为1
发送方硬件地址(6byte):源主机硬件地址;
发送方 IP 地址(4byte):源主机 IP 地址;
目标硬件地址(6byte):目的主机硬件地址;
目标 IP 地址(4byte):目的主机 IP 地址。
2.2 icmp
icmp报文的结构如下:

这里目前只针对ping时抓取的报文进行分析


wireshark 分析结构内容如下:

ICMP报文的前4个字节是统一的格式,共同拥有三个字段:即类型,代码和检验和。
8位类型和8位代码字段一起决定了ICMP报文的类型。
类型8,代码0:表示回显请求(ping请求)。
类型0,代码0:表示回显应答(ping应答)
类型11,代码0:超时
2.3 ip
ip报文结构结构如下:

在下一节2.4中有抓过tcp报文,而tcp报文基于ip报文,所以可以使用wireshark一块分析,ip报文分析如下:

字段解读如下:
版本号:IPV4 or IPV6 图中版本是 4
首部长度:固定长度与可变长度之和,固定长度为32bit*5=20字节,首都长度占4位,从0000到1111,也就是从0到15,代表最大长度是15个4字节(32bit)即60字节,也就是可变长度最大40字节 图中头部长度是20字节,没有可变部分
服务类型:前3位表示报文的优先级,后面的几位分别表示要求更低时延、更高的吞吐量、更高的可靠性、更低的路由代价等。对应位为1即有相应要求,为0则不要求 图中不要求
总长度:IP报文的总长度。报头的长度和数据部分的长度之和。
标识:唯一的标识主机发送的每一分数据报。通常每发送一个报文,它的值加一。当IP报文长度超过传输网络的MTU(最大传输单元)时必须分片,这个标识字段的值被复制到所有数据分片的标识字段中,使得这些分片在达到最终目的地时可以依照标识字段的内容重新组成原先的数据。
标志:共3位。R、DF、MF三位。目前只有后两位有效,DF位:为1表示不分片,为0表示分片。MF:为1表示“更多的片”,为0表示这是最后一片。
片位移:本分片在原先数据报文中相对首位的偏移位。(需要再乘以8)
生存时间:IP报文所允许通过的路由器的最大数量。每经过一个路由器,TTL减1,当为0时,路由器将该数据报丢弃。TTL 字段是由发送端初始设置一个 8 bit字段.推荐的初始值由分配数字 RFC 指定,当前值为 64。发送 ICMP 回显应答时经常把 TTL 设为最大值 255。
协议:指出IP报文携带的数据使用的是那种协议,以便目的主机的IP层能知道要将数据报上交到哪个进程(不同的协议有专门不同的进程处理)。和端口号类似,此处采用协议号,TCP的协议号为6,UDP的协议号为17。ICMP的协议号为1,IGMP的协议号为2.
首部校验和:计算IP头部的校验和,检查IP报头的完整性。为了计算一份数据报的IP检验和,首先把检验和字段置为0。然后,对首部中每个16bit进行二进制反码求和(整个首部看成是由一串16bit的字组成),结果存在检验和字段中。当收到一份IP数据报后,同样对首部中每个16bit进行二进制反码的求和。由于接受方在计算过程中包含了发送方存在首部中的校验和。因此,如果首部在传输过程中没有发生任何差错,那么接受方计算的结果应该为全1。如果结果不是全1(即检验和错误),那么IP就丢弃收到的数据报。
源IP地址:标识IP数据报的源端设备。
目的IP地址:标识IP数据报的目的地址