小菜學(xué)網(wǎng)絡(luò)之TCP/IP協(xié)議棧
本文轉(zhuǎn)載自微信公眾號(hào)「小菜學(xué)編程」,作者fasionchan。轉(zhuǎn)載本文請(qǐng)聯(lián)系小菜學(xué)編程公眾號(hào)。
上一小節(jié),我們學(xué)習(xí)了 OSI 參考模型,見識(shí)到 分層 設(shè)計(jì)思想在通信系統(tǒng)中的重要作用。那么,現(xiàn)行的通信協(xié)議是不是按照 OSI 模型進(jìn)行分層呢?各層的重要協(xié)議都有哪些呢?
目前使用最廣泛的通信協(xié)議是 TCP/IP 系列協(xié)議,但它并不是嚴(yán)格按照 OSI 參考模型設(shè)計(jì)的。實(shí)際上,TCP/IP 早在 OSI 參考模型提出前就開始研發(fā),并逐步發(fā)展至今。
TCP/IP 協(xié)議棧也是分層設(shè)計(jì)的,但與 OSI 不同,它只分為 4 層:
網(wǎng)絡(luò)訪問層
網(wǎng)絡(luò)訪問層 ( network access layer )負(fù)責(zé)管理物理介質(zhì),并提供將數(shù)據(jù)從當(dāng)前節(jié)點(diǎn)傳輸?shù)较乱还?jié)點(diǎn)的能力。因此,網(wǎng)絡(luò)訪問層的功能相當(dāng)于 OSI 中的 物理層 和 數(shù)據(jù)鏈路層 。
不同的通信介質(zhì),有不同的接入設(shè)備,采用的協(xié)議也不同,常見的有:
- Ethernet ,以太網(wǎng)協(xié)議;
- PPP ,點(diǎn)對(duì)點(diǎn)協(xié)議;
- DSL ,用戶數(shù)字線路;
- etc
以 以太網(wǎng)卡 為例,它的通信介質(zhì)是電纜,而通信協(xié)議則是 以太網(wǎng)協(xié)議 ,協(xié)議傳輸單元是 以太網(wǎng)幀 。
網(wǎng)卡電路直接處理電信號(hào),并完成電信號(hào)與比特間的轉(zhuǎn)化。這相當(dāng)于 OSI 物理層的功能,但網(wǎng)卡不會(huì)將物理層功能直接呈現(xiàn)給上層。
實(shí)際上,網(wǎng)卡將數(shù)據(jù)鏈路層中 網(wǎng)絡(luò)尋址 和 錯(cuò)誤偵測(cè) 的功能也一并實(shí)現(xiàn)了,向上層提供以太網(wǎng)幀收發(fā)能力。系統(tǒng)可以調(diào)用網(wǎng)卡驅(qū)動(dòng)發(fā)送以太網(wǎng)幀;網(wǎng)卡接到以太網(wǎng)幀后,也通過驅(qū)動(dòng)程序提交給系統(tǒng)來處理。
總而言之,網(wǎng)絡(luò)訪問層以 幀 為通信單元,負(fù)責(zé)將數(shù)據(jù)發(fā)送到同一網(wǎng)絡(luò)(局域網(wǎng))中的另一節(jié)點(diǎn)。
- 以 幀 為通信單元;
- 實(shí)現(xiàn)局域網(wǎng)通信;
網(wǎng)絡(luò)互連層
網(wǎng)絡(luò)互連層( internet layer )在網(wǎng)絡(luò)訪問層提供的局域網(wǎng)通信能力之上,實(shí)現(xiàn)網(wǎng)際通信能力。該層作用相當(dāng)于 OSI 模型中的網(wǎng)絡(luò)層,同樣以 包 為通信單元,負(fù)責(zé)路徑選擇和數(shù)據(jù)包轉(zhuǎn)發(fā)。
TCP/IP 協(xié)議棧中的 IP 協(xié)議就是該層最核心的協(xié)議,它以 IP 包為通信單元。采用 IP 協(xié)議進(jìn)行通信的主機(jī),需要分配一個(gè)地址,這就是 IP 地址。IP 包頭部的源地址和目的地址字段,用來標(biāo)注 IP 包的來源和目的地。
網(wǎng)絡(luò)互連層利用網(wǎng)絡(luò)訪問層的局域網(wǎng)通信能力,將 IP 包傳輸?shù)较乱还?jié)點(diǎn)。經(jīng)過若干次轉(zhuǎn)發(fā),IP 包最終被送達(dá)目標(biāo)主機(jī)。更多細(xì)節(jié),我們將在后續(xù)章節(jié)中揭曉。
- 以 包 為通信單元;
- 實(shí)現(xiàn)網(wǎng)際通信(點(diǎn)到點(diǎn));
傳輸層
傳輸層( transport layer )則在網(wǎng)絡(luò)互連層點(diǎn)到點(diǎn)傳輸能力基礎(chǔ)上,實(shí)現(xiàn)端到端的進(jìn)程間通信。該層相當(dāng)于 OSI 模型中的傳輸層,同樣以 段 為通信單元,負(fù)責(zé)根據(jù)段中的端口號(hào)將數(shù)據(jù)送至目標(biāo)進(jìn)程。
最簡(jiǎn)單的傳輸層協(xié)議應(yīng)該是 UDP 協(xié)議,它非常簡(jiǎn)單,只是引入了一個(gè)端口號(hào)。當(dāng)一個(gè) UDP 段搭載在 IP 包中送達(dá)目標(biāo)主機(jī)后,系統(tǒng)根據(jù)段中的端口后,將數(shù)據(jù)提高給對(duì)應(yīng)的進(jìn)程。
IP 只是一種盡力而為的傳輸協(xié)議,并不完全可靠:一方面, IP 包在傳輸?shù)倪^程中可能經(jīng)過不同路由,達(dá)到目標(biāo)主機(jī)時(shí)次序可能會(huì)亂;另一方面,中間路由可能因網(wǎng)絡(luò)擁塞而丟包。
為了保證數(shù)據(jù)傳輸?shù)目煽啃?,協(xié)傳輸層還提供了 TCP 協(xié)議。除了端口號(hào),TCP 協(xié)議還實(shí)現(xiàn)了數(shù)據(jù)序號(hào)、接收確認(rèn),以及超時(shí)重傳機(jī)制,從而為進(jìn)程提供可靠、有序的數(shù)據(jù)流。
TCP 協(xié)議是傳輸層的核心協(xié)議,應(yīng)用范圍也非常廣泛,因而是網(wǎng)絡(luò)學(xué)習(xí)中的重點(diǎn)。TCP 協(xié)議的實(shí)現(xiàn)非常復(fù)雜,細(xì)節(jié)將在后續(xù)章節(jié)展開介紹,現(xiàn)在有個(gè)初步認(rèn)識(shí)即可。
- 以 分組 為通信單元;
- 實(shí)現(xiàn)進(jìn)程間通信(端到端);
應(yīng)用層
應(yīng)用層( application layer )定義具體網(wǎng)絡(luò)應(yīng)用的通信邏輯,讓應(yīng)用進(jìn)程間的協(xié)作成為可能。
傳輸層為進(jìn)程提供了一般化的數(shù)據(jù)傳輸能力,但對(duì)數(shù)據(jù)本身未作任何規(guī)定。因此,實(shí)現(xiàn)應(yīng)用的多個(gè)協(xié)作進(jìn)程,需要一種協(xié)議,以對(duì)數(shù)據(jù)達(dá)成統(tǒng)一認(rèn)識(shí)。
以 Web 應(yīng)用舉例,瀏覽器進(jìn)程作為客戶端,必須按照 HTTP 協(xié)議的規(guī)定,向 Web 服務(wù)進(jìn)程發(fā)起請(qǐng)求,才能為服務(wù)器所理解;同理,Web 服務(wù)器處理請(qǐng)求后,必須按照 HTTP 協(xié)議的規(guī)定,想客戶端回復(fù)響應(yīng)。
HTTP 協(xié)議對(duì) Web 應(yīng)用進(jìn)程來說,就是它們彼此間交流的共同語言。由于網(wǎng)絡(luò)應(yīng)用極為豐富,應(yīng)用協(xié)議種類也不在少數(shù),我們常見的有以下這些:
- HTTP
- HTTPS
- FTP
- SMTP(郵件發(fā)送)
- etc
小結(jié)
本節(jié)介紹了目前最流行的 TCP/IP 協(xié)議棧,它同樣采用分層設(shè)計(jì)思路,與 OSI 分層略有差別,但大同小異。TCP/IP 模型與 OSI 模型的對(duì)應(yīng)關(guān)系,以及各層的主要協(xié)議,列舉如下:
后續(xù)我們將以該圖為指引,自底向上,逐層深入學(xué)習(xí)。敬請(qǐng)期待!