我一直在谷歌搜索如何构建自己的传输级协议(TCP / IP的第三级),如TCP和UDP。我只发现了如何为应用程序层构建协议 - 在udp或tcp之上,但它不是我想要的。
我想构建一个像udp和tcp这样的协议,而不是在它们之上。 有什么办法吗?我已经知道数据包的结构应该是什么样子以及如何在tcp和udp之上编写协议。
用什么语言?我真的不在乎,它可以是C / C ++,JAVA,C#,甚至是ASM,如果它必须等等......
答案 0 :(得分:5)
如果您正在使用Unix / Linux,您可以(可能)使用socket(AF_INET, SOCK_RAW, protocol);
构建IP套接字,其中protocol
为0或某个不与任何标准协议冲突的数字号码(见list of protocol numbers)。 SOCK_RAW
是optional POSIX functionality,但它很常见; Linux和FreeBSD都支持它很长一段时间。
Althouch原始IP套接字旨在用于在用户空间中实现IP协议,通常要求进程具有特殊权限才能打开原始套接字。 (否则,非特权进程将能够拦截特权TCP或UDP端口。)在Linux中,您需要CAP_NET_RAW
;请参阅man 7 raw
和man 7 capabilities
。
在用户空间中实现传输协议具有一些优点,特别是在开发期间,但是可能难以可靠地实现一些与时序相关的功能。当然,内核模块非常不便携;使用原始IP套接字的IP协议的用户空间实现只会有些不可移植。
有一些协议用户空间协议实现的例子;我不知道一个教程(但这并不意味着一个教程不存在),但Google确实在SCTP的用户空间实现上找到了这个interesting paper,而你也可以通过Wikipedia article on raw sockets及其参考资料。