一、網(wǎng)絡(luò)協(xié)議
到底什么叫網(wǎng)絡(luò)協(xié)議呢醉冤?
我們舉個(gè)例子說明:我們國家有很多方言秩霍,一個(gè)人說四川話,另一個(gè)人說東北話蚁阳,如果這兩個(gè)人都不懂對(duì)方的方言铃绒,這兩個(gè)人就沒辦法交流了。于是我們規(guī)定一種官方的語言(普通話)螺捐,大家都用這種語言交流颠悬。
類似的,不同的計(jì)算機(jī)可能安裝了不同的操作系統(tǒng)定血,有不同的硬件等等赔癌,為了讓它們能互相溝通,我們也制定一種官方語言/規(guī)則(協(xié)議)澜沟,只要他們都遵守網(wǎng)絡(luò)協(xié)議的規(guī)則發(fā)送和接收信息灾票,那么他們之間就可以進(jìn)行通信。
網(wǎng)絡(luò)協(xié)議實(shí)際上就是為了解決計(jì)算機(jī)之間的溝通(數(shù)據(jù)交換)問題制定的一系列規(guī)則茫虽、標(biāo)準(zhǔn)或約定刊苍。如圖所示:
我們把與互聯(lián)網(wǎng)相關(guān)聯(lián)的協(xié)議集合起來總稱為TCP/IP。
二濒析、TCP/IP分層模型
TCP/IP協(xié)議族分為以下四層:
如何理解分層模型班缰?我們可以將分層理解為一種封裝。
1.理解分層
應(yīng)用層向用戶提供服務(wù)悼枢。比如HTTP協(xié)議埠忘,它只處理客戶端請(qǐng)求和服務(wù)的反饋,至于如何為兩臺(tái)計(jì)算機(jī)建立連接馒索,它并不關(guān)心莹妒,而是直接把任務(wù)扔給下級(jí)(傳輸層TCP):
以傳輸層TCP為例:它主要功能是提供兩臺(tái)計(jì)算機(jī)之間的數(shù)據(jù)傳輸服務(wù)。
建立連接后上層(老大)要傳什么文件绰上,它是不知道的旨怠。
建立連接的數(shù)據(jù)包怎么走,也就是數(shù)據(jù)在網(wǎng)絡(luò)上的通路的選擇(經(jīng)過多個(gè)中轉(zhuǎn)找到目標(biāo)計(jì)算機(jī))蜈块,它直接甩鍋給下級(jí)去干了(也可以理解為調(diào)用下級(jí)的接口)鉴腻。
所以,分層模型的封裝指的是使用下層提供的服務(wù)(接口)百揭,實(shí)現(xiàn)自己的功能爽哎,為上層提供接口。
2.各層功能
- 應(yīng)用層
應(yīng)用層決定了向用戶提供應(yīng)用服務(wù)時(shí)通信的活動(dòng)器一。 - 傳輸層
傳輸層對(duì)上層應(yīng)用層课锌,提供處于網(wǎng)絡(luò)連接中的兩臺(tái)計(jì)算機(jī)之間的數(shù)據(jù)傳輸。 - 網(wǎng)絡(luò)層
網(wǎng)絡(luò)層用來處理在網(wǎng)絡(luò)上流動(dòng)的數(shù)據(jù)包祈秕。數(shù)據(jù)包是網(wǎng)絡(luò)傳輸?shù)淖钚?shù)據(jù)單位渺贤。該層規(guī)定了通過怎樣的路徑(所謂的傳輸路線)到達(dá)對(duì)方計(jì)
算機(jī)雏胃,并把數(shù)據(jù)包傳送給對(duì)方。 - 鏈路層
用來處理連接網(wǎng)絡(luò)的硬件部分志鞍。包括控制操作系統(tǒng)瞭亮、硬件的設(shè)備驅(qū)動(dòng)、NIC(NetworkInterfaceCard固棚,網(wǎng)絡(luò)適配器统翩,即網(wǎng)卡),及光纖等物理可見部分(還包括連接器等一切傳輸媒介)玻孟。硬件上的范疇均在
鏈路層的作用范圍之內(nèi)唆缴。
3.舉例說明
舉個(gè)例子類比一下網(wǎng)絡(luò)分層:
比如你打電話給你的朋友鳍征。
你和你的朋友類比為應(yīng)用層黍翎。你們之間聊天的話題,說什么艳丛,怎么回復(fù)匣掸。這就是你們(應(yīng)用層)關(guān)心的話題(服務(wù))。至于怎么打通你朋友的電話氮双,你只需要知道朋友的電話號(hào)碼(IP地址)就行了碰酝。其他的就交給電話了,只需要撥號(hào)戴差,朋友那邊就能收到通話請(qǐng)求送爸,接通了,你們就可以通話了暖释。
傳輸層:電話的功能就是用來提供通話服務(wù)的袭厂,它關(guān)心的是,撥號(hào)之后開始呼叫球匕,接通了之后要保證通話暢通纹磺。至于怎么通過電話號(hào)碼找到另一臺(tái)電話,以及聲音怎么傳輸亮曹,它移交給了電話轉(zhuǎn)接中心橄杨。
網(wǎng)絡(luò)層:電話轉(zhuǎn)接中心負(fù)責(zé)聲音怎么傳輸,怎么通過一個(gè)個(gè)轉(zhuǎn)接中心找到這個(gè)號(hào)碼的手機(jī)照卦。物理層的一些處理式矫,比如聲音實(shí)際的轉(zhuǎn)碼,電流的傳輸役耕。它也需要移交給實(shí)際的中轉(zhuǎn)設(shè)備衷佃。
鏈路層:這條通話路線經(jīng)過的各種設(shè)備(信號(hào)塔,衛(wèi)星等)蹄葱,都屬于鏈路層氏义。
4.數(shù)據(jù)流動(dòng)
發(fā)送端在層與層之間傳輸數(shù)據(jù)時(shí)锄列,每經(jīng)過一層時(shí)必定會(huì)被打上一個(gè)該層所屬的首部信息。反之惯悠,接收端在層與層傳輸數(shù)據(jù)時(shí)邻邮,每經(jīng)過一層時(shí)會(huì)把對(duì)應(yīng)的首部消去:
三、使用ARP協(xié)議和路由選擇協(xié)議進(jìn)行通信
1.ARP協(xié)議
ARP協(xié)議參考這篇文章:[圖解]ARP協(xié)議(一)
這里簡(jiǎn)單介紹一下:
之前我們說了克婶,http數(shù)據(jù)在經(jīng)過每一層時(shí)都會(huì)被打上一個(gè)該層所屬的首部信息筒严。比如經(jīng)過傳輸層會(huì)被打上TCP首部(本機(jī)IP地址、目標(biāo)IP地址)情萤,經(jīng)過網(wǎng)絡(luò)層會(huì)被打上IP首部(本機(jī)MAC地址鸭蛙、目標(biāo)MAC地址)。
注意筋岛,這里有一個(gè)問題:我只知道目標(biāo)的IP地址娶视,我不知道MAC地址啊睁宰!那怎么辦呢肪获?ARP協(xié)議就是用來獲取MAC地址的:
首先,在本機(jī)的ARP緩存表查詢有沒有記錄目標(biāo)ip對(duì)應(yīng)的MAC地址柒傻,如果有孝赫,就找到了,沒有的話红符,問一下局域網(wǎng)里面的計(jì)算機(jī)青柄,有沒有哪一個(gè)是這個(gè)ip地址。(方法是向局域網(wǎng)廣播消息预侯,如果有這個(gè)ip地址的電腦收到了消息致开,會(huì)根據(jù)廣播里面的“自我介紹”:
我的ip是XXX,MAC地址是XXX
返回自己的IP和MAC地址)。
但是很少會(huì)遇到要訪問的計(jì)算機(jī)恰好就在局域網(wǎng)的情況雌桑。所有如果本地又沒有記錄喇喉,局域網(wǎng)又沒有。怎么辦呢校坑,這時(shí)候我們之間填寫局域網(wǎng)網(wǎng)關(guān)的MAC地址拣技。(獲取方法同上)。這樣就把數(shù)據(jù)包傳輸給了網(wǎng)關(guān)耍目。我們就不管了(甩鍋~)膏斤。
2.路由選擇協(xié)議
在到達(dá)通信目標(biāo)前的中轉(zhuǎn)過程中,那些計(jì)算機(jī)和路由器等網(wǎng)絡(luò)設(shè)備只能獲悉很粗略的傳輸路線邪驮。
這種機(jī)制稱為路由選擇(routing)莫辨,有點(diǎn)像快遞公司的送貨過程。想要寄快遞的人,只要將自己的貨物送到集散中心沮榜,就可以知道快遞公司是否肯收件發(fā)貨盘榨,該快遞公司的集散中心檢查貨物的送達(dá)地址,明確下站該送往哪個(gè)區(qū)域的集散中心蟆融。接著草巡,那個(gè)區(qū)域的集散中心自會(huì)判斷是否能送到對(duì)方的家中。
四型酥、DNS服務(wù)(域名解析)
計(jì)算機(jī)既可以被賦予IP地址山憨,也可以被賦予主機(jī)名和域名。比如www.hackr.jp
弥喉。
用戶通常使用主機(jī)名或域名來訪問對(duì)方的計(jì)算機(jī)郁竟,而不是直接通過IP地址訪問。因?yàn)榕cIP地址的一組純數(shù)字相比由境,用字母配合數(shù)字的表示形式來指定計(jì)算機(jī)名更符合人類的記憶習(xí)慣棚亩。
但要讓計(jì)算機(jī)去理解名稱,相對(duì)而言就變得困難了藻肄。因?yàn)橛?jì)算機(jī)更擅長(zhǎng)處理一長(zhǎng)串?dāng)?shù)字蔑舞。
為了解決上述的問題拒担,DNS服務(wù)應(yīng)運(yùn)而生嘹屯。DNS協(xié)議提供通過域名查找IP地址,或逆向從IP地址反查域名的服務(wù)从撼。