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