把 ARP 看成帧
这个实习在VM中进行
创建两个网络命名空间,用两台主机写入。veth一对 这是连接两者的电缆。虽然不是全部VM一台,但从内核的角度来看,真的是两台。
目标
将IP地址转换为MAC地址的ARP以帧为单位观察,邻居表 阅读并输入静态项目,确认错误的MAC如何杀死通信。
为什么重要
在同一个子网内的通信不是用IP而是用MAC。IP是“给谁” 说,实际帧是通过MAC查看后交付的。连接这两个帧的是ARP, 那个结果是邻居表(ARP缓存)。所以IP设置都对了,但是通信 不行的话,从邻居的桌子开始看——那里有旧项目、重复IP、错误的静态项目。 有。即使云和容器管理隐藏ARP,底线是一样的。
阶段
- 名称空间
alice哇bob请制作。 - veth 双
va·vb制作va是alice啊,vb是bob请放入。 alice的va在10.10.0.1/24,bob的vb在10.10.0.2/24粘上lo到为止UPalice从bob请用ping进行ping。- ping之后
alice邻居的桌子(ip -n alice neigh)为**/root/arp/neigh.txt**请保存到。bob应该看到的MAC。 alice清空附近的桌子tcpdump罗va一边抓着的ARParping发送,请求和响应帧**/root/arp/capture.txt**请保存到。alice在bob的MAC静态(permanent)请放入邻居项目。- 将静态项目更改为错误的MAC,让ping死掉**
/root/arp/broken.txt** 留下,请恢复为正确的MAC的静态项目。 /root/arp/report.md在bob_mac=请在一行中写下ARP请求为什么是广播,以及为什么在IP层上看不到错误的静态项目。
参考
- 在命名空间内命令:
ip netns exec alice <명령>,或者只要ip命令ip -n alice .... ip link add va type veth peer name vb制作一对电缆。ip link set va netns alice搬到罗。- 邻居桌子:
ip -n alice neigh. 清空:ip -n alice neigh flush all.静电:ip -n alice neigh replace 10.10.0.2 lladdr <MAC> dev va nud permanent. - 截图是
ip netns exec alice timeout 6 tcpdump -i va -nn -l arp > 파일 2>&1 &像这样放在后台,发送arping后等待。 - 常见的错误:
lo不上传。名称空间的lo的默认值是DOWN。
两台主机
名称空间alice哇bob请制作。
ip netns add alice变成这样。ip netns list请确认。一个名称空间是一个独立的网络堆栈——接口、地址、路由、邻居表——是一套。
连接电缆
veth 双va·vb制作va是alice啊,vb是bob请放入。
ip link add va type veth peer name vb形成一对ip link set va netns alice,ip link set vb netns bob分别移动到。移动后在根命名空间中不可见。
粘贴地址ping
alice的va在10.10.0.1/24,bob的vb在10.10.0.2/24粘上lo到为止UPalice从bob请用ping进行ping。
ip -n alice addr add 10.10.0.1/24 dev va,ip -n alice link set va up,ip -n alice link set lo up— bob也用同样的方式。之后ip netns exec alice ping -c 2 10.10.0.2.
读邻居表格
ping之后alice邻居的桌子(ip -n alice neigh)为**/root/arp/neigh.txt**请保存到。bob应该看到的MAC。
ping 一经来回,内核将ARP结果放入邻居表中。ip -n alice neigh的lladdr后面是MAC,最后是状态(REACHABLE·STALE等)。bob的MAC是ip -n bob link show vb请对照。
将ARP作为帧
alice清空附近的桌子tcpdump罗va一边抓着的ARParping发送,请求和响应帧**/root/arp/capture.txt**请保存到。
先将截图挂在后台:ip netns exec alice timeout 6 tcpdump -i va -nn -l arp > /root/arp/capture.txt 2>&1 &. 之后ip -n alice neigh flush all做并且ip netns exec alice arping -I va -c 1 10.10.0.2. 放在文件里Request who-has哇Reply … is-at必须有两行。
静态邻居项目
alice在bob的MAC静态(permanent)请放入邻居项目。
ip -n alice neigh replace 10.10.0.2 lladdr <bob의 MAC> dev va nud permanent.ip -n alice neigh应该显示为PERMANENT。静态项目即使时间过去也不会消失,也不会发送ARP。
如果MAC错误的话
将静态项目更改为错误的MAC,然后将当时的邻居项目和死掉的ping**/root/arp/broken.txt** 一起留下来后,请返回正确的MAC的静态项目。
lladdr 02:00:00:00:00:01用同样的假MACneigh replace … nud permanent之后,ip -n alice neigh show 10.10.0.2哇ping -c 1 -W 1结果(100% packet loss保存到一个文件中。仅凭ping统计无法区分是否有断线,所以需要同时保存****安装了哪个MAC。结束后,请像第6步一样用真正的MAC重新replace——看看评分器是否已恢复。
学到了什么
/root/arp/report.md 在bob_mac=请在一行中写下ARP请求为什么是广播,以及为什么在IP层上看不到错误的静态项目。
bob_mac是ip -n bob link show vb的值。广播的原因是不知道对方的MAC的情况下提问,在IP层看不到的原因是因为被丢弃的地方是相对NIC,所以不会出现任何错误。