我有一个Dragino-Yun v2.4-盾牌,这是一种可以与 Arduino 连接以使其具有网络功能的设备。它有一个以太网端口和 Wifi。我目前没有 wifi 天线,所以我尝试通过以太网端口连接到它。
根据手册,地址172.31.255.254
被分配给子网中的以太网端口/4
(DNS 掩码:)255.255.255.252
。我从 ThinkPad 上的空白 Arch-Linux-ISO 开始,到目前为止,ping 设备是成功的。根据手册,也应该可以通过 进行连接ssh
,但那行不通。
然后我重新启动并想干净地运行命令,但第二次尝试没有成功。以下是我运行的命令,如下所示这个 Archwiki 页面(enp0s25
这是我的 ThinkPad 的以太网链路):
$ systemctl stop dhcpcd
$ ip link set enp0s25 up # It is up by default though
$ ip addr add 172.31.255.253/4 dev enp0s25
$ ip route add default via 172.31.255.252
$ ping 172.31.255.254 -c3
PING 172.31.255.254 (172.31.255.254) 56(84) bytes of data.
FROM 172.31.255.253 icmp_seq=1 Destination Host Unreachable
FROM 172.31.255.253 icmp_seq=2 Destination Host Unreachable
FROM 172.31.255.253 icmp_seq=3 Destination Host Unreachable
--- 172.31.255.254 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 4054ms
pipe 3
我要补充的是,我的网络经验很少。我错在哪里?我是否遗漏了什么?
答案1
首先,ip addr
不会自动知道网络掩码。仅凭地址本身无法确定网络掩码,因此您必须同时指定 /prefixlen。如果您忘记这样做,则地址将被添加为 /32(单主机),您将无法访问子网的其余部分。
其次,你的网络掩码不是 /4,而是/30。斜线符号用于表示网络掩码的位长度,而不是文字子网大小。因此正确的命令应该是:
ip addr add 172.31.255.253/30 dev enp0s25
(您可以将 /length 计算为 ,将 size 计算为,或者只计算位数。)32−log2(size)
2(32-length)
此外,它是一个“网络掩码”或“子网掩码”,而不是“DNS掩码”,因为它与DNS无关。
我发现您还指定了一个相当不常见的地址作为网关。对于您的网络掩码,.252 是子网的“第零”地址,通常被视为 IPv4 中的保留地址。(您是否混淆了“网关”和“网络地址”?)
然而,同一子网内的通信首先不需要网关——这就是子网是– 因此您ip route add
现在就可以完全跳过这一行。
最后,“目的地主持人“无法访问”通常意味着另一种错误:它意味着操作系统做知道该地址在本地子网内,但尝试使用 ARP 查找其 MAC 地址时未收到任何响应。(在向同一子网设备发送任何内容之前,此步骤是必需的。)
尝试进行手动 ARP 查询(类似于操作系统所做的操作)——如果成功,则说明您的 IP 配置仍然有错误:
arping -I enp0s25 172.31.255.254