十年架構(gòu)師教你:如何搞定計(jì)算機(jī)網(wǎng)絡(luò)面試

OSI與TCP/IP各層的結(jié)構(gòu)與功能,都有哪些協(xié)議

五層協(xié)議的體系結(jié)構(gòu)

學(xué)習(xí)計(jì)算機(jī)網(wǎng)絡(luò)時(shí)盼樟,我們一般采用折中的辦法,中和 OSI 和 TCP/IP 的優(yōu)點(diǎn),采用一種只有五層協(xié)議的體系結(jié)構(gòu)殖氏,這樣既簡(jiǎn)潔又能將概念闡述清楚。接下來(lái)結(jié)合互聯(lián)網(wǎng)的情況姻采,自上而下雅采,簡(jiǎn)要地介紹一下各層的作用。

1慨亲、應(yīng)用層

應(yīng)用層(application-layer)的任務(wù)是通過(guò)應(yīng)用進(jìn)程間的交互來(lái)完成特定網(wǎng)絡(luò)應(yīng)用婚瓜,應(yīng)用層協(xié)議定義的是應(yīng)用進(jìn)程間的通信和交互的規(guī)則。對(duì)于不同的網(wǎng)絡(luò)應(yīng)用需要不同的應(yīng)用層協(xié)議刑棵,在互聯(lián)網(wǎng)中應(yīng)用層協(xié)議很多巴刻,如域名系統(tǒng)DNS,支持萬(wàn)維網(wǎng)應(yīng)用的 HTTP協(xié)議蛉签,支持電子郵件的 SMTP協(xié)議等等冈涧。我們把應(yīng)用層交互的數(shù)據(jù)單元稱為報(bào)文。

域名系統(tǒng)(Domain Name System)

域名系統(tǒng)是因特網(wǎng)的一項(xiàng)核心服務(wù)正蛙,它作為將域名和IP地址相互映射的一個(gè)分布式數(shù)據(jù)庫(kù)督弓,能夠更方便地訪問(wèn)互聯(lián)網(wǎng),而不用去記住被機(jī)器直接讀取的IP數(shù)串乒验。例如愚隧,一個(gè)公司的 Web 網(wǎng)站可看作是它在網(wǎng)上的門(mén)戶,而域名就相當(dāng)于其門(mén)牌地址,通常域名都使用該公司的名稱或簡(jiǎn)稱狂塘。上面提到的微軟公司的域名录煤,類(lèi)似的還有:IBM 公司的域名是 www.ibm.com、Oracle 公司的域名是 www.oracle.com荞胡、Cisco公司的域名是 www.cisco.com 等妈踊。

HTTP協(xié)議

超文本傳輸協(xié)議(HTTP,HyperText Transfer Protocol)是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議泪漂。所有的WWW(萬(wàn)維網(wǎng)) 文件都必須遵守這個(gè)標(biāo)準(zhǔn)廊营,設(shè)計(jì) HTTP 最初是為了提供一種發(fā)布和接收 HTML 頁(yè)面的方法。


2萝勤、運(yùn)輸層

運(yùn)輸層(transport layer)的主要任務(wù)是負(fù)責(zé)向兩臺(tái)主機(jī)進(jìn)程之間的通信提供通用的數(shù)據(jù)傳輸服務(wù)露筒。應(yīng)用進(jìn)程利用該服務(wù)傳送應(yīng)用層報(bào)文,“通用的”是指并不針對(duì)某一個(gè)特定的網(wǎng)絡(luò)應(yīng)用敌卓,而是多種應(yīng)用可以使用同一個(gè)運(yùn)輸層服務(wù)慎式,由于一臺(tái)主機(jī)可同時(shí)運(yùn)行多個(gè)線程,因此運(yùn)輸層有復(fù)用和分用的功能趟径;所謂復(fù)用就是指多個(gè)應(yīng)用層進(jìn)程可同時(shí)使用下面運(yùn)輸層的服務(wù)瘪吏,分用和復(fù)用相反,是運(yùn)輸層把收到的信息分別交付上面應(yīng)用層中的相應(yīng)進(jìn)程蜗巧。

運(yùn)輸層主要使用以下兩種協(xié)議:

1掌眠、傳輸控制協(xié)議 TCP--提供面向連接的,可靠的數(shù)據(jù)傳輸服務(wù)惧蛹。

2扇救、用戶數(shù)據(jù)協(xié)議 UDP--提供無(wú)連接的,盡最大努力的數(shù)據(jù)傳輸服務(wù)香嗓。


UDP 的主要特點(diǎn):

UDP 是無(wú)連接的迅腔;

UDP 盡最大努力交付,即不保證可靠交付靠娱,因此主機(jī)不需要維持復(fù)雜的鏈接狀態(tài)沧烈;

UDP 是面向報(bào)文的;

UDP 沒(méi)有擁塞控制像云,因此網(wǎng)絡(luò)出現(xiàn)擁塞不會(huì)使主機(jī)的發(fā)送速率降低锌雀;

UDP 支持一對(duì)一、一對(duì)多迅诬、多對(duì)一和多對(duì)多的交互通信腋逆;

UDP 的首部開(kāi)銷(xiāo)小,只有8個(gè)字節(jié)侈贷,比TCP的20個(gè)字節(jié)的首部要短惩歉。


TCP 的主要特點(diǎn):

TCP 是面向連接的(就像打電話一樣,通話前需要先撥號(hào)建立連接,通話結(jié)束后要掛機(jī)釋放連接)撑蚌;

每一條 TCP 連接只能有兩個(gè)端點(diǎn)上遥,每一條TCP連接只能是點(diǎn)對(duì)點(diǎn)的(一對(duì)一);

TCP 提供可靠交付的服務(wù)争涌,通過(guò)TCP連接傳送的數(shù)據(jù)粉楚,無(wú)差錯(cuò)、不丟失亮垫、不重復(fù)模软、并且按序到達(dá);

TCP 提供全雙工通信包警, 允許通信雙方的應(yīng)用進(jìn)程在任何時(shí)候都能發(fā)送數(shù)據(jù)撵摆。TCP 連接的兩端都設(shè)有發(fā)送緩存和接收緩存底靠,用來(lái)臨時(shí)存放雙方通信的數(shù)據(jù)害晦;

面向字節(jié)流。TCP 中的“流”指流入進(jìn)程或從進(jìn)程流出的字節(jié)序列暑中;“面向字節(jié)流”的含義是:雖然應(yīng)用程序和 TCP 的交互是一次一個(gè)數(shù)據(jù)塊壹瘟,但 TCP 把應(yīng)用程序交下來(lái)的數(shù)據(jù)僅僅看成是一連串的無(wú)結(jié)構(gòu)的字節(jié)流。


3鳄逾、網(wǎng)絡(luò)層

網(wǎng)絡(luò)層(network layer)負(fù)責(zé)為分組交換網(wǎng)上的不同主機(jī)提供通信服務(wù)稻轨。在發(fā)送數(shù)據(jù)時(shí),網(wǎng)絡(luò)層把運(yùn)輸層產(chǎn)生的報(bào)文段或用戶數(shù)據(jù)報(bào)封裝成分組和包進(jìn)行傳送雕凹。在 TCP/IP 體系結(jié)構(gòu)中殴俱,由于網(wǎng)絡(luò)層使用 IP 協(xié)議,因此分組也叫 IP 數(shù)據(jù)報(bào)枚抵,簡(jiǎn)稱數(shù)據(jù)報(bào)线欲。

注意:不要把運(yùn)輸層的“用戶數(shù)據(jù)報(bào) UDP ”和網(wǎng)絡(luò)層的“ IP 數(shù)據(jù)報(bào)”弄混,另外汽摹,無(wú)論是哪一層的數(shù)據(jù)單元李丰,都可籠統(tǒng)地用“分組”來(lái)表示。網(wǎng)絡(luò)層的另一個(gè)任務(wù)就是選擇合適的路由逼泣,使源主機(jī)運(yùn)輸層所傳下來(lái)的分株趴泌,能通過(guò)網(wǎng)絡(luò)層中的路由器找到目的主機(jī)。

強(qiáng)調(diào):網(wǎng)絡(luò)層中的“網(wǎng)絡(luò)”二字已經(jīng)不是我們通常談到的具體網(wǎng)絡(luò)拉庶,而是指計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)模型中第三層的名稱嗜憔。互聯(lián)網(wǎng)是由大量的異構(gòu)網(wǎng)絡(luò)通過(guò)路由器相互連接起來(lái)的氏仗,互聯(lián)網(wǎng)使用的網(wǎng)絡(luò)層協(xié)議是無(wú)連接的網(wǎng)際協(xié)議和許多路由選擇協(xié)議吉捶,因此互聯(lián)網(wǎng)的網(wǎng)絡(luò)層也叫做網(wǎng)際層或IP層。


4、數(shù)據(jù)鏈路層

數(shù)據(jù)鏈路層(data link layer)通常簡(jiǎn)稱為鏈路層帚稠。兩臺(tái)主機(jī)之間的數(shù)據(jù)傳輸谣旁,總是在一段一段的鏈路上傳送的,這就需要使用專(zhuān)門(mén)的鏈路層的協(xié)議滋早。 在兩個(gè)相鄰節(jié)點(diǎn)之間傳送數(shù)據(jù)時(shí)榄审,數(shù)據(jù)鏈路層將網(wǎng)絡(luò)層交下來(lái)的 IP 數(shù)據(jù)報(bào)組裝程幀,在兩個(gè)相鄰節(jié)點(diǎn)間的鏈路上傳送幀杆麸,每一幀包括數(shù)據(jù)和必要的控制信息(如同步信息搁进,地址信息,差錯(cuò)控制等)昔头。

在接收數(shù)據(jù)時(shí)饼问,控制信息使接收端能夠知道一個(gè)幀從哪個(gè)比特開(kāi)始和到哪個(gè)比特結(jié)束。這樣揭斧,數(shù)據(jù)鏈路層在收到一個(gè)幀后莱革,就可從中提出數(shù)據(jù)部分,上交給網(wǎng)絡(luò)層讹开≈咽樱控制信息還使接收端能夠檢測(cè)到所收到的幀中有誤差錯(cuò),如果發(fā)現(xiàn)差錯(cuò)旦万,數(shù)據(jù)鏈路層就簡(jiǎn)單地丟棄這個(gè)出了差錯(cuò)幀闹击,以避免繼續(xù)在網(wǎng)絡(luò)中傳送下去白白浪費(fèi)網(wǎng)絡(luò)資源;如果需要改正數(shù)據(jù)在鏈路層傳輸時(shí)出現(xiàn)差錯(cuò)(數(shù)據(jù)鏈路層不僅要檢錯(cuò)成艘,而且還要糾錯(cuò))赏半,那么就要采用可靠性傳輸協(xié)議來(lái)糾正出現(xiàn)的差錯(cuò),這種方法會(huì)使鏈路層的協(xié)議復(fù)雜些淆两。


5断箫、物理層(physical layer)

在物理層上所傳送的數(shù)據(jù)單位是比特。物理層的作用是實(shí)現(xiàn)相鄰計(jì)算機(jī)節(jié)點(diǎn)之間比特流的透明傳送琼腔,盡可能屏蔽掉具體傳輸介質(zhì)和物理設(shè)備的差異瑰枫,使其上面的數(shù)據(jù)鏈路層不必考慮網(wǎng)絡(luò)的具體傳輸介質(zhì)是什么〉ち“透明傳送比特流”表示經(jīng)實(shí)際電路傳送后的比特流沒(méi)有發(fā)生變化光坝,對(duì)傳送的比特流來(lái)說(shuō),這個(gè)電路好像是看不見(jiàn)的甥材。

在互聯(lián)網(wǎng)使用的各種協(xié)中最重要和最著名的就是 TCP/IP 兩個(gè)協(xié)議盯另,現(xiàn)在人們經(jīng)常提到的TCP/IP并不一定單指TCP和IP這兩個(gè)具體的協(xié)議,而往往表示互聯(lián)網(wǎng)所使用的整個(gè)TCP/IP協(xié)議族洲赵。

以上我們對(duì)計(jì)算機(jī)網(wǎng)絡(luò)的五層體系結(jié)構(gòu)有了初步的了解鸳惯,下面附送一張七層體系結(jié)構(gòu)圖商蕴。


TCP 三次握手和四次揮手(面試常客)

為了準(zhǔn)確無(wú)誤地把數(shù)據(jù)送達(dá)目標(biāo)處芝发,TCP協(xié)議采用了三次握手策略绪商。

漫畫(huà)圖解:

簡(jiǎn)單示意圖:

客戶端–發(fā)送帶有 SYN 標(biāo)志的數(shù)據(jù)包–一次握手–服務(wù)端

服務(wù)端–發(fā)送帶有 SYN/ACK 標(biāo)志的數(shù)據(jù)包–二次握手–客戶端

客戶端–發(fā)送帶有帶有 ACK 標(biāo)志的數(shù)據(jù)包–三次握手–服務(wù)端


為什么要三次握手

三次握手的目的是建立可靠的通信信道,說(shuō)到通訊辅鲸,簡(jiǎn)單來(lái)說(shuō)就是數(shù)據(jù)的發(fā)送與接收格郁,而三次握手最主要的目的就是雙方確認(rèn)自己與對(duì)方的發(fā)送與接收是正常的。

第一次握手:Client 什么都不能確認(rèn)独悴;Server 確認(rèn)了對(duì)方發(fā)送正常

第二次握手:Client 確認(rèn)了:自己發(fā)送例书、接收正常,對(duì)方發(fā)送刻炒、接收正常决采;Server 確認(rèn)了:自己接收正常,對(duì)方發(fā)送正常

第三次握手:Client 確認(rèn)了:自己發(fā)送坟奥、接收正常树瞭,對(duì)方發(fā)送、接收正常筏勒;Server 確認(rèn)了:自己發(fā)送移迫、接收正常旺嬉,對(duì)方發(fā)送接收正常

所以三次握手就能確認(rèn)雙發(fā)收發(fā)功能都正常管行,缺一不可。


為什么要傳回 SYN

接收端傳回發(fā)送端所發(fā)送的 SYN 是為了告訴發(fā)送端邪媳,我接收到的信息確實(shí)就是你所發(fā)送的信號(hào)了捐顷。

傳了 SYN,為啥還要傳 ACK

雙方通信無(wú)誤必須是兩者互相發(fā)送信息都無(wú)誤,傳了 SYN雨效,證明發(fā)送方到接收方的通道沒(méi)有問(wèn)題迅涮,但是接收方到發(fā)送方的通道還需要 ACK 信號(hào)來(lái)進(jìn)行驗(yàn)證。

斷開(kāi)一個(gè) TCP 連接則需要“四次揮手”:

客戶端-發(fā)送一個(gè) FIN徽龟,用來(lái)關(guān)閉客戶端到服務(wù)器的數(shù)據(jù)傳送

服務(wù)器-收到這個(gè) FIN叮姑,它發(fā)回一 個(gè) ACK,確認(rèn)序號(hào)為收到的序號(hào)加1 据悔。和 SYN 一樣传透,一個(gè) FIN 將占用一個(gè)序號(hào)

服務(wù)器-關(guān)閉與客戶端的連接,發(fā)送一個(gè)FIN給客戶端

客戶端-發(fā)回 ACK 報(bào)文確認(rèn)极颓,并將確認(rèn)序號(hào)設(shè)置為收到序號(hào)加1


為什么要四次揮手

任何一方都可以在數(shù)據(jù)傳送結(jié)束后發(fā)出連接釋放的通知朱盐,待對(duì)方確認(rèn)后進(jìn)入半關(guān)閉狀態(tài);當(dāng)另一方也沒(méi)有數(shù)據(jù)再發(fā)送的時(shí)候菠隆,則發(fā)出連接釋放通知兵琳,對(duì)方確認(rèn)后就完全關(guān)閉了TCP連接狂秘。

舉個(gè)例子:A 和 B 打電話,通話即將結(jié)束后躯肌,A 說(shuō)“我沒(méi)啥要說(shuō)的了”者春,B回答“我知道了”,但是 B 可能還會(huì)有要說(shuō)的話清女,A 不能要求 B 跟著自己的節(jié)奏結(jié)束通話碧查,于是 B 可能又巴拉巴拉說(shuō)了一通,最后 B 說(shuō)“我說(shuō)完了”校仑,A 回答“知道了”忠售,這樣通話才算結(jié)束。


TCP迄沫、UDP 協(xié)議的區(qū)別


UDP 在傳送數(shù)據(jù)之前不需要先建立連接稻扬,遠(yuǎn)地主機(jī)在收到 UDP 報(bào)文后,不需要給出任何確認(rèn)羊瘩。雖然 UDP 不提供可靠交付泰佳,但在某些情況下 UDP 確是一種最有效的工作方式,比如: QQ 語(yǔ)音尘吗、 QQ 視頻 逝她、直播等等

TCP 提供面向連接的服務(wù),在傳送數(shù)據(jù)之前必須先建立連接睬捶,數(shù)據(jù)傳送結(jié)束后要釋放連接黔宛,TCP 不提供廣播或多播服務(wù)。由于 TCP 要提供可靠的擒贸,面向連接的運(yùn)輸服務(wù)(TCP的可靠體現(xiàn)在TCP在傳遞數(shù)據(jù)之前臀晃,會(huì)有三次握手來(lái)建立連接,而且在數(shù)據(jù)傳遞時(shí)介劫,有確認(rèn)徽惋、窗口、重傳座韵、擁塞控制機(jī)制险绘,在數(shù)據(jù)傳完后,還會(huì)斷開(kāi)連接用來(lái)節(jié)約系統(tǒng)資源)誉碴,這一難以避免增加了許多開(kāi)銷(xiāo)宦棺,如確認(rèn),流量控制翔烁,計(jì)時(shí)器以及連接管理等渺氧。這不僅使協(xié)議數(shù)據(jù)單元的首部增大很多,還要占用許多處理機(jī)資源蹬屹。TCP 一般用于文件傳輸侣背、發(fā)送和接收郵件白华、遠(yuǎn)程登錄等場(chǎng)景。

如果對(duì)java微服務(wù)贩耐、分布式弧腥、高并發(fā)、高可用潮太、大型互聯(lián)網(wǎng)架構(gòu)技術(shù)管搪、面試經(jīng)驗(yàn)交流等等感興趣的同學(xué)削樊,可以關(guān)注我踩官,我會(huì)不定期免費(fèi)發(fā)放資料鏈接的诵,如果你有好的學(xué)習(xí)資料可以私聊發(fā)我煌茴,我會(huì)注明出處之后分享給大家。歡迎分享碘赖,歡迎評(píng)論天揖,歡迎轉(zhuǎn)發(fā)摸屠,需要資料的同學(xué)Java后端技術(shù)群:819940388景埃,或關(guān)注微信公眾號(hào):Java資訊庫(kù)媒至,回復(fù)“架構(gòu)”,免費(fèi)的大型互聯(lián)網(wǎng)Java技術(shù)視頻分享給大家谷徙。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拒啰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子完慧,更是在濱河造成了極大的恐慌谋旦,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件骗随,死亡現(xiàn)場(chǎng)離奇詭異蛤织,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)鸿染,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)乞巧,“玉大人涨椒,你說(shuō)我怎么就攤上這事≌烂剑” “怎么了蚕冬?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)是辕。 經(jīng)常有香客問(wèn)我囤热,道長(zhǎng),這世上最難降的妖魔是什么获三? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任旁蔼,我火速辦了婚禮锨苏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘棺聊。我一直安慰自己伞租,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布限佩。 她就那樣靜靜地躺著葵诈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪祟同。 梳的紋絲不亂的頭發(fā)上作喘,一...
    開(kāi)封第一講書(shū)人閱讀 49,730評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音晕城,去河邊找鬼徊都。 笑死,一個(gè)胖子當(dāng)著我的面吹牛广辰,可吹牛的內(nèi)容都是我干的暇矫。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼择吊,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼李根!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起几睛,我...
    開(kāi)封第一講書(shū)人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤房轿,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后所森,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體囱持,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年焕济,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了纷妆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晴弃,死狀恐怖掩幢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情上鞠,我是刑警寧澤际邻,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站芍阎,受9級(jí)特大地震影響世曾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谴咸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一轮听、第九天 我趴在偏房一處隱蔽的房頂上張望骗露。 院中可真熱鬧,春花似錦蕊程、人聲如沸椒袍。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)驹暑。三九已至,卻和暖如春辨赐,著一層夾襖步出監(jiān)牢的瞬間优俘,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工掀序, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留帆焕,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓不恭,卻偏偏與公主長(zhǎng)得像叶雹,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子换吧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容