《趣談網絡協議》00~04筆記

文章目錄

關於我的倉庫

  • 這篇文章是我爲面試準備的學習總結中的一篇
  • 我將準備面試中找到的所有學習資料,寫的Demo,寫的博客都放在了這個倉庫裏iOS-Engineer-Interview
  • 歡迎star👏👏
  • 其中的博客在簡書,CSDN都有發佈
  • 博客中提到的相關的代碼Demo可以在倉庫裏相應的文件夾裏找到

前言

  • 該系列爲學習《趣談網絡協議》的系列學習筆記
  • 總結內容包括其中的重要知識概念,以及課後題的解答
  • 計算機網絡的協議不僅是爲了能作爲進入大廠的敲門磚,也是希望能抓到計算機世界不變的本質,希望能在計算機領域努力下去
  • 與同步學習的網課《數據結構與算法之美》不同,計算機網絡明顯抽象,之前的接觸基本爲0【只有大一學習計算機導論的時候會涉及部分】,也不是很能明白其中的知識點之類的,只能說希望在學習過程中多摸索吧!
  • 由於欠缺的基礎知識比較多,系列文章不會只涉及網課,該補充的知識還是得放上去
  • 多說無益,你應該開始學了

00講想成爲技術牛人?先搞定網絡協議!

  • 開講詞跟多的是涉及講課的內容與方式,學習摘錄的點不多
  • 很多情況下,只要搞定了網絡,一個大型系統也就搞定了一半
  • 想要不被滾滾而來的新技術淘汰,就要掌握這些可以長 久使用的知識,而網絡協議就是值得你學習,而且是到 40 歲之後依然有價值的知識。
  • 困難:
    • 網絡協議知識點太多,學完容易忘
    • 看上去懂了,經不住問
    • 知識點學會了,實際運用依然不會
  • 金句:看上去最是枯燥,最基礎的東西往往具有最長久的生命力

01講爲什麼要學習網絡協議?

引入:什麼是協議?

  • 這裏以編譯器“翻譯”編程語言舉例,以OC舉例:
int main(int argc, const char * argv[]) {
   @autoreleasepool {
       // insert code here...
       NSLog(@"Hello, World!");
   }
   return 0;
}
  • 這裏我們希望在控制檯中打印出“Hello, World”,我們使用OC或者其他的高級編程語言就是一種”協議“,這個協議保證的就是讓計算機能理解我們的需求,通過協議,計算機才能明白我們希望它們做什麼

協議三要素

  • 由於我們使用的還是高級語言,所以需要編譯器給我們進行翻譯工作,這裏就體現出了協議的三要素
    page2image54362736.png
  • 語法:要遵循的規則與格式【括號要成對,結束要使用分號等】
  • 語義:這一段要具備某種意義【數字減去數字是有意義的,數字減去文本一般來說就沒有意義。】
  • 順序:先做什麼,後做什麼【可以先加上某個數值,然後再減去某個數值】
  • 協議還有其他的特點:
    • 協議中的每個人都必須瞭解協議,並且預先知道所要完成的所有的步驟。
    • 協議中的每個人都必須同意並遵循它。
    • 協議必須是清楚的,每一步必須明確定義,並且不會引起誤解。
  • 另外,雖然老師舉了編譯器中國例子,但現在通行的理解會直接把協議就默認爲網絡協議

協議例子

  • 網易考拉的例子:
HTTP/1.1 200 OK
Date: Tue, 27 Mar 2018 16:50:26 GMTContent-Type: text/html;charset=UTF-8
Content-Language: zh-CN

<!DOCTYPE html>
<html>
<head>
<base href="https://pages.kaola.com/" />
<meta charset="utf-8"/> <title> 網易考拉 3 週年主會場 </title>
  • 語法:符合語法,也就是說,只有按照上面那個格式來,瀏覽器才認。例如,上來是狀態,然後是首部,然後是內容。【這裏稍微有點web開發小基礎就能明白三塊分別是什麼,哪怕是我這種天天翹課的水平😝】
  • 語義:符合語義,就是要按照約定的意思來。例如,狀態 200,表述的意思是網頁成功返回。如果不成功,就是我們常見的“404”。【就是第一行中的200】
  • 順序:符合順序,你一點瀏覽器,就是發送出一個 HTTP 請求,然後纔有上面那一串 HTTP 返回的東西。

【準備掉頭髮吧!】以一個在電商網站上下單的過程初識有哪些常用網絡協議

  • 學00講的時候還很快樂,覺得學這個很有用,blbl雄心壯志,結果01講這個神仙例子就把我整懵了,乃至學完這節後每次點擊鏈接都會想下其中有那麼複雜的流程。。。還我上網體驗!🌚
  • 由於還在學習前期,其實對於這個例子涉及到的東西有些還是不太理解,如果有大神看到這篇文章,願意指出錯誤,不勝感激!
  • 唉,多說無益,開整吧!

目標IP地址

  • 我們在輸入框中輸入的只是URL網址:https://www.kaola.com
  • 現在我們的瀏覽器只知道名字是“www.kaola.com”,並不知道具體的地點,此時,我們需要獲取到目標IP地址
  • 這裏有兩種方式:
    • 一般的地址簿協議DNS
    • 更加精確的地址簿查找協議HTTPDNS
  • 無論使用什麼方式,最後都會獲取到106.114.138.24這個地址【沒明白,這個IP地址好像沒什麼特別的。。。】
  • 而IP就是互聯網世界的門牌號
  • 下面就要開始打包請求,進入傳輸層

補充知識:URL

  • url是統一資源定位符,對可以從互聯網上得到的資源的位置和訪問方法的一種簡潔的表示,是互聯網上標準資源的地址。互聯網上的每個文件都有一個唯一的URL,它包含的信息指出文件的位置以及瀏覽器應該怎麼處理它。url 是網民們在 Internet 知識海洋中尋找資源、獲取信息、用 E- mail 通訊、網上交流等所必不可少的。
  • 基本URL包含模式(或稱協議)、服務器名稱(或IP地址)、路徑和文件名,如“協議://授權/路徑查詢”。完整的、帶有授權部分的普通統一資源標誌符語法看上去如下:協議://用戶名:密碼@子域名.域名.頂級域名:端口號/目錄/文件名.文件後綴參數=值#標誌。
  • 第一部分:模式/協議(scheme):它告訴瀏覽器如何處理將要打開的文件。最常用的模式是超文本傳輸協議(Hypertext Transfer Protocol,縮寫爲HTTP),這個協議可以用來訪問網絡
  • 第二部分:第二部分是 Internet 主機名。我們希望訪問的 WWW 頁 面就存放在該計算機上。有了這臺計算機的名 字,Internet 通過 DNS( 域名服務器) 找到與這臺計算機的英文名相對應的數字地址,也叫做 IP 地址,就能夠在全世界範圍內找到這臺計算機,不管它是在哪個國家或哪個地區。 文件所在的服務器的名稱或IP地址,後面是到達這個文件的路徑和文件本身的名稱。服務器的名稱或IP地址後面有時還跟一個冒號和一個端口號。它也可以包含接觸服務器必須的用戶名稱和密碼。
  • 第三部分:url的第三項爲路徑。它定義信息保存在 這臺計算機上的什麼地方,即哪個子目錄中。 每個子目錄的前面有 一條斜槓 。路徑部分包含等級結構的路徑定義,一般來說不同部分之間以斜線(/)分隔。詢問部分一般用來傳送對服務器上的數據庫進行動態詢問時所需要的參數。
  • 第四部分:url的第四項是文件名或主頁名。也就是我們想要訪問的某個具體信息的文件名或主頁名。在 http://home.netscape.com/pub/ma in/index.html 中 index.html 爲主頁名。當然,文件名也是可以省略的,如果省略,你所連接的計算機將自動決定使用哪一個文件。常見的 文件類型有:正式的 Web 頁( .html) 、純文本文件( .txt 或.text) 、圖片文件( .gif 或.jpeg) 、聲音文件( .wav 或.au) 、電 影文件( .avi 或.mpeg) 等。
  • 上面👆這些內容來自百度百科,我們根據我們這個例子來看看每個部分是什麼
  • 我們這個例子就兩部分,http是協議,www.wangyikaola.com就是域名,也就是第二部分裏面的主機名,我們根據它來獲取到唯一的IP地址
  • 參考:快速搞懂URL的構成

應用層

  • 這裏注意,雖然我把查找IP地址部分放在了應用層上面,但是DNS協議也是應用層的協議,換句話說上面這部分也是應用層的操作
  • 我們在知道目標地址後,會開始打包請求,對於一般的請求,使用http;由於購物中往往需要加密傳輸,我們使用HTTPS協議
  • 我們會在這一層寫清楚“我要買什麼,買多少”【用戶輸入的內容】
  • 這裏捋一捋,我們現在知道目標IP地址,目標URL,以及我們的內容

page4image54377712.png

  • DNS、HTTP、HTTPS 所在的層我們稱爲應用層。經過應用層封裝後,瀏覽器會將應用層 的包交給下一層去完成,通過 socket 編程來實現。下一層是傳輸層

補充知識:http與https

  • http:HyperText Transfer Protocol,超文本傳輸協議
    • http的中文叫做超文本傳輸協議,它負責完成客戶端到服務端的一系列操作,是專門用來傳輸注入HTML的超媒體文檔等web內容的協議,它是基於傳輸層的TCP協議的應用層協議
    • HTTP是一個簡單的請求-響應協議,它通常運行在TCP之上。它指定了客戶端可能發送給服務器什麼樣的消息以及得到什麼樣的響應。請求和響應消息的頭以ASCII碼形式給出;而消息內容則具有一個類似MIME的格式。這個簡單模型是早期Web成功的有功之臣,因爲它使得開發和部署是那麼的直截了當。
  • https:Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext Transfer Protocol Secure,超文本傳輸安全協議
    • https是基於安全套接字的http協議,也可以理解爲是http+ssl/tls(數字證書)的組合
    • 是以安全爲目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。 它是一個URI scheme(抽象標識符體系),句法類同http:體系。用於安全的HTTP數據傳輸。
  • 區別:
    • HTTP 的 URL 以 http:// 開頭,而 HTTPS 的 URL 以 https:// 開頭

    • HTTP 是不安全的,而 HTTPS 是安全的

    • HTTP 標準端口是 80 ,而 HTTPS 的標準端口是 443

    • 在 OSI 網絡模型中,HTTPS的加密是在傳輸層完成的,因爲SSL是位於傳輸層的,TLS的前身是SSL,所以同理

    • HTTP無需認證證書,而https需要認證證書

    • 簡單來說http是用來進行html等超媒體傳輸的,但是http不安全,爲了安全,使用證書SSL和HTTP的方式進行數據傳輸,也就是HTTPS

  • 參考:HTTP和HTTPS的區別和常見的面試題

傳輸層

  • 傳輸層有兩種協議, 一種是無連接的協議UDP,一種是面向連接的協議TCP。對於支付來講,往往使用 TCP協議。所謂的面向連接就是,TCP 會保證這個包能夠到達目的地。如果不能到達,就會重新發送,直至到達。【UDP有不提供數據包分組、組裝和不能對數據包進行排序的缺點,也就是說,當報文發送之後,是無法得知其是否安全完整到達的。】

  • UDP沒有被完全淘汰,但既然http都是基於TCP的應用層協議,這個UDP,emm。。。

  • TCP 協議裏面會有兩個端口,一個是瀏覽器監聽的端口,一個是電商的服務器監聽的端 口。操作系統往往通過端口來判斷,它得到的包應該給哪個進程。【頂不住了,怎麼突然開始操作系統,線程了😿】

page5image54368560.png

  • ???:這裏的端口指的是總結電腦上的東西,我們在瀏覽器上下單,這個電商應用端口是個啥子東西

補充知識:端口

  • "端口"是英文port的意譯,可以認爲是設備與外界通訊交流的出口。
  • 端口是指接口電路中的一些寄存器,這些寄存器分別用來存放數據信息、控制信息和狀態信息,相應的端口分別稱爲數據端口、控制端口和狀態端口。
    電腦運行的系統程序,其實就像一個閉合的圓圈,但是電腦是爲人服務的,他需要接受一些指令,並且要按照指令調整系統功能來工作,於是系統程序設計者,就把這個圓圈截成好多段,這些線段接口就叫端口(通俗講是斷口,就是中斷),系統運行到這些端口時,一看端口是否打開或關閉,如果關閉,就是繩子接通了,系統往下運行,如果端口是打開的,系統就得到命令,有外部數據輸入,接受外部數據並執行。
  • TCP端口:TCP端口就是爲TCP協議通信提供服務的端口。TCP (Transmission Control Protocol) ,TCP是一種面向連接(連接導向)的、可靠的、基於字節流的運輸層(Transport layer)通信協議,由IETF的RFC 793說明(specified)。在計算機網絡OSI模型中,它完成第四層傳輸層所指定的功能。我們的電腦與網絡連接的許多應用都是通過TCP端口所實現的。

網絡層【計算機網絡露出了猙獰的笑容】

  • 這裏我們會看到目前爲止,我們還是在自己電腦上折騰,還沒有走出去,而網絡層就會真正帶我們進行傳輸
  • 網絡層相關的協議就是我們最開始就提到的根據域名獲取到的IP協議。
  • 在 IP 協議裏面會有源 IP 地址,即瀏覽器所在機器的 IP 地址和目標 IP 地址,也即電商網站所在 服務器的 IP 地址。

page5image54375840.png

  • 現在我們知道了目標IP地址,需要根據它到達目標機器
  • 但由於我們是要與遠方的機器進行交互,要出國,所以我們首先要到網關
  • 操作系統啓動的時候,就會被 DHCP 協議配置 IP 地址,以及默認的網關的 IP 地址 192.168.1.1。【後面會學到】
  • 192.168.1.1屬於IP地址的C類地址,屬於保留IP,專門用於路由器設置
  • 現在我們有本地的IP地址,有網關的IP地址,現在要將目標IP地址發給網關,此時會通過ARP協議【鏈路層】將本機的MAC地址,網關的MAC地址一起打包發給網關【夭壽了,MAC即是電腦又是口紅還是地址】
  • 又網關給我們進行轉發,帶我們找到目標
  • 這裏涉及到的鏈路層貌似只是爲了獲取下MAC地址,取出MAC地址接下來還是網絡層方面的傳輸【可能理解不太對】

補充知識:MAC地址

  • MAC地址(英語:Media Access Control Address),直譯爲媒體存取控制位址,也稱爲局域網地址(LAN Address),MAC位址,以太網地址(Ethernet Address)或物理地址(Physical Address),它是一個用來確認網絡設備位置的位址。在OSI模型中,第三層網絡層負責IP地址,第二層數據鏈路層則負責MAC位址。MAC地址用於在網絡中唯一標示一個網卡,一臺設備若有一或多個網卡,則每個網卡都需要並會有一個唯一的MAC地址 。
  • 每個網卡都會有個唯一的MAC標識符,劉超老師在後面會有更精彩的比喻講解

下面是一段劉超老師的神奇比喻

  • 網關收到包之後,會根據自己的知識,判斷下一步應該怎麼走。網關往往是一個路由器,到 某個 IP 地址應該怎麼走,這個叫作路由表。
  • 路由器有點像玄奘西行路過的一個個國家的一個個城關。每個城關都連着兩個國家,每個國家相當於一個局域網,在每個國家內部,都可以使用本地的地址 MAC 進行通信。
  • 這裏需要一波理解:路由器是城關,國家是一個局域網,在局域網的內部可以直接使用MAC地址通信【就像上面我們使用本機的MAC地址向網關發送我們的包】
  • 路由表:在計算機網絡中,路由表(routing table)或稱路由擇域信息庫(RIB, Routing Information Base),是一個存儲在路由器或者聯網計算機中的電子表格(文件)或類數據庫。路由表存儲着指向特定網絡地址的路徑(在有些情況下,還記錄有路徑的路由度量值)。路由表中含有網絡周邊的拓撲信息。路由表建立的主要目標是爲了實現路由協議和靜態路由選擇。
  • 現在我們到達了下一個路由器【城關】,需要問一下接下來怎麼走【在IP頭中有記錄源IP以及目標IP】

page6image54505664.png

  • 城關往往是知道這些“知識”的,因爲城關和臨近的城關也會經常溝通。到哪裏應該怎麼 走,這種溝通的協議稱爲路由協議,常用的有OSPFBGP。【網絡層】

page7image54465824.png

  • 在到下一個國家還是一樣先通過國家裏的MAC地址獲取到下一個城關的MAC地址【這裏就能大概理解到爲什麼一定要通過MAC地址通信,城關就是路由器,默認的IP地址是一樣的,如果不加以區分,顯然會出錯】

  • 當到達目標城關後【進入了目標局域網】,在這裏就能根據目標IP獲取到目標MAC

  • 目標服務器發現 MAC 地址對上了,取下 MAC 頭來,發送給操作系統的網絡層。發現 IP 也對上了,就取下 IP 頭。IP 頭裏會寫上一層封裝的是 TCP 協議,然後將其交給傳輸層,即TCP 層【傳輸層】。

  • 對於傳輸層,只要收到一個包就會回覆一個包說明收到了,這個包裏只是TCP層一個說明,說明收到了。這個回覆包會根據來時的路走回去報個平安。

  • 爲什麼呢?因爲我們使用的面向連接的TCP協議,它如果遲遲收不到回覆會重新發送

  • 這裏需要一波理解:我們在應用層下單,進入傳輸層,再下到網絡層,通過鏈路層獲取MAC地址後,回到網絡層,在網絡層見通信找到了目標機器,這是一個由上至下的過程;而發送到以後,會先根據MAC地址驗證,往上到網絡層,驗證IP地址,再往上到傳輸層,發送收到的包。這個整個流程應用層只幹一次活,都是TCP埋頭苦幹,注意⚠️

  • 當網絡包平安到達 TCP 層之後,TCP 頭中有目標端口號,通過這個端口號,可以找到電商 網站的進程正在監聽這個端口號,假設一個 Tomcat,將這個包發給電商網站。

page8image54508160.png

  • 可以看到,我們的請求一開始只有正文部分,隨着一層層往下,添加了各種內容,而發送到以後,隨着一層層往上,內容不斷被剝除

  • 電商網站的進程得到 HTTP 請求的內容,知道了要買東西,買多少。往往一個電商網站最 初接待請求的這個 Tomcat 只是個接待員,負責統籌處理這個請求,而不是所有的事情都 自己做。例如,這個接待員要告訴專門管理訂單的進程,登記要買某個商品,買多少,要告 訴管理庫存的進程,庫存要減少多少,要告訴支付的進程,應該付多少錢,等等。

  • 如何告訴相關的進程呢?往往通過 RPC 調用,即遠程過程調用的方式來實現。遠程過程調 用就是當告訴管理訂單進程的時候,接待員不用關心中間的網絡互連問題,會由 RPC 框架 統一處理。RPC 框架有很多種,有基於 HTTP 協議放在 HTTP 的報文裏面的,有直接封裝 在 TCP 報文裏面的。

  • 當接待員發現相應的部門都處理完畢,就回復一個 HTTPS 的包,告知下單成功。這個 HTTPS 的包,會像來的時候一樣,經過千難萬險到達你的個人電腦,最終進入瀏覽器,顯 示支付成功。

所有涉及到的協議

page9image54522256.jpg

課後題:當網絡包到達一個城關的時候,可以通過路由表得到下一個城關的 IP 地址,直接通過 IP 地 址找就可以了,爲什麼還要通過本地的 MAC 地址呢?

  • mac好比人的身份id,IP好比他的住址,住址可以變,人的身份🆔不會變。
  • IP是網絡層使用的 mac是鏈路層使用的 ip包最終還是要通過物理鏈接和mac地址進行交互的
  • 因爲mac地址是全世界唯一的,不會找錯人!而ip地址會是發生改變的!有可能現在ip地址 A是這裏的地址!在下一刻就是B的地址了!
  • 綜上所述:所以要有mac地址!

02講網絡分層的真實含義是什麼?

  • 還好第二講不是很複雜,講道理如果你把第一講像我一樣精讀過去,第二講其實沒什麼新的東西【當然,要是每一講都跟第一講一樣複雜,咱也頂不住】

  • 由於目前還沒有學過計算機網絡,所以裏面一些概念其實咱也不懂,沒系統瞭解過,看後面會不會講清楚吧!

  • 這一講以四個問題引入的,第一,第三問在這一講講清楚了,在這裏總結下

  • 當然,這兩個問題感覺本質上就一個問題,就是在說明網絡上跑的包一定是完整的

  • 爲了講清楚這是爲什麼,我們需要補充點營養,慢慢來唄

網絡迷思:分層祕辛

  • 我們知道網絡會分成應用層,傳輸層,網絡層,鏈路層,物理層
  • 分層是複雜程序的標配,只要接觸過軟件開發的童鞋肯定都會接觸到分層
  • 當然網絡包的格式很複雜,這個程序也很複雜。**複雜的程序都要分層,這是程序設計的要 求。**比如,複雜的電商還會分數據庫層、緩存層、Compose 層、Controller 層和接入層, 每一層專注做本層的事情。
  • 這裏老師教導我們要像一個處理網絡包的程序一樣去思考,什麼意思呢?就是說我們自己就是掌控整個發送網絡包流程的大管家,不管是在路由器,交換機,服務器上都是由我們來掌控。從這個角度去思考,瞭解整個發送網絡包的過程

卑微的“我”——工作流程

屏幕快照 2019-08-22 上午11.21.28

  • 這裏我們先不看具體實現細節,總覽一下整個流程
  • 整個流程分爲兩個部分,左半部分是GET請求,獲取網頁內容,右半部分是一個POST請求,我們要發送一個請求
  • 這兩個部分設計到的函數都是僞代碼,且正好一一對應
  • process中的layer2,3,tcp分別驗證了【扒下了】MAC頭,IP頭,TCP頭,最後根據HTTP頭展示內容
  • send也一樣的流程只是從上到下,把最初的一個http請求一步步往下包裝,知道最後又了MAC頭後進行發送
  • 這個流程告訴我們什麼呢?其實我們真正的目的只是通過網絡層去進行通信,因爲我們知道的就是當前IP地址以及目標IP地址,但是我們的通信還是要往下扒到MAC層
  • 具體結論後面看

層與層之間的關係

麼得靈魂的比喻

  • 這裏講到一般情況下我們會把每個層比作一家公司,各個層就好像是各個階層,一家公司也是分“層次”的,分總經理、經理、組長、員工。總經理之間有他們的溝通方式,經理和經理之間也有溝通方式,同理組長和員工。
  • 根據這個比喻的話,大致就是總經理就是應用層,經理就是傳輸層,等等
  • 這個比喻壞在他只能說明同一階層才能相互交流,比如只有網絡層與網絡層之間才能溝通
  • 但他沒有講明白交流的真正情況,就比如上面這個例子,我們其實只是想根據目標IP地址發送包,但是我們必須往下獲取到了MAC地址才能發送
  • 放在比喻裏就類似總經理談話,底下的人必須都在場,顯然和現實不太符合

劉超的奇妙比喻

  • 總經理之間溝通的時候,經理將總經理放在自己兜裏,然後組長把經理放自己兜 裏,員工把組長放自己兜裏,像套娃娃一樣。那員工直接溝通,不帶上總經理,就不恰當 了。
  • 現實生活中,往往是員工說一句,組長補充兩句,然後經理補充兩句,最後總經理再補充兩句。但是在網絡世界,應該是總經理說話,經理補充兩句,組長補充兩句,員工再補充兩句。
  • 這個比喻其實和我想的不太一樣,我想的是總經理間交流要把下面的人一層層放兜裏,這裏是總經理間交流是底下的員工要把上面的人揣兜裏
  • 但最後想來,還是超哥有一手👋,這樣的比喻就能很好講明白,所有包都是由下往上的,也就是說可以有下層沒上層,不可能有上層沒下層【這麼說來,可能這個公司的比喻先天不足,還是容易讓人迷惑】
  • 因此理解這個之後,我們就能明白,假如上層就是皇帝,下層就是太監,皇帝動動嘴,太監跑斷腿不是開玩笑的。以TCP層的三次握手爲例,看起來是TCP發送的消息,其實下面的IP,MAC扛着它跑的,爲此費了很大功夫了

重要結論

  • 只要是在網絡上跑的包,都是完整的。可以有下層沒上層,絕對不可能有 上層沒下層。
  • 對 TCP 協議來說,三次握手也好,重試也好,只要想發出去包,就要有 IP 層和 MAC 層,不然是發不出去的。
  • 所謂的二層設備、三層設備,都是這些設備上跑的程序不同而已。一個 HTTP 協議的包經過一個二層設備,二層設備收進去的是整個網絡包。這裏面 HTTP、TCP、 IP、 MAC 都 有。什麼叫二層設備呀,就是隻把 MAC 頭摘下來,看看到底是丟棄、轉發,還是自己留着。那什麼叫三層設備呢?就是把 MAC 頭摘下來之後,再把 IP 頭摘下來,看看到底是丟棄、轉發,還是自己留着。

課後題

如果你也覺得總經理和員工的比喻不恰當,你有更恰當的比喻嗎?

  • 看到有一個比喻有點妙
  • 通信協議就像沒有天橋的雙子樓,要從A座的24層到達B座24層就得先下樓梯再上樓梯
  • 由於雙子樓之間沒有天橋,必須先從24樓到一樓,才能到B樓上去
  • 完美契合上面幾個重要結論呀👏👏👏

要想學習網絡協議,IP 這個概念是最最基本的,那你知道如何查看 IP 地址嗎?

  • 下一講就會講到啦

03講ifconfig:最熟悉又陌生的命令行

  • 這一講不是很友好,我用的是macOS系統的電腦,有些東西和Linux不太一樣,還查不到很多資料,很煩
  • 另外,這一講的課後老師提到了講課時講的不清楚的地方說明當前不用瞭解太深,後面會補上,所以我平時對於不會的知識點,搜波資料,先mark住,兄弟們
  • 另外,做客戶端感覺和程序員常識有點脫節的,這個命令對我來說是陌生又陌生的命令🌚,當然也沒什麼好抱怨的,趕緊變強吧!

macOS系統查看IP地址

  • 命令和老師講的一樣:ifconfig
  • 但是第二個命令ip addr沒有,結果會是這樣【直接全部輸出太長了,就看lo0和en0的,對應了老師的那兩個網卡】:

C8614986-5C24-4C0B-8CD8-D87DA35D2682

  • 大致內容和老師的可以一一對應,講幾個不太一樣的
  • MAC地址就是en0中ether後面跟着的
  • 對於net_device flags網絡設備的狀態標識,和老師舉的例子多了幾個,我卻麼得找到解釋,很煩

IP地址

  • IP 地址是一個網卡在網絡世界的通訊地址,相當於我們現實世界的門牌號碼。

page3image342448.jpg

  • 一個IP地址由四部分組成,每個部分佔8位,也就是一共是32位
  • 對於A,B,C類地址分成了網絡號與主機號兩部分,大概就是一個是小區號一個是門牌號

page3image340160.jpg

  • C 類地址能包含的最大主機數量實在太少了,只有 254 個

無類型域間選路(CIDR)

  • 由於上面講的劃分的ABC類地址不太合理,所以在我們一般生活中幾乎不用區分幾類地址,而是通過CIDR去劃分
  • 將 32 位的 IP 地址一分爲二,前面是網絡號,後面是主機號。從哪裏分 呢?你如果注意觀察的話可以看到,10.100.122.2/24,這個 IP 地址中有一個斜槓,斜槓 後面有個數字 24。這種地址表示形式,就是 CIDR。後面 24 的意思是,32 位中,前 24 位是網絡號,後 8 位是主機號。
  • 我們舉一個10.100.122.2/24的例子來說明下面的概念:
    • 首地址:10.100.122.1
    • 子網掩碼:255.255.255.0
    • 廣播地址:10.100.122.255。如果發送這個地址,所有 10.100.122 【網絡號】網絡裏面的機器都可以收到。
    • 將子網掩碼和 IP 地址進行 AND 計算。前面三個 255,轉成二進制都是 1。1 和任何數值 取 AND,都是原來數值,因而前三個數不變,爲 10.100.122。後面一個 0,轉換成二進制 是 0,0 和任何數值取 AND,都是 0,因而最後一個數變爲 0,合起來就是 10.100.122.0。這就是網絡號。將子網掩碼和 IP 地址按位計算 AND,就可得到網絡號。

公有IP地址和私有IP地址

  • 我們先看回上面這張圖:

page4image496096.jpg

  • 儘管我們基本上已經用不上ABC類地址的劃分,但是私有與公有IP地址依然是個很重要的概念

  • 公有IP是唯一的,在互聯網世界只此一家,人們可以根據IP地址找到你,而下面的私有IP地址是可以內部隨意分配的

  • 表格中的 192.168.0.x 是最常用的私有 IP 地址。你家裏有 Wi-Fi,對應就會有一個 IP 地 址。一般你家裏地上網設備不會超過 256 個,所以 /24 基本就夠了。有時候我們也能見到 /16 的 CIDR,這兩種是最常見的,也是最容易理解的。

  • 不需要將十進制轉換爲二進制 32 位,就能明顯看出 192.168.0 是網絡號,後面是主機號。 而整個網絡裏面的第一個地址 192.168.0.1,往往就是你這個私有網絡的出口地址。例如, 你家裏的電腦連接 Wi-Fi,Wi-Fi 路由器的地址就是 192.168.0.1,而 192.168.0.255 就是 廣播地址。一旦發送這個地址,整個 192.168.0 網絡裏面的所有機器都能收到。

  • 這裏老師舉了一個計算的例子:16.158.165.91/22 這個 CIDR

  • 這裏說明對於子網掩碼應該是網絡號全是1,主機號全是0;對於廣播地址應該是網絡號不動,主機號全是1

  • global:網卡對外,可以接收各個地方的包

  • lo:環回藉口用於本機通信

爲什麼有了MAC地址還是需要IP地址

  • 這裏的比喻講的還是很清楚的,我們的MAC地址只是一個身份證,它雖然獨一無二,有點小拽,但是沒什麼用,我們無法通過身份證去找到一個人
  • 而IP地址就不一樣了,雖然IP地址可能會重複,但是IP地址會帶着我們找到目標MAC所在的子網
  • 而MAC只能在同一子網下進行查找【也就是老師上面講的吼一嗓子,工頭吼一嗓子】
  • MAC 地址的通信範圍比較小,侷限在一個子網裏面。例如,從192.168.0.2/24 訪 問 192.168.0.3/24 是可以用 MAC 地址的。一旦跨子網,即從192.168.0.2/24 到 192.168.1.2/24,MAC 地址就不行了,需要 IP 地址起作用了。

網絡設備狀態標識

  • 這一段知識很迷,我在網上不管是搜中文還是搜英文都搜不到老師講的這些內容
  • 就是找不到一個標識符大全,很奇怪
  • 咱也搞不清楚我的macOS電腦多出來的這幾個標識什麼意思
  • 這時,網課第一定律出現,你現在理解不了的東西說明不需要理解,後面就會懂的
  • 所以,愉快的跳過吧

補充知識:IPv6

  • IPv6是英文“Internet Protocol Version 6”(互聯網協議第6版)的縮寫,是互聯網工程任務組(IETF)設計的用於替代IPv4的下一代IP協議,其地址數量號稱可以爲全世界的每一粒沙子編上一個地址。
  • 由於IPv4最大的問題在於網絡地址資源有限,嚴重製約了互聯網的應用和發展。IPv6的使用,不僅能解決網絡地址資源數量的問題,而且也解決了多種接入設備連入互聯網的障礙。
  • 互聯網數字分配機構(IANA)在2016年已向國際互聯網工程任務組(IETF)提出建議,要求新制定的國際互聯網標準只支持IPv6,不再兼容IPv4。

小結

  • IP 是地址,有定位功能;MAC 是身份證,無定位功能;
  • CIDR 可以用來判斷是不是本地人;
  • IP 分公有的 IP 和私有的 IP。

課後題:

你知道 net-tools 和 iproute2 的“歷史”故事嗎?

  • net-tools起源於BSD,自2001年起,Linux社區已經對其停止維護,而iproute2旨在取代 net-tools,並提供了一些新功能。一些Linux發行版已經停止支持net-tools,只支持 iproute2。 net-tools通過procfs(/proc)和ioctl系統調用去訪問和改變內核網絡配置,而iproute2則通 過netlink套接字接口與內核通訊。
  • 聰明的讀者就會發現我只是馬住了

這一節講的是如何查看 IP 地址,那你知道 IP 地址是怎麼來的嗎?

  • 網協是怎樣實現的?網絡互連設備,如以太網、分組交換網等,它們相互之間不能互通,不能互通的主要原因是因爲它們所傳送數據的基本單元(技術上稱之爲“幀”)的格式不同。IP協議實際上是一套由軟件、程序組成的協議軟件,它把各種不同“幀”統一轉換成“網協數據包”格式,這種轉換是因特網的一個最重要的特點,使所有各種計算機都能在因特網上實現互通,即具有“開放性”的特點。

04講DHCP與PXE:IP是怎麼來的,又是怎麼沒的?

  • 這一章兩個東西感覺都是linux相關的,其中DHCP確實是應用層的協議,好好看看,後面那個PXE大概瞭解下【馬住,馬住就對了】
  • gogogo

爲什麼我們無法隨意配置IP地址

  • 假如我們配置的IP地址與其他機器不在一個子網下,當我們發送包時,雖然已經有了源IP地址以及目標IP地址,但根據我們前面學到的層層嵌套模型,我們還是要獲取到目標MAC地址
  • 而這種情況下,判斷出這個地址是個外國人,我們會先把數據發給網關
  • Linux 默認的邏輯是,如果這是一個跨網段的調用,它便不會直接將包發送到網絡上,而 是企圖將包發送到網關。
  • ???:這裏還是有點不明白,雖然要經過網關,怎麼就不行了?
  • 我懷疑是由於我們的IP地址是亂填的,因此也沒有正確配置網關,導致包發送不了
  • 馬住

動態主機配置協議(DHCP)

  • 上面這個問題不僅是說明了不能亂配IP地址,也間接說明了動態分配IP地址的重要性,這就是我們的DHCP
  • 需要配置一段共享的 IP 地址。每一臺新接入 的機器都通過 DHCP 協議,來這個共享的 IP 地址裏申請,然後自動配置好就可以了。等人 走了,或者用完了,還回去,這樣其他的機器也能用。
  • 如果是數據中心裏面的服務器,IP 一旦配置好,基本不會變,這就相當於買房自 己裝修。DHCP 的方式就相當於租房。你不用裝修,都是幫你配置好的。你暫時用一下, 用完退租就可以了。
  • 下面看下DHCP工作的方式:

DHCP工作方式

  • DHCP Discover:新來的機器使用 IP 地址 0.0.0.0 發送了一個廣播包,目的 IP 地址爲 255.255.255.255。廣 播包封裝了 UDP,UDP 封裝了 BOOTP。其實 DHCP 是 BOOTP 的增強版,但是如果你 去抓包的話,很可能看到的名稱還是 BOOTP 協議。

page4image108288.jpg

  • DHCP Offer:DHCP Server給租一個IP地址,同時會保留這個IP地址,不提供給別人【此時還沒真正租出去】

page5image457552.jpg

  • 這個消息還是以廣播地址發出去的,因爲新人還沒有自己的IP地址。DHCP Server 回覆說,我分配了一個可用的 IP 給你,你看如何?除此之外,服務 器還發送了子網掩碼、網關和 IP 地址租用期等信息。
  • 新人在接收到多個提供的IP後,一般會選擇最早的那一個接受,此時它會在此發一個廣播,說明自己選擇了那一個IP,告知其他提供的IP可以給別人用了由於還沒有得到 DHCP Server 的最後確認,客戶端仍然使用 0.0.0.0 爲源 IP 地址、 255.255.255.255 爲目標地址進行廣播。在 BOOTP 裏面,接受某個 DHCP Server 的分配 的 IP。

page6image456096.jpg

  • 當 DHCP Server 接收到客戶機的 DHCP request 之後,會廣播返回給客戶機一個 DHCP ACK 消息包,表明已經接受客戶機的選擇,並將這一 IP 地址的合法租用信息和其他的配置 信息都放入該廣播包,發給客戶機,歡迎它加入網絡大家庭。

page6image445696.jpg

  • 這是整個分配流程,接下來的就是續租&&收回流程:

  • 客戶機會在租期過去 50% 的時候,直接向爲其提供 IP 地址的 DHCP Server 發送 DHCP request 消息包。客戶機接收到該服務器迴應的 DHCP ACK 消息包,會根據包中所提供的 新的租期以及其他已經更新的 TCP/IP 參數,更新自己的配置。這樣,IP 租用更新就完成 了。

預啓動執行環境(PXE)【全部馬住】

page10image17235968.png

小結

  • DHCP 協議主要是用來給客戶租用 IP 地址,和房產中介很像,要商談、簽約、續租,廣 播還不能“搶單”;

  • DHCP 協議能給客戶推薦“裝修隊”PXE,能夠安裝操作系統,這個在雲計算領域大有用 處。

課後題:PXE 協議可以用來安裝操作系統,但是如果每次重啓都安裝操作系統,就會很麻煩。你 知道如何使得第一次安裝操作系統,後面就正常啓動嗎?

  • 現在一般電腦的網卡幾乎都支持PXE啓動, PXE client 就在網卡的 ROM 中,當計算機引 導時,BIOS 把 PXE client 調入內存執行。 安裝完成後,將提示重新引導計算機。這個時候,在重新引導的過程中將BIOS修改回從硬 盤啓動就可以了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章