add scripts for Blatt01 and Notes
This commit is contained in:
parent
c6e384433b
commit
b9388e579e
@ -1,12 +1,5 @@
|
|||||||
## router table
|
## router table
|
||||||
|
|
||||||
| device | eth | ip |
|
|
||||||
| ------- | ---- | ----------- |
|
|
||||||
| PC1 | eth1 | 10.5.0.2/24 |
|
|
||||||
| PC2 | eth1 | 10.5.1.2/24 |
|
|
||||||
| router1 | eth1 | 10.5.0.1/24 |
|
|
||||||
| router2 | eth1 | 10.5.1.1/24 |
|
|
||||||
|
|
||||||
router -> router
|
router -> router
|
||||||
|
|
||||||
```
|
```
|
||||||
@ -163,7 +156,51 @@ listening on eth1, link-type EN10MB (Ethernet), snapshot length 262144 bytes
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
### 主要工具:`ip`
|
## A103
|
||||||
|
|
||||||
|
### router table
|
||||||
|
|
||||||
|
router1
|
||||||
|
|
||||||
|
```
|
||||||
|
ip route show
|
||||||
|
10.5.1.0/24 dev eth1 proto kernel scope link src 10.5.1.2
|
||||||
|
10.5.2.0/24 dev eth2 proto kernel scope link src 10.5.2.1
|
||||||
|
10.5.3.0/24 via 10.5.2.2 dev eth2
|
||||||
|
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.7
|
||||||
|
```
|
||||||
|
|
||||||
|
pc1
|
||||||
|
|
||||||
|
```
|
||||||
|
ip route
|
||||||
|
10.5.1.0/24 dev eth1 proto kernel scope link src 10.5.1.1
|
||||||
|
10.5.3.0/24 via 10.5.1.2 dev eth1
|
||||||
|
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.1
|
||||||
|
```
|
||||||
|
|
||||||
|
router2
|
||||||
|
|
||||||
|
```
|
||||||
|
ip route
|
||||||
|
10.5.1.0/24 via 10.5.2.1 dev eth2
|
||||||
|
10.5.2.0/24 dev eth2 proto kernel scope link src 10.5.2.2
|
||||||
|
10.5.3.0/24 dev eth1 proto kernel scope link src 10.5.3.2
|
||||||
|
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.12
|
||||||
|
```
|
||||||
|
|
||||||
|
pc2
|
||||||
|
|
||||||
|
```
|
||||||
|
root@pc2:~# ip route
|
||||||
|
10.5.1.0/24 via 10.5.3.2 dev eth1
|
||||||
|
10.5.3.0/24 dev eth1 proto kernel scope link src 10.5.3.1
|
||||||
|
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.3
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## `ip`
|
||||||
|
|
||||||
**`ip`** 是 IPRoute2 工具集中最常用的命令,能够管理和配置 IP 地址、路由、链路等多种网络参数。与旧版的 `ifconfig` 和 `route` 命令相比,`ip` 更加灵活和强大。
|
**`ip`** 是 IPRoute2 工具集中最常用的命令,能够管理和配置 IP 地址、路由、链路等多种网络参数。与旧版的 `ifconfig` 和 `route` 命令相比,`ip` 更加灵活和强大。
|
||||||
|
|
||||||
|
48
Blatt01/scripts/checkip.sh
Normal file
48
Blatt01/scripts/checkip.sh
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
show_ip(){
|
||||||
|
local output=$1
|
||||||
|
ips=()
|
||||||
|
interfaces=()
|
||||||
|
# echo $output
|
||||||
|
while read -r line; do
|
||||||
|
ip=$(echo "$line" | awk '{print $2}' | cut -d'/' -f1)
|
||||||
|
interface=$(echo "$line" | awk '{print $5}')
|
||||||
|
ips+=("$ip")
|
||||||
|
interfaces+=("$interface")
|
||||||
|
done <<< "$output"
|
||||||
|
for i in "${!ips[@]}"; do
|
||||||
|
echo "${ips[i]} ${interfaces[i]}"
|
||||||
|
done
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
filename="output/output_$(date +'%m-%d_%H-%M-%S').txt"
|
||||||
|
echo $(date +'%m-%d_%H-%M-%S')
|
||||||
|
echo ' ' > $filename
|
||||||
|
|
||||||
|
ip_cmd='ip address show | grep 10.5'
|
||||||
|
for num in {1..4}
|
||||||
|
do
|
||||||
|
echo "router$num" >> $filename
|
||||||
|
echo "router$num"
|
||||||
|
ip_output=$(ssh router$num $ip_cmd)
|
||||||
|
ips=()
|
||||||
|
interfaces=()
|
||||||
|
|
||||||
|
result=$(show_ip "$ip_output")
|
||||||
|
echo $result
|
||||||
|
echo $result >> $filename
|
||||||
|
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
for num in {1..3}
|
||||||
|
do
|
||||||
|
echo "pc$num" >> $filename
|
||||||
|
echo "pc$num"
|
||||||
|
pc_result=$(ssh pc$num $ip_cmd)
|
||||||
|
result=$(show_ip "$pc_result")
|
||||||
|
echo $result >> $filename
|
||||||
|
echo $result
|
||||||
|
done
|
||||||
|
|
103
Blatt01/scripts/testpc.sh
Normal file
103
Blatt01/scripts/testpc.sh
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
show_ip(){
|
||||||
|
local output=$1
|
||||||
|
ips=()
|
||||||
|
interfaces=()
|
||||||
|
echo $output
|
||||||
|
while read -r line; do
|
||||||
|
ip=$(echo "$line" | awk '{print $2}' | cut -d'/' -f1)
|
||||||
|
interface=$(echo "$line" | awk '{print $5}')
|
||||||
|
ips+=("$ip")
|
||||||
|
interfaces+=("$interface")
|
||||||
|
done <<< "$output"
|
||||||
|
for i in "${!ips[@]}"; do
|
||||||
|
echo "${ips[i]} ${interfaces[i]}"
|
||||||
|
done
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ip_cmd='ip address show | grep 10.5'
|
||||||
|
sender_ip='10.5.1.1/24'
|
||||||
|
rec_ip='10.5.1.2/24'
|
||||||
|
rec_ip_no_code='10.5.1.2'
|
||||||
|
senders=()
|
||||||
|
recs=()
|
||||||
|
sender_eths=()
|
||||||
|
rec_eths=()
|
||||||
|
losses=()
|
||||||
|
|
||||||
|
sender_type="${1:-router}"
|
||||||
|
receiver_type="${2:-router}"
|
||||||
|
if [ "$sender_type" = "router" ]; then
|
||||||
|
sender_ub=4
|
||||||
|
else
|
||||||
|
sender_ub=3
|
||||||
|
fi
|
||||||
|
if [ "$receiver_type" = "router" ]; then
|
||||||
|
rec_ub=4
|
||||||
|
else
|
||||||
|
rec_ub=3
|
||||||
|
fi
|
||||||
|
for sender in $(seq 1 $sender_ub);
|
||||||
|
do
|
||||||
|
sender_eth_nums=$(ssh $sender_type$sender "ip address show" | grep -c '^.*eth[0-9]:')
|
||||||
|
sender_eth_nums=$(($sender_eth_nums-1))
|
||||||
|
echo "$sender_type$sender has $sender_eth_nums eths"
|
||||||
|
for sender_eth_num in $(seq 1 $sender_eth_nums);
|
||||||
|
do
|
||||||
|
# turn on the device
|
||||||
|
ssh $sender_type$sender "ip link set dev eth$sender_eth_num up"
|
||||||
|
ssh $sender_type$sender "ip address add $sender_ip dev eth$sender_eth_num"
|
||||||
|
# for receiver in {1..4}
|
||||||
|
for receiver in $(seq 1 $rec_ub);
|
||||||
|
do
|
||||||
|
receiver_eth_nums=$(ssh $receiver_type$receiver "ip address show" | grep -c '^.*eth[0-9]:')
|
||||||
|
receiver_eth_nums=$(($receiver_eth_nums-1))
|
||||||
|
echo "$receiver_type$receiver has $receiver_eth_nums eths"
|
||||||
|
if [ "$sender_type" = "$receiver_type" ]; then
|
||||||
|
if [ "$sender" -eq "$receiver" ]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
for receiver_eth_num in $(seq 1 $receiver_eth_nums);
|
||||||
|
do
|
||||||
|
ssh $receiver_type$receiver "ip link set dev eth$receiver_eth_num up"
|
||||||
|
ssh $receiver_type$receiver "ip address add $rec_ip dev eth$receiver_eth_num"
|
||||||
|
echo "sen $sender_type$sender eth$sender_eth_num ip $sender_ip"
|
||||||
|
echo "rec $receiver_type$receiver eth$receiver_eth_num ip $rec_ip"
|
||||||
|
ip_output=$(ssh $sender_type$sender $ip_cmd)
|
||||||
|
result=$(show_ip "$ip_output")
|
||||||
|
echo $result
|
||||||
|
|
||||||
|
# test loss
|
||||||
|
loss=$(ssh $sender_type$sender "ping -c 5 -W 2 -I eth$sender_eth_num $rec_ip_no_code | awk -F', ' '/packet loss/ {print \$3}' | awk '{print int(\$1)}'")
|
||||||
|
echo $loss
|
||||||
|
if [ "$loss" -ne 100 ]; then
|
||||||
|
senders+=("$sender")
|
||||||
|
recs+=("$receiver")
|
||||||
|
sender_eths+=("$sender_eth_num")
|
||||||
|
rec_eths+=("$receiver_eth_num")
|
||||||
|
losses+=("$loss")
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
ssh $receiver_type$receiver "ip address del 10.5.1.2/24 dev eth$receiver_eth_num"
|
||||||
|
done
|
||||||
|
done
|
||||||
|
ssh $sender_type$sender "ip address del 10.5.1.1/24 dev eth$sender_eth_num"
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "results"
|
||||||
|
|
||||||
|
printf "%-10s %-15s %-12s %-15s %-10s\n" "sender #" "sender eth #" "receiver #" "receiver eth #" "losses #"
|
||||||
|
for i in "${!senders[@]}"; do
|
||||||
|
printf "%-10s %-15s %-12s %-15s %-10s\n" "${senders[i]}" "${sender_eths[i]}" "${recs[i]}" "${rec_eths[i]}" "${losses[i]}"
|
||||||
|
done
|
||||||
|
|
||||||
|
# printf "sender #\t sender eth #\t receiver # \t receiver eth # \t losses # \t\n"
|
||||||
|
# for i in "${!senders[@]}"; do
|
||||||
|
# printf "%s\t%s\t%s\t%s\t%s\n" "${senders[i]}" "${sender_eths[i]}" "${recs[i]}" "${rec_eths[i]}" "${losses[i]}"
|
||||||
|
# done
|
||||||
|
|
63
Notes.md
63
Notes.md
@ -359,69 +359,6 @@ v) 配置路由,使得从 `pc1` 到 `pc2` 的数据**总是**通过 `router4`
|
|||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
## Questions
|
|
||||||
|
|
||||||
#### 1.为什么不能用10.5.0.0
|
|
||||||
|
|
||||||
在分配IP地址时,使用 10.5.0.0 这样的地址可能会引发一些问题,尤其是当地址的最后两位是 .0 时,这通常与网络地址的概念相关。这里是详细的解释:
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**1. 网络地址的冲突:**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
• 10.5.0.0 可能被解释为 **网络地址**,特别是如果使用的子网掩码是 255.255.0.0(即 /16)。网络地址是用于标识整个网络或子网,而不是分配给具体的设备。使用这种地址可能导致路由器或其他网络设备无法正常识别该地址,因为它通常代表的是子网本身,而不是子网中的具体主机。
|
|
||||||
|
|
||||||
• 通常,IP地址的最后一位为 .0 的地址是保留给子网地址的,这表示整个子网的范围。
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**2. 广播地址的潜在问题:**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
• 10.5.0.255 可能被解释为 **广播地址**,用于向整个子网内的所有设备发送消息。同样,如果你使用类似 10.5.0.x 的地址而配置不正确,可能会造成网络上的混淆,因为网络设备可能认为它在处理广播流量,而不是具体的设备通信。
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**3. 子网的计算和划分:**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
在IP地址分配中,子网掩码会将一个地址分为 **网络部分** 和 **主机部分**。如果子网掩码的定义范围较大,比如 /16,那么 10.5.0.0 这个地址表示的是整个 10.5.x.x 子网,而不是一个具体的主机IP。
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
• **网络地址**(如 10.5.0.0)是子网的标识,不能用于分配给主机。
|
|
||||||
|
|
||||||
• **广播地址**(如 10.5.0.255)用于在子网内广播消息,也不能分配给主机。
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**4. 惯例和规范:**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
通常情况下,网络管理员会避免将子网的第一个地址(如 .0)和最后一个地址(如 .255)分配给设备。这是因为这些地址分别表示 **网络地址** 和 **广播地址**,用于路由和管理目的,而不是用于具体的设备通信。
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**结论:**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
• 10.5.0.0 可能会被解释为网络地址,而不是主机地址,因此不推荐用作设备的IP地址。
|
|
||||||
|
|
||||||
• 避免使用 .0 和 .255 作为分配给主机的地址,因为这些地址通常是保留用于网络管理的特殊地址。
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
为确保网络正常运行,建议使用子网范围内的中间地址(如 10.5.0.1 或 10.5.1.1),避免网络地址和广播地址的冲突。
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
如果你有更多关于IP分配或网络设计的问题,随时告诉我!
|
|
||||||
|
|
||||||
## Appendix
|
## Appendix
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user