第一章
===
### TCP/IP五層架構
- 應用層 : 提供使用者多樣的網路服務 ex : HTTP、SMTP、FTP
- 傳輸層 : 決定資料的傳輸模式 ex : TCP -> 會確認封包是否遺失 UDP -> 只負責傳輸資料
- 網路層 : 決定packet傳輸的路徑,以及IP資訊
- 資料鏈結層 : 相鄰網路節點間傳輸資料的協定層,提供流量控制、錯誤檢測等功能
- 實體層 : 制定實體線路的規格、電壓、無線電波的頻率等
### Delay 種類
- processing delay : 確認封包的bit是否有誤、決定封包的output link
- queueing delay : packet在router中等待前面的packet傳送所花的時間
- transmission delay : router把packet放到link上所需的時間
- propagation delay : 實體線路傳輸封包所花的時間
### Packet Switching vs. Circuit Switching
| Packet Switching | Circuit Switching |
| -------- | -------- |
| 把資料切成一個個資料條(packet)做傳輸 | 建立一個專有通道,進行傳輸 |
| 使用共享的傳輸通道| 使用專有的傳輸通道 |
| 可同時使用人數多 |可同時使用人數少|
| 適合突發性的傳輸需求 | 適合不允許Loss的需求 |
### 專有名詞
- TDMA : 分時多工存取,使用不同的時間片讓多個使用者共用相同的頻率傳送封包
- FDMA : 分頻多重連接,使用不同的頻率讓多個使用者共用相同的時間傳送封包
- Statistical Multiplexing : 統計多工,跟TDM和FDM類似的多工方法之一,它根據使用者的需求分配頻寬
- NAT : 網路位址轉譯,改變封包傳送端或接收端的IP地址(私有IP轉真實IP),減少真實IP的使用量
- LAN : 區域型網路 ex : WiFI
- wide-area : 廣域網路 ex : 行動網路基地台
- IXP : 提供ISP和CDN之間的資料傳輸
- routing : 利用routing table決定封包傳送路徑
- forwarding : 將封包從路由器的input移至指定的output(路徑)輸出
- traceroute : 提供source到destination之間,各個Router的delay測量
### 小知識
- 無線網路的難點:
- 反射
- 被阻擋
- 相互干涉
第二章
===
### 通訊協定實際應用
- client-server : HTTP、DNS、FTP
- p2p : BitTorrent、VoIP(Skype)
- TCP : HTTP、FTP、SMTP
- UDP : DNS、VoIP
### 常用通訊協定Port
- HTTP:80
- FTP:20、21
- SMTP:25
- IMAP : 143
- POP3 : 110
- DHCP:client : 67、server : 68
### IMAP與POP3的差別
- IMAP : 會同步電腦和Server上的郵件
- POP3 : 會將Server上的郵件下載到本地,然後刪除Server裡的郵件
### DNS
- iterated query : DNS的所有查詢工作都交給Local DNS完成

- recursive query : DNS Server會透過委託的方式請其他DNS Server幫忙查詢,並等待回傳結果

### DNS resource records (RR)
- 格式 : (name, value, type, ttl)
- Type=A : name -> hostname,value -> IPv4 address ex : (office.newnet.com, 220.154.188.185, A)
- Type=AAAA : name -> hostname,value -> IPv6 address ex : (office.newnet.com, 6DAA:8B31:4DF5:D403:F972:7058:11C6:4BDA, AAAA)
- Type=CNAME : name -> alias name value -> canonical(the real) name ex : (www.ibm.com, servereast.backup2.ibm.com, CNAME)
- Type=MX : name -> hostname value -> mail server ex : (example.com, mail.example.com, MX)
### P2P


- BitTorrent每30秒會隨機挑選1個人加進top-four uploader名單裡,讓沒有貢獻的使用者也能下載到檔案,這種機制稱為optimistically unchoked
### CDN

1. Client端先跟Server端索取manifest file,manifest file裡會有關於CDN的資料
2. Client端會選擇最適合的CDN(距離近、延遲低)來請求檔案
### 專有名詞
- User Agent : 讓User可以編輯、讀取郵件,以及幫助User將要寄的郵件送到Mail Server
- DNS : 負責將域名轉換成相對應的IP地址
- TLD : 頂級網域名稱 ex : .com .org
- socket : process和transport protocal之間的接口
- cookie : 透過在client端存放資料來達成stateful的效果
### 小知識
- SMTP使用persistent connection
- RTT 除了transmission delay外都有包含
- FTP使用2個port來進行通訊,分別是data port(20)以及control port(21)或稱command port
第三章
===
- Transport Layer主要是探討process和process之間的傳輸
- 我們將Transport Layer的封包稱為segment
### Multiplexing/Demultiplexing
- multiplexing : 把不同process的封包匯集到同一條線路輸出
- demultiplexing : 根據線路中封包的資訊分送給不同的process,host是根據IP address和port number來決定demultiplexing的位址
- UDP Server只需要開1個socket進行通訊即可
- TCP Server由於會先建立連線,所以需要1個socket負責建立連線(welcome socket),以及根據使用者連線數量建立的connection socket
### Checksum
1. 先將所有的資料以16bit為一組累加幾來,如果有溢位就把溢位的bit加在最右邊
2. 對累加的結果sum做1補數,將結果保存在checksum欄位裡
3. receiver收到封包後先做累加,並比對累加後的結果是否跟checksum一致(比較bit值或判斷sum和checksum相加是否等於1)

### UDP header

### TCP header

- Data Offset:指出Data出現的位置,該位置前面就是header資訊
- URG:告訴系統此封包為緊急資料,要盡快接收
- ACK:Acknowledgment Number才有效
- PSH:host會把在buffer的資料直接往上送,不管buffer是否裝滿或順序正確
- RST:表示 TCP 連線中出現嚴重錯誤(對方的port不可用、socket提前關閉等),必須關閉連線
- Urgent Pointer:封包中的緊急資料的最後一個位元組的序號。
### Reliable Data Transfer (rdt)
- rdt2.0 : 使用ACK和NAK告訴sender封包是否有誤

- rdt2.1 : 利用編號的方式預防ACK或NAK封包有錯的情形


- rdt2.2 : 只用ACK表示封包是否有誤

- rdt3.0 : 增加對封包loss的情形,使用計時的方式解決

### Pipelined protocols
- Go-back-N:使用cumulative ack,只需維護一個timer

- Selective repeat:每個packet都有自己的計時器,並且需要buffer暫存未排序的封包。如果需要重傳資料只需傳沒有收到ACK的封包就好

Selective repeat的sequence size需要>=2 * window size,否則會出現封包無法辨識的問題

- TCP Pipelined:使用cumulative ack,但重傳只傳第一個遺失的封包
### TCP timer 計算方式


### TCP 特別功能
- fast retransmit:如果收到3個重複的ACK(也就是4個一樣的封包),就會直接重傳該封包
- flow control:receiver會告訴sender自己緩衝區的容量情況,以免sender把receiver的緩衝區灌爆!

- congestion control:TCP會根據當前網路的運作情況,調整windows的大小,以免網路塞車
- sender的window size是由flow control和congestion control的最低值決定
### TCP congestion control 階段
- slow start:MSS從1開始,每收到1個ACK MSS就+1(指數成長),直到到達threshold為止
- congestion avoidance:MSS以線性速度增加(收到全部的ACK才將MSS +1)
- 如果出現3 duplicate ACK,先將threshold設為cwnd / 2,然後分以下兩種版本
- Tahoe:cwnd設為1,然後回到slow start階段
- RENO:cwnd設為更新後的threshold + 3,然後回到congestion avoidance階段
- 如果出現超時,一律將threshold設為cwnd / 2、cwnd設為1,然後回到slow start階段
第四章
===
- network layer主要是探討router跟router之間的傳輸
- 我們將network layer的封包稱為datagram
### router兩大功能
- routing:利用一些演算法決定路徑,建立forwarding table (Data plane)
- forwarding:根據forwarding table將router的input移至對應的output (Control plane)


### Switching fabrics 類型
- memory:使用記憶體複製封包的方式執行forwarding,透過CPU指令操作
- bus:使用共享的匯流排做forwarding,會有爭搶資源的情形
- crossbar:建立多個share bus,減少爭搶資源的情況


### Scheduling mechanisms
- discard policy
- tail drop:最後來的先丟棄
- priority:根據優先權丟棄封包
- random:隨機丟棄封包
- priority scheduling
- 一般類型:先將優先權高的封包送完,再送優先權低的封包

- Round Robin (RR):輪流送封包 ex:先讓紅色送再換綠色送

- Weighted Fair Queuing (WFQ):Round Robin的改良版,有權重優先權的輪流送封包

### IP header

- Flage
- 第一位:保留位元,必須為0
- 第二位:don’t fragment
- 第三位:more fragment
- Fragment offset:每個fragment相對於原始封包開頭的偏移量,以8 Byte為單位。
### DHCP

### NAT

### IPv6 header

- next header:功能與IPv4的Protocol相同
- hop limit:功能與IPv4的TTL相同
### 專有名詞
- CIDR(Classless InterDomain Routing):無類別區間路由,IP address前面一部分長度代表subnet,長度大小隨意
### 小知識
- 我們要自己設定host的Router IP地址,或是DHCP在分配IP時也會傳遞IP資訊
- Router的output interface是由人設定的,所以router知道output路徑的router ip地址
第五章
===
通靈問題
===
(F) 
(F) 