# 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還是會繼續跑)