網(wǎng)絡(luò)開發(fā)過程中,經(jīng)常遇到各種協(xié)議真椿,如:TCP鹃答、UDP、HTTP突硝、FTP测摔、IP等。這些協(xié)議差別很大解恰、用途不同锋八。為了更好理解這些協(xié)議,需先掌握網(wǎng)絡(luò)分層模型护盈。
當(dāng)前查库,網(wǎng)絡(luò)模型存在三種劃分方式:
- 開放式系統(tǒng)互聯(lián)模型(Open System Interconnection Model,縮寫為 OSI model黄琼,簡(jiǎn)稱為 OSI 模型)樊销。
- TCP/IP 四層模型整慎。
- 五層模型。
如果互聯(lián)網(wǎng)只有一個(gè)協(xié)議統(tǒng)籌围苫,某個(gè)地方需要改變?cè)O(shè)計(jì)時(shí)裤园,就必須把所有部分整體換掉。分層之后只需把變動(dòng)的層替換掉即可剂府。把各層之間的接口部分規(guī)劃好之后拧揽,每個(gè)層內(nèi)部的設(shè)計(jì)就能夠自由改動(dòng)了。
層次化之后腺占,設(shè)計(jì)也變得相對(duì)簡(jiǎn)單了淤袜。處于應(yīng)用層之上的應(yīng)用,只考慮分配給自己的任務(wù)衰伯,而不需要弄清楚對(duì)方在地球上哪個(gè)地方铡羡,對(duì)方的傳輸路線是怎樣的,是否能確保傳輸送達(dá)等問題意鲸。
下面分別介紹各種劃分方式烦周。
1. OSI 模型
OSI 模型由國際標(biāo)準(zhǔn)化組織在 1984 年提出,試圖使各種計(jì)算機(jī)在世界范圍內(nèi)互聯(lián)為網(wǎng)絡(luò)的標(biāo)準(zhǔn)框架怎顾。
OSI 模型是一個(gè)七層體系結(jié)構(gòu)读慎,每層都有特定功能。七層協(xié)同工作槐雾,將數(shù)據(jù)從一個(gè)設(shè)備傳輸?shù)搅硪粋€(gè)設(shè)備夭委。
1.1 第一層 物理層 Physical Layer
OSI 參考模型最底層是物理層,物理層負(fù)責(zé)在設(shè)備和物理傳輸介質(zhì)之間傳輸募强、接收非結(jié)構(gòu)化數(shù)據(jù)株灸,它將數(shù)字 bits 轉(zhuǎn)換為電、無線電或光信號(hào)钻注。規(guī)范定義了如電壓、電壓變化時(shí)間配猫、物理速率幅恋、最大傳輸距離等。
物理層負(fù)責(zé)將單個(gè) bits 從一個(gè)節(jié)點(diǎn)傳輸?shù)较乱粋€(gè)節(jié)點(diǎn)泵肄。當(dāng)接收數(shù)據(jù)時(shí)捆交,物理層接收信號(hào)、將其轉(zhuǎn)換為0和1腐巢,并發(fā)送給數(shù)據(jù)鏈路層品追,鏈路層將 frame 組合為原始狀態(tài)。
物理層功能如下:
- 比特同步 bit synchronization:物理層通過提供原子鐘冯丙,實(shí)現(xiàn)發(fā)送肉瓦、接收比特同步。
- 比特率控制 bit rate control:物理層定義了傳輸控制,決定每秒發(fā)送數(shù)據(jù)量泞莉。
- 物理拓?fù)?physical topologies:物理層指定在網(wǎng)絡(luò)中排列不同設(shè)備哪雕、節(jié)點(diǎn)的方式,如總線鲫趁、星形或網(wǎng)狀拓?fù)洹?/li>
- 傳輸模式 transmission mode:物理層還定義了兩個(gè)連接的設(shè)備間數(shù)據(jù)傳輸方式斯嚎。如:
- 單工 simplex:數(shù)據(jù)傳輸是單向的,一方固定為發(fā)送端挨厚、另一方固定為接收端堡僻。
- 半雙工 half-duplex:數(shù)據(jù)可以在一個(gè)信號(hào)載體的兩個(gè)方向上傳輸,但不能同時(shí)傳輸疫剃。
- 全雙工 duplex:數(shù)據(jù)可以在兩個(gè)方向上同時(shí)傳輸钉疫,它在能力上相當(dāng)于兩個(gè)單工通信的結(jié)合。
網(wǎng)絡(luò)層慌申、數(shù)據(jù)鏈路層和物理層也稱為底層或硬件層陌选。
1.2 第二層 數(shù)據(jù)鏈路層 Data Link Layer
數(shù)據(jù)鏈路層(Data Link Layer,縮寫 DLL)負(fù)責(zé)節(jié)點(diǎn)到節(jié)點(diǎn)的消息傳遞蹄溉,該層的主要功能是確保在物理層上從一個(gè)節(jié)點(diǎn)到另一個(gè)節(jié)點(diǎn)正確傳輸數(shù)據(jù)咨油。當(dāng)數(shù)據(jù)包到達(dá)時(shí),DDL 使用 MAC 地址傳輸給目標(biāo)主機(jī)柒爵。
數(shù)據(jù)鏈路層被劃分為兩個(gè)子層:
- 邏輯鏈路控制 Logical Link Control役电,簡(jiǎn)寫為 LLC。
- 媒體訪問控制 Media Access Control棉胀,簡(jiǎn)寫為 MAC法瑟。
從網(wǎng)絡(luò)層接收的數(shù)據(jù)包(packet)根據(jù)網(wǎng)卡(Network Interface Card,縮寫為NIC)的幀大小進(jìn)一步分割唁奢。DLL 在發(fā)送方霎挟、接收方的 header 中封裝了 MAC 地址。
通過地址解析協(xié)議(Address Resolution Protocol麻掸,縮寫為ARP)酥夭,可以獲取擁有指定 IP 地址目標(biāo)主機(jī)的 MAC 地址。
數(shù)據(jù)鏈路層功能如下:
- 封裝成幀 framing:它為發(fā)送方提供了一種對(duì)接收方有意義的一組比特脊奋,其通過將特殊的位模式附加到幀的開頭和結(jié)尾來實(shí)現(xiàn)熬北。
- 物理尋址 physical addressing:創(chuàng)建幀后,data link layer 為每一幀的 header 添加發(fā)送方诚隙、接收方的 MAC 地址讶隐。
- 錯(cuò)誤控制 error control:data link layer 的錯(cuò)誤控制機(jī)制會(huì)檢測(cè)、重發(fā)丟失或損壞的幀久又。
- 流控制 flow control:雙方的速率必須保持恒定巫延,否則數(shù)據(jù)可能會(huì)被損壞效五。Flow control 協(xié)調(diào)在收到確認(rèn)之前可發(fā)送的數(shù)據(jù)量。
- 訪問控制 access control:多個(gè)設(shè)備共享一個(gè)通信通道時(shí)烈评,MAC 子層用于確定給定時(shí)間哪個(gè)設(shè)備可以控制該通道火俄。
Data link layer 中的數(shù)據(jù)包稱為幀。
1.3 第三層 網(wǎng)絡(luò)層 Network Layer
網(wǎng)絡(luò)層用于將數(shù)據(jù)從一臺(tái)主機(jī)傳輸?shù)轿挥诓煌W(wǎng)絡(luò)中的另一臺(tái)主機(jī)讲冠。它還負(fù)責(zé)分組路由瓜客,即從多條路線中選取路徑最短的。Network layer 會(huì)把發(fā)送者竿开、接收者的 IP 地址放到 header 中谱仪。
網(wǎng)絡(luò)層功能如下:
- 路由 routing:網(wǎng)絡(luò)層協(xié)議決定從源到目的地選取哪條線路。
- 邏輯尋址 logical addressing:為唯一地標(biāo)識(shí)互聯(lián)網(wǎng)上的每個(gè)設(shè)備否彩,網(wǎng)絡(luò)層定義了一種尋址方案疯攒。發(fā)送者和接收者的 IP 地址由網(wǎng)絡(luò)層放置到 header 中。
1.4 第四層 傳輸層 Transport Layer
傳輸層從網(wǎng)絡(luò)層獲取服務(wù)列荔,并向應(yīng)用層提供服務(wù)敬尺。Transport layer 提供端到端的消息傳遞服務(wù),發(fā)送成功后返回確認(rèn)贴浙、數(shù)據(jù)出錯(cuò)后重發(fā)的功能砂吞。Transport layer 中的數(shù)據(jù)稱為 segments。
1.4.1 發(fā)送方
Transport layer 從上層接收格式化數(shù)據(jù)崎溃,對(duì)數(shù)據(jù)進(jìn)行分片蜻直,流量、錯(cuò)誤控制袁串,確保正確的數(shù)據(jù)傳輸概而。還會(huì)將源、目標(biāo)主機(jī)端口號(hào)添加到 header囱修,并將 segment 數(shù)據(jù)轉(zhuǎn)發(fā)給 network layer赎瑰。
1.4.2 接收方
Transport layer 從 header 讀取端口號(hào),并將數(shù)據(jù)轉(zhuǎn)發(fā)給對(duì)應(yīng) app破镰,還會(huì)對(duì)分段數(shù)據(jù)進(jìn)行排序和重組餐曼。
Transport layer 提供以下功能:
- 分段和重組 segmentation and reassembly:傳輸層從 session layer 接收 message,將 message 分割為更小單位啤咽,每個(gè) segment 都關(guān)聯(lián)一個(gè) header晋辆。傳輸層在目標(biāo)端重組 message渠脉。
- 服務(wù)點(diǎn)尋址 service point addressing:為了將消息傳遞給正確的進(jìn)程宇整,transport layer header 包含 service point addressing 或 port address。
Transport layer 有兩個(gè)性質(zhì)不同的協(xié)議:
- TCP(Transmission Control Protocol芋膘,傳輸控制協(xié)議)鳞青,面向鏈接霸饲,是 byte stream。
- 數(shù)據(jù)按順序到達(dá)臂拓。
- 數(shù)據(jù)最小錯(cuò)誤厚脉。
- 重復(fù)數(shù)據(jù)被丟棄。
- 丟失胶惰、缺失的數(shù)據(jù)會(huì)重發(fā)傻工。
- 流量擁塞控制。
- UDP(User Data Protocol孵滞,用戶數(shù)據(jù)報(bào)協(xié)議)中捆,無鏈接,不可靠坊饶。
- 使用弱校驗(yàn)和算法(weak checksum algorithm)檢查錯(cuò)誤泄伪。
- 用于對(duì)準(zhǔn)時(shí)性要求高,可靠性要求低的流媒體(音頻匿级、視頻蟋滴、Voice over IP 等),或者建立可靠鏈接消耗太大的簡(jiǎn)單查詢痘绎,如 DNS 解析津函。
Transport layer 中的數(shù)據(jù)被稱為 segment。Transport layer 由操作系統(tǒng)管理简逮,是 OSI 模型的核心球散。
1.5 第五層 會(huì)話層 Session Layer
會(huì)話層負(fù)責(zé)建立連接,維護(hù)會(huì)話散庶、認(rèn)證蕉堰,并確保安全。
Session layer 功能如下:
- 建立悲龟、維護(hù)屋讶、終止會(huì)話。
- 同步:會(huì)話層允許進(jìn)程向數(shù)據(jù)中添加同步點(diǎn)须教,用于定位錯(cuò)誤皿渗,避免數(shù)據(jù)丟失。
- 對(duì)話控制:會(huì)話層允許兩個(gè)系統(tǒng)以半雙工或全雙工方式互相通信轻腺。
1.6 第六層 表示層 Presentation Layer
表示層也稱為轉(zhuǎn)換層(translation layer)乐疆。在表示層提取應(yīng)用層的數(shù)據(jù),并根據(jù)需要轉(zhuǎn)換格式贬养,以便通過網(wǎng)絡(luò)傳輸挤土。
表示層功能如下:
- 轉(zhuǎn)換。例如误算,將 ASCII 轉(zhuǎn)換為 EBCDIC仰美。
- 加密迷殿、解密。加密時(shí)將數(shù)據(jù)轉(zhuǎn)換為另一種樣式咖杂,加密后的數(shù)據(jù)被稱為密文庆寺,解密后的數(shù)據(jù)被稱為明文。加密诉字、解密時(shí)需要使用對(duì)應(yīng)的 key懦尝。
- 壓縮:壓縮可以減少需傳送的數(shù)據(jù)量。
1.7 第七層 應(yīng)用層 Application Layer
OSI 模型的最頂層是應(yīng)用層壤圃,應(yīng)用層是 app 訪問網(wǎng)絡(luò)导披、向用戶顯示接收到信息的窗口。
應(yīng)用層功能如下:
- 網(wǎng)絡(luò)虛擬終端埃唯。
- FTAM-File 傳輸?shù)脑L問與管理撩匕。
- 郵件服務(wù)。
- 目錄服務(wù)墨叛。
2. TCP/IP 四層模型
OSI 模型是一個(gè)參考/邏輯模型止毕,它旨在通過將通信過程分為更小、更簡(jiǎn)單的組件來描述通信系統(tǒng)的功能漠趁。TCP/IP 是 Transmission Control Protocol/Internet Protocol 協(xié)議的縮寫扁凛,包含以下四層:
- 網(wǎng)絡(luò)接口層 Network Interface。
- 網(wǎng)絡(luò)層 Internet Layer闯传。
- 傳輸層 Transport Layer / Host-to-Host谨朝。
- 應(yīng)用層 Application Layer。
2.1 第一層 網(wǎng)絡(luò)接口層 Network Interface
TCP/IP 模型中的 network interface 對(duì)應(yīng) OSI model 中的 data link 和 physical甥绿。網(wǎng)絡(luò)接口層進(jìn)行硬件尋址字币、物理傳輸數(shù)據(jù)。
2.2 第二層 網(wǎng)絡(luò)層 Internet Layer
TCP/IP模型中的網(wǎng)絡(luò)層與 OSI 模型中的網(wǎng)絡(luò)層對(duì)應(yīng)共缕,定義了數(shù)據(jù)邏輯傳輸?shù)膮f(xié)議洗出。網(wǎng)絡(luò)層主要協(xié)議有:
- 互聯(lián)網(wǎng)協(xié)議(Internet Protocol,縮寫為 IP):根據(jù)數(shù)據(jù)包 header图谷,將其從發(fā)送方傳遞到接收方翩活。IP 有 IPv4 和 IPv6 兩個(gè)版本。
- 互聯(lián)網(wǎng)控制消息協(xié)議(Internet Control Message Protocol便贵,縮寫為 ICMP):用于 IP 中發(fā)送控制消息菠镇,用于定位通信中各種問題。
- 地址解析協(xié)議(Address Resolution Protocol承璃,縮寫為 ARP):用于獲取擁有指定 IP 地址目標(biāo)主機(jī)的 MAC 地址利耍。
2.3 第三層 傳輸層 Transport Layer
TCP/IP 模型中的 transport layer 對(duì)應(yīng) OSI 模型中的 transport layer,負(fù)責(zé)端到端數(shù)據(jù)傳輸和錯(cuò)誤控制。Transport layer 主要協(xié)議有面向連接的 TCP 協(xié)議堂竟、無鏈接的 UDP 協(xié)議。
2.4 第四層 應(yīng)用層 Application Layer
TCP/IP 模型中的應(yīng)用層對(duì)應(yīng) OSI 模型中的 application layer玻佩、presentation layer出嘹、session layer 三層。負(fù)責(zé)節(jié)點(diǎn)到節(jié)點(diǎn)的通信咬崔,并控制用戶界面税稼。
應(yīng)用層協(xié)議有:HTTP、HTTPS垮斯、FTP郎仆、TFTP、Telnet兜蠕、SSH扰肌、SMTP、SNMP熊杨、DNS等曙旭。
3. 五層模型
雖然 OSI 模型由國際標(biāo)準(zhǔn)組織制定,但其實(shí)現(xiàn)過于復(fù)雜晶府、制定周期過長(zhǎng)桂躏,在其整套標(biāo)準(zhǔn)推出之前,TCP/IP 模型已經(jīng)在全球范圍內(nèi)被廣泛使用川陆,因此剂习,TCP/IP 模型才是事實(shí)上的標(biāo)準(zhǔn)。
TCP/IP 模型定義了應(yīng)用層较沪、傳輸層鳞绕、網(wǎng)際層、網(wǎng)絡(luò)接口層共四層尸曼,但并沒有給出接口層的具體實(shí)現(xiàn)猾昆。因此,通常將網(wǎng)絡(luò)接口層替換為 OSI 七層模型中的數(shù)據(jù)鏈路層和物理層骡苞,這就是五層網(wǎng)絡(luò)模型:
4. 傳輸過程中如何處理數(shù)據(jù)
在分層系統(tǒng)中垂蜗,層之間使用不同格式交換數(shù)據(jù),被稱為協(xié)議數(shù)據(jù)單元(Protocol data unit解幽,縮寫為 PDU)贴见。下圖顯示了不同層之間 PDU:
例如,當(dāng)用戶請(qǐng)求訪問網(wǎng)站時(shí)躲株,服務(wù)器把請(qǐng)求的數(shù)據(jù)傳遞給 application layer片部。此時(shí),從上層至下層各層根據(jù)約定執(zhí)行相應(yīng)操作霜定,數(shù)據(jù)通過物理層傳遞給接收者档悠。接收者收到數(shù)據(jù)后廊鸥,從底層向上傳輸,每層執(zhí)行相應(yīng)功能辖所,直到發(fā)送給對(duì)應(yīng) app惰说。
從上層向下層傳輸過程中,每層會(huì)為 PDU 添加 header缘回、footer吆视,用以指導(dǎo)、標(biāo)記 packet酥宴,這個(gè)過程稱為封裝啦吧。Header、footer 和 data 共同構(gòu)成下一層的 PDU拙寡。整個(gè)過程持續(xù)到最底層授滓,即 physical layer 或 network access layer,數(shù)據(jù)從這一層傳輸給接收者肆糕。接收者處理過程相反褒墨,每層根據(jù) header、footer 解封裝數(shù)據(jù)擎宝,直到所有數(shù)據(jù)接收郁妈、處理完畢。
5. TCP/IP 和 OSI 對(duì)故障排除的意義
有了分層概念绍申,當(dāng)連接失敗時(shí)更容易檢查故障噩咪。每一層都為上一層服務(wù),檢查時(shí)應(yīng)從底層開始极阅。例如胃碾,當(dāng)計(jì)算機(jī)無法連接到網(wǎng)絡(luò)時(shí),應(yīng)先檢查是否接入了網(wǎng)線筋搏,或路由器是否連接到了網(wǎng)線仆百,RJ45 引腳是否完好等。
總結(jié)
盡管仍然經(jīng)常引用 OSI 模型奔脐,但 Internet protocol 組件已經(jīng)成為網(wǎng)絡(luò)協(xié)議的標(biāo)準(zhǔn)俄周。TCP/IP 簡(jiǎn)潔的實(shí)現(xiàn)方式、相互獨(dú)立的協(xié)議髓迎,使其成為現(xiàn)實(shí)中的標(biāo)準(zhǔn)峦朗。
HTTP 建立連接的過程中需要三次握手,如果你對(duì)握手過程不了解排龄,可以查看我的另一篇文章三次握手波势、七次握手、四次揮手。
參考資料:
歡迎更多指正:https://github.com/pro648/tips
本文地址:https://github.com/pro648/tips/blob/master/sources/網(wǎng)絡(luò)模型:七層尺铣、五層拴曲、四層概念及功能分析.md