Làm sao viết một ứng dụng dùng Multicast trong Unix

Một phần của tài liệu Xây dựng dịch vụ tính toán phân bố (distributed computing environment DCE) (Trang 42 - 44)

2 Cơ SỞ LÝ THUYẾT

2.4.6Là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)

Một phần của tài liệu Xây dựng dịch vụ tính toán phân bố (distributed computing environment DCE) (Trang 42 - 44)