LabHub
学习 学习路径 课程

网络基础 — 在 Linux 虚拟机里动手

把 ARP 看成帧

在 LabHub 中继续学习

这个实习在VM中进行

创建两个网络命名空间,用两台主机写入。veth一对 这是连接两者的电缆。虽然不是全部VM一台,但从内核的角度来看,真的是两台。

目标

将IP地址转换为MAC地址的ARP以帧为单位观察,邻居表 阅读并输入静态项目,确认错误的MAC如何杀死通信。

为什么重要

在同一个子网内的通信不是用IP而是用MAC。IP是“给谁” 说,实际帧是通过MAC查看后交付的。连接这两个帧的是ARP, 那个结果是邻居表(ARP缓存)。所以IP设置都对了,但是通信 不行的话,从邻居的桌子开始看——那里有旧项目、重复IP、错误的静态项目。 有。即使云和容器管理隐藏ARP,底线是一样的。

阶段

  1. 名称空间alicebob请制作。
  2. veth 双va·vb制作vaalice啊,vbbob请放入。
  3. aliceva10.10.0.1/24bobvb10.10.0.2/24粘上lo到为止UPalicebob请用ping进行ping。
  4. ping之后alice邻居的桌子(ip -n alice neigh)为**/root/arp/neigh.txt**请保存到。bob应该看到的MAC。
  5. alice清空附近的桌子tcpdumpva一边抓着的ARParping发送,请求和响应帧**/root/arp/capture.txt**请保存到。
  6. alicebob的MAC静态(permanent)请放入邻居项目。
  7. 将静态项目更改为错误的MAC,让ping死掉**/root/arp/broken.txt** 留下,请恢复为正确的MAC的静态项目。
  8. /root/arp/report.mdbob_mac=请在一行中写下ARP请求为什么是广播,以及为什么在IP层上看不到错误的静态项目。

参考

两台主机

名称空间alicebob请制作。

ip netns add alice变成这样。ip netns list请确认。一个名称空间是一个独立的网络堆栈——接口、地址、路由、邻居表——是一套。

连接电缆

veth 双va·vb制作vaalice啊,vbbob请放入。

ip link add va type veth peer name vb形成一对ip link set va netns aliceip link set vb netns bob分别移动到。移动后在根命名空间中不可见。

粘贴地址ping

aliceva10.10.0.1/24bobvb10.10.0.2/24粘上lo到为止UPalicebob请用ping进行ping。

ip -n alice addr add 10.10.0.1/24 dev vaip -n alice link set va upip -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 neighlladdr后面是MAC,最后是状态(REACHABLE·STALE等)。bob的MAC是ip -n bob link show vb请对照。

将ARP作为帧

alice清空附近的桌子tcpdumpva一边抓着的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-hasReply … is-at必须有两行。

静态邻居项目

alicebob的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.2ping -c 1 -W 1结果(100% packet loss保存到一个文件中。仅凭ping统计无法区分是否有断线,所以需要同时保存****安装了哪个MAC。结束后,请像第6步一样用真正的MAC重新replace——看看评分器是否已恢复。

学到了什么

/root/arp/report.mdbob_mac=请在一行中写下ARP请求为什么是广播,以及为什么在IP层上看不到错误的静态项目。

bob_mac是ip -n bob link show vb的值。广播的原因是不知道对方的MAC的情况下提问,在IP层看不到的原因是因为被丢弃的地方是相对NIC,所以不会出现任何错误。