網(wǎng)絡(luò)通信與我們生活息息相關(guān),特別是今天發(fā)達(dá)的智能手機(jī)、物聯(lián)網(wǎng)這些都離不開(kāi)網(wǎng)絡(luò)通信。今天分享一下關(guān)于Socket網(wǎng)絡(luò)通信的內(nèi)容。
1 關(guān)于Socket
學(xué)習(xí)過(guò)網(wǎng)絡(luò)編程,或者網(wǎng)絡(luò)開(kāi)發(fā)的朋友都應(yīng)該聽(tīng)說(shuō)過(guò)socket。
socket又叫套接字,是一個(gè)抽象層,應(yīng)用程序可以通過(guò)它發(fā)送或接收數(shù)據(jù),可對(duì)其進(jìn)行像對(duì)文件一樣的打開(kāi)、讀寫(xiě)和關(guān)閉等操作。套接字允許應(yīng)用程序?qū)/O插入到網(wǎng)絡(luò)中,并與網(wǎng)絡(luò)中的其他應(yīng)用程序進(jìn)行通信。網(wǎng)絡(luò)套接字是IP地址與端口的組合。
Socket是網(wǎng)絡(luò)通訊經(jīng)常采用的一種方式,它不是一個(gè)具體的物件也不是像http類(lèi)的通訊協(xié)議。你可以把它看成是一組基于TCP和UDP通信協(xié)議的接口,Socket其實(shí)就是一個(gè)門(mén)面模式,它把復(fù)雜的TCP/IP協(xié)議族隱藏在Socket接口后面,對(duì)用戶(hù)來(lái)說(shuō),一組簡(jiǎn)單的接口就是全部,讓Socket去組織數(shù)據(jù),以符合指定的協(xié)議。
2 Socket基本概念
在了解Socket之前你需要對(duì)計(jì)算機(jī)通訊的分層有個(gè)大概的了解,網(wǎng)絡(luò)七層協(xié)議,OSI:Open System Interconnection,也叫開(kāi)放式系統(tǒng)互聯(lián)參考模型。
這里不詳解OSI,放一張很好的圖分享給大家:
上面圖詳細(xì)講了基本整個(gè)計(jì)算機(jī)通信的分層架構(gòu),很多我也不了解沒(méi)我們只看我們關(guān)心的TCP/IP,其分層簡(jiǎn)化圖示如下:
3 理解Socket了解了基本分層機(jī)構(gòu)后,我們現(xiàn)在來(lái)形象的理解一下Socket到底是什么。這里有一個(gè)很形象的實(shí)例可以幫助我們很好的理解Socket,以物流為例。
我們要傳送的數(shù)據(jù)就是物流中的貨物,ip就是發(fā)貨人和收貨人的聯(lián)系方式,那么Socket是什么?大家想想這送貨這這一流程還缺少啥?對(duì)呀,物流公司啊,對(duì)吧!物流公司就是那個(gè)Socket,他負(fù)責(zé)幫你處理送貨的瑣碎事情,比如你的貨物該怎么打包、該怎么防止易碎物品破碎、該用什么方式運(yùn)輸、等等,如果是境外貨物還牽涉到報(bào)關(guān)等等一系列復(fù)雜瑣碎的事情,這些物流公司(Socket)幫你處理好了。示意圖如下:
4 TCP與UDP的區(qū)別以及三次握手和四次揮手
前面講到Socket就相當(dāng)于是物流公司,那么TCP協(xié)議就相當(dāng)于是:假設(shè)你是寄貨方,你要寄給你朋友一份禮物,你首先得去物流公司去寄,這樣你在物流公司就相當(dāng)于建立了一個(gè)事物(Socket實(shí)例)。然后物流公司有兩種服務(wù)方式讓你選擇(TCP和UDP)。
先說(shuō)TCP,TCP這個(gè)協(xié)議它比較保守,物流公司說(shuō)我必須確保你朋友會(huì)接收這份禮物,不然它不送。于是物流公司就回去聯(lián)系你朋友。然后聯(lián)系內(nèi)容大致如下:
物流:你好,我這里有個(gè)你朋友寄的禮物要給你,你收嗎?你朋友:OK,收,什么時(shí)候發(fā),多久到?物流:現(xiàn)在就發(fā),大概要12小時(shí)到。
然后物流才開(kāi)始發(fā)貨,并且會(huì)給你們一個(gè)物流單號(hào),這個(gè)單號(hào)就是關(guān)于這份貨物你和你朋友的發(fā)貨收貨憑證。這就是所謂的三次握手。示意圖:
物流發(fā)送完后還會(huì)聯(lián)系你朋友,大致對(duì)話(huà)內(nèi)容:
物流:你好,貨物已發(fā)送,請(qǐng)注意查收你朋友:好的。貨物送到,你朋友:OK,貨物收到,你們可以結(jié)案物流:好的,我結(jié)案了。
這就是所謂的四次揮手(拜拜);
(注釋?zhuān)喝挝帐炙拇螕]手這都是Socket在你建立的時(shí)候根據(jù)你選擇的協(xié)議確定好的)
這樣是不是很麻煩,估計(jì)也就順豐有這服務(wù)了,其他大部分公司還是沒(méi)有這么貼心的服務(wù)的,他們可能就是UDP協(xié)議方式了。
UDP比較簡(jiǎn)單,當(dāng)你用物流(Socket)寄貨物的時(shí)候物流公司并不會(huì)管你朋友是否能聯(lián)系上,是否愿意接收,它只負(fù)責(zé)將你的貨物發(fā)出去就完事。這中間是不需要通知你朋友的,你和你朋友也不需要有連接,這就是所謂的無(wú)連接。
5 兩種協(xié)議區(qū)別
UDP 常用于一次性傳輸比較少量數(shù)據(jù)的網(wǎng)絡(luò)應(yīng)用中,UDP 也常用于多媒體應(yīng)用(如 IP 電話(huà)、實(shí)時(shí)視頻會(huì)議、流媒體等),顯然,可靠數(shù)據(jù)傳輸對(duì)于這些應(yīng)用來(lái)說(shuō)并不是最重要的,但 TCP 的擁塞控制會(huì)導(dǎo)致數(shù)據(jù)出現(xiàn)較大的延遲,這是它們不能容忍的,我們最熟悉的視頻通話(huà)大部分就是用的UDP協(xié)議。
TCP面向連接,即發(fā)送數(shù)據(jù)之前需要建立連接,并且TCP是擁有擁塞機(jī)制的,當(dāng)前部分?jǐn)?shù)據(jù)還沒(méi)有被接收完,后部分的數(shù)據(jù)會(huì)被阻塞知道前部分?jǐn)?shù)據(jù)傳遞OK后才會(huì)繼續(xù)傳遞后半部分,所以通過(guò)TCP連接傳送的數(shù)據(jù),無(wú)差錯(cuò),不丟失,不重復(fù),且按序到達(dá);在數(shù)據(jù)完整性、安全性要求較高的場(chǎng)景需要使用TCP協(xié)議,比如你傳送重要辦公文件、圖片等,這些東西丟包都是會(huì)影響數(shù)據(jù)品質(zhì)的。
責(zé)任編輯:lq6
-
Socket
+關(guān)注
關(guān)注
0文章
212瀏覽量
34824 -
TCP
+關(guān)注
關(guān)注
8文章
1378瀏覽量
79206 -
UDP
+關(guān)注
關(guān)注
0文章
327瀏覽量
34014 -
端口
+關(guān)注
關(guān)注
4文章
988瀏覽量
32156
原文標(biāo)題:Socket通信原理
文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論