Thứ Tư, 16 tháng 1, 2013

Unicast, Broadcast và Multicast

Truyền dữ liệu từ máy tính đến máy tính trong hệ thống mạng có 3 loại đó là: Unicast, Broadcast và Multicast được định nghĩa trong IPv4 và được ứng dụng thực tế, ngoài ra còn có một kiểu truyền dữ liệu khác đó là Anycast (IPv6) nhưng cũng chỉ mới là định nghĩa.

Unicast: truyền thông Unicast là việc truyền dữ liệu từ một máy tính đến một máy tính khác. Trong một mạng máy tính thông thường, khi máy A truyền dữ liệu đến cho máy B thì tất cả các máy tính khác sẽ không nhận và xử lý được dữ liệu này.


  • VD: máy tính nguồn kết nối với máy tính đích thông qua Switch. Khi máy nguồn muốn truyền dữ liệu thì nó sẽ gửi dữ liệu đến cho Switch và Switch sẽ chuyển đến cho máy nguồn (các máy còn lại sẽ không nhận được dũ liệu).



  • Trong một trường hợp khác ta thay Switch bằng việc dùng Hub thì một vấn đề khác sẽ xảy ra. Vì Hub không ‘thông minh’ như Switch nên dữ liệu từ máy nguồn sẽ được gửi đến tất cả máy tính khác trong mạng. Tuy nhiên, nếu điều này có xảy ra thì NIC (Network Interface Card) trên các máy tính ‘bị gửi nhầm’ sẽ xác định lại địa chỉ IP máy nhận trong gói tin Unicast có phải gửi đến cho địa chỉ IP của nó hay không, nếu không phải thì nó sẽ không xử lý gói tin đó.


Broadcast: là việc truyền dữ liệu từ một máy đến tất cả các máy trong cùng một Subnet (mạng con). Ở đây cần xác định rõ rằng gói tin Broadcast không phải là gói tin gửi dữ liệu từ một máy đến tất cả các máy trong mạng, thay vào đó nó sẽ gửi dữ liệu đến tất cả các máy trong một Subnet.


  • Subnet: là một nhóm các máy tính được xác định từ một nhóm máy tính lớn hơn, được xác định qua một hoặc nhiều Router. Nói một cách dễ hiểu, một port (cổng) trên Router sẽ phân chia ra một Subnet


Multicast: hình thức truyền dữ liệu từ một máy đến một nhóm máy tính đã được thiết lập từ trước. Khi một máy tính tham gia vào nhóm Multicast, NIC của máy đó sẽ cấu hình cho phép xử lý dữ liệu thông qua việc địa chỉ IP của nhóm Multicast đó.

Những khác biệt:


  • Unicast: truyền dữ liệu từ một máy đến một máy trong cùng một mạng lớn (có thể truyền từ subnet này sang subnet khác).



  • Broadcast: truyền dữ liệu từ một máy đến tất cả các máy trong cùng một mạng con (chỉ có thể truyền dữ liệu trong cùng một subnet, trừ trường hợp ngoại lệ).



  • Multicast: dữ liệu có thể được truyền từ subnet này sang subnet khác (tương tự Unicast)


Những ngoại lệ:


  • Hầu hết các quy tắc được đặt ra đều có ngoại lệ. Vì thế mà Router và Broadcast cũng có trường hợp ngoại lệ. Trong trường hợp bình thường, Router là thiết bị xác định và phân cách các Subnet nên gói tin Broadcast đến từ các port khác nhau của Router sẽ không thể truyền đến được với nhau.



  • Tuy nhiên trong một số trường hợp như việc sử dụng DHCP Server, Router sẽ được cấu hình để cho phép các gói tin Broadcast di chuyển từ subnet này sang subnet kia một cách dễ dàng. Điều này giúp cho một DHCP Server đơn lẻ có thể phục vụ cho nhiều DHCP Server trong mạng, mặc dù trong mạng đó có nhiều subnet được phân chia.


Bạn hẳn biết là IP address có 5 class, trong đó 3 class đầu A,B,C dùng cho general use purpose, class thứ 4 (D) là dùng cho Multicast, có dải từ 224.0.0.0-239.255.255.255, khi muốn gửi 1 gói tin với mục đích multicast, nó sẽ gửi đến 1 địa chỉ xác định trong dải này. 
Vậy địa chỉ ấy là địa chỉ nào ?
Địa chỉ đó là địa chỉ Multicast Group.
Mỗi host muốn nhận multicast cần phải thực hiện động tác đăng ký với group, và như vậy mỗi khi flood data, router sẽ xem 1 interface có host nào đăng ký với group không, nếu có, thì sẽ flood data qua đó, không thì miễn.
Đơn giản, bạn có thể hình dung mình đang dùng Email, và multicast là đạng bạn gửi mail đến user trong mailling list của bạn 

Đó là địa chỉ IP, vậy xuống đến lớp 2 nó làm thế nào để mà biết đâu là multicast ?
Bạn yên tâm là đã có cơ chế "dịch" multicast IP qua MAC.
Trong số 48 bit của MAC, nó dùng 24 bit prefix là 01-00-5e là đại diện có các địa chỉ thuộc tính multicast, 24 bit còn lại, thì bit cao nhất được set to 0, 23 bit cuối cùng được lấy từ 23bit cuối của MAC dich lại từ địa chỉ IP của multicast. 

Ví dụ nha: bạn có địa chỉ multicast là 225.128.1.1
thì địa chỉ MAC sẽ có:
24 bit đầu tiên: 01-00-5e <-> (00000001.00000000.01011110)
(24 bít sau của địa chỉ trên .128.1.1 là .10000000.00000001.00000001)
nhưng bít cao nhất trong số 24 bít còn lại phải được set thành : 0
cho nên ghép 25 bít của chúng ta hiện có là :00000001.00000000.01011110.0
vì vậy khi ghép nốt 23 bít còn lại vào với nhau ta được : 00000001.00000000.01011110.00000000.00000001.00000 001
tương đương với : 01-00-5e-00-01-01

(Lưu ý 1 chút là địa chỉ này tương đương với IP : 225.0.1.1 và cái đó người ta gọi là overlap trong multicast.  )

Bây giờ nói cơ chế làm sao để host join hay leave group nhé:
Multicast có khái niệm IGMP (Internet Group Management Protocol) có nhiệm vụ quản lý việc "chào mời", hay "xin xỏ" multicast.
Nói về "chào mời".
Host muốn gửi multicast đầu tiên query đến 1 địa chỉ : 224.0.0.1 (all hosts), đây là địa chỉ dành riêng mà router hiểu nó cần foward đến tát cả các host. Query nói rằng có ai muốn join vào group của nó không ? Nếu host nào đó quan tâm, nó report lại với thông tin đồng nghĩa với việc đăng ký vào group đó, và từ giờ có thể nhận các multicast packets.
Về "Xin xỏ": bình thường thì server send query quãng đâu đó 60s, tuy nhiên hếu có ai đó muốn vào group trong khoảng thời gian giữa hai lần send query, host muốn join vào một multicast xác định, nó cần gửi một request đến địa chỉ group mà nó muốn join, sau khi nhận đuợc request, host send multicast chấp nhận và cho host join vào list, từ đó nó có thể nhận được multicast packets.
Trong trường hợp muốn ra đi, host dừng việc reply query. Server sẽ gửi query confirm 3 lần mà không host nào trên domain còn muốn nhận multicast nữa? nó dừng việc multicast qua interface đó, nếu không thì nó tiếp tục việc multicast.

 

0 nhận xét:

Đăng nhận xét