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

5
我一直在谷歌上搜索如何构建自己的传输层协议(TCP / IP的第三层),比如TCP和UDP。但是我只发现了如何为应用层构建协议 - 基于UDP或TCP,这不是我要找的。
我想构建类似于UDP和TCP的协议,而不是基于它们之上的协议。有办法吗?我已经知道数据包的结构应该是什么样子的,以及如何在TCP和UDP之上编程协议。
使用什么语言?我不太在乎,可以是C / C ++,JAVA,C#,甚至是ASM等等...

你的选择是TCP、UDP和ICMP。TCP/IP模型建立在类似于OSI模型的基础上(但并不完全相同)。 - Elliott Frisch
1
你的话题不符合要求,你正在寻求教程和网址,但这个网站是为了提供编程帮助和编码帮助。 - Irrational Person
你是为哪个平台编写代码的? - Erbureth
如果你“想要构建像UDP和TCP一样的协议”,那么要么你已经非常了解它们并且认为你可以改进它们,要么你想要重新发明轮子。 - Weather Vane
我正在使用Linux。这是一个编程问题(我正在寻求编程教程...)我只是好奇如何构建自己的协议,作为一个实际项目。 - LessComplexity
1个回答

6
如果你正在使用Unix/Linux,那么你可以(可能)使用socket(AF_INET, SOCK_RAW, protocol);构建IP套接字,其中protocol是0或某个不与任何标准协议号冲突的数字(请参见协议号列表)。SOCK_RAW是一个可选的POSIX功能,但它非常常见;Linux和FreeBSD都支持它很长时间了。
虽然原始IP套接字旨在用于在用户空间实现IP协议,但通常需要进程具有特殊权限才能打开原始套接字。(否则,非特权进程将能够拦截特权TCP或UDP端口。)在Linux中,您需要 CAP_NET_RAW;请参阅man 7 rawman 7 capabilities
在用户空间实现传输协议具有一些优点,特别是在开发期间,但可能难以可靠地实现一些与时间相关的功能。当然,内核模块极其不可移植;使用原始IP套接字的用户空间IP协议实现只会有些许不可移植。
有一些用户空间协议实现的示例;我不知道是否有教程(但这并不意味着没有),但Google给我找到了这篇有趣的论文,介绍了SCTP的用户空间实现,您还可以查看Wikipedia上的原始套接字文章及其引用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接