Tải bản đầy đủ (.pdf) (42 trang)

xây dựng ứng dụng video streamming dựa trên mạng ngang hàng chord

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 (1.47 MB, 42 trang )


TRƯỜNG………………….
KHOA……………………….

‐‐‐‐‐[\[\‐‐‐‐‐

Báocáotốtnghiệp
Đềtài:
Xây dựng ứng dụng video streamming dựa
trên mạng ngang hàng Chord













Tóm tắt
Khóa luận này đưa ra một phương thức truyền tin multicast trên nền tảng mạng
ngang hàng mới nhằm khắc phục những nhược điểm của một số phương thức truyền tin
multicast đã tồn tại từ trước. Những nhược điểm đó gồm có việc phải phụ thuộc hoàn
toàn vào khả năng của router đối với IP multicast hay vấn đề quản lý cây multicast khó
khăn đối v
ới một số giao thức truyền tin multicast trên tầng ứng dụng khác.
Khóa luận mô tả chi tiết giao thức mạng ngang hàng có cấu trúc Chord và cách thức


truyền tin multicast trên nền mạng ngang hàng Chord. Trong khóa luận, vấn đề truyền
video streaming cũng được đề cập đến. Từ đó khóa luận đã xây dựng nên ứng dụng
truyền video streaming multicast trên nền Chord. Việc đánh giá kết quả thu được qua quá
trình xây dựng ứng dụng cho ta thấy được những ư
u điểm của việc triển khai multicast
trên mạng ngang hàng, cũng như những nhược điểm cần khắc phục.
MỤC LỤC
Mở đầu 5
Chương I: Tổng quan về video streaming multicast 7
1.1. Giới thiệu về video streaming 7
1.2. Giới thiệu multicast 9
1.3. IP multicast 10
1.4. Multicast tầng ứng dụng ( ALM – Application-layer Multicast) 12
1.4.1. Giới thiệu 12
1.4.2. Một số giải pháp truyền tin multicast trên tầng ứng dụng 13
Chương II: Truyền tin multicast trên nền mạng ngang hàng có cấu trúc Chord 16
2.1. Giới thiệu mạng ngang hàng 16

2.2.1. Khái niệm 16
2.2.2. Ưu thế của mạng ngang hàng 16
2.2.3. Phân loại mạng ngang hàng 16
2.2. Mạng ngang hàng có cấu trúc Chord 18
2.2.1. Giới thiệu chung 18
2.2.2. Finger table 20
2.2.3. Node tham gia/ rời mạng và quá trình đồng bộ ( stabilization) 21
2.3. Thuật toán truyền tin multicast dựa trên nền mạng Chord 22
Chương III: Xây dựng ứng dụng truyền tin video streaming multicast thời gian thực trên nền mạng
ngang hàng có cấ
u trúc Chord 26
3.1. Mục tiêu và yêu cầu của việc xây dựng ứng dụng 26

3.2. Ý tưởng 26
3.3. Thiết kế hệ thống 27
3.3.1. Tạo cây multicast 27
3.3.1. Tạo dữ liệu thời gian thực 28
3.3.2. Truyền hình ảnh 28
3.3.3. Xử lý và hiển hình ảnh 29
3.4. Thiết kế giao thức 29
3.4.1. Giao thức máy chủ 29
3.4.2. Giao thức máy khách 31
3.5. Thiết kế chương trình 33
3.5.1. Lớp WebcamServer 34
3.5.2. Lớp WebcamClient 36
Chương IV: Kết quả đánh giá hệ thống 39
4.1. Kết quả thử nghiệm 39
4.1.1. Môi trường chạy thử 39
4.1.2. Kết quả đạt được 39
4.2. Kết quả đánh giá hiệu n
ăng 39
Chương V: Kết luận 41
Tài liệu tham khảo 42













Mở đầu
Trong những ngày đầu phát triển của ứng dụng đa phương tiện, khoảng nửa cuối
thập niên 90, việc xem một video trên mạng gần như là điều không thể. Ngày nay, cùng
với sự bùng nổ của Internet, các ứng dụng đa phương tiện trong đó có video streaming đã
trở thành nhu cầu không thể thiếu của nhiều cư dân mạng.Theo thống kê, riêng tại Mỹ đã
có khoảng 13,5 tỉ video được xem trong tháng 10 – 2008 (nguồn comScore). Con s
ố trên
đủ cho ta thấy được sự lớn mạnh không ngừng của các ứng dụng video streaming.
Tuy nhiên, để phát triển một ứng dụng video streaming tốt gặp phải nhiều vấn đề.
Ứng dụng video streaming đòi hỏi nhiều băng thông và yêu cầu độ trễ thấp. Chính vì vậy
cần phải có một phương thức phân phát video trên đường truyền hợp lý. IP multicast với
khả năng tối ưu hóa đường truyền là một gi
ải pháp cho vấn đề này. Tuy nhiên, việc triển
khai IP multicast lại rất tốn kém bởi nó đòi hỏi toàn mạng phải có những Router đắt tiền,
chuyên dụng. Điều này hoàn toàn không khả thi trong một mạng diện rộng như Internet.
Triển khai multicast trên tầng ứng dụng với việc không làm thay đổi hạ tầng mạng phía
dưới là một giải pháp thay thế hữu hiệu cho IP multicast.
Hiện nay, trên thế giới đã và đang phát triển rất nhi
ều phương pháp truyền tin
multiast trên tầng ứng dụng khác nhau. Trong đó truyền tin multicast dựa mạng ngang
hàng hứa hẹn có nhiều ưu điểm. Đặc thù của truyền tin multicast là phải tạo được một
cây multicast tối ưu, có sự liên kết chặt chẽ giữa các node với nhau, có khả năng phục hồi
lỗi nhanh. Mạng ngang hàng có cấu trúc hoàn toàn có thể đáp ứng được yêu cầu đó với
việc các node được liên kết v
ới nhau bằng một thuật toán cụ thể.
Để làm rõ hơn những lợi thế của mạng ngang hàng có cấu trúc trong việc truyền tin
multicast, khóa luận này đã nghiên cứu xây dựng một ứng dụng truyền video streaming
multicast dựa trên nền tảng mạng ngang hàng có cấu trúc Chord. Sau đây là tóm tắt nội

dung khóa luận gồm 5 chương.
Chương 1: Tổng quan về video streaming và multicast
Giới thiệu về video streaming và trình bày những khái cơ bản về multicast, so sánh
với các phương thứ
c truyền tin khác. IP multicast và multicast tầng ứng dụng được trình
bày một cách ngắn gọn để từ đó có thể thấy được ưu điểm của multicast tầng ứng dụng so
với IP multicast.
Chương 2: Truyền tin multicast trên nền mạng ngang hàng có cấu trúc Chord
Phần này đưa ra cái nhìn tổng quan về mạng ngang hàng bao gồm: khái niệm, phân
loại và ưu điểm chung của mạng ngang hàng. Tiếp đó, sẽ giới thiệu hoạt động của giao
thức Chord. Đặc biệt, việc truyền tin multicast dựa trên nền mạng Chord được đề cập một
cách chi tiết.
Chương 3: Xây dựng ứng dụng truyền multicast video streaming thời gian
thực trên nền Chord
Chương 3 đề cập đến những yêu c
ầu, mục tiêu của ứng dụng và cách thức xây dựng
ứng dụng sao cho phù hợp với những mục tiêu đó. Trong đó, trình bày chi tiết về thiết kế
hệ thống, thiết kế giao thức và thiết kế chương trình của ứng dụng.
Chương 4: Kết quả đánh giá hệ thống
Sau các nghiên cứu ở các phần trên, chương 4 trình bày về môi trường chạy thử
chương trình, các kết quả và đánh giá thu đượ
c sau quá trình thử nghiêm.
Chương 5: Kết luận















Chương I: Tổng quan về video streaming multicast
1.1. Giới thiệu về video streaming
Video là một loại dữ liệu đa phương tiện quan trọng phục vụ cho truyền thông hoặc
cho nhu cầu giải trí của con người trong nhiều thập niên. Trong thời kỳ đầu video được
xử lý và truyền dưới dạng tín hiệu tương tự (analog). Với sự phát triển không ngừng
của mạch điện tử và máy tính dẫn đến việ
c số hóa video và mở ra một cuộc cách mạng về
nén và truyền thông video. Sự phát triển và phổ biến của Internet giữa những năm 90 đã
định hướng truyền thông video qua mạng chuyển mạch gói best-effort. Video qua mạng
qua mạng Internet gặp phải rất nhiều yếu tố bất lợi về băng thông, độ trễ và mất gói tin,
cùng với một số vấn đề như làm thế nào để chia sẽ tài nguyên mạng giữa các luông hay
làm th
ế nào có thể triển khai hiệu quả phương thức truyền thông một- nhiều ( truyền dữ
liệu từ một nguồn đến nhiều đích cùng một lúc). Từ đó đã có rất nhiều giải pháp được
nghiên cứu và phát triển nhằm khác phục những vấn đề này.
Video streaming được định nghĩa là một “dòng chảy” video , nghĩa là dữ liệu video
được truyền liên tục từ một nguồn đến m
ột đích nào đó. Ý tưởng cơ bản của video
streaming đó là chia video thành từng frame, sau đó liên tục truyền những phần được chia
ra và bên nhận có thể hiện thị những phần video đã nhận được mà không phải đợi cho
đến khi toàn bộ video được truyền xong.
Tuy nhiên có một vài vấn đề ảnh hưởng trực tiếp đến video streaming. Video
streaming qua mạng Internet gặp rất nhiều khó khăn bởi Internet chỉ cung cấp dịch vụ

truy
ền best-effort (cố gắng tối đa). Do đó, nó không đảm bảo về băng thông, độ trễ,
jitter hay sự mất gói tin. Những nhân tố này thường không đoán trước được và động.
Chính vì vậy, mục tiêu chính của việc xây dựng một ứng dụng video streaming là phải
thiết kết một hệ thống phân phát video chất lượng cao đáng tin cây qua mạng Internet.
Các ứng dụng video streaming thường được nhiều người dùng cùng một lúc, tức là
video phải
được truyền cùng lúc tới nhiều người như video conference hay truyền hình
trực tuyến. Truyền tin multicast là một giải pháp thích hợp cho những ứng dụng đó. Phần
dưới đây sẽ trình bày chi tiết về multicast.
Cấu thành nên một hệ thống video streaming gồm có 6 yếu tố cơ bản: cơ chế nén
video, cơ chế điều khiển chất lượng dịch vụ tầng ứng dụng, dịch vụ phân phát video, máy
chủ streaming, cơ chế đồng bộ dữ liệu và giao thức dành cho video streaming [10]. Hình
1 cho ta thấy được mối liên hệ giữa các yếu tố này với nhau.
Hình 1: Cấu trúc ứng dụng video streaming
 Cơ chế nén video. Dữ liệu video nguyên gốc cần phải được nén trước khi
được truyền nhằm tiết kiệm băng thông.
 Cơ chế điều khiển chất lượng dịch vụ tầng ứng dụng. Để đối phó với sự
biến thiên của tài nguyền mạng hoặc để cung cấp chất lượng hình ảnh thay
đổi theo t
ừng người dùng, nhiều kỹ thuật điều kiển chất lượng dịch vụ tầng
ứng dụng đã được đưa ra. Kỹ thuật đó bao gồm điều khiển tắc nghẽn và điều
khiển lỗi. Điều khiển tắc nghẽn được triển khai để ngăn ngừa việc mất gói tin
và giảm độ trễ. Trong khi đó, điều khiể
n lỗi cải thiện chất lượng hình ảnh khi
có gói tin bị mất.
 Dịch vụ phân phát video trên đường truyền. Được xây dựng trên nền của
Internet ( giao thức IP), dịch vụ phân phát video trên đường truyền cho phép
đạt được QoS ( chất lượng dịch vụ) và hiệu quả cho việc phân phát video qua
mạng Internet.

 Máy chủ streaming. Máy chủ streaming đóng vai trò quan trọng trong việc
cung cấp dịch vụ streaming. Máy chủ streaming được yêu cầu phải x
ử lý các
dữ liệu video với sự rằng buộc về thời gian, đồng thời hỗ trợ các hành động
tương tác như dừng (pause), tua (fast forward). Một server streaming gồm 3
hệ thống con: bộ truyền tin (communicator) ví dụ như giao thức tầng giao
vận, hệ điều hành và hệ thống lưu trữ.
 Cơ chế đồng bộ dữ liệu. Với cơ chế đồng bộ, ứng dụng tại bên nhận có thể
hiển thị video gần giống như khi nó được khởi tạo tại bên gửi. Một ví dụ của
cơ ch
ế đồng bộ là cử động môi của người nói phải phù hợp với tiếng nói họ
phát ra.
 Giao thức dành cho video streaming. Giao thức được thiết kế và chuẩn hóa
cho truyền thông giữa máy khách và máy chủ streaming. Giao thức có thể
được chia làm 3 loại: giao thức tầng mạng như Internet Protocol (IP), giao
thức tầng giao vận như User Datagram Protocol (UDP) và giao thức điều
khiển phiên như Real-time Streaming Protocol (RTSP).
1.2. Giới thiệu multicast
Trong hệ thống mạ
ng của chúng ta hiện nay có 3 cách truyền tin cơ bản đó là
unicast, multicast và broadcast (Hình 2).
Unicast là phương thức truyền tin cơ sở của IP network. Với unicast một máy
truyền và chỉ có một máy nhận theo kiểu point to point. Hiện nay hầu hết các ứng dụng
mạng được phát triển và sử dụng trên nền phương thức unicast như HTTP, Telnet, FTP
… Nhưng với những ứng dụng đòi hỏi phải truyền tin từ một nguồn cho một nhóm người
dùng như video streaming thì việc triên khai trên unicast là không hiệu quả và truyền tin
multicast là giải pháp thay thế.
Multicast là cách truyền dữ liệu từ một – nhiều (one-to-many) tức là dữ liệu được
gửi từ một node nguồn và một nhóm node đích sẽ nhận được cùng dữ liệu đó. Cách
truyền này khác với unicast– gửi thông tin trên mạng theo cách truyền gói tin một- một

(one – to – one). Nếu multicast có thể so sánh với cuộc gọi chung cho nhiều người
(conference call) thì unicast có thể so sánh với cuộc gọ
i riêng giữa hai người.
Broadcast được mô tả như truyền thông tin cho toàn mạng, tất cả các điểm trong
mạng đều nhận được thông báo này. Trong trường hợp này chỉ một người gửi nhưng tất
cả người trong mạng đều nhận được. Broadcast được hỗ trợ trong mạng LAN (ví dụ
Ethernet) và được sử dụng để gửi những gói tin giống nhau đến các máy trong mạng
LAN (ví dụ ARP được sử dụng g
ửi địa chỉ đến toàn bộ máy trong mạng LAN). Network
protocol (như IP) hỗ trợ khuôn dạng gói tin để gửi đến bất kỳ hệ thống nào trong logical
network.
Có thể nói, multicast là cách thức hiệu quả nhất để truyền dữ liệu đến một nhóm
người trên Internet. Chúng ta cũng có thể sử dụng unicast để truyền tin lần lượt từ nguồn
đến từng node trong nhóm. Tuy nhiên, với cách này thì node nguồn sẽ phải lặp đi lặp lại
việc truyền 1 gói tin cho rất nhiều node khác, dẫn đến việc tiêu tốn tài nguyên của node
nguồn ( CPU, memory …). Đồng thời, sẽ có rất nhiều gói tin không cần thi
ết được lưu
thông trên mạng, dẫn đến lãng phí tài nguyên mạng.
Với multicast, một cây multicast sẽ được hình thành với nguồn là gốc của cây và
các thành phần còn lại của cây có thể là node đầu cuối ( end – host ) hoặc có thể là router
tùy vào từng công nghệ multicast khác nhau. Thay vì việc node nguồn nhân bản gói tin
và gửi đến từng node trong nhóm thì nó chỉ truyền cho 1 hoặc vài node nhất định và các
node này có nhiệm vụ sao chép và truyền gói tin theo cây multicast.
Hình 2: Các phương thức truyền tin trên mạng

1.3. IP multicast
IP multicast (Hình 3) là chuẩn mở của IETF (Internet Engineering Task Force)[3],
dùng để truyền dữ liệu tới nhiều người nhận.Trong IP multicast, các router sẽ đóng vai
trò là node trung gian trong cây multicast và có trách nhiệm sao chép gói tin rồi truyền
cho các node ứng dụng - ở đây, các node này sẽ đóng vai trò là ngọn của cây.

Hình 3: Thành phần của IP multicast
Trong IP multicast mỗi node sẽ gửi yêu cầu một router gắn với nó khi muốn ra
nhập hoặc rời khỏi nhóm. Sau đó các router multicast sẽ trao đổi các thông tin về việc
quản lý nhóm thông qua cây multicast. Tất cả các công việc như tạo nhóm, nhập nhóm,
rời nhóm đều được thực hiện bởi giao thức IGMP (Internet Group Membership
Protocol)(Hình 4)[4].
IP multicast sử dụng địa chỉ IP lớp D để định danh các nhóm multicast. Đây là dạng
địa chỉ IP đặc biệ
t dành riêng cho multicast. Tất cả các máy nối kết vào Internet phải có
địa chỉ IP thuộc lớp A, lớp B, hoặc lớp C. Một máy có thể có một hoặc nhiều địa chỉ
multicast lớp D tùy thuộc vào số nhóm multicast mà nó tham gia. Địa chỉ lớp D có độ dài
là 32 bit. 4 bit đầu tiên được dùng để xác định nó thuộc lớp D, 28 bit còn lại được dùng
để xác định nhóm multicast. Một địa chỉ lớp D có thể so sánh với một kênh trên tivi. Khi
bạn truy cập một địa chỉ lớ
p D, bạn sẽ nhận được tất cả thông tin được multicasting đến
địa chỉ đó.
Hình 4: Internet Group Management Protocol – Thông điệp Query
IGMP chỉ có trách nhiệm quản lý các nhóm multicast và việc phân phát các gói tin
multicast từ router nội bộ đến các node trong nhóm. Việc gói tin làm thế nào để đi được
từ nguồn đến các router biên ( các router trực tiếp nối với node) phụ thuộc vào giao thức
định tuyến multicast chạy trên các router trong mạng. Hiện nay có một vài giao thức định
tuyến được phát triển dành riêng cho IP multicast như DVMRP (Distance Vector
Multicast Routing Protocol) – giao thức định tuyến multicast đầu tiên hay như PIM
(Protocol Independent Multicast) – giao thức multicast được dùng phổ biến nh
ất hiện
nay.
Với các giao thức định tuyến multicast trong IP multicast, số lượng gói tin phải sao
chép nhân bản trên đường truyền được giảm thiểu so với các phương thức truyền tin khác
từ đó tiết kiệm đáng kể băng thông mạng. Tuy nhiên một nhược điểm khiến nó không
được sử dụng nhiều và không có khả năng mở rộng đó là các router trong mạng phải hỗ

trợ multicast. Đồng thời, IP multicast chỉ h
ỗ trợ các ứng dụng chạy trên nền UDP – giao
thức truyền tin không tin cậy. Nhằm khắc phục những nhược điểm này, truyền tin
multicast tầng ứng đã và đang được nghiên cứu, phát triển rất nhiều trong những năm gần
đây. Phần tiếp của khóa luận sẽ trình bày về phương thức truyền tin multicast tầng ứng
dụng.
1.4. Multicast tầng ứng dụng ( ALM – Application-layer Multicast)
1.4.1. Giới thi
ệu
Khái niệm multicast tầng ứng dụng chỉ đơn giản là việc thi hành multicasting như
một dịch vụ tầng ứng dụng chứ không phải như một dịch vụ tầng mạng. Hình 5 mô tả
việc truyền multicast cho cùng một nhóm người nhận và người gửi của multicast tầng
ứng dụng và IP multicast. Ở đây, cây multicast được hình thành ở tầng ứng dụng. Với
việc chỉ sử dụng phương thức truyền tin unicast của tầng mạng, node nguồn S gửi hai gói
tin cho D1 và D2; tại D1, D2 gói tin được nhân bản và chuyền tiếp cho D4,D3.
Hình 5: (a) IP multicast (b) Multicast tầng ứng dụng
IP multicast được triên khai tại các node mạng ( Router) trong khi đó muticast tầng
ứng dụng được triển khai tại các node ứng dụng ( end host hoặc proxy ). Do các node ứng
dụng biết ít thông tin về tầng mạng hơn là các router nên cây multicast tầng ứng dụng
thường không có độ tối ưu bằng IP multicast.
Trong multicast tầng ứng dụng, các công việc điều khiển như ra nhập nhóm, rời
nhóm, sao lưu và chuyển tiếp gói tin, định tuyến multicast… đều
được thực hiện tại điểm
đầu cuối (end system hoặc proxy) chính vì vậy mà không yêu cầu cần có những router hỗ
trợ multicast ở mạng lõi.
1.4.2. Một số giải pháp truyền tin multicast trên tầng ứng dụng
Dựa vào cấu trúc mạng hoặc cách tạo cây multicast mà ta có các giải pháp truyền tin
multicast tầng ứng dụng khác nhau: Proxy-based ALM và end system ALM; mesh first
và tree first [7]
 Proxy-based ALM và end system ALM


Hình 6: (a) Proxy-based ALM (b) End-system ALM
Trong mô hình Proxy-based ALM (Hình 6a), yêu cầu triển khai nhiều proxy hoặc
server trên Internet, các proxy hay server này sẽ tự thành lập một mạng phủ (overlay
network) với nhau và cũng cấp dịch vụ multicast trong suốt cho các người dùng cuối
(end-user). Ngược lại, mô hình end-system ALM (Hình 6b) chỉ yêu cầu hạ tầng mạng
phía dưới cũng cấp duy nhất dịch vụ truyền tin unicast, việc truyền multicast sẽ được
thực hiện bởi các node đầu cuối (end-system).
Với mô hình proxy-based ALM thì các ứng dụng chạy trên node
đầu cuối sẽ ít phức
tạp hơn bởi vì dịch vụ multicast trong suốt với chúng. Một điểm mạnh nữa của mô hình
này đó là băng thông tại các proxy thường lớn hơn tại các node đầu cuối chính vì vậy mà
tránh xảy ra hiện tượng “nút thắt cổ chai” như trong mô hình end-system ALM. Nhược
điểm của mô hình này là chi phí phải trả cho hệ thống proxy hay server là rất cao.
 Mesh-fist và tree-first
Trong mô hình mesh-first, các node muốn tham gia vào quá trình truyền hoặc nhận
multicast sẽ
tham gia vào một mạng phủ hình thành nên một tô pô dạng lưới liên kết các
node với nhau (Hình 7a). Sau khi tô pô mạng được hình thành thì node nguồn sẽ sử dụng
thuật toán định tuyến để truyền multicast thông qua mạng đó (Hình 7b). Thông thường
cây multicast tạo ra từ phương thức không được tối ứu do gặp phải vấn đề vấn đề “nút cổ
chai” khi một node có tài nguyên kém mà phải chịu tải cao. Hơn nữa việc duy trì mạng
phủ cũng đòi h
ỏi một phần băng thông cho các thông tin điều khiển mạng. Tuy nhiên lợi
thế của mô hình này là khả năng chịu lỗi cao bởi các node trong cây không chỉ biết đến
node cha của nó mà còn biết thông tin về các node khác. Mô hình này thường được sử
dụng với các ứng dụng đa nguồn multicast như video conference.
Với mô hình tree-first, cây multicast được hình thành mà không cần các node tạo
thành mạng phủ với nhau. Một node chọn cha của nó từ một số thành viên đã biết trong
cây. Mô hình này cần có thuật toán phát hiện và tránh lặp xảy ra trong cây multicast. Các

node trong cây sẽ chọn được vị trí tối ưu nhất tránh hiện tượng nút thắt cổ chai. Tuy
nhiên điều này có thể d
ẫn đến cây bị lệch. Hơn nữa khi một node bị lỗi hoặc rời mạng thì
việc khôi phục lại cây multicast sẽ khó khăn hơn rất nhiều so với mô hình mesh-first.

Hình 7: (a) Mạng phủ 7 node (b) Cây multicast tạo từ mạng phủ














Chương II: Truyền tin multicast trên nền mạng ngang hàng có cấu trúc Chord
2.1. Giới thiệu mạng ngang hàng
2.2.1. Khái niệm
Một mạng máy tính ngang hàng (Peer-to-peer hoặc P2P) chủ yếu dựa trên sức
mạnh tính toán và băng thông của các máy tham gia trong mạng hơn là tập trung vào một
số lượng nhỏ các máy chủ (server). Mạng P2P được sử dụng điển hình cho việc kết nối
các node thông qua những kết nối ad-hoc lớn. Những mạng nh
ư vậy có ích cho nhiều
mục đích sử dụng. Chia sẻ file chứa audio, video, data hoặc mọi thứ ở định dạng số, các
dữ liệu thời gian thực, ví dụ như truyền tải giọng nói, video streaming đều có thể thực

hiện với công nghệ P2P.
Một mạng P2P thuần túy sẽ không có khái niệm về khách (client) và chủ (server),
mà chỉ có những node ngang hang thực hiện cả hai chức năng của m
ột máy chủ và máy
khách đối với những node khác trong mạng. Mô hình mạng này khác với mô hình mạng
khách-chủ mà việc giao tiếp thường là với các máy chủ trung tâm. Một ví dụ điển hình
cho việc truyền file theo mô hình khách-chủ là giữa một FTP Client và một FTP Server,
hai chương trình FTP Client và FTP Server có vai trò rất khác nhau, client khởi tạo việc
download/upload file, còn server thì tiếp nhận và phục vụ các yêu cầu đó.
2.2.2. Ưu thế của mạng ngang hàng
Mục đích quan trọng của mạng ngang hàng là trong mạng t
ất cả các máy tham gia
đều đóng góp tài nguyên, bao gồm băng thông, lưu trữ, và khả năng tính toán. Do đó khi
càng có nhiều máy tham gia mạng thì khả năng tổng thể của hệ thống mạng càng lớn.
Ngược lại, trong mô hình máy khách-chủ, nếu số lượng máy chủ là cố định, thì khi số
lượng máy khách tăng lên khả năng chuyển dữ liệu từ các máy chủ cho mỗi máy khách sẽ
giảm xuống.
Tính chất phân tán của mạng ngang hàng c
ũng giúp cho mạng hoạt động tốt khi một
số máy gặp sự cố. Đối với cấu trúc tập trung, chỉ cần máy chủ gặp sự cố thì cả hệ thống
sẽ ngưng trệ.
2.2.3. Phân loại mạng ngang hàng
Mạng ngang hàng P2P được chia làm hai loại chính: mạng ngang hàng thuần túy và
mạng ngang hàng lai ghép (Hình 8).
Hinh 8: Phân loại mạng ngang hàng
 Mạng ngang hàng thuần túy được chia làm 2 loại: mạng ngang hàng có cấu trúc
và mạng ngang hàng không cấu trúc.
 Mạng ngang hàng không cấu trúc là khi các liên kết giữa các nút mạng trong
mạng phủ được thiết lập ngẫu nhiên (tức là không theo qui luật nào). Những mạng như
thế này dễ dàng được xây dựng vì một máy mới khi muốn tham gia mạng có thể lấy các

liên kết có sẵn của một máy khác đang ở trong mạng và sau đ
ó dần dần tự bản thân nó sẽ
thêm vào các liên kết mới của riêng mình. Khi một máy muốn tìm một dữ liệu trong
mạng đồng đẳng không cấu trúc, yêu cầu tìm kiếm sẽ được truyền trên cả mạng để tìm ra
càng nhiều máy chia sẻ càng tốt. Sự hiểu biết về mạng của các node trong mạng không
cấu trúc là rất ít, mỗi node chỉ nắm bắt thông tin về nhưng node kết trực tiếp và một số ít
các node khác, thông tin về những node còn lại hoàn thông qua broadcast. Chính vì vậy
với những ứng dụng cần có sự liên kết chặt chẽ giữa các node với nhau như multicast thì
mạng ngang hàng không cấu trúc không phải là sự lựa chọn tối ưu.
 Mạng ngang hàng có cấu trúc khắc phục nhược điểm của mạng không cấu trúc
bằng cách sử dụng hệ thống DHT (Bảng Băm Phân Tán, tiếng anh: Distributed Hash
Table). Hệ thống này định nghĩa liên k
ết giữa các nút mạng trong mạng phủ theo một
Peer-to-Peer
Thuần tú
y

Lai
g

p

Khôn
g
cấu trúc Có cấu trúc
Chor
d
Gnutella
CAN Na
p

ste
r

thuật toán cụ thể, đồng thời xác định chặt chẽ mỗi nút mạng sẽ chịu trách nhiệm đối với
một phần dữ liệu chia sẻ trong mạng. Với cấu trúc này, khi một máy định tuyến thông
báo, nó chỉ cần áp dụng một giao thức chung để xác định nút cần thông báo và sau đó
liên lạc trực tiếp đến nút mạng đó. Bởi vậy việc tao cây multicast sẽ diễn ra rất dễ dàng
và vi
ệc quản lý cậy cũng có nhiều thuận lợi khi các node đều được liên kết chặt chẽ với
nhau. Một số mạng ngang hàng có cấu trúc nổi tiếng bao gồm Chord, CAN, Kademlia,
Pastry và Tapestry.[5,6,9]
 Mạng ngang hàng lai ghép: Trong mô hình mạng ngang hàng lại ghép, tồn tại
một server trung gian có trách nhiệm điều khiển hoạt động của mạng. Server này lưu dữ
các chỉ mục bao gồm thông tin về các node nó quản lý và vị trí các cặp key-value trên
mạng. Các node trong mạng phải t
ạo liên kết với server này. Một node muốn trao đổi
thông tin với một node khác thì nó sẽ phải liên lạc trực tiếp với server, sau đó server sẽ
tìm kiếm trong cơ sở dữ liệu và gửi lại địa chỉ node đích. Quá trình trao đổi thông tin sau
đó được diễn ra trực tiếp giữa 2 node. Việc triển khai truyền tin multicast trên mạng
ngang hàng lai ghép gần giống như mô hình proxy-base ALM. Nhược điểm chính của nó
vẫn là chi phí cao cho các server trung gian. Ứng dụng điể
n hình cho mô hình mạng này
là Napster.
2.2. Mạng ngang hàng có cấu trúc Chord
2.2.1. Giới thiệu chung
Giao thức Chord là một giao thức định tuyến DHT bởi một nhóm sinh viên từ
trường Đại học California ở Berkeley và MIT nhằm mục đích phân tán và tìm kiếm dữ
liệu một cách tốt nhất với nhiều đặc trưng như scalability (khả năng mở rộng), complete
decentralization (phân tán hoàn toàn), load blancing (cân bằng tải), và simplicity (đơn
giản).

Chord[6] được mô tả dưới dạ
ng một vòng tròn và có không gian định danh cỡ m,
với m là số bit định danh của không gian. Mạng Chord sẽ có tối đa 2
m
định danh. Một
Chord node (hay một phần tử - một máy tính trong mạng Chord) có một định danh id, và
các id trong mạng Chord sắp xếp thành vòng tròn và tăng theo chiều kim đồng hồ. Mỗi
node trên vòng tròn sẽ biết thông tin về node trước và sau nó trên vòng tròn gọi là
predecessor và successor của node đó. Thêm vào đó, mỗi node sẽ lưu một bảng định
tuyến gọi là bảng Finger table, cho phép node đó định tuyến tới các node ở xa. Mỗi dòng
trong bảng Finger table sẽ lưu thông tin về
1 node ở xa, gọi là 1 entry. Không gian định
danh có bao nhiêu bit thì Finger Table có bấy nhiêu entry. Ví dụ trong hình 9
predescessor của node 1 sẽ là node 6 và successor của nó là node 3.
Kĩ thuật Consistent hashing cấp cho mỗi node và key m-bit định danh dựa trên cơ
sở hàm băm SHA-1[1]. Định danh của một node được xác định bằng cách băm địa chỉ IP
node đó, định danh của một key xác định bắng cách băm key đó (Ở đây chúng ta quy ước
từ khóa “key” vừa là key gốc vừa là định danh của key). Chiều dài của định danh cần đủ
l
ớn để khi băm tránh xảy ra trường hợp 2 key hoặc node có định danh giống nhau.

Hình 9: Vòng tròn Chord
Giao thức Chord hỗ trợ duy nhất một hoạt động :
đưa ra 1 key, nó sẽ ánh xạ
key đó vào một node
. Tùy thuộc vào ứng dụng sử dụng Chord ( văn bản, hình
ảnh, media ), node đó sẽ lưu trữ một giá trị kết hợp với key. Chord sử dụng kí
thuật
consistent hashing
để cấp key cho các node.

Consistent hashing
dùng để
phân bổ các node cũng như các key đều trên vòng tròn từ đó nâng cao khả năng
cần bằng tải, mỗi node sẽ nhận được số lượng key gần ngang nhau, đồng thời
giúp cho việc ổn định mạng khi có node tham gia hay rời khỏi hệ thống.
Trong mạng Chord mỗi node không cần biết thông tin về tất cả các node khác. Mỗi
node Chord chỉ cần biết một lượng nhỏ thông tin định tuyến về các node khác. Vì những
thông tin này là phân tán, một node sẽ sử dụng finger table để giao tiếp với các node
khác. Khi mạng được thiết lập, một hệ thống Chord gồm N-node, trong đó mỗi node chứa
thống tin về O(log N) node xung quanh nó, và tìm kiếm các node khác thông qua O(log
N) thông điệp tới các node đó. Chord cần phải cập nhập lại thông tin định tuyến khi các
node tham gia/rời khỏi hệ thống, với sự tham gia hay vào mạng của một node cũng chỉ
cần không quá O(log
2
N) thông điệp được gửi đi để cập nhập lại thông tin định tuyến.
2.2.2. Finger table
Trong mạng Chord, mỗi node cần một lượng nhỏ thông tin định tuyến trong 1 môi
trường phân tán. Chord node chỉ cần biết node successor của nó trong mạng. Các truy
vấn đến một định danh ( một key hoặc một node) nào đó được truyền theo vòng tròn
thông qua các node successor cho đến khi tìm được node biết thông tin về định danh đó.
Với việc mỗi node đều duy trì một
điểm successor của nó cũng đủ đảm bảo mọi truy vấn
tìm kiếm đều được thực hiện chính xác. Tuy nhiên giải pháp này tỏ ra không hiệu quả khi
một truy vấn có thể phải lan truyền qua toàn bộ các node mạng để tìm được node ánh xạ
với nó. Để đẩy quá trình này, mỗi node Chord duy trì thêm một số thông tin định tuyến.
Với chiều dài định danh key/node là m bit, mỗi node n sẽ duy trì một bảng định
tuyến với
m entry, được gọi là bảng finger table. Entry thứ i trong bảng finger table chứa
định danh của node đầu tiên, s, mà tiếp sau n ít nhất 2
i -1

trên vòng tròn định danh, s =
successor(n + 2
i - 1
), với 1 ≤ i ≤ m. Node s được gọi là finger thứ i của node n và ký hiệu
là n.finger[i].node. Một entry trong bảng finger table còn bao gồm địa chỉ IP, định danh,
cổng của node finger đó. Có thể nhận thấy rằng, entry đầu tiên trong bảng finger table
của node n chính là successor của node n.

Hình 10: Bảng Finger table và các key gán cho từng node 0, 1, 3
Nhìn vào hình 10 ta thấy được mỗi entry trong bảng finger table của node 1 trỏ đến
successor node của các định danh (1+2
0
) mod 2
3
= 2,

(1+2
1
) mod 2
3
= 3, (1+2
2
) mod 2
3
=
5. Successor của định danh 2 là node 3, nó chính là node đầu tiên theo sau 2 trên vòng
tròn Chord; successor của định danh 3 chỉnh là node 3 và successcor của định danh 5 là
node 0.
2.2.3. Node tham gia/ rời mạng và quá trình đồng bộ ( stabilization)
Trong mạng Chord, mỗi node sẽ chạy định kỳ thuật toán đồng bộ mạng nhằm cập

nhập bảng finger table và các thông tin về successor, predecessor của nó. Việc này sẽ
giúp cho mạng Chord luôn hoạt động chính xác kể cả khi có node mới tham gia/rời mạng
hay một node bị lỗi.
Khi một node mới muốn tham gia vào m
ạng, nó sẽ trải qua các bước sau:
 Bước 1: Node mới sử dụng consistent hashing băm địa chỉ IP của chính nó để một
định danh ID.
 Bước 2: Node mới gửi thông điệp join với định danh ID của nó cho một node nào
đó đã tồn tại trên mạng – gọi là bootstrap node
 Bước 3: Bootstrap node sử dụng bảng finger table để tìm kiếm successor của định
danh ID – successor(ID) và sau đó sẽ gửi kết quả tìm kiếm cho node mới.
 Bước 4: Sau khi biết được successor của mình, node mới sẽ gửi thông điệp cảnh
bảo về việc gia nhập mạng của mình cho successor đó. Successor nhận được thông
điệp cảnh báo đó nó sẽ trỏ đến predecessor mới là node mới gia nhập mạng.
 Bước 5: Node mới sử dụng thuật toán đồ
ng bộ để cập nhập các thông tin về mạng.
Thuật toán đồng bộ chạy định kỳ tại mỗi node Chord. Giả sử node A đang định kỳ
chạy thuật toán đồng bộ. A sẽ yêu cầu successor của nó gửi thông tin về predecessor (
predecessor của successor của A). Nếu không có node nào join vào giữa node A và
successor của A thì kết quả trả về chính là định danh của node A. Ngược lại nếu có một
node mớ
i join vào giữa node A và successor của nó thì kết quả trả về sẽ là định danh của
node mới, từ đó node A có thể nhận biết được có node mới tham gia vào mạng. Và đến
lần đồng bộ tiếp theo, node A sẽ gửi thông báo đến node mới, node mới sẽ cập nhập lại
predecessor của nó trở thành node A.
Quá trình một node Chord rời mạng diễn ra đơn giản hơn khi một node tham gia
mạng. Trước khi rời mạng, node sẽ gửi toàn bộ dữ liệu của nó – các cặp (key - value) cho
successor. Sau đó nó sẽ thông báo cho successor cập nhập lại predecessor và thông báo
cho predecessor cập nhập lại successor. Cuối cùng node sẽ giải phóng các tài nguyên của
nó và thoát khỏi mạng. Trong trường hợp, một node rời mạng không đúng theo quy tắc (

node bị lỗi) thì toàn bộ dữ liệu mà node đó nắm dữ
sẽ bị mất và phải nhờ đến quá trình
đồng bộ thì mạng mới phát hiện và khôi phục được lỗi.
2.3. Thuật toán truyền tin multicast dựa trên nền mạng Chord
Một trong những vấn đề quan trọng nhất của multicast đó là tạo nhóm multicast,
tham gia và rời nhóm. Thay vì liên lạc với Router để tham gia hoặc là rời nhóm multicast
như IP multicast, tất cả các node muốn tham gia vào nhóm multicast sẽ hình thành một
mạng phủ ( overlay network) . Trong trường hợp này mạng phủ chính là mạ
ng Chord.
Node nguồn khởi tạo mạng Chord. Các node trong nhóm multicast tham gia vào
nhóm bằng cách kết nối vào mạng Chord mà node nguồn vừa tạo. Từ đó việc truyền
multicast trở thành việc truyền broadcast trên toàn mạng Chord. Phần dưới đây mô tả chi
tiết thuật toán truyền broadcast trong mạng Chord [8].
Thuật toán truyền tin broadcast trên mạng Chord
Mô hình hệ thống và ký hiệu
Chúng ta giả thiết hệ thống của chúng ta gồm tập hợp N node hình thành một mạng
Chord và bảng finger tạ
i mỗi node đã được cập nhập đầy đủ.
Thuật toán phân tán được chạy trên mỗi node của hệt thống được miêu tả dưới dạng
một “luật” có dạng sau:
receive(Sender: Receiver: Message(arg1….argn))
action(s)…
“Luật” này miêu tả sự kiện khi một node nhận được một thông điệp (Message) và
hành động action(s) sẽ được gọi với sự kiện đó. Node gửi sẽ gọi lệnh send(Sender:
Receiver: Message(arg1….argn)) để
gửi một thông điệp cho node nhận.


Khơi tạo một phiên broadcast
Broadcast có thể được khởi tạo ở bất kỳ node nào nếu như lớp ứng dụng trên lớp đó

yêu cầu. Đó là khi, một thực thể ứng dụng multicast tại node Q có thể yêu cầu node Q
một thông điệp InitBroadCast(Info) với Info là một phần của thông tin cần được
broadcast ví dụ như một phần của hình ảnh cần được gửi đi trong ứ
ng dụng video
streaming.


Hình 11: Node Q ứng với định danh 0 khởi tạo broadcast và finger table của node 0
Trong hình 11, hành động của node Q với định danh là 0, khi nhận được yêu cầu
gửi thông điệp InitBroadCast(Info) từ ứng dụng P:
receive(P : 0 : InitBroadcast(Info))
send(0 : 2 : Broadcast(Info, 5))
send(0 : 5 : Broadcast(Info, 11))
send(0 : 11 : Broadcast(Info, 16))
send(0 : 16 : Broadcast(Info, 0))
Node Q sẽ hoạt động như gốc của một cây không lặp. Như trong hình 11, node Q
thực hiện việc đó bằng cách gửi một thông điệp broadcast tới tất cả các hàng xóm của nó
trong bảng finger table.
Thông đi
ệp Broadcast(Info, Limit) chứa đựng thông tin Info cần được broadcast và
một tham số giới hạn Limit. Limit được sử dụng để hạn chế không gian chuyển tiếp gói
tin của node nhận được gói tin. Limit của finger[i] chính là finger[i+1], ( 1 ≤ i ≤ M - 1)
start int. succ.
1 [1, 2) 2
2 [2, 4) 2
4 [4, 8) 5
8 [8, 16) 11
16 [16, 32) 16

với M là số entry trong bảng finger table. Giới hạn cho entry cuối cùng trong bảng finger

table là một trường hợp đặc biệt khi Limit được đặt là định danh của chính node gửi gói
tin.
Xứ lý một thông điệp Broadcast
Khi node Q nhận được một thông điệp Broadcast(Info, Limit) , node Q phải chịu
trách nhiệm chuyển tiếp thông điệp cho cây con được xác định trong khoảng (Q, Limit).
Node Q sẽ chuyển tiếp thông điệp cho bất cứ finger nào mà có đị
nh danh đứng trước
Limit (nhỏ hơn Limit). Hơn nữa, khi chuyển tiếp cho mỗi finger, node Q sẽ áp đặt một
giới hạn mới NewLimit để định nghĩa một cây con nhỏ hơn cho node nhận tiếp theo.
NewLimit được xác định trong bảng finger table tương tự như tại node nguồn. Chú ý là,
NewLimit chỉ được xác định khi NewLimit vẫn còn thuộc khoảng (Q, Limit). Hình sau
đây mô tả luật khi một node nhận đượ
c một thông điệp broadcast

(a) (b)
Hình 12: (a)Hành động của các node khi nhận được gói tin broadcast
(b)finger table của node 5
Trong hình 12, khi node 5 nhận được thông điệp Broadcast(Info, 11) từ node 0 thì
nó sẽ gửi chuyển tiếp gói thông điệp đó cho node 7 với giới hạn Limit vẫn là 11.

receive(0 : 5 : Broadcast(Info,11))
send(5 : 7 : Broadcast(Info, 11))
start int. succ.
6 [6, 7) 7
7 [7, 9) 7
9 [9, 13) 11
13 [13, 21) 13
21 [21, 37) 22



Phản hồi (Reply)
Việc phản hồi thông điệp broadcast nhận được phụ thuộc vào loại thông tin chứa
đựng trong nó hoặc phụ thuộc vào yêu cầu của ứng dụng. Có 2 cách phản hồi đó là: (i)
Gói tin phản hồi sẽ được gửi ngược lại theo cây broadcast đã được hình thành từ trước
(ii) Gói tin phản hồi được gửi trực tiếp đến node nguồn của broadcast.

















×