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

đề tài mô phỏng hoạt động của giao thức rip

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 (220.01 KB, 9 trang )

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
BÁO CÁO BÀI TẬP
MÔN: THỰC HÀNH LẬP TRÌNH MẠNG
ĐỀ TÀI : Mô phỏng hoạt động của giao thức RIP
GIẢNG VIÊN HƯỚNG DẪN : BÙI TRỌNG TÙNG
Mục lục
I. TỔNG QUAN VỀ ĐỀ TÀI
1. Giới thiệu chung
• Định tuyến là quá trình tìm đường đi cho gói tin,để chuyển nó từ mạng này sang
mạng khác. Định tuyến là một chức năng không thể thiếu được của mạng viễn
thông trong quá trình thực hiện kết nối các cuộc gọi trong mạng, và nó cũng được
coi là phần trung tâm của kiến trúc mạng, thiết kế mạng và điều hành quản trị
mạng. Mạng hiện đại hiện nay có xu hướng hội tụ các dịch vụ mạng, yêu cầu đặt
ra từ phía người sử dụng là rất đa dạng và phức tạp, một trong những giải pháp
cần thiết cho mạng viễn thông hiện đại là các phương pháp định tuyến phù hợp để
nâng cao hiệu năng mạng.
• Đề tài này sẽ mô phỏng hoạt động của giao thức định tuyến RIP – một giao thức
định truyền thống cơ bản của mạng máy tính
2. Mục đích của đề tài
• Cài đặt chương trình mô phỏng được các chức năng cơ bản của giao thức RIP
3. Kiến thức cơ bản
• Định nghĩa
o RIP là 1 giao thức định tuyến miền trong (Interior Gateway Routing Protocol) sử
dụng thuật toán vector khoảng cách được sử dụng cho các hệ tự trị (Autonomous
System ).
• Đặc điểm
 RIP chọn đường theo thuật toán vector khoảng cách.RIP
o Trao đổi bảng chọn đường.
o Trao đổi theo chu kì
- Các vector khoảng cách được trao đổi định kỳ mỗi 30s


- Mỗi thông điệp chứa tối đa 25 mục
o Cập nhật bảng định tuyến
- Gửi thông điệp cho nút hàng xóm mỗi khi có thay đổi
- Nút hàng xóm sẽ cập nhật bảng chọn đường của nó.
o Các bộ đếm thời gian của RIP:
- Update timer:
 Dùng để trao đổi thông tin cứ sau 30s
- Invalid thimer
 Khởi tạo lại mỗi khi nhận được thông tin chọn đường
 Nếu sau 180s mà không nhận được thông tin thì chuyển sang trạng thái
Hold Down
- Hold down timer
 Giữ lại trạng thái Hold Down trong 180s
 Chuyển sang trạng thái Down
- Flush timer
 Khởi tạo lại mỗi khi nhận được thông tin chọn đường
 Sau 120s xóa mục tương ứng trong bảng chọn đường
 RIP chạy trên nền UDP – port 520.
 RIPv2 là một giao thức classless còn RIPv1 lại là một giao thức classful.
 Cách hoạt động của RIP có thể dẫn đến loop nên một số quy tắc chống loop và
một số timer được đưa ra. Các quy tắc và các timer này có thể làm giảm tốc
độ hội tụ của RIP.
• Thuật toán vector khoảng cách
o Là 1 thuật toán định tuyến tính con đường ngắn nhất giữa các cặp nút trong
mạng dựa trên thuật toán Bellman-Ford.Các nút mạng thực hiện quá trình trao
đổi thông tin trên cơ sở địa chỉ đích nút kế tiếp và con đường ngắn nhất đến
đích
o Thuật toán gồm các bước sau :
- Mỗi nút tính khoảng cách giữa nó và tất cả các nút khác trong hệ thống và lưu
trữ thông tin này trong 1 bảng

- Mỗi nút gửi bảng thông tin của mình cho tất cả các nút lân cận
- Khi 1 nút nhận được các bảng thông tin từ các nút lân cận nó tính toán tuyến
đường ngắn nhất tới tất cả các nút khác và cập nhật bảng thông tin của mình
II. KỊCH BẢN CHƯƠNG TRÌNH
Tất cả router có vai trò ngang nhau và đều lần lượt thực hiện các công việc
• Mỗi router mở 1 socket và thiết lập các thông số ban đầu cho socket đó
Khởi tạo bộ đếm thời gian
• Router khởi tạo danh sách hàng xóm từ file đầu vào
• Router chờ tin nhắn trên cổng mà lúc khởi tạo đã mở.
• Tùy thuộc loại tin nhắn đến ta sẽ xử lí theo cách khác nhau.
o Tin nhắn phản hồi (RESPONSE)
- Kiểm tra tin nhắn hợp lệ
- Reset lại bộ đếm thời gian cho router
vừa gửi tin
- Tách phần tiêu đề của gói tin đến và
đọc phần thân của gói tin để lấy thông
tin bảng định tuyến của router hàng
xóm
- Đối với mỗi thông tin đọc được lần lượt
xét các trường hợp :
 Nếu chưa có trong bảng định tuyến và
khoảng cách hợp lệ(<16) thì :
+ thêm vào bảng định tuyến
+ bắt đầu bộ đếm thời gian
+ gắn cờ đánh dấu thay đổi
 Nếu đã có trong bảng định tuyến và
khoảng cách = 16 thì
+ xóa router trong bảng
+ gọi hàm khởi tạo ngay lập tức
send_update(TRIGUPDATE)

o Tin nhắn yêu cầu(REQUEST)
- Gọi hàm construct_regular_update và
đóng gói toàn bộ thông tin bảng định
tuyến của nó
- Gửi thông tin vừa đóng gói cho router
yêu cầu
 Nếu router có địa chỉ router tiếp theo là
router vừa gửi tin response thì reset lại
bộ đếm thời gian cho nó.
+ Nếu thông tin về khoảng cách thay
đổi thì gán lại thông tin về khoảng cách
 Nếu router có địa chỉ router tiếp theo
không phải là router vừa gửi tin
response nhưng có khoảng cách mới
ngắn hơn thì cũng gán lại thông tin
khoảng cách
• Bắt đầu bộ đếm thời gian định kì cho tất cả các router hàng xóm
• Sau 1 khoảng thời gian định kì UPDATE_TIME (5 giây) thì chương trình sẽ gọi hàm
construct_regular_update và đóng gói toàn bộ thông tin bảng định tuyến của nó
• Gửi thông tin vừa đóng gói cho tất cả router trong danh sách hàng xóm
• Từ lúc bắt đầu bộ đếm thời gian thứ 1 sau một khoảng thời gian TIME_OUT (10 giây)
nếu các router không có tin phản hồi (RESPONSE) router sẽ gọi hàm time_out
- Đánh dấu khoảng cách lên 16
- Gọi hàm cập nhật ngay lập tức send_update(TRIGUPDATE)
- Bắt đầu bộ đếm thứ 2
- Từ lúc bắt đầu bộ đếm thứ 2 sau một khoảng thời gian GARBAGE (20 giây) nếu router
hàng xóm vẫn không có tin phản hồi thì xóa router ra khỏi bảng định tuyến
• Menu cho phép người dùng 1 số công việc
- Thêm 1 router hàng xóm:
- Xóa 1 router :

- Hiển thị thông tin bảng định tuyến
- Thoát
III.CẤU TRÚC CHƯƠNG TRÌNH
1.Cấu trúc dữ liệu
Chương trình sử dụng danh sách liên kết để lưu trữ thông tin các router hàng xóm
và thông tin bảng định tuyến
• Kiểu dữ liệu list node tạo ra danh sách liên kết
Gồm 1 trường :
- struct listnode *next : Con trỏ đến node tiếp theo
• Kiểu dữ liệu phần tử của bảng định tuyến:
Gồm 7 trường :
- listnode *lnode
- struct in_addr destination : Địa chỉ đích
- uint32_t metric : Khoảng cách ngắn nhất đến router đích
- struct in_addr nexthop : Địa chỉ Router tiếp theo để đến đích
- byte routechanged : Cờ để xác định xem phần tử này có thay đổi khi
cập nhật không
- void *timeout_tmr : Hàm sẽ được gọi sau khi bộ đếm thứ nhất kết thúc
- void *garbage_tmr : Hàm sẽ được gọi sau khi bộ đếm thứ hai kết thúc
Khuôn dạng gói tin RIP
• Kiểu dữ liệu phần tiêu đề của gói tin
Gồm 3 trường :
- byte command : Mã lệnh 1 = REQUEST, 2 = RESPONSE

- byte version : Phiên bản địa chỉ IP
- short int _zero : Mặc định bằng 0
• Kiểu dữ liệu phần thân của gói tin
Gồm 6 trường :
- short int addrfamily : Địa chỉ router tiếp theo
- short int _zero : Mặc định bằng 0

- struct in_addr destination : Địa chỉ router đích
- uint32_t _zero1 : Mặc định bằng 0
- uint32_t _zero2 : Mặc định bằng 0
- uint32_t metric : Khoảng cách ngắn nhất đến router đích
• Kiểu neighbour lưu trữ thông tin cho mỗi router hàng xóm
Gồm 2 trường :
- listnode *lnode
- struct in_addr addr : Địa chỉ của router
• Con trỏ đến đầu danh sách các router hàng xóm
- struct neighbour *neighbours;
• Con trỏ đến đầu bảng định tuyến
- struct route_entry *route_table;
• File Log
- Các hàm sử dụng khi chạy được lưu trong file InstructionLog.txt
- Ghi lại 1 số kết quả khi có cập nhật hoặc thay đổi bảng định tuyến ở file
ResultLog.txt và log.txt
2.Các hàm chính
o init(argv[1])
• Router mở file chứa danh sách các hàng xóm (là tham số argv[1] truyền vào chương
trình)
• Đọc và tạo danh sách liên kết neighbours lưu trữ thông tin về hàng xóm
• Gửi tin yêu cầu cập nhật cho tất cả các router hàng xóm nó vừa đọc được
• Gửi thông tin của chính nó cho tất cả router hàng xóm(loại tin phản hồi)
• bắt đầu bộ đếm thời gian cho mỗi router hàng xóm
o void input()
• Chờ tin nhắn gửi đến qua socket
• Kiểm tra kiểu tin nhắn là yêu cầu hay trả lời và xử lí
o int send_update(int updatetype)
• Nếu cập nhật định kì (REGULAR_UPDATE) thì gửi thông tin toàn bộ bảng cho tất
cả các router hàng xóm

• Nếu cập nhật lập tức (TRIGGER_UPDATE) thì chỉ gửi thông tin có sự thay đổi
o void *start_timer(timer_time_t duration, fnptr handler, void *arg1, void *arg2,char
recursion)
• Hàm start sẽ gọi hàm handler sau 1 khoảng thời gian duration với 2 tham số của hàm
là arg1 và arg2.
o timer_info_ptr_t reset_timer (timer_info_ptr_t handle)
• Hàm reset_timer sẽ khởi tạo lại bộ đếm cho hàm handle đã được gọi hàm start_timer
từ trước đó
o void cli()
Hiển thị menu và cho phép thực hiện các chức năng thêm xóa ,xem thông tin và thoát
IV. KẾT LUẬN ĐÁNH GIÁ
1.Chính xác
• Chương trình hoạt động chính xác ở hầu hết các trường hợp đơn giản không quá phức
tạp,thông tin được cập nhật đầy đủ và chính xác
• Tuy nhiên 1 số trường hợp vòng lặp thì 1 bảng định tuyến có thể xuất hiện 1 router 2
lần nhưng sau 1 khoảng thời gian sẽ bị xóa do được cập nhật
2 .Hiệu năng
• Chương trình chạy không được nhanh do phải xử lí nhiều hàm ghi nhật kí,và sẽ chạy
chậm nếu số lượng router trong mạng lớn do khối lượng tính toán tăng lên

×