目錄
Socket相關的內容
什麼是Socket
在計算機通信領域,Socket被翻譯爲“套接字”,它是計算機之間進行通信的一種約定或一種方式。通過Socket這種約定,一臺計算機可以接收到其他計算機的數據,也可以向其他計算機發送數據。
Socket的本質
Socket的本質是編程接口(API),對TCP/IP的封裝,TCP/IP也要提供可供程序員做網絡開發所用的接口,這個就是Scoket編程接口
Socket的作用
Socket的英文原意是“插座”,的意思,通常在計算機編程中稱作套接字,可以用來實現不同虛擬機或不同計算機之間的通信
Socket的典型應用
-
Socket的應用之一就是Web服務器和瀏覽器:瀏覽器獲取用戶輸入的URL地址,向服務器發起請求,服務器分析接收到的URL請求,將對應的網頁內容返回給瀏覽器,瀏覽器再經過解析和渲染,將文字、圖片、視頻等元素呈現給用戶
-
QQ或者微信或者默默等聊天社交工具等:本地的QQ或微信程序就是客戶端,登錄過程就是連接服務器的過程,聊天過程就是Socket的發送和接受信息過程
Socket介紹
把Socket比作門,門外是郵局,你送信就需要通過門,把信從門送出去到郵局,然後由郵局幫你送達目標的門,目的地主人再打開門,從門取出郵局送過來的信。
分析一下通信過程(打電話):
兩人之間打電話:
-
需要做好的保障:兩人都要有電話,可正常通話的電話就是Socket
可正常通話的電話:電話能用,電話要插有電話線(信號器),電話要有卡
-
發送消息者通過一端的電話撥號等待
-
接收消息者通過另一端的電話接聽
-
發送消息者和接受消息者之間可以進行通過
-
消息溝通完畢之後由任意一端先Say Go Bey!掛斷電話斷開
-
剩餘的一端被迫斷開連接,至此通信結束
網絡傳輸
OSI七層網絡模型
在網絡歷史的早期,國際標準化組織(ISO)和國際電報電話諮詢委員會(CCITT)共同出版了開放系統互聯的七層參考模型。一臺計算機操作系統中的網絡過程包括從應用請求(在協議棧的頂部)到網絡介質(底部) ,OSI參考模型把功能分成七個分立的層次。
特點:
-
人們可以很容易的討論和學習協議的規範細節。
-
層間的標準接口方便了工程模塊化。
-
創建了一個更好的互連環境。
-
降低了複雜度,使程序更容易修改,產品開發的速度更快。
-
每層利用緊鄰的下層服務,更容易記住個層的功能。
網絡模型
網絡編程的本質是兩個設備之間的數據交換,當然,在計算機網絡中,設備主要指計算機。數據傳遞本身沒有多大的難度,不就是把一個設備中的數據發送給另外一個設備,然後接受另外一個設備反饋的數據。
現在的網絡編程基本上都是基於請求/響應方式的,也就是一個設備發送請求數據給另外一個,然後接收另一個設備的反饋。
在網絡編程中,發起連接程序,也就是發送第一次請求的程序,被稱作客戶端(Client),等待其他程序連接的程序被稱作服務器(Server)。客戶端程序可以在需要的時候啓動,而服務器爲了能夠時刻相應連接,則需要一直啓動。例如以打電話爲例,首先撥號的人類似於客戶端,接聽電話的人必須保持電話暢通類似於服務器。
連接一旦建立以後,客戶端和服務器端就可以進行數據傳遞了,而且兩者的身份是等價的。
在一些程序中,程序既有客戶端功能也有服務器端功能,最常見的軟件就是BT、emule這類軟件了。
IP地址與域名
在現實生活中,如果要打電話則需要知道對應人的電話號碼,如果要寄信則需要知道收信人的地址。在網絡中也是這樣,需要知道一個設備的位置,則需要使用該設備的IP地址,具體的連接過程由硬件實現,程序員不需要過多的關心。
IP地址是一個規定,現在使用的是IPv4,既由4個0-255之間的數字組成,在計算機內部存儲時只需要4個字節即可。在計算機中,IP地址是分配給網卡的,每個網卡有一個唯一的IP地址,如果一個計算機有多個網卡,則該臺計算機則擁有多個不同的IP地址,在同一個網絡內部,IP地址不能相同。IP地址的概念類似於電話號碼、身份證這樣的概念。
由於IP地址不方便記憶,所以有專門創造了域名(Domain Name)的概念,其實就是給IP取一個字符的名字,例如163.com、sina.com等。IP和域名之間存在一定的對應關係。如果把IP地址類比成身份證號的話,那麼域名就是你的姓名。
其實在網絡中只能使用IP地址進行數據傳輸,所以在傳輸以前,需要把域名轉換爲IP,這個由稱作DNS的服務器專門來完成。
所以在網絡編程中,可以使用IP或域名來標識網絡上的一臺設備。
端口的概念
爲了在一臺設備上可以運行多個程序,人爲的設計了端口(Port)的概念,類似的例子是公司內部的分機號碼。
規定一個設備有216個,也就是65536個端口,每個端口對應一個唯一的程序。每個網絡程序,無論是客戶端還是服務器端,都對應一個或多個特定的端口號。由於0-1024之間多被操作系統佔用,所以實際編程時一般採用1024以後的端口號。
使用端口號,可以找到一臺設備上唯一的一個程序。所以如果需要和某臺計算機建立連接的話,只需要知道IP地址或域名即可,但是如果想和該臺計算機上的某個程序交換數據的話,還必須知道該程序使用的端口號。
Socket/TCP五層網絡模型圖
TCP和UDP區別
UDP:
-
面向無連接,將數據及源封裝在數據包中,不需要建立連接
-
每個數據報的大小限制在64K內
-
因無連接,是不可靠協議
-
不需要連接連接,速度快
TCP:
-
建立連接,形成傳輸數據的通道
-
在連接中進行大數據量傳輸,以字節流的形式
-
通過三次握手(四次揮手)完成連接,是可靠協議
-
必須建立連接,效率會稍低
TCP和UDP協議不互通喲!!!!!