讀書筆記之《網路是怎樣連線的》

蔡不菜丶發表於2022-06-19

大家好呀,我是小菜~

帥哥美女,知道你們時間寶貴,那麼就由小菜為你讀好一本書,讀一本好書,取其精華,與你共享~!

本文主要分享 《網路是怎樣連線的》

如有需要,可以參考

如有幫助,不忘 點贊

微信公眾號已開啟,菜農曰,沒關注的同學們記得關注哦!

今天帶來的是 《網路是怎樣連線的》 的讀書筆記

(文中使用到的例子貼圖均出於原書)

在正式進入分享之前,我們想看下這本樹的目錄架構

網路是怎樣連線的

本書共 6 章,156482 個字,篇幅不多,內容較意思,是一本很好的網路基礎入門書籍,穿插專業術語的解釋和插圖,對複雜的網路通訊世界能有一定的瞭解

本書路線:

第一章:瀏覽器生成訊息

1)生成 HTTP 請求
  • https://www.baidu.com 中的 www 是 Web伺服器上的一種命名,World Wide Web 不是一個協議的名字,而是 Web 的提出者最早開發的瀏覽器兼 HTML 編輯器的名稱
  • 瀏覽器等網路應用程式實際上並不具備網路控制功能,而是委託作業系統來控制網路

什麼是網址?網址準確來說稱之為 URL,就是日常生活中以 Http: 開頭的一串字元。

我們生活中常用的幾種 URL:

雖然 URL 有各種不同的寫法,但是開頭部分的內容決定了後面部分的寫法,也就是定義了某種協議的存在,這樣子在使用的過程中並不會造成混亂。

1. 解析URL

當我們輸入某一串 URL 時,瀏覽器需要對 URL 進行解析,然後生成傳送給 Web 伺服器的請求訊息,當然這一步在我們使用的過程中是無感的,因為瀏覽器幫我們做好了這一切,我們只關心響應的結果。

解析的過程包括以下幾步:

我們先識別出了 HTTP,這說明要訪問 Web 伺服器,然後我們可以繼續往後面拆分,包含了伺服器名稱、目錄名和檔名,到這一步我們就知道了原來使用者要訪問 dir1 目錄下的 file1.html 檔案

2. 省略檔名

上述我們要訪問的 http://www.lab.glasscom.com/dir1/file1.html URL 中清晰的描述了我們訪問的是 file1.html 檔案,有時可能也會出現類似一些特殊的 URL

  1. http://www.lab.glasscom.com/dir/ ,其中檔名被省略了,但這不代表我們訪問不到檔案了,一般來說這種情況會在伺服器上事先設定好檔名省略的預設名稱,比如 index.htmldefault.html 之類的
  2. http://www.lab.glasscom.com/,該 URL 中帶上了 / ,表示訪問的是根目錄,在知道目錄名的情況下,我們可以按照情況 1 的方式推測出要訪問的檔名
  3. http://www.lab.glasscom.com,該 URL 連 / 都省略了,這種情況就代表訪問根目錄下事先設定好的預設檔案(最早的時候這個檔案稱之為主頁
  4. http://www.lab.glasscom.com/dir,該 URL 末尾沒有 /,則表示如果 Web 伺服器上存在名為 dir 的檔案,則將 dir 以檔名的方式處理,如果存在名為 dir 的目錄,則以目錄名的方式處理
3. 處理的基本思路

首先,客戶端會向伺服器傳送請求訊息(包含 對什麼做什麼 兩個部分)

  • 對什麼:指的是 URL
  • 做什麼:指的是方法

URL 不做過多的解釋,就是發往伺服器的那串請求地址,方法我們調介面的時候也不少見,通常有以下幾種:

  1. GET:通常用於獲取資訊。
  2. POST:通常用於新增資料。
  3. PUT:通常用於更新資料。
  4. DELETE:通常用於刪除資料。
  5. HEAD:與 GET 基本相同。不過它只返回 HTTP 的訊息頭,並不返回資料的內容
  6. TRACE:將伺服器收到的請求行和頭部(header)直接返回給客戶端
  7. OPTIONS:用於通知或查詢通訊選項
4. 響應處理

當請求的訊息發出後,Web伺服器會返回響應訊息。在響應訊息中,第一行的內容為 狀態碼響應短語,用來表示請求的執行結果是成功還是出錯。狀態碼和響應短語表示的內容一致,但用途不同。

狀態碼是一個數字,用來向程式告知執行的結果,響應短語是一段文字,同樣使用來告知執行的結果

狀態碼概要

  • 1xx:告知請求的處理進度和情況
  • 2xx:請求成功
  • 3xx:表示要進一步的操作
  • 4xx:客戶端錯誤
  • 5xx:服務端錯誤
2)向DNS伺服器查詢Web伺服器的IP地址

客戶端要向服務端傳送請求之前還有一個工作需要完成,那就是查詢網址中伺服器域名對應的 IP 地址。

因為瀏覽器本身不具備將訊息傳送到網路中的功能,而是需要委託作業系統來完成。

但是委託作業系統來完成通訊的條件就是需要提供通訊物件的 IP 地址,而不是域名。

1. 什麼是 IP 地址

1. TCP/IP 初知

瞭解什麼是 IP 地址,我們就需要了解 TCP/IP。

TCP/IP 結構圖

這是一個 TCP/IP 的結構圖。TCP/IP 就是由一些小的子網(用集線器連線起來的幾臺計算器),通過路由器連線起來組成的一個大網路。

在網路中所有裝置都會被分配一個地址(相當於我們現實中的xx號xx室),其中 是分配給整個子網的(網路號),而 是分配給子網中的計算機的(主機號),這就是網路中的地址,整體稱之為 IP地址

那麼訊息傳送的過程就是:

傳送者發出的訊息首先經過子網中的集線器,然後轉發到距離傳送者最近的路由器上,路由器會根據訊息的目的地判斷下一個路由器的位置,然後將訊息傳送到下一個路由器,多次轉發後就到了最終的目的地

2. IP 地址

IP 地址實際上是一串 32 位元的數字,按照 8 位元(1位元組)為一組分成4組,分別用十進位制表示然後用圓點 . 隔開。

IP 地址是由 網路號主機號 組成的,但是通過這一串數字我們無法得知哪些是網路號,哪些是主機號,因此我們還需要 子網掩碼 的幫助。

子網掩碼:是一串與 IP 地址長度相同的 32 位元數字,左邊一半是1,右邊一半是0,其中子網掩碼為 1 的部分表示網路號,為 0 的部分表示為主機號,子網掩碼錶示網路號與主機號之間的邊界。

主機號部分的位元全部為 0 或全部為 1 表示兩種特殊的含義:

  • 全 0:表示整個子網
  • 全 1:表示向子網上所有裝置傳送包,即 廣播
2. 域名的出現

想要達到最終目的地,我們就需要知道目的地的 IP 地址。但 IP 地址是一串數字,我們每天打交道的網站實在是太多了,那麼為了記憶簡單,就出現了 域名

為了填補兩者之間的障礙,就需要有一個機制能夠通過名稱來查詢 IP 地址,或者通過 IP 地址來查詢名稱,這個機制就是 DNS

3. Socket 庫

瀏覽器想要傳送請求,需要委託作業系統,但是委託作業系統查詢,我們需要告知作業系統目的地的IP地址。因此瀏覽器需要查詢域名對應的 IP 地址再告知作業系統,但是瀏覽器又不具備傳送請求的功能,這豈不是死迴圈了嗎?

實際上負責 DNS 查詢 IP 地址的操作稱之為域名解析,因此負責解析這一操作就叫做解析器

解析器實際上是一段程式,它包含在作業系統的 Socket 庫中,它是一堆通用程式元件的集合,其中包含的程式元件可以讓其他的應用程式呼叫作業系統的網路功能,而解析器就是這個苦衷的一種元件。

4. 解析器

當流程流轉到解析器的時候,解析器會生成要傳送給 DNS 伺服器的查詢訊息,同樣傳送訊息這個操作並不是由解析器自身來執行,而是要委託給作業系統內部的協議棧來執行(解析器本身也不具備網路收發的能力)

向 DNS 伺服器傳送訊息時,我們也需要知道 DNS 伺服器的 IP 地址,不過這個 IP 地址是已經實現設定好的,比如 windows 上的網路設定

3)全世界DNS伺服器的大接力
1. 域名的查詢

通常客戶端想要向 DNS 查詢通常包含以下 3 種訊息:

  • 域名
  • Class:用來識別網路的資訊,永遠是代表網際網路的 IN
  • 記錄型別:表示域名對應哪種型別的記錄。比如,當型別為 A 時,表示域名對應的 IP 地址,為 MX 時,表示對應的是郵件伺服器,對於不同的記錄型別,伺服器向客戶端返回的資訊也會不同

2. 域名的層次

網際網路上存在不計其數的伺服器,將這些伺服器的資訊全部都儲存在一臺 DNS 伺服器上是不可能的,因此就需要將資訊分佈儲存在多臺 DNS 伺服器中,這些 DNS 相互接力配合,從而查詢出要查詢的資訊。

比如 www.life.cbuc.com,在靠右的位置表示層級越高,這段域名的大致意思為 com 集團 cbuc 部門 life 組的 www。這種具有層次結構的域名資訊會被註冊到 DNS 伺服器中,而每個域都是作為一個整體來處理,也就是不能將一個域拆開存放在多臺 DNS 伺服器中。

一個域是不可分割的,但我們可以在域的下面建立下級域(子域),然後再將它們分別分配給各個事業集團,比如 life.cbuc.com 可以建立兩個子域:a1.life.cbuc.coma2.life.cbuc.com

DNS 查詢的結果有點類似樹形結果。

負責管理下級域的 DNS 伺服器的 IP 地址註冊到它們上級 DNS 伺服器中,然後上級 DNS 伺服器的 IP 地址再註冊到更上一級的 DNS 伺服器中,以此類推。也就是說,負責管理 life.cbuc.com 這個域的 DNS 伺服器的IP地址需要註冊到 cbuc.com 域的DNS伺服器中,而 cbuc.com 域的 DNS 伺服器的 IP 地址又需要註冊到 com 域的 DNS 伺服器中,這樣,就可以通過上級 DNS 伺服器查詢出下級 DNS 伺服器的 IP 地址,也就可以向下級伺服器傳送查詢請求了。

3. 根域的存在

經過上面的講解,如果覺得 com、cn 這類就屬於頂級域的話就錯了。

實際上還有 根域 的存在,一般在書寫的時候會被省略,如果要明確表示根域,則需要在域名的最後面加上 .www.baidu.com. ,雖然書寫的時候不寫,但根域確是真實存在的,根域的 DNS 保管著 comcn 等 DNS 伺服器的資訊,所以我們解析域名的時候需要從根域開始一路往下找到任意一個域的 DNS 伺服器

4. 快取加快響應

有時候並不需要從最上級的根域開始查詢,因為 DNS 伺服器有一個快取的功能,可以記住之前查詢過的域名,如果要查詢到域名和相關資訊已經在快取中,那麼就可以直接返回響應。

同理,當要查詢到域名不存在時,“不存在”這一響應結果也會被快取。

快取都具備有效期,當快取中的資訊超過有效期後,資料就會從快取中刪除。而且,在對查詢進行響應時,DNS伺服器也會告知客戶端這一響應的結果是來自快取中還是來自負責管理該域名的DNS伺服器。

4)委託協議棧傳送訊息

當獲得了 IP 地址之後,作業系統就可以進行訊息收發了,訊息實際上是一種 數字資訊, 這一操作不僅限於瀏覽器,對於各種使用網路的應用程式來說都是共通的。

向作業系統內部的協議棧發出委託時,需要按照指定的順序來呼叫 Socket 庫中的元件。

在進行收發資料之前,雙方需要先建立一條管道,建立管道的關鍵在於 管道兩端資料的出入口,這些出入口就稱為 套接字,然後將套接字連線起來就形成了管道,資料沿著這條通道流動(雙向),最終到達目的地。

當資料全部傳送完畢之後,連線的管道將會斷開,管道在連線時是由客戶端發起的,但在斷開的時可以由任意一方發起。

總結,收發資料的大致操作如下:

  • 建立套接字階段:建立套接字
  • 連線階段:將管道連線到伺服器端的套接字上
  • 通訊階段:收發資料
  • 斷開階段:斷開管道並刪除套接字

第二章:用電訊號傳輸 TCP/IP 資料

1)建立套接字
1. 協議棧的內部結構

圖的結構也是一種層級關係,上層會向下層逐層委派工作。

  • 最上面的部分是網路應用程式,也就是瀏覽器、電子郵件客戶端、Web伺服器、電子郵件伺服器等程式,它們會將收發資料等工作委派給下層的部分來完成。
  • 應用程式的下層是 Socket 庫,其中包括解析器,解析器用來向DNS伺服器發出查詢。
  • 再下面就是作業系統內部了,其中包括協議棧。協議棧的上半部分有兩塊

    • 負責用 TCP 協議收發資料的部分
    • 負責用 UDP 協議收發資料的部分

​ 下面一半是用 IP 協議控制網路包收發操作的部分。在網際網路上傳送資料,資料會被切分成一個一個的網路包,而將網路包傳送給通訊物件的操作就是由 IP 來負責。此外,IP 中還包括 ICMP 協議(用於告知網路包傳送過程中產生的錯誤以及各種控制訊息)和 ARP 協議(用於根據IP地址查詢相應的乙太網MAC地址)

  • IP 下面的網路卡驅動程式負責控制網路卡硬體
  • 最下面的網路卡則負責完成實際的收發操作,也就是對網線中的訊號執行傳送和接收操作
2. 套接字的概念

套接字就是一個概念,並沒有實際意義上的實體,但它具備了例如通訊物件的IP地址、埠號、通訊操作的進行狀態等。協議棧在執行操作的時候會查詢這些控制資訊。

它的作用就是:記錄了用於控制通訊操作的各種控制資訊,協議棧則需要根據這些資訊判斷下一步的行動

2)連線伺服器

建立了套接字之後,應用程式就會呼叫 connect,隨後協議棧會將本地的套接字與伺服器的套接字進行連線。這裡的連線指的是通訊雙方交換資訊的操作過程。

1. 儲存控制資訊的頭部

控制資訊可以分為兩類

  • 客戶端和伺服器相互聯絡時交換的控制資訊。這些資訊不僅連線時需要,資料收發和斷開連線都需要。
  • 儲存在套接字中,用來控制協議棧操作的資訊。應用程式傳遞來的資訊以及從通訊物件接收到的資訊都會儲存在這裡,還有收發資料操作的執行狀態等資訊也會儲存在這裡。
2. 連線的實際過程

連線是從應用程式呼叫 Socket 庫的 connect 開始的

connect(<描述符>, <伺服器IP地址和埠號>,...)

上述連線的資訊會傳遞給TCP模組,然後 TCP 會與該 IP 地址對應的通訊物件進行交換控制資訊。大致過程為以下幾個步驟:

  • 在 TCP 模組處建立表示連線控制資訊的頭部
  • 通過 TCP 頭部找到要連線的套接字
  • 將資訊傳遞給 IP 模組並委託它進行傳送

這期間其實還涉及到TCP 三次握手的過程

3)收發資料
1. 將訊息交給協議棧

當控制流程從 connect 回到應用程式之後,接下來就進入到資料收發階段。

資料收發操作是從應用程式呼叫 write 將要傳送的資料交給協議棧開始的。

協議棧並不是一收到資料就馬上傳送出去,而是將資料存放在內部的傳送緩衝區中,並等待應用程式的下一段資料。這樣做的好處是協議棧傳送的資料長度由應用程式本身決定。而什麼時候是否才發出去有以下幾個因素決定:

  • MTU:一個網路包的最大長度,乙太網中一般為 1500 位元組
  • MSS:除去頭部之後,一個網路包所能容納的TCP資料的最大長度
  • 時間:當應用程式傳送資料的頻率不高的時候,如果每次都等到長度接近 MSS 時再傳送,可能會因為等待時間太長而造成傳送延遲,這種情況下,即便緩衝區中的資料長度沒有達到MSS,也應該果斷髮送出去,為此協議棧內部有個計時器,當經過一定時間之後,就會把網路包傳送出去

2. 資料拆分

傳送緩衝區中的資料超出 MSS 的長度時,需要以 MSS 的長度為單位進行拆分,拆分出來的每塊資料都會被放進單獨的網路包彙總,根據傳送緩衝區的資料拆分情況,當判斷需要傳送這些資料時,就在每一塊資料前面加上TCP頭部,並根據套接字中記錄的控制資訊標記傳送方和接收方的埠號,然後交給 IP 模組進行傳送

4)從伺服器斷開並刪除套接字

和伺服器的通訊結束之後,用來通訊的套接字也就不會再使用了,這時我們就可以刪除這個套接字了,不過套接字並不會馬上被刪除,而是會等待一段時間之後再被刪除,等待一段時間的原因是為了防止誤操作。

具體等待多長的時間與包重傳的操作方式有關。網路包丟失之後會進行重傳,這個操作通常會持續幾分鐘,如果重傳了幾分鐘之後依然無效,則停止重傳。

1. 收發操作小結

資料收發操作第一步便是建立套接字,一般來說伺服器一方的應用程式在啟動時就會建立好套接字並進入等待連線的狀態。客戶端則一般是在使用者觸發特定動作,需要訪問伺服器的時候才建立套接字

建立好套接字之後,客戶端會向伺服器發起連線操作,也就是經典的 TCP 三次握手操作

建立完連線之後便進入了資料收發操作

5)IP與乙太網的包收發操作
1. 包的基本知識

包是有頭部和資料兩部分構成的

  • 頭部:包含目的地址等控制資訊,相當於快遞包裹的面單
  • 資料:傳送給對方的內容,相當於快遞包裹中的貨物

網路中有 路由器集線器 兩種不同的轉發裝置

  • 路由器:根據目標地址判斷下一個路由器的位置
  • 集線器:在子網中將網路包傳輸到下一個路由

實際上,集線器是按照 乙太網規則 傳輸包的裝置,而路由器是按照 IP 規則 傳輸包的裝置,因此可以得出一個結論:

  • IP 協議:根據目標地址判斷下一個 IP 轉發裝置的位置
  • 乙太網協議: 在子網中將包傳輸到下一個轉發裝置

在 TCP/IP 中包含兩個頭部

  • MAC 頭部: 用於乙太網協議
  • IP 頭部:用於 iP協議
2. 包的收發操作

實際上將包從傳送方傳輸到接收方的工作是由集線器、路由器等網路裝置來完成的,因此 IP 模組僅僅是整個包傳輸過程的入口而已。

IP 模組負責新增兩個頭部:

  • MAC 頭部: 乙太網用的頭部,包含 MAC 地址
  • IP 頭部:IP 用的頭部,包含 IP 地址

接下來封裝好的包會交給網路硬體(網路卡),網路硬體會將這些數字資訊轉換為電訊號或光訊號,並通過網線(光纖)傳送出去,然後這些訊號就會到達集線器、路由器等轉發裝置,再由轉發裝置一步一步地送達接收方。

無論要收發的包是控制包還是資料包,IP 對各種型別的包的收發操作都是相同的

3. 生成 IP 頭部

IP 並不知道接收方的IP 地址,這個地址是由應用程式指定的。IP 頭部中除了接收方的 IP 地址,還需要填寫傳送發的 IP 地址,這裡 IP 地址並不是指計算機的 IP 地址,而是網路卡的 IP 地址,因為一個計算機中可能存在多張網路卡。

4. 生成 MAC 頭部

IP 頭部中的接收方 IP 地址表示網路包的目的地,通過這個地址我們就可以判斷要將包傳送到哪裡,但在乙太網的世界中, TCP/IP 的這個思路是行不通的,乙太網在判斷網路包目的地時和 TCP/IP 的方式不同,因此必須採用 相匹配 的方式才能在乙太網中將包發往目的地,而 MAC 頭部就是幹這個用的

MAC 頭部的開頭是接收方和傳送方的 MAC 地址,不過 IP 地址是 32 位元,而 MAC 地址是 48 位元。

傳送方的 MAC 地址好知道,但是接收方的 MAC 地址卻比較麻煩,我們需要根據 IP 地址查詢對應的 MAC 地址

5. ARP 查詢 MAC地址

乙太網中,有一種叫作廣播的方法,可以把包發給連線在同一個乙太網中的所有裝置。

ARP 就是利用廣播對所有裝置提問:“xx 這個 IP 地址是誰的,請把你的 MAC 地址告訴我”

同樣 ARP 中存在快取,在傳送的時候會先查詢 ARP 快取。

6. 乙太網的基本知識

乙太網是一種為多臺計算機能夠彼此自由和廉價相互通訊而設計的通訊技術。

這種網路的本質其實就是一根網線,藉助一種叫作收發器的小裝置,它的功能只是將不同網線之間的訊號連線起來。

當一臺計算機傳送訊號時,訊號就會通過網線流過整個網路,最終到達所有的裝置,而這個時候需要在訊號的開頭加上接收者的資訊,才能判斷一個訊號到底是發給誰的

隨著後來的發展,之前的原型轉換成了一箇中繼集線器,將收發器網線替換成了雙絞線,網路的結構雖然發生變化,但是訊號會傳送給所有裝置這一基本性質並沒有變

到了後面採用交換式集線器的時候,訊號就不會傳送給所有裝置了,而是傳送給指定 MAC 地址的裝置

總結來說就是三個特性:

  • 將包傳送到 MAC 頭部的接收方
  • 用傳送方 MAC 地址識別傳送方
  • 用以太型別識別包的內容
7. 向集線器傳送網路包

我們可以將包通過網線傳送出去,發出訊號的操作分為兩種

  • 使用集線器的半雙工模式

為了避免訊號碰撞,首先要判斷網線中是否存在其他裝置傳送的訊號,如果有則需要阻塞等待

  • 使用交換機的全雙工模式

傳送和接受可以同時進行,不會發生碰撞

8. 接受返回包

在使用集線器的半雙工模式乙太網中,一臺裝置傳送的訊號會到達連線在集線器上的 所有裝置, 將訊號全都接收後,便會進行 FCSMAC 校驗,如果校驗通過,則將包放入緩衝區中,然後網路卡會通知計算機收到了一個包。

通知計算機的操作會使用一個叫做 中斷 的機制,需要打斷計算機正在執行的任務,讓計算機注意到網路卡中發生的事情

6)UDP 協議的收發操作
1. 控制用的短資料

像 DNS 查詢等交換控制資訊的操作基本上都可以在一個包的大小範圍內解決,這種場景就可以用 UDP 來代替 TCP。

2. 音訊和視訊資料

在傳送音訊和視訊資料的時候,必須在規定的時間內送達,一旦送達完晚了,就會錯過播放時機,導致聲音和影像卡頓。因此通常會採用 UDP 來達到更高的傳輸效果,因為就算缺少了某些包並不會產生嚴重問題,知識會產生一些失真或卡頓。

第三章:從網線到網路裝置

1)訊號在網線和集線器中傳輸

網路包從客戶端計算機發出之後,要經過集線器、交換機和路由器最終進入網際網路。實際上我們家用的路由器已經整合了 集線器交換機 的功能

2)防止網線中的訊號衰減很重要

訊號到達集線器的時候斌不是跟剛發出去的是哦戶一模一樣,集線器收到的訊號有時會出現衰減,訊號在網路傳輸過程中能量會逐漸損失,網線越長,訊號衰減越嚴重

即便線路條件很好,沒有噪聲,訊號在傳輸過程中依然會發生失真,如果再加上噪聲的影響,失真就會更厲害。

3)雙絞是為了抑制噪聲

雙絞線中雙絞的意思是以兩根訊號線為一組纏繞在一起,這種擰麻花一樣的設計就是為了抑制噪聲的影響。

產生噪聲的原因

網線周圍存在電磁波,當電磁波接觸到金屬等導體時,在其中就會產生電流。由於訊號本身也是一種帶有電壓變化的電流,其本質和噪聲產生的電流是一樣的,所以訊號和噪聲的電流就會混雜在一起,是導致訊號的波形發生失真,這就是噪聲的影響

電磁波的種類

  • 由電機、熒光燈、CRT 顯示器燈裝置洩露出來的電磁波,這種電磁波來自網線之外的其他裝置

要抑制這種電磁波,首先訊號線是用金屬做的,當電磁波接觸到訊號線時,會沿著電磁波傳播傳播的右旋方向產生電流,這種電流會導致波形發生失真,如果將訊號線纏繞在一起,訊號線就會變成螺旋形,其中兩根訊號線中產生的噪聲電流防線就會相反,從而使得噪聲電流相互抵消,噪聲就得到了抑制

  • 從網線中相鄰的訊號線洩露出來

這種噪聲的強度並不大,但是距離比較近。抑制這種噪聲的方式就在於雙絞線的纏繞,在一根網線中,每一對訊號線的扭絞節距都有一定的差異,這使得在某些地方正訊號線距離近,另一些地方則是負訊號線距離近。由於正負訊號線產生的噪聲影響是相反的,所以兩者就會相互抵消

4)集線器將訊號發往所有線路

當訊號到達集線器後,會被廣播到整個網路中。乙太網的基本架構[插圖]就是將包發到所有的裝置,然後由裝置根據接收方MAC地址來判斷應該接收哪些包,而集線器就是這一架構的忠實體現,它就是負責按照乙太網的基本架構將訊號廣播出去

2)交換機根據地址表進行轉發

交換機的設計是將網路包原樣轉發到目的地。

當訊號到達網線介面,並由 PHY(MAU)模組進行接收,這一部分和集線器是相同的,PHY(MAU)模組會將網線中的訊號轉換為通用模式,然後傳遞給 MAC 模組,MAC 模組會將訊號轉換為數字訊號,然後通過包末尾的 FCS 校驗錯誤,如果沒有問題則存放到緩衝區中。

這部分的操作和網路卡基本相同,可以認為交換機的每個網線介面後面都是一塊網路卡,與網路卡不同的是,交換機的埠不具有 MAC 地址

當包存入緩衝區後,就需要查詢這個包的接收方 MAC 地址是否已經在 MAC 地址表有記錄了,然後通過交換電路將包傳送到響應的埠

MAC 地址表

當網路包通過交換電路到達傳送埠時,埠中的 MAC 模組和 PHY(MAU)模組會執行傳送操作,將訊號傳送到網線中,這部分和網路卡傳送訊號的過程是一樣的。

3)MAC 地址表的維護

交換機在轉發包的過程中,還需要對 MAC 地址表的內容進行維護,維護分為兩種:

  • 在收到包時,將傳送方 MAC 地址以及其輸入埠號寫入 MAC 地址表
  • 刪除地址表中的某條記錄的操作,防止裝置移動時產生的問題(比如當我們把計算機從辦公桌移動到會議室時,裝置就發生了移動,埠也會發生變化)。為了防止終端裝置移動產生的問題,需要將一段時間不使用的過時記錄從地址表中刪除就可以了
4)全雙工模式

全雙工模式是交換機特有的工作模式,它可以同時進行傳送和接收操作,集線器不具備這樣的特性

5)自動協商:確定最優的傳輸速率

自動協商指的是在相互連線的雙方探測對方是否支援全雙工模式,並支援切換成相應的工作模式,並且除了能自動切換工作模式之外,還能探測對方的傳輸速率並進行自動切換。

3)路由器的包轉發操作
1. 路由器的基本知識

網線包經過集線器和交換機之後,便會到達路由器。

路由器是基於 IP 設計的,交換機是基於乙太網設計的。路由器包括 轉發模組埠模組

  • 轉發模組:負責判斷包的轉發目的地(類似 IP 模組)
  • 埠模組:負責包的收發操作(類似網路卡)

路由器基本原理

路由器在轉發包時,首先會通過埠將發過來的包接收進來,這一步的工作過程取決於埠對應的通訊技術。對於乙太網埠來說,就是按照乙太網規範進行工作,而無線區域網埠則按照無線區域網的規範工作,總之就是委託埠的硬體將包接收進來。接下來轉發模組會根據接收到的包的 IP 頭部中記錄的接收方 IP 地址,在路由表中進行查詢,以此判斷轉發目標,然後轉發模組將包轉移到轉發目標對應的埠,埠再按照硬體的規則將包傳送出去,也就是轉發模組委託埠模組將包傳送出去。

第四章:通過接入網進入網際網路內部

1)ADSL 接入網的結構和工作方式
1. 網際網路的基本結構和家庭、公司網路是相同的

網際網路也是通過路由器來轉發包的,我們可以將網際網路理解為家庭、公司網路的一個放大版。

而網際網路與家庭、公司網路之間最主要的兩個不同點在於:距離的不同路由的維護方式不同

2. 連線使用者與網際網路的接入網

所謂接入網,就是指連線網際網路與家庭、公司網路的通訊線路。一般家用的接入網包括 ADSL、FTTH、CATV、電話線、ISDM等,公司則還可能使用專線。

3. ADSL Modem 將包拆分成信元

在這張圖中網路包是從右往左傳輸的。使用者端路由器發出的網路包通過 ASDL Modem 和電話線達到電話局,然後到達 ADSL 的網路運營商(ISP)。

客戶端生成的網路包先經過集線器和交換機到達網際網路接入路由器,並在此從乙太網中取出 IP 包並判斷轉發目標。在這裡網路包會加上 MAC 頭部、PPPoE 頭部、PPP 頭部總共3種頭部,然後按照乙太網規則轉換成電訊號後被髮送給 ADSL Modem,然後 ADSL Modem 會把包拆分成很多個小格子,每一個小格子稱為一個信元。

4. ADSL 將信元調製成訊號

乙太網採用的是用方波訊號表示 0 和 1 的方式,ADSL 會比較複雜,它是採用一種用 圓滑波形(正弦波)對訊號進行合成來表示 0 和 1,這種技術稱為 調製

調製的方式有很多種,ADSL 採用的調製方式是 振幅調製(ASK)相位調製(PSK) 相結合的正交振幅調製(QAM)方式

5. ADSL 通過使用多個波來提高速率

訊號不一定要限制在一個評率,不同頻率的波可以合成,因此可以使用多個頻率合成的波來傳輸訊號,這樣能表示的位元數就可以成倍提高了,ADSL 就是利用了這一性質,通過多個波增加能表示的位元數來提高速率。

6. 分離器的作用

ADSL Modem 將信元轉換為電訊號之後,訊號會進入一個叫做分離器的裝置,然後 ADSL 訊號會和電話的語音訊號混合在一起從電話線傳輸出去。

分離器的作用其實在相反的方向,也就是訊號從電話線傳入的時候,需要將電話和 ADSL 的訊號進行分離。

分離器的功能是將一定頻率以上的訊號過濾掉,也就是過濾掉了ADSL使用的高頻訊號,這樣一來,只有電話訊號才會傳入電話機,但對於另一頭的ADSL Modem,則是傳輸原本的混合訊號給它。

7. 從使用者到電話局

從分離器出來就是插電話線的介面,訊號從這裡出來之後,會通過室內電話線,然後到達大樓的 IDF 和 MDF。由於電話局附近的地下電纜很多,集中埋設電纜的地方就形成了一條地道,這部分稱為電纜隧道。通過電纜隧道進入電話局後,電纜會逐根連線到電話局的MDF上。

2)光纖接入網
1. 光纖的基本知識

接入網技術除了上述說到的 ADSL ,還有一種稱為 FTTH,是一種基於光纖的接入網技術。FTTH 的關鍵在於對光纖的使用。

光纖是由一種雙層結構的纖維狀透明材質(玻璃和塑料)構成的,通過在裡面的纖芯中傳導光訊號來傳輸數字資訊。亮表示 1,暗表示 0

2. 單模與多模

光纖通訊的關鍵技術就是能夠傳導光訊號的光纖。光纖可以分成幾種型別,大體上包括較細的單模光纖(8~10 um)和較粗的多模光纖(50 um或62.5 um)

多模光纖: 可以傳導多條光線,意味著通過的光線較多,對光源和興敏元件的效能要求也就較低,從而可以降低光源和光敏元件的效能要求

單模光纖: 只能傳導一條光線,能通過的光線較少,對光源和興敏元件的效能要求較高

單模光纖的失真小,可以比多模光纖更長,因此多模光纖主要用於一座建築物裡面的連線,單模光纖則用於距離較遠的建築物之間的連線
3)接入網中使用的 PPP 和隧道
1. 使用者認證和配置下發

ADSL和FTTH接入網中,都需要先輸入使用者名稱和密碼,登入之後才能訪問網際網路,而BAS就是登入操作的視窗。BAS使用PPPoE方式來實現這個功能。

PPP 工作方式:

首先,使用者向運營商的接入點撥打電話,電話接通後輸入使用者名稱和密碼進行登入操作。使用者名稱和密碼通過RADIUS協議從RAS傳送到認證伺服器,認證伺服器校驗這些資訊是否正確。當確認無誤後,認證伺服器會返回IP地址等配置資訊,並將這些資訊下發給使用者。

2. 在乙太網上傳輸 PPP 訊息

ADSL 和 FTTH 接入方式也需要為計算機分配公有地址才能上網,這一點和撥號上網是相同的。

PPP協議中沒有定義乙太網中的報頭和FCS等元素,也沒有定義訊號的格式,因此無法直接將PPP訊息轉換成訊號來傳送。要傳輸PPP訊息,必須有另一個包含報頭、FCS、訊號格式等元素的“容器”,然後將PPP訊息裝在這個容器裡才行。於是,在撥號接入中PPP借用了HDLC協議作為容器,而HDLC協議原本是為在專線中傳輸網路包而設計的,撥號接入方式對這一規格進行了一些修正。對於 ADSL 和 FTTH ,並不能使用 HDLC ,但可以使用乙太網包代替 HDLC 來轉載 PPP 協議,並且為了彌補這些問題就設計了一個新的規格,就是 PPPoE

3. 通過隧道將網路包傳送給運營商

BAS除了作為使用者認證的視窗之外,還可以使用隧道方式來傳輸網路包

隧道就類似於套接字之間建立的 TCP 連線,將包含頭部在內的整個包從隧道的一頭扔進去,這個包就會原封不動地從隧道的另一頭出來,就好像在網路中挖了一條滴到,網路包從這個地道穿過去。

隧道的實現方式:

  • 類似 TCP 連線,需要在網路上的兩臺隧道路由器之間建立 TCP 連線,然後將連線兩端的套接字當做是路由器的埠,並從這個埠來收發資料。
  • 基於封裝的隧道實現方式。將包含頭部在內的整個包裝入另一個包中傳輸到隧道的另一端。這種方式下,包本身可以原封不動地到達另一端的出口。
4)網路運營商的內部
1. POP 和 NOC

網際網路是由多個運營商網路相互連線組成的。ADSL、FTTH等接入網是與使用者簽約的運營商裝置相連的,這些裝置稱為 POP,也就是網際網路的入口。

POP 的結構根據接入網型別以及運營商的業務型別不同而不同。

5)跨越運營商的網路包
1. 運營商之間的連線

當網路包到達 POP 路由器之後,如果最終目的地 Web 伺服器和客戶端連線在同一個運營商中,那麼 POP 路由器的路由表中應該有相應的轉發目標。運營商的路由器可以和其他路由器交換路由資訊,從而自動更新自己的路由表,實現了自動化管理。

如果伺服器的運營商和客戶端的運營商是不同的,那麼需要先發到伺服器的運營商,這些資訊也可以在路由表找到,因為運營商的路由器也在和其他運營商的路由器交換資訊。

2. 運營商之間的路由資訊交換

只要讓相連的路由器告知路由資訊就可以了,只要獲得了對方的路由資訊,就可以知道對方路由器連線的所有網路,將這些資訊寫入自己的路由表,也可以向那些網路傳送包了。這個路由資訊交換使用的機制成為 BGP

這種路由交換可分為兩類:

  • 將網際網路中的路由全部告知對方
  • 兩個運營商之間僅將與各自網路相關的路由資訊告知對方,這樣雙方之間的網路可以互相收發網路包,這種方式稱為非轉接,也叫對等。

第五章:伺服器端的區域網中有什麼玄機

1)Web 伺服器的部署地點
1. 在公司裡部署Web伺服器
傳統的部署方式:伺服器直接部署在公司網路上,並且可以從網際網路直接訪問。這種情況下,網路包通過最近的 POP 中的路由器、接入網以及伺服器端路由器之後,就到達了伺服器。

這種方式存在弊端:

  • IP 地址不足。這種方式需要為公司網路中的所有裝置,包括伺服器和客戶端計算機,都分配各自的公有地址。
  • 安全問題。網際網路中的網路包會無節制進入伺服器。
2. 將Web伺服器部署在資料中心
伺服器可以放在網路運營商管理的資料中心,或直接租用運營商提供的伺服器。

資料中心是與運營商核心部分 NOC 直接連線的,或是與運營商之間的樞紐IX直

接連線的。可以通過高速線路直接連線到網際網路的核心部分,因此將伺服器部署

在這裡可以獲得很高的訪問速度,

2)防火牆的結構和原理
1. 主流的包過濾方式

無論伺服器部署在哪裡,都會在前面部署一個防火牆。如果包無法通過防火牆,就無法到達伺服器。

2. 如何設定包過濾的規則

網路包的頭部包含了用於控制通訊操作的控制資訊,只要檢查這些資訊,就可以獲得很多有用的內容。

在這是包過濾規則時,首先要觀察包是如何流動的。通過接收方 IP 地址和傳送方 IP 地址,可以判斷出包的起點和終點,並將IP地址設為判斷條件。

3. 通過埠號限定應用程式

當我們要限定某個應用程式時,可以在判斷條件中加上 TCP 頭部或者 UDP 頭部中的埠號作為判斷條件。

4. 通過控制位判斷連線方向

通過上述兩個條件,可以限定到某個具體的應用程式,但還是沒辦法阻止 Web 伺服器訪問網際網路,Web 使用的 TCP 協議是雙向收發網路包的,因此如果單純地阻止從 Web 伺服器發往網際網路的包,則從網際網路訪問 Web 伺服器的操作也會收到影響而而無法進行。因此單判斷包的流向還不夠,還需要根據訪問的方向來進行判斷,這裡就需要用到 TCP 頭部的控制位。

3)內容分發服務
1. 利用內容分發服務分擔負載

當快取伺服器部署在服務端並不能減少流量,因此如果將快取伺服器部署在客戶端就可以不受或者少受某些擁塞點的影響,讓網路流量更穩定。但如果部署在客戶的函,Web伺服器的育嬰師並不能控制它,無法擴縮容數量。因此可以將快取伺服器部署在網際網路的邊緣

三種部署方式:

作為Web 伺服器運營商如果自己部署伺服器,在一定程度上還是吃不消的,因此出現了專門提供這種服務(內容分發服務)的廠商稱為 CDSP.

2. 如何找到最近的快取伺服器

利用 DNS 伺服器來分配訪問,它們可以通過相互接力來處理 DNS 查詢。但 DNS 只能以輪詢的方式按照順序返回 IP 地址,完全不考慮客戶端與快取伺服器的遠近,因此可能會返回離客戶端較遠的快取伺服器IP地址。

如果要訪問到最近的快取伺服器,不應採用輪詢,而是應該判斷客戶端與快取伺服器的距離,並返回距離客戶端最近的快取伺服器 IP 地址。

不要空談,不要貪懶,和小菜一起做個吹著牛X做架構的程式猿吧~點個關注做個伴,讓小菜不再孤單。我們們下文見!

今天的你多努力一點,明天的你就能少說一句求人的話!

我是小菜,一個和你一起變強的男人。 ?

微信公眾號已開啟,菜農曰,沒關注的同學們記得關注哦!

相關文章