通信協(xié)議
-Start:關(guān)注本公眾號(hào)后,可直接聯(lián)系后臺(tái)獲取排版美化的詳細(xì)文檔!
-Hints:本篇文章所編纂的資料均來自網(wǎng)絡(luò),特此感謝參與奉獻(xiàn)的有關(guān)人員。
網(wǎng)絡(luò)分層協(xié)議

傳輸層協(xié)議區(qū)別:
TCP:傳輸控制協(xié)議
a 數(shù)據(jù)傳輸前必須要建立連接,數(shù)據(jù)傳輸完,必須釋放連接。
b 傳輸?shù)臄?shù)據(jù)無差錯(cuò),不丟失,不重復(fù),且順序和源數(shù)據(jù)一致。
c 在傳輸?shù)倪^程中,數(shù)據(jù)拆分為不同的段,也就是segment。
d 效率低,因?yàn)槭敲嫦蜻B接的協(xié)議,通信之前必須要建立連接。
?
TCP【打電話】
TCP 是一種面向有連接的傳輸層協(xié)議,能夠?qū)ψ约禾峁┑倪B接實(shí)施控制。適用于要求可靠傳輸的應(yīng)用,例如文件傳輸。面向字節(jié)流,傳輸慢
UDP【發(fā)短信】
UDP 是一種面向無連接的傳輸層協(xié)議,不會(huì)對(duì)自己提供的連接實(shí)施控制。適用于實(shí)時(shí)應(yīng)用,例如:IP電話、視頻會(huì)議、直播等。

?
Socket
Socket就像一個(gè)電話插座,負(fù)責(zé)連通兩端的電話,進(jìn)行點(diǎn)對(duì)點(diǎn)通信,讓電話可以進(jìn)行通信,端口就像插座上的孔,端口不能同時(shí)被其他進(jìn)程占用。而我們建立連接就像把插頭插在這個(gè)插座上,創(chuàng)建一個(gè)Socket實(shí)例開始監(jiān)聽后,這個(gè)電話插座就時(shí)刻監(jiān)聽著消息的傳入,誰撥通我這個(gè)“IP地址和端口”,我就接通誰。
Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層,它是一組接口。在設(shè)計(jì)模式中,Socket其實(shí)就是一個(gè)門面模式,它把復(fù)雜的TCP/IP協(xié)議族隱藏在Socket接口后面,對(duì)用戶來說,一組簡(jiǎn)單的接口就是全部,讓Socket去組織數(shù)據(jù),以符合指定的協(xié)議。

服務(wù)器端先初始化Socket,然后與端口綁定(bind),對(duì)端口進(jìn)行監(jiān)聽(listen),調(diào)用accept阻塞,等待客戶端連接。在這時(shí)如果有個(gè)客戶端初始化一個(gè)Socket,然后連接服務(wù)器(connect),如果連接成功,這時(shí)客戶端與服務(wù)器端的連接就建立了??蛻舳税l(fā)送數(shù)據(jù)請(qǐng)求,服務(wù)器端接收請(qǐng)求并處理請(qǐng)求,然后把回應(yīng)數(shù)據(jù)發(fā)送給客戶端,客戶端讀取數(shù)據(jù),最后關(guān)閉連接,一次交互結(jié)束。
?
本地進(jìn)程間通信:
消息傳遞(管道、FIFO、消息隊(duì)列)?
同步(互斥量、條件變量、讀寫鎖、文件和寫記錄鎖、信號(hào)量)?
共享內(nèi)存(匿名的和具名的)?
遠(yuǎn)程過程調(diào)用(Solaris門和Sun RPC)
本地可以通過進(jìn)程PID來唯一標(biāo)識(shí)一個(gè)進(jìn)程
?
網(wǎng)絡(luò)進(jìn)程間通信
網(wǎng)絡(luò)層的“ip地址”可以唯一標(biāo)識(shí)網(wǎng)絡(luò)中的主機(jī),而傳輸層的“協(xié)議+端口”可以唯一標(biāo)識(shí)主機(jī)中的應(yīng)用程序(進(jìn)程)。這樣利用三元組(ip地址,協(xié)議,端口)就可以標(biāo)識(shí)網(wǎng)絡(luò)的進(jìn)程了,網(wǎng)絡(luò)中的進(jìn)程通信就可以利用這個(gè)標(biāo)志與其它進(jìn)程進(jìn)行交互。
?
socket中TCP的三次握手建立連接

1【客戶端:我要連接】客戶端調(diào)用connect時(shí),觸發(fā)了連接請(qǐng)求,向服務(wù)器發(fā)送了SYN J包,這時(shí)connect進(jìn)入阻塞狀態(tài);
2 【服務(wù)端:收到請(qǐng)求,可以連接】服務(wù)器監(jiān)聽到連接請(qǐng)求,即收到SYN J包,調(diào)用accept函數(shù)接收請(qǐng)求向客戶端發(fā)送SYN K ,ACK J+1,這時(shí)accept進(jìn)入阻塞狀態(tài);
3 【客戶端:收到回復(fù),你說可以連接】客戶端收到服務(wù)器的SYN K ,ACK J+1之后,這時(shí)connect返回,并對(duì)SYN K進(jìn)行確認(rèn);
【服務(wù)端,知道對(duì)方知道,開始干活】服務(wù)器收到ACK K+1時(shí),accept返回,至此三次握手完畢,連接建立。
?
socket中TCP的四次握手釋放連接

1【主動(dòng)端:我要關(guān)閉連接】某個(gè)應(yīng)用進(jìn)程首先調(diào)用close主動(dòng)關(guān)閉連接,這時(shí)TCP發(fā)送一個(gè)FIN M;?
2【被動(dòng)端,進(jìn)行收尾:我知道你要關(guān)閉連接,你等我結(jié)束】另一端接收到FIN M之后,執(zhí)行被動(dòng)關(guān)閉,對(duì)這個(gè)FIN進(jìn)行確認(rèn)。它的接收也作為文件結(jié)束符傳遞給應(yīng)用進(jìn)程,因?yàn)镕IN的接收意味著應(yīng)用進(jìn)程在相應(yīng)的連接上再也接收不到額外數(shù)據(jù);?
3 【被動(dòng)端:我結(jié)束了,你可以關(guān)閉】一段時(shí)間之后,接收到文件結(jié)束符的應(yīng)用進(jìn)程調(diào)用close關(guān)閉它的socket。這導(dǎo)致它的TCP也發(fā)送一個(gè)FIN N;?
4 【主動(dòng)端:我關(guān)閉了】接收到這個(gè)FIN的源發(fā)送端TCP對(duì)它進(jìn)行確認(rèn)。?
這樣每個(gè)方向上都有一個(gè)FIN和ACK。
?
網(wǎng)絡(luò)訪問流程
應(yīng)用層:
1.瀏覽器向DNS服務(wù)器發(fā)起DNS請(qǐng)求,進(jìn)行域名解析,獲得相應(yīng)的IP地址
2.根據(jù)HTTP協(xié)議生成HTTP報(bào)文請(qǐng)求
在應(yīng)用層將要發(fā)送的數(shù)據(jù)內(nèi)容形成了應(yīng)用層的報(bào)文data,發(fā)送到傳輸層
傳輸層:
3.TCP的三次握手
把處理的數(shù)據(jù)段發(fā)送到網(wǎng)絡(luò)層
網(wǎng)絡(luò)層:
4.IP尋址
5.ARP協(xié)議獲取MAC地址
數(shù)據(jù)在網(wǎng)絡(luò)層被打包,這樣封裝上了網(wǎng)絡(luò)層的包頭,包頭內(nèi)部含有源及目的的ip地址
數(shù)據(jù)鏈路層:
6.MAC尋址
7.服務(wù)器接受請(qǐng)求
8.服務(wù)端處理請(qǐng)求
9.服務(wù)端提供響應(yīng)
10.四次揮手
11.瀏覽器解析和渲染頁(yè)面,展示給用戶
?
參考資料:
https://blog.csdn.net/zheng_guan/article/details/96427176
https://zhuanlan.zhihu.com/p/109826876
https://baijiahao.baidu.com/s?id=1707849542251291110&wfr=spider&for=pc
https://blog.csdn.net/ningmengshuxiawo/article/details/115413766
https://blog.csdn.net/weixin_48126962/article/details/117074843
https://blog.csdn.net/qq_42978418/article/details/108399390
?
