Để ngăn việc giảm tốc độ không cần thiết trước khi việc mất tín hiệu tạm thời được khôi phục, nguồn RCSaM backoffs ở cuối của giai đoạn Detected, giữ tốc độ truyền hiện tại nếu không có gói ACK được nhận trong giai đoạn này. RCSaM chuyển sang trạng thái Backoff và gọi thuật toán Backoff ().
Hình 3.4.5: Thuật toán Backoff
Trạng thái Backoff bất đầu tại thời điểm t0 và kết thúc khi có nhận được gói ACK. Trong quá trình thực hiện thuật toán, S và IPG không thay đổi, wdsn =0.
t, S t0 = t; IPG = 1/S; tnext_data = t0;wdsn = 0;
ack_received=false;
state=Steady; tnext_data = tnext_data + IPG;
ack_received=true; send(DUMMY_PACKET); send(DATA_PACKET); t >= tnext_data + IPG/2 t >= tnext_data ACK_ARRIVAL + + + a + a a a ack_received==false
Trong giai đoạn Backoff, nguồn RCSaM ngừng chia đôi tốc độ truyền và đợi gói ACK để biết tín hiệu đã quay lại. Tại thời điểm đó, nguồn gửi gói dữ liệu và gói dummy với tốc độ truyền S như nhau. Chỉ một lần nguồn nhận được gói ACK của gói dữ liệu hoặc gói dummy, nó sẽ chuyển sang trạng thái Steady. Nếu không nhận được gói ACK trong thời gian timeout TB, nguồn chuyển sang trạng thái Initial.
Có 2 lý do để duy trì truyền gói dữ liệu trong trạng thái Backoff. Ứng dụng đa phương tiện thời gian thực có thể mất có gói với một mức độ nhất định và có giới hạn thời gian, cần duy trì truyền tiếp tục tốt hơn bằng việc giữ dữ liệu trong bộ đệm cho đến khi tin hiệu có lại. Thứ hai, mặc dù trạng thái blockage xảy ra trong trạng thái Detected, nhưng cũng có khả năng dấu hiệu đó có thể quay lại trong trạng thái Backoff. Vì thế thay cho đợi nhận gói ACK để kết thúc trạng thái Backoff, truyền gói đa phương tiện lossatolerant timeasensitive có thể tăng chất lượng dịch vụ bên nhận.
Nguồn RCSaM gửi một gói dummy cho mỗi gói dữ liệu trong trạng thái Backoff. Wdsn =0, trong trạng thái Steady nguồn tăng tốc độ truyền S thêm 1/SRTT sau mỗi lần nhận gói ACK của gói dummy truyền trong trạng thái.
3.5. Hoạt động của RCS!M
Khi xảy rất mất gói do tắc nghẽn hay do lỗi liên kết hoặc do mất tín hiệu tạm thời, RCSaM sử dụng linh hoạt ba thuật toán Detected(), Steady() và Backoff(). Trong cả 3 trường hợp mất gói, nguồn RCSaM đang ở trạng thái Steady, tại t=t0, phát hiện mất gói, nguồn chuyển sang trạng thái Detected.
3.5.1. Hành vi của RCS!M khi mất gói do lỗi liên kết
Hình 3.5.1 mô tả hoạt động của RCSaM khi mất gói do lỗi liên kết
Hình 3.5.1: Hành vi của RCSaM khi mất gói do lỗi liên kết + t=t0 (S=S0, state=Steady): Giả thiết tại thời điểm t0 tương ứng là S0.
+ t0<t<t1=t0+SRTT (S=S0/2, wdsn=SRTT.S0/2, state=Detected): Giả thiết tại t0 nguồn phát hiện ra mất gói. Khi nguồn vào trạng thái Detected thì chia đôi tốc độ S=S0/2 và wdsn= SRTT.S0/2 và truyền (SRTT.S0) gói dummy với tốc độ bằng S0.
t = t0 S=S0 State=Steady t0 t1 t2 t3 t0<t <=t1 S=S0 /2 wdsn=SRTT*S0/2 state=Detected t1<t <t2 S=S0 /2 wdsn >0 state=Steady t2=<t <t3 S0 /2<S=S0 wdsn=0 state=Steady t =t3 S=S0 wdsn=0 state=Steady t
+ t1<t<t2=t1+0.5*SRTT (S=S0/2,wdsn>0, state=Steady): Vào thời gian t = t1, RCSa M trở về trạng thái Steady và bắt đầu nhận các gói ACK của các gói dummy truyền trong khoảng [t0,t1]. Nếu mạng không tắc nghẽn, các gói dummy không mất, thì số gói ACK của gói dummy nhận được trong khoảng thời gian [t1,t2] là (SRTT*S0/2); wdsn >0 và S không tăng.
+ t2<t<t3 = t1+SRTT (S0/2<S<S0,wdsn=0, state= steady): Trong khoảng thời gian này nguồn nhận gói ACK của (SRTT*S0/2) gói dummy truyền trong giai đoạn Detected. Khi wdsn =0, nguồn tăng tốc độ truyền thêm 1/SRTT sau mỗi lần nhận gói ACK của gói dummy.
+ t=t3 (S=S0,wdsn=0, state = Steady): Tại t3 nguồn nhận gói ACK của tất cả các gói dummy (nDummy =SRTT*S0) truyền trong khoảng thời gian [t0,t1], tương ứng tăng tốc độ truyền ( S= S0/2);
Như vậy, S khôi phục giá trị có trước khi phát hiện mất gói dữ liệu nhờ việc truyền gói dummy trong trạng thái Detected.
3.5.2. Hành vi của RCS!M khi mất gói do tắc nghẽn mạng
Hình 3.5.2: Hành vi của RCSaM khi mất gói do tắc nghẽn mạngRCSaM chia đôi tốc độ truyền của nó khi mạng tắc nghẽn. RCSaM chia đôi tốc độ truyền của nó khi mạng tắc nghẽn.
+ t=t0 (S=S0, state = steady): Giả thiết tại thời điểm t0 tương ứng là S0.
+ t0<t<t1=t0+SRTT (S=S0/2, wdsn=SRTT.S0/2,state=Detected): Giả thiết tại t0 nguồn phát hiện mất gói. Giả thiết mất gói vì tắc nghẽn mạng, đường kết nối có thể điều tiết ở tốc độ lớn nhất là S0. Khi nguồn vào trạng thái Detected giảm tốc độ S=S0/2, tạo wdsn từ wdsn0=SRTT.S0/2, truyền (SRTT*S0) gói dummy với tốc độ bằng S0. Tốc độ truyền toàn bộ là 3*S0/2 nhưng đường kết nối có thể điều chỉnh lớn nhất S0. Những gói dữ liệu có mức ưu tiên cao chưa được vứt bỏ trong khi một nửa gói dummy có mức ưu tiên thấp sẽ được vứt bỏ.
+ t1<t<t2=t1+0.5*SRTT (S=S0/2,wdsn>0, state=Steady): Vào thời gian t = t1, RCSaM trả lại trạng thái Steady và bắt đầu nhận gói ACK của (SRTT*S /2) gói
t = t0 S=S0 State=Steady t0 t1 t2 t0<t <=t1 S=S0 /2 wdsn=SRTT*S0/2 state=Detected t1<t <t2 S=S0 /2 wdsn >0 state=Steady t =t2 S=S0/2 wdsn=0 state=Steady t
dummy truyền vào thời gian khoảng[t0,t1] chưa bị vứt bỏ do router tắc nghẽn. Wdsn >0 trong khoảng thời gian [t1,t2] và S không tăng.
+ t>=t2 (S=S0/2,wdsn>0, state=Steady): Từ thời gian t2, tất cả các gói ACK của các gói dummy chưa giải phóng trong nguồn mạng. Giá trị wdsn luôn lớn hơn 0 khi gói ACK của gói dummy được nhận. Vậy các gói dummy truyền trong trạng thái Detected không làm tăng tốc độ truyền, có nghĩa là RCSaM là thân thiện TCP.
3.5.3. Hành vi của RCS!M khi mất gói do mất tín hiệu tạm thời
Hình 3.5.3: Hành vi của RCSaM khi mất gói do mất tín hiệu tạm thời+ t=t0 (S=S0,state=Steady): Giả thiết tại thời điểm t0 tương ứng là S0. + t=t0 (S=S0,state=Steady): Giả thiết tại thời điểm t0 tương ứng là S0.
+ t<t<t1 =t0+SRTT (S=S0/2,wdsn =SRTT.S0/2,state=Detected): Giả thiết tại t0 nguồn phát hiện mất lỗi do tín hiệu mất tạm thời. Nguồn vào trạng thái Detected, giảm S=S0/2 và wdsn0=SRTT.S0/2.
+ t1<t<t2 là thời điểm nhận gói ACK đầu tiên (S=S0/2, wdsn=0,state=Backoff): Khi mất tín hiệu, nguồn không nhận gói ACK trong khoảng thời gian này và chuyển đến trạng thái Backoff tại t=t1. Nguồn truyền gói dữ liệu và gói dummy với tốc độ S=S0/2. Chỉ cần nhận một gói ACK nghĩa là tín hiệu mất đã được phục hồi, nguồn kết thúc trạng thái Backoff, SRTT.S0/2 gói dummy được truyền trước khi kết thúc trạng thái Backoff.
+ t2<t<t3 =t2+SRTT (S0/2 <S<=S0,wdsn =0,state=Steady):Trong khoảng thời gian này, nguồn nhận gói ACK của gói dummy truyền trong giai đoạn Backoff sau khi phục hồi tín hiệu mất tạm thời, wdsn =0, nguồn có thể tăng tốc độ thêm 1/SRTT sau mỗi lần nhận gói ACK của gói dummy.
+ t=t3 (S=S0,wdsn =0,state=Steady): Tại thời điểm này, nguồn nhận gói ACK của tất cả (SRTT.So/2) gói dummy gửi trong khoảng thời gian [t1,t2]. Vì thế tốc độ ban đầu được hồi phục trong khoảng SRTT sau khi phục hồi tín hiệu mất tạm thời.
t = t0 S=S0 State=Steady t0 t1 t2 t3 t0<t <=t1 S=S0 /2 wdsn=SRTT*S0/2 state=Detected t1<t <t2 S=S0 /2 wdsn >0 state=Backoff t2=<t <t3 S0 /2<S=S0 wdsn=0 state=Steady t =t3 S=S0 wdsn=0 state=Steady t
3.6. Kết luận chương
RCSaM là giao thức điều khiển tốc độ dùng để truyền đa phương tiện chạy trên UDP, dùng gói dummy để phân biệt nguyên nhân mất gói. Nguyên nhân mất gói có thể do tắc nghẽn, do lỗi liên kết hoặc do mất tín hiệu tạm thời. Cũng giống kết nối không liên tục, việc mất tín hiệu của hệ thống truyền thông vệ tinh vùng di động hoặc suy giảm tín hiệu bởi yếu tố môi trường như núi, cầu, đường hầm, v.v. hoặc do điều kiện thời tiết như mưa bão làm cho dữ liệu không thể truyền thành công tới nơi nhận và giảm chất lượng đường truyền.
RCSaM gồm bốn trạng thái: Intial, Steady, Detected và Backoff. Trạng thái Initial sẽ thiết lập tốc độ truyền ban đầu không gây ra tắc nghẽn. Trong trạng thái Steady, nguồn RCSaM giả thiết mạng không tắc nghẽn. Theo lược đồ additiveaincrease, RCSaM tăng thêm tốc độ truyền định kỳ. Khi xảy ra mất gói dữ liệu, RCSaM chuyển từ trạng thái Steady sang trạng thái Detected. Khi bắt đầu vào trạng thái Detected, RCSaM chưa biết nguyên nhân mất gói, RCSaM sẽ coi mất gói do tắc nghẽn và giảm tốc độ đi một nửa, đồng thời truyền các gói dummy để thăm dò tính sẵn sàng của tài nguyên mạng và phân biệt nguyên nhân mất gói. Cuối giai đoạn Detected, nguồn RCSaM quay lại trạng thái Steady hoặc chuyển sang trạng thái Backoff. Trong trạng thái Detected những gói dữ liệu được gửi với tốc độ S và hai gói dummy được truyền cho mỗi gói dữ liệu. RCSaM nguồn đợi gói ACK trong khoảng thời gian trạng thái Detected đánh giá lý do mất gói. Nếu gói mất vì lỗi liên kết khi đó nguồn RCSaM nhận gói ACK trong khoảng thời gian SRTT. Nếu mất gói vì tắc nghẽn, RCSaM thực hiện điều chỉnh tốc độ để giải quyết tắc nghẽn tối đa trong một SRTT. Do vậy trong khoảng thời gian SRTT, nếu không nhận được gói ACK, có thể suy ra mất gói là do mất tín hiệu tạm thời chứ không phải do tắc nghẽn. Nếu không có gói ACK được nhận trong giai đoạn Detected, khi đó nguồn RCSaM không quay lại trạng thái Steady mà chuyển đến trạng thái Backoff. Nguồn RCSaM gửi một gói dummy cho mỗi gói dữ liệu trong trạng thái Backoff. Trong giai đoạn Backoff, nguồn RCSaM ngừng chia đôi tốc độ truyền và đợi gói ACK để biết tín hiệu kênh đã được phục hồi. Chỉ một lần nguồn phát nhận được gói ACK của gói dữ liệu hoặc gói dummy, nó sẽ chuyển sang trạng thái Steady. Nếu không nhận được gói ACK, nguồn phát chuyển sang trạng thái Initial.
Chương 4 ! Mô hình mô phỏng và các kết quả đạt được
4.1. Mô hình mô phỏng của RCS ! M
4.1.1. Mô hình mô phỏng tổng quát
Mạng vệ tinh là một ví dụ tiêu biểu của mạng với có độ rộng băng thông cao và tỷ lệ bit lỗi lớn. Hệ thống mô phỏng sẽ tạo ra N nguồn truyền dữ liệu đến N đích, N nguồn và N đích được nối với 2 trạm A, B để thu và phát tín hiệu vệ tinh (hình 4.1.1). Ở trạm A buffer chứa được K gói. Tất cả gói dữ liệu và gói dummy có thể mất do lỗi liên kết với xác suất Ploss trong liên kết vệ tinh.
4.1.2. Công cụ mô phỏng (NS2)
NS là mô phỏng mạng phát triển tại UC Berkely dùng cho mô phỏng mạng IP. Nó thực thi đầy đủ các giao thức mạng như TCP, UDP, các nguồn lưu lượng như FTP, Telnet, Web, CBR và VBR, các kỹ thuật quản lý hàng đợi như Drop Tail, RED và CBQ, các thuật toán định tuyến như Dijkstra, và nhiều hơn thế. NS 2 viết trên C++ và Otcl (ngôn ngữ lập trình Tcl với mở rộng hướng đối tượng phát triển tại MIT).
Khi dùng NS, kịch bản chương trình mô phỏng được viết trên ngôn ngữ Otcl. Tập lệnh OTcl giúp lập kịch bản các sự kiện (thời gian bắt đầu và kết thúc kết nối), đặt cấu trúc mạng, v.v. Khi người dùng muốn tạo nên đối tượng mạng mới, có thể dễ dàng tạo một đối tượng bằng cách viết đối tượng mới hoặc bằng cách tạo đối tượng ghép từ thư viện đối tượng và tạo (plump) đường dữ liệu qua đối tượng.
Lập biểu sự kiện và các đối tượng thành phần mạng cơ bản trên đường dữ liệu được viết và biên dịch bằng C++. Đối tượng biên dịch thực hiện được qua kết nối Otcl, tạo nên liên kết giữa đối tượng Otcl với mỗi đối tượng C++ và tạo hàm điều khiển và biến cấu hình trong đối tượng C++ thực thi như hàm thành viên và biến
Hình 4.1.1: Mô hình mô phỏng
Hình 4.1.2: Tổng quan đơn giản hóa của NS
thành viên của đối tượng Otcl tương ứng. Với cách này, điều khiển của đối tượng C++ được truyền tới Otcl. Mỗi đối tượng có thể được thực hiện hoàn toàn trong Otcl hoặc C++. Hình 4.1.3 cho thấy ví dụ về hệ thống cấp bậc đối tượng trong C++ và OTcl. Một điều cần chú ý trong hình vẽ là đối tượng C++ có kết nối OTcl tạo thành hệ thống cấp bậc, Trên hình là hệ thống cấp bậc đối tượng Otcl phù hợp và đơn giản của C++.
Hình 4.1.4 chỉ ra cấu trúc chung của NS. Người dùng (không phải người phát triển NS) chỉ cần quan tâm góc dưới bên trái trong hình, và thiết kế, chạy mô phỏng trong Tcl dùng đối tượng mô phỏng trong thư viện Otcl, lập biểu sự kiện thực hiện trong C++ và kết nối tới Otcl khi sử dụng tclcl. Tất cả cùng nhau tạo thành NS, phiên dịch Tcl mở rộng hướng đối tượng với thư viện mô phỏng mạng.
Ở hình 4.1.2, khi một mô phỏng kết thúc, NS đưa ra một hoặc nhiều file text cơ bản bao gồm dữ liệu mô phỏng chi tiết. Dữ liệu đó có thể dùng để phân tích mô phỏng hoặc dữ liệu có thể được đưa vào công cụ trình bầy mô phỏng đồ họa gọi là NAM (Network Animator) a một phát triển của dự án VINT. NAM có giao diện đồ họa đẹp như một player CD (play, fast forward, rewind, pause, v.v.). Hơn nữa, nó có thể đưa ra thông tin bằng biểu đồ về thông lượng và số các gói rơi tại mối đường liên kết, mặc dù thông tin đồ họa không thể dùng cho hiển thị mô phỏng chính xác.
4.1.3. Kết xuất dữ liệu
Khi chạy một kịch bản sẽ sinh ra NAM trace file dùng làm dữ liệu đầu vào cho NAM và trace file có tên là "out.tr". "out.tr" dùng để phân tích mô phỏng. Hình dưới là định dạng của trace file.
Mỗi dòng bắt đầu với một sự kiện (+, a, d, r) miêu tả bởi mỗi thời gian mô phỏng (cột 2) của sự kiện, từ node nào đến node nào. Tiếp theo hai thông tin loại và kích thước gói là flags (khi xuất hiện "aaaaa" nghĩa là lúc đó không có cờ thiết lập). Hiện nay NS chỉ thực hiện bit ECN (Explicit Congestion Notification), các bit còn lại
không sử dụng. Trường tiếp theo là flow id (fid), người dùng có thể thiết lập mỗi luồng tại đầu vào của kịch bản OTcl, trường này có thể ít dùng trong mô phỏng, người dùng có thể dùng trường này cho việc phân tích mục đích nhất định. Hai trường tiếp theo là địa chỉ nguồn và đích với định dạng "node.port". Trường tiếp theo là số thứ tự gói của
Hình 4.15. Ví dụ về địnhdạng Trace
giao thức tầng mạng. Tuy thực thi UDP không dùng số thứ tự, NS giữ số thứ tự của gói UDP để dùng cho mục đích cụ thể. Trường cuối cùng là số id duy nhất của gói.
Khi chạy một kịch bản mô phỏng ta sẽ thu được một tracefile cụ thể. Dựa vào các trường của tracefile ta có thể hiểu rõ được quá trình mô phỏng. Khi muốn đọc và xử lý tracefile để lọc ra những dữ liệu cần quan tâm ta có thể sử dụng ngôn ngữ kịch bản perl hoặc awk (đây là hai ngôn ngữ có cú pháp gần giống với C). Tùy vào từng trường hợp cụ thể ta sẽ có các cách riêng để lọc dữ liệu.
4.1.4. Các bước để tạo một kịch bản mô phỏng
Có 7 bước để tạo một kịch bản mô phỏng:
+ Bước 1: Tạo một đối tượng mô phỏng dùng lệnh set ns [new Simulator]. + Bước 2: Tạo file tệp tin
set nf [open out.nam w] $ns namtrace2all $nf set tf [open out.tr w] $ns namtrace2all $tf + Bước 3: Tạo thủ tục “finish”
proc finish {} { global ns nf tf $ns flush2trace close $nf close $tf
exec nam out.nam & exit 0
}
+ Bước 4: Tạo cấu trúc mô phỏng • Tạo node: set n0 [$ns node].
• Tạo liên kết: $ns duplex!link node1 node2 bandwidth delay queue2type . • Tạo giới hạn hàng đợi: $ns queue!limit node1 node2 number.
+ Bước 5: Agent
• Tạo Agent: set tcp [new Agent/TCP].
• Gắn Agent với node: $ns attach!agent node agent.
• Tạo ra kết nối mạng hợp lý giữa hai Agent: $ns connect agent1 agent2. + Bước 6: Thiết lập thời gian bắt đầu kết nối $ns at time "string"và thiết lập thời
gian kết thúc $ns at time "finish". Ví dụ:$ns at 0.1 "$cbr start". + Bước 7: Chạy mô phỏng dùng lệnh $ns run.
4.2. Kết quả thử nghiệm mô phỏng
4.2.1. Đo tốc độ truyền tin khi không có lỗi kênh
Ta thực hiện đo tốc độ truyền khi không có lỗi kênh với kênh vệ tinh lần lượt là