一、本实例以ping包为例进行展开说明如图:
数据封装格式:
SMAC | DMAC | SIP | DIP | ICMP | Data |
首先在了解数据封装与解封装之前,需要熟悉ISO七层模型的功能及报文格式,其中报文格式包括:以太帧、ip报文格式、icmp报文格式;
ISO七层模型:
层次 | 功能 |
应用层 | 提供各种应用程序、协议(http、dns、dhcp等等) |
表示层 | 对数据的压缩和解压缩、加解密 |
会话层 | 指定通信方式、创建和注销会话 |
传输层 | 提供可靠或不可靠的端到端的传输(tcp/udp)-数据段/报 |
网络层 | 逻辑寻址、路由选择(ip)--数据包/分组 |
数据链路层 | 提供节点到节点的传输、差错控制--数据帧 |
物理层 | 提供机械与电器规约---比特流 |
以太网报文格式:
DMAC | SMAC | Type | Data | CRC |
详解:
字段 | 长度 | 含义 |
DMAC | 6字节 | 目的MAC地址,该字段确定帧的接收者。 |
SMAC | 6字节 | 源MAC地址,该字段标识发送帧的工作站。 |
Type | 2字节 | 协议类型。 |
Data | 变长 | 数据字段的最小长度必须为46字节以保证帧长至少为64字节如果不够必须填充至64字节,数据字段的最大长度为1500字节。 |
CRC | 4字节 | 用于帧内后续字节差错的循环冗余检验; |
IP报文格式:
Version | IHL | Type of Service | Total Length |
Identification | Flags | Fragment Offset | |
Time to Live | Protocol | Header Checksum | |
Source Address | |||
Destination Address | |||
Options | Padding |
详解:(由于报文类型较多,在此我就介绍这次数据包封装常见的报文类型)
字段 | 长度 | 含义 |
Protocol | 8比特 | 协议:下一层协议。指出此数据包携带的数据使用何种协议,以便目的主机的IP层将数据部分上交给哪个进程处理。 常见值: 1: ICMP, Internet Control Message [RFC792] |
S Address | 32比特 | 源ip地址 |
D Address | 32比特 | 目的ip地址 |
ICMP Echo Request/Reply消息格式 :
Type | Code | Checksum |
Identifier | Sequence Number | |
Data |
详解:
字段 | 长度 | 含义 |
Type | 1字节 | 消息类型: 0:回显应答报文 8:请求回显报文 |
Code | 1字节 | 消息代码,此处值为0。 |
二、下面就详细介绍数据的封装与解封装的过程;
数据封装:
1.PC1(192.168.1.1)ping PC2(192.168.1.2)
(1)ping包发送后pc1通过广播方式发送arp请求报文;
注:在arp 请求报文中目的mac地址应该为全零,由于模拟器的原因所有为全F
(2)通过PC2的回报文中可以看到PC的MAC地址,pc1将其加入到自己的arp表中;
2.数据从上而下(应用层--物理层)封装:
SMAC | DMAC | SIP | DIP | ICMP | Data |
1C:AA | 01:9D | 1.1 | 1.2 | Type:8 Code:0 | Data |
3.交换机收到PC发送的ICMP报文之后进行解封装,数据从下而上(物理层--应用层)拆到数据链路层,看到DMAC之后查看自己的mac地址表,发现有01:9d对应的表项则继续封装上对应字段,进行转发;
SMAC | DMAC | SIP | DIP | ICMP | Data |
1C:AA | 01:9D | 1.1 | 1.2 | Type:8 Code:0 | Data |
4.pc2收到交换机发送的数据包之后进行解封装,一直拆到来看ICMP协议,发现其中字段Type:8 Code:0 为pc1的request请求,PC2从新封装数据包发送给pc1;
SMAC | DMAC | SIP | DIP | ICMP | Data |
01:9D | 1C:AA | 1.2 | 1.1 | Type:0 Code:0 | Data |
5、交换机转发过程请看步骤3