IP多播提供兩類服務(wù):
1)向多個(gè)目的地址傳送數(shù)據(jù)。有許多向多個(gè)接收者傳送信息的應(yīng)用:例如交互式會(huì)議系統(tǒng)和向多個(gè)接收者分發(fā)郵件或新聞。如果不采用多播,目前這些應(yīng)用大多采用TCP來完成(向每個(gè)目的地址傳送一個(gè)單獨(dú)的數(shù)據(jù)復(fù)制)。然而,即使使用多播,某些應(yīng)用可能繼續(xù)采用TCP來保證它的可靠性。
2)客戶對(duì)服務(wù)器的請(qǐng)求。例如,無盤工作站需要確定啟動(dòng)引導(dǎo)服務(wù)器。目前,這項(xiàng)服務(wù)是通過廣播來提供的(正如第16章的BOOTP),但是使用多播可降低不提供這項(xiàng)服務(wù)主機(jī)的負(fù)擔(dān)。
多播組地址
下圖顯示了D類IP地址的格式。28位D類
能夠接收發(fā)往一個(gè)特定多播組地址數(shù)據(jù)的主機(jī)集合稱為主機(jī)組(hostgroup)。一個(gè)主機(jī)組可跨越多個(gè)網(wǎng)絡(luò)。主機(jī)組中成員可隨時(shí)加入或離開主機(jī)組。主機(jī)組中對(duì)主機(jī)的數(shù)量沒有限制,同時(shí)不屬于某一主機(jī)組的主機(jī)可以向該組發(fā)送信息。
一些多播組地址被IANA確定為知名地址。它們也被當(dāng)作永久主機(jī)組,這和TCP及UDP中的熟知端口相似。同樣,這些知名多播地址在RFC最新分配數(shù)字中列出。注意這些多播地址所代表的組是永久組,而它們的組成員卻不是永久的。
例如,224.0.0.1代表“該子網(wǎng)內(nèi)的所有系統(tǒng)組”,224.0.0.2代表“該子網(wǎng)內(nèi)的所有路由器組”。多播地址224.0.1.1用作網(wǎng)絡(luò)時(shí)間協(xié)議NTP,224.0.0.9用作RIP-2,224.0.1.2用作SG公司的dogfight應(yīng)用。
多播組地址到以太網(wǎng)地址的轉(zhuǎn)換
IANA擁有一個(gè)以太網(wǎng)地址塊,即高位24bit為00:00:5e(十六進(jìn)制表示),這意味著該地址塊所擁有的地址范圍從00:00:5e:00:00:00到00:00:5e:ff:ff:ff。IANA將其中的一半分配為多播地址。為了指明一個(gè)多播地址,任何一個(gè)以太網(wǎng)地址的首字節(jié)必須是01,這意味著與IP多播相對(duì)應(yīng)的以太網(wǎng)地址范圍從01:00:5e:00:00:00到01:00:5e:7f:ff:ff。
這里對(duì)CSMA/CD或令牌網(wǎng)使用的是Internet標(biāo)準(zhǔn)比特順序,和在內(nèi)存中出現(xiàn)的比特順序一樣。這也是大多數(shù)程序設(shè)計(jì)員和系統(tǒng)管理員采用的順序。IEEE文檔采用了這種比特傳輸順序。AssignedNumbersRFC給出了這些表示的差別。
這種地址分配將使以太網(wǎng)多播地址中的23bit與IP多播組號(hào)對(duì)應(yīng)起來,通過將多播組號(hào)中的低位23bit映射到以太網(wǎng)地址中的低位23bit實(shí)現(xiàn),這個(gè)過程如圖12-3所示。
由于多播組號(hào)中的最高5bit在映射過程中被忽略,因此每個(gè)以太網(wǎng)多播地址對(duì)應(yīng)的多播組是不唯一的。32個(gè)不同的多播組號(hào)被映射為一個(gè)以太網(wǎng)地址。例如,多播地址224.128.64.32(十六進(jìn)制e0.80.40.20)和224.0.64.32(十六進(jìn)制e0.00.40.20)都映射為同一以太網(wǎng)地址01:00:5e:00:40:20。
既然地址映射是不唯一的,那么設(shè)備驅(qū)動(dòng)程序或IP層(見圖12-1)就必須對(duì)數(shù)據(jù)報(bào)進(jìn)行過濾。因?yàn)榫W(wǎng)卡可能接收到主機(jī)不想接收的多播數(shù)據(jù)幀。另外,如果網(wǎng)卡不提供足夠的多播數(shù)據(jù)幀過濾功能,設(shè)備驅(qū)動(dòng)程序就必須接收所有多播數(shù)據(jù)幀,然后對(duì)它們進(jìn)行過濾。
局域網(wǎng)網(wǎng)卡趨向兩種處理類型:一種是網(wǎng)卡根據(jù)對(duì)多播地址的散列值實(shí)行多播過濾,這意味仍會(huì)接收到不想接收的多播數(shù)據(jù);另一種是網(wǎng)卡只接收一些固定數(shù)目的多播地址,這意味著當(dāng)主機(jī)想接收超過網(wǎng)卡預(yù)先支持多播地址以外的多播地址時(shí),必須將網(wǎng)卡設(shè)置為“多播混雜(multicastpromiscuous)”模式。因此,這兩種類型的網(wǎng)卡仍需要設(shè)備驅(qū)動(dòng)程序檢查收到的幀是否真是主機(jī)所需要的。
即使網(wǎng)卡實(shí)現(xiàn)了完美的多播過濾(基于48bit的硬件地址),由于從D類IP地址到48bit的硬件地址的映射不是一對(duì)一的,過濾過程仍是必要的。盡管存在地址映射不完美和需要硬件過濾的不足,多播仍然比廣播好。
單個(gè)物理網(wǎng)絡(luò)的多播是簡(jiǎn)單的。多播進(jìn)程將目的IP地址指明為多播地址,設(shè)備驅(qū)動(dòng)程序?qū)⑺D(zhuǎn)換為相應(yīng)的以太網(wǎng)地址,然后把數(shù)據(jù)發(fā)送出去。這些接收進(jìn)程必須通知它們的IP層,它們想接收的發(fā)往給定多播地址的數(shù)據(jù)報(bào),并且設(shè)備驅(qū)動(dòng)程序必須能夠接收這些多播幀。這個(gè)過程就是“加入一個(gè)多播組”(使用“接收進(jìn)程”復(fù)數(shù)形式的原因在于對(duì)一確定的多播信息,在同一主機(jī)或多個(gè)主機(jī)上存在多個(gè)接收者,這也是為什么要首先使用多播的原因)。當(dāng)一個(gè)主機(jī)收到多播數(shù)據(jù)報(bào)時(shí),它必須向?qū)儆谀莻€(gè)多播組的每個(gè)進(jìn)程均傳送一個(gè)復(fù)制。這和單個(gè)進(jìn)程收到單播UDP數(shù)據(jù)報(bào)的UDP不同。使用多播,一個(gè)主機(jī)上可能存在多個(gè)屬于同一多播組的進(jìn)程。
當(dāng)把多播擴(kuò)展到單個(gè)物理網(wǎng)絡(luò)以外需要通過路由器轉(zhuǎn)發(fā)多播數(shù)據(jù)時(shí),復(fù)雜性就增加了。需要有一個(gè)協(xié)議讓多播路由器了解確定網(wǎng)絡(luò)中屬于確定多播組的任何一個(gè)主機(jī)。這個(gè)協(xié)議就是Internet組管理協(xié)議(IGMP),也是下一章介紹的內(nèi)容。
眾信咨詢:互聯(lián)網(wǎng)資質(zhì)代理誠信品牌