一談到TCP/IP 協(xié)議棧,相信不少小白都處于暴躁的邊緣,只懂其一不知其二。沒(méi)關(guān)系,看完這篇你就知道啦!
協(xié)議定義的是一系列的通信標(biāo)準(zhǔn), 通信雙方需要共同按照這一標(biāo)準(zhǔn)進(jìn)行正常的數(shù)據(jù)收發(fā);信的雙方需要共同按照這一個(gè)標(biāo)準(zhǔn)進(jìn)行正常的數(shù)據(jù)收發(fā);(兩人,說(shuō)共同的語(yǔ)言,不然不能交流,一個(gè)聽(tīng)不懂外語(yǔ)的和說(shuō)外語(yǔ)的交流)
協(xié)議棧是協(xié)議的具體實(shí)現(xiàn)形式, 通俗的理解就是用代碼實(shí)現(xiàn)的函數(shù)庫(kù), 以便于開(kāi)發(fā)人員調(diào)用。
協(xié)議棧是通常是一個(gè)層級(jí)結(jié)構(gòu)。協(xié)議棧是網(wǎng)絡(luò)中各層協(xié)議的總和,其形象的反映了 一個(gè)網(wǎng)絡(luò)中文件傳輸過(guò)程;由上層協(xié)議到底層協(xié)議,再由底層協(xié)議到上層協(xié)議。
某個(gè)協(xié)議的實(shí)現(xiàn)代碼稱(chēng)為協(xié)議棧
BLE協(xié)議棧主要用來(lái)對(duì)你的應(yīng)用數(shù)據(jù)進(jìn)行層層封包,以生成一個(gè)滿(mǎn)足BLE協(xié)議的空中數(shù)據(jù)包,也就是說(shuō),把應(yīng)用數(shù)據(jù)包裹在一系列的幀頭(header)和幀尾(tail)中。
我們先簡(jiǎn)單了解下TCP/IP協(xié)議,該協(xié)議最早得名于上世紀(jì)80年代,由美國(guó)國(guó)防部提出并應(yīng)用于arpa網(wǎng)(即阿帕網(wǎng),互聯(lián)網(wǎng)的鼻祖)項(xiàng)目,由于其優(yōu)異性,很快便成為主流網(wǎng)絡(luò)通信協(xié)議。后面出現(xiàn)的各類(lèi)協(xié)議(http、ip、dns、tcp、arp等)都被整體納入這一協(xié)議體系中去,被統(tǒng)稱(chēng)為“TCP/IP 協(xié)議棧”,“TCP/IP 協(xié)議?!泵Q(chēng)就是這么由此而來(lái)的。
對(duì)應(yīng)這一協(xié)議棧,同時(shí)發(fā)展出了TCP/IP 參考模型,該模型是一個(gè)抽象的分層模型,TCP/IP 協(xié)議棧中的所有協(xié)議被歸類(lèi)到這一模型的4個(gè)層次中(四個(gè)層分別是:鏈路層、網(wǎng)絡(luò)層、傳輸層、應(yīng)用層),每一層都呼叫它的下一層所提供的協(xié)議來(lái)完成其需求,各個(gè)層次間互相協(xié)作,由此完成了互聯(lián)網(wǎng)通信的主要工作。
由于OSI協(xié)議棧比較復(fù)雜且TCP和IP兩大協(xié)議在業(yè)界被廣泛使用,所以TCP/IP參考模型成為了互聯(lián)網(wǎng)的主流參考模型
為了讓你對(duì)通信過(guò)程有一個(gè)更好的理解,我將以http請(qǐng)求通信的過(guò)程為例子,從 TCP/IP 四個(gè)層次出發(fā),對(duì)應(yīng)各個(gè)層次的通信實(shí)體,看各個(gè)協(xié)議是如何在這些通信實(shí)體中發(fā)生作用。
在這之前我們先了解下網(wǎng)絡(luò)通信中的三個(gè)地址:IP 地址、Mac 地址以及端口號(hào),三者分別代表:
IP地址:網(wǎng)絡(luò)中互聯(lián)的主機(jī)和路由器的標(biāo)識(shí)
Mac 地址:每個(gè)網(wǎng)卡硬件的物理地址
端口號(hào):識(shí)別同一個(gè)主機(jī)上不同的應(yīng)用程序,也可以理解為程序地址
當(dāng)你輸入一個(gè)網(wǎng)址并按下回車(chē)鍵的時(shí)候:應(yīng)用層協(xié)議會(huì)先對(duì)該請(qǐng)求包做格式定義;緊接著傳輸層協(xié)議加上雙方的端口號(hào),確認(rèn)雙方通信的應(yīng)用程序;然后網(wǎng)絡(luò)層協(xié)議加上雙方的IP地址,確認(rèn)雙方的網(wǎng)絡(luò)位置;最后鏈路層協(xié)議加上雙方的MAC地址,確認(rèn)雙方的物理位置,以太網(wǎng)協(xié)議會(huì)通過(guò)對(duì)電信號(hào)數(shù)據(jù)進(jìn)行分組,形成數(shù)據(jù)幀,再采用廣播方式,通過(guò)傳輸介質(zhì)發(fā)送給對(duì)方主機(jī)。而對(duì)于不同網(wǎng)段,該數(shù)據(jù)包先會(huì)轉(zhuǎn)發(fā)給網(wǎng)關(guān)路由器,經(jīng)過(guò)多次轉(zhuǎn)發(fā)后,最終被發(fā)送到目標(biāo)主機(jī)。目標(biāo)機(jī)接收到數(shù)據(jù)包后,采用對(duì)應(yīng)的協(xié)議,對(duì)幀數(shù)據(jù)進(jìn)行組裝,然后再通過(guò)一層一層的協(xié)議進(jìn)行解析,最終被應(yīng)用層的協(xié)議解析并交給服務(wù)器處理。在這個(gè)過(guò)程中,各項(xiàng)協(xié)議確保了傳輸過(guò)程的實(shí)現(xiàn)以及數(shù)據(jù)的安全。
IP地址相當(dāng)于是人所在的區(qū)域,MAC地址相當(dāng)于是人的身份證號(hào)碼,對(duì)于網(wǎng)絡(luò)傳輸最終都是以MAC地址來(lái)實(shí)現(xiàn)的。
我們來(lái)梳理一下每層模型的職責(zé):
1. 應(yīng)用層:定義數(shù)據(jù)格式,并按照對(duì)應(yīng)的格式解讀數(shù)據(jù)
2. 傳輸層:定義端口,確認(rèn)主機(jī)上應(yīng)用程序的身份,并將數(shù)據(jù)包交給對(duì)應(yīng)的應(yīng)用程序
3. 網(wǎng)絡(luò)層:定義IP地址,確認(rèn)主機(jī)所在的網(wǎng)絡(luò)位置,并通過(guò)IP進(jìn)行MAC尋址,對(duì)外網(wǎng)數(shù)據(jù)包進(jìn)行路由轉(zhuǎn)發(fā)
4. 鏈路層:以字節(jié)為單位對(duì)0和1進(jìn)行分組,定義數(shù)據(jù)幀,確認(rèn)主機(jī)的物理地址,傳輸數(shù)據(jù)
以上內(nèi)容是對(duì)TCP/IP四層模型做了簡(jiǎn)單的介紹,而實(shí)際上每一層模型都有很多協(xié)議,每個(gè)協(xié)議要做的事情也很多,但我們首先得有一個(gè)清晰的脈絡(luò)結(jié)構(gòu),把基本的作用都掌握了,然后再去豐富細(xì)節(jié),就比較好理解了。