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