Multicast এবং Broadcast হলো নেটওয়ার্কিং কৌশল, যা একাধিক ডিভাইসে একসাথে ডেটা পাঠাতে ব্যবহৃত হয়। নেটওয়ার্ক প্রোগ্রামিংয়ে, setsockopt() এবং getsockopt() ফাংশন ব্যবহার করে Multicast এবং Broadcast Options কনফিগার করে বিভিন্ন ডিভাইসে ডেটা ট্রান্সমিশন করা যায়। এগুলোর মাধ্যমে একাধিক সংযোগ দ্রুত এবং কার্যকরভাবে পরিচালনা করা যায়, বিশেষত যেখানে একাধিক ক্লায়েন্টকে একই ডেটা একসাথে পাঠাতে হয়।
1. Multicast
Multicast হলো এমন একটি প্রক্রিয়া, যেখানে একটি ডেটা প্যাকেট একই সাথে একাধিক নির্দিষ্ট ডিভাইসে (Multicast Group) পাঠানো হয়। এটি সাধারণত UDP প্রোটোকল ব্যবহার করে এবং ডিভাইসগুলোতে একই ডেটা স্ট্রিম পৌঁছাতে সক্ষম। Multicast ব্যবহৃত হয় লাইভ ভিডিও স্ট্রিমিং, রিয়েল-টাইম ডেটা শেয়ারিং, এবং লাইভ গেমিংয়ের মতো অ্যাপ্লিকেশনগুলোর জন্য।
Multicast Options এবং তাদের ব্যবহার
IP_MULTICAST_TTL:
- Multicast Packet-এর TTL (Time-to-Live) নির্ধারণ করতে ব্যবহৃত হয়, যা নির্দিষ্ট করে কতগুলি রাউটার Multicast Packet ফরওয়ার্ড করতে পারবে।
- ডিফল্ট TTL মান হলো
1, যা একই নেটওয়ার্কে (local subnet) Multicast সীমাবদ্ধ রাখে। এটি বাড়িয়ে বিভিন্ন নেটওয়ার্কে বা ইন্টারনেটে Multicast করা যায়।
IP_ADD_MEMBERSHIP:
- একটি Socket-কে Multicast Group-এ যোগ করতে ব্যবহৃত হয়, যাতে Socket সেই গ্রুপ থেকে ডেটা প্যাকেট গ্রহণ করতে পারে।
- Multicast Group-এ যোগ দেওয়ার মাধ্যমে, Socket নির্দিষ্ট Multicast Address থেকে ডেটা গ্রহণ করতে সক্ষম হয়।
IP_DROP_MEMBERSHIP:
- একটি Socket-কে Multicast Group থেকে বাদ দিতে ব্যবহৃত হয়।
Multicast Socket তৈরি এবং ব্যবহারের উদাহরণ (C ভাষায়)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/socket.h>
#define PORT 12345
#define GROUP "239.0.0.1" // Multicast Address
int main() {
int sockfd;
struct sockaddr_in multicast_addr;
char message[] = "Hello Multicast!";
int ttl = 5; // TTL মান সেট করা
// UDP Socket তৈরি করা
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
perror("Socket creation failed");
exit(EXIT_FAILURE);
}
// Multicast TTL সেট করা
if (setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl)) < 0) {
perror("Setting TTL failed");
close(sockfd);
exit(EXIT_FAILURE);
}
// Multicast Address এবং Port সেট করা
memset(&multicast_addr, 0, sizeof(multicast_addr));
multicast_addr.sin_family = AF_INET;
multicast_addr.sin_addr.s_addr = inet_addr(GROUP);
multicast_addr.sin_port = htons(PORT);
// Multicast মেসেজ পাঠানো
if (sendto(sockfd, message, sizeof(message), 0, (struct sockaddr*)&multicast_addr, sizeof(multicast_addr)) < 0) {
perror("Sendto failed");
close(sockfd);
exit(EXIT_FAILURE);
}
printf("Multicast message sent!\n");
close(sockfd);
return 0;
}
- এখানে একটি UDP Multicast Socket তৈরি করা হয়েছে, যা নির্দিষ্ট Multicast Address এবং Port-এ একটি মেসেজ পাঠায়।
IP_MULTICAST_TTLসেট করে TTL মান5নির্ধারণ করা হয়েছে।
2. Broadcast
Broadcast হলো এমন একটি প্রক্রিয়া, যেখানে একটি ডেটা প্যাকেট নেটওয়ার্কে সকল ডিভাইসে পাঠানো হয়। এটি সাধারণত UDP প্রোটোকল ব্যবহার করে, এবং একই নেটওয়ার্কে থাকা সব ডিভাইসকে (subnet) একই সাথে ডেটা পাঠায়। Broadcast সাধারণত ডিসকভারি প্রোটোকল বা নেটওয়ার্কের ডিভাইসগুলোকে মেসেজ পাঠাতে ব্যবহৃত হয়।
Broadcast Options এবং তাদের ব্যবহার
SO_BROADCAST:- এটি সক্রিয় করলে একটি Socket Broadcast প্যাকেট পাঠাতে পারে।
- Broadcast ব্যবহার করে একই নেটওয়ার্কে থাকা সমস্ত ডিভাইসে ডেটা পাঠানো হয়, যা নেটওয়ার্ক ডিসকভারি বা আলার্ম সিস্টেমের মতো অ্যাপ্লিকেশনের জন্য কার্যকর।
Broadcast Socket তৈরি এবং ব্যবহারের উদাহরণ (C ভাষায়)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/socket.h>
#define PORT 12345
#define BROADCAST_IP "255.255.255.255" // Broadcast Address
int main() {
int sockfd;
struct sockaddr_in broadcast_addr;
char message[] = "Hello Broadcast!";
int opt = 1;
// UDP Socket তৈরি করা
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
perror("Socket creation failed");
exit(EXIT_FAILURE);
}
// SO_BROADCAST অপশন সেট করা
if (setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &opt, sizeof(opt)) < 0) {
perror("Setting SO_BROADCAST failed");
close(sockfd);
exit(EXIT_FAILURE);
}
// Broadcast Address এবং Port সেট করা
memset(&broadcast_addr, 0, sizeof(broadcast_addr));
broadcast_addr.sin_family = AF_INET;
broadcast_addr.sin_addr.s_addr = inet_addr(BROADCAST_IP);
broadcast_addr.sin_port = htons(PORT);
// Broadcast মেসেজ পাঠানো
if (sendto(sockfd, message, sizeof(message), 0, (struct sockaddr*)&broadcast_addr, sizeof(broadcast_addr)) < 0) {
perror("Sendto failed");
close(sockfd);
exit(EXIT_FAILURE);
}
printf("Broadcast message sent!\n");
close(sockfd);
return 0;
}
- এখানে একটি UDP Broadcast Socket তৈরি করা হয়েছে, যা Broadcast Address
255.255.255.255ব্যবহার করে সমস্ত ডিভাইসে মেসেজ পাঠায়।SO_BROADCASTঅপশন সক্রিয় করে এটি সম্ভব করা হয়েছে।
Multicast এবং Broadcast এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Multicast | Broadcast |
|---|---|---|
| ডেটা ট্রান্সমিশন পদ্ধতি | নির্দিষ্ট Multicast Group-এ ডেটা পাঠানো হয় | একই নেটওয়ার্কে থাকা সব ডিভাইসে ডেটা পাঠানো হয় |
| ব্যবহার | লাইভ স্ট্রিমিং, রিয়েল-টাইম ডেটা শেয়ারিং | নেটওয়ার্ক ডিসকভারি, আলার্ম সিস্টেম |
| কনফিগারেশন | Multicast Address ব্যবহার করে | Broadcast Address (255.255.255.255) |
| প্রোটোকল | UDP (সাধারণত) | UDP (সাধারণত) |
Read more