二层转发的学习
1、网络拓扑
二层即网络接入层/数据链路层,处理单段链路(局域网)上的端到端报文交互。局域网(Local Area Network, LAN)指在某一区域内由多台网络设备互联组成的网络。
- pc1接入switch lan1口,pc2接入switch lan2口。
- pc1配置静态ip192.168.0.10,子网掩码为255.255.255.0
- pc2配置静态ip192.168.0.20,子网掩码为255.255.255.0
二层转发是基于 MAC 地址进行数据包的转发,本章以此拓扑为基础,通过 报文从 PC1 发出,如何被设备转发到 PC2,并且如何将 PC2 的报文转发回 PC1, 将其中所发生的过程通过一步一步的方式进行学习。
2、局域网互通
首先查看pc1 ping pc2发送了那些报文:
通过抓包查看只有ARP和ICMP两种报文,且都是跟IP相关的报文。
3、ICMP报文
- Pc1发送 ICMP Echo Request请求
- Pc2回复ICMP Echo Reply
当Pc1能正常收到Pc2的回复报文时,表示此时IP可达。
4、ARP报文
地址解析协议(Address Resolution Protocol),是根据 IP 地址获取物理地址的一个 TCP/IP 协议。报文格式如下:
- ARP请求
字段 | 字节数 | 描述 |
硬件类型 | 2 | 1,Ethernet,即局域网为以太网 |
协议类型 | 2 | 0x0800,IPv4 |
硬件地址长度 | 1 | 6,以太网采用MAC编址 |
协议地址长度 | 1 | 4,IPv4长度为4 |
操作码 | 2 | 1,ARP请求 |
发送端MAC | 6 | PC1 MAC |
发送端IP | 4 | PC1 IP |
接收端MAC | 6 | PC2 MAC |
接收端IP | 4 | PC2 IP |
- ARP响应
字段 | 字节数 | 描述 |
硬件类型 | 2 | 1,Ethernet,即局域网为以太网 |
协议类型 | 2 | 0x0800,IPv4 |
硬件地址长度 | 1 | 6,以太网采用MAC编址 |
协议地址长度 | 1 | 4,IPv4长度为4 |
操作码 | 2 | 2,ARP响应 |
发送端MAC | 6 | PC2 MAC |
发送端IP | 4 | PC2 IP |
接收端MAC | 6 | PC1 MAC |
接收端IP | 4 | PC1 IP |
同时,由抓包可知,ARP 报文的下层封装为 Ethernet II,即以太网协议
5、以太网帧
以太网协议是使用最为管饭的局域网技术协议,实现了二层数据链路的数据 传输和地址封装(MAC)。目前应用的帧格式常为 Ethernet II。
- 常见Type(类型)取值
0x0800 | IPv4协议 |
0x86DD | IPv6协议 |
0x0806 | ARP地址解析协议 |
0x8863 | 以太网PPP发现阶段 |
0x8864 | 以太网PPP会话阶段 |
0x8100 | 802.1Q |
- MAC
MAC 地址由 48 位比特即 6 个字节来表示.
- I/G 为 0 则为单播地址,为 1 则为多播地址(组播、广播)。
- G/L 为 0 则为全局(全球分配)地址,为 1 则为本地地址(Local Address) 。
- OUI 为厂商标识 。
- 广播 MAC:全为 1 的 MAC 地址(FF-FF-FF-FF-FF-FF)表示 LAN 上的所 有设备。
6、IP报文
Internet Protocol 网际协议缩写为 IP,是 TCP/IP 协议族中最为核心的协议,拥有 V4 和 V6 两个版本,是网络设备互联互通的基础。
IPv4头部的最小长度为20字节,最大长度为60字节。
字段 | 大小 | 描述 |
版本 | 4bits | IP协议版本,IPv4和IPv6 |
IP头部长度 | 4bits | IP报文头部长度 |
区分服务tos | 8bits | 服务类型,一般不使用 |
总长度 | 16biits | 头部和数据的长度和 |
标识 | 16bits | 维持的计数器 |
标志 | 3bits | DF、MF,即分片传输或数据未分片 |
片偏移 | 13bits | 分片在原始报文中的相对位置 |
生存时间TTL | 8bits | 路由时-1,防止无效报文传输 |
协议 | 8bits | 上层协议号,TCP 6,UDP 17,ICMP 1 |
首部校验和 | 16bits | 头部信息校验和 |
发送端IP | 32bits | 数据包的发送端IP |
接收端IP | 32bits | 数据包的接收端IP |
7、ARP的意义
当了解了一次 ping 互通检查所涉及到协议报文之后,回过来想一想,为什 么在 ping 的时候,首先会抓到 ARP 报文,ARP 的意义在哪里?试想一下,作 为实现者应该怎么去做。
前文讲道,网络实现中分层与封装是核心思想,对于收到的报文,本层处 理完之后,解封装去除头部,交予上层处理,对于发送的报文,本层收到数据 后,加上本层头部,传递给下层处理,那么,一步一步来构建 PC1 的报文。
- ICMP报文每个字段都能填写。
- ICMP 协议基于 IP 协议,于是交给 IP 层处理,由于所有的信息已 知,IP 层也可以完成报文头部的封装。
3))IP 层封装完后,交予下层 MAC 层处理,MAC 层进行报文头部封 装,需要目的 MAC 和源 MAC,此时,源 MAC 从本机可得,目的 MAC 成为 未知。
所以需要ARP协议,来获取目的IP的MAC地址,来实现整个报文的封装,将报文发送出去。
8、ARP表
凡是需要自行封装报文的网络设备,均会存储 MAC 与 IP 的对应关系,称为 ARP 表。
通过命令 arp -a查看当前主机下的所有arp表项。
9、MAC地址表
既然是二层转发,那么网络设备即是工作在网络参考模型的二层,即对 MAC 层进行处理,依靠 MAC 地址来进行报文的转发。
MAC地址表的字段有
- Hash
表示表项在整个mac地址表中的hash索引,方便快速找到。
- Port
表示报文接受对应的端口。
- Vid
表示报文对应的vlan id,可能来自于端口的pvid,也可能来自于报文本身。
- Age
表示表项的老化时间。
- mac-address
表示由接受报文的源MAC提供。
10、vlan
VLAN(Virtual Local Area Network,虚拟局域网)是一种将局域网划分为多个逻辑上独立的虚拟局域网的技术。通过使用 VLAN 技术,可以将一个物理上的局域网划分成多个逻辑上的子网,不同的子网之间彼此隔离,就好像它们是连接到不同的交换机端口一样。
VLAN 的主要作用包括:
- 隔离流量:不同 VLAN 中的数据包不会直接在交换机上进行转发,这样可以隔离广播、组播等网络流量,提高网络的安全性和性能。
- 灵活管理:通过 VLAN 可以根据业务需求对网络进行逻辑上的划分,而无需重新布线和调整物理连接。
- 安全性:VLAN 可以帮助实现安全策略,限制不同 VLAN 中的设备相互访问,从而提高网络安全性。
Vlan的核心功能就是数据转发的出入规则。
11、广播
广播工作在 OSI 七层模型中的数据链路层。
广播会将报文发送到整个二层网络中所有的端口,包含发送端口本身。
12、泛洪
对于单播报文的泛洪以及直接端口转发。二层转发根据MAC表来实现转发, 根据报文中的目的 MAC,在转发表中查找出接口。如果找不到出接口,则将报 文发送到该接口之外的所有其它接口,称之为泛洪;如果找到出接口则直接端口 转发。
根据目的MAC地址,在MAC地址表中查询对应的接口,如果不存在就将数据转发给所有接口,宁可全发错发,也不愿意不发。
13、二层ping的流程
1)选择网卡
通过目标ip在本地路由表中选择一个最合适的网卡来发送数据。
根据目的ip和本地路由表中的子网掩码计算得到最合适的网卡。
如果有多个合适的网卡优先选择子网掩码最大的网卡。
如果都没有就会选择本地路由表中的缺省路由(0.0.0.0,下一条(网关)192.168.80.1,网卡192.168.81.93)。
在链路上表示是局域网。
-
2)查看本地arp表
在本地arp表中查询是否有目的ip的mac映射。
如果有则直接进行第四步。
如果没有,就封装arp请求报文,内容为硬件类型为1(以太网类型),协议类型为0x0800(IPv4),MAC地址长度6,IP地址长度4,操作码为1(arp请求),源mac、ip,目的mac(全0)、ip。
因为arp的下层封装为以太网,所以还需要封装以太网帧头,内容为目的mac地址全f,源mac地址,类型0x0806(arp)。
3)封装报文
封装imcp头,内容为type 0,code 8,校验和,标识(一般为进程号),序列号(消息发送顺序),时间戳。
封装IP头,封装以太网帧头。
4)解报文
接收端收到从端口转发的报文后,检查以太网帧头的目的mac,如果是自己就接受,不是就丢弃,如何拆解ip头,得到icmp报文,然后解析数据,再执行第四步,但code要修改为0.
5)发送端收到回复
发送端收到报文后会检查一下是否是发给自己的,是的话ping完成。