# Network Note
## 基本觀念
網路構成的三要素:
1. 傳輸媒體
2. 通訊協定 - 讓電腦間可以快速溝通的協定標準
3. 網路服務
網路分類:
* 依涵蓋範圍
PAN -> HAN -> LAN (Ethernet, Wi-Fi) -> MAN -> WAN
* 依架構分類
* Client-Server
* Client-based(Peer to peer)
網路拓墣:
* Star - 無線網路中的基地台(Access Point, AP)
* Bus - Ethernet used it, and it used broadcast to compete resources
* Mesh - reliability
* Ring - 大家輪流取得Token
參考模型
1. OSI 7 layers
* **Application**: 應用軟體(eg. E-mail, web browser)間的通訊,各種協定
* Presentation: 定義資料傳輸的語義、語法、資料格式
* Session: 不同機器上雙方通訊的建立、維持、終止
* **Transport**: 控制資料傳輸,End-to-end連線,Flow control, Congestion control, Error control
* **Network**: Packet routing, IP Address, Flow control, Congestion control
* **Data link**: Framing, MAC Address, Flow control, Error control
* **Physical**: 傳輸原始位元資料,定義實際連線
2. TCP/IP 5 layers
* Application
* Transport
* Network
* Data link
* Physical
多工(Multiplexing)
同一時間同一通訊頻段,多人共享且彼此不受影響
* TDMA: 使用完整頻寬,使用時間較少
* FDMA: 使用完整時間,使用頻寬較少
* CDMA: 完整時間,完整頻寬
* SM: 動態分配頻寬
交換機制
* Circuit Switching: 事先建立連線,資料依序抵達
* Message Switching: 不需事先建立連線,資料大小不固定,不保證依序抵達
* Packet Switching: 不需事先建立連線,資料大小固定,不保證依序抵達
## Physical Layer
**傳輸原始位元資料,定義實際連線**
### 展頻方法
1. FHSS: 將頻道切分成數個小頻道,傳送端在頻道間跳躍,接收方依照順序去頻道接收訊息
2. DSSS: 將原始訊號分散於寬頻段
3. OFDM: 利用數個具有正交性的載波同時傳送,提高資料傳輸率
優點:
1. 提供通訊保密
2. 對抗同頻干擾
3. 同一頻段多人共享
### 名詞
1. 調變:數位 -> 類比
2. ADSL (Asymmetric Digital Subscriber Line): download bandwidth > upload bandwidth (using FDMA)
### 實體層設備
1. Repeater
2. Hub
3. MODEM
## Data link layer
**控制資料傳輸,傳送端將資料切分成訊框(Frame),給予MAC Address,Flow control, Error control**
### 訊框化(Framing)
1. 字元計數:利用Header描述每個Frame的字元數
2. 字元填塞:利用flag表示開頭和結束
3. 位元填塞:Zero insertion (insert 1 when there are consecutive five 0s)
### 錯誤偵測&修正
* Error Detection Code
* CRC
* Parity check
* Error Correction Code
* Hamming code
### 錯誤控制
ARQ (Automated Repeat reQuest)
* Stop & Wait
* Go back N
* Selective Repeat
### 競爭多重存取 (Contention-Based Multiple Access Protocol)
| | CSMA/CD | CSMA/CA |
| -------- | ------- | ------- |
| | 先聽後送(LBT) | 先聽後送(LBT)
| Idle | 直接送 | 等IFS, 再聽,沒人才送 |
| Busy | 等到Idle, 再聽,沒人才送 | 等到Idle, 等IFS, 等Random time, 再聽,沒人才送 |
| 應用環境 | 有線網路 | 無線網路 |
* CSMA/CA
利用RTS(Request to Send)/CTS(Clear to Send)解決了
1. Hidden terminal
2. Exposed terminal
* NAV(Network Allocation Vector)
夾帶在RTS/CTS中,紀錄花多久傳送完Data,其他電腦可以透過此知道頻道是否busy
### Data link 設備
1. Bridge
2. layer2 switch
3. NAS
## Network layer
**決定Packet routing, 給予IP Address, 提供QoS, Flow control, Congestion control**
### 服務型態
* 連結導向:利用上層TCP提供穩定正確的傳輸
* 非連結導向:利用上層UDP提供快速,即時,可容許錯誤的傳輸
### 網際網路協定 (Internet Protocol, IP)
電腦可以透過IP協定找到對方的位址並相連,網路上的裝置皆有unique IP Address
**IP Address**
全長32bits (8*4)
* class A: 0 .x.x.x / private IP: 10.x.x.x (10是十進制)
* class B: 10 .x.x.x / private IP: 172.10.x.x~172.31.x.x
* class C: 110 .x.x.x / private IP: 192.168.x.x
* class D: 1110 .x.x.x
**Network Number**
* all 0: default router
* 127.0.0.0: loopback
* 127.0.0.1: host itself
**網路遮罩**
Network number決定主機所在位址,所以router在傳送封包前會先用網路遮罩過濾出網路號碼,再決定封包如何轉送
### Related protocol
1. NAT (Network Address Translation): 私有ip <-> 公有ip,去程目的地相同,回程來源相同
2. ARP (Address Resolution Protocol): 用IP Address詢問MAC Address
3. RARP (Reverse ARP)
4. ICMP (Internet Control Message Protocol): 網路間傳送網路狀況的資料格式
* ping
* traceroute
* nslookup
* ifconfig
### 網路層設備
* Router
* layer3 switch
* Gateway - 解決不同網路間的連接問題,亦即,可連接OSI 7層不同的網路架構
## Transport layer
**控制資料傳輸,End-to-End連線,Flow control, Congestion control, Error control**
### TCP (Transmission Control Protocol)
* TCP連結:以傳輸雙方的**串接號碼**來識別 (串接號碼 = IP Address + Port number)
* 三方交握
* Sender -> SYN = 1-> Receiver
* Receiver -> ACK = 1, SYN = 1 -> Sender
* Sender -> ACK = 1 -> Receiver
* Connection success
**Note**
port:
1. 使電腦內的programs可以和外界溝通
2. 便是從Internet來的Application
### Flow control & Congestion control
* Flow control - sliding window: 傳送方可傳的資料區塊=接受方可接收的資料區塊
* Congestion control - congestion window: 網路上可傳的資料量
Sender可傳的資料量 = min(sliding window, congestion window)
### UDP (User Datagram Protocol)
* Datagram: 封包交換網路中的最小傳輸資料單位
* 無連結導向,比TCP簡單(沒有連線要求、終止、Flow control)
## Application layer
**定義使用者與通訊軟體間的介面,包含各種協定,透過網路連結,達到與其他應用程式交換資料的目的**
* DNS (Domain Name System)
* HTTP (HyperText Transfer Protocol)
* Client端和Server端之間的資料通訊協定
* 採用request/respons
* 每個HTTP request都是stateless,也就是伺服器不用保留先前請求或連線,所以有了cookie&session
* 支援Proxy server - 從事網頁快取
**Note**
1. cookie: 微小的資料檔案,儲存在user端,可識別使用者資訊
2. session: 儲存在server端,會給client一個session id,就像識別證
* FTP (File Transfer Protocol)
* DHCP (Dynamic Host Configuration Protocol)
* RESTful API
* API: messenger between client and server, tell the system what u want to do, and then send u back the system's respond
* RESTful API
* Nouns 名詞:定義資源位置的 URL,每個資源在網路上都會有唯一的位置,就如每戶人家都有唯一的地址一樣。
* Verbs 動詞:對資源要做的動作。
* Content Types 資源呈現方式:API 資源可以以多種方式表現,最常用的是 JSON,較輕,也較好處理。