通訊P.05:資料鏈結層 LLC MAC
前情提要
在上一章我們詳細介紹了實體層,以及實體層會遇到什麼問題用什麼技術解決。這次介紹資料鏈結層,以及會遇到什麼問題用什麼技術解決
資料鏈結層:
資料聯結層(Data link layer)這一層是比較特殊的一個階層,因為底下是實體的定義,而上層則是軟體的定義。因此又分兩個子層。偏向硬體的子層稱為MAC,偏向軟體的子層稱為LLC,而這些子層業務分別是產生表頭2和表尾2
所以資料鏈結層可以分為兩個層,其細分結果如下:
OSI 第三層 -> OSI 第二層 的 LLC 層 -> OSI 第二層的 MAC層 -> OSI 第一層
MAC:
該層主要提供兩個業務
- 尋址機制
- 通道訪問控制機制
Ex:
假設今天你和你哥都用同一台中華電信ADSL,你們的IP就是一樣的,那麼今天老媽在外面要傳送一封信給你,可是你們IP位置一樣,那ADSL是怎麼知道這個封包要傳給你還是你哥,其實很簡單,就是這個封包到你家的ADSL,之後再根據MACAddress去判斷是要給誰(尋址機制要找到的對象)。
而因為你和你哥都用同一台ADSL,也就說明外面資料連到ADSL的線只有一條,那麼就必須檢查這個通道是否被正被其他人占用(通道訪問控制機制),如果該通道正確就傳遞出去(實體層)。
尋址機制:
由上述例子可以知道要找的地址叫做MACAddress,而MACAddress是什麼
MACAddress:
每一台具有連線功能裝置(藍芽、WiFi)的門牌號,每張網卡在出貨時,都自帶全球唯一的MACAddress(門牌號),意味著理論上整個地球不可能會有重複的MAC地址,其MAC地址透過嚴格控管,才具有該效果,以下範例MAC地址的格式:
38-BA-F8-12-19-AC
這是我筆電藍芽的MAC地址,其中
38-BA-F8這是由IEEE控管,必須花錢申請,才能獲得得編號(前24 bit),而這個編號是廠商 Intel跟IEEE申請的地址
12-19-AC這是由生產網卡的廠商自行產生,該廠商必須嚴格紀錄哪些位址被使用了,絕對不能生產出MAC地址重複的地址
在知道MACAddress的概念後,資料鏈結層的業務會產生表頭2,而表頭2的資訊就是上面的圖片格式。
雖說不能重複,但其實還是能透過人工修改來重複,也有可能廠商生產紀律很鬆散,但根據訊模型可知只要相同MAC網卡裝置,不處在同一個路由器(OSI模型定義的 第三層 網路層)就不會有問題發生。
WiFi探針:
因為MACAddress只用於網卡傳輸,並不屬於隱私裝置,所以有WiFi探針這產品,這是一種能夠蒐集範圍內開啟WiFi功能的裝置,其設備訊息的裝置,其中就有MACAddress和強度,主要用於搜尋範圍內可以連的WiFi有什麼以及強度是什麼,以此來提供連線選擇
行為監控:
但是有心人士利用這缺陷,在商場、百貨公司等等設立這些裝置,每隔幾秒搜尋一次,根據強度來判斷用戶的位置(真實位置,經緯度的那種),以此來判斷該用戶是不是常客、最喜歡逛哪一區、在哪一區停留最久等等。以此資料為參考,判斷這個MACAddress的用戶,最喜歡哪些商品,逛的是不是高檔區,財力應該很豐富等等,以此進行廣告行銷、詐騙、場地租金評斷等等都有可能。
廣告投射和詐騙資料:
雖然只能知道MACAddress,不知道這個人的真實信號,但是如果我把這資料整理後販售,APP開發商可以去購買此資料,之後通過APP安裝權限知道你的MACAddress,兩者進行比對,MAC資料告訴我38-BA-F8-12-19-AC經常在高檔內衣區逛,APP資料告訴安裝此APP的用戶是 38-BA-F8-12-19-AC,於是我就可以進行廣告行銷,獲取真實資料,0975-XXX-XXX 黃先生 在某天某地逛高檔內衣區,他很有錢,只在高級內衣區看,之後再把這訊息賣給詐騙集團或是進行廣告投射,詐騙集團就可以謊稱 XXX 請問你是不是在某天某地 購買高檔內衣 之類的詐騙。
人流監控:
當然也可以運用在其他地方,像是這個區域的人都去哪,人數多不多,101煙火是否要進行人流疏導等等之類的,也可以運用特殊地方監控,像是國安地方,某個MACAddress一直在總統府前面徘迴,每天固定時間都來一次,那麼這個人是否有什麼特殊計畫,是要暗殺總統? ,如果在銀行一直徘迴,是要搶劫進行探勘?
定位輔助:
因為開啟WiFi,可以偵測到周圍的WiFi強度,而根據強度可以進行三角定位,就知道你的位置精準到哪,像是UBer,必須依靠非常精準的位置來進行收費,如果位置不精準,收費就不標準。
資安保護:
今天如果要用網路下單,一些金融操作,可以透過MACAddress來加強保障,因為這東西理論上是全球唯一,那麼你常用的電腦應該就只有一台,我就把我MAC地址傳給銀行,每次下單時候銀行都會比對MAC地址,如果不一致可能就是帳密外流,讓別人在異地用其他電腦登入。
由上述介紹,想必你對MACAddress有更多的了解,那麼我再繼續介紹,要怎麼找到這些MACAddress,位址解析協定(ARP)
ARP:
ARP的功能就是通過解析IP地址得到MAC地址,但是對於他的層級區分是很尷尬的存在。
如果使用暴力區分:
不知道MAC為實體層
知道MAC為資料鏈結層
知道IP為網路層
那麼ARP就屬於網路層,但是ARP功能是獲取到MACAddress,所以功能性應該屬於資料鏈結層,顧此處以資料鏈結層為標準。 反正IPv4才用ARP,現在IP也快用完了,IPv6不使用ARP
ARP為了實現IP地址與MAC地址的查詢與轉換,ARP協議引入了ARP緩存表的概念,每台主機或路由器在維護著一個ARP緩存表(ARP table),這個表包含IP地址到MAC地址的映射關係,如下
通常每個Items都會有自己的壽命,默認是10分鐘,就是10分鐘刷新一次的意思
假設今天
主機A的IP地址為192.168.1.1,MAC地址為0A-11-22-33-44-01;
主機B的IP地址為192.168.1.2,MAC地址為0A-11-22-33-44-02;
- A根據自己的ARP表查詢是否有匹配B的IP
- 如果沒有,A就會發送ARP請求(目標MAC地址為FF-FF-FF-FF-FF-FF)到該WiFi內的所有主機,其格式如下:
- 每個主機都會檢查,這個ARP請求裡面的IP是不是再說我?而B主機發現請求的IP就是在說我,於是B主機就會把自己的MAC地址和IP填寫好成一個新的ARP表
- B將填寫好的ARP表,在發送回去給A
- 當A拿到新的ARP表,則可以利用上面的資訊進行溝通
ARP攻擊:
因為ARP的缺陷,在接收其他電腦的ARP表時候,不會檢查正確就直接引用。
所以如果今天我創立一個假的ARP表,192.168.1.1 的MAC地址被我竄改,然後把這個ARP表廣播給同WiFi全部主機,大家都會接受,於是當有人要傳給192.168.1.1時候因為表裡面已經存在了,所以那個人就拿到MAC地址,也不用再發廣播問誰是192.168.1.1,之後透過我造假的MAC地址傳送資料,於是就導致192.168.1.1的真實主機拿不到資料,而他的資料全部傳到一個假的MAC地址。
那麼如果我很討厭192.168.1.50,我就先獲取他的正確MAC地址,把所有人的MAC地址都改成IP 50的MAC地址,於是一下子,30幾台電腦的資料都塞爆他,同時30幾台的資料都不會正確接收。
通道訪問控制:
上述講了同一個WiFi內要如何尋找到正確的MAC位址,那麼我們來談,因為同一個WiFi,並且該WiFi是非全雙工的形式,所以通道只有一個,同一時間只能一人使用,那麼我要如何有效、公平的使用,可能有人會回答多工。
確實,多工是其中一種解決方案,但是因為多工實施起來成本高、複雜高,那就沒必要使用多工技術,所以多工只運用在大項目,像是實體層 WiFi要怎麼傳輸,很明顯這關連到整個使用WiFi的人(因為頻譜無法重複利用),也就是全世界的人,所以才需要多工,反而是都在同一個區域網路內,因為有時候只有你一個人在家,有時候兩個人在家,再少人時候,多工反而更拖累效能,故我們使用Access control策略,而不是多工策略,其中最出名的方案為CSMA系列
今天如果不使用多工,那麼就代表一個人占用共用通道,因為區域網路不是每個時候都必須共用,但也因此,如果你佔用了頻道,別人此時要使用,就會發生”碰撞”,發生碰撞後應該等待占用的人使用完畢再換你使用,就像廁所一樣,並且發生了碰撞會影響到傳送速度,所以使用一些協定來降低碰撞的發生,並且可以適時的利用頻譜通道,像是CSMA/CD、CSMA/CS。
碰撞:
搶廁所就是一種碰撞,當A在廁所,其他人直接打開廁所門發現A在裡面(碰撞),於是A就必須重新醞釀情緒,就拉長上廁所的時間(碰撞後的影響),那麼我們知道碰撞的概念了,接下來我們要細分碰撞的Case,這樣我們才能設計出降低碰撞發生的方法。
- A先到家並上廁所,後來B到家,打開廁所門發現A在裡面,此時就發生了碰撞
- A和B同時到家,A和B同時想上廁所,此時就發生了碰撞
針對第1點,科學家們使用CSMA技術來解決,第2點使用CD技術來解決
載波偵測多重存取(CSMA):
載波偵測(Carrier Sense,CS):是指資料傳送之前必須先偵測傳輸通道是否有其他主機在使用,如果無人使用,則立刻傳送資料;如果有人使用,則等候一段時間之後再傳送資料,簡單說就是會先敲廁所門。以此來達到多重存取(Multiple Access,MA)。
碰撞偵測(CD):
其實A和B同時發生碰撞,是無法避免的,我們只能設計出發生這問題時該如何善後,以此降低第二次碰撞的發生,當發生A和B同時碰撞時候,就會發出一個壅塞訊號(Jam Signal),通知所有電腦現在發生碰撞拉,請大家暫緩傳送一下,並且把A和B的請求蓋掉,告訴A和B:你們剛剛發的請求,我當作沒聽到,你們再等待N秒後在進行傳送一次,此時就要有個演算法(Binary Exponential Backoff Algorithm),來告訴A你要等1秒,B你等0.5秒,這樣就不會發生碰撞了。使用該技術最出名的:乙太網路系統,也就是有線網路。
碰撞避免(CA):
對於具有實體介質(網路線)的網路可以偵測訊號碰撞,但是沒有實體介質的無線網路要偵測訊號碰撞極為困難,因此科學家發明了「碰撞避免(CA:Collision Avoidance)」來取代「碰撞偵測(CD:Collision Detection)」,此種方案採用主動避免碰撞而非被動偵測的方式來解決碰撞問題。可以滿足那些不易準確偵測是否有碰撞發生的需求。
假設A和B要同時傳送封包
- A產生隨機的延遲時間為DT_A(假設0.1秒),B也產生隨機的延遲時間為DT_B(假設0.2秒)
- A在DT_A時間內發現頻道忙碌的話,就會停止倒數計時DT_A,直到確定通道是空的才會繼續計時
- 當DT_A時間到了,A會發出RTS訊號,此時通道被RTS塞滿,DT_B就會停止倒數
- 當WiFi AP接收到RTS訊號,就會回應CTS訊號回去,此時通道又被CTS塞滿,DT_B又會停止倒數
- 當A收到CTS訊號,就會把資料傳送出去,通道又被A佔據,DT_B又會停止倒數
- 當DT_B時間到了,B就會延續上面的步驟。
上述仍會發生A和B因為同時時間到了,導致通道內會有多個RTS或CTS等等資料進行碰撞,但是這是請求封包的碰撞,這個請求往往都比資料小上好多倍,碰撞也不會讓資料本體造成干擾,所以讓傳送變得更可靠。
LLC(Logical Link Control):
上述主要講說,LLC是偏向軟體方面,讓較高層次的通訊軟體使用,使得那些較高層次的通訊軟體只要透過 LLC 層就可以存取網路,而不用去考慮所連接的網路型態。也就是說你可以把它當作工具人,這個工具人負責叫LLC負責幫你存取網路。
LLC的多工
LLC 提供若干個『邏輯鏈路』(Logical Link),讓多個應用程式同時使用。假設今天A工作站有很多隻程式,而每個程式都跟不同的工作站通訊:
A 的 P1 -> B 的 P4
A 的 P2 -> C 的 P5
A 的 P3 -> D 的 P6
由上面情況可知,A的工作站一次開啟多個程式,但是每個程式都要占用網卡的通道,來傳達資料,那麼LLC是必要提供所謂的多工服務。
想想今天某個人,一次寫5封要送信給A,但是A在美國,那麼作為郵局的我們,勢必要派出5個郵差去接洽,讓每一封信都順利的到國際信封中心進行轉交給美國的A,
而國際信封中心只有一間,而且它們入口很窄,一次只能讓一個人送,並且不是只有台灣有在用,世界上上百個國家都要送到這個國際中心,於是國際信封中心訂了個規則,一個人有10秒的時間,10秒到了就從國際中心的出口出來,再換下一個人(同理,台灣 -> 國際信封中心 這個流程也是相同於 國際信封中心 -> 美國)。
5個封信就是5個程式,每個程式都會有對應的郵差窗口,就叫做『服務存取點』(Service Access Point, SAP),一個人10秒時間,就是TDMA多工來實作,但是實際情況還是依靠作業系統決定,作業系統就是國際信封中心。
LLC的封包協議:
上述送信遊戲可以知道,LLC的扮演角色是什麼,而信封都有固定的格式,這樣才能知道你誰,要寄到哪邊去,LLC同樣也有固定的格式,LLC-PDU可以當作信封的意思。
- 『目的地服務存取點點』(Destination Service Access Point, DSAP):DSAP是為了能夠辨認出LLC通訊協定間傳送的資料到底是屬於誰的,在DSAP欄位標明對方工作站的服務存取點,也表示銜接到對方通訊應用程式。
- 『原始服務存取點點』(Source Service Access Point, SSAP):傳送端LLC的服務存取點,亦表示連接傳送端本身的應用程式。
- 控制欄:告訴對方本 LLC-PDU的意義,是傳送資料(由上層傳送下來),或是雙方的控制訊息,控制欄主要作為雙方協議溝通使用。
- 訊息欄:如果由控制欄位知道該封包做為傳送資料之用,則訊息欄是負責接受上層(或網路層)的資料,再包裝成LLC-PDU。如果控制欄表示本封包是作為連線交談用,則訊息欄是作為交談訊息存放用,對方由訊息欄可知道溝通的內容。
有了上述這些功能後,就可以順利的把MAC表頭2包在封包內送給實體層來實作,但是理想上這些資料是不會產生問題的,但是萬一受到雜訊干擾的話,那資料傳送就失敗了,也因為實體層不需要加入表頭,這一層是最後一層,所以在最後一層這邊,資料鏈結層還會進行一些偵錯處理,把一些偵錯的處理放在最後面,也就是表尾2的內容。
循環冗餘檢查碼(CRC):
還記得之前在說數位和類比的差別嗎,為什麼1G通話是使用類比,2G就廢棄改用數位嗎,其原因是數位有太多好處,可以進行偵錯、除錯、加密、壓縮等等,而CRC就是用於除錯的。
假設今天我要傳送資料叫做 10001,那們CRC進行加法運算,1+0+0+0+1 = 2,並將2轉成2進制為10,之後把10塞到表尾。
當接收端拿到資料後,會把先讀取表尾,表尾告訴我CRC結果是10,那我去解析資料,資料因為雜訊干擾,變成10000,我自己計算出該筆資料CRC結果是1,但是傳送端的CRC結果告訴我應該是要10而不是1,所以我可以斷定這資料是有誤的,這就是一種偵錯方式。
當然如果是 10001 被干擾成 10100,這樣加起來還是10,於是判定為通過CRC偵錯,但是結果很明顯是錯誤的,所以CRC檢查不會用加法這種簡單數學演算法,而是用更複雜的多項式,並且也僅支援錯一部分的偵錯。
數學的偵錯有很多種,像是台灣身分證,A123456789,A代表台北市,1代表男生,於是數學家們將12345678這些數字套入,台灣身分證產生公式,可以得出 121 這個數字,之後除以10餘1,因此10-1 = 9,所以A12345678這個檢查碼應該是9,所以這是一個合法的身分證字號。
PS: A123456789 是符合台灣身分證字號的規則,該身分證是台北內湖謝條根先生,他因為身分證太簡單,經常被冒用,經常上法院,涉及援交、訂票、公司逃漏稅、健保看病、詐騙集團申請信用卡、網拍帳號等等。