從宏觀上理解計(jì)算機(jī)網(wǎng)絡(luò)模型
今天是輕解計(jì)算機(jī)網(wǎng)絡(luò)系列第一解,從宏觀上了解網(wǎng)絡(luò)。主要介紹網(wǎng)絡(luò)分成模型、基本傳輸過程。
學(xué)習(xí)任何一種新技術(shù)都應(yīng)該是這樣的順序,先從宏觀上了解這門技術(shù)的基本原理和作用。這就好像生物學(xué)家研究一種生物,不能上來就解刨吧,一定是從整體上觀察了這種生物的體貌和形態(tài)。這里的宏觀就像是一具動(dòng)物骨骼模型、神經(jīng)模型、肌肉模型,一直擺在那里,到最后裝進(jìn)科學(xué)家的腦袋里。
學(xué)技術(shù)切忌直接扣到一個(gè)細(xì)節(jié)里,扣細(xì)節(jié),既可能是一絲不茍的工匠精神的提現(xiàn),也可能直接被魔鬼代入深淵。我們是坐在天上的直升飛機(jī)找路比較容易,還是一頭鉆進(jìn)一個(gè)胡同兒里比較容易呢。
今天要講的網(wǎng)絡(luò)模型,就像是生物學(xué)上的整體動(dòng)物模型。
分層網(wǎng)絡(luò)模型
為了讓全世界的計(jì)算機(jī)有效的互聯(lián)起來,就要制定標(biāo)準(zhǔn),分層模型就是這種標(biāo)準(zhǔn)的定義,有了這種標(biāo)準(zhǔn),全世界的軟硬件開發(fā)者才能開發(fā)出通用的程序來,要不然就像現(xiàn)在的手機(jī)充電口,蘋果就是要用它獨(dú)特的雷電接口,我要是再有一部安卓手機(jī),就要有兩條充電線。
有兩種網(wǎng)絡(luò)模型,一種是 OSI 7層模型,還有一種是 TCP/IP 模型,前者是一種概念話的模型,后者是事實(shí)上的標(biāo)準(zhǔn)。事實(shí)標(biāo)準(zhǔn)也就是當(dāng)今網(wǎng)絡(luò)世界里普遍使用的模型。
OSI 7層模型
國際標(biāo)準(zhǔn)化組織提出了一種概念化的網(wǎng)絡(luò)模型,開放式系統(tǒng)互聯(lián)模型(Open System Interconnection Model),簡稱 OSI 模型。
自上而下依次為應(yīng)用層、表示層、會(huì)話層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層、物理層。
每一層都有一種或多種協(xié)議,這些協(xié)議都有標(biāo)準(zhǔn)的 RFC 文檔,可以到https://www.rfc-editor.org/retrieve/ 這里查看各個(gè)協(xié)議的最原始說明。
應(yīng)用層
應(yīng)用層提供為應(yīng)用軟件而設(shè)計(jì)的接口,以設(shè)置與另一應(yīng)用軟件之間的通信。例如:HTTP、HTTPS、FTP、Telnet、SSH、SMTP、POP3等。
表示層
表示層把數(shù)據(jù)轉(zhuǎn)換為能與接收者的系統(tǒng)格式兼容并適合傳輸?shù)母袷健?/p>
會(huì)話層
會(huì)話層負(fù)責(zé)在數(shù)據(jù)傳輸中設(shè)置和維護(hù)計(jì)算機(jī)網(wǎng)絡(luò)中兩臺(tái)計(jì)算機(jī)之間的通信連接。
傳輸層
傳輸層把傳輸表頭(TH)加至數(shù)據(jù)以形成數(shù)據(jù)包。傳輸表頭包含了所使用的協(xié)議等發(fā)送信息。例如:傳輸控制協(xié)議(TCP)等。
網(wǎng)絡(luò)層
網(wǎng)絡(luò)層決定數(shù)據(jù)的路徑選擇和轉(zhuǎn)寄,將網(wǎng)絡(luò)表頭(NH)加至數(shù)據(jù)包,以形成分組。網(wǎng)絡(luò)表頭包含了網(wǎng)絡(luò)資料。例如:互聯(lián)網(wǎng)協(xié)議(IP)等。
數(shù)據(jù)鏈路層
數(shù)據(jù)鏈路層負(fù)責(zé)網(wǎng)絡(luò)尋址、錯(cuò)誤偵測(cè)和改錯(cuò)。當(dāng)表頭和表尾被加至數(shù)據(jù)包時(shí),會(huì)形成信息框。數(shù)據(jù)鏈表頭(DLH)是包含了物理地址和錯(cuò)誤偵測(cè)及改錯(cuò)的方法。數(shù)據(jù)鏈表尾(DLT)是一串指示數(shù)據(jù)包末端的字符串。例如以太網(wǎng)、無線局域網(wǎng)(Wi-Fi)和通用分組無線服務(wù)(GPRS)等。
分為兩個(gè)子層:邏輯鏈路控制(logical link control,LLC)子層和介質(zhì)訪問控制(Media access control,MAC)子層。
物理層
物理層在局部局域網(wǎng)上傳送數(shù)據(jù)幀,它負(fù)責(zé)管理電腦通信設(shè)備和網(wǎng)絡(luò)媒體之間的互通。包括了針腳、電壓、線纜規(guī)范、集線器、中繼器、網(wǎng)卡、主機(jī)接口卡等。
OSI 模型是國際標(biāo)準(zhǔn)模型,是指導(dǎo)互聯(lián)網(wǎng)模型的概念標(biāo)準(zhǔn)。而在實(shí)際的設(shè)計(jì)實(shí)現(xiàn)過程中,最后形成了 TCP/IP 四層模型結(jié)構(gòu)。我們?cè)谄綍r(shí)的一些書籍、文章中最常看到的也是 4 層模型,而非7 層模型。
TCP/IP 4層模型
TCP/IP 模型實(shí)際上并不單單指 TCP 和 IP,實(shí)際上這一個(gè)協(xié)議簇,還包含了其他的一些協(xié)議,比如 UDP、ICMP、IGMP 等。
TCP/IP 模型是事實(shí)上的標(biāo)準(zhǔn)模型,在 7 層模型的基礎(chǔ)上將最上面三層的應(yīng)用層、表示層、會(huì)話層統(tǒng)一為應(yīng)用層,將數(shù)據(jù)鏈路層和物理層統(tǒng)一為鏈路層或者叫網(wǎng)絡(luò)接口層。
實(shí)際應(yīng)用中還是以 4 層模型為準(zhǔn),畢竟這才是事實(shí)上的標(biāo)準(zhǔn)。還有一種 5 層模型的說法,實(shí)際上就是把 7 層中的應(yīng)用層、表示層、會(huì)話層合并為應(yīng)用層,其他層保持不變。
應(yīng)用層
將7層模型中最上層的應(yīng)用層、表示層、會(huì)話層合并。
應(yīng)用層主要運(yùn)行我們平時(shí)經(jīng)常使用的一些應(yīng)用,比如 FTP、SSH、SMTP、HTTP、Telnet,也是我們開發(fā)過程中經(jīng)常會(huì)打交道的,比如 HTTP,HTTP 在傳輸層仍然使用的是 TCP 協(xié)議,但是將 TCP 的細(xì)節(jié)做了封裝。
傳輸層
傳輸層主要就是 TCP 和 UDP 這兩個(gè)協(xié)議,負(fù)責(zé)將應(yīng)用層的用戶數(shù)據(jù)傳輸?shù)侥康亩恕?/p>
TCP 是有狀態(tài)高可靠的的傳輸協(xié)議,有三次握手和重傳機(jī)制最大程度上保證數(shù)據(jù)能夠順利的到達(dá)目的端。
UDP 協(xié)議是無狀態(tài)的高性能的協(xié)議,因?yàn)樗槐WC數(shù)據(jù)能夠順利的到達(dá)目的端,所以不用三次握手建立連接,傳一次,數(shù)據(jù)到不到就不管了。
其實(shí)從傳輸層開始,往下每一層都要負(fù)責(zé)將數(shù)據(jù)傳輸?shù)侥康亩说囊徊糠止ぷ?,只不過下面兩層根據(jù)其特性和主要作用又分為了網(wǎng)絡(luò)層和鏈路層。
網(wǎng)絡(luò)層
網(wǎng)絡(luò)層最主要的協(xié)議就是 IP 協(xié)議,負(fù)責(zé)將上一層「傳輸層」過來的 TCP 包或 UDP 包封裝成 IP 數(shù)據(jù)報(bào)。通過 IP 協(xié)議,根據(jù) IP 地址可以定位到一個(gè)網(wǎng)絡(luò)主機(jī)。
除了 IP 協(xié)議外,ICMP 協(xié)議、IGMP 協(xié)議也工作在網(wǎng)絡(luò)層。
ARP 和 RARP 協(xié)議也認(rèn)為工作在網(wǎng)絡(luò)層。
鏈路層
將 7 層模型中的最底兩層數(shù)據(jù)鏈路層和物理層合并為鏈路層。
鏈路層也叫做網(wǎng)絡(luò)接口層,它由多種網(wǎng)絡(luò)接口標(biāo)準(zhǔn)和對(duì)應(yīng)的驅(qū)動(dòng)程序組成。一般我們說的數(shù)據(jù)鏈路層都是以太網(wǎng)鏈路層。
數(shù)據(jù)發(fā)送和接收過程
數(shù)據(jù)包放封裝和解封裝過程
TCP/IP 模型每個(gè)層都有各自的功能和分工,當(dāng)有用戶數(shù)據(jù)想要發(fā)送給另一臺(tái)設(shè)備的時(shí)候,數(shù)據(jù)自上而下,從應(yīng)用層向鏈路層傳遞有一個(gè)復(fù)雜的過程。
以 Telnet 為例,Telnet 在傳輸層是使用 TCP 協(xié)議的。
數(shù)據(jù)從應(yīng)用層進(jìn)入,到達(dá)傳輸層,添加上 TCP首部,將數(shù)據(jù)加工成 TCP 段,稱為 Segment。這是為了保證數(shù)據(jù)的可靠性。
接著數(shù)據(jù)到達(dá)網(wǎng)絡(luò)層,在網(wǎng)絡(luò)層使用 IP 協(xié)議,被添加上 IP 首部,將數(shù)據(jù)加工成 IP數(shù)據(jù)報(bào),稱為 datagram 。經(jīng)過網(wǎng)絡(luò)層 IP 協(xié)議的加工,指定目標(biāo)地址和 MAC 地址,保證數(shù)據(jù)準(zhǔn)確的發(fā)送到目標(biāo)機(jī)器。
接著數(shù)據(jù)到達(dá)鏈路層,添加上以太網(wǎng)頭部,將數(shù)據(jù)加工成以太網(wǎng)幀,稱為 frame,包含了網(wǎng)卡等硬件相關(guān)的數(shù)據(jù)。
這就好比是一個(gè)工廠的流水線作業(yè),每一層就像是一個(gè)流水線上的一個(gè)工人,零件到了每個(gè)工人那里,就在上面加一些東西,直到最后一個(gè)環(huán)節(jié)才變成成品。
無論是 Telnet 還是 HTTP,都至少涉及到兩臺(tái)設(shè)備才能稱之為網(wǎng)絡(luò)互連,那發(fā)送方有一個(gè)數(shù)據(jù)自應(yīng)用層向底層鏈路層的加工過程,對(duì)應(yīng)的,在數(shù)據(jù)接收方,有一個(gè)數(shù)據(jù)從鏈路層向應(yīng)用層解析的過程。這中間可能經(jīng)歷了漫長的傳輸介質(zhì),比如光纖,還可能有若干了中間設(shè)備,比如路由器、交換機(jī)等等。要保證數(shù)據(jù)在這么復(fù)雜的網(wǎng)絡(luò)環(huán)境中可靠、準(zhǔn)確的發(fā)送到目標(biāo)機(jī)器,就是靠的 TCP、IP、以太網(wǎng)協(xié)議精巧的設(shè)計(jì)。
通過上面的數(shù)據(jù)自上而下的加工流程圖可以看出,無論網(wǎng)絡(luò)層是不是用的 IP 協(xié)議,無論傳輸層用的是 TCP 還是 UDP ,最后的成品實(shí)際上就是一個(gè)以太網(wǎng)幀。
數(shù)據(jù)在網(wǎng)絡(luò)上的傳輸過程
上面說了數(shù)據(jù)在發(fā)送端上經(jīng)過層層加頭封裝,以及到達(dá)目的端經(jīng)過層層去頭解封裝的過程。但數(shù)據(jù)包很少有機(jī)會(huì)是直接從發(fā)送端一步到達(dá)目的端的,大部分都要在紛繁復(fù)雜的網(wǎng)絡(luò)世界中穿梭游走,最終一步步的到達(dá)目的端。
這里先不說域名的事兒。
在發(fā)送數(shù)據(jù)的時(shí)候,絕大多數(shù)的情況下發(fā)送端只知道目的端的 IP 和 接收端口,這也是傳輸層(TCP或 UDP)必須的,經(jīng)過層層包裝后,拿以太網(wǎng)來說,真正跑到網(wǎng)絡(luò)上的數(shù)據(jù)最終必須是一個(gè)完整的以太網(wǎng)幀,而以太網(wǎng)幀中必須要用目的端的 MAC 地址。
當(dāng)發(fā)送端開始組裝數(shù)據(jù)的時(shí)候,首先會(huì)檢查目的IP 和自身的IP 是否處在同一個(gè)網(wǎng)絡(luò)中。計(jì)算方式就是用 IP 地址和子網(wǎng)掩碼進(jìn)行「與運(yùn)算」。
如果得到的網(wǎng)絡(luò)地址是一致的,說明在同一個(gè)網(wǎng)絡(luò)中,這時(shí)發(fā)送端檢查自己的 ARP 表中是否有目的 IP 對(duì)應(yīng)的 MAC 地址。如果有的話,直接將 MAC 地址組裝到以太網(wǎng)數(shù)據(jù)幀中,發(fā)送數(shù)據(jù)幀,數(shù)據(jù)就能被目的端順利接收。如果ARP 表中不存在目的IP對(duì)應(yīng)的 MAC 地址,則向本網(wǎng)絡(luò)廣播發(fā)送 ARP 請(qǐng)求,ARP 請(qǐng)求會(huì)帶著目的IP地址,意思就是詢問“誰的IP地址是這個(gè),請(qǐng)回復(fù)你的MAC地址給我”,網(wǎng)絡(luò)中的主機(jī)看到后,如果IP是自己的,就返回給發(fā)送端一個(gè)ARP回復(fù),回復(fù)中帶著自己的MAC地址,發(fā)送端拿到MAC地址后,先存入本地的ARP表,然后組裝以太網(wǎng)幀,將數(shù)據(jù)發(fā)送。
如果得到的網(wǎng)絡(luò)地址不一致,說明目的端不在本網(wǎng)絡(luò)中,那就要通過各種路由器、交換機(jī)等中間設(shè)備了。要發(fā)送到其他網(wǎng)絡(luò),就要經(jīng)過路由器,路由器中維護(hù)著一張路由表,主要存放網(wǎng)絡(luò)、主機(jī)與下一跳的對(duì)應(yīng)關(guān)系。例如下表這樣:
目標(biāo)子網(wǎng)掩碼下一跳網(wǎng)絡(luò)接口192.168.8.0255.255.255.00.0.0.0en00.0.0.00.0.0.0192.168.8.1en1
大致的意思就是如果收到一個(gè)數(shù)據(jù)報(bào),在當(dāng)前路由器的路由表中尋找,一般目標(biāo)都是一個(gè)網(wǎng)絡(luò)地址(標(biāo)明一個(gè)子網(wǎng)),把具體數(shù)據(jù)包的IP地址和當(dāng)前路由表的子網(wǎng)掩碼進(jìn)行與操作,如果得到的結(jié)果和路由表目標(biāo)欄一直,就轉(zhuǎn)發(fā)給這個(gè)表目的下一跳地址,從網(wǎng)絡(luò)接口欄所記錄的接口發(fā)出(也就是路由器上的網(wǎng)口)。
如果下一跳地址是0.0.0.0 ,表示這個(gè)目的IP地址就在當(dāng)前網(wǎng)絡(luò)中。那就不用路由器轉(zhuǎn)發(fā)了,拿到目的IP的MAC地址,就可以直接發(fā)送了(獲取MAC地址的方法,前面說過了,先查ARP表,沒有的話,再用ARP廣播請(qǐng)求獲取)。
如果下一跳不是0.0.0.0,表示目的IP不是本網(wǎng)絡(luò)的地址,就發(fā)給下一跳的地址。
如果在路由表中都沒有找到匹配的目標(biāo)網(wǎng)絡(luò),那就看有沒有配置默認(rèn)條目了,默認(rèn)條目也就是目標(biāo)是0.0.0.0的條目,表示任意的IP都可以通過此條目的下一跳(也就是默認(rèn)網(wǎng)關(guān))地址轉(zhuǎn)發(fā)出去。
如果在路由表中沒有找到任何匹配的目標(biāo)網(wǎng)絡(luò),并且沒有設(shè)置默認(rèn)條目,那就直接將數(shù)據(jù)包丟棄,并返回一個(gè) 主機(jī)不可達(dá)的 ICMP 請(qǐng)求。
常用的幾種協(xié)議
有幾種協(xié)議是我們應(yīng)該掌握的,這里大概介紹一下,后面會(huì)慢慢解刨。
應(yīng)用層協(xié)議
必須掌握的是HTTP 協(xié)議以及與之對(duì)應(yīng)的 HTTPS 協(xié)議。這是每一個(gè)開發(fā)人員必須掌握的協(xié)議,因?yàn)槲覀儫o時(shí)無刻不在用到它。
其他的 FTP、SMTP、SSH等協(xié)議,了解一下就好了。
傳輸層協(xié)議
必須掌握的是 TCP協(xié)議和 UDP 協(xié)議,HTTP使用的是 TCP 傳輸,以及各種RPC框架、中間件大部分都是包裝了 TCP 協(xié)議的。
TCP 協(xié)議是有連接的可靠的傳輸協(xié)議,除非網(wǎng)絡(luò)出現(xiàn)問題,可保證數(shù)據(jù)正常到達(dá),因?yàn)橛兄貍鳈C(jī)制。UDP 是無連接的不可靠的傳輸協(xié)議,不保證數(shù)據(jù)能順利達(dá)到,只要發(fā)出去就行了,沒有重傳機(jī)制等。
網(wǎng)絡(luò)層協(xié)議
必須掌握的是 IP 協(xié)議,從上層傳遞下來的包,無論是 TCP 協(xié)議還是 UDP 協(xié)議,最終都會(huì)搭載到 IP 協(xié)議之上。
ARP 和 RARP 協(xié)議也算是網(wǎng)絡(luò)層協(xié)議,這兩個(gè)協(xié)議負(fù)責(zé)地址轉(zhuǎn)換。
ARP 協(xié)議根據(jù) IP 地址得到 MAC 地址,RARP 協(xié)議根據(jù) MAC 地址得到 IP 地址。
鏈路層協(xié)議
拿以太網(wǎng)位列,鏈路層協(xié)議一般就是指以太網(wǎng)幀協(xié)議。
總結(jié)
1、 我們平時(shí)說的網(wǎng)絡(luò)模型一般指的是四層模型,分別是應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、鏈路層;
2、數(shù)據(jù)從應(yīng)用層自頂而下,由應(yīng)用層->傳輸層->網(wǎng)絡(luò)層->鏈路層,經(jīng)過每一層會(huì)搭載一個(gè)對(duì)應(yīng)的協(xié)議,封裝上對(duì)應(yīng)的協(xié)議頭信息,等到了目的端,再自底向上經(jīng)過層層解封裝,最終得到原始數(shù)據(jù);
3、每一個(gè)層都有對(duì)應(yīng)的協(xié)議,每一種協(xié)議都經(jīng)過嚴(yán)密的設(shè)計(jì),都有其特定的協(xié)議頭和獨(dú)特的功能特性;
4、除了這種軟件結(jié)構(gòu)上的設(shè)計(jì)外,數(shù)據(jù)包在網(wǎng)絡(luò)世界中穿梭,還要經(jīng)過各種各樣的設(shè)備,比如路由器、交換機(jī)、集線器等等,一個(gè)數(shù)據(jù)包從發(fā)送端到接收端可能要經(jīng)過多次的封裝和解封裝。
從宏觀上理解計(jì)算機(jī)網(wǎng)絡(luò)模型的評(píng)論 (共 條)
