劉超《趣談網(wǎng)絡(luò)協(xié)議》第一講|為什么要學(xué)習(xí)網(wǎng)絡(luò)協(xié)議的學(xué)習(xí)筆記

計(jì)算機(jī)語(yǔ)言作為程序員控制一臺(tái)計(jì)算機(jī)工作的協(xié)議,具備了協(xié)議的三要素。
1、語(yǔ)法,就是這一段內(nèi)容要符合一定的規(guī)則和格式。例如,括號(hào)要成對(duì),結(jié)束要使用分號(hào)等。
2、語(yǔ)義,就是這一段內(nèi)容要代表某種意義。例如數(shù)字減去數(shù)字是有意義的,數(shù)字減去文本一般來(lái)說(shuō)就沒(méi)有意義。
3、順序,就是先干啥,后干啥。例如,可以先加上某個(gè)數(shù)值,然后再減去某個(gè)數(shù)值。
互聯(lián)網(wǎng)世界的運(yùn)行過(guò)程:
1、在瀏覽器中輸入地址:https://www.kaola.com(URL,不知道地址)
通過(guò)地址簿查找協(xié)議 DNS 或者更精準(zhǔn)的HTTPDNS查找
2、得到IP地址:106.114.138.24。(互聯(lián)網(wǎng)的門(mén)牌號(hào))
開(kāi)始打包請(qǐng)求,普通:HTTP協(xié)議,購(gòu)物的加密傳輸:HTTPS

DNS、HTTP、HTTPS 所在的層我們稱為應(yīng)用層。封裝之后瀏覽器將應(yīng)用層的包傳遞下去。
3、傳輸層:a.無(wú)連接的協(xié)議UDP b.面向連接的協(xié)議TCP(支付使用TCP)
面向連接:TCP 會(huì)保證這個(gè)包能夠到達(dá)目的地。如果不能到達(dá),就會(huì)重新發(fā)送,直至到達(dá)。

TCP 協(xié)議里面會(huì)有兩個(gè)端口,一個(gè)是瀏覽器監(jiān)聽(tīng)的端口,一個(gè)是電商的服務(wù)器監(jiān)聽(tīng)的端口。操作系統(tǒng)往往通過(guò)端口來(lái)判斷,它得到的包應(yīng)該給哪個(gè)進(jìn)程。
4、網(wǎng)絡(luò)層:IP協(xié)議,在 IP 協(xié)議里面會(huì)有源 IP 地址,即瀏覽器所在機(jī)器的 IP 地址和目標(biāo) IP 地址,也即電商網(wǎng)站所在服務(wù)器的 IP 地址。

根據(jù)目標(biāo)IP判斷是本地還是外地。
電商網(wǎng)站為外地,則去網(wǎng)關(guān)(類似于去國(guó)外的海關(guān)),操作系統(tǒng)啟動(dòng)時(shí),DHCP協(xié)議就配置IP地址以及默認(rèn)的網(wǎng)關(guān)IP地址192.168.1.1
5、MAC層:ARP協(xié)議(吼一聲)告知IP地址給網(wǎng)關(guān),網(wǎng)關(guān)分配MAC地址

6、網(wǎng)關(guān):網(wǎng)關(guān)收到包之后,會(huì)根據(jù)自己的知識(shí),判斷下一步應(yīng)該怎么走。網(wǎng)關(guān)往往是一個(gè)路由器,到某個(gè) IP 地址應(yīng)該怎么走,這個(gè)叫作路由表。

路由器有點(diǎn)像玄奘西行路過(guò)的一個(gè)個(gè)國(guó)家的一個(gè)個(gè)城關(guān)。每個(gè)城關(guān)都連著兩個(gè)國(guó)家,每個(gè)國(guó)家相當(dāng)于一個(gè)局域網(wǎng),在每個(gè)國(guó)家內(nèi)部,都可以使用本地的地址 MAC 進(jìn)行通信。
一旦跨越城關(guān),就需要拿出 IP 頭來(lái),里面寫(xiě)著貧僧來(lái)自東土大唐(就是源 IP 地址),欲往西天拜佛求經(jīng)(指的是目標(biāo) IP 地址)。路過(guò)寶地,借宿一晚,明日啟行,請(qǐng)問(wèn)接下來(lái)該怎么走啊?
城關(guān)往往是知道這些“知識(shí)”的,因?yàn)槌顷P(guān)和臨近的城關(guān)也會(huì)經(jīng)常溝通。到哪里應(yīng)該怎么走,這種溝通的協(xié)議稱為路由協(xié)議,常用的有OSPF和BGP。當(dāng)網(wǎng)絡(luò)包知道了下一步去哪個(gè)城關(guān),有會(huì)通過(guò)MAC地址再去下一個(gè)城關(guān),直到最后一個(gè)城關(guān)。
到達(dá)后,目標(biāo)服務(wù)器會(huì)回復(fù)一個(gè)MAC地址,網(wǎng)絡(luò)包會(huì)通過(guò)這個(gè)地址找到目標(biāo)服務(wù)器,取下MAC取下MAC頭來(lái),發(fā)送給操作系統(tǒng)的網(wǎng)絡(luò)層。在IP頭里寫(xiě)上一層封裝的TCP協(xié)議,交給傳輸層即TCP層。
然后,會(huì)沿著來(lái)的方向回復(fù)一個(gè)信息(報(bào)平安),如果過(guò)了一段時(shí)間還沒(méi)收到,TCP層會(huì)重新發(fā)送這個(gè)包,直到收到回復(fù)的信息。
這個(gè)重試絕非你的瀏覽器重新將下單這個(gè)動(dòng)作重新請(qǐng)求一次。對(duì)于瀏覽器來(lái)講,就發(fā)送了一次下單請(qǐng)求,TCP 層不斷自己悶頭重試。除非 TCP 這一層出了問(wèn)題,例如連接斷了,才輪到瀏覽器的應(yīng)用層重新發(fā)送下單請(qǐng)求。? ? ???
7、當(dāng)網(wǎng)絡(luò)包平安到達(dá) TCP 層之后,TCP 頭中有目標(biāo)端口號(hào),通過(guò)這個(gè)端口號(hào),可以找到電商網(wǎng)站的進(jìn)程正在監(jiān)聽(tīng)這個(gè)端口號(hào),假設(shè)一個(gè) Tomcat,將這個(gè)包發(fā)給電商網(wǎng)站。

電商網(wǎng)站的進(jìn)程得到HTTP請(qǐng)求的內(nèi)容,知道了要買(mǎi)東西,Tomact會(huì)負(fù)責(zé)統(tǒng)籌處理這個(gè)請(qǐng)求,然后通過(guò)RPC調(diào)用(即遠(yuǎn)程過(guò)程調(diào)用的方式來(lái)實(shí)現(xiàn))。
當(dāng)接待員發(fā)現(xiàn)相應(yīng)的部門(mén)都處理完畢,就回復(fù)一個(gè) HTTPS 的包,告知下單成功。這個(gè) HTTPS 的包,會(huì)像來(lái)的時(shí)候一樣,經(jīng)過(guò)千難萬(wàn)險(xiǎn)到達(dá)你的個(gè)人電腦,最終進(jìn)入瀏覽器,顯示支付成功。
整體框架圖:
