Bài giảng Lập trình mạng - Chương 3: Lập trình Multicasting

1. Giới thiệu về multicast

- Multicast : phát tán thông tin tới một nhóm địa chỉ một cách đồng thời.

Root multicast và non –root multicast

o Root multicast: một thành viên đóng vai trò là root phát tán thông tin tới các

lá leaf, root truyền thông tin đồng thời tới các lá, lá chỉ truyền thông tin về

root mà không thể truyền thông tin sang lá khác

o Non root multicast: tất cả các thành viên là các lá (leaf) , lá truyền thông tin

tới tất cả các lá khác

Bài giảng Lập trình mạng - Chương 3: Lập trình Multicasting trang 1

Trang 1

Bài giảng Lập trình mạng - Chương 3: Lập trình Multicasting trang 2

Trang 2

Bài giảng Lập trình mạng - Chương 3: Lập trình Multicasting trang 3

Trang 3

Bài giảng Lập trình mạng - Chương 3: Lập trình Multicasting trang 4

Trang 4

Bài giảng Lập trình mạng - Chương 3: Lập trình Multicasting trang 5

Trang 5

Bài giảng Lập trình mạng - Chương 3: Lập trình Multicasting trang 6

Trang 6

Bài giảng Lập trình mạng - Chương 3: Lập trình Multicasting trang 7

Trang 7

Bài giảng Lập trình mạng - Chương 3: Lập trình Multicasting trang 8

Trang 8

Bài giảng Lập trình mạng - Chương 3: Lập trình Multicasting trang 9

Trang 9

Bài giảng Lập trình mạng - Chương 3: Lập trình Multicasting trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 17 trang xuanhieu 6740
Bạn đang xem 10 trang mẫu của tài liệu "Bài giảng Lập trình mạng - Chương 3: Lập trình Multicasting", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Lập trình mạng - Chương 3: Lập trình Multicasting

Bài giảng Lập trình mạng - Chương 3: Lập trình Multicasting
Chương 3: Lập trình Multicasting
 Chương 3
1. Giớithiệuvề multicast
- Multicast : phát tán thông tin tới một nhóm địa chỉ một cách đồng thời.
Root multicast và non –root multicast
o Root multicast: một thành viên đóng vai trò là root phát tán thông tin tới các 
 lá leaf, root truyền thông tin đồng thời tới các lá, lá chỉ truyền thông tin về 
 root mà không thể truyền thông tin sang lá khác
o Non root multicast: tất cả các thành viên là các lá (leaf) , lá truyền thông tin 
 tới tất cả các lá khác
 Chương 3
1. Giớithiệuvề multicast
- Unicast: giao tiếpchỉ có một bên gửivàmột bên nhận
- Broadcast: Giao tiếpgửitừ một điểmtớitấtcả các điểm khác, broadcast 
 chỉ có một điểmgửi đi duy nhất. 
 Chương 3
2. Địachỉ IP dùng cho Multicast
-Sử dụng địa chỉ ở lớp D từ 224.0.0.0 tới 239.255.255.255 
-Mộtsố địa chỉ IP đặc biệt dùng cho multicast
 Chương 3
2. Địachỉ IP dùng cho Multicast
- Thành viên phải tham gia vào nhóm mớinhậndữ liệu multicast được
-Chương trình gửigửi cho nhóm thì mọi thành viên trong nhóm đềunhận đc
 dữ liệu Receiver Receiver
 Group Group
 Member 1 Member 1
 Receiver
 Group
 Member 2
 Sender
 Group
 Member 1
 Sender & Receiver
 Chương 3
2. Địachỉ IP dùng cho Multicast
Giao thức IGMP (Internet Group Management Protocol ) :
- Là giao thức mà mỗi máy nhậntraođổi thông tin vớibộ tìm đường
 multicast cụcbộ (Local Multicast Router ) để trở thành một thành viên
 của nhóm multicast
- Cung cấpmộtphương thức qua nó một thành viên có thể tham gia hoặcrời
 bỏ nhóm multicast
- Để tham gia nhóm thành viên gửimột thông báo yêu cầu tham gia nhóm
-Cácbộ tìm đường multicast gửi IGMP query tớitất cả các thành viên để 
 xem các thành viên còn trong nhóm hay không.
 Chương 3
2. Địachỉ IP dùng cho Multicast
Giao thức IGMP (Internet Group Management Protocol ) :
 Joining a Group
 224.1.2.3
 R1 R2 R3
 Report
 Chương 3
 2. Địachỉ IP dùng cho Multicast
 Giao thức IGMP (Internet Group Management Protocol ) :
 Maintaining a Group
 224.1.2.3 224.1.2.3 224.1.2.3
 R1 R2 R3
 XX
Suppressed Report Suppressed
 Query
 Bộ tìm đường định kỳ gửiquery tới 224.0.0.1 (tất cả các thành viên trong mạng
 này)
 Các thành viên có thể trả lời report hoặc không (còn tham gia hoặc không)
 Chương 3
3. Truyền/ nhận multicast
Gửi multicast
-Hiệuchỉnh lại địachỉ trong hàm sendto cho phù hợp, địachỉ là nhóm cần
 multicast
Nhận multicast
-Trước khi multicast, cần tham gia vào nhóm multicast bằng cách gọihàm
 setsockopt
struct ip_mreq mreq; 
setsockopt(sock,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq)); 
ip_mreq có cấu trúc như sau:
struct ip_mreq 
{ 
 struct in_addr imr_multiaddr; /* multicast group to join */ 
 struct in_addr imr_interface; /* interface to join on */
 } 
 Chương 3
3. Truyền/ nhận multicast
Ví dụ tham gia vào một nhóm multicast
SOCKET s; 
SOCKADDR_IN localif; 
struct ip_mreq mreq; 
s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); 
localif.sin_family = AF_INET; 
localif.sin_port = htons(5150); 
localif.sin_addr.s_addr = htonl(INADDR_ANY); 
bind(s, (SOCKADDR *)&localif, sizeof(localif)); 
mreq.imr_interface.s_addr = inet_addr("157.124.22.104");
mreq.imr_multiaddr.s_addr = inet_addr("234.5.6.7"); 
setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&mreq, sizeof(mreq)); 
 Chương 3
3. Truyền/ nhận multicast
Nhậndữ liệu
nbytes=recvfrom(s,msgbuf,MSGBUFSIZE,0, (struct sockaddr *) &localif, 
 sizeof(localif))) ;
 Chương 3
4. Gửitin cậy
Thiếtlập quá trình gửitin cậy qua các bước sau:
 1. Tạo socket multicast tin cậy
 2. Bind socket to INADDR_ANY.
 3. Thiết lập địa chỉ giao tiếp là RM_SET_SEND_IF.
 4. Kết nối socket tới địa chỉ nhóm multicast.
 Chương 3
4. Gửitin cậy
Ví dụ quá trình gửitin cậy:
SOCKET s; 
ULONG sendif; 
SOCKADDR_IN localif, 
multi; char buf[1024]; 
int buflen=1024; 
s = socket(AF_INET, SOCK_RDM, IPPROTO_RM); // SOCK_RDM giống SOCK_DGRAM 
// Bind to INADDR_ANY 
localif.sin_family = AF_INET; 
localif.sin_port = htons(0); 
localif.sin_addr.s_addr = htonl(INADDR_ANY); 
bind(s, (SOCKADDR *)&localif, sizeof(localif)); 
 Chương 3
4. Gửitin cậy
// Set the outgoing interface 
sendif = inet_addr("157.124.22.104"); 
setsockopt(s, IPPROTO_RM, RM_SET_SEND_IF, (char *)&sendif, sizeof(sendif)); 
// Connect the socket to the multicast destination 
multi.sin_family = AF_INET;
multi.sin_port = htons(5150); 
multi.sin_addr.s_addr = 
inet_addr("234.5.6.7"); connect(s, (SOCKADDR *)&multi, sizeof(multi)); 
// Send the data 
send(s, buf, buflen, 0); // Close up the session 
closesocket(s); 
 Chương 3
5. Nhận tin cậy
Thiếtlập quá trình nhậntin cậy qua các bước sau:
 1. Tạo socket multicast tin cậy
 2. Bind socket địa chỉ nhóm multicast.
 3. Nếu chương trình nhận cần lắng nghe trên giao tiếp cụ thể thì gọi 
 setsockopt và RM_ADD_RECEIVE_IF cho từng interface đó
 4. Gọi listen
 5. Chờ đợi accept
 Chương 3
5. Nhận tin cậy
Ví dụ nhận tin cậy:
SOCKET s, ns; 
SOCKADDR_IN multi, safrom; 
ULONG localif; 
char buf[1024]; 
int buflen=1024, fromlen, rc; 
s = socket(AF_INET, SOCK_RDM, IPPROTO_RM); 
multi.sin_family = AF_INET; 
multi.sin_port = htons(5150); 
multi.sin_addr.s_addr = inet_addr("234.5.6.7"); 
bind(s, (SOCKADDR *)&multi, sizeof(multi)); 
listen(s, 10); 
 Chương 3
5. Nhận tin cậy
Ví dụ nhận tin cậy:
localif = inet_addr("157.124.22.104"); 
setsockopt(s, IPPROTO_RM, RM_ADD_RECEIVE_IF, (char *)&localif, sizeof(localif)); 
fromlen = sizeof(safrom); 
ns = accept(s, (SOCKADDR *)&safrom, &fromlen); 
closesocket(s);
// Don't need to listen anymore 
// start receiving data . . . 
while (1) { 
rc = recv(ns, buf, buflen, 0); 
if (rc == SOCKET_ERROR) 
{ if (WSAGetLastError() == WSAEDISCON) 
break; 
else { // An unexpected error }
}
} 
closesocket(ns);

File đính kèm:

  • pdfbai_giang_lap_trinh_mang_chuong_3_lap_trinh_multicasting.pdf