網(wǎng)絡(luò)層的傳輸單位是數(shù)據(jù)報(bào)(包),任務(wù)是為不同網(wǎng)絡(luò)主機(jī)之間提供通信服務(wù),把數(shù)據(jù)從源端傳到目的端。使用 IP 地址來(lái)標(biāo)識(shí)網(wǎng)絡(luò)上的設(shè)備。
?一.計(jì)算機(jī)網(wǎng)絡(luò)的分層
在計(jì)算機(jī)網(wǎng)絡(luò)體系中,采用層次化的思想,將通信協(xié)議中必要的功能進(jìn)行分層,每一層都接收由它下一層所提供的特定服務(wù),并且負(fù)責(zé)為自己的上一層提供特定的服務(wù)。上下層之間進(jìn)行交互所遵循的約定叫做『接口』,同一層之間進(jìn)行交互所遵循的約定叫做『協(xié)議』。
- 『接口』即相鄰兩層之間交換位置的連接點(diǎn),是上層使用下層服務(wù)的入口。
- 『協(xié)議』即通信雙方所做的一些約定,比如怎么開(kāi)始通信、信息的格式與順序、怎么結(jié)束通信等。協(xié)議非常重要,我們?cè)趯W(xué)習(xí)計(jì)算機(jī)網(wǎng)絡(luò)過(guò)程中,重點(diǎn)就是理解各種協(xié)議,如 HTTP、DNS、TCP 等。只有通信雙方同時(shí)支持相同協(xié)議,才能進(jìn)行通信。就像人類(lèi)之間通信交流一樣,假如一個(gè)人只會(huì)英文,那么給他說(shuō)中文,就會(huì)不知所云。
計(jì)算機(jī)網(wǎng)絡(luò)為什么要采用分層模型呢?主要原因在于分層存在以下優(yōu)勢(shì):
- 分層是軟件設(shè)計(jì)中的一個(gè)常見(jiàn)套路,它也是一種常見(jiàn)解耦的思路,可以有效減少程序中出現(xiàn)『牽一發(fā)而動(dòng)全身』的情況。將每個(gè)分層獨(dú)立使用,靈活性更強(qiáng),即使系統(tǒng)中某些分層發(fā)生變化,也不會(huì)波及整個(gè)系統(tǒng)。
- 分層也可以將復(fù)雜的網(wǎng)絡(luò)問(wèn)題分解為許多比較小的、界線(xiàn)比較清晰簡(jiǎn)單的部分來(lái)處理,從而更易于單獨(dú)實(shí)現(xiàn)每個(gè)分層的協(xié)議,并界定各個(gè)分層的具體責(zé)任和義務(wù)。
當(dāng)然也不是分層越多越好,即分層可能也存在一些劣勢(shì),比如有時(shí)可能會(huì)過(guò)分模塊化,使處理變得更加沉重以及不同模塊可能要處理相似的邏輯,從而出現(xiàn)冗余等問(wèn)題。
二.常見(jiàn)參考模型
在計(jì)算機(jī)通信的初期,每家計(jì)算機(jī)廠商都生產(chǎn)各自的網(wǎng)絡(luò)產(chǎn)品來(lái)實(shí)現(xiàn)計(jì)算機(jī)通信。而由于缺乏標(biāo)準(zhǔn)化,不同廠商設(shè)定的各種協(xié)議之間不兼容,無(wú)法跨廠商通信,非常不方便。
為了解決上述問(wèn)題,國(guó)際標(biāo)準(zhǔn)化組織 ISO 制定了一個(gè)國(guó)際標(biāo)準(zhǔn) OSI 參考模型 ,將計(jì)算機(jī)網(wǎng)絡(luò)體系劃分為 7 層,對(duì)通信系統(tǒng)進(jìn)行了標(biāo)準(zhǔn)化。此模型概念清晰,但非常復(fù)雜,實(shí)現(xiàn)較為困難,并沒(méi)有得到普及。
出于實(shí)用的目的, ARPA 提出了 TCP/IP 參考模型(其實(shí)比 OSI 模型出現(xiàn)更早),將計(jì)算機(jī)網(wǎng)絡(luò)劃分為 4 層。此模型在標(biāo)準(zhǔn)制定過(guò)程中將真正能夠?qū)崿F(xiàn)通信的技術(shù)作為首要任務(wù)(更看重的是如何實(shí)現(xiàn),而不是理論),并且一旦發(fā)現(xiàn)有什么問(wèn)題,就及時(shí)修改程序、協(xié)議或相應(yīng)文檔,模型更加簡(jiǎn)潔,且實(shí)用性更強(qiáng),最終成為了業(yè)界標(biāo)準(zhǔn)。但是 TCP/IP 最下面的網(wǎng)絡(luò)接口層概念并不清晰,沒(méi)有什么具體內(nèi)容。
為了方便理解計(jì)算機(jī)網(wǎng)絡(luò)原理,在計(jì)算機(jī)網(wǎng)絡(luò)教程中,通常綜合 OSI 7 層模型和 TCP/IP 4 層模型的優(yōu)缺點(diǎn),將計(jì)算機(jī)網(wǎng)絡(luò)分為 5 層,既簡(jiǎn)潔又能將概念闡述更加清楚(當(dāng)然實(shí)際上應(yīng)用的還是 TCP/IP 模型)。
幾種計(jì)算機(jī)網(wǎng)絡(luò)參考模型的示意圖如下:
三.5層參考模型簡(jiǎn)介
- 應(yīng)用層應(yīng)用層的傳輸單位是報(bào)文,任務(wù)是完成特定網(wǎng)絡(luò)應(yīng)用,比如傳輸電子郵件、傳送文件、請(qǐng)求與響應(yīng) Web 文檔等具體網(wǎng)絡(luò)功能,用戶(hù)直接接觸到的就是這一層,常見(jiàn)協(xié)議有 HTTP、FTP、DNS、SMTP。
- 傳輸層傳輸層的傳輸單位是報(bào)文段,任務(wù)是為不同進(jìn)程之間提供通信服務(wù)。一臺(tái)主機(jī)上可能運(yùn)行著很多進(jìn)程(比如用戶(hù)可能一邊聽(tīng)著歌,一邊聊著天,運(yùn)行著不同的進(jìn)程,那么就需要知道數(shù)據(jù)應(yīng)該發(fā)送給哪個(gè)進(jìn)程),通過(guò)端口號(hào)進(jìn)行區(qū)分。常見(jiàn)協(xié)議有 TCP、UDP。
- 網(wǎng)絡(luò)層網(wǎng)絡(luò)層的傳輸單位是數(shù)據(jù)報(bào)(包),任務(wù)是為不同網(wǎng)絡(luò)主機(jī)之間提供通信服務(wù),把數(shù)據(jù)從源端傳到目的端。使用 IP 地址來(lái)標(biāo)識(shí)網(wǎng)絡(luò)上的設(shè)備。除了尋址之外還需要進(jìn)行路由選擇,從主機(jī) A 向主機(jī) B 傳輸數(shù)據(jù)的時(shí)候,有很多條可以選擇的路由,網(wǎng)絡(luò)層利用相應(yīng)的路由算法計(jì)算出?條合適的道路。常見(jiàn)協(xié)議有 IP、ICMP。
- 數(shù)據(jù)鏈路層數(shù)據(jù)鏈路層的傳輸單位是幀,任務(wù)是為物理層面上互連的、同一鏈路上的不同節(jié)點(diǎn)(主機(jī)或路由器)之間提供通信服務(wù)。例如與 1 個(gè)以太網(wǎng)相連的 2 個(gè)節(jié)點(diǎn)之間的通信。使用 mac 地址來(lái)標(biāo)識(shí)網(wǎng)絡(luò)上的設(shè)備。數(shù)據(jù)鏈路層還提供流量控制、差錯(cuò)控制等功能。網(wǎng)絡(luò)把許多計(jì)算機(jī)連接在一起,而互聯(lián)網(wǎng)則把許多網(wǎng)絡(luò)通過(guò)路由器連接在一起,因此互聯(lián)網(wǎng)也稱(chēng)為『網(wǎng)絡(luò)的網(wǎng)絡(luò)』。通常把單個(gè)的網(wǎng)絡(luò)簡(jiǎn)化成一條鏈路,數(shù)據(jù)鏈路層服務(wù)于同一個(gè)鏈路中的不同節(jié)點(diǎn)。通信鏈路分為多種(如以太網(wǎng)、wifi、電纜接入網(wǎng)),由不同類(lèi)型的物理媒體組成(如光纖、雙絞線(xiàn)、同軸電纜)。不同網(wǎng)絡(luò)主機(jī)之間可能相距很遠(yuǎn),之間跨越很多條鏈路。就像我們從北京公司去南京老家,可能會(huì)經(jīng)過(guò)高速公路、城市道路、鄉(xiāng)村小道等不同道路。
- 物理層物理層的傳輸單位是?特,任務(wù)是透明的傳輸比特流(0/1 信號(hào))。(透明傳輸就是不管所傳數(shù)據(jù)是什么樣的比特組合,都應(yīng)當(dāng)能在鏈路上傳送)
當(dāng)兩臺(tái)計(jì)算機(jī)在進(jìn)行通信的過(guò)程中,數(shù)據(jù)將會(huì)經(jīng)過(guò)計(jì)算機(jī)網(wǎng)絡(luò)的不同層級(jí)。發(fā)送端在層與層之間傳輸數(shù)據(jù)時(shí),每經(jīng)過(guò)一層都會(huì)添加一個(gè)該層所屬的首部信息(封裝),比如傳輸層會(huì)加上源端口號(hào)和目的端口號(hào)等信息、網(wǎng)絡(luò)層會(huì)加上源 IP 地址和目標(biāo) IP 地址等信息、數(shù)據(jù)鏈路層會(huì)加上源 MAC 地址和目標(biāo) MAC 地址。反之,接收端在層與層傳輸數(shù)據(jù)時(shí),每經(jīng)過(guò)一層時(shí)會(huì)把對(duì)應(yīng)的首部消去(解封裝)。
這就類(lèi)似于寄快遞,商家寄件的時(shí)候會(huì)加上包裝盒、包裝袋、寄件信息貼紙等,一層層包裝,而消費(fèi)者收件的時(shí)候則需要一層層去掉包裝,得到最終的商品。
參考文獻(xiàn):
- 《圖解 HTTP》
- 《圖解 TCP/IP》
- 《計(jì)算機(jī)網(wǎng)絡(luò)(第 7 版)》
我是一楓,非科班程序猿,互聯(lián)網(wǎng)寒冬之際拿到了字節(jié)、美團(tuán)、攜程等 offer。在準(zhǔn)備校招過(guò)程中整理了一份《后端校招面試指南》,內(nèi)容包括 JAVA 基礎(chǔ)、并發(fā)、JVM、MySQL、redis、MQ、Spring、計(jì)算機(jī)網(wǎng)絡(luò)、操作系統(tǒng)等,非常全面!?