計網學習筆記三 MAC與LAN

GrapefruitCat發表於2023-03-12

在上一講中,我們學習了鏈路層可以提供的服務?:framing,link access,reliable delivery,error detection&correction。這一講我們從link access中的broadcast接入方式深入,學習這種接入方式下的協議,以及衍生出的MAC地址,最後會學習一下主要的區域網種類。

課件地址:https://cs.nju.edu.cn/lwz/networks/CH2-Direct Link Networks-3.pdf

多路訪問協議(MAC協議)

在上一講我們提到了在link access中有point-to-pointbroadcast兩種鏈路接入方式。

broadcast中,多路複用問題需要使用一系列的MAC協議來解決,它負責”當多個節點處於活躍狀態時,為了確保廣播通道執行有用的工作,以某種方式協調活躍節點的傳輸“。

設計這些協議前,在broadcast通道的傳輸速率為R bps的前提下,我們設定了協議需要實現的一系列的理想狀態

  • 單一活躍節點傳輸時,能達到R的傳輸速率
  • M個節點共用通道時,每個節點傳輸平均速率達到R/M
  • 完全分散(fully decentralized),沒有所謂的主節點
    • 不需要特殊節點來協調傳輸
    • 儘量時鐘、時隙不同步
  • 儘可能簡單,使實現不昂貴

我們儘量按這些理想狀態設計了一些協議,這些協議可以劃分為三類:

通道劃分協議

Channel partitioning主要思想是把通道劃分為小片,然後把這些小片分下去給各個節點單獨使用。劃分標準可以為時隙(time slot)、頻段(frequency)、編碼(code)有以下幾種:

  • TDMA分時多重進接。和前文的分時多工TDM一樣,在時間幀內按照時隙來劃分通道;

    計網學習筆記三 MAC與LAN
  • FDMA:分頻多重進接。和前文的分頻多工FDM一樣,按照劃分的頻段來劃分通道;

    計網學習筆記三 MAC與LAN
  • CDMA:分碼多重進接。給使用者分配不同的正交的chipping sequece,對使用者要傳送的資料進行編碼,使得多個使用者的資料可以進行疊加後變成“一個資料”在通道上傳輸,然後再由接收方分別根據chipping sequece來解碼消除噪音拿到資料。流程如下圖:

計網學習筆記三 MAC與LAN

隨機接入協議

random access協議可以讓單個活躍節點傳輸達到R的速率,而且傳輸前不用對各個節點進行協調,但這就很容易產生collision。如何探測並解決這些collision,是我們在隨機接入協議中主要考慮解決的問題。主要有以下幾種協議:

ALOHA

ALOHA的主要解決 collision 的方法是:一旦有幀準備好了就立刻傳送,發生 collision 就根據p的機率進行重傳(1-p的機率等一段時間,等待的時間是隨機的),進行重傳後還是沒有收到ACK資訊就把當前幀直接丟棄。

計網學習筆記三 MAC與LAN

Slotted ALOHA

相比於純ALOHA,時隙ALOHA做的一個改變就是把所有幀定義為相同大小,並且根據幀的大小來劃分時隙( T == Size/R )。這樣子的操作使得節點在時間上的傳輸和等待都是同步的,都得向時隙對齊。

它的具體操作是一旦有幀準備好了就在下一個時隙中進行傳送,發生 collision 就根據p的機率進行重傳(1-p的機率等一段時間,等待的時間是隨機的),直到重傳成功為止。它的效率剛好是純ALOHA的兩倍,為1/e

計網學習筆記三 MAC與LAN

CSMA

載波監聽多路訪問。在兩種ALOHA中節點進行幀傳送時是完全不夠別的節點的死活的,想傳就傳,這放到生活中是非常不禮貌不道德的行為。這會導致collision的數量大大地增加,CSMA協議對此進行了最佳化。

在CSMA中,每個節點必須“ listen before transmit”, 先聽一下有沒有人在講話,也就是觀測通道上有無能量波動(幀的傳輸),這種觀測行為會一直進行直到當前通道從 busy 變為 idle 為止。在觀測的過程中,如果通道是 busy 的,那麼就推遲傳送。

CSMA對 busy 的推遲操作因演算法而不同。有三種busy推遲處理演算法:

  • Non persistent CSMA :如果busy就先躺平一會(躺一個 random time,這減少了 collision 的機率)再回來聽,也就是它不是全天候保持觀測的;但是這種演算法雖然減少了碰撞機率,但是如果通道在節點躺平還沒結束時變為了idle,那麼通道就會存在被浪費的情況;

  • 1-persistent CSMA :為了避免non persistent中的通道浪費情況,我們節點不再開擺,全天候工作一直從 busy 聽到 idle 為止 ? ,通道 idle 了就把幀傳輸出去;但這種演算法就會導致節點們太自私,如果有多個節點同時等待監聽,通道變為 idle 時就一定會發生碰撞;

  • p-Persistent CSMA :折中方案,既能像第二種那樣減少idle時間,又能減少碰撞機率;通道 idle 時以p 的機率進行傳輸,以1-p的機率等待一個時間單位(大小為最大傳播時延)p的值取等待傳送的節點數N的倒數即1/N

    計網學習筆記三 MAC與LAN

但我們進行了這麼多的工作,還是會因為傳播延遲的問題出現碰撞的情況……?所以我們搞出了CSMA/CD!

CSMA/CD

根據CSMA協議進行幀傳送,按理說都萬事俱備了,怎麼還會發生collision呢??

原來是在幀傳送過程中,因為在鏈路上傳播速率的問題,幀會產生因端對端傳播時延產生的碰撞。CSMA沒有進行碰撞的檢測,即使碰撞了還是會繼續傳輸這些幀。而在CSMA/CD中,當某節點進行碰撞檢測時,一旦它檢測到了碰撞就會立刻停止幀的傳輸。

CSMA/CD的幀傳送步驟為:

  1. If medium idle, transmit; otherwise, step 2
  2. If busy, listen for idle, then transmit immediately (採用的1-persistent演算法)
  3. If collision detected, send jam signal then abort
  4. After jam, wait random time then start from step 1

在這個協議的工作環境下,我們可以解釋Minimum Frame Size的由來:

計網學習筆記三 MAC與LAN

在當下,size作為協議的介面是不能變的,物理傳播速率v也是不變的,所以變的就只有鏈路長度L和頻寬B

所以,早期乙太網能連幾百米,到了現在頻寬越來越快,鏈路長度就只有十幾米嘍?

IEEE 802.3協議用的是CSMA/CD加上1-persistence演算法,同時為了解決因 1-persistent 出現的頻繁collision問題,打上了一個叫“二進位制指數後退”(binary exponential backoff)的補丁。在自頂向下中對這個演算法的描述如下:

計網學習筆記三 MAC與LAN

輪流協議

taking-turns型別的協議可以讓M個節點共用通道時,每個節點傳輸平均速率達到R/M。我們來看兩種比較重要的協議:

Polling

輪詢協議。協議會指定鏈路上的多個節點之一為主節點,主節點能夠透過觀察在通道上是否缺乏訊號,來決定一個節點何時完成幀的傳送,它以迴圈的方式poll每個節點,告訴節點可以傳輸的最大幀數量,傳輸了某些幀後繼續下一個節點的poll

計網學習筆記三 MAC與LAN

polling協議有幾個缺點:

  • 產生了輪詢時延;
  • 單一活躍節點傳輸因輪詢而速率小於R
  • 主節點故障是很糟糕的,會導致整個通道的崩潰

我們使用的藍芽就是採用了這種MAC協議。

Token passing

令牌傳遞協議。該協議沒有主節點,一個被稱為令牌(token)的小幀在節點之間以某種固定順序交換傳遞。令牌意味著幀傳送的許可證。當一個節點需要進行幀的傳送時它才能持有令牌,否則立刻釋放令牌轉發給下一個節點

計網學習筆記三 MAC與LAN

token passing有幾個缺點:

  • 要不停地傳令牌,產生時延;
  • 單個節點的故障同樣會導致整個通道的崩潰,如節點忘記釋放令牌;
  • 公平性問題:雖然拿到 token 的節點想發多大就發多大,但這耗時很長,其他節點得等好久。

具體的實現有IBM的 TOKEN ringFDDI,我們會在後面的LAN中看到TOKEN ring的具體情況。

協議效能分析結論

這裡放的是分析後得出的結論,分析過程見ppt嗷 XD

一個協議效能的好壞可以用幀的傳輸時間比來衡量。

計網學習筆記三 MAC與LAN

設傳播時延為a,傳輸時延為1,則代表各個協議效率的 U 如下:

  • point2point:無論 a 大於1還是小於1,U的結果都是1/(1+a).
  • ring:當環中存在N個節點時,有
    • 令牌環釋放前提是幀頭部被接收到&幀完成傳輸;
    • a大於1時,U為1/(a + a/N)
    • a小於1時,U為1/(1 + a/N)
  • slotted ALOHA
    • N 個節點全部成功傳送的機率為 A = N*p*(1-p)^(N-1)
    • p 等於 1/N 時, A 達到最大為1/e
    • 成功傳送的用時為 1/(1+2a)
    • 所以 U = 1/(1+2a) * A --> 1/e
  • pure ALOHA
    • N 個節點全部成功傳送的機率為 A = N*p*(1-p)^(2N-1)
    • p 等於 1/2N 時, A 達到最大為1/2e
    • 成功傳送的用時為 1/(1+2a)
    • 所以 U = 1/(1+2a) * A --> 1/2e
  • CSMA/CD + p-persistence: U 經過種種分析後最終為1/(1 + (2e-1)*a)

MAC

MAC地址

什麼是MAC地址?

MAC地址的全稱為 Medium Access Control (MAC) Address,它是一個與網路介面卡相關聯的數字地址。鏈路層地址有許多種稱呼:LAN地址,實體地址或MAC地址,MAC地址是目前最廣泛的鏈路層地址稱呼。

有啥特點?

  • MAC地址具有扁平結構,而IP是層次結構,兩者相當於身份證號和郵政地址的區別(後者會因搬家而變動),網路卡是出生廠家,mac就是它給你配的身份證號,獨一無二,永久存在(但現在的技術可以靠軟體來改)。
  • MAC分配給網路介面卡的方式是:IEEE把前三個位元組分配給(賣給)廠家,然後後三個位元組的內容由廠家決定寫啥。
  • 交換機沒有MAC地址。
  • 特殊廣播地址 FF-FF-FF-FF-FF-FF,用於讓通道上所有adaptor接收處理該幀。

從MAC地址出發

我們現在知道,一個主機“誕生”時只知道自己的 MAC 地址,它想要和遠處的主機通訊,就像寄信,是需要確切的地址的,怎麼辦?

  • 我的IP地址是啥?
  • 對面的IP地址是啥?
  • 如果在同一個LAN中,對面的MAC地址是啥?
  • 如果不在,那我要找的第一跳的路由器地址是啥?
  • ………………

解決了這些問題,我們才能成功達成通訊。我們需要ARP和DHCP協議。

ARP

地址解析協議.Address Resolution Protocol(RFC 826)

ARP的功能就是將子網內的任意IP地址解析為MAC地址。ARP僅僅在LAN下才能工作!!它不能跨越子網而去解析別的主機!!

ARP的具體工作原理是:

  • 首先,每個主機或路由器的記憶體中都放著一個動態的ARP表,動態表示它所有的表項都不是永久的,表項具有一個壽命值(TTL),是會過期的。(在cmd中輸入arp -a可以看到這個表)
計網學習筆記三 MAC與LAN
計網學習筆記三 MAC與LAN
  • 好,我們要開始通訊了!傳送端主機首先透過拿到的對方的IP地址來查詢自己的ARP表,如果存在對映,就直接獲取MAC;
  • 如果在ARP表中找不到表項,那麼就會經歷以下過程:
    • 傳送端構造一個特殊的ARP packet;這裡有ARP報文格式詳解
    • 傳送端把一個這樣的查詢packet傳遞到介面卡中,介面卡在鏈路層中封裝它,使用廣播MAC地址來作為幀的目的地址,並將幀傳輸到子網中;
    • 子網上的其它介面卡接收到該幀並向上傳遞給ARP模組,由模組檢查目的IP是否與自己匹配;
    • 匹配的主機給查詢主機返回一個響應packet;
    • 查詢主機拿到目的MAC,將其封裝在IP資料包後傳送。
計網學習筆記三 MAC與LAN

要注意的是,查詢ARP報文是在廣播幀中傳送,而響應報文是在標準幀中;ARP"即插即用",不用自己配置;ARP並不劃分到具體的鏈路層或網路層,它可以看成跨這兩層之間的協議。

當主機想要向外網通訊時,需要用尋找的MAC是第一跳路由器的MAC。(用子網掩碼來識別通訊的主機在外網)

DHCP

動態主機配置協議.Dynamic Host Configuration Protocol(RFC 2131)

一個主機用DHCP協議來配置自己的IP地址、子網掩碼、DNS伺服器的IP地址、第一跳路由器的IP地址。

DHCP執行的過程為:

  • 客戶端在其子網上廣播一條DHCP-DISCOVER訊息;
  • 每臺伺服器都可以使用一條DHCP-Offer訊息進行響應;
  • 客戶端選擇一個伺服器,廣播包含伺服器IP的DHCP請求訊息;
  • 選定的伺服器提交繫結,並使用一條DHCP-ACK訊息進行響應;
  • 客戶端在DHCP-ACK內設定其配置引數;
  • 客戶端透過DHCP-Release訊息放棄繫結;
  • 如果客戶端之前沒有續訂(重新繫結)繫結,則繫結將到期。
計網學習筆記三 MAC與LAN

網路層地址和鏈路層地址共存原因

IP-to-IP communication is really just a series of MAC-to-MAC communication taking place at each router hop.

自頂向下對現象的解釋:

計網學習筆記三 MAC與LAN

也可以看看這裡的討論!

LAN

TOKEN Ring

令牌環是一個區域網的協議,可以說是輪流協議中token passing類協議的一個例項,它由IEEE 802.5所規定。

計網學習筆記三 MAC與LAN

每個節點有三種狀態:監聽狀態,傳輸狀態和通行狀態。

  • Listen State: 節點會監聽流經自身的位元流,它會將傳輸過來的幀抓住copy一份後再釋放轉發,如果這個幀發給自己的,那麼節點歡歡喜喜收下copy的一份後,對原始幀進行一個ACK的修改;
  • Transmit State:傳送方節點在傳送幀後所處的狀態,它會等待自己發出去的幀轉回來然後進行回收;在此過程,它有一個buffer用來暫存其它節點發出來的幀(不讓它們跑,只讓自己發的幀跑)
  • Bypass State:啥也不幹,只是單純地連線;

節點發出去的幀是肯定能到達目的地的,除非中途有節點故障(因為環形的結構)。這個協議在大的負載量傳輸下需要多次輪詢,在小負載量下效率也不會很高。

具體圖示如下:

計網學習筆記三 MAC與LAN

具體的標準有:

計網學習筆記三 MAC與LAN

Ethernet

乙太網是一類計算機區域網技術。它以便宜的實現價格佔領了有線區域網市場,取代了其他區域網標準如TOKEN ring、FDDI和ARCNET。

計網學習筆記三 MAC與LAN

IEEE組織的IEEE 802.3標準制定了乙太網的技術標準,它規定了包括物理層的連線、電子訊號和介質訪問層協議的內容。

乙太網在邏輯上使用匯流排型拓撲(以前是bus結構,當前快速乙太網使用了交換機,拓撲結構變成了star)和CSMA/CD的匯流排技術。

在當下交換機的使用下,就沒必要用CSMA/CD的broadcast鏈路接入了,詳細可以看看這個問答:

switch - If no CSMA/CD on switches what are they using

乙太網的特點有倆:unreliableconnectionless

  • unreliable:在NIC之間傳送接收幀時,不用進行握手;

  • connectionless:接收方不會返回ACK資訊給傳送方;

    data in dropped frames recovered only if initial sender uses higher layer rdt (e.g., TCP), otherwise dropped data lost.

    僅當初始傳送者使用更高層的RDT(例如,TCP)時,丟棄的幀中的資料才能恢復,否則丟棄的資料會丟失。

乙太網的演化非常快。啥都變了就只有幀的格式沒有變化,作為一個介面,乙太網幀的實現是非常成功的。(乙太網規定了最小幀長應滿足:幀的傳輸時延等於最遠兩個站點間訊號的往返傳播時延。)我們來看看幀的結構

計網學習筆記三 MAC與LAN
  • Preamble: 前同步碼欄位,8個位元組;7個位元組用以喚醒接收介面卡並進行時鐘同步,每個位元組的值都是0xAA;後一個位元組用以確認幀的起始位。(為了確定起始位我們使用了一個哨兵位機制,對資料進行每5個1填充1個0)
  • Addresses: 地址欄位,兩個地址欄位都是6個位元組,地址是MAC地址。
  • Type: 型別欄位,2個位元組,說明了上層的協議是啥(可以記錄2^16種)
  • Data payload: 最大1500位元組,最小46位元組;
  • CRC: 迴圈冗餘檢測欄位,4個位元組;

乙太網具體的標準有:

計網學習筆記三 MAC與LAN

使用的802.3協議(CSMA/CD+1-persistent+beb)的演算法邏輯圖如下:

計網學習筆記三 MAC與LAN

octet是什麼?

octet 表示的是8個bit ,當我們在談論網路上的問題時,更喜歡使用這個詞而不是Byte。

一些小的點

NOTE:物理上看到的節點星型組網形狀並不一定是broadcast的接入方式,很可能是多個point-to-point!這種邏輯上的組網拓撲的link access 因中心裝置不同而不同:中心裝置是switch的話其實是多個point-to-point,今天的以太區域網基本就是這樣,這就不用MAC協議了;而中心是hub的話對應的就是broadcast,hub相當於一個匯流排。

一個IEE802圖示:

計網學習筆記三 MAC與LAN

一些看到的比較好的文章:

乙太網與令牌環網

Efficiency Of Token Ring

相關文章