2012-11-06 75 views
2

如果我理解正確,我們使用java.io/java.nio.*來實現一個應用程序,該應用程序應該是ISO 5層模型(可能不準確)的應用程序層實現。我認爲JDK應該實現下層(傳輸層,網絡層甚至L2,L1),如果是這樣,哪些協議是基於的。如果不是,請介紹一下?哪些協議是通過jdk套接字實現的

回答

1

也許你對它有非常基本的理解,所以很多事情都會讓人困惑。當提供應用層(OSI第7層)或套接字(套接字比應用層低一點,因爲你可以在其上創建http,ftp等)時,它們確實擁有所有較低層的java.nio等也實施。如果沒有較低層,您實際上無法發送單個數據包,因此無法進行通信。

程序員是否有權訪問這些圖層以及您可以自定義的級別是另一回事。

通常的標準是socket API,它提供了很多選項來指定較低層(tcp,udp或raw)。

另外,大多數高級語言提供應用層實現如HTTP,SMTP等

+0

如果我理解你的意見,插座是一個抽象的高層次的溝通實現,這是具有與每個協議和每一層並不確切關係,我們可以使用套接字API/*也許有一個API xxx.sendUdpDatagram():-)。但實際上我從來沒有在JDK中看到過這樣的一個:-(。* /)來指定我們想要使用的協議(主要是我們選擇的傳輸層協議,例如UDP,TCP等)。因此,我們可以隨時對於我們的應用程序而言,不同的語言提供了不同的套接字API,並且每個套接字API最相似。 –

+1

您在創建套接字時通常選擇tcp或udp,或者通常您有不同的api來創建tcp vs udp http:/ /docs.oracle.com/javase/1.4.2/docs/api/java/net/Socket.html,然後使用緩衝輸入流讀取器或寫入器讀取或寫入套接字。當我們說api時,重點是該函數處理所有低層工作,你不必擔心添加tcp頭,計算其校驗和,排序(你只需指定tcp),也不必擔心添加ip或以太網頭。這是自動管理由插座api – fayyazkl

+0

查看Richard Stevens TCP/IP Ill ustrated vol。僅僅第一章就會改善你的許多觀念。 – fayyazkl