【大话存储】学习笔记(7章), OSI模型
任何系統(tǒng)之間,如果需要通信,都需要一套自己的協(xié)議系統(tǒng)。這個協(xié)議系統(tǒng)一般要定義互相通信的語言,以及硬件。
OSI是被提取抽象出來的系統(tǒng)間通信模型,中文意思是“開放式系統(tǒng)互聯(lián)”,是描述多個系統(tǒng)之間交流的通用模型。
OSI模型
OSI初步
在講OSI之間,我們首先看一個例子,PC a向PC b發(fā)送數(shù)據(jù)包的過程如下:
- a在內(nèi)存中通過定義的語言生成數(shù)據(jù)包
- 將數(shù)據(jù)包通過總線傳給TCP/IP協(xié)議處理單元,告訴對方的IP地址、UDP還是TCP、端口號
- TCP/IP處理模塊收到包之后,封裝,通過總線發(fā)送給以太網(wǎng)卡
- 以太網(wǎng)卡再進(jìn)行編碼,變成高低電平震蕩發(fā)給交換機
- 交換機將數(shù)據(jù)包交換到b的接口
- b輸送到以太網(wǎng)卡的解碼芯片,去掉以太網(wǎng)頭然后產(chǎn)生中斷,將數(shù)據(jù)包送到內(nèi)存
- TCP/IP處理模塊提取IP頭和TCP頭,以便區(qū)分應(yīng)該輸送到哪個應(yīng)用程序的緩沖區(qū)內(nèi)存。
- 送到b的應(yīng)用程序緩沖區(qū)內(nèi)存
可以發(fā)現(xiàn)里面最重要的就是三個元素
- 連:通信雙方需要連通起來。
- 找:指的是通信雙方必須能區(qū)分自己和對方。
- 發(fā):定義了如何將數(shù)據(jù)發(fā)到對方。
OSI的七個層次
OSI模型將系統(tǒng)通信劃分為了7個層次,最上面的三個層次可以歸屬到應(yīng)用層。這個層不需要關(guān)心如何將數(shù)據(jù)傳送到對方,只關(guān)心如何組織和表達(dá)數(shù)據(jù)。
應(yīng)用層
應(yīng)用層是OSI的最上層,表示一個系統(tǒng)對另一個系統(tǒng)要傳達(dá)的最終消息。
只關(guān)注數(shù)據(jù), 不關(guān)注指令如何發(fā)送
表示層
表示層就是對應(yīng)用層數(shù)據(jù)的一種表示。
發(fā)送方必須用雙方規(guī)定好的格式來表示信息:可以嵌入在實體數(shù)據(jù)中。
會話層
會話層:建立會話交互機制。實際是雙方的應(yīng)用程序之間的交互。
應(yīng)用層、表示層、會話層的數(shù)據(jù)內(nèi)容都被封裝起來,交給押運員傳輸層。
TCP/IP只有4層:應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、物理鏈路層,它將OSI的應(yīng)用層、表示層、會話層合并為一層,即應(yīng)用訪問層。意思是這個層全部與應(yīng)用程序相關(guān)的邏輯,與網(wǎng)絡(luò)通信無關(guān)。應(yīng)用程序只需要調(diào)用下層的接口就可以完成通信。
下四層的作用是把上三層的數(shù)據(jù)成功送到目的地。
傳輸層
典型的傳輸層程序如下:
- TCP協(xié)議的作用是保證上層數(shù)據(jù)能傳輸?shù)侥康牡亍n愃曝涍\公司的押運員,不管通過什么渠道(直達(dá)還是下一跳),不管物理鏈路的類型,只要送到即可。
- 如果出現(xiàn)錯誤,需要重新發(fā)送。每件貨物到了目的地必須找收件人簽字(TCP的ACK應(yīng)答包)或者一批貨物到了以后一次性簽收。(滑動窗口)
- 最后回公司登記
TCP主要處理擁塞和流量控制。路由器是調(diào)度中心,它可以決定走哪條路。TCP不能調(diào)度,它只是在發(fā)生了擁擠就只能通知后續(xù)的貨物慢點發(fā)。如果道路暢通,則通知后面的貨物加速發(fā)送。
那么TCP是怎么知道鏈路是否擁塞呢?它可以通過接收方返回的ACK應(yīng)答來判斷鏈路擁擠的。如果半天都沒收到對方的簽字,說明擁塞,有丟失
** 傳輸層的程序一定運行在通信雙方的終端設(shè)備上。**而不是在中間的互聯(lián)設(shè)備上。
因為傳輸層是一種端到端的保障機制,必須保證成功收到了并成功處理數(shù)據(jù),才算發(fā)送成功了。如果只到了對方的網(wǎng)卡,但是斷電了,也不叫端到端保障。
具體的可以再看從輸入網(wǎng)址到瀏覽器返回內(nèi)容(二),TCP/IP篇
網(wǎng)絡(luò)層
上面說到了傳輸層其實只是一個押運員,它并不能進(jìn)行調(diào)度,那么如何選路就交給了網(wǎng)絡(luò)層。
同樣以客戶寄貨物為例,當(dāng)客戶把貨物交給貨運公司的時候,會填寫目的地址,至于應(yīng)該走哪條路,統(tǒng)統(tǒng)不管,全部交給網(wǎng)絡(luò)層處理。
- 貨運公司為每件貨物貼上IP頭地址標(biāo)簽
- 貨運公司掌握了全球范圍的地址信息(路由表)
- 選擇了一條路就上路。
- 貨物每中轉(zhuǎn)到一個地方就交給那個地方的調(diào)度,由調(diào)度來決定下一站到哪里。
- 舊調(diào)度不必告訴新調(diào)度最終的目的怎么走,因為所有調(diào)度都知道最終的目的。
總結(jié)一下就是,客戶寄送貨物的時候需要給出最終的目的地址,不管這個貨物途徑哪個中轉(zhuǎn)站,所有的中轉(zhuǎn)站都會知道最終的目的地址。
比如,要從新疆將貨物寄到青島,但是新疆到青島沒有直到的火車,所以只能去北京轉(zhuǎn)出。
那么新疆的調(diào)度會去查找路由表,發(fā)現(xiàn)必須先到北京。注意此時在貨物上貼上的還是青島的標(biāo)簽,而不是北京的標(biāo)簽,但是會將貨物發(fā)到去北京的火車上。
貨物到北京,查看最終的目的地,會查找北京調(diào)度中心的路由表,此路由表與新疆的表不同。于是將貨物送到去青島的火車。
可以看出** 路由器就是調(diào)度的角色**
比如從青島訪問北京的服務(wù)器,具體步驟如下:
- 首先必須知道服務(wù)器的IP地址,用這個IP地址作為最終目的地址組裝成數(shù)據(jù)包,發(fā)送給青島的Internet提供商(下面叫運營商)的路由器
- 運營商的路由器解析目的IP地址,發(fā)現(xiàn)應(yīng)該從1號端口發(fā)送出,于是發(fā)到了河北的另一臺路由器。
- 河北路由器根據(jù)目的IP查找路由表,發(fā)現(xiàn)需要從8口出
- 多次中轉(zhuǎn)以后,發(fā)到了北京的路由器。
- 最終到了北京的服務(wù)器,將這個包傳送到這臺服務(wù)器的網(wǎng)卡,并提交到TCP/IP協(xié)議處理的內(nèi)存空間。
- 發(fā)現(xiàn)是一個TCP握手?jǐn)?shù)據(jù)包,所以返回一個確認(rèn)包,三次握手完成后,就可以向服務(wù)器發(fā)送HTTP請求來獲取網(wǎng)頁資源。
在中轉(zhuǎn)的過程中,目的IP并不會改變,改變的只是MAC地址,也就是說會將MAC地址改為下一站的地址。
數(shù)據(jù)鏈路層
數(shù)據(jù)鏈路層:連通兩個設(shè)備之間的鏈路,將上層的數(shù)據(jù)包再次打包成對應(yīng)鏈路特定的格式。按照對應(yīng)鏈路的規(guī)則在鏈路上傳輸給對方。
數(shù)據(jù)鏈路就好比交通規(guī)則:上路之前還需要看公路的質(zhì)量怎么樣,和對方商量傳輸?shù)氖乱恕?/p>
鏈路層的作用:
- 協(xié)商鏈路參數(shù):雙工、速率、鏈路質(zhì)量
- 打包成幀,加上同步頭,一次傳輸一句或者一個字符一個字符(取決于上層的選擇)
- 鏈路層程序調(diào)用物理層提供的接口,將幀交給物理層。
- 提供一些保障機制,在每個幀之后加一個校驗字段。如果不符說明鏈路干擾,直接丟棄,不過不會報告錯誤,因為上層對鏈路層的錯誤不關(guān)心。接收方的傳輸層會感知某個包沒有到達(dá),重新傳送不完整的包。鏈路層只偵錯,不糾錯。
兩臺PC之間的通信和兩個路由器之間通信是有區(qū)別的。
路由間的通信:
簡單的路由設(shè)備工作在OSI的第三層,即網(wǎng)絡(luò)層,沒有上4層的處理邏輯。
所以收到包之后,只檢查包中的IP地址,不改變IP頭之上的其他內(nèi)容。
如果有NAT功能的路由器,會對IP包的源或者目的IP地址做修改。
下圖為通信路徑上各個設(shè)備所作用的層次示意圖:
- PC A上的瀏覽器要訪問PC B上的Web服務(wù),首先調(diào)用WinSock接口,訪問OS內(nèi)核中的TCP/IP協(xié)議棧,將目的IP和目的端口以及數(shù)據(jù)(HTTP GET請求)告訴TCP/IP協(xié)議棧
- 協(xié)議棧發(fā)現(xiàn)與PC B不存在鏈接,所以通過三次握手與B的協(xié)議棧建立連接。(A的協(xié)議棧組裝第一次握手包,發(fā)給OS的內(nèi)核緩沖區(qū),調(diào)用網(wǎng)卡驅(qū)動從緩沖區(qū)將IP包編碼并傳遞出去,因為握手包很小,所以只需要一個幀。)
- 幀到達(dá)路由器A的緩沖區(qū),產(chǎn)生中斷信號,去掉以太網(wǎng)頭,發(fā)送到路由器A的內(nèi)存,等待IP轉(zhuǎn)發(fā)邏輯塊處理(IP路由協(xié)議計算模塊),分析出IP包的頭部目的IP地址,查找路由表確定出去的端口號,所以IP路由運算一定要高效。
- 查找出后,從網(wǎng)卡2出發(fā)送到路由器B的網(wǎng)卡2.通過同樣的過程,發(fā)送到PC B的網(wǎng)卡緩沖區(qū),網(wǎng)卡產(chǎn)生中斷,通過總線傳送到TCP/IP的協(xié)議棧緩沖區(qū)內(nèi)存。
- PC B的協(xié)議棧分析出IP是自己的,端口號是80,同時握手標(biāo)識位是二進(jìn)制1,就知道是從源設(shè)備向Web服務(wù)程序所監(jiān)聽的端口發(fā)起的握手連接。所以回復(fù)IP包給PC A,PC A再回一個最終確認(rèn)的包。
- 握手成功,PC A的協(xié)議棧將緩沖區(qū)中有瀏覽器發(fā)送過來的HTTP GET請求數(shù)據(jù)組裝成TCP/IP數(shù)據(jù)包發(fā)送給PC B。PC B獲得數(shù)據(jù)包之后,分析TCP 端口號,根據(jù)對應(yīng)關(guān)系將數(shù)據(jù)放到監(jiān)聽這個端口的應(yīng)用程序的緩沖區(qū)內(nèi)存。
- 應(yīng)用程序收到GET請求后,觸發(fā)Web服務(wù)邏輯流程,返回Web數(shù)據(jù)。同樣由B的協(xié)議棧發(fā)送給PC機 A。
未收到確認(rèn)的包會放到緩沖區(qū)中,不會刪除,直到收到對方的確認(rèn)。
所以即使中途的設(shè)備把包丟棄了,運行在兩端的TCP/IP協(xié)議依然會重傳,這就是端到端的保障,因為設(shè)備中途網(wǎng)絡(luò)設(shè)備不會緩存發(fā)送的數(shù)據(jù),更不會自動重傳。
現(xiàn)在我們來對比一下IP頭和TCP頭的區(qū)別:
- IP頭是個標(biāo)簽,用來查看是誰發(fā)的貨物。
- TCP頭是用來確認(rèn)由哪個上層應(yīng)用程序來處理收到的包。(用端口號來決定)
物理層
物理層:在一種介質(zhì)上將數(shù)據(jù)編碼發(fā)送給對方。
注意鏈路層是控制物理層的。
我們可以把物理層看做傳送帶,不會進(jìn)行貨物分批,所以需要鏈路層給每批貨物加標(biāo)志性的頭,接收方看到標(biāo)志了以后就知道新一批貨物來了。
經(jīng)過物理層編碼后,最終變成了一串bit流。通過電路振蕩傳輸給對方,收到bit流之后,提交給鏈路層程序,剝?nèi)ユ溌穼油筋^、幀頭幀尾、控制字符。
MTU ,最大傳輸單元:每種鏈路都有自己最合適的分批大小
如果一次傳輸傳送大于這個大小的貨物,超過了鏈路接收放的處理吞吐量,會造成緩沖區(qū)溢出。
不過TCP和IP協(xié)議都會給貨物分批。TCP會首先給貨物分批,到了IP層,會按照鏈路層的分批大小來進(jìn)行分批,如果TCP的分批大小已經(jīng)小于鏈路層的分批,不會再分。
被IP層分批的貨物,最終會由接受方的IP層再組裝,但是由TCP分批的貨物,接收方的TCP層不會合并。對貨物的處理分析全部交由上層的應(yīng)用程序來處理
轉(zhuǎn)載于:https://www.cnblogs.com/dy2903/p/8422587.html
總結(jié)
以上是生活随笔為你收集整理的【大话存储】学习笔记(7章), OSI模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IE hack 条件语句
- 下一篇: 用户故事与敏捷方法pdf