Tải bản đầy đủ (.pdf) (30 trang)

Tiểu luận môn lập trình mạng nâng cao nghiên cứu thật kỹ quá trình định tuyến trong mạng TCP IP và chọn 1 trong 2 phương pháp tỉnh và động

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 (567.59 KB, 30 trang )

Tiểu luận mơn học Lập trình mạng nâng cao

BỘ GIÁO DỤC VÀ ĐÀO TẠO
ĐẠI HỌC ĐÀ NẴNG
-----o0o----BÁO CÁO
TIỂU LUẬN MÔN HỌC

LẬP TRÌNH MẠNG NÂNG CAO

Nghiên cứu thật kỹ q trình định tuyến trong mạng TCP/IP và chọn 1 trong 2 phương
pháp: tỉnh và động.

Giáo viên hướng dẫn:
Học viên :

Học viên: Bùi Tấn Ngọc

PGS TS Lê Văn Sơn

Bùi Tấn Ngọc

1


Tiểu luận mơn học Lập trình mạng nâng cao

Lời mở đầu
Trong những năm gần đây mạng máy tính phát triển ngày càng mạnh mẽ tạo nên
một bước ngoặt quan trọng trong cơng nghệ thơng tin. Mạng máy tính ngày nay có
mặt trong rất nhiều các hoạt động trong đời sống. Các công nghệ, các kỹ thuật phục
vụ cho môi trường mạng đã được xây dựng nhiều, và đang còn được tiếp tục phát


triển, cải tiến.
Lập trình mạng là một trong những nhiệm vụ căn bản để phát triển các ứng dụng
doanh nghiệp. Một chương trình mạng được viết ra để các chương trình trên các máy
tính khác nhau có thể truyền tin với nhau một cách hiệu quả và an toàn cho dù chúng
được cài đặt trên mạng LAN, WAN hay mạng toàn cầu Internet, đây là điều căn bản
đối với sự thành công của nhiều hệ thống.
Điều khiển tải của mạng TCP/IP trong q trình định tuyến các gói thơng tin là
một bài tốn lớn và phức tạp trong lĩnh vực truyền thơng nói chung, vì vậy trong
phạm vi của đề tài này, em xin trình bày những kết quả nghiên cứu về quá trình định
tuyến trong mạng TCP/IP và xây dựng chương trình Monitoring giám sát đường đi
của các gói.
Tiểu luận gồm có 3 chương:
Chương 1: Những vấn đề cơ bản về mạng và điều khiển tải.
Chương 2: Định tuyến thơng tin trong mạng TCP/IP và thuật tốn phân bố tải của
mạng IP trong quá trình định tuyến các gói thơng tin.
Chương 3: Xây dựng chương trình Monitoring giám sát đường đi của các gói theo
phương pháp định tuyến tĩnh.
Để hồn thành tiểu luận này, tơi xin chân thành cám ơn sự chỉ bảo tận tình của
PGS.TS.Lê Văn Sơn và các bạn học viên trong lớp. Tuy nhiên chắc hẳn vẫn cịn nhiều
thiếu sót, kính mong sự góp ý của thầy giáo và các bạn để tơi hồn thành tốt hơn tiểu
luận này.

Học viên: Bùi Tấn Ngọc

2


Tiểu luận mơn học Lập trình mạng nâng cao

CHƯƠNG 1

NHỮNG VẤN ĐỀ CƠ BẢN VỀ MẠNG VÀ ĐIỀU KHIỂN TẢI
1. Mạng máy tính
Mạng máy tính là tập hợp các máy tính hoặc các thiết bị được nối với nhau bởi
các đường truyền vật lý và theo một kiến trúc nào đó.
Chúng ta có thể phân loại mạng theo qui mơ của nó:
• Mạng LAN (Local Area Network)-mạng cục bộ: kết nối các nút trên một phạm
vi giới hạn. Phạm vi này có thể là một cơng ty, hay một tịa nhà.
• Mạng WAN (Wide Area Network): nhiều mạng LAN kết nối với nhau tạo
thành mạng WAN.
• MAN (Metropolitan Area Network), tương tự như WAN, nó cũng kết nối nhiều
mạng LAN. Tuy nhiên, một mạng MAN có phạm vi là một thành phố hay một
đô thị nhỏ. MAN sử dụng các mạng tốc độ cao để kết nối các mạng LAN của
trường học, chính phủ, cơng ty, ..., bằng cách sử dụng các liên kết nhanh tới
từng điểm như cáp quang.
1.1 Thiết bị giao tiếp mạng (Network Interface Thiết bị)
NIC là thiết bị giao tiếp được sử dụng để kết nối một thiết bị với mạng LAN. Nó
cho phép chúng ta gửi và nhận các thông điệp từ mạng. Một NIC có một địa chỉ MAC
duy nhất mà cung cấp định danh duy nhất cho từng thiết bị.
Địa chỉ MAC là một số 12 byte-hệ 16 được gán cho thiết bị mạng. Địa chỉ này
có thể được thay đổi bởi một trình điều khiển mạng một cách linh hoạt (như trong
trường hợp của hệ thống DECnet, mạng được phát triển bởi Digital Equipment),
nhưng thông thường địa chỉ MAC không thay đổi.
1.2 Thiết bị định tuyến (Router)
Router là một thiết bị trung gian mạng, kết nối nhiều mạng vật lý. Một mạng có
nhiều host có thể được phân chia thành các phần riêng, hay cịn gọi là subnet.
Các router khơng chỉ được sử dụng trong LAN, chúng có một vai trị quan trọng
trong WAN. Router nhận một thông điệp và chuyển tiếp nó tới đích bằng cách sử
dụng đường đi tốt nhất tới đích đó.
Một Router lưu giữ một bảng định tuyến liệt kê tất cả các cách mà các mạng có
thể đạt tới. Thơng thường sẽ có một số đường đi từ mạng này tới mạng khác, nhưng

chỉ có một trong số đó là tốt nhất, và nó là con đường được mô tả trong bảng định
tuyến. Các router truyền tin bằng cách sử dụng các giao thức định tuyến để phát hiện
các router khác trên mạng, và hỗ trợ cho việc trao đổi thông tin về các mạng được gắn
với từng bộ định tuyến.
Học viên: Bùi Tấn Ngọc

3


Tiểu luận mơn học Lập trình mạng nâng cao

Thơng tin mà một bộ định tuyến thu thập về các đường đi giữa các mạng được
gọi là độ đo router, và có thể bao gồm những thơng tin như sự mất mát gói tin và thời
gian truyền tin. Thơng tin được sử dụng để tạo ra độ đo tùy thuộc vào giao thức định
tuyến:


Giao thức định tuyến vectơ khoảng cách: Các giao thức RIP (Routing
Information Protocol) và IGRP (Interior Gateway Routing Protocol) sử dụng
một biến đếm để chỉ ra số router mà gói tin phải đi qua để đến đích. Các giao
thức này thường lựa chọn các đường đi với ít router, mà không quan tâm đến
tốc độ và độ tin cậy.



Các giao thức định tuyến trạng thái liên kết: Việc tính tốn đường đi tốt nhất
của các giao thức định tuyến OSPF và BGP quan tâm đến nhiều yếu tố như tốc
độ, độ tin cậy, và thậm chí là chi phí của đường đi.




Các giao thức định tuyến lai: Các giao thức này sử dụng sự kết hợp việc tính
tốn trạng thái liên kết và vectơ khoảng cách.

1.3 Vấn đề tìm đường đi trong mạng
Với cấu hình TCP/IP, một gateway mặc định được thiết lập. Đây là một địa chỉ
IP của cổng bộ định tuyến mà subnet kết nối tới. Bộ định tuyến này được sử dụng khi
một host ở bên ngồi subnet cần được liên lạc.
Ta có thể thấy bảng định tuyến cục bộ trên hệ điều hành Windows bằng cách sử
dụng lệnh ROUTE PRINT trên dòng lệnh. Lệnh này hiển thị các gateway sẽ được sử
dụng cho mỗi liên kết mạng.

2. Điều khiển tải
Điều khiển tải là làm cho việc lưu thông trên mạng tốt nhất, giảm tối đa tình
trạng quá tải dẫn đến nghẽn mạng và được thể hiện dưới hai phương diện sau đây:
Học viên: Bùi Tấn Ngọc

4


Tiểu luận mơn học Lập trình mạng nâng cao



Điều khiển tải tổng quát: Điều khiển tải tổng quát chịu trách nhiệm giữ nhịp
cho các hoạt động cung cấp tài nguyên.



Điều khiển tải phân tán: Phân tán tải cho các đối tượng có khả năng cung cấp

như là người điều khiển hợp lý việc phân bố tài nguyên.

2.1 Điều khiển tải tổng quát
Mục tiêu của phương pháp này là tìm cách duy trì tổng số yêu cầu tài nguyên
được lưu chuyển trong mạng luôn nhỏ hơn một giá trị giới hạn (ngưỡng) N nào đó.
Giá trị N sẽ được xác định trước căn cứ vào khả năng tài nguyên và cũng như kinh
nghiệm hoạt động của mạng.
Về mặt tổ chức, các yêu cầu về sử dụng tài nguyên được gởi đến hệ thống qua
sự trung gian của một tiến trình gọi là bộ phân phối tải
2.2. Điều khiển tải phân tán
Phương pháp này khơng u cầu duy trì một giới hạn các yêu cầu tài nguyên
chung cho mạng mà giao cho các đối tượng có khả năng cung cấp như là người điều
khiển hợp lý việc phân bố các tài nguyên.
Người ta chia ra thành hai loại chiến lược phân tán tải như sau:


Chiến lược tĩnh: việc phân tán các yêu cầu giữa các Server được xác định theo
kiểu cố định, nghĩa là việc định tuyến để phân phối tải được thực hiện một lần
cho tồn cuộc, khơng hề có sự thay đổi giữa chừng.



Chiến lược thích nghi: Việc phân tán này được xác định như là chức năng
phân tán của hệ.

CHƯƠNG 2
ĐỊNH TUYẾN THÔNG TIN TRONG MẠNG TCP/IP
VÀ CÁC THUẬT TỐN PHÂN BỐ TẢI CỦA MẠNG IP
TRONG Q TRÌNH ĐỊNH TUYẾN CÁC GĨI THƠNG TIN


Học viên: Bùi Tấn Ngọc

5


Tiểu luận mơn học Lập trình mạng nâng cao

1. Tổng quan về định tuyến
Định tuyến là sự lựa chọn một con đường để truyền một đơn vị dữ liệu (một gói tin
chẳng hạn) từ trạm nguồn đến trạm đích sao cho tối ưu nhất. Do vậy, một kỹ thuật
định tuyến phải thực hiện 2 chức năng sau đây:
-

Quyết định định tuyến theo những tiêu chuẩn tối ưu nào đó.

-

Cập nhật thông tin định tuyến, tức là thông tin dùng cho chức năng

Có rất nhiều kỹ thuật định tuyến khác nhau. Sự phân biệt giữa chúng chủ yếu căn cứ
vào các yếu tố liên quan đến 2 chức năng trên. Các yếu tố đó thường là:
(a) Sự phân tán các chức năng định tuyến trên các nút của mạng
(b) sự thích nghi với trạng thái hiện hành của mạng
(c) Các tiêu chuẩn tối ưu để định tuyến
Dựa trên yếu tố (a) ta có kỹ thuật định tuyến tập trung (Centralized Routing) hoặc
phân tán (Distributed Routing).
Dựa trên yếu tố (b) ta có kỹ thuật định tuyến tĩnh (Static hay Fixed Routing) hoặc
thích nghi (Adaptatif Routing)
2. Kỹ thuật định tuyến tập trung và định tuyến phân tán
Kỹ thuật định tuyến tập trung được đặc trưng bởi sự tồn tại của một hoặc vài

trung tâm điều khiển mạng thực hiện việc định tuyến, sau đó gởi các bảng định tuyến
(Routing Table) tới tất cả các nút dọc theo con đường đã được chọn đó. Trong trường
hợp này, thông tin tổng thể của mạng cần dùng cho việc định tuyến chỉ được cất giữ
tại trung tâm điều khiển mạng. Các nút mạng có thể khơng gởi bất kỳ thông tin trạng
thái nào của chúng tới trung tâm, hoặc gởi theo định kỳ, hoặc gởi khi có sự thay đổi
nào đó. Trung tâm điều khiển sẽ cập nhật các bảng định tuyến dựa trên những thông
tin nhận được từ các trạm gởi lên.
Với kỹ thuật định tuyến phân tán thì khơng tồn tại trung tâm điều khiển mạng.
Quyết định định tuyến được thực hiện tại mỗi nút của mạng. Điều này địi hỏi sự trao
đổi thơng tin thường xuyên giữa các nút trong mạng.
3. Kỹ thuật định tuyến tĩnh và định tuyến động
Kỹ thuật định tuyến tĩnh (khơng thích nghi): có thể tập trung hoặc phân tán
nhưng nó khơng đáp ứng với mọi sự thay đổi trên mạng. Trong trường hợp này, việc
định tuyến được thực hiện mà khơng có sự trao đổi thơng tin, khơng đo lường và
không cập nhật thông tin. Tiêu chuẩn tối ưu để định tuyến và bản thân con đường
được chọn một lần cho tồn cuộc, khơng hề có sự thay đổi giữa chừng.
Học viên: Bùi Tấn Ngọc

6


Tiểu luận mơn học Lập trình mạng nâng cao

Kỹ thuật định tuyến động (thích nghi): có khả năng cung cấp được các con
đường khác nhau để dự phòng sự cố và thích nghi nhanh chóng với các thay đổi trên
mạng. Mức độ thích nghi của một kỹ thuật định tuyến được đặc trưng bởi sự trao đổi
thông tin định tuyến trong mạng. Đơn giản nhất là khơng trao đổi gì hết. Mỗi nút hoạt
động một cách độc lập với thông tin riêng của mình để thích nghi với sự thay đổi của
mạng theo một phương pháp nào đó.
4. Q trình định tuyến trong mạng TCP/IP

Cơ sở hạ tầng cho quá trình định tuyến trong mạng TCP/IP bao gồm các thành phần
sau:
-

Thiết bị định tuyến (Router/Gateway): Có chức năng quyết định đường
đi của các gói tin trên mạng dựa vào thơng tin của các bảng định tuyến được
lưu trữ tại RAM. Một router sẽ phải học các đường (paths) hay các route từ
việc cấu hình bằng tay bởi người quản trị hay có thể tự động cập nhật từ các
router khác trong hệ thống dựa vào các giao thức định tuyến.

-

Bảng định tuyến (Routing Table): là bảng chứa danh sách các đường
định tuyến. Bảng định tuyến của mỗi giao thức định tuyến là khác nhau, nhưng
có thể bao gồm nhữnh thơng tin sau: địa chỉ đích của mạng, mặt nạ mạng của
địa chỉ đích, địa chỉ IP của router chặng kế tiếp, cổng giao tiếp vật lý phải sử
dụng để đi đến router kế tiếp, khoảng cách đến đích.

-

Giao thức định tuyến (Routing Protocol): là ngôn ngữ để một router
trao đổi với router khác để chia sẻ thông tin định tuyến về khả năng đến được
cũng như trạng thái của mạng: RIP, IGRP, EIGRP, OSPF, IS-IS.

-

Đường kết nối (Link Path): Các đường nối kết giữa các nút mạng với
nhau

-


Các thiết bị đầu cuối (host/terminal): Các thiết bị đầu cuối, nơi gửi và
nhận dữ liệu

Học viên: Bùi Tấn Ngọc

7


Tiểu luận mơn học Lập trình mạng nâng cao

Hub/Switch

Router
Link Path

Host

Các thành phần trong mạng TCP/IP
Bảng định tuyến (tĩnh) lưu trữ trong Router A:
Entry

Network Address

Netmask

Gateway

Interface


1

192.168.1.0

255.255.255.0

192.168.1.1

192.168.1.1

2

192.168.2.0

255.255.255.0

10.0.1.2

10.0.1.1

3

192.168.3.0

255.255.255.0

10.0.1.2

10.0.1.1


Để chọn lựa phương án triển khai giải quyết vấn đề chuyển gói tin trong
mạng, người ta thường quan tâm hàng đầu đến độ tin cậy, ổn định và chi phí thực
hiện của chúng. Một trong số các phương pháp định tuyến đã được nghiên cứu và
triển khai áp dụng trong quá trình định tuyến trong mạng TCP/IP hiện nay:
-

Phương pháp cố định/tĩnh (Fixed Routing)

-

Phương pháp thích nghi/động (Adaptive Routing)

5. Phương pháp thích nghi động (Adaptive Routing)
5.1. Ngun lý hoạt động
Phương pháp thích nghi là q trình mà trong đó giao thức định tuyến dựa trên
thơng tin trạng thái hiện thời của mạng để tìm ra đường tốt nhất trong mạng và duy trì
chúng. Thơng tin trạng thái có thể đo hoặc dự đốn và tuyến đường có thể thay đổi khi
topo mạng hoặc lưu lượng mạng thay đổi. Thông tin định tuyến cập nhật vào trong các
bảng định tuyến của các nút (node) mạng trực tuyến, và đáp ứng tính thời gian thực
nhằm tránh tắc nghẽn cũng như tối ưu hiệu năng mạng.
Học viên: Bùi Tấn Ngọc

8


Tiểu luận mơn học Lập trình mạng nâng cao

Định tuyến thích nghi động xây dựng trên hai yếu tố cơ bản: Mơ hình tính tốn và
thơng tin trạng thái. Có hai kiểu mơ hình tính tốn sử dụng trong định tuyến động là
mơ hình tập trung và mơ hình phân tán. Các thông tin trạng thái được trao đổi và cập

nhật theo các giao thức định tuyến (RIP, IGRP, EIGRP, OSPF, IS-IS)
Kỹ thuật định tuyến thích nghi động trong mạng TCP/IP được thực hiện qua các
bước sau:
 Quyết định chọn đường:
Mỗi nút mạng (router) có một cơ sở dữ liệu mô tả tổng thể trạng thái của mạng
(topo, độ trễ truyền dẫn,…). Các thông tin chứa trong cơ sở dữ liệu này được dùng để
tính tóan các con đường tối ưu tới các nút khác (tức là tính cây chọn đường - Routing
Tree) và đẩy các gói tin (datagram) theo các liên kết ra thích hợp.
Giải thuật chọn đường tối ưu là giải thuật của Bellman-Ford hoặc Dijkstra đã
được cải tiến. Tiêu chuẩn chọn đường được sử dụng trong giải thuật này được tính bởi
độ trễ trung bình của các datagram trên các liên kết.
 Đo độ trễ
Độ trễ của một liên kết được đo như sau: Giả sử
dt là độ trễ truyền một gói tin giữa hai nút hai đầu một liên kết
dp là độ trễ truyền dẫn của liên kết (là hằng số đối với mỗi liên kết)
dq là độ trễ xử lý và đợi trong nút gởi (nút nguồn)
Khi đó, độ trễ tổng cộng d được tính như sau:
d = dt + dp + dq
Độ trễ trung bình trên liên kết được tính sau 10 giây một cho tất cả các datagram đi
qua. Nếu độ trễ được tính này khác với độ trễ cũ (quá một ngưỡng cho trước nào đó)
thì nó sẽ gởi đến tất cả các nút khác nhờ các đơn vị dữ liệu điều khiển (thơng báo cập
nhật). Ngồi ra, để đảm bảo độ tin cậy của việc cập nhật, một thông báo cập nhật sẽ
luôn được gởi đi:
- Sau một khỏang thời gian T, ngay cả nếu khơng có sự thay đổi nào; hoặc
- Ngay sau khi có sự thay đổi trạng thái của một liên kết.
 Cập nhật nội dung routing table
Với giải thuật chọn đường mơ tả ở trên, trong đó mỗi nút phải biết thông tin tổng
thể của mạng, vấn đề truyền thông tin chọn đường (ở đây là độ trễ) trở nên rất quan
trọng. Các thông báo cập nhật phải được nhận đúng để cho tất cả cơ sở dữ liệu ở các
nút là như nhau (gắn bó dữ liệu).

Phương pháp cập nhật nội dung routing table trong mạng TCP/IP như sau:
- Mỗi thông báo cập nhật của một nút chứa thông tin về độ trễ của tất cả các liên
kết của nút đó.

Học viên: Bùi Tấn Ngọc

9


Tiểu luận mơn học Lập trình mạng nâng cao

- Mỗi nút gởi thơng báo cập nhật của mình tới tất cả các nút láng giềng (sau một
khỏang thời gian T hoặc ngay lập tức sau khi có sự thay đổi đối với 1 liên kết).
- Một router láng giềng khi nhận được một broadcast để cập nhật, router này sẽ so
sánh với thông tin trong bảng định tuyến hiện giờ. Nếu trong các thơng tin đó có một
mạng mới, hay đường tới một mạng mới mà với độ trễ tốt hơn, chúng sẽ cập nhật vào
bảng định tuyến. Sau đó router này sẽ tiếp tục broadcast thông tin trong bảng định
tuyến của mình cho các router kế tiếp của nó.
 Xử lý và chuyển gói tin
Sau khi router nhận packet, the router sẽ gỡ bỏ header lớp 2 để tìm địa chỉ đích lớp
3. Sau khi đọc xong địa chỉ đích lớp 3 nó tìm kiếm trong routing table cho địa chỉ đích
đó. Giả sử đỉa chỉ đích đó có trong routing table, router sẽ xác định địa chỉ của nexthop. Sau đó packet được đẩy ra buffer của interface tương ứng, router sẽ khám phá
loại encapsulation lớp 2 nào được sử dụng giữa interface đi ra của gói tin và next-hop.
Packet được đóng gói và chuyển xuống lớp 2 rồi đưa xuống mơi trường truyền dẫn
dưới dạng bit, tín hiệu điện, quang…Quá trình này sẽ tiếp tục cho đến khi packet được
đưa đến đích .
Như vậy một router phải xử lý và cập nhật thông tin bảng định tuyến của mình vừa
đồng thời là một bộ chuyển tiếp (repeater) đối với các thông báo cập nhật đến từ các
nút láng giềng của nó.
Trong hình dưới đây là một ví dụ về Distance Vector Routing protocols

(RIP/IGRP), chúng broadcast toàn bộ bảng định tuyến trên tồn bộ các cổng được cấu
hình. Broadcast này có thể được coi như multicasting. Routers sử dụng các giao thức
này sẽ khơng biết chính xác các router bên cạnh mà nó giao tiếp.

Sơ đồ broadcast thơng tin bảng định tuyến trong Distance Vector Routing
Tuy nhiên, có vấn đề nảy sinh khi xảy ra sự phân rã mạng: một nút nào đó bị tách
khỏi các nút khác và do vậy không thể nhận được các thông báo cập nhật đến từ các
nút khác của mạng. Khi sự phân rã kết thúc, các nút vừa bị tách ra có thể nhận được
các thơng báo cập nhật “q hạn”. Để cho phép một nút có thể loại bỏ được các thơng
báo “q hạn” khơng cịn giá trị đó, người ta định nghĩa một vùng “tuổi” trong mỗi
thông báo cập nhật. Khi một thơng báo được nhận, “tuổi” của nó được giảm theo số
đơn vị thời gian đo được bởi một đồng hồ đặt ở mỗi nút. Một thông báo cập nhật được
xem là “quá hạn” nếu vùng “tuổi” của nó có giá trị 0.
Hai thuật tốn chọn đường thường được sử dụng phổ biến trong kỹ thuật định
tuyến thích nghi động là:
- Thuật toán định tuyến theo vector khoảng cách (Distance-Vector Routing)
- Thuật toán định tuyến theo trạng thái liên kết (Link -State Routing).
Học viên: Bùi Tấn Ngọc

10


Tiểu luận mơn học Lập trình mạng nâng cao

5.2 Thuật toán định tuyến theo vector khoảng cách (Distance-Vector Routing)
Thuật toán định tuyến theo vector khoảng cách (Distance-Vector Routing) nhằm
tính tốn con đường ngắn nhất giữa các cặp node (router) trong mạng dựa trên thuật
toán Bellman-Ford. Các node mạng thực hiện q trình trao đổi thơng tin trên cơ sở
của địa chỉ đích, node kế tiếp, và con đường ngắn nhất tới đích.
Với thuật tốn này, tại mỗi nút, các Router được giả định biết khoảng cách đến

mỗi nút láng giềng của nó (có thể là độ trễ). Khi từng T msec mỗi Router gởi cho mỗi
láng giềng một danh sách các độ trễ ước tính của nó đến từng nút láng giềng và nó
cũng nhận được một danh sách tương tự từ các nút láng giềng.
Xét một trong các bảng chọn đường đến từ nút láng giềng X, với X i là ước tính
thời gian X cần đến Router i. Nếu Router biết độ trễ đến X là m msec thì nó cũng biết
đến router i qua X là (Xi + m) msec. Thực hiện phép tính này với mỗi nút láng giềng,
một router có thể tìm ra độ trễ tốt nhất (nhỏ nhất) và nó dùng độ trễ này để cập nhật lại
giá trị đường tương ứng trong bảng chọn đường mới.
Chi tiết của thuật toán Bellman – Ford được mô tả như sau:
Giả thuyết:
- Cho một đồ thị G(V,E) trong đó V là tập đỉnh và E là tập cạnh có trọng số
- Đỉnh nguồn S: S ∈ V
Yêu cầu:
Xác định đường đi ngắn nhất từ đỉnh nguồn S đến tất cả các đỉnh còn lại.
Ký hiệu:
- D(S)i : Giá trị đường đi (độ trễ) ngắn nhất từ node nguồn S đến node i ở
bước hiện tại
- P(S)i : Nút láng giềng mà S đi qua với đường đi ngắn nhất đến node i.
- dij : trọng số trên cạnh nối trực tiếp từ node i đến node i.
dij = 0 nếu i trùng j hoặc dij = Eij nếu i khác j
Giải thuật:
-

Bước 1: Khởi động
D(S)i = dsi, ∀i ∈ V\{S};
P(S)i = i nếu dsi ≠ ∞ hoặc P(S)i = Null nếu dsi = ∞

-

Bước 2: Cập nhật đường đi ngắn nhất

D(S)i = min{ dsj +D(j)i }, ∀j ∈ V\{S}
P(S)i = j

Học viên: Bùi Tấn Ngọc

11


Tiểu luận mơn học Lập trình mạng nâng cao

- Bước 3: Lặp lại bước 2 cho đến khi khơng có đường đi mới nào ngắn hơn
đường đi đã được tìm thấy, nghĩa là D(s)i khơng có sự thay đổi qua 2 lần chạy liên
tiếp với ∀i ∈ V\{S} thì dừng.
- Bước 4: Xác định D(S)i sẽ là giá trị đường đi ngắn nhất từ node S đến nút
i thông qua nút láng giềng là giá trị của P(s)i.
5.3 Thuật toán định tuyến theo trạng thái liên kết (Link -State Routing)
Link-State Routing dựa trên thuật tốn Dijkstra, bình thường nó cịn được gọi là
thuật toán Shortest Path First (SPF). Các router chạy một giao thức Link-State liên
quan trực tiếp tới trạng thái (state) của một cổng trên router khác trong hệ thống mạng.
Một Link-State router xây dựng toàn bộ dữ liệu về tất cả các trạng thái từ tất cả các
router trong một vùng. Một nghĩa khác, một Link-State router lấy đủ các thơng tin để
chúng có thể vẽ lên một bản đồ của hệ thống mạng.
Mỗi router sau khi chạy thuật toán SPF trong bản đồ do chúng xây dựng, hay dữ
liệu về link-state, để nhận ra một đường đi tốt nhất nhằm thiết lập trong routing table.
Router sẽ quảng bá thông tin Link-State này tới tất cả các router trên mạng. Tồn bộ
q trình quảng bá này được gọi là Link-state Advertiesements (LSAs).
Không như Distance Vector Routers, Link-State Routers có thể thiết lập những
mỗi quan hệ đặc biệt giữa các router khác để đảm bảo rằng thông tin LSA được truyền
một cách hiệu quả nhất để đảm bảo tất cả các rouer trên mạng đều có cái nhìn giống
nhau về topo mạng.

Hệ thống mạng được xây dựng như một cái cây mà gốc là chính router đó, mỗi
router được coi là gốc của mạng và từ đó nó tìm đường đi ngắn nhất tới các mạng sau
khi xây dựng được bản đồ hệ thống mạng và chạy thuật toán SPF.

Học viên: Bùi Tấn Ngọc

12


Tiểu luận mơn học Lập trình mạng nâng cao

Sơ đồ quảng bá thơng tin định tuyến trong Link-State Routing
Tóm lại hoạt động của Link-State Routing có thể chia làm 4 bước sau:
- Các router tìm neighbors của mình từ các router nối trực tiếp.
- Sau khi tìm được neighbors xong, router gửi các LSA tới các neighbor của nó.
Sau khi nhận và copy thông tin từ LSA, router sẽ forward hay flood LSA tới các
neighbors của nó.
- Tất cả các router lưu LSA trong database của nó. Điều đó có nghĩa là tất cả các
router đều có một cái nhìn giống nhau về topo mạng.
- Mỗi router sử dụng thuật tốn Dijkstra để tính tốn ra đường tốt nhất để đưa vào
routing table.
Chi tiết của thuật tốn Dijkstra được mơ tả như sau:
Giả thuyết:
+ Cho một đồ thị G(V,E) trong đó V là tập đỉnh và E là tập cạnh có trọng số
khơng âm.
+ Đỉnh nguồn S: S ∈ V
u cầu:
Xác định đường đi ngắn nhất từ đỉnh nguồn S đến tất cả các đỉnh còn lại.
Ký hiệu:
-


M : Tập các đỉnh đã được duyệt

-

D(S)i : Đường đi ngắn nhất từ node nguồn S đến node i ở bước hiện

-

P(S)i : Trình tự đường đi ngắn nhất từ S đến node i ở bước hiện tại.

tại.

Học viên: Bùi Tấn Ngọc

13


Tiểu luận mơn học Lập trình mạng nâng cao

-

dij : trọng số trên cạnh nối trực tiếp từ node i đến node j
dij = 0 nếu i trùng j hoặc dij = Eij nếu i khác j

Giải thuật:
-

Bước 1: Khởi động
M = {S};

D(S)I =dSI; ∀I ∈ V\M
P(S)I ={S,I} Nếu dSI ≠ ∞ hoặc PI = {} nếu dSI = ∞

-

Bước 2: Cập nhật đường đi ngắn nhất
Chọn đỉnh N ∈ V sao cho DN = min{D(S)I}, ∀i ∈ V\M
M = M U {N}
D(S)J =min{D(S)J,D(S)N + dNJ}, ∀J∈ V\M
P(S)j = P(S)N + {J}

-

/* Nối phần tử J vào cuối dãy*/

Bước 3: Lặp lại bước 2 cho đến khi M = V

- Bước 4: Xác định D(S)I (∀i ∈ V\M) sẽ là đường đi (độ trễ) ngắn nhất từ
node S đến nút I với trình tự đường đi theo thứ tự được lưu tại P(S)I.
5.4. Ví dụ minh họa
Minh họa thuật tốn định tuyến theo vector khoảng cách (Distance-Vector
Routing) trên sơ đồ các nút mạng Router trong mạng TCP/IP được cho như hình dưới
đây:
Khoang cach/
Do tre

Router

D


5

5

A

3
2

1

B

F

1
3

2
2

C

1

E

Sơ đồ minh họa định tuyến theo vecto khoảng cách
Xây dựng và cập nhật nội dung routing table tại các nút mạng (router)
Học viên: Bùi Tấn Ngọc


14


Tiểu luận mơn học Lập trình mạng nâng cao

Xét tại thời điểm khởi động, nội dung của các routing table tại các nút mạng (router)
như sau:
H1

A

B

D(A)I P(A)I D(B)I

C
P(B)I

D

E

D(C)I P(C)I D(D)I P(D)I D(E)I

F
P(E)I D(F)I P(F)I

A


0

-

2

A

1

A

5

A





B

2

B

0

-


2

B

3

B





C

1

C

2

C

0

-

3

C


1

C



D

5

D

3

D

3

D

0

-

1

D

5


D

E





1

E

1

E

0

-

2

E

F








5

F

2

F

0

-

Sau khi khởi động, các router sẽ tiến hành trao đổi thông tin với nhau và cập nhật
đường đi tối ưu vào cơ sở dữ liệu routing table của mình.
Q trình thực hiện thuật tốn Bellman – Ford để cập nhật nội dung routing table tại
Router A với 3 nút láng giềng B, C, D như sau:
• Cập nhật đường đi từ A – B:
- Đi qua B: D(A)B = dAB + D(B)B = 2 + 0 = 2
- Đi qua C: D(A)B = dAC + D(C)B = 1 + 2 = 3
- Đi qua D: D(A)B = dAD + D(D)B = 5 + 3 = 8
Như vậy D(A)B = min(2, 3, 8) = 2 và lúc này P(A)B = B
• Cập nhật đường đi từ A – C:
- Đi qua B: D(A)C = dAB + D(B)C = 2 + 2 = 2
- Đi qua C: D(A)C = dAC + D(C)C = 1 + 0 = 1
- Đi qua D: D(A)C = dAD + D(D)C = 5 + 3 = 8
Như vậy D(A)C = min(2, 1, 8) = 1 và lúc này P(A)C = C
• Cập nhật đường đi từ A – D:
- Đi qua B: D(A)D = dAB + D(B)D = 2 + 3 = 5

- Đi qua C: D(A)D = dAC + D(C)D = 1 + 3 = 4
Học viên: Bùi Tấn Ngọc

15


Tiểu luận mơn học Lập trình mạng nâng cao

- Đi qua D: D(A)D = dAD + D(D)D = 5 + 0 = 5
Như vậy D(A)D = min(5, 4, 5) = 4 và lúc này P(A)D = C
• Cập nhật đường đi từ A – E:
- Đi qua B: D(A)E = dAB + D(B)E = 2 + ∞ = ∞
- Đi qua C: D(A)E = dAC + D(C)E = 1 + 1 = 2
- Đi qua D: D(A)E = dAD + D(D)E = 5 + 1 = 6
Như vậy D(A)E = min(∞, 2, 6) = 2 và lúc này P(A)E = C
• Cập nhật đường đi từ A – F:
- Đi qua B: D(A)F = dAB + D(B)F = 2 + ∞ = ∞
- Đi qua C: D(A)F = dAC + D(C)F = 1 + ∞ = ∞
- Đi qua D: D(A)F = dAD + D(D)F = 5 + 5 = 10
Như vậy D(A)F = min(∞,∞, 10) = 10 và lúc này P(A)F = D
Dưới đây là kết quả cập nhật nội dung của các routing table trong quá trình trao đổi
thông tin định tuyến giữa các nút mạng.
H2

A

B

C


D

E

D(A)I P(A)I D(B)I P(B)I D(C)I P(C)I D(D)I P(D)I D(E)I

F
P(E)I

D(F)I

P(F)I

A

0

-

2

A

1

A

4

C


2

C

4

E

B

2

B

0

-

2

B

3

B

3

C


5

E

C

1

C

2

C

0

-

2

E

1

C

3

E


D

4

C

3

D

3

D

0

-

1

D

3

E

E

2


C

3

C

1

E

1

E

0

-

2

E

F

10

D

8


D

3

E

3

E

2

F

0

-

H3

A

B

C

D

E


D(A)I P(A)I D(B)I P(B)I D(C)I P(C)I D(D)I P(D)I D(E)I

F
P(E)I

D(F)I

P(F)I

A

0

-

2

A

1

A

3

E

2


C

4

E

B

2

B

0

-

2

B

3

B

3

C

5


E

C

1

C

2

C

0

-

2

E

1

C

3

E

Học viên: Bùi Tấn Ngọc


16


Tiểu luận mơn học Lập trình mạng nâng cao

D

4

C

3

D

2

E

0

-

1

D

3

E


E

2

C

3

C

1

E

1

E

0

-

2

E

F

4


C

5

C

3

E

3

E

2

F

0

-

H4

A

B

C


D

E

D(A)I P(A)I D(B)I P(B)I D(C)I P(C)I D(D)I P(D)I D(E)I

F
P(E)I

D(F)I

P(F)I

A

0

-

2

A

1

A

3


E

2

C

4

E

B

2

B

0

-

2

B

3

B

3


C

5

E

C

1

C

2

C

0

-

2

E

1

C

3


E

D

3

C

3

D

2

E

0

-

1

D

3

E

E


2

C

3

C

1

E

1

E

0

-

2

E

F

4

C


5

C

3

E

3

E

2

F

0

-

Khi đó đường đi trong q trình định tuyến gói tin từ router A đến router D sẽ diễn ra
như sau:
- Router A tra bảng routing table của mình và thấy muốn gửi đến D phải đi qua
C nên chuyển gói tin trực tiếp cho Router C.
- Sau khi nhận được, Router C tra bảng routing table của mình và thấy muốn
gửi đến D phải đi qua E nên chuyển gói tin trực tiếp cho Router E.
- Sau khi nhận được, Router E tra bảng routing table của mình và thấy có thể
chuyển trực tiếp đến Router D.
- Router D nhận gói tin, kiểm tra thấy gửi cho mình và tiến hành xử lý.
A

D(C)I

C
P(C)I

A

1

A

B

B

2

1

C

C

D

3

C

E


2

C

D(A)I

P(A)I

A

0

-

B

2

C

Học viên: Bùi Tấn Ngọc

D(E)I

E
P(E)I

D(D)I


D
P(D)I

A

2

C

A

3

E

B

B

3

C

B

3

B

0


-

C

1

C

C

2

E

D

2

E

D

1

D

D

0


-

E

1

E

E

0

-

E

1

E
17


Tiểu luận mơn học Lập trình mạng nâng cao

F

4

C


F

3

E

F

Khoang cach/
Do tre

2

F

3

E

Router

D

5

F

5


A

3
2

1

B

F

1
3

2
2

C

1

E

Đường đi của gói tin từ A đến D theo thuật toán vectơ khoảng cách

Học viên: Bùi Tấn Ngọc

18



Tiểu luận mơn học Lập trình mạng nâng cao

CHƯƠNG 3
XÂY DỰNG CHƯƠNG TRÌNH MONITORING
GIÁM SÁT ĐƯỜNG ĐI CỦA CÁC GĨI

1. Mơ tả bài tốn
Giả lập mơi trường mạng gồm có 4 mạng kết nối với nhau thông qua 4 Router, các
Host A và D sẽ gởi thông tin cho các Host B và C như mơ hình sau đây:

Việc vận chuyển các gói tin từ nguồn đến đích được định tuyến tại các Router
theo phương pháp tĩnh.
Trong quá trình vận hành hệ thống, các gói tin được gởi đi từ đâu, đi qua các
Router để đến đích sẽ được theo dõi bởi Monitoring và được hiển thị trên màn hình.

Học viên: Bùi Tấn Ngọc

19


Tiểu luận mơn học Lập trình mạng nâng cao

2. Xây dựng các chương trình của bài tốn
Bài tốn được tổ chức thành 9 modul, 4 modul đóng vai trị là các Router, 4
modul đóng vai trị là các Host và 1 modul đóng vai trị là Monitoring.
Các Host gởi gói tin đến các Router mà nó đang kết nối, căn cứ vào thông tin
định tuyến tại Router mà các Router sẽ xác định nút kế tiếp để chuyển gói tin đi. Các
Host và Router chuyển gói tin đến đâu sẽ gởi thông tin về cho Monitoring.
Các modul được xây dựng dựa trên cơ chế đa luồng và socket trong Java theo
mơ hình truyền thống Client/Server như sau:


Chương trình Java tiêu biểu như sau:
- Host:
import java.io.*;
import java.net.*;
public class HostA
{
public static void main(String args[])
{
System.out.println();
System.out.println("Host A da san sang!");
try
{

Học viên: Bùi Tấn Ngọc

20


Tiểu luận mơn học Lập trình mạng nâng cao

// Tao socket de ket noi toi Server
Socket connectToServer = new Socket("localhost", 2001);
//Tao luong de goi du lieu cho Server
PrintWriter sOut = new PrintWriter(connectToServer.getOutputStream(), true);
//Tao luong de nhan du lieu tu ban phim
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
while(true)
{
// Tao socket de ket noi toi Monitoring

Socket connectToMonitor = new Socket("localhost", 2000);
PrintWriter Stm = new PrintWriter(connectToMonitor.getOutputStream(),
true);
System.out.print("Nhap IP dich> ");
String sInput = stdIn.readLine();
String St = "Tu Host A ";
Stm.println(St);
Stm.flush();
sOut.println(sInput);
sOut.flush();
}
}
catch(IOException e)
{
System.err.println(e);
}
}
}

- Router:
import java.io.*;
import java.net.*;
public class Router1
{
public static void main(String arg[])
{
System.out.println();
System.out.println("Router1 da san sang!");
try
{

//Tao Socket tren Router
ServerSocket serverSocket = new ServerSocket(2001);
while(true)
{
Socket connectToClient = serverSocket.accept();
HandleRouter1 thread = new HandleRouter1(connectToClient);
thread.start();
}

Học viên: Bùi Tấn Ngọc

21


Tiểu luận mơn học Lập trình mạng nâng cao

}
catch(IOException ex)
{
System.err.println(ex);
}
}
}
//Dinh nghia lop ke thua tu Thread de xu ly mot ket noi moi
class HandleRouter1 extends Thread
{
private Socket connectToClient;
private int iPort;
public HandleRouter1(Socket socket)
{

connectToClient = socket;
}
public void run()
{
try
{
//PrintWriter out = new PrintWriter(connectToClient.getOutputStream(), true);
BufferedReader inSv1 = new BufferedReader(new
InputStreamReader( connectToClient.getInputStream()));
while(true)
{
String inputData = inSv1.readLine();
String IpDest = inputData.substring(0,inputData.lastIndexOf("."));
if(IpDest.equals("128.192.6"))
{
iPort = 2004;
System.out.println("Chuyen den Router4");
}
else if(IpDest.equals("128.192.150"))
{
iPort = 2005;
System.out.println("Chuyen den Host A");
}
else if(IpDest.equals("193.24.56"))
{
iPort = 2002;
System.out.println("Chuyen den Router2");
}
// Tao socket de ket noi toi Monitoring
Socket connectToMonitor = new Socket("localhost", 2000);

PrintWriter Stm = new PrintWriter(connectToMonitor.getOutputStream(),
true);
String St = "den Router 1 ";

Học viên: Bùi Tấn Ngọc

22


Tiểu luận mơn học Lập trình mạng nâng cao

Stm.println(St);
Stm.flush();
try
{
sleep(1000);
}
catch (Exception e)
{
System.out.println("Sleep Error");
}
// Tao socket de ket noi toi Router ke tiep
Socket connectToServer = new Socket("localhost", iPort);
PrintWriter osToServer = new
PrintWriter(connectToServer.getOutputStream(), true);
osToServer.println(inputData);
osToServer.flush();
}
}
catch(IOException ex)

{
System.out.println(ex);
}
}
}

- Monitoring:
import java.io.*;
import java.net.*;
public class Monitoring
{
public static void main(String arg[])
{
System.out.println();
System.out.println("
MONITORING GIAM SAT DUONG DI CAC GOI");
try
{
// Tao Socket tren Server
ServerSocket serverSocket = new ServerSocket(2000);
while(true)
{
Socket connectToClient = serverSocket.accept();
HandleAClient0 thread = new HandleAClient0(connectToClient);
thread.start();
}
}
catch(IOException ex)
{


Học viên: Bùi Tấn Ngọc

23


Tiểu luận mơn học Lập trình mạng nâng cao

System.err.println(ex);
}
}
}
//Dinh nghia lop ke thua tu Thread de xu ly mot ket noi moi
class HandleAClient0 extends Thread
{
private Socket connectToClient;
public HandleAClient0(Socket socket)
{
connectToClient = socket;
}
public void run()
{
try
{
BufferedReader inMnt = new BufferedReader(new
InputStreamReader(connectToClient.getInputStream()));
// Nhan goi tin tu Client
String inputData = inMnt.readLine();
System.out.print(inputData);
if(inputData.equals("den Host C")^inputData.equals("den Host B"))
{

System.out.println();
}
}
catch(IOException e)
{
System.out.println(e);
}
}
}

3. Kết quả chạy thử chương trình
Khởi động Monitoring, các Router và các Host

Học viên: Bùi Tấn Ngọc

24


Tiểu luận mơn học Lập trình mạng nâng cao

Học viên: Bùi Tấn Ngọc

25


×