TCP/IP詳解讀書(shū)筆記(第12章 廣播和多播)
我們?cè)岬接腥NIP地址:?jiǎn)尾サ刂贰V播地址和多播地址。本章將更詳細(xì)地介紹廣播和多播。說(shuō)明:
單播地址:目的為單個(gè)主機(jī)
廣播地址:目的端為給定網(wǎng)絡(luò)上的所有主機(jī)
多播地址:目的端為同一組內(nèi)的所有主機(jī)
廣播和多播僅應(yīng)用于UDP,因?yàn)樗鼈冃鑼?bào)文同時(shí)傳往多個(gè)接收者。而TCP是一個(gè)面向連接的協(xié)議,它意味著分別運(yùn)行于兩主機(jī)(由IP地址確定)內(nèi)的兩進(jìn)程(由端口號(hào)確定)間存在一條連接。
為了弄清廣播和多播,需要了解主機(jī)對(duì)由信道傳送過(guò)來(lái)幀的過(guò)濾過(guò)程。圖1說(shuō)明了這一過(guò)程。

圖1:協(xié)議棧各層對(duì)收到幀的過(guò)濾過(guò)程
首先,網(wǎng)卡查看由信道傳送過(guò)來(lái)的幀,確定是否接收該幀,若接收后就將它傳往設(shè)備驅(qū)動(dòng)程序。通常網(wǎng)卡僅接收那些目的地址為網(wǎng)卡物理地址或廣播地址的幀。然而,多數(shù)接口均有被設(shè)置為混合模式的選項(xiàng),這種模式能接收每個(gè)幀的一個(gè)復(fù)制。
設(shè)備驅(qū)動(dòng)程序?qū)⑦M(jìn)行另外的幀過(guò)濾。首先,幀類(lèi)型中必須指定要使用的協(xié)議( IP、ARP等等)。其次,進(jìn)行多播過(guò)濾來(lái)檢測(cè)該主機(jī)是否屬于多播地址說(shuō)明的多播組。
設(shè)備驅(qū)動(dòng)程序隨后將數(shù)據(jù)幀傳送給下一層,比如,當(dāng)幀類(lèi)型指定為I P數(shù)據(jù)報(bào)時(shí),就傳往IP層。IP根據(jù)IP地址中的源地址和目的地址進(jìn)行更多的過(guò)濾檢測(cè)。如果正常,就將數(shù)據(jù)報(bào)傳送給下一層(如TCP或UDP)。
每次UDP收到由IP傳送來(lái)的數(shù)據(jù)報(bào),就根據(jù)目的端口號(hào),有時(shí)還有源端口號(hào)進(jìn)行數(shù)據(jù)報(bào)過(guò)濾。如果當(dāng)前沒(méi)有進(jìn)程使用該目的端口號(hào),就丟棄該數(shù)據(jù)報(bào)并產(chǎn)生一個(gè)ICMP不可達(dá)報(bào)文(TCP根據(jù)它的端口號(hào)作相似的過(guò)濾)。如果UDP數(shù)據(jù)報(bào)存在檢驗(yàn)和錯(cuò),將被丟棄。
使用廣播的問(wèn)題在于它增加了對(duì)廣播數(shù)據(jù)不感興趣主機(jī)的處理負(fù)荷。拿一個(gè)使用UDP廣播應(yīng)用作為例子。如果網(wǎng)內(nèi)有50個(gè)主機(jī),但僅有20個(gè)參與該應(yīng)用,每次這20個(gè)主機(jī)中的一個(gè)發(fā)送UDP廣播數(shù)據(jù)時(shí),其余30個(gè)主機(jī)不得不處理這些廣播數(shù)據(jù)報(bào)。一直到UDP層,收到的UDP廣播數(shù)據(jù)報(bào)才會(huì)被丟棄。這30個(gè)主機(jī)丟棄UDP廣播數(shù)據(jù)報(bào)是因?yàn)檫@些主機(jī)沒(méi)有使用這個(gè)目的端口。
多播的出現(xiàn)減少了對(duì)應(yīng)用不感興趣主機(jī)的處理負(fù)荷。使用多播,主機(jī)可加入一個(gè)或多個(gè)多播組。這樣,網(wǎng)卡將獲悉該主機(jī)屬于哪個(gè)多播組,然后僅接收主機(jī)所在多播組的那些多播幀。
廣播
四種IP廣播地址:
受限的廣播
受限的廣播地址是255.255.255.255。該地址用于主機(jī)配置過(guò)程中IP數(shù)據(jù)報(bào)的目的地址,此時(shí),主機(jī)可能還不知道它所在網(wǎng)絡(luò)的網(wǎng)絡(luò)掩碼,甚至連它的IP地址也不知道。在任何情況下,路由器都不轉(zhuǎn)發(fā)目的地址為受限的廣播地址的數(shù)據(jù)報(bào),這樣的數(shù)據(jù)報(bào)僅出現(xiàn)在本地網(wǎng)絡(luò)中。
指向網(wǎng)絡(luò)的廣播
指向網(wǎng)絡(luò)的廣播地址是主機(jī)號(hào)為全1的地址。A類(lèi)網(wǎng)絡(luò)廣播地址為netid.255.255.255,其中netid為A類(lèi)網(wǎng)絡(luò)的網(wǎng)絡(luò)號(hào)。一個(gè)路由器必須轉(zhuǎn)發(fā)指向網(wǎng)絡(luò)的廣播,但它也必須有一個(gè)不進(jìn)行轉(zhuǎn)發(fā)的選擇。
指向子網(wǎng)的廣播
指向子網(wǎng)的廣播地址為主機(jī)號(hào)為全1且有特定子網(wǎng)號(hào)的地址。作為子網(wǎng)直接廣播地址的IP地址需要了解子網(wǎng)的掩碼。例如,如果路由器收到發(fā)往128.1.2.255的數(shù)據(jù)報(bào),當(dāng)B類(lèi)網(wǎng)絡(luò)128.1的子網(wǎng)掩碼為255.255.255.0時(shí),該地址就是指向子網(wǎng)的廣播地址;但如果該子網(wǎng)的掩碼為255.255.254.0,該地址就不是指向子網(wǎng)的廣播地址。
指向所有子網(wǎng)的廣播
指向所有子網(wǎng)的廣播也需要了解目的網(wǎng)絡(luò)的子網(wǎng)掩碼,以便與指向網(wǎng)絡(luò)的廣播地址區(qū)分開(kāi)。指向所有子網(wǎng)的廣播地址的子網(wǎng)號(hào)及主機(jī)號(hào)為全1。例如,如果目的子網(wǎng)掩碼為255.255.255.0,那么IP地址128.1.255.255是一個(gè)指向所有子網(wǎng)的廣播地址。然而,如果網(wǎng)絡(luò)沒(méi)有劃分子網(wǎng),這就是一個(gè)指向網(wǎng)絡(luò)的廣播。
多播
IP多播提供兩類(lèi)服務(wù):
1) 向多個(gè)目的地址傳送數(shù)據(jù)。有許多向多個(gè)接收者傳送信息的應(yīng)用:例如交互式會(huì)議系統(tǒng)和向多個(gè)接收者分發(fā)郵件或新聞。如果不采用多播,目前這些應(yīng)用大多采用TCP來(lái)完成(向每個(gè)目的地址傳送一個(gè)單獨(dú)的數(shù)據(jù)復(fù)制)。然而,即使使用多播,某些應(yīng)用可能繼續(xù)采用TCP來(lái)保證它的可靠性。
2) 客戶對(duì)服務(wù)器的請(qǐng)求。例如,無(wú)盤(pán)工作站需要確定啟動(dòng)引導(dǎo)服務(wù)器。目前,這項(xiàng)服務(wù)是通過(guò)廣播來(lái)提供的(正如BOOTP),但是使用多播可降低不提供這項(xiàng)服務(wù)主機(jī)的負(fù)擔(dān)。
多播組地址
圖2顯示了D類(lèi)IP地址的格式。

圖2:D類(lèi)IP地址格式
多播組地址包括為1110的最高4 bit和多播組號(hào)。它們通常可表示為點(diǎn)分十進(jìn)制數(shù),范圍
從224.0.0.0到239.255.255.255。
能夠接收發(fā)往一個(gè)特定多播組地址數(shù)據(jù)的主機(jī)集合稱(chēng)為主機(jī)組(host group)。一個(gè)主機(jī)組可跨越多個(gè)網(wǎng)絡(luò)。主機(jī)組中成員可隨時(shí)加入或離開(kāi)主機(jī)組。主機(jī)組中對(duì)主機(jī)的數(shù)量沒(méi)有限制,同時(shí)不屬于某一主機(jī)組的主機(jī)可以向該組發(fā)送信息。
一些多播組地址被IANA確定為知名地址。它們也被當(dāng)作永久主機(jī)組,這和TCP及UDP中的熟知端口相似。例如,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用作SGI公司的dogfight應(yīng)用。
多播組地址到以太網(wǎng)地址的轉(zhuǎn)換
IANA擁有一個(gè)以太網(wǎng)地址塊,即高位24 bit為00:0 0:5e,這意味著該地址塊所擁有的地址范圍從00:0 0:5e: 00:0 0:00到00:0 0:5e:ff:ff:ff。IANA將其中的一半分配為多播地址。為了指明一個(gè)多播地址,任何一個(gè)以太網(wǎng)地址的首字節(jié)必須是01,這意味著與IP多播相對(duì)應(yīng)的以太網(wǎng)地址范圍從01:0 0:5e: 00:0 0:00到01:0 0:5e:7f:ff:ff。
這種地址分配將使以太網(wǎng)多播地址中的23 bit與IP多播組號(hào)對(duì)應(yīng)起來(lái),通過(guò)將多播組號(hào)中的低位23 bit映射到以太網(wǎng)地址中的低位23 bit實(shí)現(xiàn),這個(gè)過(guò)程如圖3所示。

圖3 D類(lèi)IP地址到以太網(wǎng)多播地址的映射
由于多播組號(hào)中的最高5 bit在映射過(guò)程中被忽略,因此每個(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.53.00.40.20。
既然地址映射是不唯一的,那么設(shè)備驅(qū)動(dòng)程序或IP層(見(jiàn)圖1)就必須對(duì)數(shù)據(jù)報(bào)進(jìn)行過(guò)濾。因?yàn)榫W(wǎng)卡可能接收到主機(jī)不想接收的多播數(shù)據(jù)幀。另外,如果網(wǎng)卡不提供足夠的多播數(shù)據(jù)幀過(guò)濾功能,設(shè)備驅(qū)動(dòng)程序就必須接收所有多播數(shù)據(jù)幀,然后對(duì)它們進(jìn)行過(guò)濾。
單個(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è)過(guò)程就是“加入一個(gè)多播組”(在同一主機(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ò)以外需要通過(guò)路由器轉(zhuǎn)發(fā)多播數(shù)據(jù)時(shí),復(fù)雜性就增加了。需要有一個(gè)協(xié)議讓多播路由器了解確定網(wǎng)絡(luò)中屬于確定多播組的任何一個(gè)主機(jī)。這個(gè)協(xié)議就是Internet組管理協(xié)議(IGMP)
FDDI和令牌環(huán)網(wǎng)絡(luò)中的多播
FDDI網(wǎng)絡(luò)使用相同的D類(lèi)IP地址到48 bit FDDI地址的映射過(guò)程。令牌環(huán)網(wǎng)絡(luò)通常使用不同的地址映射方法,這是因?yàn)榇蠖鄶?shù)令牌控制中的限制。
posted on 2008-08-28 11:07
水 閱讀(3702)
評(píng)論(2) 編輯 收藏 引用 所屬分類(lèi):
tcp/ip