相关文章《 IPv6系列-初学者的10个常见困扰 》
本文通过抓包分析,深入观察网卡启动过程的每个步骤,从而逐步掌握通讯原理。
掌握网络技术,除了看RFC协议外,最直接高效的方法就是“亲眼所见”。
其中抓包分析是最为关键的方法,能了解到:
网卡启动是网络通讯的第一步,只有夯实基础方能展翅高飞。
本文以CentOS 7为实验环境,创建两个network namespace(名字分别为ns1和ns2),并通过veth网卡桥接到同一个linux bridge(名字为br0),来模拟最简单的环境,即两台同二层服务器。
1. 先贴出mac地址:
2. 实验步骤:
3. 观察:
本文最后会附上实验脚本和抓包文件的下载地址。
在ns2里启动网卡之前,先对ns2里的网络环境进行查看,命令如下
# 查看网卡状态 ip netns exec ns2 ip link # 查看ipv6地址 ip netns exec ns2 ip -6 addr # 查看ipv6路由 ip netns exec ns2 ip -6 route # 查看ipv6多播地址 ip netns exec ns2 ip -6 maddr
可以看到此时eth0处于DOWN的状态,接下去,对eth0进行UP。
# 启动网卡 ip netns exec ns2 ip link set eth0 up
进入ns2里查看
可以看到,此时网卡已启动,并获得了一个链路本地地址(图中fe80开头的)
这些包都是什么意思,如何产生,为何产生,请接着往下看。
网卡启动过程一共有5步,详见示意图(右边的数字,表示对应抓包图中的第几个包):
接下来,将对这5步进行逐步讲解。
(本步骤尚未产生数据包)
(1) “链路本地地址”是什么
(2) “链路本地地址”有什么作用
(本步骤尚未产生数据包)
(1) “被请求节点多播地址”是什么
在IPv6的世界中,每生成一个ip地址(准确说是单播地址),无论什么类型,都会对应生成一个“被请求节点多播地址”(Solicited-Node multicast address)。
组成方式:FF02::1:FF00:0/104 + 单播地址的最后24bit。可以看到,该地址是通过单播地址推导而成,不是随机的。上图中红框里的地址就是“链路本地地址”对应的“被请求节点多播地址”。
(2) 为什么需要“被请求节点多播地址”
就4个字:“地址解析”
(3) “被请求节点多播地址”工作原理
当他人想解析我的MAC地址时,发送一个“地址解析请求包”到这个多播地址,然后属于该多播地址的成员(也就是“我”)就会收到该数据包,最后“我”返回MAC地址给对方。这样就完成了“地址解析”的流程。
(4) “被请求节点”这5个字到底是什么意思
别人请求解析我的地址,那么我就是被请求的节点。我生成“被请求节点多播地址”的目的,就是让别人能够请求到我。
(对应抓包图中的No. 1/2/4/6)
(1) 什么是“多播成员报告”
(2) 为什么要进行“多播成员报告”
(3) 要报告的是哪个成员
(对应抓包图中的No. 3)
(1) 什么是“重复地址检测”
(2) 何时进行“重复地址检测”
(3) “重复地址检测”的工作原理
(对应抓包图中的No. 5/7/8)
(1) 什么是“无状态地址自动配置”
在IPv6中,有2种自动配置IP地址的方法:
(2) SLAAC的作用是什么
注:这里说的IP地址,是指“全球单播地址”或者“唯一本地地址”,也就是俗称的公网地址和私网地址。而不是“链路本地地址”。
(3) 工作原理
涉及到这2种报文:
当收到路由器回应的RA报文后,就会根据报文中的IP前缀信息,自动生成IP地址,并将网关指向该路由器的“链路本地地址”。
(4) 如何能够收到RA报文呢
有2种办法:
由于本次实验中没有路由器,因此截图中仅能看到主动发送的RS报文,而没有得到回应。
上述问题,将在《IPv6系列》的下一篇文章中进行解答。
我来评几句
登录后评论已发表评论数()