在計算機通訊領域,socket 被翻譯爲「套接字」,它是計算機之間進行通訊的一種約定或一種方式。經過 socket 這種約定,一臺計算機能夠接收其餘計算機的數據,也能夠向其餘計算機發 送數據。html
在 UNIX/Linux 系統中,爲了統一對各類硬件的操做,簡化接口,不一樣的硬件設備也都被當作一個文件。對這些文件的操做,等同於對磁盤上普通文件的操做。
UNIX/Linux 中的一切都是文件!
爲了表示和區分已經打開的文件,UNIX/Linux 會給每一個文件分配一個 ID,這個 ID 就是一個整數,被稱爲文件描述符(File Descriptor)。例如:linux
UNIX/Linux 程序在執行任何形式的 I/O 操做時,都是在讀取或者寫入一個文件描述符。一個文件描述符只是一個和打開的文件相關聯的整數,它的背後多是一個硬盤上的普通文件、FIFO、管道、終端、鍵盤、顯示器,甚至是一個網絡鏈接。
請注意,網絡鏈接也是一個文件,它也有文件描述符!你必須理解這句話。
咱們能夠經過 socket() 函數來建立一個網絡鏈接,或者說打開一個網絡文件,socket() 的返回值就是文件描述符。有了文件描述符,咱們就能夠使用普通的文件操做函數來傳輸數據了,例如:編程
你看,只要用 socket() 建立了鏈接,剩下的就是文件操做了,網絡編程原來就是如此簡單!緩存
<1>流格式套接字(基於TCP)網絡
SOCK_STREAM 是一種面向鏈接的、可靠的、雙向的通訊數據流,數據能夠準確無誤地到達另外一臺計算機,若是損壞或丟失,能夠從新發送。socket
SOCK_STREAM 有如下幾個特徵:函數
<2>數據報格式套接字(基於UDP)spa
SOCK_DGRAM 是無鏈接的不可靠的,不會進行數據的檢查 .net
它有如下特徵:翻譯
《1》無鏈接的套接字
《2》面向鏈接的套接字
應用層 | 應用層 |
表示層 | |
會話層 | |
傳輸層 | 傳輸層 |
網絡層 | 網絡層 |
數據鏈路層 | 網絡接口 |
物理層 |
兩臺計算機進行通訊時,必須遵照如下原則:
咱們所說的 socket 編程,是站在傳輸層的基礎上,因此能夠使用 TCP/UDP 協議,可是不能幹「訪問網頁」這樣的事情,由於訪問網頁所須要的 http 協議位於應用層。
6.TCP/IP 協議簇
TCP/IP 模型包含了 TCP、IP、UDP、Telnet、FTP、SMTP 等上百個互爲關聯的協議,其中 TCP 和 IP 是最經常使用的兩種底層協議,因此把它們統稱爲「TCP/IP 協議族」。
也就是說,「TCP/IP模型」中所涉及到的協議稱爲「TCP/IP協議族」,你能夠區分這兩個概念,也能夠認爲它們是等價的
socket 編程是基於 TCP 和 UDP 協議的,它們的層級關係以下圖所示:
<1>IP地址:通常一個局域網用一個IP地址(公網地址:買的),由於IPV4地址若是一臺計算機一個確定不夠用
<2>MAC地址:固定的寫在網卡上
<3>端口號:應用層程序的接口
本文參考:C語言中文網 http://c.biancheng.net/view/2128.html