1. Trang chủ
  2. » Luận Văn - Báo Cáo

Bài tập lớn mạng máy tính xây DỰNG CHƯƠNG TRÌNH mô PHỎNG THUẬT TOÁN tìm ĐƯỜNG đi NGẮN NHẤT

26 775 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 26
Dung lượng 509,85 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài tập lớn mạng máy tính xây DỰNG CHƯƠNG TRÌNH mô PHỎNG THUẬT TOÁN tìm ĐƯỜNG đi NGẮN NHẤT Bài tập lớn mạng máy tính xây DỰNG CHƯƠNG TRÌNH mô PHỎNG THUẬT TOÁN tìm ĐƯỜNG đi NGẮN NHẤT Bài tập lớn mạng máy tính xây DỰNG CHƯƠNG TRÌNH mô PHỎNG THUẬT TOÁN tìm ĐƯỜNG đi NGẮN NHẤT

Trang 1

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN ĐIỆN TỬ - VIỄN THÔNG

BÁO CÁO MẠNG MÁY TÍNH

Nhóm 10

Đề tài 9:

XÂY DỰNG CHƯƠNG TRÌNH MÔ PHỎNG

THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT

Trang 2

MỤC LỤC

MỤC LỤC i

DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT ii

DANH MỤC CÁC BẢNG BIỂU iii

DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ iv

LỜI NÓI ĐẦU 1

CHƯƠNG 1 CƠ SỞ LÝ THUYẾT 2

1.1 Tìm hiểu các khái niệm cơ bản trong định tuyến mạng thông tin 2

1.1.1 Định tuyến (Routing) 2

1.1.2 Các lớp thuật toán định tuyến 2

1.2 Giao thức định tuyến 4

1.3 Lý thuyết Graph 4

1.4 Định tuyến đường đi ngắn nhất (Shortest Path Routing) 7

1.4.1 Thuật toán Dijkstra 8

1.4.2 Thuật toán Bellman Ford 12

CHƯƠNG 2 XÂY DỰNG PHẦN MỀM MÔ PHỎNG TÌM ĐƯỜNG ĐI NGẮN NHẤT (SHORTEST PATH ROUTING) BẰNG THUẬT TOÁN DIJKSTRA 15

2.1 Phương pháp thực hiện 15

2.2 Kết quả thu được 16

2.2.1 Đồ thị ngẫu nhiên 17

2.2.2 Đồ thị nhập vào 19

CHƯƠNG 3 KẾT LUẬN 22

TÀI LIỆU THAM KHẢO 23

Trang 3

DANH MỤC CÁC BẢNG BIỂU

Bảng 1 Mô tả các bước thực hiện trong thuật toán Dijkstra 10Bảng 2 Bảng chọn tuyến cho nút 1 11Bảng 3 Chi tiết các bước giải 13

Trang 4

DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ

Hình 1: Một graph đơn giản 5

Hình 2 Một graph phức tạp 7

Hình 3 Các đường đi ngắn nhất lồng nhau 8

Hình 4 Ví dụ một mạng 9

Hình 5 Mô hình đường đi ngắn nhất 11

Hình 6 Một graph đơn giản 13

Hình 7 Lưu đồ thuật toán chương trình 15

Hình 8 Giao diện phần mềm 16

Hình 9 Giao diện mở đồ thị ngẫu nhiên 18

Hình 10 Kết quả sau khi chạy 19

Hình 11 Đồ thị nhập vào 20

Hình 12 Kết quả sau khi chạy 21

Trang 5

LỜI NÓI ĐẦU

Sự phát triển của Internet cũng đồng nghĩa với việc tăng trưởng về quy mô

và công nghệ nhiều loại mạng LAN, WAN … Và đặc biệt là lưu lượng thông tintrên mạng tăng đáng kể Chính điều đó đã làm cho vấn đề chia sẻ thông tin trênmạng hay là vấn đề định tuyến trở nên quan trọng hơn bao giờ hết Trong việcthiết kế mạng và lựa chọn giao thức định tuyến sao cho phù hợp với chi phí, tàinguyên của tổ chức là đặc biệt quan trọng

Internet phát triển càng mạnh, lượng người truy nhập càng tăng yêu cầuđịnh tuyến càng phải tin cậy, tốc độ chuyển mạch nhanh và không gây ra lặptrên mạng Hơn nữa khi nhiều tổ chức tham gia vào mạng thì nhiều giao thứcđược đưa vào sử dụng dẫn đến sự phức tạp về định tuyến cũng gia tăng, và sốlượng các giao thức để phục vụ cho việc định tuyến cũng có rất nhiều Việc hiểubiết và thiết kế các mạng thông tin cỡ lớn có sử dụng các thiết bị định tuyếnđang trở thành một nhu cầu vô cùng cấp thiết trong thực tế Nó đòi hỏi ngườithiết kế mạng phải có sự hiểu biết sâu về giao thức sẽ sử dụng cho việc thiết kếmạng cũng như các loại giao thức định tuyến khác

Trong giới hạn của bài tập lớn chúng em xin được chọn đề tài “Lập trình

mô phỏng mô hình định tuyến sử dụng thuật toán tìm đường ngắn nhất – Shortest path routing"

Trong quá trình thực hiện đề tài này, chúng em đã rất cố gắng để hoànthành tốt nhưng có lẽ do vốn kiến thức còn hạn hẹp cũng như những yếu tốkhách quan khác mà không tránh khỏi những thiếu sót Chúng em rất mong sựđóng góp ý kiến, phê bình và hướng dẫn thêm của thầy cũng như bạn đọc

Cuối cùng chúng em xin gửi lời cảm ơn chân thành nhất tới thầy TS đã

hướng dẫn chúng em hoàn thành bài tập lớn này

Chúng em xin chân thành cảm ơn!

Trang 6

1.1 CƠ SỞ LÝ THUYẾT 1.2 Tìm hiểu các khái niệm cơ bản trong định tuyến mạng thông tin

1.2.1 Định tuyến (Routing)

Định tuyến là quá trình chọn lựa các đường trên một mạng máy tính để giử

dữ liệu qua đó Việc định tuyến được thực hiện cho nhiều loại mạng, trong đó cómạng điện thoại, liên mạng, Internet, mạng giao thông

Định tuyến chỉ ra hướng, sự di chuyển của các gói (dữ liệu) được đánh địachỉ từ mạng nguồn của chúng, hướng đến đích cuối thông qua các node trunggian Thiết bị phần cứng chuyên dùng được gọi là router (bộ định tuyến) Tiếntrình định tuyến thường chỉ hướng đi dựa vào bảng định tuyến, đó là bảng chứanhững lộ trình tốt nhất đến các đích khác nhau trên mạng Vì vậy, việc xây dựngbảng định tuyến, được tổ chức trong bộ nhớ của router, trở nên vô cùng quantrọng cho việc định tuyến hiệu quả

Routing khác với bridging (bắc cầu) trong nhiệm vụ nó thì các cấu trúc địachỉ gợi lên sự gần gũi của các địa chỉ tương tự trong mạng, qua đó cho phépnhập liệu một bảng định tuyến đơn để mô tả lộ trình đến một nhóm các địa chỉ

Vì thế, routing làm việc tốt hơn bridging trong những mạng lớn, và nó trở thànhdạng chiếm ưu thế của việc tìm đường trên mạng internet

1.2.2 Các lớp thuật toán định tuyến

Thuật toán vector (distance – vector routing protocol):

Thuật toán này dùng thuật toán Bellman-Ford Nó chỉ định một con số, gọi

là trọng số cho mỗi một liên kết giữa các node trong mạng Các node sẽ gửithông tin từ điểm A đến điểm B qua đường đi mang lại tổng trọng số thấp nhất(là tổng trọng số của các kết nối giữa các node được dùng)

Thuật toán hoạt động với những hành động đơn giản Khi một node khởiđộng lần đầu, nó chỉ biết các node kề trực tiếp với nó, và trọng số trực tiếp để điđến đó (thông tin, danh sách của các đích, tổng trọng số của từng node và bước

Trang 7

kế tiếp để gửi dữ liệu đến đó tạo nên bảng định tuyến, hay bảng khoảng cách).Mỗi node, trong một tiến trình, gửi đến từng "hàng xóm" tổng chi phí của nó để

đi đến các đích mà nó biết Các node "hàng xóm" phân tích thông tin này và sosánh với những thông tin mà chúng đang "biết"; bất cứ điều gì cải thiện đượcnhững thông tin chugns đang có sẽ được đưa vào bảng định tuyến Đến khi kếtthúc, tất cả các node trên mạng sẽ tìm ra bước truyền kế tiếp, tối ưu đến tất cảmọi đích và tổng chi phí tốt nhất

Thuật toán trạng thái kết nối (Link-state routing protocols)

Khi áp dụng các thuật toán trạng thái kết nối, mỗi node sử dụng cơ sở dữliệu của nó như là một bản đồ của mạng với dạng đồ thị Để làm điều này, mỗinode phát đi tới tổng thể mạng những thông tin về các node khác mà nó có thểkết nối được và từng node góp thông tin một cách độc lập vào bản đồ Sử dụngbản đồ này, mỗi router sau đó sẽ quyết định về tuyến đường tốt nhất từ nó đếnmọi node khác

Các router sẽ trao đổi gói tin LSA với những router khác Đây là những góitin nhỏ, chứa thông tin về các router Mỗi router sẽ dựa vào LSA này để tìm rađường đi Mỗi router đều xác định được chính xác topology của mạng Chính vìvậy router sẽ đưa ra quyết định để đưa packet đến đích tốt hơn Mỗi router trongmạng sẽ báo cáo trạng thái của nó, các link nối trực tiếp và trạng thái của mỗilink Router sẽ nhân bản thông tin này với tất cả các router mạng Cuối cùng tất

cả các router trên mạng đều có cái nhìn giống nhau về topology mạng

Thuật toán làm theo cách này là thuật toán Dijkstra (thuật toán mà ta sẽ tìmhiểu và ứng dụng), bằng cách xây dựng cấu trúc dữ liệu khác, dạng cây, trong đónode hiện tại là gốc và chứa mọi node khác trong mạng Bắt đầu với một câyban đầu chỉ chứa chính nó Sau đó lần lượt tụ tập các node chưa được thêm vàocây, nó sẽ thêm node có trọng số thấp nhất để đến một node đã có trên cây Tiếptục quá trình đến khi mọi node đều được thêm Cây này sau đó phục vụ để xâydựng bảng định tuyến, đưa ra bước truyền kế tiếp tối ưu để từ một node đến kìnode khác trong mạng

Trang 8

Thuật toán định tuyến bằng trạng thái kết nối phản ứng nhanh nhạy hơn vàtrong một khoảng thời gian có hạn, đối với sự thay đổi kết nối Ngoài ra, nhữnggói được gửi qua mạng trong định tuyến bằng trạng thái kết nối thì nhỏ hơnnhững gói dùng trong định tuyến bằng vector

1.3 Giao thức định tuyến

Giao thức định tuyến được dùng trong khi thi hành thuật toán định tuyến đểthuận tiện cho việc trao đổi thông tin giữa các mạng, cho phép các router xâydựng bảng định tuyến một cách linh hoạt Trong một số trường hợp, giao thứcđịnh tuyến có thể tự chạy đè lên giao thức đã được định tuyến

Giao thức định tuyến gồm các dạng sau đấy:

Giao thức định tuyến trong:

- Router Information Protocol (RIP)

- Open Shortest Path First (OSPF)

- Intermedicate System to Intermedicate System (IS-IS)

- Interior Gateway Routing Protocol (IGRP)

- Enhanced IGRP (EIGRP)

Giao thức định tuyến ngoài:

- Exterior Gateway Protocol (EGP)

- Border Gateway Protocol (BGP)

- Constrained Shortest Path First (CSPF)

1.4 Lý thuyết Graph

Một Graph G, được định nghĩa bởi tập các đỉnh V và tập các cạnh E Cácđỉnh thường được gọi là các nút (node) và chúng biểu diễn vị trí (ví dụ một điểmchứa lưu lượng hoặc một khu vực chứa thiết bị truyền thông) Các cạnh đượcgọi là liên kết và chúng biểu diễn phương tiện truyền thông Graph có thể đượcbiểu diễn như sau:

G = (V, E)

Trang 9

Hình 1 là một ví dụ của một Graph

Hình 1: Một graph đơn giản

Theo lý thuyết, V có thể là tập hợp rỗng hoặc không có xác định nhưng thực

tế, V là tập hợp xác định khác rỗng, nghĩa là có thể biểu diễn:

Một liên kết có thể có hai hướng Khi đó thứ tự của các nút là không có ýnghĩa Ngược lại, thứ tự các nút có ý nghĩa Trong trường hợp thứ tự các nút có

ý nghĩa, một liên kết có thể xem như là một cung và được định nghĩa:

aj = [vi, vk] hoặc aj = [i, k]

Trang 10

k được gọi là cận kề hướng ra đối với i nếu một cung [i,k] tồn tại và bậchướng ra của i là số lượng các cung như vậy.

Một graph gọi là một mạng nếu các liên kết và các nút có mặt trong liên kếtchứa các thuộc tính như độ dài, dung lượng, loại, Các mạng được sử dụng để

mô hình các vấn đề cần quan tâm trong truyền thông, các thuộc tính riêng biệtcủa các nút và liên kết thì liên quan đến các vấn đề cụ thể trong truyền thông Một graph có các liên kết gọi là graph vô hướng, còn một graph có các cunggọi là graph hữu hướng Một graph hữu hướng có thể có các liên kết vô hướng.Thông thường, các graph được giả sử là vô hướng hoặc sự phân biệt đó là không

có ý nghĩa

Có thể có khả năng xảy ra hiện tượng xuất hiện nhiều hơn một liên kết giữacùng một cặp nút Những liên kết như vậy gọi là các liên kết song song Mộtgraph có liên kết song song gọi là một multigraph

Cũng có khả năng xuất hiện các liên kết giữa một nút nào đó hoặc giữa

chính nút đó Những liên kết đó gọi là các self loop Một graph không có các liên kết song song hoặc self loop gọi là một graph đơn giản Một graph phức tạp được trình bày như trong Hình 2, trong đó, nút B và nút C có self loop, liên kết

[A, D], [A, B] là các liên kết song song

Hình 2 Một graph phức tạp

Trang 11

1.5 Định tuyến đường đi ngắn nhất (Shortest Path Routing)

Định tuyến đường đi ngắn nhất là một mô hình định tuyến rất thông dụng,phổ biến trong định tuyến mạng thông tin Bài toán tìm đường đi ngắn nhất làmột bài toán quan trọng trong quá trình thiết kế và phân tích mạng Hầu hết cácbài toán định tuyến có thể giải quyết như giải quyết bài toán tìm đường đi ngắnnhất khi một "độ dài" thích hợp được gắn vào mỗi cạnh (hoặc cung) trong mạng.Các thuật toán thiết kế cố gắng tìm kiếm cách tạo ra các mạng thỏa mãn tiêuchuẩn độ dài đường đi

Bài toán đơn giản nhất của loại bài toán này là tìm đường đi ngắn nhất giữahai nút cho trước Loại bài toán này có thể là bài toán tìm đường đi ngắn nhất từmột nút tới tất cả các nút còn lại, tương đương bài toán tìm đường đi ngắn nhất

từ tất cả các điểm đến một điểm Đôi khi đòi hỏi phải tìm đường đi ngắn nhấtgiữa tất cả các cặp nút Các đường đi đôi khi có những giới hạn nhất định (chẳnghạn như giới hạn số lượng các cạnh trong đường đi)

Chúng ta xét các graph hữu hướng và giả sử rằng đã biết độ dài của mộtcung giữa mỗi cặp nút i và j là lij Các độ dài này không cần phải đối xứng Khimột cung không tồn tại thì độ dài lij được giả sử là rất lớn Chú ý rằng có thể ápdụng quá trình này cho các mạng vô hướng bằng cách thay mỗi cạnh bằng haicung có cùng độ dài Ban đầu giả sử rằng, lij là dương hoàn toàn, sau đó giả thiếtnày có thể được thay đổi

Đối với mô hình định tuyến đường đi ngắn nhất, có nhiều thuật toán để giảiquyết bài toán này Trong đề tài này sẽ giới thiệu hai thuật toán điển hình nhất

giải quyết vấn đề này là thuật toán Dijkstra và Bellman - Ford

1.5.1 Thuật toán Dijkstra

Các thuật toán đường đi ngắn nhất đều dựa trên nhận xét về việc lồng nhaugiữa các đường đi ngắn nhất: một nút k thuộc một đường đi ngắn nhất từ i tới jthì đường đi ngắn nhất từ i tới j sẽ bằng đường đi ngắn nhất từ i tới k kết hợp với

Trang 12

đường đi ngắn nhất từ j tới k Vì thế, chúng ta có thể tìm đường đi ngắn nhấtbằng công thức đệ quy:

ij min( ik jk)

k

Hình 3 Các đường đi ngắn nhất lồng nhau

Dxy là độ dài của đường đi ngắn nhất từ x tới y Vấn đề đặt ra là phải có mộtcách khởi động đệ quy nào đó, vì chúng ta không thể khởi động với tất cả cácgiá trị bất kỳ ở vế phải của phương trình trên

Thuật toán Dijkstra phù hợp cho việc tìm đường đi ngắn nhất từ một nút I tớitất cả các nút khác Bắt đầu bằng việc thiết lập:

Thực hiện tương tự, tiếp tục tìm các nút chưa được quét có nhãn bé nhất vàquét nó Chú ý rằng, vì giả thiết tất cả các ljk đều dương, do đó một nút khôngthể gán cho nút khác một nhãn bé hơn chính nhãn của nút đó Vì vậy, khi mộtnút được quét thì việc quét lại nó nhất thiết không bao giờ xảy ra Nếu nhãn trênmột nút thay đổi, nút đó phải được quét lại

Ví dụ : xét mạng như hình sau, trên mỗi đường ghép nối các trọng số tươngứng với chi phí của từng đường, để đơn giản ta coi các trọng số này theo cả haichiều là như nhau, mặc dù trên thực tế chúng có thể khác nhau về giá trị Để

Trang 13

chọn được đường dẫn ngắn nhất từ một nguồn tới tất cả các nút trong mạng, đòihỏi phải có kiến thức về cấu hình tổng thể của mạng (danh sách các nút và cácghép nối giữa chúng) cũng như chi phí của từng đường nối Điều đó dẫn tới việctính toán tập trung dựa trên thông tin đầy đủ lưu trong các cơ sở dữ liệu trungtâm (Central Database)

Hình 4 Ví dụ một mạng

Thuật toán được thực hiện theo từng bước, xây dựng mô hình cây đườngngắn nhất (Shortest Path Tree) có gốc tại nút nguồn (nút 1) Các đường dẫn ngắnnhất tới k nút khác được tính toán trong k bước, chúng được tập hợp lại trongtập N

Coi D(v) là khoảng cách (tổng của các trọng số đường nối dọc theo đườngdẫn) từ nút nguồn 1 tới nút v Coi l(i, j) là chi phí đã cho giữa hai nút i và j.Thuật toán gồm 2 bước:

1) Bước khởi đầu

Đặt N = {1} (tập N ban đầu chỉ gồm duy nhất 1 nút), với mỗi nút v  N đặtD(v) = 1(1,v), với các nút không nối trực tiếp với nút 1 ta coi chi phí bằng ∞.2) Bước lặp

Tìm nút w không thuộc N sao cho D(w) là tối thiểu và bổ sung w vào tập N.Sau đó thay D(v) cho toàn bộ các nút không thuộc N còn lại bằng cách tính:D(v)  min[D(v), D(w) + l(w,v)]

Trang 14

Bước này được lặp lại cho đến khi tất cả các nút đều có trong N.

Sau khi thực hiện, ta lần lượt có được các bước mô tả bởi Bảng 1:

Bảng 1 Mô tả các bước thực hiện trong thuật toán Dijkstra

Hình 5 Mô hình đường đi ngắn nhất

Từ đó, ta có bảng định tuyến cho nút 1 như trong Bảng 2:

Trang 15

Với thuật toán này ta có thể tính được các tuyến đường cho đường dẫn ngắnnhất cho từng nút, cụ thể ta coi nút đó là nút nguồn rồi thực hiện các bước giảithuật kể trên Trong trường hợp chọn tuyến theo phương thức tập trung, NMC sẽgửi các bảng chọn tuyến cho từng nút một sau khi đã thiết lập xong, còn nếumạng sử dụng phương thức phân bố thì từng nút phải tính lấy bảng định tuyến,cùng sử dụng các thông tin tổng thể như trên (được cung cấp bởi các nút lân cậnhoặc bởi NMC) và chọn ra cây đường dẫn cho riêng nó

1.5.2 Thuật toán Bellman Ford

Thuật toán Bellman Ford là một thuật toán khác của dạng thuật toánDijkstra, dựa vào việc quét các nút theo thứ tự mà chúng được đánh nhãn Việc

đó loại trừ việc phải tìm nhãn nhỏ nhất, một nút có thể cần quét nhiều hơn mộtlần

Trong dạng đơn giản nhất, thuật toán Bellman Ford duy trì một hàng đợi cácnút để quét Khi một nút được đánh nhãn, nó được thêm vào hàng đợi trừ khi nó

đã tồn tại trong hàng đợi Hàng đợi được quản lý theo quy tắc vào trước, ra trước(FIFO) Vì thế các nút được quét theo thứ tự mà chúng được đánh nhãn Nếumột nút được đánh nhãn lại sau khi nút đó được quét thì nó được thêm vào sauhàng đợi và được quét lần nữa

Cho graph liên thông G = {V, E}, cần tìm khoảng cách ngắn nhất và đường

đi từ một nút s đến tất cả nút khác Thuật toán được mô tả theo các bước sau:1) Thiết lập hàm xác định nút tiền bối của s là π(s) = s và các chi phí d(v)bằng:

 ∞ với v ≠ u0

 0 với v = u0

Nếu |V| = 1 thì kết thúc

Tạo hàng đợi FIFO Q của các nút quét Đưa s vào Q

2) Lấy ra đỉnh đầu tiên trong hàng đợi h, kiểm tra chi phí của các nút lâncận u, nếu d(u) > d(h) + d(hu) thì đưa u vào hàng đợi và gán:

Ngày đăng: 01/03/2018, 00:17

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w