Socket小白篇-附加TCP/UDP簡介

Socket小白篇-附加TCP/UDP簡介

  1. Socket
  2. 網絡通訊的要素
  3. TCP和UDP
  4. Socket的通訊流程圖

 

1.Socket

什麼是Socketweb

            Socket:又稱做是套接字,網絡上的兩個程序經過一個雙向的通訊鏈接實現數據的交換,這個鏈接的一端稱爲Socket。數據庫

Socket是對TCP/IP的協議的封裝,Socket自己並非協議,而是一個調用的接口,只有經過Socket咱們才能使用TCP/IP。安全

  Socket是和網絡緊密相關的,網絡上的兩個程序通常就是指web服務器和咱們的客戶端,數據交換的過程就是咱們客戶端發一個請求到HTTP服務器、服務器返回數據,這個過程就是數據交換的過程。客戶端和服務器之間的數據交換是須要一個雙向的通訊鏈接,二者之間是須要一個通道去實現鏈接的。服務器

    通訊管道就是通訊鏈接,有了這個管道,咱們就能夠進行數據傳輸。客戶端到服務器端必需要有一個通道才能實現數據的交互。若是有座大山擋着了道路咱們就會在山中開闢一個隧道,這樣咱們才能走到山的另外一端。Socket就能夠理解爲這個隧道的兩個端口,一個入口一個出口。網絡

一個網絡請求並非咱們所認爲的請求-相應的過程,它的底層是開闢了一個通訊管道的。因此應用程序一般是經過Socket(套接字)向網絡發出請求或者應答網絡請求。大數據

流式Socket(SOCK_STREAM)和數據報式Socket(SOCK_DGRAM)。流式是一種面向鏈接的Socket,針對於面向鏈接的TCP服務應用;數據報式Socket是一種無鏈接的Socket,對應於無鏈接的UDP服務應用。blog

 

2. 網絡通訊的要素

發一個HTTP請求到網絡上,咱們會有一個URL,URL會有一個TCP協議、IP地址和端口號HTTP默認的端口號是80,沒有IP地址咱們就沒辦法找到服務器,沒有端口號咱們就找不到應用程序。接口

網絡上的請求其實就是經過Socket創建一個通訊管道實現數據交互的。IP地址就是網絡上主機設備的惟一標識。 端口號就是進程的標識,一個應用程序就是一個進程。進程

服務器其實也是一個電腦,那麼服務器上也會有不少應用程序。假如我要訪問百度的服務器,百度服務器上會有一個Web應用程序來供咱們訪問,例如服務器的數據庫應用程序(MySQL),服務器的數據庫存儲着大量的數據。客戶端訪問服務器,咱們能夠經過IP地址訪問,咱們要訪問其Web應用程序而不是數據庫服務,就要經過對應的端口做爲一個標識來定位到Web應用程序。開發

總結以下:

  • 網絡上的請求就是經過Socket來創建鏈接而後互相通訊
  • IP地址(網絡上主機設備的惟一標識)
  • 端口號(定位程序)
  1. 用於標示進程的邏輯地址,不一樣進程的標示
  2. 有效端口:0~65535,其中0~1024由系統使用或者保留端口,開發中建議使用1024以上的端口
  • 傳輸協議(用什麼樣的方式進行交互)
  1. 通信的規則
  2. 常見協議:TCP、UDP

 

3.TCP和UDP

  •  TCP(傳輸控制協議)
  1. 創建鏈接,造成傳輸數據的通道
  2. 在鏈接中進行大數據傳輸(數據不受限制)
  3. 經過三次握手完成鏈接,是可靠協議,安全送達
  4. 必須創建鏈接,效率會稍低

  創建鏈接的傳輸協議就是TCP協議,發送HTTP網絡請求的時候須要經過一個通訊管道創建鏈接,HTTP就是一個TCP鏈接。

  通道創建鏈接前爲何要進行三次握手呢?三次握手是爲了保證數據的安全性和可靠性。舉一個打電話的例子來講,用手機撥號這個過程就是第一次握手,對方接到電話」喂」,這就是第二次握手,咱們也會迴應」喂」,這就是第三次握手,這三個過程沒有問題的話,就說明鏈接創建是沒問題的。若是任一方在撥號後沒有迴應,那就不能保證這個連接是有效的,就能保證數據的一個安全性和可靠性。

  TCP每次傳輸數據的時候都要創建鏈接,因此致使其效率是較低的。咱們在網絡中會屢次請求數據,也就意味着每次都要三次握手。就好比,你給對方打電話,保證通話鏈接後開始說一句話,以後就把電話掛掉了;說第二句話的時候又要再打一次電話,重複以前的操做。效率會低點可是對於咱們的網絡請求HTTP請求影響不大,由於咱們的下次請求時間是不固定的。因爲這個請求時間不固定,若是這條數據交互還一直保持着,那咱們打電話來講,咱們不交流了,但仍是保持着通話,那咱們的花費就多了。

  • UDP(用戶數據報協議)
  1. 將數據及源和目的封裝成數據包中,不須要創建鏈接
  2. 每一個數據報的大小限制在64K以內
  3. 由於無需鏈接,所以是不可靠協議
  4. 不須要創建鏈接,速度快

第一點不須要創建鏈接怎麼理解呢?例如咱們看直播的時候,主播在他電腦上的操做會及時傳遞到咱們的屏幕上,若是咱們是經過TCP的形式傳遞的話,黨有不少用戶的話,那是比較卡的,會引發堵塞的。廣播的話是不會用TCP的,須要採用UDP,只須要把數據和目的地封裝成包進行發送。中間的過程是怎麼樣的,可能網絡很差卡在那裏了,等網絡恢復的時候,咱們看到的就是最新的,而不會是以前的畫面了。這就是採用UDP的狀況,因此UDP是不安全不可靠的,這就是UDP不須要創建鏈接,不能保證數據能安全的送給咱們。

第二點爲何數據報這麼小?由於不能保證數據安全,若是過大的話,傳輸中間出問題的可能性就比較大,一旦有問題,數據就都沒有了。仍是拿直播舉例,若是一次性發20分鐘的數據,出問題的話那就是20分鐘的直播畫面都沒有,因此數據報小是爲了保證數據若是丟失,數據丟失不會那麼多。

UDP無需創建鏈接,不用三次握手,那就速度比較快的。

總結:TCP、UDP是數據傳輸的方式。舉例說明就是發快遞的話,能夠選擇多個快遞公司去發這個快遞。

相關文章
相關標籤/搜索