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

来源:http://www.cnblogs.com/iOSClub/archive/2016/04/22/5422605.html
-Advertisement-
Play Games

Socket小白篇-附加TCP/UDP簡介 1.Socket 什麼是Socket Socket:又稱作是套接字,網路上的兩個程式通過一個雙向的通信連接實現數據的交換,這個連接的一端稱為Socket。 Socket是對TCP/IP的協議的封裝,Socket本身並不是協議,而是一個調用的介面,只有通過S ...


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

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

 

1.Socket

什麼是Socket

            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服務應用。

 

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是數據傳輸的方式。舉例說明就是發快遞的話,可以選擇多個快遞公司去發這個快遞。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 主要用Xib方式,代碼後期還會有進一步的優化 下次用代碼的時候一定要複製一份再用,直接拿出源代碼來不小心哪裡碰了下,耽誤了10多分鐘去找bug,鬱悶!!! 功能:類似於手機打開新浪網首頁最上面的大圖片,自動滾動,右下角有個頁數顯示。 思路和註意點:1、主要用到的是scrollView和page co ...
  • 問題描述: 今天是我決定專註Android開發的第一天,我在網上下載了一個數獨游戲的源碼,準備開始著手學習。在導入之後出現Java文件中import *.R文件報錯,在gen目錄下麵沒有找到R.java,於是自己創建了個,然後開始了尋找自動更新的方法。 問題解決: 在經過尋找後,最後發現是自己的項目 ...
  • ios開發學習中,經常弄不清楚ios的開發模式,今天我們就來進行簡單的總結和探討~ (一)代理模式 應用場景:當一個類的某些功能需要由別的類來實現,但是又不確定具體會是哪個類實現。 優勢:解耦合 敏捷原則:開放-封閉原則 實例:tableview的 數據源delegate,通過和protocol的配 ...
  • 使用NSURLSessionDownloadTask下載文件的過程與前面差不多,需要註意的是文件下載文件之後會自動保存到一個臨時目錄,需要開發人員自己將此文件重新放到其他指定的目錄中。 來自KenshinCui,鏈接見上篇。 ...
  • AFN小結 1,AFN概念、原理 2,AFN的封裝使用 3,AFN與其它框架對比 ————————————————————————————————— 1 , AFN的概念原理: AFN的基礎是NSURL,AFN的直接操作對象AFHTTPClient是一個實現了NSCoding和NSCopying協議 ...
  • 最近突然發現我的128G SSD硬碟只剩下可憐的8G多,剩下這麼少的一點空間連Xcode都無法更新。怎麼辦呢?如果升級硬碟的話,第一要花錢,畢竟SSD硬碟還是不便宜,第二是升級比較麻煩,要拆機和遷移系統什麼的特別花時間精力,老了真不願瞎折騰了,只能想辦法能不能清除點空間來。 尋找大塊頭 首先想到的就 ...
  • 一 KVC的基本概念 KVC是Key Value Coding的縮寫,意思是鍵值編碼。 在iOS中,提供了一種方法通過使用屬性的名稱(也就是Key)來間接訪問對象屬性的方法,這個方法可以不通過getter/setter方法來訪問對象的屬性。用KVC可以間接訪問對象屬性的機制。通常我們使用valueF ...
  • // 註意,在有導航欄的情況下,需要在viewDidLoad 中加上 self.automaticallyAdjustsScrollViewInsets = NO;不然會出現圖片下移64的情況 ,scrollView.frame的高度要比圖片的高度大64,不然,圖片顯示不全 源文件在這裡:http: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...