2011-01-24 97 views
15

我一直在閱讀基本的網絡編程知識,但是我很難找到關於什麼是套接字以及它如何與OSI或TCP/IP協議棧相關的直接解釋。瞭解套接字基礎知識

  1. 有人可以向我解釋什麼是套接字嗎?它是程序員或API定義的數據結構,還是網卡上的硬件設備?

  2. 上述網絡模型的哪些層處理「原始」套接字?傳輸層?網絡層?

  3. 就它們在它們之間傳遞的數據而言,是基於套接字文本還是二進制文件?

  4. 是否有替代以套接字爲基礎的網絡編程?或者,所有聯網的應用程序使用某種形式的套接字?

如果我能得到這麼多,我應該有一個非常清楚的理解我正在閱讀的一切。謝謝你的幫助!

回答

7

簡短回答:

  1. 插座是IP連接端點的抽象 - 所以,如果你認爲它是一個API結構,你是不是很離譜。請仔細閱讀http://en.wikipedia.org/wiki/Internet_socket
  2. Internet layer即IP協議。在實踐中,您通常使用明確的套接字來綁定到某個傳輸層參數(數據報/ UDP或流/ TCP)。套接字以網絡字節順序發送數據 - 無論是文本還是二進制數據,都取決於上層協議。
  3. 從理論上說,可能是肯定的 - 但在實踐中所有的IP通信用「插座」
+0

感謝Kimvais!那麼,可以肯定地說一個實現套接字結構的人必須允許它符合IP協議嗎? – Eugie 2011-01-24 13:19:49

4

套接字是由操作系統提供的軟件機制。就像其名稱所暗示的那樣,即使套接字不是物理設備,也可以將其視爲「電源插座」或某種電氣連接器,而不是軟件機制。在現實世界中,當您有兩個電氣連接器時,可以用電線連接它們。以同樣的方式在網絡編程中,您可以在一臺電腦上創建一個套接字,在另一臺電腦上創建另一個套接字,然後連接這些套接字。當你向其中一個人寫數據時,你會從另一個人那裏收到。還有幾種不同類型的插座。例如,如果您正在編寫服務器軟件,則您希望擁有一個偵聽套接字,該套接字永遠不會發送或接收實際數據,只會偵聽並接受傳入連接,併爲每個新連接創建一個新套接字。

+0

誰負責將數據從一端發送到另一端? – 2013-02-08 01:00:28

3

套接字進行,在C的說法,是在內核空間的數據結構,對應於一個UDP的一個終點或TCP會話(我在談論UDP時使用會話非常簡單)。它通常與本地端的單個端口號相關聯,並且在會話的任何一側很少有一個「衆所周知」的號碼。

「原始插座」是或多或少物理運輸的終點。它們很少用於應用程序編程,但有時用於各種診斷事件(traceroute,ping,可能還有其他),並且可能需要提升特權才能打開。

套接字本質上是一個二進制八位字節傳輸。將套接字(至少是TCP套接字)視爲基於文本的流並不罕見。

我還沒有看到一個編程模型不涉及套接字之類的東西,如果你深入挖掘,但肯定有其他模型做網絡。在「/ net /」僞文件系統中,打開「/net/127.0.0.0.1/tcp/80」(或「tcp/www」)會給你一個文件句柄,其中寫入最終在本地主機上的web服務器上不過是一個。