\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}