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

Chương 3: Lp trình Multicasting  
Chương 3  
1. Gii thiu vmulticast  
- Multicast : phát tán thông tin ti mt nhóm địa chmt cách đồng thi.  
Root multicast và non –root multicast  
o Root multicast: mt thành viên đóng vai trò là root phát tán thông tin ti các  
lá leaf, root truyn thông tin đồng thi ti các lá, lá chtruyn thông tin về  
root mà không thtruyn thông tin sang lá khác  
o Non root multicast: tt ccác thành viên là các lá (leaf) , lá truyn thông tin  
ti tt ccác lá khác  
Chương 3  
1. Gii thiu vmulticast  
- Unicast: giao tiếp chcó mt bên gi và mt bên nhn  
- Broadcast: Giao tiếp gi tmt đim ti tt ccác đim khác, broadcast  
chcó mt đim gi đi duy nht.  
Chương 3  
2. Địa chIP dùng cho Multicast  
- Sdng địa chỉ ở lp D t224.0.0.0 ti 239.255.255.255  
- Mt số địa chIP đặc bit dùng cho multicast  
Chương 3  
2. Địa chIP dùng cho Multicast  
- Thành viên phi tham gia vào nhóm mi nhn dư  
- Chương trình gi gi cho nhóm thi mi thành viên trong nhóm đều nhn đc  
dư liu  
̃ liu multicast được  
̀
̃
Receiver Receiver  
Group  
Member 1  
Group  
Member 1  
Receiver  
Group  
Member 2  
Group  
Member 1  
Sender & Receiver  
Chương 3  
2. Địa chIP dùng cho Multicast  
Giao thc IGMP (Internet Group Management Protocol ) :  
- Là giao thc mà mi máy nhn trao đổi thông tin vi bô  
multicast cc bô (Local Multicast Router ) đê trơ thành mt thành viên  
ca nhóm multicast  
- Cung cp mt phương thc qua nó mt thành viên có thê  
bo nhóm multicast  
Đê tham gia nhóm thành viên gi mt thông báo yêu cu tham gia nhóm  
- Các bô tìm đường multicast gi IGMP query ti tt ccá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 hoc ri  
̉
-
̉
̣
̉
Chương 3  
2. Địa chIP dùng cho Multicast  
Giao thc IGMP (Internet Group Management Protocol ) :  
Joining a Group  
224.1.2.3  
R1  
R3  
Report  
Chương 3  
2. Địa chIP dùng cho Multicast  
Giao thc 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  
̀
gi query ti 224.0.0.1 (tt ccác thành viên trong mng  
tra li report hoc không (còn tham gia hoc không)  
Các thành viên có thê  
̉
̉
Chương 3  
3. Truyn/ nhn multicast  
Gi multicast  
- Hiu chnh li địa chtrong hàm sendto cho phù hp, địa chlà nhóm cn  
multicast  
Nhn multicast  
- Trước khi multicast, cn tham gia vào nhóm multicast bng cách gi hàm  
setsockopt  
struct ip_mreq mreq;  
setsockopt(sock,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq));  
ip_mreq có cu 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. Truyn/ nhn multicast  
Ví dtham gia vào mt 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. Truyn/ nhn multicast  
Nhn dliu  
nbytes=recvfrom(s,msgbuf,MSGBUFSIZE,0, (struct sockaddr *) &localif,  
sizeof(localif))) ;  
Chương 3  
4. Gi tin cy  
Thiết lp quá trình gi tin cy qua các bước sau:  
1. To socket multicast tin cy  
2. Bind socket to INADDR_ANY.  
3. Thiết lp địa chgiao tiếp là RM_SET_SEND_IF.  
4. Kết ni socket ti địa chnhóm multicast.  
Chương 3  
4. Gi tin cy  
Ví dquá trình gi tin cy:  
SOCKET s;  
ULONG sendif;  
SOCKADDR_IN localif,  
multi; char buf[1024];  
int buflen=1024;  
s = socket(AF_INET, SOCK_RDM, IPPROTO_RM); // SOCK_RDM ging 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. Gi tin cy  
// 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. Nhn tin cy  
Thiết lp quá trình nhn tin cy qua các bước sau:  
1. To socket multicast tin cy  
2. Bind socket địa chnhóm multicast.  
3. Nếu chương trình nhn cn lng nghe trên giao tiếp cththì gi  
setsockopt và RM_ADD_RECEIVE_IF cho tng interface đó  
4. Gi listen  
5. Chờ đợi accept  
Chương 3  
5. Nhn tin cy  
Ví dnhn tin cy:  
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. Nhn tin cy  
Ví dnhn tin cy:  
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 12/05/2022 1680
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