Tải bản đầy đủ (.ppt) (21 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (757.41 KB, 21 trang )

LẬP TRÌNH MẠNG NÂNG CAO

Chương 3.
IP MULTICASTING

Nguyễn Vũ – IT Faculty, Viet Han Friendship

1


Kỹ thuật IP Multicasting
 BroadCasting là gì?
 Dùng để gửi một gói tin đến tất cả các nút trong mạng
 Để thực hiện hình thức quảng bá, địa chỉ đến của gói tin sẽ là địa
chỉ quảng bá.
 Có hai loại là:

Local BroadCast
Global BroadCast
 Ví dụ: Cho mạng lớp B có địa chỉ IP là 192.168.0.0 có SubNet
Mask là 255.255.0.0, địa chỉ Local Broadcast là: 192.168.254.255

Nguyễn Vũ – IT Faculty, Viet Han Friendship

2


Kỹ thuật IP Multicasting
 Theo mặc định, Socket không được phép gửi tin nhắn quảng
bá:
 Gửi gói dữ liệu BroadCast:


class BadBroadcast {
public static void Main()
{
Socket sock = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Broadcast, 9050);
byte[] data = Encoding.ASCII.GetBytes("This is a test message");
sock.SendTo(data, iep);
sock.Close();
}
}
Nguyễn Vũ – IT Faculty, Viet Han Friendship

3


Kỹ thuật IP Multicasting
Dùng kỹ thuật BroadCasting để gửi dữ liệu đến nhiều máy trong mạng
cục bộ
Đối với một ứng dụng C # để gửi các gói dữ liệu Broadcast, ta dùng
phương thức SetSocketOption() của lớp Socket :
Socket sock = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
sock.SetSocketOption(SocketOptionLevel.Socket,
SocketOptionName.Broadcast, 1);

Nguyễn Vũ – IT Faculty, Viet Han Friendship

4



Kỹ thuật IP Multicasting
Dùng kỹ thuật BroadCasting để gửi dữ liệu đến nhiều máy trong
mạng cục bộ
 Gửi gói dữ liệu:
class Broadcst {
public static void Main() {
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,
ProtocolType.Udp);
IPEndPoint iep1 = new IPEndPoint(IPAddress.Broadcast, 9050);
IPEndPoint iep2 = new IPEndPoint(IPAddress.Parse("192.168.1.255"), 9050);
string hostname = Dns.GetHostName();
byte[] data = Encoding.ASCII.GetBytes(hostname);
sock.SetSocketOption(SocketOptionLeyel.Socket,
SocketOptionName.Broadcast, 1);
sock.SendTo(data, iep1);
sock.SendTo(data, iep2);
sock.Close();
}
}
Nguyễn Vũ – IT Faculty, Viet Han Friendship

5


Kỹ thuật IP Multicasting
 Nhận gói dữ liệu:
class RecvBroadcst {
public static void Main() {
Socket sock = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,

ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9050);
sock.Bind(iep);
EndPoint ep = (EndPoint)iep;
Console.WriteLine("Ready to receiye…");
byte[] data = new byte[1024];
int recv = sock.ReceiveFrom(data, ref ep);
string stringData = Encoding.ASCII.GetString(data, 0, recv);
Console.WriteLine("received: {0} from: {1}", stringData, ep.ToString());
data = new byte[1024];
recv = sock.ReceiveFrom(data, ref ep);
stringData = Encoding.ASCII.GetString(data, 0, recv);
Console.WriteLine("received: {0} from: {1}",stringData, ep.ToString());
sock.Close();
}
}

Nguyễn Vũ – IT Faculty, Viet Han Friendship

6


Kỹ thuật IP Multicasting
 Sử dụng Broadcast Packet để thông báo có sự hiện diện của
Server
class Advertise {
public static void Main()
{
Advertise server = new Advertise();
}

public Advertise()
{
Thread advert = new Thread(new ThreadStart(sendPackets));
advert.IsBackground = true;
advert.Start();
Console.Write("Press Enter to stop");
string data = Console.ReadLine();
}

Nguyễn Vũ – IT Faculty, Viet Han Friendship

7


Kỹ thuật IP Multicasting
 Sử dụng Broadcast Packet để thông báo có sự hiện diện của
Server
void sendPackets()
{
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,
ProtocolType.Udp);
sock.SetSocketOption(SocketOptionLevel.Socket,
SocketOptionName.Broadcast, 1);
IPEndPoint iep = new IPEndPoint(IPAddress.Broadcast, 9050);
string hostname = Dns.GetHostName();
byte[] data = Encoding.ASCII.GetBytes(hostname);
while (true)
{
sock.SendTo(data, iep);
Thread.Sleep(6000);

}
}

Nguyễn Vũ – IT Faculty, Viet Han Friendship

8


Kỹ thuật IP Multicasting
 Multicasting là gì?
 Một địa chỉ Multicasting cho phép thiết bị gửi dữ liệu tới một tập
xác định trước các host, được biết đến như các nhóm Multicast,
trong các mạng con khác nhau.
Range

Assignment

224.0.0.0–224.0.0.255

Local network control block

224.0.1.0–224.0.1.255

Internetwork control block

224.0.2.0–224.0.255.0

AD-HOC block

224.1.0.0–224.1.255.255


ST multicast groups

224.2.0.0–224.2.255.255

SDP/SAP block

224.252.0.0–224.255.255.255

DIS transient block

225.0.0.0–231.255.255.255

Reserved

232.0.0.0–232.255.255.255

Source-specific multicast block

233.0.0.0–233.255.255.255

GLOP block

234.0.0.0–238.255.255.255

Reserved

239.0.0.0–239.255.255.255

Administratively scoped block


Nguyễn Vũ – IT Faculty, Viet Han Friendship

9


Kỹ thuật IP Multicasting
 Một số địa chỉ Multicast:

Nguyễn Vũ – IT Faculty, Viet Han Friendship

10


Kỹ thuật IP Multicasting
 Có hai kỹ thuật Multicast được sử dụng:
 Peer to peer:

Nguyễn Vũ – IT Faculty, Viet Han Friendship

11


Kỹ thuật IP Multicasting
 Có hai kỹ thuật Multicast được sử dụng:
 Central Server:

Nguyễn Vũ – IT Faculty, Viet Han Friendship

12



Kỹ thuật IP Multicasting
 Gửi multicast Packets qua Router

Nguyễn Vũ – IT Faculty, Viet Han Friendship

13


Socket Multicasting trong .Net
 Sử dụng phương thức SocketOption():
 Phương thức SocketOption() dùng để:
 Thêm một socket vào nhóm Multicast
 Loại một socket khỏi nhóm Multicast
 SetSocketOption(SocketOptionLevel,SocketOptionName,
optionValue)
 SocketOptionName:

AddMembership
DropMembership

Nguyễn Vũ – IT Faculty, Viet Han Friendship

14


Socket Multicasting trong .Net
 Sử dụng phương thức SocketOption():
 Ví dụ thêm một Socket vào nhóm Multicast 224.100.0.1 ta viết

như sau:
sock.SetSocketOption(SocketOptionLevel.IP,
SocketOptionName.AddMembership, new
MulticastOption(IPAddress.Parse("224.100.0.1"));

Nguyễn Vũ – IT Faculty, Viet Han Friendship

15


Socket Multicasting trong .Net
 Gửi dữ liệu Multicast
class MultiSend{
public static void Main()
{
Socket server = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep = new
IPEndPoint(IPAddress.Parse("224.100.0.1"), 9050);
byte[] data = Encoding.ASCII.GetBytes("This is a test
message");
server.SendTo(data, iep);
server.Close();
}
}
Nguyễn Vũ – IT Faculty, Viet Han Friendship

16



Socket Multicasting trong .Net
 Nhận dữ liệu Multicast
class MultiRecv{
public static void Main() {
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,
ProtocolType.Udp);
Console.WriteLine("Ready to receive…");
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9050);
EndPoint ep = (EndPoint)iep;
sock.Bind(iep);
sock.SetSocketOption(SocketOptionLevel.IP,
SocketOptionName.AddMembership,
new MulticastOption(IPAddress.Parse("224.100.0.1")));
byte[] data = new byte[1024];
int recv = sock.ReceiveFrom(data, ref ep);
string stringData = Encoding.ASCII.GetString(data, 0, recv);
Console.WriteLine("received: {0} from: {1}", stringData, ep.ToString());
sock.Close();
}
}

Nguyễn Vũ – IT Faculty, Viet Han Friendship

17


Socket Multicasting trong .Net
 Multicast với lớp UdpClient
 JoinMulticastGroup()
 DropMulticastGroup()

 JoinMulticastGroup() là phương thức overload
 JoinMulticastGroup(IPAddress)
 JoinMulticastGroup(IPAddress,int)

Nguyễn Vũ – IT Faculty, Viet Han Friendship

18


Socket Multicasting trong .Net
 UdpClient Multicast Receiver
class UdpClientMultiRecv
{
public static void Main()
{
UdpClient sock = new UdpClient(9050);
Console.WriteLine("Ready to receive…");
sock.JoinMulticastGroup(IPAddress.Parse("224.100.0.1"), 50);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 0);
byte[] data = sock.Receive(ref iep);
string stringData = Encoding.ASCII.GetString(data, 0, data.Length);
Console.WriteLine("received: {0} from: {1}", stringData, iep.ToString());
sock.Close();

}
}
Nguyễn Vũ – IT Faculty, Viet Han Friendship

19



Socket Multicasting trong .Net
 UdpClient Multicast Sender
class UdpClientMultiSend
{
public static void Main()
{
UdpClient sock = new UdpClient();
IPEndPoint iep = new
IPEndPoint(IPAddress.Parse("224.100.0.1"), 9050);
byte[] data = Encoding.ASCII.GetBytes("This is a test
message");
sock.Send(data, data.Length, iep);
sock.Close();

}
}
Nguyễn Vũ – IT Faculty, Viet Han Friendship

20


Bài tập về nhà
Xây dựng chương trình chat giữa một Server và nhiều Client sử
dụng Socket Broadcast và Socket Multicast?

Nguyễn Vũ – IT Faculty, Viet Han Friendship

21




×