\documentclass[../public/实验报告模板]{subfiles} \renewcommand{\mydate}{2023年12月8日} \renewcommand{\mylabname}{Internet控制报文协议(ICMP)} \renewcommand{\mychapternum}{4} \begin{document} \mytitle \begin{enumerate} \myitem{实验目的}{ \item 掌握ICMP协议的报文格式 \item 理解不同类型ICMP报文的具体意义 \item 了解常见的网络故障 } \myitem{实验设备或环境}{ \item 采用网络拓扑结构二 } \myitem{实验原理}{ \item ICMP简介 \item ICMP报文格式 \item ICMP封装 \item ICMP报文类型 \item ICMP查询报文 \item ICMP差错报文 \item ICMP校验和 } \myitemx[label=练习\arabic*\ ]{实验步骤}{ \item 运行Ping命令 \item ICMP查询报文 \item ICMP差错报文 } \myitemx[label=练习\arabic*\ , itemsep=1em]{实验结果总结}{ \item 运行Ping命令 捕获的报文对应的“类型”字段是0(ICMP回显应答),“代码”字段是0。 报文中的类型、标识号、序列号字段保证了回显请求报文和回显应答报文的一一对应。 \item ICMP查询报文 \begin{figure}[H] \includegraphics[width=1\linewidth]{imgs/2024-01-01-20-27-37.png} \caption{时间戳请求} \end{figure} \begin{figure}[H] \includegraphics[width=1\linewidth]{imgs/2024-01-01-20-27-06.png} \caption{时间戳应答} \end{figure} \begin{table}[H] \centering \caption{实验结果} \begin{tabular}{cc|cc} \toprule \multicolumn{2}{c}{时间戳请求报文}\vline& \multicolumn{2}{c}{时间戳应答报文}\\ ICMP字段名 & 字段值 & ICMP字段名 & 字段值 \\ \midrule 类型 & 13 & 类型 & 14 \\ 标识号 & 0 & 标识号 & 0 \\ 序列号 & 0 & 序列号 & 0 \\ 发起时间戳 & 0 & 发起时间戳 & 0 \\ 接收时间戳 & 0 & 接收时间戳 & 1347310080 \\ 传送时间戳 & 0 & 传送时间戳 & 1347310080 \\ \bottomrule \end{tabular} \end{table} \thinkingquestion{ \item 能否根据时间戳计算出当前的时间? 能。 \item 使用时间戳得到的时间比从系统得到的时间有什么好处? 使用时间戳请求得到的时间是和目标主机一致的,当系统的时间出错时可以据此校准。 } \item ICMP差错报文 捕获到的是主机不可达报文。 \thinkingquestion{ \item 为什么要设置TTL字段? 防止一个报文在网络中无限制地转发下去。 \item 为什么要限制由由失效的 ICMP 差错报文再产生一个 ICMP 报文? 防止ICMP报文不断在网络中发送,占用资源。 \item 什么样的 ICMP 报文是由路由器发送出的?什么样的 ICMP 报文是由目的主机发送出的? 当主机向外部发送报文但出现差错时,路由器会向主机发出ICMP差错报文;当主机向目的主机发送ICMP回显请求时,目的主机会发送出回显应答报文。 \item 主机 A 向主机 B 发送数据报,主机 B 从未收到该数据报,而主机 A 也从未收到出问题的通知,试给出可能发生情况的 2 种不同解释。 可能是主机A向主机B发出的数据包发到错误的链路上丢失了;或者在链路中的某个地方出现差错,返回ICMP差错报文,但ICMP差错报文丢失或被丢弃了。 } } \end{enumerate} \end{document}