Hoạt động của định tuyến tĩnh
Hoạt động định tuyến tĩnh có thể chia ra làm 3 bước cụ thể:
Đầu tiên, người quản trị mạng cấu hình các đường cố định cho router
Router cài đặt các đường đi này vào bảng định tuyến
Gói dữ liệu được định tuyến theo các đường cố định này
Các thông số chú ý của cấu hình
Destination-network: Địa chỉ mạng cần đi tới
Subnet-mask: Subnet-mask của Destination-network
Address: Địa chỉ ip của cổng trên router mà gói tin sẽ ra đi trên interface: cổng của router mà gói tin sẽ đi ra
Tổng quan về giao thức định tuyến động
Giao thức định tuyến động khác biệt với giao thức được định tuyến về cả chức năng và nhiệm vụ Nó cho phép các router giao tiếp và chia sẻ thông tin định tuyến với nhau, giúp xây dựng và duy trì bảng định tuyến một cách hiệu quả.
Ví dụ về giao thức định tuyến tĩnh
EGP và BGP giữa các AS
Một số giao thức định tuyến động như RIP, IGRP, EIGRP và OSPF được sử dụng để hướng dẫn dữ liệu của người dùng Các giao thức này cung cấp thông tin đầy đủ về địa chỉ lớp mạng, giúp gói dữ liệu truyền từ host này đến host khác dựa trên cấu trúc địa chỉ Hai giao thức quan trọng trong định tuyến động là Internet Protocol (IP) và Internetwork Packet Exchange (IPX).
LÝ THUYẾT
Hệ thống tự trị (Autonomous System/AS)
Một hệ thống tự trị (AS) là tập hợp các mạng IP được quản lý và định tuyến bởi một thực thể hành chính Mỗi thực thể bao gồm nhiều đơn vị con, mỗi đơn vị này vận hành và quản lý hệ thống mạng vật lý một cách độc lập Các mạng này được kết nối và định tuyến theo một thiết kế chung do thực thể quy định.
Trong hệ thống này, cấu hình và sơ đồ kết nối mạng có thể được xác định rõ ràng.
Mặt khác, AS này không thể nắm bắt sơ đồ kết nối của các AS khác, dẫn đến việc cần thiết phải xác định các giao thức định tuyến riêng cho việc thực hiện trong và ngoài AS.
Internal Gateway Protocols (IGPs) are essential for enabling routers to route within an Autonomous System (AS) This article focuses on two key IGPs: Routing Information Protocol (RIP) and Open Shortest Path First (OSPF).
- Exterior Gateway Protocol (EGPs): là các giao thức định tuyến kết nối giữa các
AS Trong bài, ta sử dụng giao thức EGP là Border Gateway Protocol (BGP).
Các nhà cung cấp dịch vụ Internet (ISP) như Viettel, VNPT, và FPT Telecom là những ví dụ điển hình cho các Hệ thống Tự trị (AS) trong mạng Internet toàn cầu Mặc dù một mạng doanh nghiệp hoặc mạng gia đình có thể trở thành một AS trong một số trường hợp đặc biệt, nhưng thường thì chúng không cần phải làm vậy để kết nối Internet Thay vào đó, các mạng này chỉ cần đăng ký dịch vụ thuê bao với một ISP để có thể truy cập Internet.
Một AS cần định dạnh duy nhất bằng 1 giá trị gọi là Autonomous System Number(ASN)
ASN có 2 định dạng: 2-byte hoặc 4-byte
Với dải 2-byte, các ASN nằm trong phạm vị từ 0 đến 65535.
Với dải 4-byte, các ASN nằm trọng phạm vị từ 0 đến 2 32 – 1.
Ví dụ: Nhà mạng Viettel sở hữu 2 giá trị ASN là 7552 và 24086 Tất cả các IP public của Viettel trên Internet đều thuộc về AS này.
RIP
RIP (Routing Information Protocol) là một giao thức định tuyến IGP phù hợp cho các hệ thống mạng nhỏ, không được khuyến nghị cho mạng lớn và phức tạp Giao thức này thuộc loại định tuyến khoảng cách vectơ, sử dụng số bước nhảy (hop count) để đo lường khoảng cách từ nguồn đến đích, với mỗi bước nhảy được tính là 1 hop count Khi một bộ định tuyến nhận bản tin cập nhật định tuyến, nó sẽ tăng giá trị hop count lên 1 và cập nhật bảng định tuyến tương ứng.
RIP sử dụng thuật toán định tuyến theo véctơ khoảng cách (Distance Vector Algorithms - DVA) để tính toán con đường ngắn nhất giữa các cặp nút trong mạng Thuật toán này tương thích và dựa trên phương pháp tập trung, được biết đến là thuật toán Bellman-Ford Các nút trong mạng thực hiện việc trao đổi thông tin dựa trên địa chỉ đích, nút kế tiếp và con đường ngắn nhất tới đích.
RIP phải xử lý một số lỗi do thuật giải cơ sở gây ra Đầu tiên, trong suốt thời gian
Khi thông tin định tuyến bị thay đổi, router sẽ thực hiện cơ chế "holddown" Nếu router nhận được thông tin cập nhật từ một router láng giềng, nhưng thông tin này chỉ ra rằng có đường đến mạng X với thông số định tuyến tốt hơn so với đường đã có trước đó, router sẽ bỏ qua và không cập nhật thông tin này.
Lỗi đếm vô hạn xảy ra khi định tuyến lặp xuất hiện do bảng định tuyến trên các router chưa được cập nhật, dẫn đến quá trình hội tụ chậm.
OSPF
OSPF là một giao thức định tuyến IGP link-state phổ biến, thường được sử dụng trong các mạng doanh nghiệp lớn Giao thức này cho phép các router trao đổi thông tin và xây dựng cơ sở dữ liệu link state OSPF hoạt động trong một vùng AS, tương tự như giao thức RIP.
Mỗi router trong một vùng sẽ gửi trạng thái đường link của mình đến tất cả các router khác, dẫn đến việc đồng nhất hóa bảng cơ sở dữ liệu trạng thái đường link (LSDB) Sau khi hoàn tất quá trình trao đổi, mỗi router sẽ có bản đồ mạng chung Từ đó, các router sử dụng giải thuật Dijkstra để tính toán cây đường đi ngắn nhất (Shortest Path Tree) và xây dựng bảng định tuyến dựa trên cây này.
Khi một router hoạt động với giao thức OSPF, nó cần có một giá trị duy nhất để xác định danh tính trong cộng đồng các router OSPF Giá trị này được gọi là Router ID.
Router – id trên router chạy OSPF có định dạng của một địa chỉ IP.
Mặc định, OSPF tự động bầu chọn router-id dựa trên địa chỉ IP cao nhất của các interface đang hoạt động, ưu tiên cổng loopback Để thay đổi router-id, cần khởi động lại router hoặc gỡ bỏ và cấu hình lại tiến trình OSPF Sau đó, quá trình bầu chọn router-id sẽ được thực hiện lại với các interface hiện có trên router.
Có một cách khác để thiết lập lại giá trị router – id là sử dụng câu lệnh “router- id” để thiết lập bằng tay giá trị này trên router
Router (config) # router ospf 1 Router (config-router) # router-id A.B.C.D hoặc thiết lập thông qua file config với dòng ospf router id A.B.C.D
BGP
BGP (Border Gateway Protocol) là một thành phần thiết yếu của mạng Internet, chịu trách nhiệm định tuyến giữa các hệ thống tự trị (AS) khác nhau Giao thức này hoạt động dựa trên việc cập nhật bảng địa chỉ mạng (prefix), cho phép xác định mối liên kết giữa các AS, thường là các nhà cung cấp dịch vụ Internet (ISP) Ngoài việc sử dụng trong môi trường AS, BGP còn được áp dụng trong các mạng riêng quy mô lớn khi OSPF không đáp ứng đủ yêu cầu Một ứng dụng quan trọng khác của BGP là hỗ trợ multihome, mặc dù phần lớn người dùng Internet không tương tác trực tiếp với giao thức này.
Chỉ có các nhà cung cấp dịch vụ Internet sử dụng BGP để trao đổi đường đi, và BGP là một trong những giao thức quan trọng nhất giúp duy trì tính kết nối của Internet.
Các thiết bị định tuyến (router) sử dụng giao thức BGP để thiết lập kết nối peering qua phiên làm việc TCP trên cổng 179 Kết nối này được duy trì bằng cách gửi thông điệp keep-alive dài 19 byte mỗi 60 giây theo mặc định.
BGP có bốn loại thông điệp chính: open để mở phiên kết nối, update để thông báo hoặc rút lại một đường đi, notification để thông báo lỗi, và keep-alive nhằm duy trì phiên kết nối.
3.4.3 Thứ tự ưu tiên trong BGP
Chọn đường đi tường minh trong bảng trước(so với đường đi mặc định)
Chọn đường đi có trọng số cao nhất (weight) (chỉ với router của Cisco)
Chọn đường đi có độ ưu tiên cục bộ cao nhất (local preference)
Chọn đường đi do chính người quản trị mạng cài đặt trên router (static route, có thuộc tính origin là INCOMPLETE)
Chọn đường đi đi qua ít AS nhất (AS path ngắn nhất)
Chọn đường đi có nguồn gốc bên trong trước (origin = IGP < EGP)
Chọn đường đi có độ ưu tiên gần/xa thấp nhất MED (Multi exit discriminator)
Chọn đường đi ra bên ngoài trước (external path)
Chọn đường đi có độ đo IGP đến hop tiếp theo thấp nhất (IGP metric to the next hop)
Chọn đường đi tồn tại trong bảng lâu nhất (oldest one)
Chọn đường đi đến router tiếp theo có BGP ID thấp nhất
Hệ thống mạng đa tầng
Internet được tổ chức thành nhiều tầng, trong đó các mạng tier 1 ở tầng trên cùng cung cấp dịch vụ kết nối cho các mạng tier 2 ở dưới Các nhà mạng tier 1, như được liệt kê trong bảng 1, là những công ty lớn, trong khi các mạng tier 2 là các nhà cung cấp dịch vụ mạng (ISP) tầm cỡ quốc gia, ví dụ như VNPT, FPT, và Viettel tại Việt Nam Các tier dưới cung cấp dịch vụ cho các tier trên, và các tier trên phải trả tiền để nhận dịch vụ từ các tier dưới.
Trên toàn cầu, chỉ một số ít nhà cung cấp dịch vụ Internet (ISP) có khả năng trở thành mạng Tier 1, do hạn chế về tiềm lực tài chính và các yếu tố địa chính trị.
Tên Trụ sở Số lượng AS
Thứ hạng CAIDA AS Độ dài đường cáp quang quản lý
Các công ty tier 2 và tier 3 sử dụng dịch vụ cáp từ các nhà cung cấp tier 1 để cung cấp dịch vụ internet cho người dùng, thường được gọi là các nhà cung cấp dịch vụ internet (ISP).
So sánh các routing protocol OSPF,BGP,BGP
Tính toán metric và lựa chọn các route
Số lượng hop chỉ tới đích -Nghịch đảo băng thông.
-Typeof service(ToS) hiếm khi được sử dụng. Đa dạng trong chính sách chọn đường:
-Hệ thống tự trị(AS) thông qua các nút đã đi qua.
Thông tin khi update Routers gửi bảng định tuyến hoàn Các loại LSA khác nhau bao gồm thông tin khác Update bao gồm:
-Route mới. thiện của RIP nhau:
-Kết nối và trạng thái của nó: +Kết nối tới network.
+Kết nối tới router khác.
-ID của các router trong multi-access network.
-Tổng hợp các route trong phạm vi network được đinh sẵn(gửi bằng ABRs).
-Định tuyến tới ASBR(autonomous.system border router), gửi bằng ABRs.
-External route hoặc route mặc định cho external traffic(gửi bằng ABRs).
-Routes bao gồm AS thông qua các packet đã đi qua.
- Bộ lọc nội bộ sàng lọc định tuyến mà bộ định tuyến quảng cáo đến môtj láng giềng.
Những router gửi và nhận được thông tin updates
-Mọi router interfaces của RIP networks.
-Interface mà nhận được một định tuyến quảng bá là nó không thể tiếp cận được -Passive interface nhận được thông tin update nhưng không gửi nó
-Trong point-to-point network, các router láng giềng sẽ trao đổi LSAs.
-Trong multi-access networks, mọi router gửi LSAs tới DR và back-up DR(BDR) và nhận LSAs từ DR.
-ABRs tóm tắt các định tuyến vào các khu vực sơ khai
-BGP routers giao tiếp chỉ với các routers láng giềng đã được cấu hình
Lợi thế, bất lợi của các routing protocol OSPF,BGP,BGP
Protocol Lợi ích Bất lợi Đối với người dùng
RIP -Cấu hình đơn giản
-RIP v2 có thể giao tiếp với external network.
-Sự hội tụ tương đối chậm.
-Metric chỉ dựa trên số hop
-Nếu được sử dụng để kết nối với ISP, ISP phải phân phối lại các tuyến vào BGP.
-LANs -Mạng WANs đơn giản
-Kết nối tới external networks
-Không sử dụng đối với kết nối dial-up.
OSPF -Các route chính xác có tính đến tốc độ liên kết và chi phí.
-Sự hội tụ diễn ra nhanh chóng.
-Chi phí thấp như RIP nếu mạng được thiết kế tốt.
-Chi phí có thể cao
-OSPF không thể được sử dụng như một EGP nếu không có sự phân phối lại.
-Các mạng LAN và WAN mở rộng hơn
-Không được sử dụng qua các kết nối dial- up.
BGP -ISPs sử dụng BGP.
-BGP cung cấp sự kiểm soát chặt chẽ đối với những route nào được quảng bá và chấp nhận
-Chi phí tương đối thấp.
-Mạng cũng phải chạy IGP.
-Không được sử dụng qua các kết nối dial- up.
Load Sharing
Thông thường, một bảng định tuyến chỉ chứa một tuyến đường tốt nhất cho mỗi điểm đến Dù bộ định tuyến có thể tìm thấy nhiều tuyến đường tốt đến cùng một đích, nó vẫn phải lựa chọn một tuyến duy nhất Các tuyến đường còn lại chỉ được sử dụng khi tuyến đường đã chọn gặp sự cố.
Khi cấu hình router và triển khai các mô hình lab cho các protocol, việc chia sẻ tải là một yếu tố quan trọng Điều này cho phép bộ định tuyến thêm nhiều tuyến đường đến cùng một đích vào bảng định tuyến, từ đó sử dụng các kết nối dự phòng cho cùng một trang web từ xa.
Khi bật tính năng chia sẻ tải, bộ định tuyến có khả năng thiết lập tối đa sáu tuyến đường đến một điểm đến trong bảng định tuyến của nó Các tuyến đường này có thể được nhập thủ công hoặc được học thông qua giao thức định tuyến động.
Chia sẻ tải cho phép bộ định tuyến lựa chọn nhiều tuyến đường tốt nhất, nhưng các tuyến đường cần phải có cùng metric và khoảng cách quản trị; nếu không, chỉ tuyến đường có giá trị thấp nhất sẽ được chọn Do các giao thức định tuyến khác nhau có khoảng cách quản trị khác nhau, nhiều tuyến đường thường được phát hiện thông qua cùng một giao thức động Mặc dù lưu lượng có thể không được cân bằng hoàn hảo qua nhiều kết nối, nhưng với nhiều phiên mà bộ định tuyến hỗ trợ, lưu lượng sẽ trở nên cân bằng hơn mỗi khi nó định tuyến một gói mới đến mạng đích Tuy nhiên, việc cấu hình bộ định tuyến để chia sẻ tải có thể dẫn đến việc các gói đến đích không theo thứ tự, điều này thường không được đánh giá cao.
Configuration of RIP, OSPF, BGP
Trước khi gửi một tuyến RIP, Bộ định tuyến bảo mật kiểm tra địa chỉ bước tiếp theo hoặc nguồn của tuyến Nếu bộ định tuyến gửi bản cập nhật đến một nguồn cho một tuyến cụ thể, nó sẽ sử dụng Poison Reverse, một tuyến đường có metric là 16, để thông báo rằng nó không thể truy cập vào mạng đó qua bộ định tuyến cục bộ Cơ chế này giúp phân biệt một tuyến dự phòng hợp pháp với tuyến mà bộ định tuyến đã nhận từ hàng xóm, đảm bảo thông tin được truyền đạt chính xác và hiệu quả.
Sự hội tụ trong mạng máy tính bao gồm các phương pháp như Split Horizon, Poison Reverse và Triggered Update Khi một bộ định tuyến nhận được thông tin từ hàng xóm, nó sẽ cập nhật số liệu cho tuyến đường của mình bằng cách cộng thêm số liệu mới Nếu một hàng xóm khác quảng cáo một tuyến đường có chỉ số thấp hơn, bộ định tuyến sẽ thay đổi địa chỉ bước tiếp theo và cập nhật số liệu tương ứng Trong trường hợp bộ định tuyến không nhận được thông tin hợp lệ trong một khoảng thời gian nhất định, nó sẽ đánh dấu lộ trình để xóa và gửi các bản cập nhật độc quyền cho tuyến đường trong hai chu kỳ cập nhật trước khi xóa hoàn toàn tuyến đường khỏi bảng định tuyến Các gói cập nhật RIP, bao gồm v1 và v2, chứa thông tin khác nhau, với gói RIP v1 có một trường lệnh cụ thể.
Gói tin bao gồm một yêu cầu hoặc trường phiên bản trả lời tại vị trí 1, cùng với trường họ địa chỉ tại vị trí 2 Trường họ địa chỉ cho phép tối đa 25 mục nhập ở định dạng IPv4, trong đó mỗi mục nhập được xác định rõ ràng.
• Một metric, là số hop đến địa chỉ đích từ bộ định tuyến đang gửi gói tin
Khi bộ định tuyến nhận diện một tuyến mới hoặc tốt hơn từ bản cập nhật RIP v1, nó coi hàng xóm gửi bản cập nhật là bước nhảy tiếp theo cho tuyến đường và tăng chỉ số cho mục nhập bảng định tuyến RIP v2 đã khắc phục nhiều thiếu sót của RIP v1, cung cấp khả năng phân vùng tóm tắt tuyến đường cho các mạng đẳng cấp và hỗ trợ EGP.
Gói RIP v2 bao gồm các thành phần quan trọng như trường lệnh để xác định yêu cầu hoặc miền định tuyến, phiên bản trả lời để xác định daemon định tuyến tạo ra thông báo, và cho phép một thiết bị chạy nhiều quy trình RIP tại cùng một địa chỉ với thẻ định tuyến Ngoài ra, gói này hỗ trợ tối đa 25 mục nhập, mỗi mục bao gồm thông tin cần thiết cho việc quản lý định tuyến hiệu quả.
• Mặt nạ mạng con-cung cấp hỗ trợ cho các mạng con có độ dài thay đổi
• Địa chỉ IP bước tiếp theo
• Một metric-số hop tới địa chỉ đích từ địa chỉ bước tiếp theo
Khi bộ định tuyến phát hiện một tuyến đường mới hoặc tốt hơn đến đích thông qua gói RIP v2, nó sẽ chọn tuyến đường này và sử dụng địa chỉ IP của bước tiếp theo được chỉ định trong gói.
Nếu địa chỉ IP của bước nhảy tiếp theo là tất cả các số không, bộ định tuyến sẽ coi địa chỉ nguồn của gói là địa chỉ IP của bước nhảy tiếp theo, điều này giúp duy trì khả năng tương thích ngược với RIP v1 Giao diện RIP v1 phát bản cập nhật định tuyến tới toàn bộ mạng con, trong khi các bộ định tuyến RIP v2 tham gia nhóm địa chỉ đa hướng RIP v2 (224.0.0.9) và nhận các bản cập nhật đa lớp cho địa chỉ này Do đó, giao diện RIP v1 và v2 có thể không nhận được các bản cập nhật của nhau.
*Speeding Convergence: Split Horizon, Poison Reverse, and Triggered Update
Một thiếu sót của RIP là sự hội tụ tương đối chậm trong một số môi trường mạng.
Bộ định tuyến gửi bản cập nhật sau mỗi 30 giây, nhưng trong mạng lớn, thông tin về tuyến đường có thể mất vài phút để được cập nhật chính xác Hội tụ chậm không chỉ gây ra sự không chính xác mà còn có thể dẫn đến tình trạng tắc nghẽn mạng nghiêm trọng khi các kết nối không thành công Ví dụ, khi kiểm tra mạng trong sơ đồ, ta có thể thấy các bản cập nhật mà mỗi bộ định tuyến nhận được cho Mạng 1 khi sử dụng giao thức RIP đơn giản mà không có Split Horizon hoặc Poison Reverse.
Network mà không sử dụng Split Horizon hoặc Poison Reverse
Bộ định tuyến B kết nối trực tiếp với Mạng 1 và quảng cáo tuyến đường với chỉ số 1 Bộ định tuyến A và C nhận tuyến đường này từ B, lưu trữ nó với B là địa chỉ bước tiếp theo và metric là 2 Khi A và C bắt đầu quảng cáo tuyến đường, Bộ định tuyến C không thay đổi bảng định tuyến của mình để chỉ ra A là hop tiếp theo do metric cao hơn Tương tự, Bộ định tuyến B nhận tuyến đường từ A nhưng từ chối vì metric cao hơn tuyến đường đã có từ B Quá trình này diễn ra suôn sẻ khi mạng ổn định, nhưng vấn đề phát sinh nếu cấu trúc liên kết thay đổi.
Khi liên kết giữa Bộ định tuyến B và Mạng 1 không thành công, Router B sẽ quảng cáo một tuyến đến Mạng 1 với metric là 16, điều này cho thấy rằng Mạng 1 không thể truy cập được.
Router A và C nhận bản cập nhật từ router B, sau đó điều chỉnh metric Tuy nhiên, việc này diễn ra sau khi chúng đã gửi thông tin đến các router riêng của mình trong Mạng 1 với metric đã được xác định.
2 Router A nhận định tuyến từ router C và router C nhận cùng 1 định tuyến từ router A.
Bởi vì các tuyến đường này có metric thấp hơn so với tuyến đường router B, router
Router A và C lưu trữ các tuyến đường trong bảng định tuyến của mình bằng cách tăng thêm một vào metric Do kết nối của router B với Mạng 1 không thành công, router B đã chấp nhận tuyến đường này.
Các router A và C giờ đây đều có route tới Mạng 1 với metriclà 3, trỏ tới nhau.
Trong chu kỳ cập nhật tiếp theo, router A nhận route từ router C và cập nhật bảng định tuyến với metric là 4 Router C cũng cập nhật tương tự sau khi nhận bản cập nhật từ router A Khi các router quảng bá tuyến đường lần tiếp theo, metric vẫn là 4 Cuối cùng, chỉ số này sẽ tăng lên 16, khiến các router nhận ra rằng chúng không thể truy cập Mạng 1 qua nhau Quá trình này được gọi là “Count to infinity” và có thể làm chậm đáng kể sự hội tụ.
Split Horizon là một giải pháp hiệu quả cho vấn đề hội tụ trong mạng, quy định rằng một giao diện không được gửi cập nhật về một tuyến đường đến giao diện mà nó đã nhận được thông tin tuyến đường đó Điều này có nghĩa là các bộ định tuyến tin rằng bộ định tuyến mà chúng nhận được thông tin tuyến đường đến một điểm đến ban đầu được kết nối trực tiếp hơn và có trách nhiệm cập nhật thông tin về điểm đến đó.
Horizon cũng giảm thiểu số lượng gói tin được gửi trong các hoạt động thông thường.
Update 30 seconds Timeout 180 seconds Poision 60 seconds Flush 240 seconds
OSPF được phát triển nhằm khắc phục những hạn chế của RIP, với khả năng hội tụ nhanh hơn và các phương pháp tính toán tuyến đường hiệu quả hơn Thay vì chỉ gửi các mục nhập bảng định tuyến, các bộ định tuyến sử dụng quảng cáo trạng thái liên kết (LSA), giúp các đối tác xây dựng cấu trúc liên kết mạng một cách nhanh chóng và chính xác hơn.
CÁC MÔ HÌNH LAB CỦA RIP, OSPF, BGP
Mô hình lab RIP
- RIP được phát triển trong nhiều năm bắt đầu từ phiên bản 1(RIPv1), RIP chỉ là giao thức định tuyến theo lớp địa chỉ cho đến phiên bản 2(RIPv2).
- RIP trở thành giao thức định tuyến không theo lớp địa chỉ RIPv2 có những đặc điểm hơn như sau:
Cung cấp thêm nhiều thông tin định tuyến hơn
Có cơ chế xác minh giữa các router khi cập nhật để bảo mật cho bảng định tuyến
Có hỗ trợ VLSM(Varibale Length Subnet Masking) mask có chiều dài khác nhau).
RIP hạn chế định tuyến lặp bằng cách giới hạn số lượng hop tối đa là 15, từ máy gửi đến máy nhận Mỗi khi router nhận thông tin từ router láng giềng, nó sẽ tăng chỉ số hop lên 1, coi bản thân nó là một hop Nếu chỉ số hop vượt quá 15, router sẽ xem mạng đích không khả dụng Ngoài ra, RIP cũng áp dụng các tính năng như horizon và holddown để ngăn chặn việc cập nhật thông tin định tuyến không chính xác.
4.1.2 So sánh RIPv1 và RIPv2
Topology diagram của RIP tập trung vào R1 và R2
Cấu hình đơn giản của RIPv1 bao gồm định tuyến theo lớp địa chỉ và không theo lớp địa chỉ, không gửi thông tin về subnet mask trong thông tin định tuyến Hệ thống này không hỗ trợ VLSM, do đó tất cả các mạng trong hệ thống RIPv1 phải có cùng một subnet mask.
Hỗ trợ VLSM Các mạng trong hệ thống IPv2 có thể có chiều dài subnet mask khác nhau
Không có cơ chế xác minh thông tin đinh tuyến Có cơ chế xác minh thông tin định tuyến Gửi quảng bá theo địa chỉ
255.255.255.255 Gửi multicast theo địa chỉ 224.0.0.9 nên hiệu quả hơn
4.2 Mô hình lab OSPF 4.2.1 Giới thiệu
OSPF (Open Shortest Path First) là một giao thức định tuyến theo trạng thái đường liên kết, được phát triển dựa trên các tiêu chuẩn mở của IETF (Internet Engineering Task Force) Điều này có nghĩa là OSPF hoàn toàn mở và có thể truy cập công khai, không bị giới hạn quyền sử dụng.
So với RIPv1 và RIPv2, OSPF nổi bật hơn như một giao thức định tuyến nội vi IGP nhờ vào khả năng mở rộng vượt trội Trong khi RIP chỉ cho phép tối đa 15 hop và có tốc độ hội tụ chậm, OSPF khắc phục những nhược điểm này, đồng thời xem xét các yếu tố quan trọng như băng thông trong quá trình lựa chọn đường đi Với tính năng mạnh mẽ và khả năng mở rộng, OSPF rất phù hợp cho các hệ thống mạng hiện đại và có thể được cấu hình đơn vùng cho các mạng nhỏ.
Mạng OSPF lớn cần được thiết kế theo cấu trúc phân cấp và chia thành nhiều vùng, với tất cả các vùng kết nối vào vùng xương sống (vùng 0) Thiết kế này giúp kiểm soát hiệu quả hoạt động cập nhật định tuyến trong mạng.
Phân vùng mạng giúp giảm tải cho hoạt động định tuyến, tăng tốc độ hội tụ và giới hạn sự thay đổi của hệ thống mạng trong từng khu vực, từ đó nâng cao hiệu suất hoạt động.
- Sau đây là các đặc điẻm của OSPF:
Là giao thức định tuyến trạng thái theo đường liên kết.
Được sử dụng trong RFC 2328.
Sử dụng thuật toán SPF để tính toán chọn đường đi tốt nhất.
Chỉ cập nhật khi cấu trúc mạng có sự thay đổi
4.2.2 Cơ chế hoạt động của OSPF
OSPF thu thập thông tin trạng thái đường liên kết từ các router lân cận, với mỗi router OSPF quảng cáo trạng thái đường liên kết của mình và chuyển tiếp thông tin nhận được cho tất cả các router láng giềng khác.
Router xử lý thông tin để xây dựng cơ sở dữ liệu về trạng thái đường liên kết trong một vùng Tất cả router trong cùng một vùng OSPF chia sẻ cơ sở dữ liệu này, đảm bảo thông tin đồng nhất về trạng thái đường liên kết và các láng giềng của nhau Mỗi router sử dụng thuật toán SPF cùng với cơ sở dữ liệu của mình để tính toán và chọn ra đường đi tốt nhất.
Các mạng OSPF lớn được tổ chức theo cấu trúc phân cấp và được chia thành nhiều khu vực mạng khác nhau Thuật toán SPF thực hiện việc tính toán dựa trên chi phí băng thông của các đường truyền Đường truyền có chi phí thấp nhất sẽ được chọn để đưa vào bảng định tuyến.
Mỗi router duy trì một cơ sở dữ liệu các láng giềng thân mật, bao gồm những láng giềng mà nó thiết lập mối quan hệ hai chiều Mặc dù một router có thể có nhiều láng giềng, không phải tất cả đều có mối quan hệ thân mật Danh sách các láng giềng thân mật sẽ khác nhau đối với từng router.
Để giảm thiểu số lượng trao đổi thông tin định tuyến giữa các router láng giềng trong cùng một mạng, OSPF bầu chọn một router đại diện gọi là Designated Router (DR) và một router dự phòng gọi là Backup Designated Router (BDR) để tập trung thông tin định tuyến.
4.2.3 Các loại gói tin OSPF
OSPF có 5 loại gói tin là Hello, Database Description, Link State Request, Link State Update, Link State Acknowledge.
Version Type Packet Length Router ID
Area ID Checksum Authentication Type Authentication Data
- Hello: Gói tin Hello dùng để phát hiện trao đổi thông tin các router cận kề.
- Database Description: gói tin này được dùng để chọn lựa router nào sẽ được quyền trao dổi thông tin trước(master/slave).
- Link State Request: gói tin này được dùng để chỉ diinhj loại LSA dùng tiến trình trao dổi các gói tin DBD
- Link State Update: gói tin này được dùng để gửi các gói tin LSA đến router cận kề yêu cầu gói tin này khi nhận được thông điệp Request.
- Link State Acknowledge: gói tin này dùng để báo hiệu đã nhận gói tin Update
- Link State Acknowledge: gói tin này dùng để báo hiệu đã nhận gói tin Update
Phần Header của gói OSPF
Mô hình lab BGP
BGP được thiết kế để định tuyến giữa các AS, nhưng việc cấu hình từng router cụ thể là cần thiết Trong mỗi AS, một số router phù hợp sẽ được chọn để chạy BGP, và những router này sẽ kết nối với nhau cũng như với các router của AS khác, tạo thành mạng lưới router định tuyến BGP.
Thao tác bắt tay giữa các router sử dụng BGP được gọi là BGP peering Trong quá trình này, hai router BGP sẽ gửi gói tin cho nhau để thiết lập mối quan hệ neighbor Khi mối quan hệ neighbor được thiết lập thành công, hai router có thể bắt đầu trao đổi thông tin định tuyến.
Giao thức định tuyến BGP sử dụng TCP để truyền tải dữ liệu, trong đó các gói tin BGP được đóng gói trong các TCP segment để trao đổi giữa hai router Để thiết lập một BGP peering, trước tiên cần thiết lập một kết nối TCP giữa hai router Router khởi tạo kết nối TCP sẽ chọn một port ngẫu nhiên từ 1024 trở lên, trong khi router nhận kết nối phải mở port 179 cho TCP.
Mô hình OSPF đơn vùng
Mô hình OSPF đa vùng
BGP hoạt động trên giao thức TCP và sử dụng cổng 179 Người quản trị cần hiểu rõ điều này để cấu hình phù hợp cho các thiết bị kiểm soát dữ liệu, chẳng hạn như Firewall, nhằm đảm bảo rằng các thiết bị này cho phép lưu lượng TCP đi qua cổng 179.
BGP sử dụng TCP để truyền tải, nhưng TCP không hỗ trợ gửi dữ liệu theo nhóm, do đó việc thiết lập quan hệ neighbor giữa hai router hoàn toàn dựa vào phương thức unicast Điều này có nghĩa là quản trị viên phải khai báo rõ ràng địa chỉ IP của từng neighbor mà router muốn thiết lập peering Theo nguyên tắc, các neighbor trong BGP cần được khai báo bằng tay, vì BGP không hỗ trợ thiết lập neighbor tự động thông qua phương thức multicast như các giao thức định tuyến nội bộ.
Quan hệ láng giềng BGP(hay BGP peering) có thể được thiết lập giữa các router thuộc cùng 1 AS hoặc giữa các router nằm trên 2 AS khác nhau:
Trường hợp đầu gọi là iBGP peering(internal BGP)
Trường hợp sau gọi là eBGP peering(external BGP)
BGP hoạt động trên nền tảng TCP, cho phép hai router BGP peer không cần kết nối trực tiếp như các giao thức định tuyến khác Để thiết lập kết nối TCP, hai router chỉ cần đảm bảo địa chỉ IP của chúng có thể truy cập lẫn nhau, điều này áp dụng cho iBGP peering Tuy nhiên, đối với eBGP peering, hai router cần sử dụng các địa chỉ IP kết nối trực tiếp Mặc dù vậy, chúng ta có thể cấu hình các router để cho phép thiết lập eBGP peering thông qua các địa chỉ IP không kết nối trực tiếp.
4.3.2 Các bảng dữ liệu của BGP
Bảng neighbor là danh sách các router đã thiết lập BGP peering với router đang xem xét Bảng này cung cấp thông tin về địa chỉ IP của các router neighbor, trạng thái quan hệ peering và nhiều thông tin liên quan khác.
Bảng BGP là nơi lưu trữ thông tin định tuyến tốt nhất mà các router neighbor đã thiết lập peering gửi đến Các router này sẽ truyền tải tất cả các IP prefix cùng với bộ thông số tối ưu mà chúng tính toán được Giao thức BGP, chủ yếu hoạt động theo phương thức distance-vector, chỉ quảng bá những “route” tốt nhất cho các router láng giềng Vì vậy, bảng BGP của một router chứa những định tuyến tối ưu mà các láng giềng cung cấp.
Router BGP sử dụng tiến trình chọn đường BGP (BGP path selection process) để quét toàn bộ bảng BGP, từ đó lựa chọn những route tốt nhất trong số các route có sẵn.
Mô hình eBGP peering lưu trữ trong bảng BGP nhằm cung cấp đường đi chính thức đến các mạng đích, trong khi router BGP tiếp tục quảng bá những router tốt nhất đến các neighbor kế tiếp Bảng BGP chứa các route tốt nhất từ các neighbor, tạo thành bảng định tuyến BGP với những route "tốt nhất từ những cái tốt nhất" nhờ vào tiến trình chọn đường của BGP.
*Phương thức Distance-vector: các router quảng bá thông tin định tuyến là các
Trong bảng định tuyến, IP prefix và giá trị metric tối ưu là yếu tố quan trọng để quảng bá các route Các router chạy giao thức distance-vector không có khả năng hiểu biết về topology mạng, mà chỉ dựa vào thông tin từ các router neighbor kết nối trực tiếp Quyết định định tuyến của mỗi router hoàn toàn dựa vào thông tin từ neighbor, và router sẽ chọn hướng đi theo neighbor có giá trị metric tốt nhất Để tránh lỗi do việc không thấy được topology mạng, các giao thức distance-vector cần tích hợp cơ chế chống loop, nhằm ngăn chặn các quyết định định tuyến có thể dẫn đến loop trong quá trình vận chuyển dữ liệu.
*Tiến trình chọn đường của BGP
Router R đã thiết lập kết nối peering thành công với các router láng giềng R1, R2 và R3 Các router này sẽ tiến hành gửi BGP routing update để quảng bá các router BGP tốt nhất mà chúng đã lựa chọn trước đó.
Router R khi nhận được các routing update từ neighbor sẽ tập hợp hết vào 1
“kho chứa” route là bảng BGP Như vậy, bảng BGP của 1 router là nơi tập kết tất cả thông tin định tuyến mà nó nhận được từ láng giềng
Quá trình tiếp nhận và chọn lọc thông tin định tuyến của BGP
Router R sẽ thực hiện việc "tuyển chọn" các route tốt nhất từ kho route trong BGP cho từng mạng đích Quá trình này tuân theo một bộ quy tắc để so sánh các thuộc tính đường đi, nhằm xác định route tối ưu, được gọi là Tiến trình chọn đường BGP.
Router R sẽ cập nhật bảng định tuyến với các route tốt nhất đã chọn, sử dụng chúng cho việc định tuyến dữ liệu Đồng thời, router R cũng sẽ quảng bá những route này đến router láng giềng kế tiếp Một router theo mô hình Path-vector hoặc distance vector chỉ quảng bá đến các láng giềng những route tốt nhất mà nó sở hữu.
1 số thuộc tính đường đi thường gặp:
AS-path: 1 chuỗi ký tự liệt kê ra danh sách ASN của các AS mà 1
IP prefix dã lan truyền ngang qua để đến được router đang xét.
Quá trình lan truyền prefix 192.168.1.0 bắt đầu từ AS64520, đi qua AS65500 và đến router B trong AS65000 Khi router B nhận thông tin về prefix này từ BGP, nó sẽ hiển thị một chuỗi ký tự cho biết các AS đã đi qua trước khi đến router B, với ASN được trình bày theo thứ tự từ gần nhất đến xa nhất: “65500 64250”.
Giả lập router Cisco trên nền GNS3
Giới thiệu GN3
GNS3 là phần mềm giả lập router Cisco được phát triển bởi Cristophe Fillot, tương tự như VMWare Phần mềm này sử dụng hệ điều hành IOS thực của Cisco để mô phỏng router, mang lại trải nghiệm gần gũi với thực tế cho người dùng.
- Phần mềm này viết ra nhằm:
+ Giúp mọi người làm quen với thiết bị Cisco.
+ Kiểm tra và thử nghiệm các tính năng trong IOS.
+ Test các mô hình mạng tước khi vào thực tế.
Cấu hình NS3
- KIểm tra đường dẫn tới Dynamic và thư mục làm việc
- Chọn đường dẫn đến thư mục Dynamips nhấn Test để kiểm tra nhấnOK!
Load IOS cho router
1 Vào Edit IOS images and hypervisor/IOS images.
2 Tiếp theo kích chuột vào Router C3725, giữ và kéo thả vào ô bên cạnh Lúc này ta sẽ thấy tab Topology Summary router sẽ báo màu đỏ nghĩa là router đang ở chế độ turn off.
3 Tạ bật lên bằng cách kích phải chuột vào router, chọn start, bạn sẽ thấy R1 báo xanh.
4 Khi Start lên vào Task Manager sẽ thấy CPU là 100%.
5 Sử dụng tính năng Idle PC
6 Chọn mục đánh dấu sao
7 CPU đã giảm đi đáng kế, giờ ta tiến hành cấu hình router
Tìm hiểu các cách cấu hình router căn bản(cách gán IP vào interface, kiểm tra các thông sóo IP)
5.4.1 Các mode config của router
Cisco router có nhiều chế độ(mode) khi config, mỗi chế độ có đặc điẻm riêng, cung cấp 1 số tính năng để cấu hình router.
User mode hay User EXEC Mode là chế độ đầu tiên khi bắt đầu phiên làm việc với router qua Console hoặc Telnet Trong chế độ này, người dùng chỉ có thể thực hiện một số lệnh thông thường như lệnh show hoặc lệnh clear để reset các counter của router hay interface Những lệnh này chỉ có tác dụng tạm thời và không được ghi vào file cấu hình của router, do đó không ảnh hưởng đến các lần khởi động sau.
To access Privileged EXEC Mode, type the command "enable" from User EXEC mode and enter the password if required This mode offers essential commands for monitoring router activity, accessing configuration files, and managing passwords Privileged EXEC Mode serves as the gateway to Configuration Mode, enabling users to configure all operational functions of the router.
The configuration mode allows users to configure all functions of a Cisco router, including interfaces, routing protocols, console lines, VTY (telnet), and TTY (async connections) Commands entered in configuration mode directly impact the router's current configuration stored in RAM (running-configuration) If this configuration is saved to NVRAM, the commands will take effect during subsequent router reboots.
+ Configuration Mode có nhiều mode có nhiều mode nhỏ, ngoài cùng là global configuration mode, sau đó là các interface configuration mode, line configuration mode,, routing configuration mode.
+ ROM Mode: ROM Mode dùng cho các tác vụ chuyên biệt, can thiệp trực tiếp vào phần cứng của router nhưu Recovery password, maintainance>
Router sẽ tự động chuyển vào chế độ ROM nếu không tìm thấy file IOS hoặc file IOS bị hỏng trong quá trình khởi động, ngoài các lệnh do người sử dụng yêu cầu.
5.4.2 Cấu hình căn bản cho router 5.4.2.1 Cấu hình đặt tên cho router
- Đầu tiên khi cấu hình router ta nên đặt tên cho router:
- Ngay sau khi nhấn phím Enter để thực thi câu lệnh, dấu nhắc đổi từ tên mặc đinh sang tên Router vừa mới đặt.
5.4.2.2 Cấu hình đặt mật khẩu cho router
- Đổi mật khẩu cho đường console:
Một số mode config của router
Để kiểm soát quyền truy cập từ xa vào router và telnet, chúng ta cần thiết lập mật khẩu cho một hoặc nhiều đường vty trên router Cisco, thường có 5 đường vty từ 0 đến 4 Mặc dù thường sử dụng một mật khẩu chung cho tất cả các đường vty, nhưng việc đặt mật khẩu riêng cho từng đường cũng là một lựa chọn hợp lý để đảm bảo an toàn khi cả 4 đường vty đều đang được sử dụng Dưới đây là các lệnh cần thiết để thiết lập mật khẩu cho các đường vty.
Mật khẩu enable và enable secret đóng vai trò quan trọng trong việc bảo vệ truy cập vào chế độ EXEC đặc quyền Trong đó, mật khẩu enable chỉ được áp dụng khi chưa cài đặt mật khẩu enable secret, vì mật khẩu này không được mã hóa, trong khi mật khẩu enable secret thì được mã hóa Dưới đây là các lệnh cần thiết để thiết lập mật khẩu enable secret.
Để đảm bảo an toàn cho mật khẩu, chúng ta nên mã hóa tất cả các mật khẩu hiển thị trong tập tin cấu hình của router, đặc biệt khi sử dụng lệnh show running-config hoặc show startup-config, vì việc hiển thị mật khẩu rõ ràng có thể gây ra rủi ro bảo mật.
- Chúng ta có thể cấu hình cổng interface bằng các đường console hoặc vty.
Mỗi 1 cổng đều phải có 1 địa chỉ IP và subnet mask để chúng có thể định tuyến các gói IP Để cấu hình IP, chúng ta dùng lệnh:
Các cổng giao tiếp trên router mặc định đều ở trạng thái đóng Để mở hoặc khởi động các cổng này, người dùng cần sử dụng lệnh "no shutdown" Ngược lại, nếu muốn đóng cổng để bảo trì hoặc xử lý sự cố, lệnh "shutdown" sẽ được sử dụng.
Có nhiều lệnh show được sử dụng để kiểm tra nội dung tệp tin trên router và phát hiện sự cố Trong cả hai chế độ EXEC đặc quyền và EXEC người dùng, gõ lệnh sẽ hiển thị danh sách các lệnh show có sẵn Số lượng lệnh show khả dụng trong chế độ EXEC đặc quyền thường nhiều hơn so với chế độ EXEC người dùng.
Lệnh "show interface" hiển thị trạng thái của tất cả các cổng giao tiếp trên router Để xem trạng thái của một cổng cụ thể, bạn chỉ cần thêm tên và số thứ tự của cổng đó sau lệnh Ví dụ: "show interface GigabitEthernet0/1".
- Ngoài ra còn các lệnh show khác:
+ Hiển thị tập tin cấu hình trên RAM:
+ Hiển thị tập tin cấu hình đang chạy:
+ Hiển thị bảng định tuyến:
+ Hiển thị thông tin cơ bản về các interface:
+ Hiển thị phương thức phân giải địa chỉ động:
+ Hiển thị trạng thái toàn cục và trạng thái của các cổng giao tiếp đã được cấu hình giao thức lớp 3:
5.4.2.4 Mô hình lab static route
- Đặt ip cho các cổng interface trên router R1.
- Cấu hình static route để có thể chuyển 1 gói tin từ 1 địa chỉ nguồn đến 1 địa chỉ đích trong mạng.
- Kiểm ta bảng định tuyến của router NgocR1 ta nhận thấy router đã học được đường mạng 192.169.1.0/24
- Đặt ip cho các cổng interface trên router R2.
Mô hình lab static route
- Cấu hình static route để có thể chuyển 1 gói tin từ 1 địa chỉ nguồn đến 1 địa chỉ đích trong mạng.
- Kiểm ta bảng định tuyến của router NgocR2.
TRIỂN KHAI CÀI ĐẶT
Mô hình mạng
Mô hình mạng tổng quan
Mô hình mạng tầng trên cùng
Mô hình mạng tầng giữa và tầng dưới (1)
In the proposed model, OSPF is utilized for routing in certain frameworks, while RIP is employed for routing in others, highlighting the diverse applications of these protocols in network design.
Cài đặt chung (dùng commandline của Linux OS)
- Thiết lập sysctl cho phép ip_forwarding để biến PC thành router:
Mô hình mạng tầng giữa và tầng dưới (2)
Triển khai mô hình mạng trên cùng
6.3.2 Cấu hình cho các router OSPF
Thông tin “default-information originate always” giúp các router khác trong AS thiết lập default gateway đi qua R6.
6.3.3 Vận hành mô hình OSPF ở tầng trên cùng
Lưu ý: tất cả các router đã được tắt iptables.
Khởi động ospf trên router R3
Khởi động ospf trên router R4
Kiểm tra trên các router, thấy các địa chỉ đã được cập nhật vào bảng định tuyến+R3:
Triển khai mô hình mạng tầng giữa và tầng dưới
Thông tin “default-information originate” giúp các router khác trong AS thiết lập default gateway đi qua R6.
6.4.3 Vận hành RIP trên mô hình mạng tầng giữa và tầng dưới
Lưu ý: tất cả các router đã được tắt iptables.
Khởi động rip trên router R6:
Khởi động rip trên router R7:
Khởi động rip trên router R8:
Kiểm tra trên các router, thấy các địa chỉ đã được cập nhật vào bảng định tuyến:
Triển khai mô hình mạng tổng quan
6.5.2 Config cho các router OSPF
6.5.3 Vận hành OSPF trên mô hình mạng tổng quan
Lưu ý: tất cả các router đã được tắt iptables.
Khởi động OSPF trên router R0:
Khởi động OSPF trên router R1:
Khởi động OSPF trên router R2:
Kiểm tra trên các router, thấy các địa chỉ đã được cập nhật vào bảng định tuyến:
Cấu hình BGP cho các router
Trong mô hình, các router BGP cần cấu hình bao gồm các router: R1, R2, R3, R6
6.6.2 Vận hành BGP trên toàn mô hình mạng
- Kiểm tra bảng routing trên các router BGP:
Kiểm tra kết nối bằng ping và tracepath
- Ping từ PC1 sang PC2:
- Ping từ PC1 sang PC3:
- Ping từ PC3 sang PC1:
- Ping từ PC3 sang PC4:
7.2 Kiểm tra tính đáp ứng của OSPF với AS 1
Trên router R3, dựa vào bảng định tuyến, ta thấy đường đi đến các mạng 192.168.4.0 và 192.168.3.0 đi qua 192.168.2.2.
Ta tiến hành ngắt kết nối enp0s8 của router R3 để kiểm tra khả năng thay đổi của OSPF.
Kiểm tra lại bảng định tuyến, ta thấy đường đi đã thay đổi.
Như vậy, hệ thống có thể đáp ứng tốt với trường hợp thay đổi trong mạng (ví dụ enp0s8 bị ngắt khi dây đứt)
Tiến hành ping thử từ R3 đến máy PC1 (192.168.4.10/24) vẫn thành công:
Tiến hành ping thử từ PC1 đến máy PC3 (192.169.4.10/24) vẫn thành công:
7.3 Kiểm tra tính đáp ứng của RIP với AS 2
Trên router R7, dựa vào bảng định tuyến, ta thấy đường đi đến các mạng 192.169.2.0 và 129.118.0.0 đi qua 192.169.2.2 (eth5).
Ta tiến hành ngắt kết nối enp0s3 của router R7 để kiểm tra khả năng thay đổi của RIP.
Kiểm tra lại bảng định tuyến, ta thấy đường đi đã thay đổi.
Tiến hành ping thử PC3 sang PC4 (192.169.5.10) và PC3 sang PC1 (192.168.4.10) vẫn thành công:
7.4 Các bước để kiểm tra hệ thống qua việc cài đặt và kết nối đến các DNS server
- Cài đặt DNS mydomain.vn và cấu hình file name.domain.vn
- Cài đặt DNS NgocLe.vn trên PC1
Cấu hình file named.conf
Cấu hình file named.NgocLe.vn
- Cài đặt DNS ngocle.vn trên PC0
Cấu hình file named.conf
Cấu hình file named.ngocle.vn
- Kiểm tra kết nối đến DNS server bằng lệnh dig và nslookup
- Gửi mail từ các DNS server
Gửi mail từ NgocLe.vn đến mydomain.vn
Cấu hình file named.NgocLe.vn trên PC1
Gửi mail từ NgocLe.vn đến mydomain.vn
Nhận được mail trên mydomain.vn từ NgocLe.vn
Gửi mail từ ngocle.vn đến mydomain.vn
Cấu hình file named.ngocle.vn trên PC0
Gửi mail từ ngocle.vn tới mydomain.vn
Nhận được mail trên mydomain.vn từ ngocle.vn
8 MÔ PHỎNG TRÊN C 8.1 Mô phỏng RIP
- Định nghĩa struct cho ripd: static struct option longopts[] =
The article outlines various command-line options for a software application, including the ability to run as a daemon ('d'), specify a configuration file ('f'), and define a PID file ('i') It also features options for displaying help ('h'), performing a dry run ('C'), and setting the VTY address ('A') and port ('P') Additionally, users can choose to retain certain settings ('r'), specify a user ('u') and group ('g'), and check the version of the application ('v').
- Đặc quyền của ripd: zebra_capabilities_t _caps_p [] =
{ ZCAP_NET_RAW, ZCAP_BIND }; struct zebra_privs_t ripd_privs = { #if defined(QUAGGA_USER) user = QUAGGA_USER,
#if defined QUAGGA_GROUP group = QUAGGA_GROUP,
#ifdef VTY_GROUP vty_group = VTY_GROUP,
#endif caps_p = _caps_p, cap_num_p = 2, cap_num_i = 0 };
- Cấu hình file và thư viện: char config_default[] = SYSCONFDIR RIPD_DEFAULT_CONFIG; char *config_file = NULL;
- Tên chương trình chạy mô phỏng ripd, đầu tiên khai báo reain mode của route: int retain_mode = 0;
- Khai báo rip vty(virtual teletype): char *vty_addr = NULL;
- Khai báo cổng kết nối của rip vty: int vty_port = RIP_VTY_PORT;
- Khai báo cấu trúc đường dẫn: struct thread_master *master;
- Khai báo ID của tiến trình được sử dụng bởi hệ thống đầu vào: const char *pid_file = PATH_RIPD_PID;
- Hiển thông thông tin: static void usage (char *progname, int status) { if (status != 0) fprintf (stderr, "Try `%s help' for more information.\n", progname); else { printf ("Usage : %s [OPTION ]\n\
Daemon which manages RIP version 1 and 2.\n\n\
-d, daemon Runs in daemon mode\n\
-f, config_file Set configuration file name\n\
-i, pid_file Set process identifier file name\n\
-A, vty_addr Set vty's bind address\n\
-P, vty_port Set vty's port number\n\
-C, dryrun Check configuration for validity and exit\n\
-r, retain When program terminates, retain added route by ripd.\n\
-u, user User to run as\n\
-g, group Group to run as\n\
-h, help Display this help and exit\n\
\n\ Report bugs to %s\n", progname, ZEBRA_BUG_ADDRESS);
- SIGNUP handlers: static void sighup (void) { zlog_info ("SIGHUP received"); rip_clean (); rip_reset (); zlog_info ("ripd restarting!");
/* Reload file cấu hình */ vty_read_config (config_file, config_default);
/* Tạo các socket cho VTY*/ vty_serv_sock (vty_addr, vty_port, RIP_VTYSH_PATH);
- SIGINT handler: static void sigint (void) { zlog_notice ("Terminating on signal"); if (! retain_mode) rip_clean (); exit (0);
- SIGUSR1 handler: static void sigusr1 (void) { zlog_rotate (NULL);
} static struct quagga_signal_t ripd_signals[] = { {
- Routine main của ripd: int main (int argc, char **argv) { char *p; int daemon_mode = 0; int dryrun = 0; char *progname; struct thread thread;
/* Khởi tạo umask trước khi đi vào security*/ umask (0027);
/* Get program name */ progname = ((p = strrchr (argv[0], '/')) ? ++p : argv[0]);
/* Đầu tiên cần log init */ zlog_default = openzlog (progname, ZLOG_RIP,
LOG_CONS|LOG_NDELAY|LOG_PID, LOG_DAEMON);
The command line option parser operates in a continuous loop, utilizing `getopt_long` to process various options provided through `argc` and `argv` It checks for specific flags, including enabling daemon mode with the '-d' option and specifying a configuration file with the '-f' option Additionally, it allows users to set the virtual terminal address using the '-A' flag and define a PID file with the '-i' option Each option is handled within a switch statement, ensuring seamless execution until all options have been processed.
/* Deal with atoi() returning 0 on failure, and ripd not listening on rip port */ if (strcmp(optarg, "0") == 0) { vty_port = 0; break;
The code snippet processes command-line options, setting the VTY port to a default value if it falls outside the valid range It enables retain mode when the 'r' flag is used, allows a dry run with the 'C' option, and assigns user and group privileges through the 'u' and 'g' flags, respectively Additionally, it prints the program version with the 'v' option and provides usage instructions for invalid inputs or the 'h' flag.
/* Chuẩn bị master thread */ master = thread_master_create ();
/*Khởi tạo thư viện */ zprivs_init (&ripd_privs); signal_init (master, Q_SIGC(ripd_signals), ripd_signals); cmd_init (1); vty_init (master); memory_init (); keychain_init ();
/* RIP related initialization */ rip_init (); rip_if_init (); rip_zclient_init (); rip_peer_init ();
/* Phân loại tất cả các câu lệnh kết nối*/ sort_node ();
/* Get file cấu hình*/ vty_read_config (config_file, config_default);
/* Start execution only if not in dry-run mode */ if(dryrun) return (0);
/* Thay đổi chương trình chạy demon*/ if (daemon_mode && daemon (0, 0) < 0) { zlog_err("RIPd daemon failed: %s", strerror(errno)); exit (1);
/* Pid file create */ pid_output (pid_file);
/* Tạo các socket cho VTY*/ vty_serv_sock (vty_addr, vty_port, RIP_VTYSH_PATH);
/* Print banner */ zlog_notice ("RIPd %s starting: vty@%d", QUAGGA_VERSION, vty_port);
/* Tiến hành thread */ while (thread_fetch (master, &thread)) thread_call (&thread);
/* Không tiếp cận được */ return (0);
- Set đặc quyền cho ospfd: zebra_capabilities_t _caps_p [] = {
ZCAP_NET_RAW, ZCAP_BIND, ZCAP_NET_ADMIN, }; struct zebra_privs_t ospfd_privs = {
#if defined(QUAGGA_USER) && defined(QUAGGA_GROUP) user = QUAGGA_USER,
#if defined(VTY_GROUP) vty_group = VTY_GROUP,
#endif caps_p = _caps_p, cap_num_p = sizeof(_caps_p)/sizeof(_caps_p[0]), cap_num_i = 0
- Cấu hình filename và thư viện char config_default[] = SYSCONFDIR OSPF_DEFAULT_CONFIG;
- Lựa chọn ospfd struct option longopts[] = {
The command-line options available include: `daemon` for running the process in the background, `config_file` for specifying the configuration file, and `pid_file` for indicating the process ID file Users can execute a `dryrun` to simulate actions without making changes, and access help documentation with the `help` option Network settings can be configured using `vty_addr` for the address and `vty_port` for the port number User and group permissions are set with `user` and `group` options, respectively The `apiserver` option enables the API server, while the `version` option displays the current version of the application.
- Tên chương trình chạy mô phỏng osfd, khai báo master thread: struct thread_master *master;
- Khai báo ID của tiến trình được sử dụng bởi hệ thống đầu vào: const char *pid_file = PATH_OSPFD_PID;
#ifdef SUPPORT_OSPF_API extern int ospf_apiserver_enable;
- Hiển thông thông tin: static void attribute ((noreturn)) usage (char *progname, int status) { if (status != 0) fprintf (stderr, "Try `%s help' for more information.\n", progname); else { printf ("Usage : %s [OPTION ]\n\
-d, daemon Runs in daemon mode\n\
-f, config_file Set configuration file name\n\
-i, pid_file Set process identifier file name\n\
-A, vty_addr Set vty's bind address\n\
-P, vty_port Set vty's port number\n\
-u, user User to run as\n\
-g, group Group to run as\n\
-C, dryrun Check configuration for validity and exit\n\
-h, help Display this help and exit\n\
Report bugs to %s\n", progname, ZEBRA_BUG_ADDRESS);
- SIGHUP handler: static void sighup (void) { zlog (NULL, LOG_INFO, "SIGHUP received");
/* SIGINT / SIGTERM handler */ static void sigint (void) { zlog_notice ("Terminating on signal"); ospf_terminate ();
- SIGUSR1 handler: static void sigusr1 (void) { zlog_rotate (NULL);
} struct quagga_signal_t ospf_signals[] = {
The main routine of the ripd program initializes essential variables, including pointers for address and configuration, sets the OSPF VTY port, and defines the daemon mode and dry run options It also prepares a thread structure for execution, ensuring that the program is ready to handle routing information efficiently.
/* Khởi tạo umask trước bảo mật */ umask (0027);
/* get tên chương trình*/ progname = ((p = strrchr (argv[0], '/')) ? ++p : argv[0]);
/* Gọi hàm bởi user phân quyền*/ if (geteuid () != 0) { errno = EPERM; perror (progname); exit (1);
} zlog_default = openzlog (progname, ZLOG_OSPF, LOG_CONS|LOG_NDELAY|LOG_PID, LOG_DAEMON);
/* OSPF master init */ ospf_master_init ();
#ifdef SUPPORT_OSPF_API /* OSPF apiserver is disabled by default */ ospf_apiserver_enable = 0;
The code snippet processes command-line options in a continuous loop, utilizing the `getopt_long` function to handle various flags It checks for the end of options with EOF and breaks the loop when reached The switch statement manages different cases, enabling daemon mode with the 'd' flag, specifying a configuration file with the 'f' option, setting the virtual terminal address with 'A', and defining a process ID file with 'i' Each case assigns the corresponding value to its respective variable, ensuring proper handling of user inputs.
/* Deal with atoi() returning 0 on failure, and ospfd not listening on ospfd port */ if (strcmp(optarg, "0") == 0) { vty_port = 0; break;
} vty_port = atoi (optarg); if (vty_port 0xffff) vty_port = OSPF_VTY_PORT; break; case 'u': ospfd_privs.user = optarg; break; case 'g': ospfd_privs.group = optarg; break;
#ifdef SUPPORT_OSPF_API case 'a': ospf_apiserver_enable = 1; break;
#endif /* SUPPORT_OSPF_API */ case 'v': print_version (progname); exit (0); break; case 'C': dryrun = 1; break; case 'h': usage (progname, 0); break; default: usage (progname, 1); break;
/* Khởi tạo */ master = om->master;
To initialize the library, begin by calling `zprivs_init(&ospfd_privs)`, followed by `signal_init(master, Q_SIGC(ospf_signals), ospf_signals)` Next, invoke `cmd_init(1)` and proceed with `debug_init()` Afterward, initialize the virtual terminal with `vty_init(master)`, allocate memory using `memory_init()`, and set up access and prefix lists with `access_list_init()` and `prefix_list_init()`, respectively.
/* OSPFd inits */ ospf_if_init (); ospf_zebra_init ();
/* OSPF vty inits */ ospf_vty_init (); ospf_vty_show_init (); ospf_route_map_init ();
#ifdef HAVE_SNMP ospf_snmp_init ();
#ifdef HAVE_OPAQUE_LSA ospf_opaque_init ();
#endif /* HAVE_OPAQUE_LSA */ sort_node ();
/* Get file cấu hình.*/ vty_read_config (config_file, config_default);
/* Start execution only if not in dry-run mode */ if (dryrun) return(0);
/* Thay đổi chương trình daemon */ if (daemon_mode && daemon (0, 0) < 0) { zlog_err("OSPFd daemon failed: %s", strerror(errno)); exit (1);
/* Process id file create */ pid_output (pid_file);
/* Tạo socket cho VTY*/ vty_serv_sock (vty_addr, vty_port, OSPF_VTYSH_PATH);
/* Print banner */ zlog_notice ("OSPFd %s starting: vty@%d", QUAGGA_VERSION, vty_port);
/* Fetch active thread tiếp theo */ while (thread_fetch (master, &thread)) thread_call (&thread);
- Lựa chọn BGP, sử dụng GNU get opt library: static const struct option longopts[] = {
{ "daemon", no_argument, NULL, 'd'}, { "config_file", required_argument, NULL, 'f'}, { "pid_file", required_argument, NULL, 'i'}, { "bgp_port", required_argument, NULL, 'p'},
The command options include "listenon" for specifying a listening address, "vty_addr" for defining the virtual terminal address, and "vty_port" for setting the virtual terminal port Additional options are "retain" to maintain settings, "no_kernel" to exclude kernel features, and "user" and "group" for defining user and group parameters The "version" option displays the current version, while "dryrun" allows for a simulation without execution The "help" option provides assistance, and "import-check" verifies import settings.
- Định nghĩa tín hiệu: void sighup (void); void sigint (void); void sigusr1 (void); static void bgp_exit (int); static struct quagga_signal_t bgp_signals[] = {
- Cấu hình file và thư viện: char config_default[] = SYSCONFDIR BGP_DEFAULT_CONFIG;
- Khai báo reain mode của route: static int retain_mode = 0;
/* Master of threads */ struct thread_master *master;
- Phân loại riêng các file cấu hình: char *config_file = NULL;
- Khai báo ID của tiến trình được sử dụng bởi hệ thống đầu vào: static const char *pid_file = PATH_BGPD_PID;
- Cổng và địa chỉ của VTY: int vty_port = BGP_VTY_PORT; char *vty_addr = NULL;
- Phân quyền: static zebra_capabilities_t _caps_p [] = {
ZCAP_BIND, ZCAP_NET_RAW, ZCAP_NET_ADMIN, }; struct zebra_privs_t bgpd_privs = {
#if defined(QUAGGA_USER) && defined(QUAGGA_GROUP) user = QUAGGA_USER,
#ifdef VTY_GROUP vty_group = VTY_GROUP,
#endif caps_p = _caps_p, cap_num_p = sizeof(_caps_p)/sizeof(_caps_p[0]), cap_num_i = 0,
- Hiển thị thông tin: static void usage (char *progname, int status) { if (status != 0) fprintf (stderr, "Try `%s help' for more information.\n", progname); else { printf ("Usage : %s [OPTION ]\n\n\
Daemon which manages kernel routing table management and \ redistribution between different routing protocols.\n\n\
-d, daemon Runs in daemon mode\n\
-f, config_file Set configuration file name\n\
-i, pid_file Set process identifier file name\n\
-p, bgp_port Set bgp protocol's port number\n\
-l, listenon Listen on specified address (implies -n)\n\
-A, vty_addr Set vty's bind address\n\
-P, vty_port Set vty's port number\n\
-r, retain When program terminates, retain added route by bgpd.\n\
-n, no_kernel Do not install route to kernel.\n\
-u, user User to run as\n\
-g, group Group to run as\n\
-C, dryrun Check configuration for validity and exit\n\
-h, help Display this help and exit\n\
Report bugs to %s\n", progname, ZEBRA_BUG_ADDRESS);
- SIGHUP handler void sighup (void) { zlog (NULL, LOG_INFO, "SIGHUP received");
/* Terminate all thread */ bgp_terminate (); bgp_reset (); zlog_info ("bgpd restarting!");
/* Reloadfile cấu hình */ vty_read_config (config_file, config_default);
/* Tạo VTY sockets*/ vty_serv_sock (vty_addr, vty_port, BGP_VTYSH_PATH);
/* Try to return to normal operation */
- SIGINT handler: void sigint (void) { zlog_notice ("Terminating on signal"); if (! retain_mode) bgp_terminate (); zprivs_terminate (&bgpd_privs); bgp_exit (0);
- SIGUSR1 handler: void sigusr1 (void) { zlog_rotate (NULL);
Try to free up allocations we know about so that diagnostic tools such as valgrind are able to better illuminate leaks.
Zebra route removal and protocol teardown are not meant to be done here.
For example, "retain_mode" may be set.
*/ static void bgp_exit (int status) { struct bgp *bgp; struct listnode *node, *nnode; int *socket; struct interface *ifp; extern struct zclient *zclient; extern struct zclient *zlookup;
/* reverse bgp_master_init */ for (ALL_LIST_ELEMENTS (bm->bgp, node, nnode, bgp)) bgp_delete (bgp); list_free (bm->bgp);
/* reverse bgp_master_init */ for (ALL_LIST_ELEMENTS_RO(bm->listen_sockets, node, socket)) { if (close ((int)(long)socket) == -1) zlog_err ("close (%d): %s", (int)(long)socket, safe_strerror (errno));
} list_delete (bm->listen_sockets);
In the context of network management, the function `bgp_zebra_init/if_init` is designed to handle the deletion of interfaces when in retain mode It initiates by adding a hook for interface deletion, ensuring that any connected routes associated with each interface are also removed The process iterates through all interfaces in the list, systematically deleting connected routes before finally removing the interface itself, thereby maintaining network integrity and efficiency.
/* reverse bgp_attr_init */ bgp_attr_finish ();
/* reverse bgp_dump_init */ bgp_dump_finish ();
/* reverse bgp_route_init */ bgp_route_finish ();
/* reverse bgp_route_map_init/route_map_init */ route_map_finish ();
/* reverse bgp_scan_init */ bgp_scan_finish ();
/* reverse access_list_init */ access_list_add_hook (NULL); access_list_delete_hook (NULL); access_list_reset ();
/* reverse bgp_filter_init */ as_list_add_hook (NULL); as_list_delete_hook (NULL); bgp_filter_reset ();
/* reverse prefix_list_init */ prefix_list_add_hook (NULL); prefix_list_delete_hook (NULL); prefix_list_reset ();
The termination of the community list is executed through the function `community_list_terminate(bgp_clist)`, followed by the closure of command and virtual terminal sessions with `cmd_terminate()` and `vty_terminate()` Additionally, any allocated resources are freed, including the `zclient` and `zlookup` if they exist, as well as the `bgp_nexthop_buf`, ensuring efficient memory management.
/* reverse bgp_master_init */ if (master) thread_master_free (master); if (zlog_default) closezlog (zlog_default); if (CONF_BGP_DEBUG (normal, NORMAL)) log_memstats_stderr ("bgpd"); exit (status);
- Routine main của bgpd: int main (int argc, char **argv) { char *p; int opt; int daemon_mode = 0; int dryrun = 0; char *progname; struct thread thread; int tmp_port;
/* Set umask before anything for security */ umask (0027);
/* Preserve name of myself */ progname = ((p = strrchr (argv[0], '/')) ? ++p : argv[0]); zlog_default = openzlog (progname, ZLOG_BGP,
LOG_CONS|LOG_NDELAY|LOG_PID, LOG_DAEMON);
/* BGP master init */ bgp_master_init ();
/* Command line argument treatment */ while (1) { opt = getopt_long (argc, argv, "df:i:hp:l:A:P:rnu:g:vCI", longopts, 0); if (opt == EOF) break; switch (opt)
In the provided code snippet, various case statements handle specific command-line options, such as enabling daemon mode, setting the configuration file, specifying the PID file, and defining the port number The port number is validated to ensure it falls within the acceptable range; if not, a default value is assigned Additionally, the address for the VTY (Virtual Teletype) is set based on user input.
/* Deal with atoi() returning 0 on failure, and bgpd not listening on bgp port */ if (strcmp(optarg, "0") == 0) { vty_port = 0; break;
} vty_port = atoi (optarg); if (vty_port 0xffff) vty_port = BGP_VTY_PORT; break; case 'r': retain_mode = 1; break; case 'l': bm->address = optarg;
The provided code snippet outlines various command-line options for a BGP (Border Gateway Protocol) application It includes options to disable the FIB (Forwarding Information Base) with '-n', set user and group privileges using '-u' and '-g', display the program version with '-v', enable a dry run mode with '-C', and activate import checks with '-I' Additionally, the '-h' option displays usage information, while any unrecognized options prompt an error message.
/* Make thread master */ master = bm->master;
/* Initializations */ srand (time (NULL)); signal_init (master, Q_SIGC(bgp_signals), bgp_signals); zprivs_init (&bgpd_privs); cmd_init (1); vty_init (master); memory_init ();
/* BGP related initialization */ bgp_init ();
/* Sort CLI commands */ sort_node ();
/* Parse config file */ vty_read_config (config_file, config_default);
/* Start execution only if not in dry-run mode */ if(dryrun) return(0);
/* Turn into daemon if daemon_mode is set */ if (daemon_mode && daemon (0, 0) < 0) { zlog_err("BGPd daemon failed: %s", strerror(errno)); return (1);
/* Process ID file creation */ pid_output (pid_file);
/* Make bgp vty socket */ vty_serv_sock (vty_addr, vty_port, BGP_VTYSH_PATH);
/* Print banner */ zlog_notice ("BGPd %s starting: vty@%d, bgp@%s:%d", QUAGGA_VERSION, vty_port, (bm->address ? bm->address : ""), bm->port);
/* Start finite state machine, here we go! */ while (thread_fetch (master, &thread)) thread_call (&thread);