2. IGMP Version 1
IGMP Version 1使用Query-Response模型來允許群播路由器和多層次交換器來確定在本網段內哪個群播群組是啟動的。在這個模型中,路由器或交換器充當IGMP 查詢路由器,每隔60秒週期性地發送IGMP Version 1 Membership Query給224.0.0.1。啟用群播的所有主機監聽該位址並接收Query Packet。主機以IGMP Version 1 Membership Report回覆,表示它要接收特定Group的Multicast Traffic;該網段中的路由器或交換器就可以了解群播群組中有哪些接收者。
主機可以通過發送一個或多個主動的Membership Report封包表明加入(Join)一個群播群組。如: 某個主機主動發送一個Report封包表明要接收群播群組(224.1.1.1)的流量。
主機通過停止處理群播群組訊務以及不回應IGMP Query的方式來離開群播群組。
IGMP Version 1依靠L3的IP Multicast Routing Protocol(PIM、DVMRP等)來解決同一網段中哪個路由器或多層次交換器成為查詢路由器。查詢路由器發送IGMP Version 1的Query來確定哪個群播群組是啟動的。通常Designated Router會被選擇為查詢路由器。IGMP Version 1的封包有2種:Member Query(224.0.0.1, 每60秒查詢一次)與Member Report。
主機群可以加入群播群組,但是IGMP Version 1沒有Leave訊息,路由器或多層次交換器需透過一個逾時機制的運作,讓那些沒有人接收的訊務不再送到不需要的主機成員。
圖5.1 IGMP Version 1封包格式
表 5.2 IGMP所使用Checksum函式
static unsigned short in_cksum(unsigned short *addr, int len) { int nleft = len; int sum = 0; unsigned short *w = addr; unsigned short answer = 0; while (nleft > 1) { sum += *w++; nleft -= 2; } if (nleft == 1) { *(unsigned char*)(&answer) = *(unsigned char*)w; sum += answer; } sum = (sum >> 16) + (sum & 0xffff); answer = ~sum; return (answer); } |