P10345 [THUSC 2019] 常见网络校验和计算

题目背景

芃芃发现,华清大学的玉兰学生公寓的网络质量似乎不是很好。由于网络线材质量的原因,也可能是有同学在进行一些奇怪的尝试,他总是会收到一些不太正常的内容。好在,网络协议的设计者们都考虑到了这一点,在协议中添加了校验和来检查一些明显的问题。作为鲁棒的路由器软件,必须只接收校验和检查通过的流量,而丢弃那些坏的。听说你已经能读到流量的内容了,下一步就是揪出这些不正常的流量。

题目描述

你需要根据《学习手册》中的相关知识,对给定的流量片段进行校验。请注意,由于所有片段类型**都是以太网帧**,所以你总是需要计算 `CRC32`;而对于承载了 IP 分组的流量,你还需要对 IP 分组头的检验和进行检查。作为简化,我们不考虑除了以太网和 IP 以外的校验字段。只有当所有的校验都通过时,才认为该流量片段是正确的。

输入格式

输入保证格式合法,并且每个流量片段都是以太网帧。其中包含不超过 $n$ 个流量片段,总大小不超过 $m$ 字节。部分子任务的数据中保证 IP 分组头的校验是正确的,即只需要计算以太网帧的 `CRC32`。

输出格式

输出由 $n$ 行文本构成,依次对应每一个片段的校验结果。如果是正确的,输出 `Yes`,否则输出 `No`。

说明/提示

**【子任务】** | 测试点 | $n$ | $m$ | 仅需检查以太网帧 | | :--: | :--: | :--: | :--: | | 1 | $=10^2$ | $=5\times 10^4$ | 是 | | 2 | $=10^2$ | $=1.5\times 10^5$ | 否 | | 3 | $=10^3$ | $=1.5\times 10^6$ | 否 | | 4 | $=10^4$ | $=1.5\times 10^7$ | 否 | | 5 | $=10^5$ | $=1.5\times 10^8$ | 否 | **【样例 1】** 见题目附件 `1.in/ans`。 **【样例解释 1】** 和 `pcap` 题一样,你可以用你电脑上安装的 Wireshark 软件打开样例数据的输入和输出。 样例输入文件应该包含四个以太网帧,其中第一个以太网帧中 FCS 和 IP 的校验都是错误的,第二个以太网帧是 FCS 校验正确的 ARP 帧,第三个以太网帧仅 FCS 校验错误,第四个以太网帧仅 IP 校验错误。在页面中部点开当前帧的解析可以看到更多细节,包括是哪个校验错误和正确值等等,这可能对你有一定的帮助。 Wireshark 默认情况下可能不会检查 FCS 的正确性。对于这种情况,你可以在页面中部找到并右键点击 `Ethernet II` 所在的一行,在弹出的菜单中选择 `Protocol Preferences`,勾上选项中的 `Validate the Ethernet checksum if possible` 和 `Assume packets have FCS`,此时你应该可以在页面上部看到 FCS 错误的帧都被明显地标记出来。 需要注意的是,Wireshark 还会计算并显示 UDP 的 Checksum 正确与否。在本题中,我们不考虑 UDP 的 Checksum,因此你可以忽略这些错误。