計算機網路
===
###### tags: `大學必修-筆記`
Ch1-1
===
## 名詞解釋
:100::100::100:
===
* host -> 主機
* bandwidth -> 頻寬
* Internet Standard -> 網際網路標準
* 指關於網際網路相關的技術與方法論的技術規範。ex:RFC
* guide medium -> 有指向性的傳輸媒介 ex:各種線…
* unguide medium -> 沒指向性 ex:無線
* twisted pair -> TP -> 雙絞線
## 設備
* PC server phone -> hosts = end systems
* router 路由器 -> packet switches
## 網路結構
* network edge 網路邊緣 -> 主機host、應用程式application
* network core 網路核心 -> 路由器、網路中的網路
* packet transmission delay = $\frac{L}{R}$
* packets of length -> L
* transmission rate -> R
## protocol 協定
* 網路的標準
* 所有程式以協定標準來開發
* protocols define *format*, *order of messages sent* and *received among network entities*, and actions taken on message transmission, receipt
CH1-2
===
## Access network
### DSL - digital subscriber line

* 利用電話線網來傳輸
* 電話和上網都在同一條電話線裡傳輸
* 電話公司會用頻率來分開
* ADSL 非對稱式數位用戶專線 -> 下載流量大於上傳流量
### cable

* 利用第四台的線來傳輸
* 只有一條cable線,大家共用

* FDM - frequency division multiplexing
* 不同的資料利用不同頻率來作為區別
### wireless LANs 無線網路
* 距離短,速度快
* ex:802.11n 、802.11ac
### wide-area wireless access 行動網路
* 距離長,速度慢
* ex:4G、5G
## Physical media 傳輸媒界
* twisted pair (TP) - 雙絞線
* ex:CAT-5、CAT-5e、CAT-6
* coaxial cable - 同軸電鑬
* fiber optic cable - 光纖
CH1-3
===
## queuing and loss
* 如果 arrival rate 超過 transmission rate 的話
* 封包會進入 queue,等待被傳送
* 如果 queue 滿的話,封包有可能會 dropped (lost)
## packet switching -> 封包交換
* store-and-forward 儲存並轉發
* 路由器先把封包存起來,等封包傳完後,才會再往下傳。
* queue and loss 封包延遲與遺失
* 如果路由器裡的封包queue滿了會
* (1) 會有delay
* (2) 如果queue滿了,封包可能會 lost(dropped)
* routing & forwarding
* routing -> 路由器對表,規劃路徑
* forwarding -> 用規劃好的路徑,把封包傳下去
## circuit switching -> 線路交換
* 特性
* 在連線之前會先 **call** ,進行路線尋找及線路保留
* 優點:連線時就不會有封包塞車問題
* 缺點:線路一旦預留,資源無法共享,浪費線路
* FDM 分頻多工 & TDM 分時多工
* FDM -> 利用頻率來區分
* TDM -> 利用時間來區分

## 網路結構 network of network
* ISP -> 網際網路服務供應商
* host才能連到Internet
* peering link -> 各ISP之間的對等連結
* IXP -> internet exchange point
CH1-4
===
## Delay 延遲

* $d_{nodal} = d_{proc} + d_{queue} + d_{trans} + d_{prop}$
* nodal processing delay 節點處理延遲
* 路由器處理Header與找路徑等所花費的時間
* 檢查錯誤
* 查表時的delay
* queue delay 排隊延遲
* 路由器無法立刻將傳送封包到網路上造成封包停留在buffer上所花的時間
* trasmition delay 傳輸延遲
* 將封包傳至link的時間 -> 從路由器丟出去的時間
* $d_{tran} = \frac{L}{R}$
* propagation delay 傳播延遲
* 在網路線上傳輸所花費的時間,路由器之間的時間
* $d_{prop} = \frac{d}{s}$
## Packet loss 封包遺失
* Traffic Intensity 通訊密度 = $\frac{La}{R}$
* R -> Link Bandwidth 連結頻寬
* L -> Packet Length 封包大小
* a -> Avg. arrival rate of packet 平均封包抵達率
* 解決方法
* 要求上一個路由器重傳
* 要求來源端重傳
* 不理它
## Throuthput -> 傳輸量
* 單位時間能成功傳遞的平均資料量
* bottleneck link -> 傳輸瓶頸點
CH1-5
===
## protocol layers 協定層
* 降低複雜度,模組化,好管理
* 但可能同個事情做兩次,沒效率
* reference model -> 參考模形
* ~~降低複雜度、標準化介面、模組化工程、溝通化技術~~
## TCP/IP model

* **Application 應用層**
* ex:FTP, SMTP, HTTP
* **Transport 傳輸層**
* ex:TCP, UDP
* **Network 網路層**
* ex:IP, 路由器協定
* **Link 資料連結層**
* ex:乙太網路, 802.11
* **Physical 實體層**
* 把訊號轉成bit
CH1-6
===
## 網路安全
* Torjan Horse
* Virus
* Worm
* DDoS -> 分散式阻斷攻擊
* 攻擊者透過大量假的流量,來使伺服器癱瘓,造成一般流量無法正常使用
* Packet Sniffing
CH2-1
===
## Application architecture
* Client-Server architecture 主從式架構
* server
* 固定IP
* 永遠在線上
* clients
* 動態IP
* client 和 client 之間不會連線
* Pure P2P architecture 點對點架構
* 不用一直在線上
* 都可以直接互相連線
* 每個主機都可以是提供資料的伺服器
* Hybird Client-Server(P2P)
* 主從式,點對點混合架構
## Processes Communicating 行程通訊
* 同一個主機
* Inter Process Comunication(由OS定義) 行程間通訊
* 不同主機
* Message 訊息
* Process -> 在主機內執行的程式
* Client Process:初始產生通訊的行程
* Server Process:等待被連接的行程
* P2P 的話是 Client Process Server Process 同時並行
## Sockets

* Process 傳送 Message 給 socket
* Process 接收 Message 從它的 socket
* Socket 位於應用層(Application)與傳輸層(Transprotarion)之間的介面
* Socket 就像「門」一樣
## Address Processing 行程定址
* 一個 Identifier 包括
* IP address -> IP 地址
* port number -> 埠號
## Application 需要的服務
* 應用程式需要什麼傳輸服務
* data integrity 資料完整性
* timing 時序
* throughput 頻寬
* security 安全
## Protocols services
* SSL (只用於TCP) 傳輸層安全性協定
* provides encrypted TCP connection
* http -> https
* data integrity
* end-point authentication
* TCP 傳輸控制協定
* reliable transport 可靠的傳輸服務
* 如果封包遺失,TCP會要求重傳
* flow control 流量控制
* congestion control 壅塞控制
* connection-oriented 連線導向服務
* 沒有提供
* 時序
* 最小頻寬的保證
* UDP 用戶資料包協定
* 不會做 reliable transport
* 因此有低延遲,高頻寬的特色
CH2-2
===
## HTTP 超文字傳輸協定
### 名詞解釋
* RTT (Round-Trip Time) -> packet 來回 client server 所花的時間
### HTTP介紹
* Overviwe
* 使用TCP做為傳輸
* port掛在80
* **stateless** -> 無狀態協定
* server 不會儲存用戶端過去的請求資訊
* client 跟 server 要什麼,就給什麼
* HTTP connections
* Nonpersistent HTTP 非持久連接
* 每下載完一個文件,TCP連線就會被關掉
* 一個TCP連線只能傳送一個檔案
* Persistent HTTP 持久連接
* TCP連線會等一下,不會馬上關掉
* 一個TCP連線可以傳送多個檔案

* HTTP message
* request
* response
* HTTP 錯誤訊息
* 200 OK - 確定。用戶端要求成功
* 301 Moved Permanently - 要求的網頁已經永久改變網址。此狀態要求用戶端未來在連結此網址時應該導向至指定的 URI
* 400 Bad Request - 錯誤的要求
* 404 Not Found - 找不到
* 505 HTTP Version Not Supported - 不支援的 HTTP 版本
## cookies

* 步驟
1. HTTP 回應訊息的 cookie標頭列
2. HTTP 請求訊息的 cookie標頭列
3. 保留於使用者終端系統上的一份cookie檔案,並且由使用者瀏覽器管理
4. Web網站的後端資料庫
* cookies 運作方式
* 在User瀏覽線頁後,WEB server會送cookies記錄User在網站上使用的足跡
* 下次再去這個網站時,就可以利用cookies判斷user,傳送特別定網頁內容給user
* cookies 能做
* authorization
* shpooing carts
* recommendations
* user session state
## Proxy server 代理伺服器

* 解釋
* 在server 和 client 中間加一個server
* 如果中間 server 已經有資料的話 -> 變成server提供資料
* 如果中間server 沒有資料 -> 向原本的 server 要求資料
* 優點
* 減少client request的回應時間
* 塞車機率下降
* 缺點
* 資料有可能沒有更新
* Conditional GET -> 條件式 GET
* proxy server 向來源 server 確認資料最後更新時間
* 如果時間相同 -> proxy 傳送 data
* 如果時間不同 -> 向原 server 傳 request
CH2-3
===
## 電子郵件
* User Agent 使用者代理
* Mail Server 郵件伺服器
* mailbox
* message queue
* SMTP protocol
## SMTP 簡單郵件傳輸協定
* 解釋
* 使用TCP
* 埠號為 25
* direct transfer 直接傳輸 -> 不會有第三者看到
* 訊息一定要是 7-bit ASCII
* 使用 persistant connections -> 一個連線可以傳送多封郵件
* SMTP是一個「送出」的協議,它不允許根據請求從服務器上「取回」來消息
* SMTP 因為沒有身份驗證,導致垃圾郵件盛行
* Mail Format

* header -> 收件者、標題…
* body -> 信件內容
## POP3 郵局協定第3版
* 跟 SMTP 比多了身份的驗證
* 下載所有未讀信件
* 下載後電子郵件服務就會將它們刪除
* 之後只能使用同一台電腦來存取該郵件
## IMAP 網際網路郵件存取協定
* 不會主動下載郵件,除非使用者點開信件
CH2-4 DNS domain name system
===
* 領域名稱系統
* 用 UDP 實做
* distributed database 分散資料庫
* 為何使用分散
* 單點故障 -> 如果有一個點壞了,仍然可為其他人服務
* 通訊流量過載 -> 如果使用集中式,資料量會太大
* 遠距離集中式資料庫 -> 如果使用集中式,有些人的距離會太遠
* 維護
* application-layer protocol 在應用層執行
* 優點 -> 保持網路的簡單
* DNS service
* 主機名稱到IP位址的轉換
* host aliasing 主機別名
* mail server aliasing ( 郵件伺服器別名 )
> 將電子信件地址轉成位置
* load distribution ( 負載分配 )
> 一個網站可能有多台伺服器 每個伺服器的ip和主機名稱不同 有要求傳送過來時 dns會一直改變回傳的伺服器的主機名稱及ip
* Hierarchical Database 階級式資料庫
* 
* root 根伺服器
* 提供 TLD 的 IP address
* top-level domain(TLD) 高階網域伺服器
* 尋找這個網站是什麼類型的
* ex:com、edu、org…
* authoritative server 官方 DNS 伺服器
* 組織公司的 DNS 伺服器
* 替組織內的伺服器提供管控的==主機名稱==到==IP==的對應
* Local Name Server 區域 DNS 伺服器
* 不在以上三個架構裡面
* 像 proxy 一樣
* 先看 cache (快取)
* 如果沒有就向 root 尋問
* 負責查訊用的
* Local Name Server 查訊方式
* Iterated Query 循環式查詢
* 把問題丟給 local DNS
* 向不同的 server 依次尋問

* Recursive Query 遞歸式查詢
* 把問題丟到 root 去做

* cache 快取
* 為省 root 的負擔,有些 lns 會直接向 TLD 要位置,存在 cache 裡
* 為解決 cache 有可能資料過舊的問題
* 加入 TTL -> 存活時間
* 要求 lns 重新要求新的 cache
* DNS records
* resoruce records -> RR 資源紀錄
* name
* value
* type
* TTL
* type = A
* name = hostname
* value = IP address
* type = NS
* name 為網域名稱
* value 為 authoritative name 名稱
* 不會單獨存在
* 會和 type = A 一起存在
* 放在 TLD 裡面
* type = CNAME
* name 為別名
* value 為別名
* 不會單獨存在
* 會和 type = A 一起存在
* type = MX
* value 為 mail server 的名稱
* 不會單獨存在
* 會和 type = A 一起存在
* DNS messages
* 
* 不管是 query reply 訊息格式都是一樣的
* 在DNS中新增紀錄
CH2-5 P2P
===
## P2P 架構
* 點對點式架構
* server不需一直在線上
## File distribution time

* Client-Server 主從式
* $d_{cs} = max \left \{ NF/u_s, F/min(d_i) \right \}$
* P2P 點對點
* $d_{p2p} = max \left \{ F/u_s, F/min(d_i) , NF/(u_s + \sum u_i) \right \}$
* BitTorrent 位元洪流
* 為了解決有人關機後,資源就無法再上傳的問題
* requesting chunk
* sending chunk 資料片段 -> rarest first 稀有優先
* Tit-for-Tat -> 獎勵頻寬留很多的人
CH2-6 Video Streming & CDN
===
## Video
* 為了確保在網路頻寬使用越來越大
* 影片的流暢度不受影響
* spatial coding 空間編碼
* 一張影片有一樣的地方時
* 可以只記錄那個地方來壓縮
* temporal coding 時間編碼
* 當有兩張差不多的影片時
* 只傳送第兩張有變更的部分
* DASH over HTTP 基於超文字協定的動態自適應流
* manifest file 清單文件
* 在server端 ->
* 將影片分成多個 chunks
* 用不同的 rate encode 來儲存chunks
* 跟據 menifest file 給不同的 URLs
* 在client端 ->
* 週期性的確認 server-client 的頻寬為多少
* 生成 menifest file
* 決定什麼時候開始影片片段下載
* 決定下載的是什麼畫值的版本
* 決定要去那裡去下載影片的片段
## CDN Content distribution networks
* 內容傳遞網路
* 利用最接近 user 的 server,更快更可靠的把影片傳送給 user
* 可以解決日漸增加的頻寬使用量
* 使用 DNS 實作 -> 可以找到離 user 最近的 server 及 使用的線路
* enter deep
* 影片內容server 離clinet端越近越好
* bring home
* 把設備放在接近 POP 的地方,離client比較遠,但存放的影片比較多
CH3-1
===
## 傳輸層 Transport-layer 的服務
* 提供提供不同主機上 application 之間的邏輯通訊 logical communication
* send side 傳送端
* 將應用程式的訊息分割成資料區段 (segments)+傳輸層標頭、傳送到網路層
* rcv side 接受端
* 接收端: 將 segments 重組成訊息、傳給應用層
## 傳輸層 v.s. 網路層
* 網路層
* ==主機 host== 之間的邏輯通訊 (logical communication)
* 傳輸層
* ==行程 process== 之間的邏輯通訊 (logical communication)
> [name=jojo的奇妙比喻][color=#ffcc00]
> 12 個小孩傳送信件給12個小孩
>
> 行程 $\rightarrow$ 小孩
> 應用程式訊息 $\rightarrow$ 信封中的信
> 主機 $\rightarrow$ 房子
> 傳輸協定 $\rightarrow$ Ann 以及 Bill (?
> 網路層協定 $\rightarrow$ 郵政服務
## 網際網路傳輸層協定
* TCP (Transmission Control Protocol 傳輸控制協定)
* UDP (User Datagram Protocol 使用者資料封包協定)
CH3-2 Multiplexing & demultiplexing
===
* 多工 & 解多工的目的
* 將網路層所提供的 host-to-host 延伸為讓主機上所執行的**應用程式**
* 提供 process-to-process 的傳送服務
##
* 傳送端主機的多工
* 收集多個socket的資料、用 transport header 標頭 將每個資料片段封裝成資料分段(segment)
* 接收端主機的解多工
* 將收到的資料分段 (segment)傳送給正確的socket

> [name=jojo的奇妙比喻][color=#ffcc00]
> 解多工(demultiplexing)操作
> 當Bill從郵差收到一批信件時
> 分出信的收件人是誰,然後將信交給收件人
>
> 多工(multiplexing)操作
> 當Ann從兄弟姊妹處收集完信件
> 並將信件交給郵差
## 解多工
* 流程
1. 當segments到達該主機時
2. 傳輸層會檢查該區段中的目的端port number
3. 並將該區段傳給相對應的 socket
4. 該區對的資料會透過該 socket 傳給相對應的process
* 主機的每個socket都可以指定一個port number
### 無連線 UDP 解多工
* 以==埠號==產生 UDP socket
* 以兩組資料識別 UDP socket
* 目的 IP 位址
* 目的埠號
* 當主機收到 UDP segments時
* 確認資料分段中的來源端埠號
* 以此埠號將UDP資料分段傳送到socket
### 連線導向TCP的解多工
* 以四組資料識別
* 來源端 IP 位址
* 來源端埠號
* 目的端 IP 位址
* 目的端埠號
CH3-3 無連線傳輸 -> UDP
===
* 無連線傳輸
* 在 UDP 傳送端和接收單之間沒有==交握程序==
* 每一個 UDP 資料分段的處理和其它資料分段是==獨立==的
* UDP 的功能
* streaming multimedia apps
* DNS
* SNMP
* checksum
* 把資料分段內容的兩段互做==加法==
* 當數字加總時,最高位元的進位必須被加回結果中
* 把結果換成 ==1 的補數==

CH3-4 reliable data transfer 原則
===
## 可靠的資料傳輸

* rdt -> 可靠的資料傳輸
* udt -> 不可靠的資料傳輸
---
* 一共有兩種狀態 -> send side, receive side
* 傳送端
* rdt_send()
* utd_send()
* 接收端
* rdt_rcv()
* delever_data()
* 中間經過了一道不可靠的通道
* 我們為了要解決封包完整的問題
* 提出了以下機種解決辨法
## rdt 1.0
* 假設不可靠通道是
* ==沒有位元錯誤==
* ==沒有資料遺失==
* 傳送端、接收端分別只做
* rdt的傳送端
* 從上層接收資料
* 建立包含該資料的封包(透過 packet = make_pkt(data))
* 並將該封包送入通道中 udt_send(packet)
* rdt的接收端
* 透過 rdt_rcv(packet) 事件接收來自下層通道的封包
* 透過 extract(packet, data) 的動作從封包中取出資料
* 將資料往上交給上層 (透過 deliver_data(data))
* 簡單來說傳送方和接收方只要能正確接收資料就可以了
* 因為發過來的資料保證一定是正確的
## rdt 2.0
* 假設不可靠通道是
* ==有位元錯誤==
* ==沒有資料遺失==
* 為了解決位元錯誤的問題,加入了
* 偵測位元錯誤的檢查和 (checksum)
* 接收端回覆 (ACK、NAK)
---
* 如果位元沒有發生錯誤
* 接收端會回傳 ACK
* 如果位元發生錯誤
* 接收端會回傳 NAK
* 傳送端收到 NAK 後重傳封包
---
* 以上做法叫做 ==stop and wait==
* 傳送端傳送一個封包、並等待接收端的回應
---
* rdt 2.0 有個大問題
* 如果今天連 ACK NAK 都有問題怎麼辨?
* 傳送端不知道接收端發生了什麼事
* 傳送端也沒辦法直接重傳
* 可能會產生**重複封包**的現象
## rdt 2.1
* 解決 ACK/NAK 錯誤的問題
---
* 假如 ACK/NAK損壞了、傳送端會重新傳送目前的封包
* 傳送端會在每個封包加上序號 -> 0 or 1 一位元就可以
* 接收端刪掉重複的封包
---
* 傳送端
* 在封包加入序號
* 兩個序號 (0、1) 就足夠了
* 先前傳送過的封包
* 新傳送的封包
> 接收方如果收到0
> 就知道這次不是新的報文段
> 可能是上次ack出錯了
> 傳送方無法確認就重傳了上次的報文段
> 所以接收方需要丟掉這個報文段
> 然後再次傳一次ack確認訊號
>
> 如果收到的是序號為1的報文段
> 則接收方直接接受就可以了。
* 檢查收到的 ACK/NAK 是否損毀
* 兩倍數量的狀態
* 狀態必須「記得」「目前的」封包序號為 0 或是 1
* 接收端
* 必須確認接收端封包是否重複
* 如果序號重複 -> 代表 ACK/NAK 有誤 -> 接收端重傳 ACK/NAK
* 如果序號不同 -> 接收方接收
* 接收端無法得知最後一個 ACK/NAK 是否在傳送端被接收無誤
## rdt 2.2
* 其實我們不太需要 ACK/NAK
* 把兩個統一變成 ACK ==加序號==
* 與 rdt 2.1 同樣的功能、但只使用ACK
---
* 利用 ACK, 0 及 ACK, 1
* 來分別表達接收端的回應
## rdt 3.0
* 假設不可靠通道是
* ==有位元錯誤==
* ==有資料遺失==
* 為了資料遺失錯誤的問題,加入了
* 倒數計時器 (countdown timer) -> 超過指定的時間後,將對傳送端發出中斷
---
* 會有以下四種狀況
* 沒有發生資料遺失

* 封包遺失

* 遺失ACK

* 過早發生逾時

---
* rdt 3.0 解決了大部份的問題
* 但是因為它是使用 ==stop and wait== -> 效能很糟!

* 改採用 ==管線化 (pipelining)== -> 改採允許同時送出多個封包,不需要等待確認
## Pipelined protocols 管線化
* 可以一次傳多個封包

### Sliding-window protocol 滑動視窗協定
### Go-Back-N GBN協定

* base: 最久未被確認的封包的序列號碼
* nextseqnum: 最小未被使用到的序列號碼
* 傳送端
* 來自上層的呼叫
* 當收到上層呼叫 rdt_send() 時
* 傳送端會檢查 window 是否已經滿了?
* ACK的接收
* 累積式確認 (cumulative acknowledgement)
* 確認小於或等於序號 n 的所有封包
* 逾時事件 (timeout event)
* 傳送端會重新傳送所有先前已經傳送但尚未收到確認的封包
* 接收端
* 只為==接收順序正確==的封包傳送ACK
* 一次傳送一個封包給上層
* 可能會產生重複的ACK (因為捨棄掉未按順序到來的封包序號)
* 只需要記住 ==expectedseqnum== (下一個封包的序列號碼)
* 順序不正確的封包

> 傳送端:
>> 收到連續的ACK之後
>> Window會往前滑動
>> 傳送端可以繼續傳送新的封包
> 接收端:
>> 因封包2遺失了
>> 所以已接收的封包 3, 4, 5都丟棄掉
### 選擇性重複 (SR)
* 改善 GBN 的問題:
* 單一封包錯誤將可能導致 GBN 重新傳送大量的封包
* 但大部分不須重新傳送
* SR 的改善方法:
* 傳送端只重新傳送未正確收到的封包

* 傳送端
* ACK
* 將封包 n 標示為已收到的
* 假如 n 為未確認的封包中最小的封包時,將視窗的base 往前移到下一個未回應ACK的序號
* 接收端
* 傳送 ACK(n)
* 不正確的順序: 暫存區
* 正確順序: deliver 將視窗前進到下一個未接收的封包

> Window size = 4 個封包
> 傳送端會送出序號0到3的封包
> 每個封包都有其邏輯的計時器
* 參考資料
* https://www.itread01.com/p/14788.html
CH3-5 連線導向傳輸 -> TCP
===
## TCP 特色
* point-to-point 點對點
* 一個傳送端、 一個接收端
* reliable 可靠的
* pipelined 管線化
* full duplex data 全雙工資料傳輸
* connection-oriented 連線導向
* flow controlled 流量控制
### 分段結構
CH4-1
===
### 名詞解釋
* Forwarding 轉送
* 封包從 路由器的輸入 → 路由器的輸出
* Routing 路由
* 決定封包從 來源端 → 目的端 的路由
### 網路層
* Data plane 資料層
* 轉送功能,每個路由器收到封包後,決定該封包要往哪個路由輸出端口送出
* Control plane 控制層
* 路由功能,決定一個封包要從 一個端點 傳送到 另一個端點 的路徑
CH4-2
===
* Destination-based forwarding
* Generalized forwarding -> 可以跟據封包的內容來決定 forwarding
* Longest prefix matching 最長前綴匹配
* 找到子網掩碼長度最長的封包
* 路由表中,與目的地址的高位匹配得最多的表項。
* Switching Fabric
* memory 透過記憶體的頻寬傳輸
* bus 直接互連
* crossbar 棋盤式交換器
* Head-of-the-Line 佇列前端攔阻
* 佇列中的封包必須等待,因為它被位於佇列前端的其它封包所攔阻。
* HOL阻攔發生,佇列長度便會不停增長,而發生封包遺失。
* output ports -> router 結構與上一個相反
* buffering
* 雍塞會發生在 buffe queueing
* scheduling discipline
* 每一個封包的重要性都不同
* 把最重要的封包得到最好的效能 -> gets best performance
* network neutrality
* buffer 倒底要多大
$$
RTT C
$$
* scheduling mechanisms
* 排程
* FIFO
* discard policy ->
* tail drop -> 滿了後誰來,誰就 drop
* priority -> buffer 快滿後,只 drop 優先權最低的封包
* random -> buffer 快滿後,隨機 drop 封包,有可能 drop 到大封包(cwnd 一次傳超多)
* priority scheduling
* 給每一個封包一個優先權
* 高優先權的封包先送
* 怎麼判斷優先權? -> 看 header info
* Round Robin (RR)
* 輪流看兩個 queue (高、慢)
* 也輪流傳送封包
* Weighted Fair Queuing (WFQ)
* 每一個封包分配到的頻寬都不一樣
* 改善 RR 的每一個封包的頻寬都一樣
CH4-3
===
MTU max transfer size
CH4-4
===
* subnet 子網
* 沒有經過路由器算一個subnet
* IP address
* subnet part
* 不需要經過路由器
* host part
* CIDR -> Classless InterDoman Routing 無類別域間路由
* 是一個用於給用戶分配IP位址以及在互聯網上有效地路由IP封包的對IP位址進行歸類的方法。
* DHCP -> Dynamic Host Configuration Protocol 動態主機設定協定
* 幫忙把 網址 轉成 IP 地址
* 不能跨網段
* DHCP Discover : 客戶端發出**廣播**要求IP ( 0.0.0.0 -> 255.255.255.255 )
* DHCP Offer : _多個_ DHCP 伺服器收到,回應未租約 IP
* DHCP Request : 客戶端收到多個IP,再度廣播自己選擇了哪一個IP
* DHCK Ack : _被選的_ DHCP 伺服器回應,確認此IP租約。
* Hierarchical addressing
* 在 CIDR 架構下
* 減少 router 廣播路徑的數量
* NAT
* replace -> 將送出去的封包 ip 換成
* remember -> 把新 ip 和 舊 ip 的對應表記起來
* replace ->
CH4-5 IPv6
===
* 不夠啦
* 與 IPv4 不相容
* header 協定內容
* priority -> 新增了優先順序
* header length 固定為 40 bytes
* TTL 改成 -> hop limit
* next header -> 放 option
* 沒有 checksum
* tunneling
* 通過 IPv4 的 router 來傳送封包
CH4-6
===
### Generalized Forwarding
### SDN
* 新型網路架構
* 利用 OpenFlow 協定將路由器的控制平面(control plane)從資料平面(data plane)中分離
* 改以軟體方式實作
* OpenFlow
*
Quiz Answer
===
### 第六次小考題目
**What are the header fields to identify a UDP socket and a TCP socket?**
UDP : destination IP、destination port
TCP : source IP、source port 、destination IP、destination port
>UDP:目的端IP、目的端埠號
TCP:來源端IP、來源端埠號、目的端IP、目的端埠號
>[name=前院長的中文時間][color=#f34344]
**Please describe the mechanism of packet error detection using checksum.**
傳送端傳送checksum 給接收端之後,接收端再經由計算所收到的segment做checksum,如果兩者相同則沒有錯誤,反之則有。
>傳送端傳送檢查和給接收端之後,接收端再經由計算所收到的區段做檢查和,如果兩者相同則沒有錯誤,反之則有。
>[name=前院長的中文時間][color=#f34344]
**Please calculate the checksum of the following two 16-bit binary integers:
1110011001100110 & 1101010101010101.**
```
1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0
1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
= 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1
+1
= 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0
checksum 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
```
**Please list the network applications of UDP.**
Streaming multimedia app ( loss tolerant , rate sensitive )
DNS
SNMP
>串流媒體應用程式
>域名系統
>簡單網路管理協定
>[name=前院長的中文時間][color=#f34344]
### 第七次小考題目
**Please describe all necessary mechanisms to recover the packets with bit errors.**
接收端收到封包,用checksum檢查bit error(位元錯誤),
若正確:回傳ACK,發送端送下一個封包
若錯誤:回傳NAK,發送端重送封包
ACK、NAK若有bit error,則直接重傳
**Please explain why one-bit sequence number is enough for a stop-and-wait protocol.**
假設傳送端傳送出0的封包,則接收端收到此封包後只需回送序列號 1,表示下一個要接收的封包,也就是不同的封包。
而識別連續的封包是否相同,只需要0、1即可。
**What is the function of sequence numbers in feedback segments?**
sequence number it uses to keep track of how much data it has sent.
>序列號用於追蹤已傳送的資料大小。
>[name=前院長的中文時間][color=#f34344]
**Please describe all necessary mechanisms to recover packet loss.**
發送端送出封包時會設定countdown timer,timeout發生直接重傳。
>傳送端送出封包時會設定倒數計時器,若發生逾時直接重傳。
>[name=前院長的中文時間][color=#f34344]
**The performance of the stop-and-wait protocol is poor and can be improved by a pipelining protocol. Please describe the idea of the pipelining protocol.**
允許傳送端同時傳送多個未確認封包。
### 第八次小考題目
**Please describe the difference between Go-Back-N and Selective Repeat for packet retransmission, receiver window size, and number of timers**
Go-Back-N:重送所有未經確認的封包,buffer size = 1,只有一個timer,綁定在最早送出且未經確認的封包,即base。
Selective Repeat:只重送遺失或損毀的封包,buffer size = sender’s buffer size,每一個封包都有綁timer。
>回溯 N:重送所有未經確認的封包,接收端暫存大小 = 1,只有一個計時器,綁定在最早送出且未經確認的封包。
>選擇性重複:只重送遺失或損毀的封包,接收端暫存大小 = 傳送端暫存大小,每一個封包都有綁計時器。
>[name=前院長的中文時間][color=#f34344]
**How many sequence numbers are required for selective repeat? (window size=W)**
2W
**Please describe the problems caused by improper timeout values.**
timeout values設定太大時,當檔案遺失真的發生,會花較久的時間修復。
若設定太小,容易使延遲被判斷為timeout,而有許多不必要之重傳。
>逾時數值設定太大時,當檔案遺失真的發生,會花較久的時間修復。
若設定太小,容易使延遲被判斷為逾時,而有許多不必要之重傳。
>[name=前院長的中文時間][color=#f34344]
**Please introduce the basic idea of calculating TCP timeout value.**
EstimatedRTT = (1-α)*EstimatedRTT + α*SampleRTT
α=0.125
DevRTT = (1-β)*DevRTT + β*|SampleRTT-EstimatedRTT|
β=0.25
TimeoutInterval = EstimatedRTT + 4*DevRTT
**Please describe the procedure of TCP delayed ACK in TCP receivers.**
Wait up to 500ms for next segment. If no next segment, send ACK
>於下個區段前等待500ms,若未收到新的區段,重傳ACK。
>[name=前院長的中文時間][color=#f34344]
**Please describe the idea of TCP Fast Retransmit.**
如果接收了三個連續ACK,則重傳,不用等timeout
>當接收到 3 個 重複的 ACK,則立即重送該區段,而非等到重送計時器逾時。
>[name=前院長的中文時間][color=#f34344]
### 第九次小考題目
**TCP flow control can avoid receiver buffer overflows. Please describe its procedure.**
利用rwnd (reciever window size) 如果rwnd=0代表buffer full
>偵測接收端窗格大小,若其為 0,代表暫存已滿。
>[name=前院長的中文時間][color=#f34344]
**TCP uses three-way handshake for connection setup. Why is two-way handshake not used?**
因為two way在packet loss 和delay 時會造成另一端以為建立新連線,導致一端終止一端開啟的情況。
>因為雙向交握在封包延遲或遺失時,會造成另一端以為建立新連線,導致一端終止一端開啟的情況。
>[name=前院長的中文時間][color=#f34344]
**Please describe the four-way handshake of closing a TCP connection.**
FINbit=1, seq=x
ACKbit=1; ACKnum=x+1
FINbit=1, seq=y
ACKbit=1; ACKnum=y+1

**Please describe how TCP slowstart phase adjusts CWND value.**
初始CWND=1MSS,之後都將CWND加倍, done by incrementing cwnd for every ACK received
>初始CWND(壅塞視窗)為1MSS,接著在每次收到ACK時將CWND加倍。
>[name=前院長的中文時間][color=#f34344]
**Please describe the idea of AIMD (additive increase; multiplicative decrease)in TCP for adjusting CWND.**
若有正確收到封包,CWND在每個 RTT 的時間內都呈線性成長,即CWND = CWND + 1MSS。
若有封包遺失疑慮,將CWND調整成一半。
### 第十次小考題目
**Please describe the functions of data plane and control plane in each router.**
Data plane:接收封包後 決定要去哪個output port
Control plane:決定封包在端點間的移動路徑
>資料層:接收封包後決定要去哪個輸出端口。
控制層:決定封包在端點間的移動路徑。
>[name=前院長的中文時間][color=#f34344]
**Please describe the problem of Head-of-the-line (HOL) blocking.**
quening delay and loss due to buffer overflow
>因為暫存溢出而導致封包佇列延遲或遺失。
>[name=前院長的中文時間][color=#f34344]
**Please explain longest prefix matching.**
find the longest matching entry in the table and forwards the packet to link associated with longest prefix number
>找到子網掩碼長度最長的封包-路由表中,與目的地址的高位匹配得最多的表項。
>[name=前院長的中文時間][color=#f34344]
>子網掩碼 = 子網路遮罩
>[name=]
**Please describe three types of switching fabrics.**
memory : packet copied to system's memory
bus : datagram from input port memory to output port memory via a shared bus
crossbar : banyan networks, crossbar, other interconnection nets initially developed to connect processors in multiprocessor
>記憶體:直接將封包複製到適當輸出埠記憶體中。
匯流排:透過共用匯流排直接將封包傳輸到輸出埠。
棋盤式交換器:封包會沿著連接到該輸入埠的水平匯流排移動,前往其目標輸出埠的垂直匯流排。
>[name=前院長的中文時間][color=#f34344]
**Please describe the purpose of input-port queueing.**
如果交換機構有 input port 封包,被攔截的封包放入quene中等待
>
### 第十一次小考題目
**Please describe the reasoning of IP fragmentation and the related header fields.**
因為在network裡有HTU限制
Id : 辨別是否屬於同一封包
Flags : 是否最後的fragment
Fragments offset : 記錄該區段屬於原始的哪段資源
>因為每個網路連結有最大傳輸單位(MTU)限制封包長度
>ID:識別碼,判斷各區段是否為同一封包。
>Flags:封包切割旗標,判斷本封包可否切割、本區段是否為末尾。
>Fragments offset:區段位移,判斷區段屬於原始封包的哪一段資料。
>[name=前院長的中文時間][color=#f34344]
**Please describe the functions of Time to Live and Upper Layer fields in IPv4 header.**
(1) Time to Live:表示一個封包的存活時間,當資料每經過一個路由器時都會減一,當TTL歸零時則丟棄此封包,並回送ICMP Exceeded message 給發送端。
(2) Upper Layer(Protocol):定義在data portion中IP datagram使用的協議
>(1) 存活時間:表示一個封包的存活時間,當資料每經過一個路由器時都會減一,當TTL歸零時則丟棄此封包(並回送溢時傳輸給傳送端)。
>
>(2) 上層協定:記錄封包在傳輸層所使用的網路協定為何。
>[name=前院長的中文時間][color=#f34344]
**What is CIDR?**
一個運用VLSM(variable-length subnet masking)分配IP位址以及在網路上有效路由IP封包的方法。
>CIDR 無類別域間路由
>VLSM 變動長度子網路遮罩
>[name=前院長的中文時間][color=#f34344]
**Please describe several scheduling mechanisms for output ports of a router.**
- tail drop: drop arriving packet
- priority: drop/remove on priority basis
- random: drop/remove randomly
>去尾:丟棄到達封包。
>優先度:根據優先偏好丟棄封包。
>隨機:隨機丟棄封包。
>[name=前院長的中文時間][color=#f34344]
**Each IP address is comprised of two parts. Please name them.**
- subnet part - high order bits
- host part - low order bits
>子網部分:高位元
>主機部分:低位元
>[name=前院長的中文時間][color=#f34344]
### 第十二次小考題目
**NAT modifies the headers of both outgoing and incoming packets. Please list
these headers.**
Outgoing:來源端地址
Incoming:目的端地址
**Please describe the information stored in a NAT translation table.**
WAN address 與LAN address 的mapping
>廣域網地址對應區域網地址。
>[name=前院長的中文時間][color=#f34344]
**Please list the benefits and drawbacks of using NATs.**
- range of addresses not needed from ISP: just one IP address for all devices
- can change addresses of devices in local network without notifying outside world
- can change ISP without changing addresses of devices in local network
- devices inside local net not explicitly addressable, visible by outside world
>優點:
>1. 所有設備只需一個IP地址
>2. 可以在不通知外界的情況下更改本地網絡中設備的地址
>3. 可以在不更改本地網絡中設備地址的情況下更改ISP
>4. 本地網內的設備無法明確尋址,外界不可見
>
>缺點:
>1. 增加路徑轉換的延遲
>2. 失去對IP來源的可追溯性
>3. 導致某些應用程式的通訊失敗
>
>挑幾點寫應該就夠了……建議是只記第一和最後
>[name=前院長的中文時間][color=#f34344]
**Please describe the idea of route aggregation**.
Route aggregation(路由匯總)的主要想法便是要將多筆路由資訊匯總成比較簡單的單筆路由資訊。
**Why must routers perform longest prefix matching to ensure the correctness of packet routing?**
使用這個法則才能正確回復新的ISP而不會回復到舊的
##### From 李平一
Reference
===
- 宅學習:https://sls.weco.net/CollectiveNote20/Network
- NotFalse 技術客:https://notfalse.net/category/tcp-ip
- Oblivion:http://pollucite.blog126.fc2.com/blog-category-9.html
- IP 實驗:http://opencourse.ndhu.edu.tw/pluginfile.php/806/mod_resource/content/0/course_files/Exp3_IP.pdf