2014-12-24 90 views
1

我一直在尋找谷歌如何建立自己的傳輸級別協議(TCP/IP的第三級),如TCP和UDP。我只發現如何構建應用程序層的協議 - 在udp或tcp之上,但這不是我正在尋找的。如何構建您自己的傳輸級別協議?

我想建立像udp和tcp協議,而不是在他們之上。 有什麼辦法可以做到嗎?我已經知道數據包的結構應該如何以及如何在tcp和udp之上編程協議。

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

+0

您的選擇是TCP,UDP和ICMP。 TCP/IP建立在與OSI模型類似的路線上(但它不相同)。 –

+1

你是題外話,你是要求教程和網址,但這個網站是編程幫助和編碼的幫助。 –

+0

你在寫什麼平臺? – Erbureth

回答

2

如果你正在使用Unix/Linux,你可以(可能)使用socket(AF_INET, SOCK_RAW, protocol);的IP套接字,其中爲0或某個與任何標準協議編號不衝突的編號(請參閱list of protocol numbers)。 SOCK_RAW是一個optional POSIX functionality,但它很常見; Linux和FreeBSD都支持它很長一段時間。

Althouch原始IP套接字旨在用於在用戶空間中實現IP協議,通常要求進程具有特殊權限才能打開原始套接字。 (否則,非特權進程將能夠攔截特權TCP或UDP端口。)在Linux中,您將需要CAP_NET_RAW;見man 7 rawman 7 capabilities

在用戶空間中實現傳輸協議具有一些優勢,特別是在開發過程中,但可能難以可靠地實現某些與時序相關的功能。當然,內核模塊是非常不便攜的;使用原始IP套接字的IP協議的用戶空間實現只會有些不可移植。

有一些協議用戶空間協議實現的例子;我不知道一個教程(但並不意味着它不存在),但Google在用戶空間實現SCTP時找到了我這個interesting paper,並且您還可以通過Wikipedia article on raw sockets及其引用。

相關問題