0

我已經在這裏和維基百科進行搜索。我所見過的最多的是我應該看一下舊的SMTP規範,因爲該協議是最簡單的協議,可以被看作和理解(HTTP顯然非常複雜,我並不反對)。然而,對這些建議的評論認爲,查看SMTP是一種錯誤的方式,因爲它被寫入的方式已經過時並且效率低下。創建一個新的鏈接層協議

我也看到有人建議用C或Java的某些變體編寫自定義協議。

我想知道我可以去哪裏找一個爲現代寫的自定義/簡單協議的例子,以及什麼語言是編寫協議的理想之選。我認爲低級語言是最好的,這就是我對此類知識的理解。

+0

您是否知道鏈路層協議是在物理層(光纜中的電信號或光纜中的光子等)與網絡層(如IP)之間鏟取位的東西?反過來,SMTP和HTTP是在網絡層和/或傳輸層協議(例如TCP)之上工作的應用層協議的示例。所以我懷疑你在這裏有一個術語混淆。 – kostix

+0

如果你想實現一個鏈接層協議,與流行的當代操作系統,唯一明智的方法來實現一個是編寫一個驅動程序,在大多數情況下,意味着編寫C代碼大量使用操作系統內核特定蜜蜂。所以這種解決了適用編程語言的問題。 – kostix

+0

如果你想要一個應用層協議,那麼它應該解決什麼任務? 「只是建立一個新的協議」的想法沒有多大意義,因爲沒有可能討論實施一個可能的方法及其優點。 – kostix

回答

1

我意識到這是一個老問題,但我想我對此有所瞭解。我最近爲一個正在開發的項目開發了一些嵌入式原型,並且需要一種方式讓這些設備以高速與我的PC進行通信。 USB非常令人頭疼,坦率地說,編寫定製的tcpip堆棧也是如此,儘管我至少已經完成了這個任務。另外,嵌入式設備無法從用戶獲取IP地址,除了將其硬編碼到c /程序集中。所以我想如果我可以通過以太網連接,並避免所有的IP層廢話。我決定在板上添加磁性元件,並在通道中添加bitbang 10Mbps以太網/ MAC幀。在PC端,我用libPCap讀出原始以太網幀並在我的應用程序中處理它們。像創造我的嵌入式項目和我的電腦之間的高速連接的魅力一樣工作。除了有一個捕獲。它通過交叉電纜或通過虛擬交換機連接到我的電腦時起作用,但如果您嘗試通過傳統路由器將其連接到局域網的其餘部分,則路由器會丟棄該數據包。爲什麼?我從來沒有發現肯定的,但我最好的猜測是用於表示在上層使用的協議的EtherType字段與已知類型(即IP,ARP等)中的一個不匹配。

底線是雖然你可以製作一個自定義的鏈路層協議,並使用類似libPCap的庫來實現它的應用程序端,但它不能保證在所有路由器上工作,因爲如果一些路由器不識別你正在使用的協議。它絕對不會在因特網上工作,因爲IP層決定了在互聯網上的路由。

+0

哦,謝謝你分享你的經驗!看起來我的想法不會在我自己的網絡之外工作,但至少我對*爲什麼*有更好的理解。 –