如何构建自己的传输级协议?

use*_*616 3 c c++ java udp tcp

我一直在谷歌搜索如何建立自己的传输级协议(第三级TCP/IP),如TCP和UDP.我只发现了如何为应用程序层构建协议 - 在udp或tcp之上,但它不是我想要的.

我想构建一个像udp和tcp这样的协议,而不是在它们之上.有什么办法吗?我已经知道数据包的结构应该是什么样子以及如何在tcp和udp之上编写协议.

用什么语言?我真的不在乎,它可以是C/C++,JAVA,C#,甚至是ASM,如果它必须等等......

ric*_*ici 5

如果您正在使用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 rawman 7 capabilities.

在用户空间中实现传输协议具有一些优点,特别是在开发期间,但是可能难以可靠地实现一些与时序相关的特征.当然,内核模块非常不便携; 使用原始IP套接字的IP协议的用户空间实现只是在某种程度上是不可移植的.

有一些协议用户空间协议实现的例子; 我不知道一个教程(但这并不意味着一个教程不存在),但谷歌确实找到了这篇关于SCTP用户空间实现的有趣论文,你也可以通过维基百科的原始文章来处理套接字及其引用.