Tài liệu Chương 6 LẬP TRÌNH MULTICAST ppt

22 600 5
Tài liệu Chương 6 LẬP TRÌNH MULTICAST ppt

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Chương 6 1 LẬP TRÌNH MULTICAST Nội dung  Khái niệm lập trình Multicast  Địa chỉ MulticastLập trình Multicast với winsock 2  Lập trình Multicast với Java Khái niệm lập trình Muticast  Một máy có thể gửi message cho nhiều máy theo một địa chỉ (Multicast group) nào đó.  Chỉ cần gửi 1 packet, nhiều địa chỉ có thể nhận được Lợi ích: 3  Lợi ích:  Xử lý thông tin nhanh  Giảm lưu lượng dữ liệu trên đường truyền  Giải quyết bài toán quan hệ 1-nhiều và nhiều nhiều trên mạng Khái niệm Multicast Group  Multicast group:  là một địa chỉ, tương tự như địa chỉ của một Host.  nhận diện như địa chỉ máy đích một cách 4  nhận diện như địa chỉ máy đích một cách logic, hoặc một nhóm (group)  Các hosts (thuộc hay không thuộc nhóm) có thể gửi dữ liệu cho nhóm, tham gia hay rời bỏ nhóm. Ví dụ Multicast 5 Các lớp hiện thực Multicast  Level 0: Không hỗ trợ cho Multicast  Level 1: Hỗ trợ nhận Multicast packet nhưng không hỗ trợ gửi  Các host có thể nhận một số phần dịch vụ của 6  Các host có thể nhận một số phần dịch vụ của Multicast như định vị tài nguyên và nhận báo cáo  Các host không thể tham gia Multicast group  Level 2: hỗ trợ gửi nhận Multicast packet  Cho phép các host tham gia và rời bỏ các Multicast group Địa chỉ Multicast  Miêu tả trong RFC 1112  Sử dụng IGMP (Internet Group Multicasting Protocol)  Sử dụng lớp D của địa chỉ IP: từ 224.0.0.0 đến 239.255.255.255 7 đến 239.255.255.255  Mỗi địa chỉ IP trong khoảng này biểu diễn cho một nhóm multicast  Một địa chỉ IP trong nhóm multicast được sử dụng chung cho tất cả các thành viên của nhóm để gửi và nhận dữ liệu. Lập trình Multicast  Phải sử dụng giao thức UDP  Các bước lập trình multicast:  Tạo một UDP socket  Tham gia một nhóm multicast chỉ ra bởi một địa 8  Tham gia một nhóm multicast chỉ ra bởi một địa chỉ IP lớp D  Nhận các packet gửi đến cho nhóm đó  Gửi các packet đến các máy trong nhóm thông qua địa chỉ IP của nhóm.  Rời bỏ khỏi nhóm multicast  Đóng socket Một số vấn đề của multicast  Nhóm động: các host có thể tham gia và rời bỏ nhóm bất kỳ thời điểm nào  Một host có thể tham gia một nhóm multicast bằng cách gừi một IGMP messgae 9 multicast bằng cách gừi một IGMP messgae  Một nhóm có số thành viên không giới hạn  Một máy có thể gửi một message cho một nhóm mà không cần tham gia vào nhóm đó. Time-To-Live (TTL)  TTL là thời gian sống của multicast packet tính từ khi nó được gửi đi đến khi được hủy bởi các router.  TTL=0 : packet không được gửi 10  TTL=0 : packet không được gửi  TTL=1 (mặc định) : packet chỉ gửi trong mạng cục bộ.  TTL>1: packet có thể gửi qua nhiều mạng khác nhau [...]... sizeof(imr)); // Nhận dữ liệu qua hàm recvfrom() 18 Lập trình Multicast với Java  Sử dụng socket kiểu MulticastSocket kế thừa từ lớp DatagramSocket  MulticastSocket là (UDP) DatagramSocket nhưng có thêm khả năng tham gia hay rời bỏ multicast group" 19 MulticastSocket  Khởi tạo public MulticastSocket(); public MulticastSocket(int port);  Tham gia nhóm public void joinGroup(InetAddress multicastAddr) ... ttl=1; setsockopt(sock,IPPROTO_IP,IP _MULTICAST_ TTL, (char*)&ttl,sizeof(ttl));  Xem giá trị của TTL int ttl; int sizeofttl=sizeof(ttl); getsockopt(sock, IPPROTO_IP,IP _MULTICAST_ TTL, (char*)&ttl,&sizeofttl); 16 Lập trình Multicast với Winsock- Gửi multicast packet // Tạo socket để gửi multicast packet Socket my_sock=socket(AF_INET, SOCK_DGRAM,0); // Khai báo địa chỉ multicast struct sockaddr_in addr_dest;... addr_dest.sin_addr.s_addr = inet_addr (MULTICAST_ ADDR); addr_dest.sin_port = htons(PORT_NUM); // Đặt giá trị TTL int ttl = 1; setsockopt(my_sock, IPPROTO_IP, IP _MULTICAST_ TTL, (char *)&ttl, sizeof(ttl)); // Gửi dữ liệu qua hàm sendto() sendto(my_sock, buffer, sizeof(buffer), 0, (struct sockaddr*)&addr_dest, sizeof(addr_dest)); 17 Lập trình Multicast với Winsock- Nhận multicast packet // Tạo socket để nhận multicast packet.. .Lập trình Multicast với Winsock  Winsock hỗ trợ lập trình Multicast trên hai phiên bản giao thức IGMP:  IGMPv2: phiên bản này cho phép các host có tham gia và rời bỏ group được nhận diện bởi địa chỉ IP multicast trên một interface Nhược điểm của phiên bản này là một host có thể “flooding” group làm cho group không thể nhận dữ liệu từ các host khác Phiên bản này... ip_mreq_source imr; imr.imr_multiaddr.s_addr = inet_addr (MULTICAST_ ADDR); imr.imr_interface.s_addr = INADDR_ANY; err= setsockopt(multiSocket,IPPROTO_IP,IP_ADD_MEMBERSHIP, (char *)&imr, sizeof(imr)); 14 Lập trình Multicast với Winsock – Rời bỏ nhóm struct ip_mrep imr; err= setsockopt(multiSocket,IPPROTO_IP, IP_DROP_MEMBERSHIP, (char *)&imr, sizeof(imr)); 15 Lập trình Multicast với Winsock- Giá trị TTL  Thay đổi... IP_DROP_SOURCE_MEMBERSHIP IP_BLOCK_SOURCE IP_UNBLOCK_SOURCE 12 Lập trình Multicast với Winsock  Sử dụng Socket với kiểu SOCK_DGRAM  Sử dụng cấu trúc ip_mreq để định địa chỉ nhóm: struct ip_mreq{ struct in_addr irm_multiaddr; struct in_addr irm_interface; }  Sử dụng hàm setsockopt tác động lên Socket 13 Lập trình Multicast với Winsock – Tham gia nhóm #define MULTICAST_ ADDR “225.1.1.1” Socket multiSocket; struct... này không cho phép một host có thể lựa chọn nhận dữ liệu từ nguồn cụ thể nào , và không có khả năng “block” host đang “flooding”  IGMPv3: phiên bản này cho phép lựa chọn nguồn dữ liệu để nhận và cho phép ứng dụng “block” quá trình gửi dữ liệu của host nào đó 11 Socket option  IGMPv2     IP_ADD_MEMBERSHIP IP_DROP_MEMBERSHIP IPV6_ADD_MEMBERSHIP IPV6_DROP_MEMBERSHIP  IGMPv3     IP_ADD_SOURCE_MEMBERSHIP... setTimeToLive(int ttl) 20 MulticastSocket  Chỉ định giao tiếp mạng public InetAddress getInterface(); public void setInterface(InetAddress inf);  Gửi multicast packet public void send(DatagramPacket p, byte ttl); public void send(DatagramPacket p);  Nhận multicast packet public void receive(DatagramPacket p);  Rời khỏi nhóm public void leaveGroup(InetAddress multicastAddr); 21 Ví dụ MulticastSocket String... MulticastSocket String msg = "Hello"; InetAddress group = InetAddress.getByName("228.5 .6. 7"); // Tạo socket, tham gia nhóm MulticastSocket msck = new MulticastSocket (67 89); msck.joinGroup(group); //Gửi packet chua msg cho group DatagramPacket outPacket = new DatagramPacket(msg.getBytes(), msg.length(), group, 67 89); msck.send(outPacket); // Nhận packet từ group byte[] buf = new byte[1000]; DatagramPacket... báo địa chỉ cục bộ và bind() đến port muốn nhận dữ liệu struct sockaddr_in my_addr; my_addr.sin_family = AF_INET; my_addr.sin_addr.s_addr = INADDR_ANY; my_addr.sin_port = htons(PORT_NUM); bind(multi_sock,(struct sockaddr *)&my_addr,sizeof(my_addr)); // Phải tham gia nhóm để nhận được packet struct ip_mreq_source imr; imr.imr_multiaddr.s_addr = inet_addr (MULTICAST_ ADDR); imr.imr_interface.s_addr = INADDR_ANY; . Chương 6 1 LẬP TRÌNH MULTICAST Nội dung  Khái niệm lập trình Multicast  Địa chỉ Multicast  Lập trình Multicast với winsock 2  Lập trình Multicast. một nhóm multicast  Một địa chỉ IP trong nhóm multicast được sử dụng chung cho tất cả các thành viên của nhóm để gửi và nhận dữ liệu. Lập trình Multicast

Ngày đăng: 24/12/2013, 18:15

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan