Chương 6 LẬP TRÌNH MULTICAST

Chia sẻ: TRẦN THỊ THANH HẰNG | Ngày: | Loại File: PDF | Số trang:22

0
335
lượt xem
84
download

Chương 6 LẬP TRÌNH MULTICAST

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Chương 6 LẬP TRÌNH MULTICAST 1 Nội dung Khái niệm lập trình Multicast Địa chỉ Multicast Lập trình Multicast với winsock Lập trình Multicast với Java 2 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: 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 3 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ư...

Chủ đề:
Lưu

Nội dung Text: Chương 6 LẬP TRÌNH MULTICAST

  1. Chương 6 LẬP TRÌNH MULTICAST 1
  2. Nội dung  Khái niệm lập trình Multicast  Địa chỉ Multicast  Lập trình Multicast với winsock  Lập trình Multicast với Java 2
  3. 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:  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 3
  4. 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 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. 4
  5. Ví dụ Multicast 5
  6. 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 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 6
  7. Đị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  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. 7
  8. 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 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 8
  9. 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  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 đó. 9
  10. 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  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 10
  11. 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 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
  12. Socket option  IGMPv2  IP_ADD_MEMBERSHIP  IP_DROP_MEMBERSHIP  IPV6_ADD_MEMBERSHIP  IPV6_DROP_MEMBERSHIP  IGMPv3  IP_ADD_SOURCE_MEMBERSHIP  IP_DROP_SOURCE_MEMBERSHIP  IP_BLOCK_SOURCE  IP_UNBLOCK_SOURCE 12
  13. 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
  14. Lập trình Multicast với Winsock – Tham gia nhóm #define MULTICAST_ADDR “225.1.1.1” ... Socket multiSocket; ... struct 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
  15. 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
  16. Lập trình Multicast với Winsock- Giá trị TTL  Thay đổi giá trị TTL int 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
  17. 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_family = AF_INET; 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
  18. Lập trình Multicast với Winsock- Nhận multicast packet // Tạo socket để nhận multicast packet Socket multi_sock=socket(AF_INET, SOCK_DGRAM,0); // Khai 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; setsockopt(multi_sock,IPPROTO_IP,IP_ADD_MEMBERSHIP, (char *)&imr, sizeof(imr)); // Nhận dữ liệu qua hàm recvfrom() ... 18
  19. 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
  20. MulticastSocket  Khởi tạo public MulticastSocket(); public MulticastSocket(int port);  Tham gia nhóm public void joinGroup(InetAddress multicastAddr)  TTL public int getTimeToLive() public void setTimeToLive(int ttl) 20
Đồng bộ tài khoản