2 Cơ SỞ LÝ THUYẾT
2.4.6 Làm sao viết một ứng dụng dùng Multicast trong Unix
Trên Unix mà cụ thể là Sun-Solaris , TGMP đã được hiện thực, vấn đề quan
SVTH :NGUYỄN VĂN Nối - 59406114
Xây dưng dich vu tính toán phân bô" CBHD : K.S. THOAI NAM
2.4.6.1 Gởi IP Multicast Datagram:
IP Multicasting hiện tại chỉ cung cấp AF_INET Socket loại SOCK_DGRAM
và SOCK_RAW và chỉ trên subnetworks mà diver giao tiếp cung cấp cơ chế Multicasting.
Để gởi Multicast datagram ,phải chỉ định địa chỉ IP Multicast trong khoảng
từ 224.0.0.0 đến 239.255.255.255 (Class D) trong địa chỉ đích của hàm hệ thông
sendto(). Mặc định ,IP Multicast datagrams được gởi với thời gian sông (time- to-live
TTL ) là 1 để ngăn chặn các IP Multicast datagrams này không bị “forwarded” trong một subnetwork đơn. Các Socket option mới cho phép giá trị TTL trong Multicast datagarm theo sau cóthể gán bất kỳ giá trị nào từ 0 đến 255 để điều khiển
tầm vực Multicast: u_char ttl;
setsockopt(sock,IPPROTO_IP,IP_MULTICAST_TLL,&ttl,sizeof(ttl)); Multicast datagram với TTL = 0 sẽ không đượv gởi trên bất kỳ một subnet
nào nhưng nó được gởi trên máy local nếu host gởi Multicast datagram đó
Site và region chưa được định nghiã chính xác , site được chia thành các các
đơn vị quản trị nhỏ hơn ,đó là vấn đề cục bộ mà thôi.Một ứng dụng thường chọn TTL ban đầu thường nhỏ hơn các giá trị trên và
tăng từ từ lên từ 0,1,2,4,8,16,32.
Xây dưng dich vu tính toán phân bô" CBHD : K.S. THOAI NAM Nếu Multicast datagram được gởi cho group mà chính host gởi đó thuộc về
,thì một bảng copy của datagarm này mặc định là sẽ được loop back (gởi lại ) bởi
lớp IP cho cho quá trình gởi ở host cục bộ đó. Một Socket option khác cho phép quá
trình gởi có thể điều khiển cho hay không cho datagram loop back. u_char loop;
setsockopt(sock,IPPROTO_IP,IP_MULTICAST_LOOP,&loop,sizeof(lo op));
với giá trị loop bằng 0 ,không cho loop back và 1 là cho phép loop back. Socket option này cung cấp hiệu quả cho những ứng dụng mà có một hoặc
nhiều thể hiện trên một host.
2.4.Ó.2 Nhận IP Multicast datagrams
Trước khi một host nuốn nhận được ĨP Multicast datagram ,nó là thành viên
của một Multicast group nào đó (có thề là của một hoặc nhiều group). Một process
có thể yêu cầu host tham gia vào Multicast group bằng cách dùng Socket option :
struct ip_mreq mreq;
setsockopt(sock,ĨPPROTO_TP,TP_ADD_MEMBERSHIP,&mreq,sizeof (mreq
với mreq có cấu trúc sau :
struct ip_mreq { struct in_addr imr_multiadr; struct in_addr imr_interface; }.
loại bỏ. Một thành viên kết hợp với một Socket không cần thiết phải xác định datagrams nào được nhận bởi Socket đó. Những packet Multicast đến sẽ được kernel
của lớp IP nhận và phân phát những Multicast datagram cho Socket đã chỉ định bằng
destination port. Để nhận Multicast datagarms được gởi bởi một port đã được chỉ
định, cần thiết phải bind() một điạ chỉ local (local port,local address). Như vậy
sẽ có
nhiều hơn một process sẽ bind cùng một SOCK_DGRAM UDP port nếu hàm hệ
thông bind() được gọi trước bởi : int one = 1;
setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&one,sizeof(one)); (Xem chi tiết trong file dce_mcast.c)