日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【大话存储】学习笔记(7章), OSI模型

發(fā)布時間:2023/12/20 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【大话存储】学习笔记(7章), OSI模型 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

任何系統(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。