【发布时间】:2020-12-24 01:09:15
【问题描述】:
我正在编写一个 C++ 程序,允许我在发送 UDP 数据包之前使用原始套接字(MacOS 不支持设置此设置)设置 DF 标志(不分段位)。
我对网络编程比较陌生,我正在寻找可以做到这一点的资源/代码示例。
我在 SO 上进行了搜索,但所有答案大多使用 setsockopt(),在我的情况下我无法真正使用。他们中的大多数都指向使用原始套接字,但没有关于如何使用原始套接字来实现这一点的详细答案。
我对原始套接字有基本的了解。我正在寻找一个我找不到的实现。有人可以指导我查看代码示例/sn-p 或简要解释如何使用原始套接字来实现吗?
【问题讨论】:
-
你告诉它你想要它发送的数据包,它就会发送它。您必须了解 IP 和 UDP 的工作原理才能了解如何完成第一部分。
-
任何指向代码示例的链接都有助于理解@user253751
-
如果数据包不被分片,那怎么办?如果它对于 MTU 来说太大,就放弃它?
-
@user4581301 大概 - 并发送回 ICMP“需要分段”消息。这就是路径 MTU 发现的工作原理。
-
您需要什么样的“详细信息”? IP 标头中有一个
flags字段。第 1 位是“不要分段”。所以就做iphdr.flags |= 0x2;