我微信公開之后,加我的人也越來越多,也就會經常收到各種各樣的消息。
有些消息我看到之后立馬就回復了,有些消息我看到之后真的不想回復。比如:在嗎?
關于“在嗎?”這個問題,我在這里統一回復:以后微信找我有話直說,不要老是在嗎在嗎,不出意外的話,幾十年內我都是在的。
三次握手,通信還是失敗了:
上面這個通信,三次握手都失敗了,看著確實讓人著急。當然,本文說的重點是:Socket網絡通信。
一、關于Socket
學習過網絡編程,或者網絡開發的朋友都應該聽說過socket。
socket又叫套接字,是一個抽象層,應用程序可以通過它發送或接收數據,可對其進行像對文件一樣的打開、讀寫和關閉等操作。套接字允許應用程序將I/O插入到網絡中,并與網絡中的其他應用程序進行通信。網絡套接字是IP地址與端口的組合。
Socket是網絡通訊經常采用的一種方式,它不是一個具體的物件也不是像http類的通訊協議。你可以把它看成是一組基于TCP和UDP通信協議的接口,Socket其實就是一個門面模式,它把復雜的TCP/IP協議族隱藏在Socket接口后面,對用戶來說,一組簡單的接口就是全部,讓Socket去組織數據,以符合指定的協議。
二、Socket基本概念
在了解Socket之前你需要對計算機通訊的分層有個大概的了解,網絡七層協議,OSI:Open System Interconnection,也叫開放式系統互聯參考模型。
這里不詳解OSI,放一張很好的圖分享給大家:
上面圖詳細講了基本整個計算機通信的分層架構,很多我也不了解沒我們只看我們關心的TCP/IP,其分層簡化圖示如下:
三、理解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協議,比如你傳送重要辦公文件、圖片等,這些東西丟包都是會影響數據品質的。
-
通信
+關注
關注
18文章
6071瀏覽量
136427 -
Socket
+關注
關注
0文章
212瀏覽量
34889 -
物流
+關注
關注
1文章
265瀏覽量
18148
發布評論請先 登錄
相關推薦
socket 和 UDP 協議的對比
socket 與 RESTful API 的使用
socket 加密通信的實現方式
socket 與 HTTP 協議的關系
socket 發送和接收數據方法
socket 網絡通信協議解析
socket 編程基礎入門
C語言中的socket編程基礎
如何在Python中使用socket
什么是socket編程 socket與tcp/ip協議的關系
NB_IOT類產品Socket通信功能研發測試方案
![NB_IOT類產品<b class='flag-5'>Socket</b><b class='flag-5'>通信</b>功能研發測試方案](https://file1.elecfans.com//web2/M00/08/62/wKgaombxI9iAdr88AA57xzAwrNk479.jpg)
評論