【发布时间】:2020-02-21 11:20:40
【问题描述】:
UDP 套接字 (SOCK_DGRAM) 是否可以从传入的 UDP 数据包访问校验和字段并检查错误?我知道我们可以使用原始套接字(SOCK_RAW)来做到这一点,但我想知道我们是否可以使用数据报套接字来做到这一点。如果是这样,我们如何在 C 中做到这一点?
【问题讨论】:
标签: sockets network-programming udp raw-sockets rudp
UDP 套接字 (SOCK_DGRAM) 是否可以从传入的 UDP 数据包访问校验和字段并检查错误?我知道我们可以使用原始套接字(SOCK_RAW)来做到这一点,但我想知道我们是否可以使用数据报套接字来做到这一点。如果是这样,我们如何在 C 中做到这一点?
【问题讨论】:
标签: sockets network-programming udp raw-sockets rudp
如果您创建一个普通的 UDP 套接字,您将无法访问 UDP 标头,因此也无法访问校验和。但是内核已经丢弃了校验和不正确的数据包,所以无论如何你都看不到这些数据包。
【讨论】:
您不能使用数据报套接字 (SOCK_DGRAM) 来执行此操作,因为 TCP/IP 堆栈会在将接收到的缓冲区中删除这些 UDP 标头字节,然后再将其传递给更高层的 API。您需要使用原始套接字 (SOCK_RAW) 以便保留这些字节。
【讨论】: