--- tags: 電腦網路, 大二筆記 --- # 電腦網路 Chapter 4: Network Layer * 將資料區段 (segment) 從發信端送到收信端的主機 (host) * 網路層存在於每個網際網路裝置,如主機、路由器等 #### Router * 負責檢查經過的資料塊 (datagram) 中的標頭 (header) * 將資料塊由 input port 送到正確的 output port ### Two Key Network-layer Function * Forwarding:將封包從路由器的 input link 移動到正確的 output link * Routing:決定封包從來源到目的地的路徑 ### Data plane and Control plane * Data plane: * 本地的,屬於路由器內部的功能 * 決定資料塊如何從路由器的 input port 傳到 output port * Control plane: * 屬於整個網路系統的邏輯 * 決定一個資料塊由來源到目的地的傳送路徑 * 兩種方式: 1. Traditional Routing Algorithm  路由器互相在 control plane 互相收集資料,每個路由器再根據自己的路由演算法算出個別的 forwarding table 2. Software-defined Networking, SDN  藉由遠端控制器計算所有的 forwarding table,並安裝在所有路由器上面 ### Network-layer Service Model  * IP 為「盡力而為」的協議 * 並不保證: 1. 資料塊成功送達 2. 資料塊的延遲及順序 3. 頻寬 > 以上功能通常由傳輸及應用層的協議完成 * 構造簡單,使其被廣泛使用 * 適合 real-time application ## Inside a Router #### 概觀  * routing:使用 **軟體**,花費時間較長 * forwarding:使用 **硬體**,花費時間較短 #### 在靠近一點點...  * Physical layer:接收第五層的物理訊號,通常為位元串 * Link layer:第六章的事情呵呵 * Decentralized switching: * 利用標頭去 forwarding table 尋找合適的 output port * Destination-based Forwarding:根據目的地 IP 位址進行 forwarding * Generalized Forwarding:根據標頭內的值決定如何 forwarding * 如果到達速率大於發送速率,則會發生 queuing ### Destination-based Forwarding  #### Longest Prefix Matching 在查表時,我們會選擇與 destination IP address 擁有最長相同前綴的那一項 #### Example 1. ==11001000 00010111 00010==110 10100001 -> link #0 2. ==11001000 00010111 00011000== 10101010 -> link #1 ### Switching Fabrics 交換結構 * 將封包從 input link 傳送至正確的 output link * 封包從 input 傳送到 output 的速率我們稱為 **Switching Rate** * 用來估計多條 input/output 的速率 * 假設 Switching Rate 為 R,有 N 個 input,則此交換結構的 switching rate = **NR** * 主要有三種交換結構  #### Switching via Memory 最初的路由器是由一般的電腦來進行交換 1. 先將送進來的封包存入記憶體 2. 處理器找出適當的 output port 3. 將封包從記憶體中複製到 output port 的暫存區 因為需要存入記憶體,因此速度會受到記憶體頻寬的限制  #### Switching via Bus * 不須處理器介入,封包直接由 input port 的暫存區由 **shared bus** 傳送到 **每個** output port * output port 自行判斷該封包是不是給自己的,不是就捨棄 * 一次只能有一個封包在 bus 上面移動,因此速率也是受 bus 的頻寬影響  #### Switching via Interconnection Network * 若有 N 個 input port;M 個 output port,會由 N + M 條匯流排形成 **棋盤式交換結構 (crossbar switch)** * 交換控制器可以決定哪些線路斷開或閉合 * 支持同個時間傳送多個封包  ### Input Port Queuing * 當交換結構速度低於所有輸入埠速度總和時,在 input 會發生 queuing,queue 溢出會造成丟包 (loss) * HOL blocking:在 queue 最前面的封包會使後面的封包無法進行傳送 ### Output Port Queuing * 當交換結構速度高於輸出埠速度時,則會將封包存入 Buffer * Scheduling Discipline:選擇 Buffer 內的封包進行傳送,擁有優先權的封包可以優先被傳送 * 一樣會造成 queuing delay 及 loss  ### Buffer Management #### Drop 在 Buffer 溢出的時候發生,分為兩種 * Tail Drop:封包要加入 Buffer,但 Buffer 溢出導致掉包 * Priority:當有更高優先權的封包要加入 Buffer 時,將原 Buffer 內優先權較低的封包移除 #### Marking 將壅塞的訊號寫入封包,讓主機知道是否發生壅塞 ### Packet Scheduling 決定下一個傳送哪個封包 #### FCFS FIFO:先進來的就會最先被送出去 #### Priority * 每個封包都會被分類成優先級別高或優先級別低 * 任何標頭資訊都可以作為分類依據 * 優先傳送優先級別高的封包 * 同級別則遵守 FIFO  #### Round Robin, RR * 每個封包都會被分類 * 任何標頭資訊都可以作為分類依據 * 輪流發送每一個分類的封包  #### Weighted Fair Queueing * 每個封包都會分類成 * 每個類別 $i$ 都有一個權重 $w_{i}$ * 每一輪會依照權重分配去決定一個類別能發送多少封包 $$\frac{w_{i}}{\sum_{j} w_{j}}$$ * 提供最低頻寬保證 ### Network Neutrality 保護所有網路使用者都可以不受限制地友善發言、創造與競爭 * no blocking:不阻擋合法友善的內容 * no throttling:不能損壞或降級合法友善的網路傳輸 * no paid priorization:不能買賣網路優先權 ## IP:The Internet Protocol ### IP 資料塊 (IPv4)  #### 重要欄位 * **Datagram length** : 整個IP封包的長度,也就是包括了 header 和 Data 部分的總長度,以位元組(bytes)為單位 * **13-bit Fragmentation offset** : 用於指示當前 Packet 相對於開頭封包的偏移位置。由於所有的 Data 可能被分成好幾個 Packet 傳輸,所以這個欄位有助於接收方重新組裝 Packet * **flags** : 會記錄此封包後面還有沒有原始資料的拆解後的封包 * **Time-to-live (TTL)** : 紀錄當前 Packet 在網路中剩餘的最大跳數。每經過一個路由器,TTL值減一,當TTL值為0時,Packet 將被丟棄,這是為了防止 Packet 在網路中無限循環 * **Header Checksum** : 用於檢查錯誤的欄位,此值如何計算請參考 [Chapter 3 Checksum](https://hackmd.io/McQKZ3nHRc-510F2cFPdww?view#UDP-%E5%81%B5%E9%8C%AF%EF%BC%9AChecksum) * **32-bit Source IP adderss** : 此欄位紀錄來源 IP 地址 (佔 32 個 bit) * **32-bit Destination IP adderss** : 此欄位紀錄目的 IP 地址 (佔 32 個 bit) ### IP 資料分塊 & 重組 有時候資料傳輸的路徑上,可能在某些路徑上有一次只能傳輸多少資料的問題,因此我們會需要將要傳送的 Data 分成好幾個 Packet 傳輸 * 一個 Pakcet 最大只能切成一個 **最大傳輸單位(MTU, max transfer size)** * 一個 Pakcet 的 **Header 大小固定為 20 bytes** * 假設一個 Pakcet 大小為 MTU,那麼它能傳輸的 Data 就只有 MTU - Header size = MTU - 20 (bytes) * 一段資料被切成多個 Pakcet 之後 * Pakcet 的 **offset** 欄位會記錄此封包的開頭是原始資料的 **(第幾個byte / 8)** * Pakcet 的 **flags** 欄位會記錄此封包後面還有沒有原始資料的拆解後的封包,**1 表示後面還有封包,0 表示後面沒有封包了,即此封包是同一段資料的最後一個封包** #### 範例 目前原封包有 4000 bytes 要傳送,MTU = 1500 bytes  也就是說,實際需要傳送的 Data 是 4000 - 20 = 3980 bytes 1. 切第一個 packet,長度最大是 1500,扣掉 header 的 20 bytes 後,能傳送 1480 bytes,資料還沒傳完因此 flags 設成 1,offset 設成 0 (前面沒有其他資料),剩下 2500 bytes 的資料 2. 切第二個 packet,長度最大是 1500,扣掉 header 的 20 bytes 後,能傳送 1480 bytes,資料還沒傳完因此 flags 設成 1,offset 設成 185 (前面傳送了 1480),剩下 1020 bytes 的資料 3. 切第三個 packet,只需要傳 1020,加上 header 的 20 bytes 後長度是 1040,資料傳完了,因此 flags 設成 0,offset 設成 370 (前面傳送了 2960) ### IP Address **IP Address**:用來識別主機及路由器介面的 32-bit 識別碼 **Interface**:主機或路由器與 physic link 的連接點 * 路由器會有多個 interface * 主機通常有一到兩個 interface ### 子網路 Subnet 主機與主機間的 interface 不須經過中間路由器就能相連的裝置 * subnet part:相同子網路的主機 IP 位址中相同的 **high-order-bit** * host part:IP Address 中剩下的 **low-order-bit** <img src="https://hackmd.io/_uploads/ryXfe-_EC.png" height="400"> > 將主機或路由器的介面斷開,分離開的區域就是一個子網路 #### CIDR (Classless InterDomain Routing) Subnet part 為任意長度,其長度標記在 / 後面  ### DHCP (Dynamic Host Configuration Protocol) 目標:主機加入一個網路系統時,將動態地被伺服器分配一個 IP Address * 為應用層協議 * 可以在不同時間重複使用相同的 IP Address,避免不夠用的問題 程序概述: * 主機廣播 **DHCP Discover** 訊息 * DHCP 伺服器回應 **DHCP Offer** 訊息,告知有可使用的 IP Address * 主機發送 **DHCP Request** 請求使用 IP Address * DHCP 伺服器回應 **DCHP ack** 確認並回傳資訊  除了 IP Address 以外,DHCP 也可以傳 * 離主機最近的路由器位址 * 離主機最近的 DNS server 的 name 及位址 * network mask #### DHCP 流程 * 主機發出 DHCP Request 被 UDP、IP、Ethernet 一路向下封裝 * Ethernet frame 在 LAN 中廣播 (設定 dest IP address 為 255.255.255.255) * 被有 DHCP 的路由器接收,交由 DHCP 伺服器一路拆裝到 DHCP 協議 --- * DHCP 伺服器將請求的 IP Address 及其他資訊寫入 DHCP ack 內,並回傳 ### 如何得到 IP 位址 使用 ISP 空閒的位置來分配  #### 範例 1. 網路中心 IP 位址為 221.120.12.0/24,要怎麼將這個位址分給三個部門使用?每個部門需要 40 個空間 * 網路中心 IP 為 ==11011101 01111000 00001100== 00000000 * 首先,40 個空間需要花費 6 bits * 分成三個部門需要 2 bits,因此下個 subnet part 為 24 + 2 = 26 bits * 因此最終結果為: * 221.120.12.0/26 (4th bit: ==00==******) * 221.120.12.64/26 (4th bit: ==01==******) * 221.120.12.128/26 (4th bit: ==10==******) 2. 網路中心 IP 位址為 221.120.12.0/24,要怎麼將這個位址分給三個部門使用?每個部門各需要 20,30 及 40 個空間 * 網路中心 IP 為 ==11011101 01111000 00001100== 00000000 * 第一及第二個部門需要花費 5 bits * 第三個部門需要 6 bits * 最終結果為: * 221.120.12.0/27 (4th bit: ==000==*****) * 221.120.12.32/27 (4th bit: ==001==*****) * 221.120.12.64/26 (4th bit: ==01==****** 不能使用 00,會跟第一個部門重複) 3. 網路中心 IP 位址為 221.120.12.0/24,要怎麼將這個位址分給三個部門使用?每個部門各需要 10,20 及 30 個空間 * 網路中心 IP 為 ==11011101 01111000 00001100== 00000000 * 第一個部門需要花費 4 bits * 第二及第三個部門需要 5 bits * 最終結果為: * 221.120.12.0/28 * 221.120.12.32/27 * 221.120.12.64/27 #### 階層式定位 **Route Aggregation** * 將多個路由器整合到單一路由器 * 可以設定條件,讓封包經過階層式的傳遞到正確的目的地 * 封包會選擇符合條件最多的 router  #### ISP 如何取得網路位址 * ICANN:Internet Corporation for Assigned Names and Numbers * ICANN 會透過 5 個 regional registries (RRs, 區域網路註冊機構) 來分配 IP 位址 #### IP 位址會不會不夠用 * 會,ICANN 在 2011 時將最後一塊 IP 位址分發給 RR * NAT 可以暫時解決這個問題 * IPv6 使用 128 bits,可以暫時避免不夠的問題 ### Network Address Translation, NAT 區域網路內使用自己的 32 bits IPv4 位址,只能在區域網路內使用  * 優勢 * 只需要跟 ISP 租用一個 IP 位址,即可讓私人網路跟網際網路連線 * 區域網路內有主機修改自己的 IP 位址,不需要讓外界知道 * 如果換了一家 ISP,也不需要改變區域網路的 IP 位址 * 外界無法直接存取區域網路的主機,安全 #### 實現方法 封包要傳出區域網路時,router 會將來源端 IP 位址及 port #(1) 轉換成由 ISP 分配的 IP 位址,並重新分配一個 port #(2),並將對應的 IP 位址及 port # 存入 **NAT Translation Table**,當 router 收到封包時,會依照 Table 內的資訊將封包的目的位址轉換為原本的位址  #### 爭議 * router 應該只處理網路層的東西 * IP 位址不足的問題應該由 IPv6 處理 * 違背 end-end 原則 (port # 被網路層修改) * 客戶端無法連接在 NAT 後的伺服器 ### IPv6 * IPv4 快被用完了 * 有固定的 40-byte header * 可以讓網路層做流量處理  * no checksum * no fragmentation/reassembly * no options #### Tunneling 不是所有路由器都可以使用 IPv6,所以會將 IPv6 的資料塊放在 IPv4 的 Payload 中 (即把 IPv6 的 Datagram 當成資料再封裝成 IPv4 的 Datagram)  ## Generalized Forwarding, SDN * **Match plus Action**:得到的封包有相對應的位元則執行動作 * Destination-based Forwarding:根據目的地的 IP 位址進行 forwarding * Generalized Forwarding: * 使用標頭內的數值決定動作 * 動作:drop/copy/modify/log packet ### Flow Table * Flow:可以是連接、網路及傳輸層標頭內的值 * Generalized Forwarding * match:封包標頭內是否有對應的 pattern * actions:對發生 match 的封包進行 **drop, forward, modify, matched packet or send matched packet to controller** * priority:控制封包的優先順序 * counters:計算總共用了多少 byte 及 packet  ### OpenFlow 位於 link 的協議,能夠控制 switch 及 router 的 forward plane,讓 packet 改變所走的路徑 * match+action * Router * match:最長目標 IP 前綴 * action:forward out a link * Switch * match:目標 MAC 位址 * action:forward or flood * FireWall * match:IP 位址和 TCP/UDP port # * action:permit or deny * NAT * match:IP 位址和埠號 * action:給予新的 IP 位址和埠號  ## MiddleBoxes Middleboxes(中間盒子)是指部署在網路中的設備,用於執行傳統路由器和交換機之外的特定功能。這些功能通常包括但不限於安全性、性能優化和協議轉換。  以下是一些常見的中間盒子類型: 1. **防火牆(Firewall)**: 防火牆用於監控和控制進出網路流量,根據預定義的安全規則過濾流量,保護內部網路免受未經授權的訪問和攻擊。 2. **入侵檢測和防禦系統(IDS/IPS)**: 入侵檢測系統(IDS)用於檢測網路中潛在的安全威脅,而入侵防禦系統(IPS)則可以在檢測到威脅時自動採取行動進行防禦。 3. **負載均衡器(Load Balancer)**: 負載均衡器將流量分配到多個伺服器上,以確保沒有單一伺服器過載,提高整體系統的可用性和性能。 4. **網路地址轉換(NAT)設備**: NAT設備用於將內部網路的私有IP地址轉換為公共IP地址,允許多個內部設備共享一個公共IP地址進行外部通信。 5. **代理伺服器(Proxy Server)**: 代理伺服器充當客戶端與伺服器之間的中介,通常用於網頁加速、過濾內容、隱藏客戶端IP地址等。 6. **廣域網加速器(WAN Accelerator)**: WAN加速器用於優化廣域網上的數據傳輸,減少延遲並提高吞吐量,改善遠程辦公和分支機構之間的通信性能。 7. **應用層閘道器(Application Gateway)**: 這些設備運行於應用層,對特定的應用協議(如HTTP、FTP等)進行過濾、轉換和優化。 中間盒子在現代網路架構中扮演重要角色,但它們也帶來了複雜性和管理上的挑戰。為了解決這些問題,軟體定義網路(SDN)和網路功能虛擬化(NFV)技術應運而生,旨在通過軟體控制和虛擬化技術來簡化和自動化這些中間功能。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up