自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

談?wù)勎覍?duì)網(wǎng)絡(luò)分層協(xié)議的理解

企業(yè)動(dòng)態(tài)
如何理解分層?從沖突域和廣播域開(kāi)始,明白集線(xiàn)器,交換器,路由器,網(wǎng)關(guān)的區(qū)別,擴(kuò)展一些以太網(wǎng)共享介質(zhì),CSMA/CD機(jī)制和路由的知識(shí),對(duì)比聯(lián)想一下村口的廣播,烽火臺(tái),郵遞員和網(wǎng)絡(luò)實(shí)現(xiàn)的關(guān)系。

網(wǎng)絡(luò)協(xié)議分層的知識(shí)幾乎是所有技術(shù)公司面試的題目。大多數(shù)求職者在面試前死記硬背所有的分層,面試的時(shí)候?qū)Υ鹑缌?,面試后全還給面試者了。面試者也很滿(mǎn)意,因?yàn)樗仓?,在?shí)際的項(xiàng)目中,大家都不會(huì)用到這些鬼東西了。并且他也不一定比面試者背誦的內(nèi)容懂得更多。

我并不是對(duì)面試者“死記硬背”網(wǎng)絡(luò)協(xié)議分層概念吹毛求疵,這多多少少是大學(xué)計(jì)算機(jī)教育的悲哀。 業(yè)界本來(lái)“計(jì)算機(jī)科學(xué)”的素養(yǎng)就不夠,再?zèng)]有“軟件工程”的基本能力,只能淪為沒(méi)有創(chuàng)造力的外包工人。對(duì)網(wǎng)絡(luò)協(xié)議分層知識(shí)的考察如果不涉及各個(gè)層次涉及的設(shè)備,就只能退化為記憶力的競(jìng)賽,更沒(méi)有體現(xiàn)“網(wǎng)絡(luò)”本身的味道和精神。

何為協(xié)議?仔細(xì)理解理解一下PDU,幀,分組,數(shù)據(jù)段和消息的區(qū)別,然后擴(kuò)展一些網(wǎng)絡(luò)兩端解包封包的內(nèi)容,明白各協(xié)議是如何在網(wǎng)絡(luò)的兩端對(duì)各層添加/去除包頭/包尾的,更要深刻理解數(shù)據(jù)是如何從一端的協(xié)議棧逐層下沉,在對(duì)端的協(xié)議棧逐層上升。

如何理解分層?從沖突域和廣播域開(kāi)始,明白集線(xiàn)器,交換器,路由器,網(wǎng)關(guān)的區(qū)別,擴(kuò)展一些以太網(wǎng)共享介質(zhì),CSMA/CD機(jī)制和路由的知識(shí),對(duì)比聯(lián)想一下村口的廣播,烽火臺(tái),郵遞員和網(wǎng)絡(luò)實(shí)現(xiàn)的關(guān)系。

其實(shí),網(wǎng)絡(luò)通信的本質(zhì)有兩點(diǎn)。第一,消息能夠送達(dá);第二,消息能夠被解析。第一點(diǎn)有廣播和路由來(lái)保證,第二點(diǎn)有協(xié)議簇來(lái)保證。

傳統(tǒng)共享式以太網(wǎng)的典型代表是總線(xiàn)型以太網(wǎng)。在這種類(lèi)型的以太網(wǎng)中,通信信道只有一個(gè),采用介質(zhì)共享(介質(zhì)爭(zhēng)用)的訪(fǎng)問(wèn)方法(CSMA/CD介質(zhì)訪(fǎng)問(wèn)方法)。每個(gè)站點(diǎn)在發(fā)送數(shù)據(jù)之前首先要偵聽(tīng)網(wǎng)絡(luò)是否空閑,如果空閑就發(fā)送數(shù)據(jù)。否則,繼續(xù)偵聽(tīng)直到網(wǎng)絡(luò)空閑。如果兩個(gè)站點(diǎn)同時(shí)檢測(cè)到介質(zhì)空閑并同時(shí)發(fā)送出一幀數(shù)據(jù),則會(huì)導(dǎo)致數(shù)據(jù)幀的沖突,雙方的數(shù)據(jù)幀均被破壞。這時(shí),兩個(gè)站點(diǎn)將采用"二進(jìn)制指數(shù)退避"的方法各自等待一段隨機(jī)的時(shí)間再偵聽(tīng)、發(fā)送。這就相當(dāng)于大家在一個(gè)房間內(nèi)同時(shí)高聲說(shuō)話(huà)(說(shuō)話(huà)即廣播),當(dāng)誰(shuí)也聽(tīng)不清楚了,就按照算法詢(xún)問(wèn)一下,有人說(shuō)沒(méi)?沒(méi)人說(shuō)了再說(shuō)。通俗的說(shuō),基于CSMA/CD介質(zhì)訪(fǎng)問(wèn)方法推論,只要基于廣播的方式發(fā)送信息而會(huì)發(fā)生沖突的范圍,都是沖突域。中繼器和集線(xiàn)器都只是對(duì)網(wǎng)絡(luò)通信距離的延展,處于同一個(gè)沖突域和廣播域之中。也就是說(shuō),中繼器和集線(xiàn)器既不能隔離沖突域,也不能隔離廣播域。

如果面試者被問(wèn)及網(wǎng)絡(luò)協(xié)議分層能夠從沖突域,廣播域出發(fā),再引申出四層功能來(lái),那么就可以直接錄用了。

網(wǎng)橋可以隔離沖突域,但不能隔離廣播域。網(wǎng)橋又稱(chēng)為橋接器。和中繼器類(lèi)似,傳統(tǒng)的網(wǎng)橋只有兩個(gè)端口,用于連接不同的網(wǎng)段。和中繼器不同的是,網(wǎng)橋具有一定的"智能"性,可以"學(xué)習(xí)"網(wǎng)絡(luò)上主機(jī)的地址,同時(shí)具有信號(hào)過(guò)濾的功能。網(wǎng)橋可以識(shí)別橋接網(wǎng)絡(luò)的數(shù)據(jù)流,主機(jī)對(duì)主機(jī)的通信則不會(huì)轉(zhuǎn)發(fā)到另一個(gè)網(wǎng)段,而廣播類(lèi)型的數(shù)據(jù)包則會(huì)被網(wǎng)橋轉(zhuǎn)發(fā)。這里要把CSMA/CD介質(zhì)訪(fǎng)問(wèn)方法的廣播原理和網(wǎng)絡(luò)通信的廣播類(lèi)型(二層廣播即單播和三層廣播)區(qū)別看待。

交換機(jī)被稱(chēng)為交換式集線(xiàn)器。它的出現(xiàn)是為了解決連接在集線(xiàn)器上的所有主機(jī)共享可用帶寬的缺陷。交換機(jī)是通過(guò)為需要通信的兩臺(tái)主機(jī)直接建立專(zhuān)用的通信信道來(lái)增加可用帶寬的。從這個(gè)角度上來(lái)講,交換機(jī)相當(dāng)于多端口網(wǎng)橋。那么交換機(jī)的沖突域就是交換機(jī)的一個(gè)接口,接口和接口之間則不是一個(gè)沖突域。在一個(gè)接口上如果連接了集線(xiàn)器,集線(xiàn)器上所有的主機(jī)都在一個(gè)沖突域中。但是,交換機(jī)同樣沒(méi)有過(guò)濾廣播通信的功能。如果交換機(jī)收到一個(gè)廣播數(shù)據(jù)包后,它會(huì)向其所有的端口轉(zhuǎn)發(fā)此廣播數(shù)據(jù)包。因此,交換機(jī)和其所有接口所連接的主機(jī)共同構(gòu)成了一個(gè)廣播域。我們將使用交換機(jī)作為互連設(shè)備的局域網(wǎng)稱(chēng)為交換式局域網(wǎng)。

到目前為止,在一個(gè)廣播域內(nèi),消息能夠送達(dá)是靠廣播(類(lèi)比基本靠吼,這就是鏈路層,沒(méi)有超出一箭之遠(yuǎn)),網(wǎng)絡(luò)地址主要是MAC地址(網(wǎng)卡出廠(chǎng)全球唯一地址,類(lèi)比身份信息),協(xié)議解析只用到以太網(wǎng)協(xié)議:Ethernet和IEEE 802.3等(類(lèi)比中文,英文等)。當(dāng)然還有其他的一堆協(xié)議,不一一列舉。

路由器工作在網(wǎng)絡(luò)層,可以識(shí)別網(wǎng)絡(luò)層的地址——IP地址,有能力過(guò)濾第三層的廣播消息。實(shí)際上,除非做特殊配置,否則路由器從不轉(zhuǎn)發(fā)廣播類(lèi)型的數(shù)據(jù)包。因此,路由器的每個(gè)端口所連接的網(wǎng)絡(luò)都獨(dú)自構(gòu)成一個(gè)廣播域。

到這里,突然覺(jué)得網(wǎng)絡(luò)層也清晰起來(lái)。

網(wǎng)絡(luò)層是可以識(shí)別IP地址的層,也就是通過(guò)路由器尋找IP地址,就可以定位一個(gè)網(wǎng)絡(luò)(類(lèi)比郵遞員)。由于地址中網(wǎng)絡(luò)層包了主機(jī)的鏈路層地址,在定位到的網(wǎng)絡(luò)中廣播(吼一聲)就可以找到目標(biāo)主機(jī)了。但是路由器只關(guān)心網(wǎng)絡(luò)地址,定位目標(biāo)主機(jī)的任務(wù)交給目的網(wǎng)絡(luò)的交換機(jī)即可。所以用到的協(xié)議是IP協(xié)議,ARP協(xié)議等(也有管理功能的ICMP)。由此,我們可以總結(jié),互聯(lián)網(wǎng)上存在大量的主機(jī),而這些主機(jī)又分別屬于不同的大量網(wǎng)絡(luò)中,路由的重要作用就是定位到目標(biāo)主機(jī)所在的網(wǎng)絡(luò),從IP地址的分類(lèi)和IP地址分為網(wǎng)絡(luò)地址和主機(jī)地址兩部分,應(yīng)該可以明白網(wǎng)絡(luò)層的含義(而不用刻意去記)。

為了提供傳輸控制,引入了兩種傳輸類(lèi)型迥異的傳輸協(xié)議TCP和IP。復(fù)雜的傳輸控制方法和對(duì)比,這里不展開(kāi)討論。重點(diǎn)是,從上面的討論,已經(jīng)可以定位網(wǎng)絡(luò)中的一臺(tái)主機(jī),而一臺(tái)主機(jī)上可以運(yùn)行很多應(yīng)用程序(綁定監(jiān)聽(tīng)端口的應(yīng)用程序又稱(chēng)為服務(wù),即響應(yīng)外部請(qǐng)求,向外提供服務(wù)),如何知道網(wǎng)絡(luò)上發(fā)過(guò)來(lái)消息應(yīng)該有那一個(gè)應(yīng)用程序處理呢?端口號(hào)的作用就是用來(lái)區(qū)分應(yīng)用程序(我們知道,一個(gè)端口是不能被不同的應(yīng)用程序重復(fù)綁定的),但端口號(hào)只會(huì)在應(yīng)用層處理,在傳輸層是透明傳輸,不做處理。研究傳輸層,可以通過(guò)對(duì)比的分析TCP和IP的差異深入理解為什么引入傳輸層(在不可靠的網(wǎng)絡(luò)層和應(yīng)用層之間,提供一個(gè)中間層)。

應(yīng)用層只是調(diào)用socket接口,負(fù)責(zé)處理特定的應(yīng)用程序細(xì)節(jié)。在socket接口中,需要明確的指定TCP還是UDP。其實(shí)到了應(yīng)用層,開(kāi)發(fā)者可以根據(jù)需要增加各種不同的首部,定義新的協(xié)議。在應(yīng)用層需要強(qiáng)調(diào)的是,Linux/UNIX的哲學(xué)是一切皆文件,外部設(shè)備也被視為文件,而網(wǎng)絡(luò)數(shù)據(jù)的收發(fā)和讀寫(xiě)打破了這一切。應(yīng)用層接口并沒(méi)有與Linux/UNIX文件接口保持一致,而是設(shè)計(jì)了一套稱(chēng)為套接字socket的特殊接口。《深入Linux內(nèi)核架構(gòu)》中給出了一個(gè)理由:網(wǎng)絡(luò)中的所有層次使用了許多不同的通信協(xié)議,為建立連接需要指定許多選項(xiàng),而且無(wú)法在打開(kāi)設(shè)備文件時(shí)完成這些任務(wù)。20世紀(jì)80年代的BSD UNIX程序員也曾經(jīng)為此頭痛,套接字的接口就是最終采用的解決方案,而今已成為事實(shí)的工業(yè)標(biāo)準(zhǔn)。

1988年David D. Clark在其《互聯(lián)網(wǎng)架構(gòu)的設(shè)計(jì)哲學(xué)》中總結(jié)當(dāng)初設(shè)計(jì)互聯(lián)網(wǎng)的最高層次目標(biāo)是:在一個(gè)基于分組交換的通訊設(shè)備中,大量的不同的網(wǎng)絡(luò)通過(guò)使用一種稱(chēng)為網(wǎng)關(guān)的包通訊處理機(jī)連接在一起,其中網(wǎng)絡(luò)中節(jié)點(diǎn),包括路由器,網(wǎng)關(guān)的實(shí)現(xiàn)都采用了一種存儲(chǔ)轉(zhuǎn)發(fā)包的思想。這個(gè)目標(biāo)里面提到了幾個(gè)關(guān)鍵詞:分組交換,網(wǎng)關(guān),分組。這些關(guān)鍵詞體現(xiàn)了網(wǎng)絡(luò)設(shè)計(jì)的一些重大決策,比如,采用分組交換是存儲(chǔ)轉(zhuǎn)發(fā)和多路復(fù)用的基礎(chǔ),引入網(wǎng)關(guān)的實(shí)現(xiàn)多個(gè)不同網(wǎng)絡(luò)互連,并且網(wǎng)關(guān)不保留實(shí)質(zhì)性連接狀態(tài)信息和包的序列信息(網(wǎng)關(guān)按包獨(dú)立轉(zhuǎn)發(fā)),分組的設(shè)計(jì)是網(wǎng)絡(luò)協(xié)議的基礎(chǔ)。

文章還討論了一個(gè)很有挑戰(zhàn)性的問(wèn)題:架構(gòu)與性能之間的關(guān)系。 互聯(lián)網(wǎng)結(jié)構(gòu)的設(shè)計(jì)者強(qiáng)烈地認(rèn)為,僅僅重視邏輯正確性而忽視性能是一個(gè)重大錯(cuò)誤。 但是,他們?cè)谔嵘艿郊軜?gòu)限制的任何方面的性能的嘗試中遇到了很大困難。 這些困難產(chǎn)生的原因有二,首先這個(gè)架構(gòu)的目標(biāo)不是保證性能,而是提供多樣性,其次(也許更基本),因?yàn)榭磥?lái)不存在正式的工具來(lái)描述性能。這也提出了關(guān)鍵性的另一個(gè)問(wèn)題,就是在體系結(jié)構(gòu)中如何規(guī)范的描述結(jié)構(gòu)性能問(wèn)題,以期能切實(shí)指導(dǎo)實(shí)踐者,單純的指明“這個(gè)網(wǎng)絡(luò)能吞吐多少數(shù)據(jù)”并不能解決根本性的問(wèn)題,也不是體系結(jié)構(gòu)需要進(jìn)行描述的。

一個(gè)系統(tǒng)是與其所運(yùn)行的環(huán)境高度配合的,商業(yè)利益清單可以很容易的對(duì)目標(biāo)進(jìn)行問(wèn)責(zé)。從批評(píng)者的語(yǔ)言里思考一下,或許可以得到一些靈感。

2006年Geoffrey G. Xie在論文《互聯(lián)網(wǎng)架構(gòu):回顧和展望》中總結(jié)了互聯(lián)網(wǎng)架構(gòu)設(shè)計(jì)的三大原則。第一點(diǎn)是犧牲效率獲得簡(jiǎn)單性,其后果是網(wǎng)路對(duì)底層硬件和上層應(yīng)用需求都不做任何假設(shè),衍生了復(fù)雜的QoS,傳輸控制和流量工程等。第二點(diǎn)是報(bào)文服務(wù),目前也被稱(chēng)為IP細(xì)腰,邏輯上看,這個(gè)細(xì)腰構(gòu)成網(wǎng)絡(luò)上數(shù)據(jù)流動(dòng)的協(xié)議水位線(xiàn)。其缺點(diǎn)是網(wǎng)絡(luò)設(shè)備不感知數(shù)據(jù)內(nèi)容。第三點(diǎn)是端到端論斷,和IP細(xì)腰一起,讓整個(gè)網(wǎng)絡(luò)以主機(jī)為中心,而不是以數(shù)據(jù)為中心。ACM通訊上發(fā)布文章《網(wǎng)絡(luò)命名內(nèi)容》,提出了對(duì)內(nèi)容進(jìn)行編址,用內(nèi)容細(xì)腰替代IP細(xì)腰的一家之言。

【本文是51CTO專(zhuān)欄作者石頭的原創(chuàng)文章,轉(zhuǎn)載請(qǐng)通過(guò)作者微信公眾號(hào)補(bǔ)天遺石(butianys)獲取授權(quán)】

戳這里,看該作者更多好文

責(zé)任編輯:武曉燕 來(lái)源: 51CTO專(zhuān)欄
相關(guān)推薦

2022-01-04 20:52:50

函數(shù)異步Promise

2021-09-12 22:22:15

前端

2022-02-10 14:38:28

前端框架瀏覽器

2022-06-30 09:10:33

NoSQLHBaseRedis

2023-11-28 12:25:02

多線(xiàn)程安全

2019-12-26 09:15:44

網(wǎng)絡(luò)IOLinux

2010-07-01 15:45:22

網(wǎng)絡(luò)通信協(xié)議

2024-09-20 05:46:00

2024-06-13 08:01:19

2024-09-11 16:49:55

2022-09-19 07:57:59

云服務(wù)互聯(lián)網(wǎng)基礎(chǔ)設(shè)施

2022-10-09 15:18:31

SwaggerOpenAPI工具

2024-05-31 08:10:58

Netty線(xiàn)程模型多路復(fù)用模型

2022-08-14 07:14:50

Kafka零拷貝

2022-09-06 11:13:16

接口PipelineHandler

2025-03-07 00:11:00

JWTJSONSession

2024-12-06 14:34:00

Spring過(guò)濾器

2025-02-21 15:25:54

虛擬線(xiàn)程輕量級(jí)

2024-09-27 15:43:52

零拷貝DMAIO

2022-09-23 11:00:27

KafkaZookeeper機(jī)制
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)