組播主機需要的環境
如果要在一台主機上執行多播程式,這台主機支援igmp協議。此協議用於加入乙個多播組,離開乙個多播組等而向路由器傳送命令。現在的igmp協議最高版本為v3(rfc3376),現在有很少數的unix實現了,windowxp己實現。大部分主機,路由器實現的版本為v2(rfc2236),而v1版本(rfc1112)的執行是從v2中可以實現。v2與v1的區別就是把v1版本中的4位版本欄位跟4位操作型別字段合併成了8位操作型別,在v1中不用使用的8位字段在v2中被稱之為最大響應時間。用c寫v2的igmp結構即為:
struct igmp
;組播需要的網路環境
如果主機想獲得多播報文,相鄰的路由器也必須支援igmp,如果想獲得internet上的多播報文,主機到server的這個路徑中所遇到的路由器必須全部支援igmp,路由器還必須支援源發現協議,如msdp,pim_dm,pim_sm等。
組播的等級
level 0 不支援ip多播
level 1 只支援向多播組傳送資料而不能接收多播組的資料
level 2 ip多播全支援
對這三個等級的理解應該從socket上。建立了乙個socket以後可以對它進行設定,看它需求什麼。一般現在存在的網路程式就就是level0了,因為它們不支援多播,如用於連線web伺服器獲取網頁內容的那個socket就應該屬於level0。
乙個演唱會現場網路直播,由於採用了多播,伺服器要向乙個多播組傳送報文,因為他不需要獲取接收者的報文,所以可以建立乙個socket只向特定的多播組傳送資料就可以了,這個socket應該就是level 1
乙個網路會議的例子,由於會議是有多個人參加的,每個人都需要接收其它人的報文,所以建立了乙個socket,首先把這個socket加入到乙個多播組,使其能接收多播組的資料,然後它也可以用這個socket向自己加入的多播組傳送自己的狀態。這個socket就應該是level 2了
組播程式設計相關的socket結構和函式
int setsockopt(socket s, int level, int optname, const char far * optval, int optlen);
int getsockopt(socket s, int level, int optname, char far * optval, int far * optlen);
level必須為ipproto_ip。不要問為什麼。這兩個函式在組播幹什麼呢?獲取系統對組播的設定(如ttl),加入乙個多播組,離開乙個多播組就用setsockopt 。optname就是在組播起到最主要作用的乙個字段,與組播相關的可取值
可取值 setsockopt getsockopt
ip_multicast_loop 支援 支援
ip_multicast_ttl 支援 支援
ip_multicast_if 支援 支援
ip_add_membership 支援 不支援
ip_drop_membership 支援 不支援
1. ip_multicast_loop
當接收者加入到乙個多播組以後,再向這個多播組傳送資料,這個欄位的設定是否允許再返回到本身。
2. ip_multicast_ttl
預設情況下,多播報文的ttl被設定成了1,也就是說到這個報文在網路傳送的時候,它只能在自己所在的網路傳送,當要向外傳送的時候,路由器把ttl減1以後變成了0,這個報文就已經被discard了。例:
char ttl;
ttl = 2;
setsockopt(s, ipproto_ip, ip_multicast_ttl, (char*)ttl, sizeof(ttl));
3. ip_multicast_if
傳送多播報文時用的本地介面,預設情況下被設定成了本地介面的第乙個位址。
未完4. ip_add_membership
這個option和下面的option是實現多播必不可少的,它用於加入乙個多播組,例:
struct ip_mreq ipmr;
ipmr.imr_inte***ce.s_addr = htonl(inaddr_any);
ipmr.imr_multiaddr.s_addr = inet_addr("234.5.6.7");
setsockopt(s, ipproto_ip, ip_addr_membership, (char*)&ipmr, sizeof(ipmr));
5. ip_drop_membership
用於離開乙個多播組,使用方法同ip_addr_membership。
struct ip_mreq ipmr;
int len;
setsockopt(s, ipproto_ip, ip_drop_membership, (char*)&ipmr, &len);
IP組播與組播協議
在internet上,多 業務諸如 圖1.1 1.ip組播 ip組播是指乙個ip報文向乙個 主機組 的傳送,這個包含零個或多個主機的主機組由乙個單獨的 ip位址標識。主機組位址也稱為 組播位址 或者d類位址。除了目的位址部分,組播報文與普通報文沒有區別,網路盡力傳送組播報文但是並不保證一定送達。主機...
組播位址,IP組播位址
ip組播位址 組播協議的位址在 ip協議中屬於 d類位址。d類位址是從 224.0.0.0 到239.255.255.255 之間的ip 位址其中 224.0.0.0 到224.0.0.255 是被保留的位址。組播協議的位址範圍類似於一般的單播位址,被劃分為兩個大的位址範圍,239.0.0.0 23...
IP組播與組播協議
在internet上,多 業務諸如 流 伺服器必須為每乙個接收者提供乙個相同內容的ip報文拷貝,同時 網路上也重複地傳輸相同內容的報文,占用了大量資源。如圖1.1所示。雖然ip廣播允許乙個主機把乙個ip報文傳送給同乙個網路的所有主機,但是由於不是所有的主機都需要這些報文,因而浪費了網路資源。在這種情...