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ài tập lớn mạng máy tính tìm hiểu mô phỏng kênh truyền ALOHA 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ài tập lớn mạng máy tính tìm hiểu mô phỏng kênh truyền ALOHA 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ài tập lớn mạng máy tính tìm hiểu mô phỏng kênh truyền ALOHA
Trang 1111Equation 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
Trang 2Mụ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
Trang 3Tài liệu tham khảo
https://stackoverflow.com/questions/27572368/simulation-of-pure-aloha-protocol
https://stackoverflow.com/questions/27572368/simulation-of-pure-aloha-protocol
https://techdifferences.com/difference-between-pure-aloha-and-slotted-aloha.html
http://users.ecs.soton.ac.uk/sqc/EL336/CNL-7.pdf
https://www.slideshare.net/bhanutulya17/aloha-protocol-in-detail
Trang 4I 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.
Trang 5 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
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
Trang 6Để đá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.
- 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)
Trang 7Đố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à:
GKe−G
k !
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à:
(2 G)ke−2 G
k !
xác suất Probpuretrong 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à:
Probpure= e−2G
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 ( Spure) là:
Spure= Ge−2 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á
Trang 8Bảng đánh giá dựa trên mô phỏng
xác suất lỗi
số node
Bảng đánh giá 1
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
IV Thiết kế và mô phỏng Prue ALOHA
Trang 91) Sơ đồ thuật toán
Start
ĐỢI Tb
Tb=RxTb
K=K+1
ĐỢI PHẢN HỒI
2 Tp
CHON NGẪU NHIÊN
R TRONG KHOẢNG
0÷2^(K-1)
GỬI GÓI TIN K=0
Trang 10- 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
- 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);
collision = false;
< 1)
collision = true;
elseif(is_transmitting(node) &&
was_transmitting(compare_node))
< 1)
collision = true;
Trang 11break;
do_transmit = 1;
if(is_transmitting(node) && not(collision))
total_frames_transmitted(node) =
total_frames_transmitted(node) + 1;
was_transmitting(node) = 1;
was_transmitting(node) = 1;
was_transmitting(node) = 0;
do_transmit = binornd(1, p);
wait_time((total_frames_transmitted(node) + 1), node) =
wait_time((total_frames_transmitted(node) + 1), node) + 1;
is_transmitting(node) = 1;
is_transmitting(node) = 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;
std_dev_container(std_dev_container_iterator) =
wait_time(frame, node);
std_dev_container_iterator = std_dev_container_iterator + 1;
std_dev_wait_time(calculation_iterator) = std2(std_dev_container); efficiency(calculation_iterator) = (sum(total_frames_transmitted)/ time_slot)/2;
end
end
C++
Trang 12if (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) {
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) {
Trang 13Canvas.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);
}
}
}
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
Trang 14Bảng thông số
Trang 15b) Mô phỏng cách thức truyền bằng C#
Trang 16Bắt đầu truyền 1
Khi xảy ra va chạm 1và 3
Trang 17Khi xảy ra va chạm 1 và 2
Khi truyền thành công