Tải bản đầy đủ (.docx) (18 trang)

Bài tập lớn mạng máy tính tìm hiểu mô phỏng kênh truyền ALOHA

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 (591.38 KB, 18 trang )

111Equation Chapter 1 Section 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ - VIỄN THÔNG
====O0O====

BÀI TẬP LỚN
MẠNG MÁY TÍNH
Đề tài: Tìm hiểu mô phỏng kênh truyền ALOHA

1


Mục Lục
I.

Tổng quan ALOHA...................................................................................................4

II. Giao Thức Prue ALOHA..........................................................................................4
III. Đánh giá..................................................................................................................... 8
IV. Thiết kế và mô phỏng Prue ALOHA........................................................................9
1) Sơ đồ thuật toán.....................................................................................................9
Code xây dựng:........................................................................................................10
2) Mô phỏng..............................................................................................................13
a) Mô phỏng hiển thị bảng thông số bằng matlab..............................................13
b) Mô phỏng cách thức truyền bằng C#..............................................................15

2


Tài liệu tham khảo
/> /> /> /> />
3




I. Tổng quan ALOHA
- Aloha có nghĩa là "Xin chào".
- ALOHA là một hệ thống để phối hợp và phân quyền truy cập vào một kênh Mạng
truyền thông chia sẻ. Nó được phát triển vào những năm 1970 bởi Norman
Abramson và các đồng nghiệp của ông tại Đại học Hawaii. Hệ thống ban đầu được
sử dụng cho phát sóng radio trên mặt đất, nhưng hệ thống đã được thực hiện trong
-

các hệ thống truyền thông vệ tinh.
Một hệ thống truyền thông chia sẻ như ALOHA yêu cầu một phương pháp xử lý
va chạm xảy ra khi hai hoặc nhiều hệ thống cố gắng truyền tải trên kênh cùng một
lúc. Trong hệ thống ALOHA, một nút truyền bất cứ khi nào dữ liệu có sẵn để gửi
đi. Nếu nút khác truyền cùng một lúc, sự va chạm xảy ra, và các khung truyền
được mất. Tuy nhiên, một nút có thể nghe các chương trình phát sóng trên phương

-

tiện, ngay cả của riêng nó, và xác định xem các khung đã được truyền đi.
Aloha là một giao thức truy cập nhiều ở lớp datalink và đề xuất làm thế nào nhiều

thiết bị đầu cuối truy cập vào môi trường không có sự can thiệp hoặc va chạm.
II. Giao Thức Prue ALOHA
Pure ALOHA được giới thiệu bởi Norman Abramson và các cộng sự của
-

ông tại Đại học Hawaii vào đầu năm 1970.
Pure ALOHA cho phép mỗi trạm truyền dữ liệu bất cứ khi nào có dữ liệu
Khi mỗi trạm truyền dữ liệu mà không kiểm tra xem kênh có đang truyền hay


-

không.
Pure ALOHA bất cứ khi nào trạm phát một khung, nó sẽ nhận được sự thừa nhận
từ người nhận. Nếu không nhận được thông báo trong thời gian quy định, trạm giả

-

định rằng khung (hoặc xác nhận) đã bị phá hủy.
Nếu khung bị hủy vì va chạm trạm đợi một khoảng thời gian ngẫu nhiên và gửi
lại. Thời gian chờ đợi này phải ngẫu nhiên nếu không các khung tương tự sẽ va

chạm lại.
 Vì vậy, ALOHA thuần túy nói rằng khi thời gian trôi qua, mỗi trạm phải đợi một
khoảng thời gian ngẫu nhiên trước khi gửi lại khung của nó. Sự ngẫu nhiên này sẽ
giúp tránh va chạm nhiều hơn.

4


VD: Cho 4 Station truyền các Frame đi khi các Station có dữ liệu(Các Frame chứa
dữ liệu cần truyền)
o Các Frame 1.2,2.1,3.1,4.1 có sự va chạm nhau trong cùng 1 khoảng thời
gian thì các frame sẽ bị hủy đi do va chạm các frame không có sợ va chạm
vẫn tieeps tục truyền
o Các Frame bị va chạm sẽ phải truyền lại sau một khoảng thời gian ngẫu
nhiêu để tránh va chạm lại lần nữa cứ tiếp tục truyền như thế cho đến khi
thành công


Để đánh giá Prue ALOHA, cần phải dự đoán thông lượng của nó, tỷ lệ truyền
tải khung (thành công).
Giả định:
-

Tất cả các khung có cùng chiều dài là T.
5


-

Trạm không thể tạo ra một khung trong khi truyền hoặc cố truyền. (Tức là, nếu
một trạm tiếp tục cố gắng gửi một khung, nó không thể được phép tạo thêm khung
để gửi.)

-

Số lượng trạm cố gắng truyền (cả khung mới và khung cũ đã va chạm) theo phân
bố Poisson .

-

Với:
 T : thời gian cần thiết để truyền một khung hình trên các kênh
 G :truyền tải cho mỗi khung thời gian.(G là tham số Poisson)

Đối với bất kỳ khung thời gian nào, xác suất xảy ra sự cố k trong thời gian khung
hình đó là:
Cặp thời gian 2 khung liên tiếp, xác suất có sự cố gắng truyền k trong hai khung
thời gian là:

xác suất trong số đó không có sự truyền dẫn giữa t-T và t + T (và do đó truyền
thành công cho chúng ta) là:
6


Thông lượng có thể được tính như là tỷ lệ truyền dẫn-cố gắng nhân với xác suất
thành công, và có thể kết luận rằng thông lượng () là:
=G
Thông lượng tối đa là 0.5 / e khung mỗi khung hình thời gian (đạt được khi G =
0.5), khoảng 0,184 khung hình mỗi khung hình thời gian. Điều này có nghĩa là,
trong ALOHA tinh khiết, chỉ khoảng 18,4% thời gian được sử dụng để truyền
thành công.
Như vậy:
 Pure ALOHA có thời gian lãng phí lớn
 Có khả năng bị mất dữ liệu cao

III.

Đánh giá
Bảng đánh giá dựa trên mô phỏng

Bảng đánh giá 1

7


Pure ALOHA không đạt được hiệu quả cao và đạt được lớn khi có tải nhẹ và khi
tải càng tăng thì hiệu quả của pure càng giảm dầm do va chạm và mất gói tin

8



IV.

Thiết kế và mô phỏng Prue ALOHA

1) Sơ đồ thuật toán

9


- Tín hiệu bắt đầu truyền đi K=0
- Gói tin truyền đi sẽ đợi 1 khoảng thời gian phản hồi là 2Tp
10


- Nếu bản tin truyền đi nhận được ACK thành công thì thành công,nếu không
thành công thì lúc này K sẽ tang lên 1 để yêu cầu gửi bản tin lại
- Khi gửi lại nếu bản tincho ra K=Kmax thì loại bỏ còn không sẽ tạo 1 khoảng
thời gian ngẫu nhiên cho bản tin gửi lại và đợi khoảng thời gian là Tb sau đó cho
truyền lại từ đâù
Code xây dựng:
Matlab
function [efficiency, mean_wait_time, std_dev_wait_time] = pureALOHA(p,
num_nodes, num_time_slots, num_calculations)
efficiency = zeros(1, num_calculations);
mean_wait_time = zeros(1, num_calculations);
std_dev_wait_time = zeros(1, num_calculations);
time_interval = rand(1,num_nodes);
calculation_break = num_time_slots/num_calculations;

is_transmitting = ones(1,num_nodes);
was_transmitting = zeros(1,num_nodes);
wait_time = zeros(num_time_slots,num_nodes);
total_frames_transmitted = zeros(1,num_nodes);
for time_slot = 1:num_time_slots
collision = false;
for node = 1:num_nodes
for compare_node = 1:num_nodes
if(node == compare_node)
break;
elseif(is_transmitting(node) && is_transmitting(compare_node))
if(abs(time_interval(node) - time_interval(compare_node))
< 1)
collision = true;
break;
end
elseif(is_transmitting(node) &&
was_transmitting(compare_node))
if(abs(time_interval(node) - time_interval(compare_node))
< 1)
collision = true;
break;
end
end
end
if(collision)
break;
end
end
for node = 1:num_nodes

do_transmit = 1;
if(is_transmitting(node) && not(collision))

11


total_frames_transmitted(node) =
total_frames_transmitted(node) + 1;
was_transmitting(node) = 1;
else
if(is_transmitting(node))
was_transmitting(node) = 1;
else
was_transmitting(node) = 0;
end
do_transmit = binornd(1, p);
wait_time((total_frames_transmitted(node) + 1), node) =
wait_time((total_frames_transmitted(node) + 1), node) + 1;
end
if(do_transmit)
is_transmitting(node) = 1;
else
is_transmitting(node) = 0;
end
end
if(mod(time_slot, calculation_break) == 0)
calculation_iterator = time_slot/calculation_break;
mean_wait_time(calculation_iterator) =
sum(sum(wait_time))/sum(total_frames_transmitted);
std_dev_container = zeros(1, sum(total_frames_transmitted));

std_dev_container_iterator = 1;
for node = 1:num_nodes
for frame = 1:total_frames_transmitted(node)
std_dev_container(std_dev_container_iterator) =
wait_time(frame, node);
std_dev_container_iterator = std_dev_container_iterator +
1;
end
end
std_dev_wait_time(calculation_iterator) = std2(std_dev_container);
efficiency(calculation_iterator) =
(sum(total_frames_transmitted)/time_slot)/2;
end
end
end

C++
if (r.Equals(text1))
{
if (!packet1_got_collided)
{
if (collided_packet_list.Contains(text1))
collided_packet_list.Remove(text1);
if (Canvas.GetLeft(text1) < Canvas.GetLeft(router_img) && !is_packet1_reached)
Canvas.SetLeft(text1, Canvas.GetLeft(text1) + speed_of_p1);
else if (!is_packet1_reached)

12



{

}

log.Items.Add("packet 1 reached at router")
is_packet1_reached = true;
Canvas.SetLeft(text1, packet1_left);

}

}
else if (r.Equals(text2))
{
if (!packet2_got_collided)
{
if (collided_packet_list.Contains(text2))
collided_packet_list.Remove(text2);
if (Canvas.GetTop(text2) < Canvas.GetTop(center_text) && !is_packet2_reached)
{
Canvas.SetTop(text2, Canvas.GetTop(text2) + speed_of_p2);
}
else if(!is_packet2_reached)
{
Canvas.SetLeft(text2, Canvas.GetLeft(text2) + speed_of_p2);
if(Canvas.GetLeft(text2) > Canvas.GetLeft(router_img))
{
is_packet2_reached = true;
log.Items.Add("packet 2 reached at router");
Canvas.SetLeft(text2, packet2_left);
Canvas.SetTop(text2, packet2_top);

}
}
}
}
else if (r.Equals(text3))
{
if (!packet3_got_collided)
{
if (collided_packet_list.Contains(text3))
collided_packet_list.Remove(text3);
if (Canvas.GetTop(text3) > Canvas.GetTop(center_text) && !is_packet3_reached)
{
Canvas.SetTop(text3, Canvas.GetTop(text3) - speed_of_p3);
}
else if (!is_packet3_reached)
{

}
}

Canvas.SetLeft(text3, Canvas.GetLeft(text3) + speed_of_p3);
if (Canvas.GetLeft(text3) > Canvas.GetLeft(router_img))
{
is_packet3_reached = true;
// MessageBox.Show("packet 3 reached at router ");
log.Items.Add("packet 3 reached at router");
Canvas.SetLeft(text3, packet3_left);
Canvas.SetTop(text3, packet3_top);
}


13


MAT

2) Mô phỏng
a) Mô phỏng hiển thị bảng thông số bằng matlab

Bảng thông số 1

14


Bảng thông số

15


b) Mô phỏng cách thức truyền bằng C#

16


Bắt đầu truyền 1

Khi xảy ra va chạm 1và 3

17



Khi xảy ra va chạm 1 và 2

Khi truyền thành công

18



×