【发布时间】:2015-01-22 13:20:49
【问题描述】:
我需要用 c 编写一个基本的网络堆栈,但对正确的做法有一些疑问。假设我只需要支持 L4 的 UDP 和 L3 的 IP。
当我想发送需要碎片化的大消息时。处理此问题的正确顺序是什么?
1) 初始化 udp 头并计算整个数据字段的校验和(加上 udp 和伪头)然后对数据字段进行分段,为每个分段构建 IP 头,然后发送分段。
2) 对数据字段进行分段,然后构建一个 udp 标头,并在每个分段的前面添加不同的校验和。然后为每个片段构建一个 IP 标头以附加该标头。然后发送我们的片段。
我的困惑源于 udp 校验和是否应该包含整个组装的数据报,还是只包含单个片段。非常感谢您提供的任何帮助。
【问题讨论】:
-
你有没有想过在你的c程序中使用netstat?您可以从中获取所有信息。
-
它没有改变。校验和是在整个数据报上计算的。碎片化发生在较低的级别。
标签: c sockets networking udp