如果您正在使用Unix/Linux,您可以(可能)使用socket(AF_INET, SOCK_RAW, protocol);where protocol为0或某个数字来构造IP套接字,该数字不与任何标准协议号冲突(请参阅协议号列表).SOCK_RAW是一个可选的POSIX功能,但它很常见; Linux和FreeBSD都支持它很长一段时间.
Althouch原始IP套接字旨在用于在用户空间中实现IP协议,通常要求进程具有特殊权限才能打开原始套接字.(否则,非特权进程将能够拦截特权TCP或UDP端口.)在Linux中,您需要CAP_NET_RAW; 看到man 7 raw和man 7 capabilities.
在用户空间中实现传输协议具有一些优点,特别是在开发期间,但是可能难以可靠地实现一些与时序相关的特征.当然,内核模块非常不便携; 使用原始IP套接字的IP协议的用户空间实现只是在某种程度上是不可移植的.
有一些协议用户空间协议实现的例子; 我不知道一个教程(但这并不意味着一个教程不存在),但谷歌确实找到了这篇关于SCTP用户空间实现的有趣论文,你也可以通过维基百科的原始文章来处理套接字及其引用.