我想編寫一個程序並在兩臺機器上運行它,並在一個以太網幀中將一些數據從一臺機器發送到另一臺機器。我可以使用C++編寫基於以太網的網絡程序嗎?
通常,應用程序數據位於OSI模型的第7層,是否有任何內核限制或API限制,這會阻止我編寫一個程序,在該程序中可以指定目標MAC地址並將一些數據發送給該MAC作爲以太網有效載荷?然後編寫一個程序來偵聽傳入的幀並從指定的源MAC地址獲取幀,從幀中提取數據的有效載荷? (所以我不希望任何其他開銷像IP或TCP/UDP標頭,我不想比第2層更高)。
這可以用C++來完成,還是所有的通信都需要在IP層完成,而且可以在Ubuntu上完成?額外的愛指點或提供的例子! :D
我的問題顯然是我對C++網絡編程新手,據我所知,如果我想通過網絡進行通信,我必須使用呼叫或類似的socket()
,它在IP層工作,所以我可以編寫一個C++程序來在OSI第2層工作,有沒有API可以讓Linux內核甚至允許這麼做?
C++是一種編程語言,IP層是一個抽象的概念。在你的文本中替換另一個的方式是如何超越我的。 – littleadv 2012-04-12 20:52:54
@littleadv:爲什麼?他不知道要問什麼(「我如何在C++中使用原始套接字?」),但您可以完美地理解其含義。 – cha0site 2012-04-12 20:54:32
從理論上講,C++應該不會出現問題,但是OS支持可能會限制你。雖然UDP的開銷很小,但請使用它。 – 2012-04-12 20:55:13