\documentclass[../public/实验报告模板]{subfiles} \renewcommand{\mydate}{2023年12月15日} \renewcommand{\mylabname}{用户数据报协议(UDP)} \renewcommand{\mychapternum}{5} \begin{document} \mytitle \begin{enumerate} \myitem{实验目的}{ \item 掌握 UDP 协议的报文格式 \item 掌握 UDP 协议校验和的计算方法 \item 理解 UDP 协议的优缺点 \item 理解协议栈对 UDP 协议的处理方法 \item 理解 UDP 上层接口应满足的条件 } \myitem{实验设备或环境}{ \item 采用网络拓扑结构一 } \myitem{实验原理}{ \item 进程到进程的通信 \item 面向连接的服务与面向无连接的服务 \item UDP协议简介 \item UDP报文格式 \item UDP封装 \item UDP校验和 \item UDP应用 \item 协议栈实现代码解析 \item 各模块推荐流程 } \myitemx[label=练习\arabic*\ ]{实验步骤}{ \item 编辑并发送 UDP 数据报 \item UDP 单播通信 \item UDP 广播通信 \item UDP 数据报发送与接收 \item UDP 报文的上层投递的设计与实现 } \myitemx[label=练习\arabic*\ , itemsep=1em]{实验结果总结}{ \item 编辑并发送 UDP 数据报 UDP在计算校验和时包括伪首部、UDP首部以及从应用层来的数据。 \thinkingquestion{ \item 为什么UDP协议的“校验和”要包含伪首部? 确保此数据包确实是发送给自己的,并且确保这个数据包是属于UDP。 \item 比较UDP和IP的不可靠程度? UDP和IP都是不可靠的协议,IP只验证首部,因此数据字段出现问题了也无法知道;而UDP会验证数据字段,因此IP比UDP更不可靠。 } \item UDP单播通信 主机C上的“UDP工具”能够接收到主机A发送的UDP报文。 \begin{figure}[H] \includegraphics[width=1\linewidth]{imgs/2024-01-02-19-04-14.png} \caption{主机C接收到主机A的UDP报文} \end{figure} UDP不是基于连接的协议,此特性的优点是能更快发送数据,缺点是可能不够安全。 UDP报文交互中没有确认报文,此特性的优点是占用资源更少,信道利用率更高,缺点是发送包可能不知道有数据包出错了。 主机E上的UDP通信程序接收到此数据包,UDP可以使用0作为校验和,即代表不校验。 \item UDP广播通信 主机B、C、D、E、F都能接收到主机A发送的UDP报文。 \begin{figure}[H] \includegraphics[width=1\linewidth]{imgs/2024-01-02-19-08-50.png} \caption{接收到的报文} \end{figure} 主机A发送的报文的目的MAC地址和目的IP地址都表示广播。 \thinkingquestion{ \item 如果将目的 MAC 地址从广播地址换成某一个主机的 MAC 地址,是 否所有的主机还会受到这种报文? 否。 \item 如果将目的 MAC 地址设置成广播地址,目的 IP 设置成某一主机的 IP 地址,结果怎样? 同一网段内的主机都能收到报文,但IP地址不是目的IP的主机解封装到IP层的时候会发现目的IP与自己的IP不一样从而丢弃报文。 \item 在可靠性不是最重要的情况下,UDP 可能是一个好的传输协议,试给 出这种特定情况的一些示例。 例如流媒体传输,或DNS、SNMP等应用层协议。 } } \end{enumerate} \end{document}