# Protocol Layering(協定分層) ![20190601215753579.png](https://hackmd.io/_uploads/Bkq8GsQQ6.png) ### 1. Application Layer-應用層 * 包含許多協定(HTTP、SMTP) * 應用層的資訊封包稱為**訊息(message)** ### 2. Transport Layer-傳輸層 * 傳輸應用層的訊息(message) * 包含TCP、UDP協定 * 傳輸層的封包稱為**區段(segment)** #### TCP vs UDP :+1: > TCP(Transmission Control Protocol) > * 提供**連線導向**(Connection-oriented service)服務 > * 握手式(Handshaking) > * 全雙工連線(full-duplex connection) > * **可靠**的資料傳輸 > * 保證所有資料都完整送達且不會遺失 > * 將長訊息分割成短訊息傳輸 > * 有壅塞機制 > * 可調節傳送速率 > > UDP(User Datagram Protocol) > * 提供**無連線**(Connectionless service)服務 > * **不可靠**的資料傳輸 > * 不保證所有資料都完整送達,也不保證依序送達 > * 不提供壅塞機制 > ### 3. Network Layer-網路層 * 負責將資料報(datagram)移動到其他主機 * 包含IP協定 * 網路層的資訊封包稱為**資料報(datagram)** ### 4. Link Layer-連結層 * 將整個訊框(frame)從一個網路元件搬到另一個網路元件 * 服務取決於連結層協定而有所不同 * 連結層的資訊封包稱為**訊框(frame)** ### 5. Physical Layer-實體層 * 將訊框(frame)中**個別**的位元從一個節點搬到另一個節點 * 協定取決於連結的**傳輸媒介**有所不同 ### OSI model #### presentation-表現層 * 提供服務使應用程式可以解讀交換資料的意義 * 資料壓縮、加密、解密 #### session-會議層 * 資料交換的界線標定和同步化 * 建立檢查點 --- ### Encapsulation(封裝) 每層資料包都有兩種欄位:**標頭欄位(header)**與**內容欄位(payload)**,內容通常來自上一層封包 ![image.png](https://hackmd.io/_uploads/Bk8sUomXp.png) --- # 1.Application Layer(應用層) ## Web and HTTP ### HTTP(HyperText Transfer Protocol) * 用TCP作為傳輸協定 * 較可靠的資料傳輸 * stateless protocol(無狀態協定) * 不會維護跟用戶端有關的資訊 #### 非永久性連線 vs 永久性連線 > Non-persistent connection(非永久性連線) > * 透過**個別的TCP連線**來傳送 > * 總回應時間:2*RTT+傳輸時間 > * RTT - 資料包來回往返client(客戶端)和server(伺服器)時間 > * 2次RTT - 1次建立TCP連線、1次請求和接收物件 > > persistent connection(永久性連線) > * 透過**相同的TCP連線**來傳送 > * 保持TCP連線開啟 ### cookie 讓網站能追蹤使用者,包含四項元件:HTTP**回應**訊息的標頭行、HTTP**請求**訊息的標頭行、由使用者瀏覽器管理的cookie檔、網站的後端資料庫。 ### web caching(網頁快取)/proxy server(代理伺服器) 是減少伺服器負荷的一種技術,網頁快取有自己的硬碟儲存空間,可以保存最近被請求過的物件副本。 優點: * 減少客戶端請求的回應時間 * 減少資料流 * 降低頻寬成本 * 減少資訊網流量 * 增加所有應用的效能 ### CDNs(Contect Distribution Networks, 內容傳遞網路) shared CDNs Dedicated(專用) CDNs : Google、Netflix ![image.png](https://hackmd.io/_uploads/S1x87T7X6.png) --- ## Email 是一種**非同步**的通訊媒介,主要元件有:user agent、mail server、Simple Mail Transfer Protocol(SMTP)。 ### SMTP * 存放於**應用層**的網路電子郵件協定 * 使用**TCP**建立連線 * 早期使用簡單的7位元ASCII碼 * 直接連線 #### SMTP vs HTTP 兩者皆為檔案傳輸 > SMTP > * push protocol(送出式協定) > * TCP由**寄件者**的主機開啟 > * 以7位元的ASCII格式編碼 > > HTTP > * pull protocol(取得式協定) > * TCP由**接收者**的主機開啟 > * 無限制編碼格式 --- ## DNS(Domain Name System, 網域名稱系統) 是一種應用層協定,它做為將主機名稱轉譯為IP位址的**分散式資料庫(distributed database)**,使用**UDP**運作(port 53)。 它也提供以下服務:主機別名、郵件伺服器別名、負載分配。 * 位於網路邊緣(Network edge) * 使用者不會直接使用 * 使用UDP協定連線 ### 分散式資料庫(distributed database) DNS使用大量的伺服器,以hierarchical(階層)的方式分散在世界各地。 有三類伺服器:Root DNS server、Top-level domain(TLD, 高階網域) DNS server、Authoritative DNS server。 ![image.png](https://hackmd.io/_uploads/S1UYOFVQa.png) 左圖:遞迴式查詢(recursive guery)+循環式查詢(iterative gueries) 右圖:遞迴式查詢(recursive guery) ### DNS Cache(DNS快取) 當DNS伺服器收到對應地址的回覆,可快取在本機記憶體中,每隔一段時間會**清除**快取的資訊以改善效能延遲、減少DNS訊息量。 ### DNS紀錄與訊息 Type = A,`Name`為hostname,`Value`為該主機名稱的IP位址 Type = NS,`Name`為domain(網域),`Value`為該官方DNS伺服器的主機名稱 Type = CNAME,`Value`為主機別名為`Name`的正規主機名稱 Type = MX,`Value`為主機別名為`Name`的正規郵件伺服器名稱 --- ## Video and CDN ### DASH(動態自適應串流) * 高(低)頻寬-高(低)速率 * 允許用戶端**自由切換**不同版本 ### CDN(Contect Distribution Networks, 內容傳遞網路) 管理多個分散位置中的伺服器,將影片**副本**儲存在其伺服器中。 包含私有CDN (ex.Youtube)、第三方CDN #### CDN的兩種佈局原理 * Enter Deep 深度進入到ISP的存取網路,減少用戶與CDN伺服器的連結和路由器的數量,改善延遲和吞吐量 * bring home 透過較少數量的網站上建構大型集群將ISP帶回家,放置在IXP中,降低維護和管理 Cluster Selection Straregy(集群選擇策略) 1. 地理位置最接近的集群 缺點:地理上接近的集群在網路路徑長度下可能不是最接近的集群 2. 對集群和用戶端之間的延遲進行**即時測量**以確定最佳集群 缺點:許多LDNS(用戶的DNS伺服器)被配置為不回應 --- ## socket 當socket被創建時,會被指派識別號碼(port number, 埠號)。 ### 使用UDP的socket * 在封包丟進socket之前,需要把目地端位址貼在封包上 ![image.png](https://hackmd.io/_uploads/ByJe0cEQa.png) ### 使用TCP的socket * 需要先**握手**(Handshaking)建立TCP連線 * TCPserver有兩個socket * 第一個socket:用戶端想要與伺服器通訊時,一開始接觸的點 * 第二個socket:建立來和用戶端通訊使用 ![image.png](https://hackmd.io/_uploads/ryvW0cV7T.png) --- # 2.Transport Layer(傳輸層) 是分層網路架構的核心部分。傳輸層協定提供**邏輯通訊(logical communication)**-兩台主機透過路由器和連結相連,實作在終端機上,而非路由器。 ### IP(Internet Protocol) 提供主機間的邏輯通訊,屬於盡力而為投遞服務,是一種不可靠的服務 --- ## Multiplexing and Demultiplexing 多工需要socket有唯一識別碼,每份區段都包含特殊欄位:來源端埠號欄位(source port number field)、目的端埠號欄位(destination port number field) * 0 ~ 1023為公認埠號(well-known port number) ### multiplexing(多工) 1. gathering(收集):在不同的socket收集資料片段 2. Encapsulating(封裝):將資料片段與標頭封裝在一起 3. Passing(轉交):把區段交給**網路層** ### demultiplexing(解多工) 1. Delivering(交付):將資料交付給正確的socket ### 無連線的多工與解多工 UDP socket由兩個數值識別: 1. **目的端IP位址** 2. **目的端port number** 由於**沒有紀錄來源端**,導致若有相同目的端的socket則無法辨別其來源。 ### 連線的多工與解多工 TCP socket由四個數值識別: 1. **來源端IP位址** 2. **來源端port number** 3. **目的端IP位址** 4. **目的端port number** --- ## UDP DNS使用UDP協定 > 更適合UDP的應用: > * 傳送哪些資料在何時傳送 > * UDP沒有壅塞控制 > * 不用建立連線 > * 沒有握手程序,不會因為建立連線而延遲 > * 無連線狀態 > * 較小的封包標頭負擔 > * UDP只有8位元的標頭負擔 > * 例如:即時的應用程式 > > 缺點:丟包率較高、安全性較低 ### UDP checksum(檢查和) * 提供**錯誤偵測**的功能 * 無法保證來源端與目的端之間的連結都會提供錯誤檢查 * end-end principle : UDP必須提供端點的錯誤偵測 * 不會採取錯誤復原的手段 ![image.png](https://hackmd.io/_uploads/SkjmbnNQ6.png) --- ## TCP * 是連線導向(Connection-oriented)的協定 * 需進行握手(handshake)程序 * 提供全雙工服務(Full-duplex service) * 資料可以在連線的主機之間相互流動 * 連線是點到點的 * 傳送端-接收端 * 群播(multicasting)無法使用TCP運作 ### 三次握手(three-way handshake) 1.用戶端會送出一份特殊的TCP區段 2.伺服器會回應第二份特殊的TCP區段 3.用戶端會再回應第三份特殊區段 前兩份不包含應用層資料;第三份可能會**攜帶內容(payload)** --- # 3.Network Layer(網路層) 兩個部分:**資料層、控制層** ### forwarding(轉送) and routing(繞送) * forwarding(轉送):當封包抵達路由器的輸入時,路由器須將封包移到適當的輸出連結,發生時間較**短**,通常在**硬體**中實作 * Forwarding Table * routing(繞送):網路層需判斷封包從傳送端到接收端的**路徑**,發生時間較**長**,通常在**軟體**中實作 * Routing algorithm ### Control Plane(控制層) * 轉送和繞送的功能包含在**路由器**中 * SDN(software-defined networking):網路是軟體定義的 ### 網路服務模型(network service model) 1. 投遞保障 2. 有限延遲的投遞保障 3. 依序封包投遞 4. 最低頻寬保障 5. 安全性 best-effort service(盡力而為的服務) ## 路由器內部 轉送功能(硬體):資料層 1. input port (輸入埠): 執行**實體層**功能:進入路由器的終端 執行**連結層**功能:與另一端連結層交互作用 執行**查詢**功能 2. switching fabric (交換結構):將輸入埠連接到輸出埠 3. output port (輸出埠):將經由交換結構的封包儲存,並輸送到輸出連結,會執行與輸入埠相反的資料 繞送功能(軟體):控制層 1. routing processor (繞送處理器):執行**控制層**功能 ### switching(交換) 路由器最核心部分,經由交換結構,封包由輸入埠轉送到輸出埠 1. 經由記憶體進行交換:封包從輸入埠複製到記憶體, 繞送處理器將**取出**目的端位址-**查找**轉送表-**複製**到輸出埠 2. 經由匯流排(bus)進行交換:輸入埠會透過bus直接將封包傳輸到輸出埠,不須繞送處理器的介入 3. 經由互連網路進行交換:棋盤式交換結構(crossbar switch) 可以在同一時間轉送多個封包,是非阻塞式的 ### 佇列 * 佇列會在輸入埠和輸出埠產生 * 佇列增長,記憶體會耗盡,封包遺失可能發生 * 輸入佇列:棋盤式交換結構(crossbar switch) 1.速度相同 2.從輸入埠傳輸到輸出埠的時間等於輸入連結接收封包的時間 3.封包以FCFS的方式移動 ### 封包排程 * First-come-first-served(FCFS) * First-in-first-out(FIFO):以**封包抵達輸出佇列的順序**,選擇封包進行傳輸 * Priority Queuing(優先權佇列):**按照優先權類別**進行傳輸,相同優先權會以FIFO的方式進行選擇 * Non-preemptive priority gueuing:一旦封包開始傳輸就不會中斷 * Weighted Fair Queuing(WEQ) * Round Robin(RR) Queuing:封包按照優先權分類,並**輪流**服務各個類別 * Work-conserving Queuing:只要有封包在佇列中等待傳輸就不會讓連結閒置