PHẦN VI: MỘT SỐ THUẬT TOÁN CẦN CHÚ í
6.1.2. Phỏt hiện vũng lặp và giải quyết xung đột:
Mặc dự xỏc suất xảy ra xung đột cỏc định danh SSRC là nhỏ, nhưng mọi ứng dụng RTP đều phải cú sự cài đặt cỏc cơ chế để phỏt hiện xung đột và chọn ra cỏc cơ chế giải quyết thớch hợp. Bất cứ khi nào một nguồn nhận ra rằng cú một nguồn khỏc đang sử dụng SSRC trựng với mỡnh thỡ nú sẽ gởi gúi RTCP-BYTE với định danh SSRC cũ, sau đú nú sẽ chọn lại một giỏ trị SSRC ngẫu nhiờn khỏc.
Khi một người nhận phỏt hiện ra rằng cú hai nguồn đang xung đột, nú sẽ chọn giữ lại cỏc gúi tin của một nguồn và loại bỏ cỏc gúi tin của nguồn kia. Việc phõn biệt hai nguồn này được thực hiện dựa trờn giỏ trị của địa chỉ truyền tải của nguồn hoặc dựa trờn trường CNAME. Cả hai nguồn xung đột đều được cài đặt cơ chế giải quyết xung đột, do vậy tỡnh trạng này sẽ khụng kộo dài.
Bởi vỡ giỏ trị của SSRC được giữ đảm bảo là duy nhất trong toàn bộ phiờn RTP, do vậy nú cú thể được sử dụng để phỏt hiện vũng lặp gõy ra bởi cỏc bộ “translator” và “mixer”. Vũng lặp là hiện tượng nhõn đụi cỏc gúi dữ liệu hoặc thụng tin điều 83
khiển và truyền chỳng tới cựng đớch. Vũng lặp xuất hiện do một số nguyờn nhõn gõy sau:
• Một bộ “translator” cú thể chuyển tiếp một gúi dữ liệu tới một nhúm multicast mà cỏc nguồn tại đấy đó nhận được gúi dữ liệu rồi. Trong trường hợp này, cựng một gúi dữ liệu sẽ xuất hiện nhiều lần tại bờn nhận, xuất phỏt từ cỏc nguồn khỏc nhau.
Hỡnh 6.1: Minh hoạ lặp vũng.
• Khi hai “translator” mắc song song, được cài đặt khụng đỳng cỏch, chỳng cú cựng một nhúm địa chỉ multicast, do vậy khi một gúi tin được chuyển tới, nú sẽ đồng thời được chuyển tiếp tới cựng 1 địa chỉ đớch. Cỏc bộ “translator” đơn hướng sẽ tạo ra 2 bản copy, cũn cỏc bộ “translator” hai chiều sẽ cú thể hạn chế được vũng lặp.
Khi một nguồn nhận ra rằng gúi tin của nú đang bị lặp vũng, hoặc gúi tin của một nguồn khỏc bị lặp vũng. Cả sự lặp vũng và xung đột do việc chọn cỏc giỏ trị SSRC một cỏch ngẫu nhiờn đều gõy ra việc cỏc gúi dữ liệu đến co cựng định danh SSRC nhưng lại cú địa chỉ giao vận khỏc nhau. Bởi vậy khi một nguồn thay đổi địa chỉ giao vận của mỡnh thỡ phải chọn một giỏ trị SSRC mới để trỏnh gõy ra lặp vũng. Điều này khụng hề bắt buộc, bởi trong một số ứng dụng RTP, một nguồn cú thể thay đổi địa chỉ trong suốt phiờn truyền.
Khi một bộ “translator” restart, địa chỉ giao vận của nú cũng thay đổi (do địa chỉ cổng UDP của nguồn thay đổi), nếu trước đú nú đó gởi đi cỏc gúi số liệu thỡ cỏc gúi này sẽ bị coi là lặp vũng đối với bờn nhận. Do giỏ trị SSRC trờn cỏc gúi đú là giỏ trị cũ khỏc với giỏ trị SSRC của nguồn sau khi khởi động lại. vấn đề này cú thể trỏnh được bằng cỏch giữ nguyờn địa chỉ giao vận trong quỏ trỡnh khởi động lại.
Khi xung đột hoặc lặp vũng xảy ra cỏch xa “mixer” hoặc “translator” sẽ khụng thể phỏt hiện được dựa trờn địa chỉ giao vận, nếu tất cả cỏc bản sao của gúi đều được chuyển qua 1 bộ “translator” hoặc “mixer”. Khi đú xung đột phải được phỏt hiện dựa trờn trường CNAME. Nếu xung đột SSRC xảy ra, sẽ dẫn đến hiện tượng 2 gúi tin cú cựng SSRC nhưng lại cho CNAME khỏc nhau.
Để cú thể phỏt hiện và giải quyết những xung đột, RTP cần phải được cài đặt thờm một thuật toỏn như được nờu ở phần sau. Theo thuật toỏn này, cỏc gúi tin của một nguồn mới tham gia hoặc sự lặp vũng gõy lờn xung đột với một nguồn cú săn sẽ bị bỏ qua. Nú giải quyết xung đột giỏ trị SSRC của cỏc thành viờn bằng cỏch gởi đi gúi RTCP-BYTE, mang giỏ trị SSRC cũ (bị xung đột), chọn lại một giỏ trị SSRC mới. Tuy nhiờn khi xung đột gõy ra bởi sự lặp vũng cỏc gúi tin của chớnh mỡnh, thuật toỏn sẽ chọn một định danh mới duy nhất một lần và sau đú bỏ qua tất cỏc cỏc gúi từ địa chỉ nguồn bị lặp vũng. Việc này là nhằm trỏnh trường hợp cỏc gúi BYTE khi gởi đi cũng bị lặp dẫn đến việc tràn ngập gúi BYTE.
Theo thuật toỏn này, cần phải tạo một bảng, đỏnh số bằng cỏc giỏ trị SSRC, địa chỉ giao vận của cỏc nguồn. Cỏc giỏ trị này được ghi vào bảng khi gúi RTP và gúi RTCP đầu tiờn mang định danh mới được nhận. Bảng sẽ được cập nhật cỏc trạng thỏi của của cỏc nguồn. Mỗi giỏ trị SSRC hay CSRC nhận được từ cỏc gúi RTP hoặc RTCP sẽ được so sỏnh với cỏc giỏ trị trong bảng để cập nhật cỏc thụng tin về dữ liệu hoặc thụng tin điều khiển.
Nếu địa chỉ nguồn ban đầu được nhận thụng qua một ”mixer” và sau đú nú nhận được từ nguồn đú một cỏch trực tiếp, thỡ bờn nhận được khuyến cỏo nờn chọn địa chỉ mới hơn. Trong cỏc ứng dụng như điện thoại, cú một số nguồn như cỏc thực thể di động cú thể thay đổi địa chỉ trong suốt một phiờn RTP, nờn giao thức RTP phải 85
cung cấp thuật toỏn phỏt hiện xung đột để chấp nhận cỏc gúi đến từ địa chỉ nguồn mới.
Khi cú một định danh SSRC mới được chọn do hiện tượng xung đột, thỡ định danh SSRC được chọn phải được kiểm tra trong bảng định danh nguồn để xem nú đó được dựng bởi nguồn nào hay chưa. Nếu định danh đú đó được dựng rồi thỡ định danh khỏc được tạo ra và tiếp tục quỏ trỡnh kiểm tra đú.
Một vũng lặp cỏc gúi dữ liệu cú thể gõy ra hiện tượng tràn khi nú được multicast. Tất cả cỏc ”mixer” và ”translator” phải thực hiện thuật toỏn phỏt hiện vũng lặp để phỏ vỡ chỳng. Tuy nhiờn, trong trường hợp xấu nhất khi ”mixer” và ”translator” khụng làm việc chớnh xỏc, tức là khụng loại bỏ được vũng lặp thỡ điều cần thiết là cần phải cho cỏc hệ thống cuối ngừng hoàn toàn việc truyền phỏt cỏc gúi dữ liệu và điều khiển. Việc truyền lại cú thể được thử lại định kỳ sau một khoảng thời gian dài ngẫu nhiờn (đơn vị phỳt).
Thuật toỏn sẽ được nờu ở phần phụ lục.