---
# System prepended metadata

title: Damn腦網路二周目

---

# Ch3
## UDP&TCP
![圖片](https://hackmd.io/_uploads/BJs4pkiN0.png)

![圖片](https://hackmd.io/_uploads/SycnkesN0.png)

![圖片](https://hackmd.io/_uploads/HkUklgsNR.png)

![圖片](https://hackmd.io/_uploads/Sk1ZgeiER.png)
## UDP introduction
![圖片](https://hackmd.io/_uploads/HyfrXeoE0.png)

![圖片](https://hackmd.io/_uploads/S1ip7eoNA.png)

![圖片](https://hackmd.io/_uploads/rkjPBesVA.png)
checksum 把上面兩數相加得到的sum然後取補數(1011 ,cs(0100))

## reliable transfer
- 要能錯誤偵測 要回應ACK 送端能重送 timeout避免封包時限內到不了

![圖片](https://hackmd.io/_uploads/ByKztboNR.png)
- Go-Back-N
    運作方式:收端給送端說某個封包之前都收到了(累計式的ACK, cumulative ACKs)(序號需要比window size大1)
    優點:收端處裡簡單 只取要取的那個其他通通丟掉 在package loss比較少的有限環境內是好東西
    缺點:假如在package loss比較多的環境裡會把一堆可能是正確的封包刪掉重送 浪費網路資源

![圖片](https://hackmd.io/_uploads/Sk5Ww4s4A.png)
 - Selective repeat
     運作方式:收端哪個沒收到 送端就把沒收到那個再送一次 (他會對每個封包設timer)(序號需要比送端和收端的window size加起來大window size\*2)
     優缺點和Go-Back-N相反

## TCP introduction
![圖片](https://hackmd.io/_uploads/BkiFcNiER.png)

![圖片](https://hackmd.io/_uploads/rkpd94sNC.png)
- TCP ACK:表示的是期待收到的下個序號 flow control:當收端時能收的數量

![圖片](https://hackmd.io/_uploads/H1G1gBsNC.png)
- 只針對最早送出還沒被ACK的封包設timer

![圖片](https://hackmd.io/_uploads/r13SmSiE0.png)
- 收到照順序最左邊那個先等一下不傳送ACK等待下一個 假如下一個也是最左邊收端正在等的那個就一起送ACK(TCP的ACK是累計式)
- 假如收到的不是照順序的就重送之前已經正確收到的那個ACK

![圖片](https://hackmd.io/_uploads/r1YUuBoVR.png)
![圖片](https://hackmd.io/_uploads/r1Mvdri4A.png)

![圖片](https://hackmd.io/_uploads/HycISBsER.png)
- 避免封包真的loss了等太久

![圖片](https://hackmd.io/_uploads/HJO4OSsVC.png)

![圖片](https://hackmd.io/_uploads/Skne5Ss4A.png)
- 解除自己送端的連線 by送FIN bit過去

## TCP congestion control
- congestion control 跟 flow control 差在fc是單一送端 cc是很多人同時要送

![圖片](https://hackmd.io/_uploads/Bk-n5LoVC.png)
- 在沒有發生package loss時一點一點試探 假如超過上限了趕快往下降嘗試消化(塗上縱軸為window大小(cwnd))

![圖片](https://hackmd.io/_uploads/S1xLC8jEA.png)
- TCP slow start 剛開始時每次double cwnd直到ssthresh 

![圖片](https://hackmd.io/_uploads/S1VVgwoE0.png)
- TCP CUBIC到最大降回去之後用指數方法讓前面增加快點後面增加慢點(優化)

![圖片](https://hackmd.io/_uploads/SJmmbvsER.png)
- 拿最小值當沒延遲的基準(RTTmin) 假如接近基準就再加cwnd 假如比基準低很多就減少cwnd 

- ECN可以直接跟你講哪裡有congestion
- TCP 在兩個人都是單一connection 時是公平的 但一人可以開很多connection 此時就不公平了

# Ch4 
![圖片](https://hackmd.io/_uploads/Sy2DzFiE0.png)

![圖片](https://hackmd.io/_uploads/HJu2GFsVC.png)
- Data plane:根據目的地地址查forwarding table找到該去的port(基本上就是forwarding)
- Control plane:找從source到destination的路徑(基本上就是routing)

- Head-of-The-Line(HOL)blocking: 在交換機裡要到同一個目的地而卡住 很容易發生

## IP
![圖片](https://hackmd.io/_uploads/HkD8zjjVR.png)

![圖片](https://hackmd.io/_uploads/r1G_QjiE0.png)
- length裡包含20bytes的header, fragflag代表同個ID還有沒有下一個, offset要看塞在多少後面 拿送出的bytes/8往後加(記得扣header的20) 

![圖片](https://hackmd.io/_uploads/S13hIii4C.png)

![圖片](https://hackmd.io/_uploads/SJS8tijNC.png)
- /x代表前x個bit是subnet的address

![圖片](https://hackmd.io/_uploads/Skn8jojEC.png)
![圖片](https://hackmd.io/_uploads/SJeInjjEC.png)
![圖片](https://hackmd.io/_uploads/B1g5jisN0.png)
- 自己看 推一下

- route aggregation: 讓routing策略實現的時候可以不用那麼複雜的機制(紀錄的轉送資訊的量減少, 只需要記前面幾個)

![圖片](https://hackmd.io/_uploads/B1v_H3jN0.png)

- tunneling: 把IPv6封裝成IPv4的封包(加一個v4的header)

![圖片](https://hackmd.io/_uploads/rkbuRhjVA.png)

- match plus action: 先找到對應的再做事

# Ch6

![圖片](https://hackmd.io/_uploads/S1TEwas4C.png)
![圖片](https://hackmd.io/_uploads/HyBrwpiNR.png)
- 無線通常是half duplex(不能同時收跟送 會干擾)

![圖片](https://hackmd.io/_uploads/HJvbh6sE0.png)
- 先補比G少一個bit的0 補完0之後的D除G 把餘數R加回D 接收端拿加完R的D用G再除一次能整除就代表收到的是對的

![圖片](https://hackmd.io/_uploads/B1K8gCsER.png)
- 假如只有一個人要用應該要能用到所有資源 M個人要用那應該大家均分 不需用中控端處理碰撞問題(完全分散式) 節點彼此不用同步 夠簡單

![圖片](https://hackmd.io/_uploads/HkX6-Ai4A.png)
- channel或時間切小塊大家各用一點 大家用搶的並用神奇的方法避免碰撞 大家輪流

- TDMA: 照時間切 有時間會沒有人在用 浪費掉 FDMA: 會有頻段沒人用 浪費

- Random access protocols: 主流 開搶

![圖片](https://hackmd.io/_uploads/rJAiI0sV0.png)
- Pure ALOHA: 想送就送 沒人管, 效果不太好
   
![圖片](https://hackmd.io/_uploads/SJPkIAoEC.png)
- Slotted ALOHA: 把時間分段 並設定每個frame都是同樣長度 撞到的case就會只剩下同時送出的情況
     缺點: 碰撞浪費時間 中間可能是空的浪費時間 可能沒同步好爛掉 時間都浪費在處理碰撞

- CSMA: 送之前先看看 假如有空間就送 沒有就等等, 還是有可能因為propagation delay而誤判造成碰撞
- CSMA/CD: 偵測到發生碰撞後會停止傳送封包 等隨機時間後再送 隨機時間從小範圍開始找 假如還是一直碰撞會把隨機值範圍逐漸變大(load較高時效率不好)
- Taking turns: polling master一個一個點 
    送個token 有token的可以講話(token可能不見 或受干擾之類的)
    缺點:假如沒有人要送還是會繼續點名(token還是會繼續跑)

