计算机网络 实验四 通信
这次实验的话,我的报告参考意义不大,毕竟这次实验的主要难点是完成那两个代码,但是我报告中没有任何对于代码的解释。
大家如果需要的话,我的两个代码可以在这里下载,仅供参考:点击下载。
一、个人信息
姓名:XXX
学号:XXXXXXXXXXXXXX
二、实验目的
- 理解和掌握ARP与ICMP协议在IPv4分组收发处理过程中的作用。
- 理解和掌握路由器静态路由转发过程。
- 理解和掌握动态路由选择协议的基本原理与过程。
- 提升文档阅读能力。
- 提升代码编写能力。
三、实验内容与结果分析
在实验二中,我们已学习了Wireshark的使用方法,并在发送主机侧观察了ARP及ICMP协议的 具体过程,在本任务中,你将继续使用Wireshark在全路径范围内(包括发送主机侧,转发路由器上,以及接收主机侧)观察并分析ARP、ICMP协议。
任务⼀:观察和分析ARP和ICMP协议过程
在Mininet终端中使⽤ping命令来测试host1到host2的⽹络连通性。追踪并分析在ping命令运⾏过程中,⽹络中各节点相关协议数据包的流向和变化过程。请在实验报告中通过分析抓到的包,还原ping的过程,分析ARP和ICMP协议包的传输过程.
上图是在运行 host1 ping -c 3 host2
以后 Wireshark 捕获到的数据包记录截图。
左上、右上、左下、右下依次是 host1, host2, router1, router2
。
在第一次运行这个 ping
的时候,ARP 缓存为空,host1
广播了一个 ARP 请求包,询问路由器 100.0.0.1
的 Mac 地址,同时,在 host1
和 router1
的截图中,分别可以发现发出和收到了这个 ARP
请求。接着,router1
回应了这个请求,告诉了 host1
自己的 MAC 地址,在 router1
和 host1
的截图中,可以发现分别发出和收到了这个 ARP 请求。在获得 router1
的 MAC 地址后,host1
正式将第一个由 ping 产生的 ICMP 数据包发送给了 router1
。这个数据包对应 host1
的第 \(3\) 条记录和 router1
的第 \(3\) 条记录。
随后,router1
发现需要将这个数据包发送给 router2
进行间接交付,于是但是这个时候它还不知道 router2
的 MAC 地址,于是 router1
在与 router2
连接的局域网内广播了一个 ARP 请求询问(router1
的第 \(4\) 条和 router2
的第 \(1\) 条),然后 router2
收到之后,发送了 ARP 回应告知自己的 MAC 地址(router2
的第 \(2\) 条和 router2
的第 \(5\) 条)。在获知 router2
的 MAC 地址后,router1
便把这个 ICMP 数据包转发给了 router2
(router1
的第 \(6\) 条和 router2
的第 \(3\) 条)。
在 router2
获得这个 ICMP 数据包之后,需要将它交付给 host2
,但是不知道它的 MAC 地址,因此需要发出 ARP 询问请求(router2
的第 \(4\) 条和 host2
的第 \(1\) 条),在获得了 host2
的 MAC 地址后(host2
的第 \(2\) 条和 router2
的第 \(5\) 条),router2
就把 ICMP 数据包交付给了 host2
(router2
的第 \(6\) 条和 host2
的第 \(3\) 条)。
在 host2
收到 ICMP 数据包后,需要向 host1
发送回应。因为之前 router2
已经向 host2
发送过 ARP 询问报文,因此 host2
已经知道了 router2
的 MAC 地址,不需要再发 ARP 询问了,因此 host2
直接向 router2
发送了目的 IP 为 100.0.0.250
的 ICMP 包。接着,router2 收到这个回应后,转发给 router1
,router1
收到后直接交付给 host1
。
因为 ping
的次数为 \(3\) 次,因此 host1
还会再向 host2
发送两次 ICMP
数据。因为在第一次数据包发送的过程中,所有节点的 ARP 缓存已经存在需要的信息了,所以不再需要发送各种 ARP 包。其余转发过程与第一次相同。
注意到 router1, router2, host2
的 Wireshark 最后还捕捉到了一些 ARP 数据包,但是观察捕捉到的时间,这不是在这个 ping
的过程中发出了 ARP 分组,因此我这里将他们忽略。
在Mininet终端运⾏traceroute命令来测试host1到host2的路由。追踪并分析在traceroute命令运⾏过程中,⽹络中各节点相关协议数据包的流向和变化过程。请在实验报告中还原并分析traceroute相关数据包的传输过程。
捕获数据包:
host1
host2
router1
router2
可以发现,host1
首先发送了一个无法被接受的 UDP 包,其 TTL
为 \(1\),router1
在收到这个包后,没有进行转发,而是向 router1
发回了一个 ICMP 时间超过报文。这个过程重复了三次。
接着,host1
发送了一个无法被接受的 UDP
包,其 TTL
为 \(2\),router1
在收到这个 UDP
包以后将 TTL
减一并转发给了 router2
,router2
收到这个数据包以后没有进行转发,而是向 host1
的 IP 地址发送了一个 ICMP 时间超过报文给 router1
,router1
再将这个 ICMP 时间超过报文交付给 host1
。这个过程也重复了三次。
然后,host1
发送了一个无法被接受的 UDP
包,其 TTL
为 \(3\),router1
在收到这个 UDP
包以后将 TTL
减一并转发给了 router2
,router2
在收到这个 UDP
包以后将 TTL
减一并直接交付给了 host2
。host2
发现这个 UDP
包无法接收,因此以 host1
的 IP 为目的发送了 ICMP 端口不可达给 router2
,router2
将这个包转发给了 router1
,router1
将这个包直接交付给 host1
,这时候 host1
就知道自己发送的 UDP 数据包已经到达了 host2
,从而知道路径上一共有两个路由器。这个过程也会重复三次。
按道理来说,这个时候 traceroute
就会停止发送 UDP 数据包,但是我们通过 Wireshark 观察到,host1
仍然在继续发送,一共发送了 \(3\) 个 TTL
为 \(4\) 个包,\(3\) 个 TTL
为 \(5\) 的包和 \(1\) 个 TTL
为 \(6\) 的包,甚至对于最后的 \(3\) 个 TTL
为 \(5\) 的包和 \(1\) 个 TTL
为 \(6\) 的包,host2
收到了 UDP 包却没有发送 ICMP 端口不可达的回应。
我们猜测这可能是因为 traceroute
有一个最少发送的 UDP 包数量的限制,在这个限制达到之前,无论有没有收到 ICMP 端口不可达的回应,都要继续发送 UDP 报文。
断开router1和router2之间的链路后,再使⽤ping命令测host1到host2连通性,追踪并分析⽹络中各节点相关协议数据包的流向和变化过程。 请在实验报告中还原并分析此时ping相关数据包的传输过程。
断开 router1
和 router2
之间的链路后,可以发现 host1
发送的 ICMP 报文没有被成功送达 hsot2
。
在第一个 host1
发送的报文到达 router1
后,router1
发现路由表中没有目标网段,因此发送回了一个 ICMP Net Unreachable 报文给 host1
。
因为设置的 ping
次数是 \(3\),因此这个过程会重复两次。
补充内容 1 追踪并分析在ping和traceroute命令执⾏过程中,⽹络中各节点ARP协议数据包的流向和变化过程,对⽐ARP缓存为空和不为空时,数据包流向的区别。
ARP 缓存为空的时候,ping
命令的 ARP 协议数据包流向:
从上图可见,一共有 \(3\) 对 ARP 分组:
host1
广播了一个 ARP 询问分组,询问router1(100.0.0.1)
的 MAC 地址,router1
收到了这个 ARP 询问分组将自己的 MAC 地址发送给host1
,同时将host1(100.0.0.250)
的 MAC 地址也记录在自己的 ARP 缓存中。router1
广播了一个 ARP 询问分组,询问router2(10.100.0.2)
的 MAC 地址,router2
收到了这个 ARP 询问分组将自己的 MAC 地址发送给router1
,同时将router1(10.100.0.1)
的 MAC 地址也记录在自己的 ARP 缓存中。router2
广播了一个 ARP 询问分组,询问host2(192.0.1.251)
的 MAC 地址,host2
收到了这个 ARP 询问分组将自己的 MAC 地址发送给router2
,同时将router2(192.0.1.1)
的 MAC 地址也记录在自己的 ARP 缓存中。
而当 ARP 缓存为空时,ping
命令的 ARP 协议数据包流向:
可以发现,当 ARP 缓存不为空,不会出现任何的 ARP 数据包,因为这个时候已经不需要通过广播 ARP 分组来获得目标 IP 地址对应的 MAC 地址了。
ARP 缓存为空的时候,traceroute
命令的 ARP 协议数据包流向:
可以发现,基本上和 ping
命令产生的 ARP 分组完全相同,因此这里不做分析。
当 ARP 缓存不为空,同 ping
命令一样,不会出现任何的 ARP 数据包,因为这个时候已经不需要通过广播 ARP 分组来获得目标 IP 地址对应的 MAC 地址了。
补充内容 2 追踪并分析在ping和traceroute命令执⾏过程中,⽹络中各节点ICMP协议数据包的流向和变化过程,对⽐终点可达和不可达时,数据包流向的区别。
终点可达时的 ping
命令产生的 ICMP 数据包:
在本任务的第一个子任务中,我已经分析过 ping
命令产生的 ICMP 数据包的流向和转发过程,这里不再重复。
由 traceroute
命令产生的 ICMP 数据包的流向:
在本任务的第二个子任务中,我已经分析过 traceroute
命令产生的 ICMP 数据包的流向和转发过程,这里不再重复。
下图是在终点不可达时,ping
命令产生的 ICMP 协议数据包流向。
在本任务的子任务三中,我已经分析过这个数据包的流向和变化过程。
下图是当终点不可达时,traceroute
命令发出的 ICMP 数据包的流向和变化过程。
因为我们只关注了 ICMP 数据包,因此这里忽略了几个 UDP 分组。可以猜测到的是,一开始 host1
发送了一个无法交付的 UDP 报文给 host2
的 IP 192.0.1.251
,但是当数据包到达 router1
时,router1
无法在自己的路由表中找到匹配这个 IP 的条目,因此发送了一个 Network Unreachable
的 ICMP 差错报文给 host1
。
在 host1
连续发送两次 UDP 分组后都只收到了 router1
的 ICMP 差错报文,traceroute
就知道无法到达 host2
了,因此不再发送。
补充内容 3 分析并列出ARP与ICMP协议相关的以太⽹帧,在⽹络中经过各节点时的MAC地址变化。
对于所有的 ARP 报文,其只在局域网内部传送,不会经由路由器转发,因此不涉及以太网帧的重新组装,每一对 ARP 报文基本上都可以用一个请求分组和一个 ARP 回应分组来代表。下面以 host1
发送 ARP 分组询问 router1
的 MAC 地址为例,研究 MAC 地址的变化。
可以发现,对于 host1
发送的 ARP 询问分组,因为不知道 router1
的 MAC 地址,因此只能把这个 ARP 询问在局域网内广播,故而在这个分组的 MAC 帧首部中,源地址是自己的 MAC 地址(8e:0f:a3:4a:f6:e5
),而目的地址是 ff:ff:ff:ff:ff:ff
,代表这个分组应该被广播。
而对于 router1
发送的 ARP 回应分组,因为 router1
这个时候通过询问分组获得了 host1
的 MAC 地址,因此这个分组不必广播,而是可以标明 host1
是接受方,因此在 ARP 回应分组中,源地址是 router1
自己的 MAC 地址(c6:dc:64:56:a9:a5
),而目的地址是 host1
的 MAC 地址(8e:0f:a3:4a:f6:e5
)。
下图是 host1 ping host2
产生的第一个 ICMP 数据包的传送过程,我将以这个分组的传送过程为例研究 ICMP 数据包经过网络各个节点时的以太网帧的变化。
在这个分组的传播过程中,一共需要经过三条链路:<host1, router1>,<router1, router2>,<router2, host2>
。因此,以太网帧被重新组装了三次,也就有三个不同的以太网帧。
在第一条链路中,也就是图中左上和左下的两个截图中,以太网帧的目的地址是 router1
的 eth1
的 MAC 地址(c6:dc:64:56:a9:a5
),源地址是 host1
的 MAC 地址(8e:0f:a3:4a:f6:e5
),代表这个分组是 host1
交由局域网内的路由器 router1
间接交付的。
在第二条链路中,也就是图中中下和右下的两个截图中,以太网帧的目的地址是 router2
的 eth2
的 MAC 地址(7e:f8:e6:a7:b8:e4
),源地址是 router1
的 eth2
的 MAC 地址(aa:c7:bb:9b:c7:85
),代表这个分组是路由器 router1
交由路由器 router2
间接交付的。
第三条链路中,也就是图中中下和右下的两个截图中,以太网帧的目的地址是 host2
的 MAC 地址(02:84:eb:2f:80:3c
),源地址是 router2
的 eth1
的 MAC 地址(ce:dc:a7:21:46:1b
),代表这个分组是路由器 router2
直接交付给 host2
的。
任务二 静态路由
在该任务中,你将实现一个具有静态路由功能的路由器。该路由器将会接收以太网帧,并像真 实的路由器一样对IPv4分组进行收发和处理,然后将它们转发到正确的端口。本任务已预先创 建好了一个网络拓扑,并提供了具体的代码实现框架,保证路由器可正确地接收到以太网帧, 进而使得你的主要精力可放在静态路由实现上。为了降低任务的复杂程度,绝大部分静态路由代码已给出,且代码中包含了详细的注释。
任务要求:
请基于给定的拓扑及代码框架
- 将静态路由代码补充完整,正确实现路由器的静态转发功能。
- 阅读代码,在实验报告中画出路由器的代码流程图。
./sr
运行演示
测试结果
代码流程图
任务三
在本任务中,你将在任务二静态路由的基础上,为路由器添加动态路由功能。同任务二一样,任务三的网络拓扑与代码框架均已给出。
任务要求:
请基于给定的拓扑及代码框架
- 将动态路由代码补充完整,实现RIP路由协议。
- 阅读代码,画出动态路由的代码流程图。
测试结果
代码流程图
四、实验小结与感想
在这次实验中,我深入探索了计算机网络领域,通过对 Wireshark 的使用,我更深刻地理解了网络通信的细节。Wireshark 为我提供了一个窗口,让我观察和分析 ARP 与 ICMP 协议在 IPv4 分组收发处理过程中的作用。这种实际操作让我对网络通信的细节有了更清晰的认识,不再只是停留在理论层面。
在第一个实验任务中,我使用 Wireshark 观察并分析 ARP 和 ICMP 协议的过程。通过追踪 ping
和 traceroute
命令的执行,我还进一步了解了网络中各节点相关协议数据包的流向和变化过程。这种实际操作让我更好地理解了计算机网络中的协议工作原理,加深了我对网络通信的认识。
静态路由的实现使我深入了解了路由器的基本原理,通过阅读和补充代码,我学到了如何实现路由器的静态转发功能。这为我提供了一个更加全面的视角,让我理解了网络中路由器的工作机制。这种深入的学习体验,让我更自信地处理网络相关的问题。
在动态路由的实现中,我进一步扩展了对路由器的理解,通过实现 RIP 路由协议,我学到了路由器之间如何动态地交换路由信息。这种实际的编码实践让我感受到了网络协议的灵活性和实用性,也让我更加熟练地运用所学的知识。
通过这次实验,我不仅学到了计算机网络的相关知识,还提升了我的网络调试和分析能力。在不断迭代和调试的过程中,我积累了解决网络问题的经验,增强了我的问题解决能力。这次实验是一次很有收获的实践,为我未来深入网络领域的学习和工作奠定了坚实的基础。
标签:ARP,ICMP,router2,router1,计算机网络,host1,XMU,实验报告,数据包 From: https://www.cnblogs.com/hankeke303/p/18162947/XMU-Network-Lab4