--- tags: 電腦網路, 大二筆記 --- # 電腦網路 Chapter 1 : intro ## 啥是「協定 (Protocol)」 * 網路實體間溝通的模式 * 定義網路實體間訊息的傳遞及收取的格式及順序,及之後須採取的動作 ![Internet Protocol](https://hackmd.io/_uploads/SJpNhiY1A.gif) > 例如:TCP協定 (Transmission Control Protocol) <br> --- ## 網路邊緣 Network Edge * 由我們平常使用的電腦、手機組成 * 我們通常稱之為 **主機 (Host)** 或是 **終端系統 (End System)** > 由於性質相同,我們通常會稱 Host = End System * 而「主機」又可以分為 **用戶端 (Client)** 與 **伺服器端 (Server)** > 伺服器端相對用戶端而言,有著更強大的效能,得以儲存及配發資料給所有用戶端 <br> > 而 **資料中心 (Data Center)** 則儲存資料及擁有多個伺服器 ### 存取網路 Access Network 指終端系統連接到 **Edge Router** 的線路 > Edge Router:終端設備所連到的第一個路由器 ### Home Access 最常見的連線方法:纜線 (Cable)、數位用戶線路 (DSL:Digital Subscriber Line) > 通常用於住家 * Cable * 利用有線電視的纜線來進行網路傳輸 > 台灣的「第四台網路」 * 有線電視前端 (Headend) 透過光纖 (Fiber optics) 連接到匯流站 (Distribution point),再使用同軸電纜(Coaxial cable) 將訊號傳遞至各個住家 ![Cable Internet](https://hackmd.io/_uploads/SJyCMgj10.gif) * 由於同時使用了光纖和同軸電纜,這個系統常被稱為:混合光纖同軸電纜 > HFC: Hybrid Fiber Coax <br> > 支持 40Mbps-1.2Gbps 下行; 30-100Mbps上行 * 用戶們需共用上行及下行的線路, > * 當用戶們都有大量資料要傳輸,將會導致每個人能分配到的頻寬大幅降低 <br> > * 需要使用分散式多重存取協定 (distributed multiple access protocol) 來協調封包的傳輸,以避免碰撞 * DSL * 不同於纜線,DSL是使用電信公司的線纜 * DSL直接使用電話線與電話總局 (Central office) 的DSLAM交換資料 > DSLAM:數位用戶線路接取多工器 (Digital Subscriber Line Access Multiplexer) * 因為使用的是類比訊號,可以使用一條纜線同時傳輸網路及電話訊號,並互不干擾 * 使用FDM將纜線分為三個部分: * 高頻下行頻道 (Downstream channel) 50K-1M Hz * 中頻上行頻道 (Upstream channel) 4K-50K Hz * 電話用雙向頻道 0-4K Hz > Frequency Division Multiplexing, FDM:使用頻率來分割頻道 <br> > Time Division Multiplexing, TDM:使用時間來分割頻道 ![DSL](https://hackmd.io/_uploads/HJBZayj1R.png) * 光纖到戶 (Fiber to the Home, FTTH) * 衛星鏈路 (Satellite link) ### Access in the Enterprise 乙太網路 (Ethernet)、無線網路 (WiFi) > 使用於企業、大專院校及大部分住家 <br> * 乙太網路 * 裝置利用雙絞線連接到 **乙太網路交換機 (Ethernet Switch)**,交換機再連上更大的網路 * 常見的應用為 **區域網路 (Local Area Network, LAN)** ![Ethernet](https://hackmd.io/_uploads/rko8qxs1A.png) * 使用者可以分到 100Mbps-1Gbps 的存取速度 * 伺服器則可以高達 1Gbps-10Gbps * 無線網路 * 透過 **無線存取點 (Wireless Access Point)** 去存取企業內網 * 而無線網路又可以分成兩種: | | Wireless Local Area Networks (WLANs) | Wide-area Cellular Access Networks | | :----: | :----: | :----: | | 層級 | LAN | WAN | | 有效距離 | 幾十公尺 | 數十公里 | | 技術 | IEEE 802.11 | 4G 5G | | 用途 | 家用或建築物中的無線網路 | 行動網路 | | 實現方法 | WiFi分享器 | 一堆無線基地台 | | 速度 | 取決於所使用的IEEE 802.11標準 | 10Mbps | ### 物理介質 Physical Media 在每一組送出及接收資料的機器之間,乘載位元的物理介質,我們稱之為Physical Link * 而各種物理介質,可以分為兩種: | guided media | unguided media | | :---: | :---: | | 有向的介質 | 無向的介質 | | 沿著固體的方向傳播 | 漫無目的地在大氣或太空中傳播 | | 光纖、銅軸線纜 | WLANs、衛星訊號 | * 各種物理介質 * 有向介質 | 名稱 | 特色 | 速度 | 用途 | 優勢 | | :---: | :---: | :---: | :---: | :---: | | 雙絞線 Twisted pair | 銅線呈螺旋狀以降低電磁干擾 | 六類雙絞線 (CAT-6) 速度可達 10Gbps | 乙太網路、DSL | 最便宜且最常用的有向介質 | | 同軸電纜 Coaxial cable | 銅線呈同心圓狀 | 每個頻道可有 100Mbps 的速度 | 電視網路 | 可作為共享介質,實現FDM | | 光纖 Fiber optic | 傳導光脈,一個光脈代表一個位元、點到點的傳輸 | 10-100Gbps | 光纖同軸混合電纜 | 高速、不受電磁干擾,適合作為長途傳輸介質 | * 無向介質 * 地表無線電波 Terrestrial Radio Channels * 透過電磁波頻譜傳遞信號 * 受環境影響 1. 路徑損耗 2. 遮蔽衰弱 3. 多重路徑衰弱 > 訊號行經兩種以上的路徑抵達同一個接受器時,產生的建設性干涉或破壞性干涉造成訊號強度改變 4. 干擾 * 地表無線電波可分為: 1. 短距離傳輸:無線滑鼠、鍵盤等 (45Mbps) 2. 區域傳輸:WLANs 3. 廣域傳輸:行動網路 * 衛星訊號 Satellite Radio * 衛星連接多個地表上的無線電波收發器,接收某個頻段的電波,用中繼器將訊號放大後將訊號從另一個頻段送出去 * 靜止軌道同步衛星 (Geostationary Satellites) * 其軌道速度等於地球自轉速度,因此衛星會待在地球上空某個點 * 延遲非常大,高達 280ms * 每個頻道可提供 45Mbps 的速度 * 近地軌道衛星 (Low-Earth Orbiting, LEO) * 軌道離地球較近,所以會繞著地球轉 * 目前還沒被使用於存取網路 --- ## 網路核心 (Network Core) 由路由器和交換機所形成的大網,並連接各家的End Router ![Network Core](https://hackmd.io/_uploads/Bka4dijkC.gif) ### 封包交換 Packet Switching * 封包 Packet * 資料傳遞時,需分割成一塊一塊 **封包** * 每個封包都有 **標頭 (Header)**,用來記錄這個封包的資訊 * 封包經過每條通信線路會以該線路的最大傳輸速度傳輸 > 傳輸延遲 * 傳輸延遲 (Transmission Delay):傳輸速率 (Transmission rate) 為 **R** 的線路傳輸 **L** 位元的資料,造成的延遲為 **L/R** 秒 * 儲存並轉發傳送機制 (Store and Forward Transmission) * 交換機必須收到完整的封包內容,才能將其發送出去 ![Store and Forward](https://hackmd.io/_uploads/r1xXsjsJ0.png) * 端到端延遲 (End-end Delay):訊號源經由 N 個傳輸速度為每秒 R 位元的線路(經過 N - 1 個路由器)將一個大小為 L 的封包送給目標的延遲 (不考慮傳播延遲): $$d_{end-to-end} = N\frac{L}{R}$$ * 現在有兩個終端系統 A 和 B,中間連接一個路由器 C,路由器間傳輸速率為 R ``` A ---- C ---- B ``` ###### 傳播延遲 (Propagation delay) 先忽略不計,先專注在傳輸延遲 (Transmission delay) 上 1. 假設有一個大小為 L bits 的封包要從 A 傳到 B,需要花多久的時間? * 我們定義 A 開始傳輸的時間為第 0 秒 * 在 **L/R** 的時間時,封包剛好完整地傳到 C,並開始把封包往 B 傳 * 由 C 到 B 一共花了 **L/R** 秒,因此一共有 **2L/R** 秒的延遲 * 代入公式來看看,一共有2個線路 (N = 2),傳輸速率均為 R,封包大小為 L bits $$d_{end-to-end} = \frac{2L}{R}$$ 2. 假設有三個大小為 L bits 的封包要從 A 傳到 B,請問傳輸延遲為多少? * 同樣的,定義 A 開始傳輸第一個封包 **p1** 的時間為第 0 秒 * 在 **L/R** 的時間,**p1** 剛好完整傳到 C,並開始傳往 B,與此同時,因為 **p1** 已經傳輸完畢,第二個封包 **p2** 從 A 開始傳輸 * **2L/R** 時,**p1** 到達 B,而 **p2** 到達 C且 A 開始傳輸第三個封包 **p3** * **3L/R** 時,**p2** 到達 B,而 **p3** 到達 C * **4L/R** 時,**p3** 到達 B,結束 * 因此 $$d_{end-to-end} = \frac{4L}{R}$$ ``` time_____________________ 0 | - | | | p1 | | L/R | - | - | | p2 | p1 | 2L/R | - | - | <---p1到達 | p3 | p2 | 3L/R | - | - | | | p3 | 4L/R | | - | | | | --------------------- A ---- C ---- B ``` * 我們可以發現 **p1** 到達的時間為 **2L/R**,也就是 **NL/R**,而之後 **L/R** 秒 **p2** 到達,再 **L/R** 秒後 **p3**到達,於是我們可以進行推導: * 當訊號源經由 N 個傳輸速度為每秒 R 位元的線路將 P 個大小為 L bits 的封包送給目標時,其傳輸延遲為:第一個封包到達的時間 **NL/R** + 之後 **P - 1** 個封包各晚了 **L/R** 的時間 $$d_{end-to-end} = (N+P-1)\frac{L}{R}$$ * Queueing Delay and Packet Loss * 每個交換機都有一個 **輸出佇列 (Output Queue / Buffer)** * 當交換機的輸入速度 (arrival rate) 大於輸出速度 (transmission rate),輸入的封包會進入輸出佇列,等待前面的封包完成傳輸 * 輸出佇列的大小是有限的,如果佇列已滿,但還有封包要輸入,就會造成 **掉包 (packet loss)** ,交換機將選擇丟掉佇列中的某個封包或是新來的封包 ![Queueing](https://hackmd.io/_uploads/ryp3pRiyR.png) * Forwarding Table and Routing Protocol * 每個封包標頭內都會紀錄目的 **IP** 位址 * 而每個路由器都有自己的 **路由表 (Forwarding Table)** 紀錄哪條線路是通往哪一個 (哪個範圍)的IP。當有封包進來時,路由器就會經由查表的方式得知應該將封包送到哪 * 決定封包經過的網路路徑的動作稱為 **路由 (routing)** ### 電路交換 Circuit Switching * 不同於封包交換,電路交換會為使用者建立一個專門的通路,相當於一個vip通路,不會有其他人來干擾。因此此方法資料的傳輸又快又穩定 * 當沒有資料要傳輸時 (Silent Period),線路則會被閒置,很浪費資源 * 為了事先建立連線並維護端到端的穩定連線,電路交換需要設計的信令來協調路上的交換機 * 傳統電話就是使用電路交換的方式 * 電路交換會把一條線纜切成多個部分,有兩種方式: * 分頻多工 Frequency Division Multiplexing, FDM * 將一條線路分成多個不同頻率的頻譜,要建立通話時,就分配一個固定的頻帶 * 這些頻帶的寬度我們稱之為 **頻寬 (Bandwidth)** * 分時多工 Time Division Multiplexing, TDM * 將時間分為很多個 **時段 (Time Frame)**,再把每個時段分成幾個 **時槽 (Time Slot)** > 下圖每四個顏色就是一個 frame,而各個顏色代表一個 slot * 建立通話時,就將某個時槽分配給這次連線 * 在分時多工下,傳輸速率就是 每秒傳輸的時槽數量 * 時槽的容量 > 某條線路使用 TDM 且每秒可以傳送 8000 個 frame,每個 frame 可以乘載 8 bits,這條線路的傳輸速率就是 8000 * 8 = 64Kbps <img src="https://hackmd.io/_uploads/HJmk2k2k0.jpg" height="400"> * 假設A 電腦要經由一電路交換的網路傳送一個 640000 bits 的檔案到電腦 B,線路採 TDM,每秒可傳 24 個 slot,每條線路的傳輸速率為 1.536 Mbps,且需要花費 500ms 去建立連線,試問傳輸時間為何? ``` 通道的傳輸速率 = 1.536 Mbps / 24 = 64 Kbps 傳輸時間 = 0.5 sec + 640 Kb / 64 Kbps = 10.5 sec | | 建立連線 傳輸花費的時間 ``` ### Packet switching versus Circuit switching * 假設一群使用者共用 1 Gbps 的線路,使用者們會時不時會需要 100 Mbps 的使用頻寬,大概佔 10% 的時間,剩下的 90% 什麼都不做,在這個情況下: * 使用電路交換 * 每個使用者使用時,都必須保留 100 Mbps 的通道,假如使用 TDM,則每一個一秒的 frame 只能被分成 10 個 slot * 只有 10 個 slot,所以只能提供 10 個使用者使用 * 而使用者只有 10% 的時間會使用自己的通道,其他時間都是 Silent period,非常浪費資源 * 使用封包交換 * 假如現在有35個使用者,在同個時間有超過 10 個人一起傳送封包的機率為 0.0004,也就是說,一次只有 10 個人以下使用的機率為 0.9996 * 10 個人以下使用時,使用量也不會超過 1 Gbps,因此使用上感受跟電路交換差不多 * 由於超過 10 個人一起使用的機率極小,因此 35 人一起使用的感受也跟電路交換差不多 :::info $$p_{user>10} = \sum_{i=11}^{35}(0.1)^i(0.9)^{(35-i)} = 0.00004$$ ::: * 結論:封包交換可以支持更多使用著一起使用 ### Network of Network * 終端系統透過 **access ISP** 連接上網際網路 * 而要湊齊完整的網際網路,**access ISP** 之間也要互相連接才行 * 但要世界上所有 access ISP 連接在一起明顯是不可能的,單個 access ISP 就需要上百上千萬條線去連上世界上其他的 access ISP #### Network Structure 1 > access ISPs + a global transit ISP * 因此有了 **transit ISP** 這個概念 * 理論上 transit ISP 這個東東連上了世界上所有的 ISP,這樣就可以方便讓 access ISP 存取其他 ISP * 但如此大型的機構將會難以維護,因此肯定會向 access ISP 收錢,因而形成了 access ISP 為 **消費者 (Consumer)**,transit ISP 為 **供給者 (Provider)** 的概念 * 而連上所有 access ISP 的 transit ISP,我們稱之為 **global transit ISP** ![NS 1](https://hackmd.io/_uploads/HJSXpH2yC.png) #### Network Structure 2 > access ISPs + **global transit ISPs** * 但既然運行 global transit ISP 能賺錢錢,一定有其他廠商也想要分一杯羹,因而造成有數個 global transit ISP * 但是每個 transit ISP 應該要連接起來才對,不然使用 ISP B 的 access ISP 無法與使用 ISP A 的 access ISP 通訊,這樣不符合 global transit ISP 的精神 ![NS 2](https://hackmd.io/_uploads/ry2NpBhJR.png) #### Network Structure 3 > access ISPs + **reginal ISPs + tier-1 ISPs** * 在第三代形成了三層架構,access ISP 付費連接到 reginal ISP,而 reginal ISP 再付費連接到 tier-1 ISP * tier-1 ISP 身為架構中的最上層,其概念最為接近 global transit ISP #### Network Structure 4 > access ISPs + reginal ISPs + tier-1 ISPs + **PoPs, multi-homing, peering and IXPs** * Network Structure 3 還是很粗略的架構,既然 tier-1 ISP 也有得賺錢,因此也不可能只一個,要更接近實現 global transit ISP 還須加上這些元件: * 對等連接 peering * 同層級的 ISP 互相連接,這樣就不需要透過 Provider ISP 才能通訊 * 同層級 ISP 相互連接不須要互相付錢 * 網際網路交換中心 Internet Exchange Point, IXP * 將多個 ISP 相互對等連接 * 網路服務提供點 (Point of Presence) * 存在除了 access ISP 的 ISP 中 * 一組一到多個的路由器放在 Provider ISP 網路當中,提供 Costomer ISP 連線 * 路徑多宿 multi-homing * 除了最高層的 tier-1 ISP,其他 ISP 都可以將自己連接到兩個以上的 Provider ISP * 這樣某個 ISP 出現問題,有做 multihome 的 ISP 仍可以使用其他 ISP 繼續存取網際網路 ![NS 4](https://hackmd.io/_uploads/SJcbmUnJ0.png) #### Network Structure 5 > access ISPs + reginal ISPs + tier-1 ISPs + PoPs, multi-homing, peering and IXPs + **content provider** * 這就是我們如今的網際網路架構 * **Google** 就是如今 **Content Provider Network** 的先驅,其擁有 50-100 座資料中心 * 而這些資料中心都是透過 Google 私人的 TCP/IP 網路連接,與公共網際網路隔開 * 通常會直接連到低層的 ISP 或是 IXP,以節省給予 tier-1 ISP 的資金 ## Performance: loss, delay, throughput ### Delay in Packet Switching Networks ### 處理延遲 Processing Delay $d_{proc}$ * 包含拆開並解析標頭,決定這個封包要往哪走的時間及錯誤檢測的時間 * 時間非常短,通常都是微秒等級 ### 排隊延遲 Queueing Delay $d_{queue}$ * 封包被排進駐列後等待的時間 * 封包被排進佇列時: * 如果佇列為空,現在也沒有正在傳送封包,則排隊延遲為 0 * 如果當前佇列很多封包,則排隊延遲就會非常大 * 跟路由器的壅塞程度和效能有關 ### 傳輸延遲 Transmission Delay $d_{trans}$ * 和傳輸速率和封包大小有關 * 假設一 **L** bits 的封包要由傳輸速率為 **R** bps 的線材傳輸,傳輸延遲為: $$d_{trans}=\frac{L}{R}$$ ### 傳播延遲 Propagation Delay $d_{prop}$ * 每個位元被放到線路上後,傳播到目的地經過的時間 * 受物理介質傳播速度及距離長度影響 * 假設線材長度為 **D**,物理介質的傳播速度為 **s**,則傳播延遲為: $$d_{prop}=\frac{D}{s}$$ ### 節點總延遲 Nodal Delay $d_{nodal}$ $$d_{nodal}=d_{proc}+d_{queue}+d_{trans}+d_{prop}$$ :::info ### 傳輸延遲和傳播延遲的差異 我們將線材比喻為一段高速公路,則傳輸延遲比較像是車輛進入高速公路所花的時間,而傳播延遲則是車子走完這段高速公路所花的時間 ::: ### Queueing Delay and Packet Loss #### 排隊延遲 Queueing Delay * Queueing Delay 會因為佇列狀態不同而有所差異,為了精簡化,我們定義: * 平均封包抵達速度為 **a** package per second * 封包長度 **L** bits * 傳輸速率 **R** bps * 平均抵達速率 **La** bps * 假設佇列長度無限大 * 流量強度 Traffic Intensity,為平均抵達速率與傳輸速率的比值 $$T = \frac{La}{R}$$ * 當 T > 1:代表抵達速度比傳輸速度還要快,封包隊伍將無止盡增長,因此排隊延遲會趨近 **無限大** * 當 T 接近於 1:封包會排隊,排隊延遲較大 * 當 T 接近於 0:代表來的封包很少,因此排隊延遲會接近 0 #### 丟包 Packet Loss * 我們會假設佇列長度無限大,但實際上長度是有限的,當佇列被塞滿時,新的封包進不來,就會造成 **丟包 (Package Loss)** * 流量愈強,丟包的機率就越高 * 而遭到丟包的封包會由上一層重新傳送,確保資料能夠到達目的地 ### 端到端延遲 End-to-End Delay 前面我們有提到端到端延遲為:$$d_{end-to-end}=(N+P-1)\frac{L}{R}=d_{trans}(N+P-1)$$ > 經過 **N** 條 link,傳送 **P** 個封包,每個封包長度為 **L** bits 且每個 link 的傳輸速率為 **R** bps 這部分只考慮到 **傳輸延遲**,而現在加上處理延遲和傳播延遲後:$$d_{end-to-end}=(N+P-1)(d_{proc}+d_{trans}+d_{prop})$$ ### 吞吐量 Throughput * 吞吐量 Throughput 單位為 bits/sec,一共分為兩種 * 瞬時吞吐量 instantaneous throughput:某個瞬間收到的資料量 * 平均吞吐量 average throughput:檔案大小和總花費時間的比值,假設一個檔案大小 **F** bits,且一共花費 **T** 秒才傳輸完成,則平均吞吐量為 **F/T bits/sec** * 下圖為一個簡單的網路,假設: * 伺服器和路由器間的傳輸速率為 $R_{s}$ * 客戶端和路由器間的傳輸速率為 $R_{c}$ ![Throughput](https://hackmd.io/_uploads/rkqwmPhJA.png) * 在理想的情況下: * $R_{s}<R_{c}$,則客戶端感受到的吞吐量為$R_{s}$ * $R_{s}>R_{c}$,則客戶端感受到的吞吐量為$R_{c}$,且封包會在路由器愈積愈多 * 因此,這段網路吞吐量就是 $min\{R_{s}, R_{c}\}$,也就是 **瓶頸線路 (bottleneck link)** 的傳輸速度 * 要傳送一個 **F** bits 的檔案,所需的時間為 $\frac{F}{min\{R_{s}, R_{c}\}}$ * 下圖有 10 對電腦和伺服器同時傳輸檔案,十條路徑共用一個線路,我們假設: * 每條伺服器接到網路的線路傳輸速率為 $R_{s}$ bps * 每條電腦接到網路的線路傳輸速率為 $R_{c}$ bps * 核心網路中被共用的線路傳輸速率為 $R$ bps ![螢幕擷取畫面 2024-04-05 104651](https://hackmd.io/_uploads/ByFOI16k0.png) * 客戶端感受到的吞吐量: * 當 $R$ 非常大,為 $R_{s}$ 和 $R_{c}$ 的數百倍時,吞吐量仍為$min\{R_{s}, R_{c}\}$ * 如果 $R$ 與 $R_{s}$ 和 $R_{c}$ 差不多時,$R$ 就容易成為瓶頸線路,因為 $R$ 需要平分給 10 條資料流,吞吐量就會變成$min\{R_{s}, R_{c}, \frac{R}{10}\}$ ## 網路安全 Network Security ### 惡意軟體 Malware * 電腦病毒 Virus * 主動感染,使用者可能不小心做了某些操作導致感染 * 經典案例:e-mail夾帶惡意執行檔 * 會實現自我複製,一旦檔案被執行,就會把同樣的信件及檔案發送給其他人 * 電腦蠕蟲 Worm * 被動感染,使用者不需要特別做甚麼就可能以被感染 * 透過應用程式漏洞發送病毒 * 會實現自我複製,自動尋找有相同漏洞的電腦,並將自己複製一份發送過去 ### 間諜軟體 Spyware Malware * 在使用者不知情的情況下,收集使用者個人資料的軟體,對使用著的隱私權進行破壞 ### 阻斷式惡意攻擊 Denial of Service attack, DoS * 透過合法使用者造成網路、主機或其他網路設施無法使用 * 大部分 DoS 攻擊可分為三種: * 漏洞攻擊 Vulnerability attack:攻擊者透過少量「精心設計」的訊息傳送到目標主機,導致主機服務中止或是死當 * 頻寬洪水攻擊 Bandwidth flooding:攻擊者傳送大量封包至目標主機,導致頻寬被占滿,使合法的封包無法抵達 * 連線洪水攻擊 Connection flooding:攻擊者透過與目標主機建立大量的 **TCP 半開連線** 或是全開連線使主機因為大量假連線而占用資源,最後停止接受合法連線 ### 分散式阻斷式惡意攻擊 Distribute DoS attack, DDoS ![DDoS](https://hackmd.io/_uploads/rJp30Jpk0.png) * 攻擊者可以控制很多的來源,也就是 **殭屍網路 (Botnet)**,讓每個來源都往目標發送大量的流量 ### 封包分析 Packet Sniffing * 封包分析器 Packet Sniffer * 紀錄所有經過的封包的副本的機器 * 可能包含敏感的資訊,包含密碼、身份證、商業機密 ### IP 位址詐欺 IP Spoofing * 我們可以手工創造一個含有任意來源位址、封包內容、目標位址的封包 * 而 IP 位址詐欺就是編造一個假的來源地址 * 避免被位址詐欺的方法: **端點認證 (End-point Authentication)** ## Protocol Layers and Service Models ### 服務模型 Service Models * 我們的通訊分為很多層,而每一層都提供了什麼服務給他上面那層,我們稱之為該層的 **服務模型** ### 協定堆疊 Protocol Stack * 網際網路的協定共分為五層 (由上到下排列): * 應用層 Application Layer * 傳輸層 Transport Layer * 網路層 Network Layer * 資料連接層 Data link Layer * 物理層 Physical Layer #### 應用層 Application Layer * 由網路應用層服務和應用層通訊協定組成,包含的協定有: * HTTP (HyperText Transfer Protocol),負責網頁傳輸 * SMTP (Simple Main Transfer Protocol),負責 email 傳輸 * FTP (File Transfer Protocol),負責做檔案傳輸 * DNS (Domain Name System)是由應用層的協定實作 * 我們稱這裡發送的封包為 **訊息 (Messae)** #### 傳輸層 Transport Layer * 負責在 **應用程式終端 (Application Endpoint)** 之間傳遞應用層的訊息,分為兩種協定: * TCP (Transmission Control Protocol) 提供連結導向式 (Connect-oriented) 的服務 * 提供可靠傳輸 (reliable delivery) 訊息一定可以到達目的地 * 流量控制 (flow control) 控制收發兩端的傳輸速度到達一致 * 壅塞控制機制 (congestion control) 將過長的訊息切小、壅塞時會自動降速 * UDP (User Datagram Protocol) 提供非連結導向式的服務 * 除了傳送訊息,不會做多餘的動作 <img src="https://hackmd.io/_uploads/H1uFtg61A.png" height="400"> * 傳輸層發出的封包稱為 **區段 (Segment)** #### 網路層 Network Layer * 網路層又稱 **IP 層** ,而我們稱這一層的封包為 **資料塊 (Datagram)** * IP (Internet Protocol) 協定位於此層,定義資料塊有甚麼欄位,終端系統和路由器該如何解讀並做出對應動作。只要有網路層,就必須要可以運行 IP 協定 * 路由協定 (Routing Protocol) 用來決定資料塊要走哪條路到終點 #### 資料連接層 Link Layer * 負責將資料塊由一個節點移動到另一個節點 * 連結層協定包含 **乙太網路**、**802.11 (WiFi)** * 資料連結層的封包稱為 **訊框 (Frame)** #### 物理層 Physical Layer * 把資料連接層的訊框拆成一個一個位元,經由物理媒介傳輸至另一個節點 ### 封裝 Encapsulation ![Encapsulation](https://hackmd.io/_uploads/r1j1ClaJA.png) * 在封包每往下一層,就會被安上一個標頭,形成一個新的封包,我們會說這一層封裝了上一層的封包 * 應用層傳輸到傳輸層,應用層的 **訊息** 加上傳輸層的標頭 ($H_{t}$) 組成傳輸層的 **區段**。傳輸層封裝了應用層的訊息 * 傳輸層往下到網路層,傳輸層的 **區段** 被加上網路層的標頭 ($H_{n}$),組成網路層的 **資料塊** * 網路層往下到連接層,網路層的 **資料塊** 被加上連接層的標頭 ($H_{l}$),組成連接層的 **訊框** * 我們可以看到,每一層的封包都分成 **標頭 (Header)** 和 **負載 (Payload)** > 負載為來自上一層的整個封包 * 封包往上層傳時,就會被 **拆裝 (Deencapsulation)**,將自己層的標頭拆除,再傳到上層