Scoket

来源:http://www.cnblogs.com/xuan-yuan/archive/2016/04/29/5445077.html
-Advertisement-
Play Games

1.Socket 幾個常用的名詞 IPC—>Inter Process Communication,進程間通信 socket —> 套接字 TCP—>Transmission Control Protocol傳輸控制協議, 什麼是Socket Socket:又稱作是套接字,網路上的兩個程式通過一個雙 ...


1.Socket

幾個常用的名詞

IPC—>Inter Process Communication,進程間通信

socket —> 套接字

TCP—>Transmission Control Protocol傳輸控制協議,

什麼是Socket

       Socket:又稱作是套接字,網路上的兩個程式通過一個雙向的通信連接實現數據的交換,這個連接的一端稱為Socket。

Socket是對TCP/IP的協議的封裝,Socket本身並不是協議,而是一個調用的介面,只有通過Socket我們才能使用TCP/IP。

Socket的兩層定義:一是,套接字socket=(IP地址:埠號),是端的概念。二是,socket在應用層和傳輸層之間,是層的概念.

Socket是和網路緊密相關的,網路上的兩個程式一般就是指web伺服器和我們的客戶端,數據交換的過程就是我們客戶端發一個請求到HTTP伺服器、伺服器返回數據,這個過程就是數據交換的過程。客戶端和伺服器之間的數據交換是需要一個雙向的通信連接,兩者之間是需要一個通道去實現連接的。

可以理解為Socket: "主機" + "埠"  = 套接字/插座; 僅僅是一個通信模型,不屬於七層協議(網路協議).

    通信管道就是通信連接,有了這個管道,我們就可以進行數據傳輸。客戶端到伺服器端必須要有一個通道才能實現數據的交互。如果有座大山擋著了道路我們就會在山中開闢一個隧道,這樣我們才能走到山的另一端。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應用程式。

總結如下:

l  網路上的請求就是通過Socket來建立連接然後互相通信

l  IP地址(網路上主機設備的唯一標識)

l  埠號(定位程式)

n  用於標示進程的邏輯地址,不同進程的標示

n  有效埠:0~65535,其中0~1024由系統使用或者保留埠,開發中建議使用1024以上的埠

l  傳輸協議(用什麼樣的方式進行交互)

n  通訊的規則

n  常見協議:TCP、UDP

 

3.TCP和UDP

l  TCP(傳輸控制協議)

n  建立連接,形成傳輸數據的通道

n  在連接中進行大數據傳輸(數據不受限制)

n  通過三次握手完成連接,是可靠協議,安全送達

n  必須建立連接,效率會稍低

建立連接的傳輸協議就是TCP協議,發送HTTP網路請求的時候需要通過一個通信管道建立連接,HTTP就是一個TCP連接。

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

TCP每次傳輸數據的時候都要建立連接,所以導致其效率是較低的。我們在網路中會多次請求數據,也就意味著每次都要三次握手。就比如,你給對方打電話,保證通話連接後開始說一句話,之後就把電話掛掉了;說第二句話的時候又要再打一次電話,重覆之前的操作。效率會低點但是對於我們的網路請求HTTP請求影響不大,因為我們的下次請求時間是不固定的。由於這個請求時間不固定,如果這條數據交互還一直保持著,那我們打電話來說,我們不交流了,但還是保持著通話,那我們的花費就多了。

 

l  UDP(用戶數據報協議)

n  將數據及源和目的封裝成數據包中,不需要建立連接

n  每個數據報的大小限制在64K之內

n  因為無需連接,因此是不可靠協議

n  不需要建立連接,速度快

第一點不需要建立連接怎麼理解呢?例如我們看直播的時候,主播在他電腦上的操作會及時傳遞到我們的屏幕上,如果我們是通過TCP的形式傳遞的話,黨有很多用戶的話,那是比較卡的,會引起堵塞的。廣播的話是不會用TCP的,需要採用UDP,只需要把數據和目的地封裝成包進行發送。中間的過程是怎麼樣的,可能網路不好卡在那裡了,等網路恢復的時候,我們看到的就是最新的,而不會是之前的畫面了。這就是採用UDP的情況,所以UDP是不安全不可靠的,這就是UDP不需要建立連接,不能保證數據能安全的送給我們。

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

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

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

 


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

-Advertisement-
Play Games
更多相關文章
  • 一.Activity組件1.簡介:Activity組件是Android四大組件之一,通常一個Activity相當於一個用戶界面,我們可以通過載入佈局文件將Android提供的各種控制項及自定義控制項顯示到用戶界面,併為其註冊監聽,來響應用戶的即時操作。2.Activity生命周期方法:①onCreate ...
  • App Store: 天的故事 一個寫故事、分享故事、閱讀故事的應用。 五彩繽紛的首頁。 故事有開端、中段、結尾,一天有上午、下午、晚上,每一天都是個完整的故事,也是個多彩的故事。 好故事要能一句話概括,天的故事只要330字,配上豐富的色彩來表現感受和心情,天的故事簡潔美觀,有趣易讀。 在這裡,你可 ...
  • 跳到健康設置 上網找了一下 你會發現很難找到。代碼如下 不信你試試 。 NSURL *url = [NSURL URLWithString:@"prefs:root=Privacy&path=HEALTH"]; if ([[UIApplication sharedApplication] canOp ...
  • 今天在查看蘋果介面文檔時,突然對於介面的聲明知識點比較感興趣,再網路找到下麵這個比較不錯的文章,記錄一下並分享; 如你所知,已廢棄(Deprecated)的API指的是那些已經過時的並且在將來某個時間最終會被移除掉的方法或類。通常,蘋果在引入一個更優秀的API後就會把原來的API給廢棄掉。因為,新引 ...
  • 繼續前兩篇,接著本第三篇《學習Coding-iOS開源項目日誌(三)》講解Coding-iOS開源項目。 前 言:作為初級程式員,想要提高自己的水平,其中一個有效的學習方法就是學習別人好的項目。本篇開始會陸續更新本人對github上開源的一個很不 錯的項目的一點點學習積累。也就是,探究著別人寫的源碼 ...
  • ➠更多技術乾貨請戳:聽雲博客 Charles是一款抓包修改工具,相比起TcpDump,charles具有界面簡單直觀,易於上手,數據請求控制容易,修改簡單,抓取數據的開始暫停方便等等優勢!前面介紹瞭如何使用TcpDump抓包,下麵給大家介紹一下Charles的使用。 Charles抓包 Charle ...
  • 作為一種輕量級的數據交換格式,json正在逐步取代xml,成為網路數據的通用格式。 有的json代碼格式比較混亂,可以使用此“http://www.bejson.com/”網站來進行JSON格式化校驗(點擊打開鏈接)。此網站不僅可以檢測Json代碼中的錯誤,而且可以以視圖形式顯示json中的數據內容 ...
  • 1、原來是將EditView放到了popupwindow,發現EditView原有的複製、粘貼、全選、選擇功能失效了,所以便用DialogFragment代替了popupWindow 直接上代碼 ①、先看佈局文件 ②、看自定義diaglogFragment的代碼 3、如何使用 效果圖 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...