计算网络 IP Address
问
写出下面给定 IP 168.56.128.0/18 的 Lowest, Highest 以及 Broadcast IP Address。
答
因为后面的掩码数是 18,说明前面 18 位是不变的,可以将上面的 IP 地址转化如下:
168.56.10(00 0000).(0000 0000)
要求不同的 IP 地址其实就是要找出 168.56.10(xx xxxx).(xxxx xxxx) 网络中的最小,最大和 Broadcast 地址。
Lowest IP Address
首先求 Lowest,也就是这个网络里最小的网络 IP 是啥,又因为前 18 位是不变的,所以将后面的 "x" 变成 0 不就是最低了嘛。这里要注意的是后面全是 0 的 IP 是这个网络的 IP。
168.56.10(00 0000).(0000 0000) // 这个网络 IP 地址
所以最低分配的 IP 地址还要在这个基础上 +1,也就是
168.56.10(00 0000).(0000 0001) // 最小 IP 地址
//写成 10 进制
168.56.128.1 // 最小 IP 地址
Broadcast IP Address
刚刚说到后面全是 0 则是这个子网的 IP,那全是 1 呢?那就是 Broadcast IP 地址了。
168.56.10(11 1111).(1111 1111) // Broadcast IP
// 写成 10 进制
168.56.191.255 // Broadcast IP
Highest IP Address
本来如果后面可变的位数都是 1,那么 IP 地址应该是最大的,可以这里被用来做 Broadcast IP 了,所以可分配的 IP 地址要在 Broadcast IP 地址基础上 -1.
168.56.10(11 1111).(1111 1110) // 最大 IP 地址
// 写成 10 进制
168.56.191.254 // 最大 IP 地址
问
假设现在有一个 IP: 128.36.199.3/19 是从属于学校网络的,且这个学校网络只能允许分配 5 个不同的子网。写出:
- Network ID
- Subnet Mask
- Campus Network ID
- Local Broadcast Address
答
Network ID 就是指当前这个 IP: 128.36.199.3/19 所属的子网是什么,上题已经说过了就是将固定位数后面的位数变成 0 就可以了。
128.36.199.3/19 ->128.36.110(0 0111).(0000 0011)
// Netowork ID
128.36.110(0 0000).(0000 0000) -> 128.36.192.0/19
Subnet Mask 就是将固定位数都变成 1,未固定位数都变成 0.
128.36.199.3/19 ->128.36.110(0 0111).(0000 0011)
// Netowork ID
(1111 1111).(1111 1111).(1110 0000).(0000 0000) -> 255.255.224.0
Campus Network ID 就是要求当前这个 IP 所属的校园网 IP 是什么。根据问题校园网只能分配 5 个子网,而 3 个位 () 就已经可以分配 8 个不同的子网了,所以校园网的前缀是 。再根据上面求子网一样,将未固定的位数都变成 0 就是 Campus Network ID 了。
// Campus Network ID
128.36.0.0/16
Local Broadcast Address 和上题一样,将未固定的位数都变成 1 就可以了。
128.36.199.3/19 ->128.36.110(0 0111).(0000 0011)
// Broadcast Address
128.36.110(1 1111).(1111 1111) -> 128.36.223.255
链路层的分包
问
已知 MMS = 1200 Bytes,IP 和 TCP Header 都是 20 Bytes,MTU = 1600 Bytes,求:如果不设置 DF (Don't Fragment) 会怎么样?设置了 DF 又会怎么样?
答
MSS = Maximum Segment Size
MTU = Maximum Transmission Unit
先求整个 Packet 的大小 = 1200 + 20 (IP Header) + 20 (1600 Header) < 1600,说明还不需要分包,所以设置和不设置 DF 都不会有影响。
问
将上面变一下, MMS = 1600 Bytes,MTU = 1200 Bytes,再问上面两个问题。
答
这个时候 Packet 大小是 1600 + 20 + 20 > 1200,说明这时候是需要分包的 (Fragement)。
如果不设置 DF,也就是说在这层(链路层)不不分包=要分包,所以这时候网络层的包来到链路层后,链路层会对这些数据包进行分包 (Fragement) 操作,不会报错。
如果设置 DF,也就是在这层(链路层)不分包,而数据包的大小又超过 MTU,会报错,然后将数据包返回到传输层,让传输层去分包,分好再给链路层去传递。
网络配置
问
下面正确的网络配置是哪个?
- LAN1: 128.64.1.0, LAN2: 128.64.1.0, LAN3: 128.64.1.0
- LAN1: 128.64.1.0, LAN2: 128.64.2.0, LAN3: 128.64.1.0
- LAN1: 128.64.1.0, LAN2: 128.64.2.0, LAN3: 128.64.3.0
答
正确配置是第一个,因为 HUB 不会创建子网,所以上面 PC1 和 PC2 都是属于同一个子网,LAN1,LAN2,LAN3 对应的子网都是一样的。
问
将上面的 HUB 都改成 Bridge,如何配置?
答
正确配置还是第一个,因为 Bridge 也不会创建子网,所以上面 PC1 和 PC2 都是属于同一个子网,LAN1,LAN2,LAN3 对应的子网都是一样的。
问
将上面的 HUB 都改成 Router,如何配置?
答
正确配置是第三个,因为 Router 会创建子网,这里的每个 LAN 都是不同的子网。
生成树
问
假设已知 Bridge 4 是 Root Bridge,上面的网络结构的生成树是怎么样的?
答
首先从 Bridge 4 开始相邻的 Bridge,找到 Bridge 1和 Bridge 9,以此类推找他们相邻的 Bridge,所以现在已经连上了
Bridge 4
Bridge 1
Bridge 2
Bridge 3
Bridge 6
Bridge 5
Bridge 8
Bridge 9
Bridge 7
画成树:
问
写出每个 Bridge 的端口的类型(Designated, Root, Block)。
答
确定商品类型的规则是
- Root Bridge 的端口都是 Designated Port
- Bridge 连到 Root Bridge 的那个商品都是 Root Port
- 除了 Root Port,剩下 Bridge 之间有连接的商品都是 Designated Port
- 剩下不联通的都是 Block Port,配置这个要注意的是所有的子网至少和一个 Designated Port 有连接,不能都连接 Block Port,否则这个网络就没意义了
按照上面的规则可以画成下面的树
问
如果 Host A 发请求给 Host B,ARP 请求和响应是怎么样的?
答
发 ARP 是广播的,所以 A 发 ARP 请求的时候,所有 Bridge 都会记录 A 是从哪个端口来的。所以 A 发 ARP 请求会经过下面的 Bridge
Bridge 6, Bridge 2, Bridge 5, Bridge 1, Bridge 4, Bridge 9, Bridge 7
当 B 收到 A 的 ARP 请求后,会发一个 ARP 响应,由于上面已经记录了 A 的位置了,所以当 B 进行 ARP 响应广播的时候,Bridge 就会直接将响应送到对应的端口,而不像上面乱发一通了。只要 ARP 响应经过某个 Bridge,那个 Bridge 就会记录 B 从哪个端口来,这就是 网桥学习。
ARP 响应的过程是
Bridge 9, Bridge 4, Bridge 1, Bridge 2
问
ICMP 请求是怎么样的?
答
因为刚刚发 ARP 请求响应的时候 Bridge 都已经记录了 A 和 B 从哪个端口来,所以发数据包的时候会很直接地送到对应的目的地。
ICMP 请求路径:Bridge 2, Bridge 1, Bridge 4, Bridge 9
ICMP 响应路径:Bridge 9, Bridge 4, Bridge 1, Bridge 2
TCP 发包过程
问
下面给出描述,画出 TCP 发包的图
- TCP 开始处理 Slow-Start 阶段,到了 Round 5 进入 Congestion Avoidance (到达阙值)
- 当 Round 12 时候出现重复的 ACK
- 当 Round 19 后的下一个 Round 出现丢包的情况
假设使用 TCP Tahoe。
答
- R1 => R6: Slow-Start 阶段,发包数以指数倍增加
- R6 => R12: R5 后进入 Congestion Avoidance 阶段,所以从 R6 开始以线性倍增长
- R12 => R13: 出现重复 ACK 使用 Tahoe 方案,即 cwnd = 0,threshold = 38 / 2 = 19,再次进入 Slow-Start 阶段
- R13 => R18: Slow-Start 阶段,发包数以指数僧增加
- R18 => R20: 超过 threshold,进入 Congestion Avoidance 阶段,线性增长
- R20 => R21: R20 的时候检测到丢包,所以 R21 直接变成了 0,再进入 Slow-Start 阶段
这里提一下 Reno 的方案: 将 ssthresh 设置成当前的 cwnd,然后将 cwnd 设置成当前 cwnd 的一半 (cwnd / 2)
跌幅
问
给上面的图添加路由表。
答
- PC 都会有一个默认的子网,这个子网的 Gateway 应该设置成 *
- 给 PC 设置默认网关后,Genmask 要调成 0.0.0.0,表示默认网关
- 如果是设置单个路由,就要定义好目的地的 Genmask
问
如果 PC 4 发 IP datagram 给 PC 2,写出经过每个网络时候包里的 Source 和 Destination 信息。
答
这里要注意的是 LAN 3 和 LAN 4 中间有个网桥,他们两个都是同一个网络,所以 Source 和 Destination 是一样的。
问
写出 Bridge 0 里的 Forwarding Table。
答
这里只需要写出 PC 要从 Bridge 的哪个端口来就好了。
Telnet 传输
问
设置现在 Client 要传一个字符 "r" 给服务器,完成下面的表格。空白栏用 "*" 表示。
答
这里要注意的是传输字符之前是要进行 TCP 三次握手的,而握手的前两次的 Flag 是 SYN,其中第二次的 Server 发到 Client 要传 ACK。
ACK Number 是对方当前 Sequence Number + 1.
l