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ớ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  
Chương 3  
1. Giới thiệu về multicast  
- Unicast: giao tiếp chỉ có một bên gửi và một bên nhận  
- Broadcast: Giao tiếp gửi từ một điểm tới tất cả các điểm khác, broadcast  
chỉ có một điểm gửi đi duy nhất.  
Chương 3  
2. Địa chỉ 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ột số địa chỉ IP đặc biệt dùng cho multicast  
Chương 3  
2. Địa chỉ IP dùng cho Multicast  
- Thành viên phải tham gia vào nhóm mới nhận dư  
- Chương trình gửi gửi cho nhóm thi mọi thành viên trong nhóm đều nhận đc  
dư liệu  
̃ liệu multicast được  
̀
̃
Receiver Receiver  
Group  
Member 1  
Group  
Member 1  
Receiver  
Group  
Member 2  
Group  
Member 1  
Sender & Receiver  
Chương 3  
2. Địa chỉ IP dùng cho Multicast  
Giao thức IGMP (Internet Group Management Protocol ) :  
- Là giao thức mà mỗi máy nhận trao đổi thông tin với bô  
multicast cục bô (Local Multicast Router ) đê trơ thành một thành viên  
của nhóm multicast  
- Cung cấp một phương thức qua nó một thành viên có thê  
bo nhóm multicast  
Đê tham gia nhóm thành viên gửi một thông báo yêu cầu tham gia nhóm  
- Các bô tìm đường multicast gửi IGMP query tới tất cả các thành viên đê  
xem các thành viên còn trong nhóm hay không.  
̣ tìm đường  
̣
̉
̉
̉
tham gia hoặc rời  
̉
-
̉
̣
̉
Chương 3  
2. Địa chỉ IP dùng cho Multicast  
Giao thức IGMP (Internet Group Management Protocol ) :  
Joining a Group  
224.1.2.3  
R1  
R3  
Report  
Chương 3  
2. Địa chỉ IP dùng cho Multicast  
Giao thức IGMP (Internet Group Management Protocol ) :  
Maintaining a Group  
224.1.2.3  
Report  
224.1.2.3  
224.1.2.3  
R1  
R3  
SuppXressed  
SuppXressed  
Query  
Bô  
này)  
̣
tìm đường định ky  
̀
gửi query tới 224.0.0.1 (tất cả các thành viên trong mạng  
tra lời report hoặc không (còn tham gia hoặc không)  
Các thành viên có thê  
̉
̉
Chương 3  
3. Truyền/ nhận multicast  
Gửi multicast  
- Hiệu chỉnh lại địa chỉ trong hàm sendto cho phù hợp, địa chỉ 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ọi hà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_IN
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, IPPROTOeq, sizeof(mreq));  
Chương 3  
3. Truyền/ nhận multicast  
Nhận dữ liệu  
nbytes=recvfrom(s,msgbuf,MSGBUFSIZE,0, (struct sockaddr *) &localif,  
sizeof(localif))) ;  
Chương 3  
4. Gửi tin cậy  
Thiết lập quá trình gửi tin 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ửi tin cậy  
Ví dụ quá trình gửi tin 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ửi tin 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(51
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ết lập quá trình nhận tin 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
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 an
// 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);  
pdf 17 trang Thùy Anh 13820 Free
Bạn đang xem 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

File đính kèm:

  • pdfbai_giang_lap_trinh_mang_chuong_3_lap_trinh_multicasting.pdf