回覆列表
  • 1 # 程式設計老大叔

    Socket是網路通訊經常採用的一種方式,它不是一個具體的物件也不是想http類的通訊協議。你可以把它看成是一組基於TCP和UDP通訊協議的介面,Socket其實就是一個門面模式,它把複雜的TCP/IP協議族隱藏在Socket介面後面,對使用者來說,一組簡單的介面就是全部,讓Socket去組織資料,以符合指定的協議。

    Socket基本概念

    在瞭解Socket之前你需要對計算機通訊的分層有個大概的瞭解,具體講解我在這裡就不講了,放一張很好的圖分享給大家:

    上面圖詳細講了基本整個計算機通訊的分層架構,很多我也不瞭解沒我們只看我們關心的TCP/IP,其分層簡化圖示如下:

    理解Socket

    好,瞭解了基本分層機構後,我們現在來形象的理解一下Socket到底是什麼。我這裡有一個很形象的例項可以幫助我們很好的理解Socket,這也是我當初在學習Socket程式設計時自己領悟出來的,那就是物流。

    我們要傳送的資料就是物流中的貨物,ip就是發貨人和收貨人的聯絡方式,那麼Socket是什麼?大家想想這送貨這這一流程還缺少啥?對呀,物流公司啊,對吧!物流公司就是那個Socket,他負責幫你處理送貨的瑣碎事情,比如你的貨物該怎麼打包、該怎麼防止易碎物品破碎、該用什麼方式運輸、等等,如果是境外貨物還牽涉到報關等等一系列複雜瑣碎的事情,這些物流公司(Socket)幫你處理好了。示意圖如下:

    理解TCP與UDP的區別以及三次握手和四次揮手

    然後我們來說一下TCP和UDP的區別。前面講到Socket就相當於是物流公司,那麼TCP協議就相當於是:假設你是寄貨方,你要寄給你朋友一份禮物,你首先得去物流公司去寄,這樣你再物流公司就相當於建立了一個事物(Socket例項)。然後物流公司有兩種服務方式讓你選擇(TCP和UDP)。

    先說TCP,TCP這個協議它比較保守,物流公司說我必須確保你朋友會接收這份禮物,不然它不送。於是物流公司就回去聯絡你朋友。然後聯絡內容大致如下:

    物流:你好,我這裡有個你朋友寄的禮物要給你,你收嗎?

    你朋友:OK,收,什麼時候發,多久到?

    物流:現在就發,大概要12小時到。

    然後物流才開始發貨,並且會給你們一個物流單號,這個單號就是關於這份貨物你和你朋友的發貨收貨憑證。這就是所謂的三次握手。示意圖:

    物流傳送完後還會聯絡你朋友,大致對話內容:

    物流:你好,貨物已傳送,請注意查收

    你朋友:好的。

    貨物送到,你朋友:OK,貨物收到,你們可以結案

    物流:好的,我結案了。

    這就是所謂的四次揮手(拜拜);

    (註釋:三次握手四次揮手這都是Socket在你建立的時候根據你選擇的協議確定好的)

    這樣是不是很麻煩,估計也就順豐有這服務了,其他大部分公司還是沒有這麼貼心的服務的,他們可能就是UDP協議方式了。

    UDP比較簡單,當你用物流(Socket)寄貨物的時候物流公司並不會管你朋友是否能聯絡上,是否願意接收,它只負責將你的貨物發出去就完事。這中間是不需要通知你朋友的,你和你朋友也不需要有連線,這就是所謂的無連線。

    兩種協議區別和應用

    UDP 常用於一次性傳輸比較少量資料的網路應用中,UDP 也常用於多媒體應用(如 IP 電話、實時影片會議、流媒體等),顯然,可靠資料傳輸對於這些應用來說並不是最重要的,但 TCP 的擁塞控制會導致資料出現較大的延遲,這是它們不能容忍的,我們最熟悉的影片通話大部分就是用的UDP協議。

    TCP面向連線,即傳送資料之前需要建立連線,並且TCP是擁有擁塞機制的,當前部分資料還沒有被接收完,後部分的資料會被阻塞知道前部分資料傳遞OK後才會繼續傳遞後半部分,所以透過TCP連線傳送的資料,無差錯,不丟失,不重複,且按序到達;在資料完整性、安全性要求較高的場景需要使用TCP協議,比如你傳送重要辦公檔案、圖片等,這些東西丟包都是會影響資料品質的。

  • 2 # 老虎81475422

    其實這個問題應該這樣問,UDP和TCP一般分別用在什麼地方?因為,SOCKET只是承載UDP,TCP的程式設計通道而已。

    UDP用於面向無連線的應用,傳輸過程不保證資料不丟失,不保證資料按順序到達,不進行流量控制。

    TCP用於面向連線的服務,資料按序,正確到達。

    還有層言外之意,UDP是分片的,TCP是類似流的,可以不分片的。

    再詳細的解答,與此題目就無關了。

    綜上,UDP的SOCKET用在面向無連線的資料傳輸程式設計中,TCP的SOCKET以此類推。

  • 中秋節和大豐收的關聯?
  • 哪個杭椒品種適合露地栽培?