# 計算機網路筆記-ch6 ## Link-layer簡介 * nodes : hosts and routers * links : wired, wireless, LANs * packet : frame (將datagram 封裝, header用Mac address來識別) #### 比喻(先忽略) ### link layer 的服務 * framing(封裝datagram) * 存取共享的介質 * 兩個節點間做reliable delivery * flow control (傳遞與接收間作配速) * error detection (音訊號衰減與雜訊導致)(會進行重傳或drop掉) * error correction (不用透過重傳就能更正bit error) * 單向(half-duplex)或多項(full-duplex)傳輸 * 節點間可以互相傳遞,但無法同時 NIC : network interface card * link layer 實施在每個host的NIC或是chip(芯片) * 會連接在host的system bus(連接CPU與memory) ![](https://i.imgur.com/cO2kr3Q.png) ## Error detection EDC : error detection and correction bits D : 被error checking保護的data ![](https://i.imgur.com/VLsvAfj.png) Error detection not 100% reliable! * protocol可能會miss掉一些error, 但很少發生 * EDC欄位越大,detection跟correction就會越好 ### Parity checking ![](https://i.imgur.com/qbeU4ny.png) * 一維的bit parity只能detect * 二維的bit parity能detect並且correct ### Internet checksum * sender: * 會將UDP segment(包含header跟IP)分成一列一列(一列16-bit) * checksum : 將他們全部做相加,如有overflow會再將overflow與sum做相加,最後再取1補數作為checksum。 * receiver: * 計算收到的segment的checksum * 不相等 - error detected * 相等 - no error detected ### Cyclic Redundancy Check (CRC) * 比較強大的error-detecting coding 看不懂(有空再翻課本) ## Mutiple access links, protocol * point-to-point * Ethernet switch 跟 host 之間的 point-to-point link * ex : ppp(point to point protocol) * boardcast (共享線路或介質) * 多個傳送端&接收端連接到同一條broadcast link * ex : 乙太網路or無線網路 ### Multiple access protocol * single shared broadcast channel * 當兩個node以上同時傳輸會互相干擾 * 碰撞 : 當node同時收到兩個以上的訊號 * 分散式演算法決定node如何共用channel * ex : 決定甚麼時候node可以傳輸 * 協調channel如何共享也需要經由channel本身 #### 理想的multiple access protocol * 給定 rate 為 R bps 的 multiple access channel(MAC) * 當1個node想傳輸,可以用R bps傳輸 * 當M個node想傳輸,每個node平均可以用R/M的速率傳輸 * 完全去中心化 * 沒有一個特殊的node去協調傳輸 * 沒有同步的clock, slots * 簡單 ### MAC protocol * channel partitioning * 分割channel成小塊一點(time slots, 頻率, code) * 提供一塊給node供他獨自使用 * random access * channel不分割,允許碰撞 * 會將碰撞復原 * taking turn * node輪流使用,想傳很多資料的的node可以用比較久 ### channel partitioning MAC protocol #### TDMA : time division multiple access ![](https://i.imgur.com/tFNIeKx.png) * 輪流存取channel * 每輪每個node都有固定的封包傳遞時間,一次一個node傳輸 * 缺點 : 有些node未在他被輪到的時間使用,會有idle發生 #### FDMA : frequency division multiple access ![](https://i.imgur.com/MDa5gE8.png) * channel spectrum(頻譜)照頻率分割成一個一個的bands * 節點會個別被分配或指定固定的frequency band(有些效率比較好的band,需要花錢競標) * 缺點 : 有些node未時時刻刻都在傳遞,當沒傳遞時,會造成該band idle ### Random access protocols * 當有node想傳遞封包,會直接使用整個channel rate R去傳遞 * 不會事先溝通協調好 * 兩個以上的節點在傳輸 : 碰撞 * random access MAC protocol 規範了 * 如何 detect 碰撞 * 如何 recover from 碰撞 #### Slotted ALOHA ![](https://i.imgur.com/IzSyh5m.png) * 時間被分為相等大小的slots(一次傳一個frame的時間) * 當傳輸端有封包想傳送時,傳輸端會直接傳入channel * 接收端收到封包後,會ACK傳輸端 * 封包有錯誤的話,接收端會向傳輸端發送NACK * 當channel中有兩個以上傳輸點同時在傳輸封包,會發生衝突,所有的node都需特自等待一段隨機長度的時間後,再次嘗試傳送 它把頻道在時間上分段,每個傳輸點只能在一個分段的開始處進行傳送。每次傳送的數據必須少於或者等於一個頻道的一個時間分段。這樣大大的減少了傳輸頻道的衝突。 ##### 優點 * 恰好只有一個node在傳輸時,可以享有整個channel的rate * 高強度的去中心化(高分散性) * 簡單 ##### 缺點 * 當發生碰撞衝突的時候,會浪費那一個slot的時間 * 會發生idle * 需要clock同步 #### Pure ALOHA ![](https://upload.wikimedia.org/wikipedia/commons/thumb/3/35/Pure_ALOHA1.svg/1920px-Pure_ALOHA1.svg.png) * 簡單,不同步 * node一收到frame就傳出,slotted會在時間分段的開始處進行傳送 * 會發生很多次的衝突(所以才改成slotted) #### CSMA (carrier sense multiple access) ##### simple CSMA : * 傳遞前先觀察 * 如感應到channel是idle的 : 傳遞整個frame * 如感應到channel是busy的 : 暫時延緩傳輸(等待隨機的時間再傳) * 比喻 : 不打斷對方 ##### CSMA/CD * 有碰撞偵測 * 可以短時間內偵測碰撞衝突 * 發生碰撞衝突,馬上停止傳輸(因為一次傳整個frame,減少channel的浪費) * 在有線網路偵測容易,無線網路偵測難 * 比喻 : 有禮貌的人 ##### CSMA : collisions * 即使會先觀察,還是會有碰撞衝突發生 * 由於傳輸資料時會有propagation delay,假如有兩個同一時間欲傳出封包的node,他們會感應到對方正要傳輸(因為delay),這樣就會造成碰撞衝突。 * 由於一次傳遞都是送整個frame,發生碰撞後,會浪費傳遞的時間(由於沒有碰撞偵測) ##### CSMA/CD (CSMA with Collision Detection) * 有碰撞偵測 * 可以短時間內偵測傳輸中的碰撞 * 偵測到碰撞,馬上停止傳輸(因為node會一次傳整個frame,如能在發現碰撞後立即停止傳輸,可以減少channel的浪費) * 在有線網路偵測容易,無線網路偵測難 * 比喻 : 有禮貌的人 ##### CSMA/CD * 減少因為碰撞所發生的時間浪費 * 傳輸會因為偵測到碰撞而立即中止 * 演算法: 1. NIC收到網路層傳來的datagram,並將他封裝成frame 2. 觀察channel: * if idle : 開始傳遞frame * if busy : 等待到channel idle再傳 3. 假如NIC成功在沒發生碰撞的情況下傳遞完frame,就順利結束 4. 假如傳遞的途中發生碰撞,會直接中止傳送,並送出jam signal(用來強化碰撞,使其它裝置能儘快檢測到碰撞發生) 5. 中止以後,NIC會利用binary exponential backoff演算法計算一段隨機的等待時間,並等待那段隨機的等待時間後,會再回到第2步驟。 * binary exponential backoff * 如已經發生了m次碰撞,NIC會隨機選擇{0,1,2...,2^m^-1}的其中一數K,且等待K*512 bit times * 比ALOHA更簡單、便宜且分散 ![](https://i.imgur.com/7xcDcnA.png) ### Taking turns MAC protocols * channel partitioning MAC protocols: * (at high load)在node都要傳輸時,有效率且公平的共享channel * (at low load)在只有幾個node要傳輸時,會造成資源的浪費(每個node不會因為比較少人使用channel而可以使用更多的rate) * random access MAC protocols * (at low load)當node順利傳資料的時候(同時只有一個node在傳),可以享有整個channel的rate * (at high load)但在每個node都要傳時,碰撞衝突會一直發生(導致一直等待) * taking turn protocol * 尋找兩全其美的方法 #### polling 倫詢 ![](https://i.imgur.com/tN1B646.png) * master node 會輪流邀請其他bode傳送資料 * 用於啞巴deivce * 優點 : 避免隨機存取的碰撞和頻道分割的idle問題 * 問題 * polling overhead * 假如master掛掉了,整個網路就都掛掉了 #### token passing * 會藉由傳遞token,來決定誰可以傳遞資料 * 假如拿到token,就可以傳遞data,如沒資料要傳或是以傳送完畢,就會把token給下一個node * 有token message * 優點 : 分散且有效率 * 問題 * token overhead * 假如其中一個node掛了或是token壞了,就整個掛掉了 ### Cable access network : FDM, TDM and random access ![](https://i.imgur.com/Nxj40lG.png) * multiple downstream (broadcast) FDM channel * single access * 只有CMTS(Cable modem termination system)在這個channel傳輸 * multiple upstream channel * multiple access * 所有的user用random access競爭upstream channel * 其他也可能用TDM(?? * DOCSIS(Data Over Cable Service Interface Specifications) * (先略) ## LANs ### MAC addresses * 32-bit 的 IP address: * 給interface的網路層的位址 * 給網路層做forwarding * ex : 127.0.0.1 * 48-bit 的 MAC(or LAN, Physical, Ethernet) address * 使一個interface可以得到與他實體相連的interface給他的frame * ex : 1A-2F-BB-76-09-AD * 每個在LAN上的interface * 皆有 獨有的 48-bit MAC address * 皆有 <font color=red>locally unique</font> 的 IP address * MAC address的分配由IEEE管理 * 製造商會購買一部分的MAC address * 比喻: * MAC address : 像是身分證字號 * IP address : 像是郵寄地址 * MAC address有可攜性 * 可以隨意地攜帶到另一個LAN * IP address 不能攜帶,需要看當時interface連接到哪一個子網域 ### ARP : address resolution protocol * APR table : 所有在LAN裡的ndoe都有自己的table * 紀錄其他在LAN上的node的 IP address 與 MAC address * <IP address; MAC address; TTL> * TTL(Time ot live) : TTL會記錄過期的時間,當時間一到,就會將該IP與對應到的MAC address忘記(通常是20min) #### 例子(A想傳datagram到B,但沒有B的MAC address) ![](https://i.imgur.com/slT7y3G.png) 1. A會廣播ARP query * Target IP address : B的IP address * destination MAC address : FF-FF-FF-FF-FF-FF(廣播) * 所有的節點都會收到這個ARP query 2. B收到廣播後,會回傳ARP response給A * 回傳了自己的MAC address 3. A收到B的回覆後,會在將B的IP、MAC、TTL寫入A的APR table內 4. A就可以查表做傳輸了 ### Routing to another Subnet : addressing(詢址) #### A經由R傳送datagram給B ![](https://i.imgur.com/HsH0CCa.png) * A知道B的IP address * A知道first hop router R的IP address 跟MAC address 1. A建立IP datagrame(含來源端A的IP與目的地端B的IP) 2. A建立frame(含來源端A的MAC addr.與first hop router R的MAC addr.) 3. frame由A送到R,R將frame拆解成datagram,然後送到網路層 4. 藉由datagram的header資料,R判斷要由哪一個interface送出資料 5. 判斷完後,R建立frame(含R的MAC addr.與目的地端B的MAC addr.) 6. B收到後,拆解frame,將datagram丟到網路層,就完成了(能知道是哪個IP傳來的(A的IP)) ### Ethernet * "主導的"有線LAN技術 * bus形式會發生碰撞衝突 * 目前是使用switched形式,能達到no collision,store-and-forward 的封包傳輸。 * connectionless : 傳送端NIC與接收端NIC沒有handshaking * unreliable : 接收端NIC不會傳送ACKs或NAKs給傳送端NIC * 如需可靠傳輸,可以藉由傳輸層做TCP * 使用 CSMA/CD 這個MAC protocol ### Switch #### Ethernet switch * store and forward Ethernet 的 frames * 查看進來的frame的MAC address資訊,決定該forward frame 到哪一個outgoing link * 用CSMA/CD存取封包 * 透明性 : host不會知道switch的存在 * plug-and-play, self learning * switch 不需要做配置 #### mulitple simultaneous transmissions ![](https://i.imgur.com/vsadYlo.png) (此圖有六個interface) * switch能buffer packet * no collision; full duplex * 每個傳送的來源端與目的地端都不相同時,可以同時傳送,不會有碰撞發生 * AtoA', BtoB'同時傳 * 但AtoA',CtoA'不能同時傳 * 每一個link都有自己的碰撞區域,同一個link上不能同時傳輸 #### Switch forwarding table * switch如何知道藉由哪個interface可以將資料傳到A' * 每個switch皆有自己的switch table * (MAC address of host; interface to reach host; TTl) #### self-learning * 當有封包傳入時,switch會去將他從哪個interface進來,與他frame中的MAC address記錄到switch table中 #### frame filtering/forwarding 當frame到達switch: 1. 紀錄他的incoming link與MAC address 2. 利用他的MAC address當索引,將以上資訊存入switch table 3. if 在table找的到目的地的話: * dest == source : drop * else : 從表上給的interface forward frame 4. else : flood Flooding : 是一種簡單的路由演算法,將收到的封包,往所有的可能連結路徑上遞送,直到封包到達為止。 ![](https://i.imgur.com/jib2nxq.png) ![](https://i.imgur.com/Y9MCR06.png) switch 沒有 IP address #### Switches vs. router * 皆是 store-and-forward * 都有 forwarding table * routers : 利用routing演算法與IP address去計算table * switches : 透過flooding與learning跟MAC address去製作table ### VLAN * 支持VLAN的switch可以在一個實體LAN中定義出多個虛擬的LAN * port-based VLAN: * 可以定義switch中哪幾個port為同一個VLAN * 也可以利用MAC address來定義該node屬於哪個VLAN ![](https://i.imgur.com/Ujyny8f.png) * trunk port : 在不同實體switch上定義的同一個VLAN中傳遞訊息 ![](https://i.imgur.com/XiIiC2w.png) ## MPLS : Multiprototcol label switching * 在支持MPLS的router利用固定長度的label進行高速度的IP forwarding * 但IP datagram會還是會持有IP address ### MPLS capable routers (label-switched router) * 只經由label value(完全不用IP address)去forwarding packet 到outgoing interface * MPLS forwarding table 跟 IP forwarding table是分開的 * 比IP forwarding彈性,可以做分流,不一定要照著原路走。也可以先事先規劃好備份路徑,link發生錯誤就可以直接快速切換 #### 比較 ![](https://i.imgur.com/xNR6KMi.png) ![](https://i.imgur.com/JBF8ehb.png) ![](https://i.imgur.com/hnpPUqm.png) ![](https://i.imgur.com/ZWsBqAr.png) //IP 跟 MAC 的差別? ###### tags: `計算機網路`