什麼是Sockethtml
Socket:又稱做是套接字,網絡上的兩個程序經過一個雙向的通訊鏈接實現數據的交換,這個鏈接的一端稱爲Socket。web
Socket是對TCP/IP的協議的封裝,Socket自己並非協議,而是一個調用的接口,只有經過Socket咱們才能使用TCP/IP。數據庫
Socket是和網絡緊密相關的,網絡上的兩個程序通常就是指web服務器和咱們的客戶端,數據交換的過程就是咱們客戶端發一個請求到HTTP服務器、服務器返回數據,這個過程就是數據交換的過程。客戶端和服務器之間的數據交換是須要一個雙向的通訊鏈接,二者之間是須要一個通道去實現鏈接的。安全
通訊管道就是通訊鏈接,有了這個管道,咱們就能夠進行數據傳輸。客戶端到服務器端必需要有一個通道才能實現數據的交互。若是有座大山擋着了道路咱們就會在山中開闢一個隧道,這樣咱們才能走到山的另外一端。Socket就能夠理解爲這個隧道的兩個端口,一個入口一個出口。服務器
一個網絡請求並非咱們所認爲的請求-相應的過程,它的底層是開闢了一個通訊管道的。因此應用程序一般是經過Socket(套接字)向網絡發出請求或者應答網絡請求。網絡
流式Socket(SOCK_STREAM)和數據報式Socket(SOCK_DGRAM)。
流式是一種面向鏈接的Socket,針對於面向鏈接的TCP服務應用;
數據報式Socket是一種無鏈接的Socket,對應於無鏈接的UDP服務應用。socket
發一個HTTP請求到網絡上,咱們會有一個URL,URL會有一個TCP協議、IP地址和端口號HTTP默認的端口號是80,沒有IP地址咱們就沒辦法找到服務器,沒有端口號咱們就找不到應用程序。函數
網絡上的請求其實就是經過Socket創建一個通訊管道實現數據交互的。IP地址就是網絡上主機設備的惟一標識。 端口號就是進程的標識,一個應用程序就是一個進程。大數據
服務器其實也是一個電腦,那麼服務器上也會有不少應用程序。假如我要訪問百度的服務器,百度服務器上會有一個Web應用程序來供咱們訪問,例如服務器的數據庫應用程序(MySQL),服務器的數據庫存儲着大量的數據。客戶端訪問服務器,咱們能夠經過IP地址訪問,咱們要訪問其Web應用程序而不是數據庫服務,就要經過對應的端口做爲一個標識來定位到Web應用程序。spa
總結以下:
創建鏈接的傳輸協議就是TCP協議,發送HTTP網絡請求的時候須要經過一個通訊管道創建鏈接,HTTP就是一個TCP鏈接。
通道創建鏈接前爲何要進行三次握手呢?三次握手是爲了保證數據的安全性和可靠性。舉一個打電話的例子來講,用手機撥號這個過程就是第一次握手,對方接到電話」喂」,這就是第二次握手,咱們也會迴應」喂」,這就是第三次握手,這三個過程沒有問題的話,就說明鏈接創建是沒問題的。若是任一方在撥號後沒有迴應,那就不能保證這個連接是有效的,就能保證數據的一個安全性和可靠性。
TCP每次傳輸數據的時候都要創建鏈接,因此致使其效率是較低的。咱們在網絡中會屢次請求數據,也就意味着每次都要三次握手。就好比,你給對方打電話,保證通話鏈接後開始說一句話,以後就把電話掛掉了;說第二句話的時候又要再打一次電話,重複以前的操做。效率會低點可是對於咱們的網絡請求HTTP請求影響不大,由於咱們的下次請求時間是不固定的。因爲這個請求時間不固定,若是這條數據交互還一直保持着,那咱們打電話來講,咱們不交流了,但仍是保持着通話,那咱們的花費就多了。
第一點不須要創建鏈接怎麼理解呢?例如咱們看直播的時候,主播在他電腦上的操做會及時傳遞到咱們的屏幕上,若是咱們是經過TCP的形式傳遞的話,黨有不少用戶的話,那是比較卡的,會引發堵塞的。
廣播的話是不會用TCP的,須要採用UDP,只須要把數據和目的地封裝成包進行發送。
中間的過程是怎麼樣的,可能網絡很差卡在那裏了,等網絡恢復的時候,咱們看到的就是最新的,而不會是以前的畫面了。這就是採用UDP的狀況,因此UDP是不安全不可靠的,這就是UDP不須要創建鏈接,不能保證數據能安全的送給咱們。
第二點爲何數據報這麼小?
由於不能保證數據安全,若是過大的話,傳輸中間出問題的可能性就比較大,一旦有問題,數據就都沒有了。
仍是拿直播舉例,若是一次性發20分鐘的數據,出問題的話那就是20分鐘的直播畫面都沒有,因此數據報小是爲了保證數據若是丟失,數據丟失不會那麼多。
UDP無需創建鏈接,不用三次握手,那就速度比較快的。
總結:TCP、UDP是數據傳輸的方式。舉例說明就是發快遞的話,能夠選擇多個快遞公司去發這個快遞。
http://www.cnblogs.com/iOSClub/p/5422605.html
socket是什麼?
Socket這個名詞如今有不少不一樣的意思,這裏主要講到其中2個含義。一是,套接字socket=(IP地址:端口號),是端的概念。二是,socket在應用層和傳輸層之間,是層的概念。
要理解socket是什麼,首先要理解網絡的分層結構,目前internet普遍使用的TCP/IP模型,總結起來網絡模型分爲四層,從上層往下依次爲:應用層、傳輸層、網絡層、接入層。
網絡上的兩個程序經過一個雙向的通訊鏈接實現數據的交換,這個鏈接的一個端點(endpoint)稱爲一個socket。(端)
而後理解系統調用(system call)和應用程序接口(API)的概念。系統調用就是應用程序和操做系統之間傳遞控制權。當應用程序啓動系統調用時,就把控制權從應用程序傳遞給系統調用接口,此接口又把控制權傳遞給操做系統,操做系統執行內部的操做,執行完畢控制權又經過系統調用返回給應用程序。這個系統調用接口就是API。API定義了不少系統調用的函數,經過請求調用就能夠得到操做系統的服務。目前最著名就是伯克利爲UNIX定義的socket interface。(層)
回到網絡中,傳輸層TCP協議和網絡層的IP協議已經集成到操做系統中,應用程序在應用層,這就涉及到應用進程與操做系統的調用,而socket interface就做爲應用進程和運輸層協議之間的接口。所以,應用進程要使用TCP/IP協議進行通訊就必須經過socket和操做系統進行調用請求服務。
socket的做用?
socket是在應用層和傳輸層之間的一個抽象層,它把TCP/IP層複雜的操做抽象爲幾個簡單的接口供應用層調用以實現進程在網絡中通訊。
Socket把複雜的TCP/IP協議族隱藏在Socket接口後面,對用戶來講,一組簡單的接口就是所有,讓Socket去組織數據,以符合指定的協議。
————————————————————-
socket的怎麼用?
socket起源於Unix,而Unix/Linux基本哲學之一就是「一切皆文件」,均可以用「打開open –> 讀寫write/read –> 關閉close」模式來操做。socket是能夠理解爲一種特殊的文件,socket函數就是對其進行的操做(讀/寫IO、打開、關閉)。
Socket通訊的雙方能夠分爲客戶端和服務器端,客戶端的基本流程以下:
服務器端的步驟稍微多一些,主要增長了與端口綁定(bind)和監聽(listen)、接受阻塞(accept)等流程