Professional Documents
Culture Documents
Để cung cấp một dịch vụ truyền tin cậy đến các ứng dụng, TCP sử dụng giao thức tự động
lặp lại yêu cầu có chọn lọc (ARQ Selective Repeat) với xác nhận tích cực được thực hiện bởi cơ
chế cửa sổ trượt (sliding-window). Sự khác biệt ở đây là của sổ trượt trên cơ sở byte thay cho
gói tin. TCP cũng có thể áp dụng kiểm soát luồng qua kết nối bằng cách quảng cáo linh động
kích thức cửa sổ. Kiểm soát luồng là một quá trình điều tiết giao thông giữa 2 điểm và được sử
dụng để tránh bên gửi quá nhiều dữ liệu một lúc đến bên nhận.
Hình 1 minh họa ví dụ về cách một thực thể TCP có thể kiểm soát luồng. Giả sử rằng tại
thời điểm t 0, mô-đun TCP ở B quảng cáo cửa sổ với kích thước 2048 và mong đợi byte được
nhận tiếp theo có số thứ tự 2000. Cửa sổ đã được quảng cáo cho phép A truyền lên đến 2048
byte dữ liệu chưa được xử lý. Tại thời điểm t 1, A chỉ truyền 1024 byte, vì vậy nó truyền tất cả
dữ liệu bắt đầu bằng byte có thứ tự 2000. Thực thể TCP đã quảng cáo một cửa sổ có kích thức
1024 byte đến B và byte tiếp theo được mong đợi có số tứ tự là 1. Khi một phân đoạn dữ liệu
đến B, B chọn cách trì hoãn ACK để hi vọng rằng ACK có thể truyền không vướng luồng dữ
liệu gửi đến từ A. Trong khi tại thời điểm t2, A gửi 1024 byte khác tới B. Sau khi truyền, cửa sổ
gửi của A đóng hoàn toàn nghĩa là no không cho phép truyền bất kỳ dữ liệu nào thêm cho đến
khi nhận được ACK trở lại từ B.
Tại thời điểm t3, B có 128 byte dữ liệu cần truyền và cũng muốn xác nhận 2 phân đoạn
dữ liệu đầu tiên từ A. B có thể dễ dàng đưa ACK (bằng cách chỉ định ACK_NO là 4048) vào
phân đoạn dữ liệu. Cũng tại thời điểm này, B nhận thấy rằng nó chỉ có thể phân bổ 512 byte của
bộ đệm nhận cho kết nối này vì các kết nối khác cũng đang cạnh tranh bộ nhớ. Vì vậy nó co
kích thước cửa sổ từ 2048 byte xuống 512 byte. Khi A nhận phân đoạn dữ liệu, nó thay đổi kích
thước cửa sổ gửi xuống 512 byte. Chúng ta thấy rằng việc quảng cáo cửa sổ tự động điều khiển
luồng dữ liệu từ bên gửi đến bên nhận và ngăn tràn bộ đệm thu.
VÍ DỤ Kích thước phân đoạn tối đa (MSS) và hiệu quả băng thông
Giá trị của MSS ảnh hưởng tới hiệu quả sử dụng liên kết cho trước. Để thảo luận về ảnh
hưởng của MSS lên hiệu quả băng thông được xem xét ở Hình 2. Mỗi phân đoạn TCP bao gồm
20 byte TCP header và theo sau là khối dữ liệu. Lần lượt phân đoạn dữ liệu được gói gọn trong
một gói tin IP gồm 20 byte header cộng thêm. MSS cho một kết nối là khối dữ liệu lớn nhất của
một phân đoạn được cho phép chứa. TCP cung cấp 16 bit để dành cho tùy chọn MSS, do đó
khối dữ liệu lớn nhất mà có thể mang theo trong phân đoạn là 65,495 byte. Là do 65,535 trừ 20
byte IP header và 20 byte TCP header.
Hình 2 Header overhead
Trong TCP, MSS mặc định là 536 byte và gói tin IP tương ứng là 576 byte. Trong trường
hợp này, 40 byte header trong tổng 576 byte, nghĩa là 7% là phí. Nếu thay vào đó MMS là
65,495 byte thì phí sẽ chỉ 0.06%. Tuy nhiên, trên thực tế, Các mạng lưới khác nhau áp đặt giới
hạn về kích thước khối khác nhau tùy khả năng xử lý. Ví dụ, MSS của Ethernet là 1460.
Thông số kỹ thuật cơ bản của TCP giả định thời gian tồn tại tối đa của phân đoạn (MSL) là
2 phút. Số thứ tự sẽ quấn quanh khi 232 =4,294,967,296 byte được gửi. Vì TCP sử dụng
Selective Repeat ARQ nên window size tối đa cho phép là 231 byte. Đối với đường dây T-1 thì
thời gian yêu cầu là (232∗8)/( 1.544∗10 6) = 6 tiếng. Đối với đường T-3 (45 Mbps) thì quấn
quanh sẽ xảy ra sau 12 phút. Đối với đường dây OC-48 (2.4 Gbps) thì quấn quanh sẽ xảy trong
sau 14 giây. Rõ ràng quấn số thứ tự trở thành một vấn đề cho hệ thống TCP hoạt động trên các
liên kết tốc độ rất cao.
Khi lựa chọn timestamp được sử dụng, TCP sẽ chèn 32 bit timestamp vào một trường 4
byte trong header của mỗi phân đoạn mà nó truyền. TCP phản hồi lại 32 bit timestamp mà nó
nhận được bằng cách chèn timestamp vào trường 4 byte trong header của mỗi phân đoạn ACK.
Bằng cách kết hợp 32 bit timestamp với 32 bit số thứ tự, chúng ta thu được một lượng lớn số thứ
tự 64 bit để giải quyết vấn đề quấn quanh. Để hiệu quả, đồng hồ timestamp nên đánh dấu tiếp
khi ít nhất đã gửi 231 byte. Yêu cầu này đặt một giới hạn dưới cho tần số đồng hồ. Đồng hồ cũng
không nên nhanh quá; nó không nên hoàn thành một chu kỳ trong ít hơn một giai đoạn MSL.
Tần số đồng hồ trong phạm vi mà một tích tắc mỗi nằm trong khoảng 1ms đến 1s đáp ứng các
yêu cầu ràng buộc này. Ví dụ, một chu kỳ đồng hồ loại 1ms hoạt động cho tốc độ truyền lên tới
8 terabit trên một giây thì giá trị 32 bit timestamp sẽ bát đầu lặp lại sau 25 ngày [RFC 1323].
VÍ DỤ Delay-Bandwidth Product và kích thước cửa sổ được báo trước
Xem xét một liên kết mà có thời gian khứ hồi (RTT) là 100 ms. Số byte trong một liên kết
như thế ở đường dây T-1 có tốc độ là 1.544∗106∗100/8=19,300 byte. Cho đường dây T-3
(45Mbps) thì số byte là 526,500 byte và cho đường dây OC-48 thì nó tăng lên là 3 MB. Giả sử
rằng một quy trình TCP đơn cần giữ các liên kết này chiếm toàn bộ việc truyền thông tin của nó.
Cửa sổ đã được cho biết của nó phải ít nhất lớn bằng RTT x Delay-Bandwidth Product. Ở đầu
phần này, chúng ta thấy kích thước tối đa của cửa sổ đã cho biết trước chỉ là 65,535 nên nó
không đủ cho đường dây T-3 và OC-48. Tuy nhiên, tùy chọn mở rộng cửa sổ cho phép kích
thước cửa sổ lên tới 65,535 x 214 = 1 GB đủ để xử lý các trường hợp đó.
Hình 3 Kết thúc của TCP: A gửi phân đoạn với tập bit FIN để đóng phiên kết nối và B xác
nhận đã nhận phân đoạn FIN.
Trạng thái TIME_WAIT phục vụ 2 mục đích. MSL là thời gian dài nhất mà phân đoạn có
thể tồn tại trong mạng trước khi bị loại bỏ. Trạng thái TIME-WAIT ép TCP phải chờ ít nhất 2
lần MSL trước khi thiết lập một kết nối khác giống kết nối cũ. MSL đầu tiên là thời gian tối đa
mà một phân đoạn trong một hướng có thể vẫn còn trong mạng và MSL thứ hai là thời gian tối
đa cho phép trả lời theo hướng khác có thể có trong mạng. Do đó, tất cả các phân đoạn từ kết
nối cũ sẽ bị bỏ khỏi mạng tại thời điểm kết thúc trạng thái TIME_WAIT.
Hình 3 cho thấy một gói tin được bắt của kết thúc TCP trong ví dụ Telnet. Khung 6 và 7
đóng kết nối từ máy khách đến máy chủ. Khung 8 và 9 đóng kết nối từ máy chủ đến máy khách.
Chúng ta hãy xem xét lại tiến trình kết thúc kết nối được mô tả trong Hình 3 trong hoàn
cảnh một ứng dụng máy khách/máy chủ. Hơn một lần nữa đặt máy khách là A, máy chủ là B.
Máy khách thiết lập một active close bằng cách phát ra một cuộc gọi close thông báo cho máy
chủ răng mô-đun TCP ở A không gửi thêm dữ liệu nữa. Mô-đun TCP ở A phải vẫn được chuẩn
bị nhận dữ liệu từ B. Khi máy chủ truyền dữ liệu xong, nó phát ra cuộc gọi close. Hành động
này làm cho mô-đun của B phát ra phân đoạn FIN của nó.
TCP cung cấp cho việc chấm dứt kết nối đột ngột thông qua phân đoạn thiết lập lại
(RST). Phân đoạn RST là một phân đoạn với tập bit RST. Nếu một ứng dụng quyết định kết
thúc kết nối một cách đột ngột thì nó sẽ phát ra lệnh ABORT mà khiến cho TCP bỏ hết dữ liệu
được xếp hàng chuẩn bị truyền để gửi phân đoạn RST. Mô-đun TCP mà nhận phân đoạn RST
thì sau đó sẽ thông báo cho tiến trình ứng dụng của nó rằng kết nối đã bị chấm dứt.
Phân đoạn RST cũng được gửi khi mô-đun TCP nhận một phân đoạn mà nó không phù
hợp. Ví dụ, một phân đoạn RST được gửi khi một yêu cầu kết nối đến cho tiến trình ứng dụng
mà nó không nghe được trên cổng được cấp. Một ví dụ khác liên quan đến việc A gặp sự cố.
Mô-đun TCP ở B không nhận thấy sự cố nên có thể vẫn gửi một phân đoạn. Khi nhận phân
đoạn này, mô-đun TCP ở A gửi một phân đoạn RST thông báo cho B rằng kết nối đã bị chấm
dứt.
Một kết nối TCP đi qua một loạt các trạng thái trong suốt thời gian tồn tại của nó. Hình 4
thể hiện sơ đồ chuyển trạng thái. Mỗi mũi tên chỉ sự chuyển trạng thái và nhãn liên quan biểu
thị cho các hành động và sự kiện liên quan. Thiết lập kết nối bắt đầu ở trạng thái CLOSE và
chuyển sang trạng thái ESTABLISHED. Chấm dứt kết nối đi từ trạng thái ESTABLISHED đến
trạng thái CLOSE. Các chuyển đổi bình thường của máy khách được thể hiện bằng các đường
liền nét dày và các chuyển đổi bình thường của máy chủ được ký hiệu bằng các đường nét đứt.
Do đó khi một máy khách thực hiện mở chủ động thì nó đi từ trạng thái CLOSE đến
SYN_SENT và sau đó đến ESTABLISHED. Máy chủ thực hiện mở bị động đi từ trạng thái
CLOSE đến LISTEN, SYN_RCVD và sau đó đến ESTABLISHED.
Thông thường, máy khách thiết lập chấm dứt kết nối bằng cách gửi phân đoạn FIN. Quỹ
đạo trạng thái liên quan đi từ trạng thái ESTABLISHED đến trạng thái FIN_WAIT_1 trong khi
chờ nhận ACK, đến trạng thái FIN_WAIT_2 khi chờ FIN của bên kia và sau đó đến trạng thái
TIME_WAIT sau khi gửi ACK cuối cùng. Khi TIME_WAIT hết hạn, kết nối bị đóng và tất cả
sự thay đổi kết nối TCP đã bị xóa được lưu vào khối điều khiển truyền. Chú ý rằng sơ đồ
chuyển trạng thái không thể hiện tất cả các điều kiện lỗi có thể xảy ra mà đặc biệt liên quan đến
trạng thái TIME_WAIT. Thông thường máy chủ đi từ trạng thái ESTABLISH đến trạng thái
CLOSE_WAIT sau khi nó nhận được FIN, đến trạng thái LAST_ACK khi nó gửi FIN và cuối
cùng đến trạng thái CLOSE khi nó nhận được ACK cuối cùng. Chúng ta sẽ khám phá quỹ đạo
trạng thái có thể khác trong phần vấn đề ở cuối chương.
Hình 4 Sơ đồ dịch chuyển trạng thái. Chú ý: Đường liền nét đậm là quỹ đạo trạng thái bình
thường cho máy khách; đường nét đứt là quỹ đạo trạng thái thông thường cho máy chủ.
8.5.3 Kiểm soát tắc nghẽn TCP
Nhớ lại từ Chương 5 rằng TCP sử dụng giao thức cửa sổ trượt để điều khiển luồng từ đầu
đến cuối. Giao thức này được triển khai bằng cách yêu cầu bên nhận chỉ định trong ACK số
lượng byte mà nó sẵn sàng nhận trong tương lai hay gọi là cửa sổ được báo trước. Cửa sổ được
báo trước chắc chắn rằng bộ đệm nhận sẽ không bao giờ bị tràn vì bên gửi không thể truyền
lượng dữ liệu mà vượt quá kích thước đã chỉ định trong cửa sổ được báo trước. Không may, cửa
sổ được báo trước không ngăn chặn việc bộ đệm ở router trung gian bị tràn dẫn tới tắc nghẽn.
Vì lớp IP không thực hiện cơ chế kiểm soát tắc nghẽn nên phải lên lớp cao hơn để phát hiện tắc
nghẽn và thực hiện hành động thích hợp. Hóa ra cơ chế cửa sổ TCP cũng có thể được dùng để
kiểm soát tắc nghẽn trong mạng.
Nếu bên gửi quá năng nổ bằng cách gửi nhiều gói tin thì mạng cuối cùng sẽ phải gặp tình
trạng tắc nghẽn. Mặt khác, nếu người gửi quá dè dặt thì mạng sẽ được sử dụng chưa đúng mức.
Mục tiêu của kiểm soát tắc nghẽn là mỗi bên gửi chỉ gửi đúng lượng dữ liệu để giữ tài nguyên
mạng được sử dụng hợp lý nhưng không quá tải. Để đạt được mục tiêu đó, giao thức TCP định
nghĩa một cửa sổ khác gọi là cửa sổ tắc nghẽn. Cửa sổ này chỉ định số byte tối đa mà bên gửi
được cho phép truyền với giải thiết rằng với lượng dữ liệu đó sẽ không xảy ra tắc nghẽn. Thuật
toán kiểm soát tắc nghẽn TCP ở bên gửi điều chỉnh một cách linh động cửa sổ tắc nghẽn theo
điều kiện hiện thời của mạng. Để tránh cả tắc nghẽn mạng và tràng bộ đệm nhận thì lượng dữ
liệu tối đa mà bên gửi được cho phép thực lúc nào cũng là kích thước bé nhất của cửa sổ được
báo trước và cửa sổ tắc nghẽn. Chúng ta sẽ thấy rằng, TCP điều chỉnh tốc độ của các phân đoạn
được truyền vào trong mạng. Các phân đoạn lần lượt tạo ra gói tin IP đi qua mạng.
Hoạt động của thuật toán điều khiển tắc nghẽn TCP có thể được chia thành 3 phần (thảo
luận sau đây giả sử rằng tại nguồn luôn có dữ liệu để truyền). Giai đoạn đầu tiên được chạy khi
thuật toán bắt đầu truyền dữ liệu hoặc thuật toán bắt đầu lại sau khi khôi phục từ phân đoạn bị
mất. Kỹ thuật này gọi là khởi động chậm và được thực hiện bằng cách thiệt lập ban đầu cho cửa
sổ tắc nghẽn một giá trị nhỏ (thường là một MSS). Mỗi lần bên gửi nhận ACK từ bên nhận, bên
gửi tăng kích thước cửa sổ tắc nghẽn lên 1 phân đoạn (1 MSS). Do đó, sau khi gửi phân đoạn
đầu tiên, nếu bên gửi nhận ACK trước khi time-out thì bên gửi tăng kích thước cửa sổ tắc nghẽn
lên thành 2 phân đoạn. Sau đó, nếu 2 phân đoạn đó được xác nhận thì cửa sổ tắc nghẽn tăng lên
thành 4 phân đoạn và cứ thế. Như ở Hình 5 kích thước cửa sổ tắc nghẽn tăng theo hàm số mũ
trong suốt giai đoạn khởi động chậm. Lý do của việc tăng theo hàm số mũ là khởi động chậm
cần lấp đầy đường ống nhanh nhất có thể để sử dụng một cách hiệu quả tối đa tài nguyên mạng.
Sau một điểm nhất định, có thể không hay nếu tiếp tục tăng kích thước cửa sổ tắc nghẽn
theo hàm số mũ vì vượt quá mức rất đáng kể. Đặc biệt, giai đoạn khởi động chậm kết thúc khi
kích thước cửa sổ tắc nghẽn đạt tới hoặc vượt qua một giá trị nhất định được chỉ định là ngưỡng
tắc nghẽn (có thể được thiết lập một giá trị cao tùy ý). Tại điểm này, giai đoạn tránh tắc nghẽn
diễn ra. Giai đoạn này giả thiết rằng đường ống gần đạt tới mức sử dụng hiệu quả tối đa. Do đó,
sẽ khôn ngoan nếu thuật toán giảm tốc độ tăng vì sẽ không vượt quá khả năng của đường ống.
Cụ thể, thuật toán tăng kích thước cửa sổ tắc nghẽn tuyến tính thay cho hàm số mũ trong quá
trình tránh tắc nghẽn. Điều đó thể hiện ở chỗ kích thước tắc nghẽn tăng lên một phân đoạn mỗi
vòng.
Hình 5 Sự linh động của cửa sổ tắc nghẽn TCP
Rõ ràng, kích thước cửa sổ tắc nghẽn cũng không thể tăng mãi vì khả năng của mạng là có
hạn. Kích thước cửa sổ tắc nghẽn ngừng tăng khi TCP phát hiện mạng bị tắc nghẽn. Thuật toán
đi vào giai đoạn thứ 3. Giả định rằng kích thước cửa sổ tắc nghẽn hiện tại tương quan với điểm
đường ống đầy, TCP thiết lập ngưỡng tắc nghẽn bằng nửa kích thước cửa sổ tắc nghẽn để thăm
dò đường ống lần sau. Sau đó kích thước cửa sổ tắc nghẽn được thiết lập bằng 1 MSS và thuật
toán được bắt đầu lại với việc sử dụng kỹ thuật khởi động chậm.
Hình 5 minh họa sự linh động của kích thước cửa sổ tắc nghẽn theo thời gian. Ban đầu,
khởi động chậm bắt đầu và bên gửi truyền 1 phân đoạn. Sau lần khứ hồi đầu tiên, bên gửi sẽ
truyền thêm 2 phân đoạn bổ sung. Ở lần khứ hồi thứ 2, bên gửi sẽ truyền thêm 4 phân đoạn bổ
sung và cứ thế cho đến khi đạt mức ngưỡng tắc nghẽn (16 phân đoạn). Sau đó, ở giai đoạn tránh
tắc nghẽn, kích thước cửa sổ được tăng tuyến tính vì bên gửi chỉ tăng 1 phân đoạn mỗi lần khứ
hồi. Khi kích thước cửa sổ tắc nghẽn là 20, một time-out xuất hiện thể hiện mạng bị tắc nghẽn
và sau đó ngưỡng tắc nghẽn được đặt bằng 10 và kích thước cửa sổ tắc nghẽn được đặt lại. Sau
đó thuật toán quay trở lại với bắt đầu chậm.
Tắc nghẽn trong mạng thường do nhiều phân đoạn bị hủy dẫn đến thiếu ACK theo hướng
ngược lại. Bên gửi TCP lợi dụng điều đó và giả định rằng tắc nghẽn xảy ra trong mạng khi ACK
không đến trước khi hết thời gian truyền lại. Tuy nhiên, khi chỉ một phân đoạn bị hủy thì bên
gửi TCP mới có thể khôi phục nhanh hơn. Lý do là các phân đoạn tiếp theo khiến bên nhận
truyền các ACK trùng lặp và các ACK này thường đến bên gửi trước khi hết thời gian truyền
lại. Khi bên gửi nhận được 3 ACK trùng nhau thì nó sẽ thực hiện truyền lại nhanh bằng cách
truyền ngay lập tức phân đoạn bị mất. Sau đó bên gửi thực hiện khôi phục nhanh bằng cách
trước tiên thiết lập ngưỡng tắc nghẽn như đã giải thích ở trên. Sau đó kích thước cửa sổ tắc
nghẽn sẽ được đặt bằng ngưỡng tắc nghẽn cộng với 3 MSS để dành cho 3 phân đoạn có ACK
trùng nhau. Sau đó, bên gửi tiếp tục giai đoạn tránh tắc nghẽn. 7
7
Xem RFC 2581 để thêm thông tin chi tiết.
Một giả định cơ bản trong điều khiển tắc nghẽn TCP là mất phân đoạn do tắc nghẽn hơn là
lỗi. Giả định này khá có giá trị trong mạng có dây nơi mà phần trăm mất gói do lỗi truyền rất
thấp (dưới 106). Tuy nhiên, nên chú ý rằng giả định này có thể không có giá trị trong mạng
không dây nơi mà lỗi truyền có thể tương đối cao. Tương tác giữa kiểm soát tắc nghẽn trong
TCP và kiểm soát liên kết dữ liệu trong liên kết không dây là một chủ đề được quan tâm hiện
nay.
Trong ước lượng của RTT, một sự mơ hồ tồn tại khi một phân đoạn được truyền lại do
thời gian chờ đã hết. Khi ACK cuối cùng cũng quay trở lại thì chúng ta liên kết nó với phân
đoạn đầu tiên hay với phân đoạn được truyền lại? Karn đã đề xuất loại bỏ RTT khi một phân
đoạn được truyền lại vì sử dụng RTT có thể làm sai ước tính. Ý kiến này được gọi chung là
thuật toán của Karn.
Đồ hình Internet toàn cầu có thể được xem như một tập hợp các hệ thống tự trị. Một hệ
thống tự trị-AS (Autonomous System) được định nghĩa sơ bộ là một tập các bộ định tuyến hoặc
mạng mà được quản lý kỹ thuật bằng một tổ chức đơn lẻ như là mạng lưới công ty lớn, mạng
lưới trường học hoặc mạng lưới cung cấp dịch vụ Internet. Không có hạn chế rằng AS nên chạy
một giao thức định tuyến đơn trong AS. Yêu cầu quan trọng duy nhất là với thế giới bên ngoài,
một AS phải đưa ra một bức tranh nhất quán mà các AS có thể tiếp cận được thông qua nó.
Có 3 loại AS:
1. Stub AS chỉ có một kết nối đơn đến thế giới bên ngoài.
2. Multihomed AS có nhiều kết nối đến thế giới bên ngoài nhưng từ chối mang lưu lượng
quá cảnh (lưu lượng mà bắt nguồn và kết thúc ở thế giới bên ngoài). Multihomed AS chỉ mang
lưu lượng cục bộ (lưu lượng mà bắt nguồn hoặc kết thúc ở trong AS đó).
3. Transit AS có nhiều kết nối đến thế giới bên ngoài và có thể mang lưu lượng quá cảnh
và cục bộ.
Cho mục đích nhận dạng AS, mỗi AS cần được gán một số AS duy nhất toàn cầu (ASN)
mà được đại diện bởi một số nguyên 16 bit nên nó bị giới hạn trong khoảng 65,000 số. Phải cẩn
thận để không làm cạn kiệt không gian AS. Như đã nói, số lượng AS được đăng ký đã vượt quá
10,000. May mắn thay, Stub AS là loại phổ biến nhất và không cần ASN vì các tiền tố liên quan
được đặt ở bảng định tuyến của nhà cung cấp. Mặt khác, Transit AS cần ASN. Hiện tại, một tổ
chức có thể yêu cầu một ASN từ ARIN ở Bắc Mỹ, từ RIPE ở châu Âu hoặc từ APNIC ở châu
Á.
Giao thức định tuyến trong Internet được sắp xếp theo thứ bậc gồm 2 loại: Giao thức định
tuyến nội miền-IGP (Interior Gateway Protocol) và giao thức định tuyến liên miền-EGP
(Exterior Gateway Protocol). IGP được sử dụng cho định tuyến truyền thông trong AS và dựa
vào địa chỉ IP để xây dựng đường đi. EGP được sử dụng cho định tuyến truyền thông giữa các
AS khác nhau và dựa trên số AS để xây dụng đường đi AS. Trong phần này, chúng ta đề cập
đến 2 IGP phổ biến: giao thức định tuyến thông tin-RIP (Routing Information Protocol) và
OSPF (Open Shortest Path First). Chúng ta sẽ thảo luận về tiêu chuẩn thực tế hiện tại cho EGP
chính là giao thức BGP (Border Gateway Protocol) phiên bản 4 (BGP-4). Tương tự, IGP có thể
được coi là cung cấp bản đồ của một quận chi tiết về cách tiếp cận từng tòa nhà (host/router),
trong khi EGP cung cấp bản đồ của quốc gia kết nối mỗi quận (AS).
Hình 6 Định dạng bản tin RIP
Giao thức định tuyến thông tin – RIP (Routing Information Protocol) được dựa trên
chương trình được phân phối trong BSD 8 UNIX được gọi là routed 9 và sử dụng thuật toán véc-
tơ khoảng cách được thảo luận ở chương 7. RIP chạy trên cùng của UDP thông qua cổng 520.
Đơn vị được sử dụng trong tính toán đường đi ngắn nhất thường được cấu hình là số bước nhảy
(hop). Số hop tối đa là 15 vì RIP được thiết kế để sử dụng trong môi trường cục bộ nơi mà
đường kính mạng thường khá nhỏ. Giá trị 16 thường dành riêng để đại diện cho giá trị vô cùng.
Một router triển khai RIP sẽ gửi một bản tin cập nhật tới các hàng xóm mỗi 30 giây trên
danh nghĩa. Để đối phó với vấn đề thay đổi đồ hình mạng như là lỗi liên kết thì router dự kiến sẽ
nhận được bản tin cập nhật từ các hàng xóm với trường hợp tệ nhất là trong vòng 180 giây. Lý
do để chọn giá trị lớn hơn 30 giây là RIP sử dụng UDP – một giao thức không tin cậy. Do đó,
một số bản tin cập nhật có thể bị mất và không bao giờ tới các hàng xóm. Nếu router không
nhận được bản tin cập nhật từ hàng xóm X trong giới hạn đó thì nó sẽ cho rằng kết nối trực tiếp
đến X bị lỗi và thiết lập một chi phí tương ứng nhỏ nhất là 16 (vô cùng). Nếu sau đó router nhận
được một chi phí nhỏ nhất hợp lệ đến X từ một lân cận khác thì router sẽ thay thế giá trị vô cùng
bằng chi phí đó.
8
BSD là viết tắt của Berkeley Software Distribution.
9
Phát âm “route dee” chính là route deamon.
10
Phương thức Split Horizon với biến thể Poision Reverse được thảo luận ở Phần 7.5.1.
RIP sử dụng phương thức Split Horizon với biến thể Poision Reverse để giảm vòng lặp. 10
Trạng thái Convergence được tăng tốc bằng cách yêu cầu router triển khai cập nhật đã kích
hoạt. Tuy nhiên, router có thể muốn trì hoàn một cách ngẫu nhiên bản tin cập nhật được kích
hoạt để tránh tải mạng quá mức.
Bảng 1 Các trường RIP
Trường Mô tả
Command Trường lệnh chỉ ra mục đích của bản tin này. 2 giá trị hiện được định
nghĩa: 1 là yêu cầu hệ thống khác gửi thông tin định tuyến của nó và 2
là cho biết rằng một phản hồi có chứa thông tin định tuyến trong bảng
định tuyến của bên gửi.
Version Trường này chưa phiên bản của giao thức. RIP-1 đặt giá trị này là 1 và
RIP-2 đặt giá trị này là 2.
Address family Trường này được sử dụng để xác định loại địa chỉ. Hiện tại, chỉ địa chỉ
identifier IP được định nghĩa và giá trị 2 là IP.
IP address Trường này cho biết địa chỉ đích mà nó có thể là địa chỉ mạng hoặc
host.
Metric Trường này định ra chi phí (số lượng bước nhảy – hop) đến đích (trong
phạm vi từ 1 đến 15). Giá trị 16 cho biết đích không thể tiếp cận.
Định dạng bản tin RIP được thể hiện ở Hình 6. Bản tin bao gồm một trường Command,
một trường Version, 16 bit 0 và một số lượng khác nhau của thông báo định tuyến được gọi là
các mục RIP (tối đa 25 mục như vậy). Những trường được đặt là 0 không được sử dụng và được
dự trự sẵn cho các tiện ích mở rộng tương lai.
Mỗi mục RIP dài 20 byte và bao gồm một Address family Identifier, một IP address,
metric và vài trường được đặt bằng 0. Bảng 1 liệt kê mục đích của từng trường.
Mặc dù đơn giản rõ ràng là một lợi thế nhưng RIP cũng có vài hạn chế, gồm sử dụng số
liệu hạn chế và tốc độ hội tụ chậm. Với việc đếm hop và phạm vi nhỏ của giá trị đã chỉ định
trong metric, giao thức không thể tính đến các điều kiện tải mạng. Hơn nữa, giao thức không thể
phân biệt được giữa đường truyền tốc độ cao và tốc độ thấp. Dù phân tách theo chiều ngang
giúp tăng tốc độ hội tụ thì giao thức có thể hoạt động kém trong một số loại lỗi nhất định.
RIP-2 cho phép gói tin RIP mang theo nhiều thông tin hơn (ví dụ: subnet mask, hop tiếp
theo và miền định tuyến). RIP-2 cũng cung cấp một thủ tục xác thực đơn giản. Không giống
như RIP-1, RIP-2 có thể được dùng với CIDR. Thông số kỹ thuật đầy đủ được ghi lại trong
RFC-2453.
Giao thức Open Shortest Path First (OSPF) là một giao thức định tuyến nội miền được
phát triển để khắc phục một số thiếu sót của RIP. Không giống như RIP là mỗi router chỉ được
học từ hàng xóm của nó khoảng cách đến mỗi điểm đích thì OSPF cho phép mỗi router học cả
đồ hình mạng. RFC 2328 miêu tả phiên bản mới nhất của OSPF.
Mỗi router OSPF giám sát chi phí (trạng thái liên kết) của liên kết của mỗi hàng xóm của
nó và sau đó báo thông tin trạng thái liên kết đến các bộ định tuyến khác trong mạng. Việc này
cho phép mỗi router đều xây dựng một cơ sở dữ liệu trạng thái liên kết giống hệt nhau mô tả đồ
hình mạng hoàn chỉnh.
Ở trang thái ổn định router sẽ có cùng cơ sở dữ liệu trạng thái liên kết và do đó chúng sẽ
biết bao nhiêu router trong mạng, trong giao diện và liên kết giữa chúng và chi phí liên kết mỗi
liên kết. Thông tin trong cơ sở dữ liệu trạng thái liên kết cho phép router xây dựng cây đường
ngắn nhất với router được xem là gốc. Tính toán của đường ngắn nhất thường thực hiện bằng
thuật toán Dijkstra mặc dù các thuật toán định tuyến khác có thể áp dụng như nhau. Vì thông tin
trạng thái liên kết cung cấp giàu thông tin hơn véc-tơ khoảng cách nên OSPF thường hội tụ
nhanh hơn RIP khi một lỗi xảy ra trong mạng.
11
Loại của trường dịch vụ được thảo luận ở phần 8.21.
Để cải thiện khả năng mở rộng, OSPF giới thiệu một hệ thống phân cấp 2 cấp cho phép
AS được phân chia thành vài nhóm gọi là các khu vực. Các khu vực này được kết nối với nhau
bởi khu vực trục chính trung tâm như ở Hình 7. Một khu vực được định danh bởi một số 32 bit
được xem như ID của khu vực. Tiếp tục tương tự như đã nói trước đây, một khu vực có thể xem
như một thành phố hoặc thị trấn trong một đất nước (AS). Khu vực trục chính được định danh
với ID là 0.0.0.0. Cấu trúc liên kết của khu vực được ẩn khỏi các phần còn lại của AS theo
nghĩa là mỗi router trong một khu vực chỉ biết cấu trúc liên kết hoàn chỉnh bên trong khu vực.
Cách tiếp cận này hạn chế lưu lượng tràn đến khu vực và nó giúp cho giao thức mở rộng hơn.
Thông tin từ những khu vực khác được tóm lược bởi những router biên khu vực (ABR) có kết
nối đến nhiều khu vực khác. Khái niệm khu vực cho phép OSPF cung cấp một hệ thống phân
cấp 2 cấp nơi các khu vực khác có thể trao đổi gói tin thông qua khu vực trục chính.
Bốn loại router được định nghĩa trong OSPF. Router nội tuyến là một router với tất cả
liên kết của nó được kết nối với mạng trong cùng khu vực. Router biên khu vực là một router có
các liên kết của nó được kết nối với nhiều hơn 1 khu vực. Router trục chính là router có các liên
kết của nó được kết nối với trục chính. Cuối cùng, router giáp ranh của AS (ASBR) là router có
các liên kết của nó được kết nối với các AS khác. Các ASBR tìm hiểu về các tuyến đường bên
ngoài AS thông qua giao thức liên miền như BGP. Trong Hình 7, các router 1, 2 và 7 là các
router nội miền. Router 3, 6 và 8 là các router biên khu vực. Router 3, 4, 5, 6 và 8 là các router
trục chính. Router 4 là ASBR.
Hai router được coi là lân cân nếu chúng có giao diện đến chung một mạng. Giao thức
Hello cho phép các lân cân được phát hiện tự động. Router lân cân được xem là liền kề khi
chúng đồng bộ cơ sở dữ liệu cấu trúc liên kết thông qua trao đổi thông tin trạng thái liên kết.
Lân cân trên các liên kết điểm-điểm trở thành liền kề. Lân cân trên mạng đa truy nhập trở thành
liền kề với những router được chỉ định như giải thích ở bên dưới. Việc sử dụng những router
được chỉ định giảm kích thước của cơ sở dữ liệu cấu trúc liên kết và lưu lượng mạng được tạo ra
bởi OSPF.
Mạng đa truy nhập đơn giản là một tập các router mà có thể liên lạc trực tiếp với nhau.
(Nghĩ mạng đa truy nhập như một nhóm bạn bè.) Trong mạng đa truy nhập quảng bá, các router
liên lạc với nhau bằng các sử dụng mạng quảng bá như LAN. Mặt khác, trong mạng đa truy
nhập không quảng bá (NBMA), các router liên lạc thông qua một mạng không quảng bá. Ví dụ,
mạng chuyển mạch gói như ATM và frame relay. OSPF sử dụng router được chỉ định (và một
router được chỉ định dự phòng) trên các mạng đa truy nhập. (Nghĩ router được chỉ định như
thành viên phổ biến nhất của nhóm). Số bản tin của OSPF được trao đổi được giảm bởi sự tham
gia của router được chỉ định trong thuật toán thay mặt cho toàn bộ mạng đa truy nhập. Nghĩa là
router được chỉ định tạo ra các báo trước liên kết sẽ liệt kê các router mà được gắn vào trong
mạng đa truy nhập. (Thành viên phổ biến nhất sẽ nhanh chóng cung cấp cho phần còn lại của
nhóm tình trạng mạng thấp.)
Hoạt động của OSPF bao gồm các giai đoạn sau:
1. Lân cân được phát hiện thông qua truyền bản tin Hello và router được chỉ định được
bầu trong mạng đa truy nhập.
2. Các liền kề được thiết lập và cơ sở dữ liệu trạng thái liên kết được đồng bộ.
3. Các báo trước trạng thái liên kết (LSA) được trao đổi bởi các router liền kề để cho phép
cơ sở dữ liệu cấu trúc liên kết được duy trì và báo trước cho các router nội vùng và nội
AS. Các router sử dụng thông tin trong cơ sở dữ liệu để tạo bảng định tuyến.
4. Trong thảo luận sau đây, chúng tôi chỉ ra các loại gói tin khác nhau được sử dụng trong
các giai đoạn đó.
OSPF gửi các gói tin Hello (loại 1) đến các lân cân của mình theo định kỳ để dò, thiết lập và
duy trì quan hệ lân cân. Các gói tin Hello được truyền theo định kỳ đến mối giao diện thường là
mỗi 10 giây. Định dạng của phần thân của gói tin Hello được thể hiện ở Hình 9, các trường của
nó được định danh ở Bảng 2. Mỗi router phát quảng bá định kỳ 0một gói tin Hello vào trong
mạng của mình. Khi router nhận gói tin Hello, nó gửi trả một gói tin Hello chưa router ID của
mỗi lân cân nó đã thấy. Khi một router nhận gói tin Hello chứa router ID của nó trong một
trường lân cân thì router đảm bảo rằng giao tiếp đến bên gửi là 2 chiều. Các router được chỉ
định được bầu trong mỗi mạng đa truy nhập sau khi lân cân được phát hiện. Bầu cử dựa trên giá
trị cao nhất của sự ưu tiên và trường ID.
Bảng 2 Các trường của header OSPF
Trường Mô tả
Version Trường này chỉ định phiên bản của giao thức. Phiên bản mới nhất
hiện tai là 2.
Type Trường này chỉ định loại gói tin OSPF. Các loại sau được định nghĩa:
hello, mô tả cơ sở dữ liệu, yêu cầu trạng thái liên kết, cập nhật trạng
thái liên kết, xác nhận trạng thái liên kết.
Packet Length Trường này chỉ định kích thước của gói tin OSPF theo byte bao gồm
cả OSPF header.
Router ID Trường này xác định router gửi. Trường này thường được đặt thành
địa chỉ IP của một trong các interface của nó.
Area ID Trường này xác định vùng mà gói tin đó thuộc về. ID vùng 0.0.0.0
được dành riêng cho trục chính
Checksum Trường Checksum được dùng để phát hiện lỗi trong gói tin
Authentication type and Kết hợp của các trường này có thể được sử dụng để xác thực các gói
authentication tin OSPF.
Định dạng của gói tin mô tả cơ sở dữ liệu được thể hiện ở Hình 10. Bảng 4 liệt kê các
trường. Chú ý rằng gói tin mô tả cơ sở dữ liệu có thể chứa nhiều LSA header. Các router chỉ gửi
LSA header thay vì gửi tất cả cơ sở dữ liệu. Lân cận sau đó có thể yêu cầu LSA mà nó không
có. Đồng bộ cơ sở dữ liệu trạng thái liên kết của tất cả các router OSPF trong một vùng là cần
thiết để tổng hợp các router chính xác và không có vòng lặp.
Định dạng của LSA header được thể hiện ở Hình 11. Các trường tương ứng được liệt kê
ở Bảng 5. Có vài loại trạng thái liên kết. Báo trước liên kết router được tạo ra bởi tất cả các
router OSPF và nó đưa trạng thái của liên kết router vào trong vùng. Thông tin này chỉ phát0
trong vùng. Báo trước liên kết mạng được tạo ra bởi router được chỉ định. Nó liệt kê các router
đã kết nối tới mạng quảng bá hoặc mạng NBMA và chỉ được phát trong vùng. Báo trước liên
kết tóm lược được tạo ra bởi các router biên khu vực. Nó cung cấp các tuyến đến các đích trong
các khu vực khác và các tuyến đến ASBR. Cuối cùng, báo trước liên kết ngoài AS tạo ra bởi các
router giáp ranh AS. Báo trước này mô tả các tuyến đến đích ngoài mạng OSPF và được phát
trong tất cả các vùng trong mạng OSPF.
Giai đoạn 3: Sự lan truyền của thông tin trạng thái liên kết và xây dựng các bảng định
tuyến
Khi một router muốn cập nhật các phần cơ sở dữ liệu trạng thái liên kết, nó sẽ gửi một gói yêu
cầu trạng thái liên kết (loại 3) cho các lân cận để liệt kê các LSA mà nó cần. Định dạng của bản
tin này được thể hiện ở
. Mỗi yêu cầu LSA được chỉ định bởi link-state type, link-state ID và advertising router.
Ba trường này được lặp lại cho mỗi liên kết.
Trong phản hồi một yêu cầu trạng thái liên kết hoặc khi router thấy trạng thái liên kết
của nó thay đổi, router sẽ gửi thông tin trạng thái liên kết mới, sử dụng bản tin cập nhật trạng
thái liên kết (loại 4). Nội dung của bản tin trạng thái liên kết được soạn bởi các LSA như Hình
13.
OSPF sử dụng phát tin cậy để đảm bảo rằng các LSA được cập nhật chính xác. Giả sử
rằng trạng thái cục bổ của router đã thay đổi vì thế router muốn cập nhật LSA của nó. Sau đó
router phát một gói cập nhật trạng thái liên kết nhờ thủ tục phát tin cậy.
Khi nhận được gói tin như vậy, router lân cận xem xét các LSA trong cập nhật. Lân cận
đặt từng LSA trong bản cập nhật gói tin gần đây hơn LSA tương ứng đã có trong cơ sở dữ liệu
của nó và sau đó gửi gói tin xác nhận LSA trở lại router. Gói tin ACK đó bao gồm một danh
sách các header LSA. Lân cận cũng chuẩn bị gói tin cập nhật trạng thái liên kết mới có chứa
LSA và phát gói tin đến tất cả các giao diện khác với giao diện mà LSA đã đến. Tất cả các
router cuối cùng cũng nhận được bản cập nhật LSA. Khi cơ sở dữ liệu trạng thái liên kết được
cập nhật, router cần tính toán lại thuật toán đường đi ngắn nhất và chỉnh sửa bảng định tuyến
theo thông tin đã cập nhật. Router định kỳ truyền lại LSA mà đã gửi đến lân cận cho đến khi
nhận được xác nhận tương ứng từ lân cận.
Hình 13 Gói tin cập nhật trạng thái liên kết OSPF
Hình 14 Ví dụ về gói tin cập nhật trạng thái liên kết OSPF
HỆ THỐNG PHÂN CẤP VÀ KHẢ NĂNG MỞ RỘNG INTERNET
Internet là một tập hợp lớn các mạng mà được liên kết logic bởi không gian địa chỉ duy
nhất toàn cầu và nó cung cấp truyền thông sử dụng bộ giao thức TCP/IP. Giao thức định tuyến
chịu trách nhiệm cho việc xác định kết nối trong Internet và để tạo ra các bảng định tuyến mà
dẫn các gói tin đến đích. Về nguyên tắc, các giao thức định tuyến phải cung cấp kết nối mỗi cặp
router trong Internet. Yêu cầu này đặt ra thách thức về khả năng mở rộng lớn với sự phát triển
bùng nổ của Internet. Cấu trúc hệ thống tự trị - AS giới thiệu hệ thống phân cấp 2 cấp phân tách
vấn đề xác định kết nối Internet thành hai phần: định tuyến trong AS (định tuyến nội miền) và
định tuyến giữa các AS (định tuyến liên miền).
Tại cấp độ thấp hơn trong hệ thống phân cấp, định tuyến nội miền được xử lý bởi các
giao thức định tuyến nội miền – các giao thức xác định các đường đi tối ưu trong một AS. Tuy
nhiên, các AS có thể khác nhau rất nhiều về kích thước. Một AS có thể bao gồm một mạng
trường học như một trường đại học hoặc một mạng lưới vận chuyển lớn như một ISO quốc gia.
Vấn đề mở rộng lại phát sinh trong AS lớn vì giao thức định tuyến nội miền phải giải quyết tất
cả các router trong AS. Để giải quyết định tuyến trong một AS lớn, OSPF giới thiệu một cấp độ
phân cấp khác trong AS thông qua khái niệm khu vực. Sau đó giao thức định tuyến nội miền chỉ
phải giải quyết với các router ở trong một vùng.
Tại cấp độ cao hơn, sự ra đời của hệ thống phân cấp cũng dẫn đến vấn đề xác định kết
nối giữa các AS. Giao thức định tuyến liên miền (EGP) như là BGP giải quyết vấn đề đó. BGP
cho phép các router liên miền báo trước thông tin về cách tiếp cận các mạng khác nhau trên
Internet. Hơn nữa, chúng ta sẽ thấy rằng địa chỉ CIDR cho phép các bộ định tuyến BGP báo
trước các đường dẫn tổng hợp làm giảm lượng thông tin định tuyến toàn cầu cần trao đổi.