Luận văn Điều khiển lưu lượng trong giao thức TCP

TCP là giao thức trao đổi số liệu có kết nối (connection-oriented), nghĩa là cần thiết lập lên liên kết logic giữa một cặp thực thể TCP, trước khi chúng trao đổi dữ liệu với nhau.

TCP cung cấp khả năng truyền dữ liệu một cách an toàn đảm bảo tin cậy, và chính xác giữa 2 thực thể cuối trong mạng. Nó cung cấp các chức năng nhằm kiểm tra tính chính xác của dữ liệu khi đến và bao gồm cả việc gửi lại dữ liệu khi có lỗi xảy ra.

Việc thiết kế và thực hiện giao thức TCP là phức tạp bởi những nguyên nhân sau:

• TCP quản lý đúng số tuần tự tính theo byte của dòng số liệu.

• TCP tối ưu hóa khả năng sử dụng dải thông của mạng bằng cách giám sát và điều khiển lưu lượng số liệu từ thực thể gửi tới thực thể nhận.

• TCP đảm bảo việc trao đổi số liệu tin cậy và chính xác giữa các thực thể cuối trong mạng nhờ các yếu tố:

o Đối thoại khi thu phát: Mỗi khi gửi một gói tin bên nhận phải thông báo nhận đúng sau một khoảng thời gian nhất định. Nếu không gói tin được coi là nhận sai và được phát lại.

o Kiểm tra số liệu thu phát: Khi nhận số liệu gửi được kiểm tra bằng thuật toán quy định byte kiểm tra (checksum) được gửi cùng với số liệu phát và được so sánh với byte kiểm tra tính lại khi thu trong trường hợp sai lệch có nghĩa là có lỗi xảy ra trên đường truyền khi đó thực thể thu sẽ thông báo kết quả cho thực thể phát và yêu cầu gửi lại.

o Kiểm tra số tuần tự: Vì các gói TCP được truyền đi trong các gói IP và các gói IP có thể đến đích không theo đúng thứ tự phát (IP là giao thức không hướng kết nối) nên thực thể TCP phải lập lại trật tự các gói tin thu được và huỷ bỏ các gói tin trùng lặp khi cần, rồi chuyển các gói tin đó theo đúng trật tự phát cho các ứng dụng.

Điều khiển lưu lượng: Mỗi thực thể của kết nối TCP đều có một vùng đệm hạn chế nào đó. Thực thể TCP chỉ cho phép thực thể TCP phát gửi một lượng số liệu đủ với vùng đệm thu của mình. Điều này cho phép ngăn cản thực thể TCP phát nhanh làm tràn vùng đệm của thực thể TCP thu chậm

 

doc64 trang | Chia sẻ: lethao | Lượt xem: 6977 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Luận văn Điều khiển lưu lượng trong giao thức TCP, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
rong suốt đối với các chức năng ứng dụng và việc thay đổi các thiết bị vật lý cũng không làm ảnh hưởng đến các chức năng quan trọng của của tầng này. 1.4. Cơ chế điều khiển lưu lượng bằng cửa sổ trượt Đây là một trong các cơ chế điều khiển lưu lượng được sử dụng rộng rãi nhất, có thể áp dụng tại một hay nhiều tầng của mạng, thường là tầng liên kết dữ liệu, tầng mạng hay tầng giao vận. Cơ chế điều khiển lưu lượng bằng cửa sổ trượt cho phép bên gửi phát đi liên tiếp một số gói số liệu nhất định rồi mới phải dừng lại chờ thông báo về kết quả nhận, gọi là biên nhận, trước khi tiếp tục phát. Bên nhận điều khiển lưu lượng bằng cách kìm lại hay gửi ngay biên nhận, đó là một gói số liệu điều khiển, hoặc một gói số liệu có chứa thông tin điều khiển, mà bên nhận dùng để báo cho bên gửi biết về việc đã nhận một hay một số gói số liệu như thế nào. Tại mọi thời điểm, bên gửi phải ghi nhớ một danh sách chứa số thứ tự liên tiếp các gói số liệu mà nó được phép gửi đi, các gói số liệu này được gọi là nằm trong cửa sổ gửi. Tương tự như vậy, bên nhận cũng duy trì một danh sách gọi là cửa sổ nhận, tương ứng với các gói số liệu mà nó được phép nhận. Hai cửa sổ gửi và nhận không nhất thiết phải có độ lớn bằng nhau. Người ta đã đề xuất và sử dụng một số phương thức quản lý cửa sổ khác nhau, thí dụ: biên nhận riêng rẽ cho mỗi gói số liệu nhận được, biên nhận ở cuối cửa sổ, biên nhận ở đầu cửa sổ v.v. Dưới đây sẽ trình bày hai cách đã được sử dụng phổ biến trong số các cách đã được nêu. Để việc phân tích sự điều khiển lưu lượng theo cơ chế cửa sổ được thuận lợi, người ta có thể sử dụng một số ký hiệu cho các tham số như nêu trong bảng sau: Tt Thời gian truyền (transmit) một gói số liệu Tp Thời gian truyền một biên nhận, là tín hiệu cho phép tiếp tục truyền. Τ Thời gian trễ lan truyền. W Kích thước cửa sổ, đơn vị là gói số liệu D Thời gian từ khi bắt đầu truyền gói số liệu đầu tiên trong cửa sổ, cho đến khi nhận được tín hiệu cho phép truyền tiếp Biên nhận từng gói số liệu Theo cách quản lý này, mỗi khi nhận được một gói số liệu, bên nhận sẽ gửi một biên nhận cho bên gửi. Cửa sổ gửi tương ứng với các gói số liệu đã gửi đi nhưng chưa biên nhận (hình 8 (a) ). Khi có một gói số liệu mới từ tầng trên chuyển xuống để gửi đi, nó sẽ được gán số thứ tự lớn nhất tiếp theo, do đó mép trên của cửa sổ gửi sẽ tăng thêm 1. Nếu cửa sổ tăng tới cực đại thì tiến trình truyền ở tầng trên bị chặn lại, không thể truyền các gói số liệu xuống nữa, cho đến khi có chỗ trống trong vùng nhớ đệm. Mỗi gói số liệu sau khi đến đích sẽ được biên nhận một cách riêng rẽ. Khi biên nhận về đến bên gửi, mép dưới của cửa sổ gửi sẽ được tăng thêm 1, làm cho danh sách các gói số liệu đã truyền nhưng còn chờ biên nhận giảm đi một phần tử, đồng thời vùng nhớ tương ứng với phần tử đó cũng được giải phóng để cấp phát cho một gói số liệu mới (hình 8 (b),(c) ). Bằng cách này, cửa sổ gửi luôn ghi nhớ được danh sách các gói số liệu còn chưa được biên nhận. Vì các gói số liệu trong cửa sổ gửi có thể bị hỏng hoặc mất trên đường truyền, nên bên gửi phải giữ lại bản sao của chúng trong bộ nhớ đệm để phát lại nếu sau một khoảng thời gian nhất định vẫn không được biên nhận. Hình 8. Điều khiển lưu lượng bằng cửa sổ trượt, biên nhận từng gói số liệu (a): Trạng thái ban đầu (b): Gói số 0 được biên nhận (c): Gói số 1 được biên nhận Các gói số liệu nằm ngoài cửa sổ nhận nếu đến sẽ bị loại bỏ. Khi nhận được một gói số liệu có số thứ tự bằng mép dưới của cửa sổ, nó sẽ được truyền cho tầng trên, bên nhận sinh ra một biên nhận gửi tới người gửi và tăng cửa sổ lên một ô. Nếu kích thước cửa sổ nhận bằng một, có nghĩa là nó chỉ chấp nhận các gói số liệu đến theo đúng thứ tự. Nếu khác 1 thì không phải như vậy, trong trường hợp này, bên nhận sẽ giữ gói số liệu đến không đúng thứ tự trong bộ đệm, chờ nhận đủ các gói số liệu trong cửa sổ rồi mới chuyển các gói số liệu lên tầng trên theo thứ tự mà bên gửi đã gửi đi. Khoảng thời gian chờ này luôn được giới hạn. Biên nhận ở cuối cửa sổ Đây là cách đơn giản nhất, bên nhận sẽ phát ra một biên nhận sau khi nhận được tất cả các gói số liệu trong cửa sổ nhận. Hình 9 minh hoạ cho phương pháp này, trong đó nút A truyền thông với nút B, sử dụng một giao thức tựa như giao thức HDLC, kích thước cửa sổ gửi và cửa sổ nhận ban đầu bằng 3. Các gói số liệu đi trên mạng được biểu diễn bằng các mũi tên, kiểu của gói số liệu được ghi bên cạnh mũi tên, ý nghĩa như sau : Hình 9. Điều khiển lưu lượng bằng cửa sổ trượt, biên nhận ở cuối cửa sổ. Kích thước cửa sổ nhận và gửi ban đầu bằng 3 I n,m: là gói số liệu, với trường số thứ tự gói số liệu n(s)=n, trường biên nhận n(r)=m. Bên B cho gói số liệu của nó “cõng” (“piggyback”) biên nhận tới bên A, việc này giúp nâng cao hiệu quả sử dụng đường truyền. Tất nhiên, bên A cũng có thể biên nhận các gói số liệu mà B gửi cho nó bằng cách trên. Rnr 4: là gói số liệu điều khiển, B báo cho A rằng, lúc này nó không thể nhận tiếp các gói số liệu của A, đồng thời biên nhận cho các gói số liệu có số thứ tự nhỏ hơn hoặc bằng 3. Khi nhận được tín hiệu này, A sẽ phải ngừng gửi, chờ cho đến khi nhận được tín hiệu cho phép gửi tiếp của B. Rr 4: là gói số liệu điều khiển, B báo cho a rằng, lúc này nó sẵn sàng tiếp nhận tiếp các gói số liệu của A, bắt đầu từ gói số 4. Giả sử rằng bên gửi luôn có sẵn dữ liệu để gửi, còn bên nhận cũng gửi biên nhận ngay sau khi nhận được gói số liệu cuối cùng trong cửa sổ nhận. Chúng ta có thể tính được thông lượng trung bình lớn nhất có thể đạt được, dựa trên hình 10. Hình 10. Điều khiển lưu lượng bằng cửa sổ trượt, biên nhận ở cuối cửa sổ; kích thước cửa sổ W=3 So với cách biên nhận từng gói số liệu, rõ ràng là số lượng biên nhận giảm đi, từ một biên nhận/một gói số liệu, xuống còn một biên nhận/một cửa sổ. Thí dụ, nếu kích thước cửa sổ w=8, thì số biên nhận giảm đi 8 lần. Tuy nhiên, chúng ta sẽ phải trả giá bằng việc thông lượng truyền bị giảm đi. Chương 2. ĐIỀU KHIỂN LƯU LƯỢNG TRONG GIAO THỨC TCP 2.1. Tìm hiểu về giao thức TCP TCP là giao thức trao đổi số liệu có kết nối (connection-oriented), nghĩa là cần thiết lập lên liên kết logic giữa một cặp thực thể TCP, trước khi chúng trao đổi dữ liệu với nhau. TCP cung cấp khả năng truyền dữ liệu một cách an toàn đảm bảo tin cậy, và chính xác giữa 2 thực thể cuối trong mạng. Nó cung cấp các chức năng nhằm kiểm tra tính chính xác của dữ liệu khi đến và bao gồm cả việc gửi lại dữ liệu khi có lỗi xảy ra. Việc thiết kế và thực hiện giao thức TCP là phức tạp bởi những nguyên nhân sau: TCP quản lý đúng số tuần tự tính theo byte của dòng số liệu. TCP tối ưu hóa khả năng sử dụng dải thông của mạng bằng cách giám sát và điều khiển lưu lượng số liệu từ thực thể gửi tới thực thể nhận. TCP đảm bảo việc trao đổi số liệu tin cậy và chính xác giữa các thực thể cuối trong mạng nhờ các yếu tố: Đối thoại khi thu phát: Mỗi khi gửi một gói tin bên nhận phải thông báo nhận đúng sau một khoảng thời gian nhất định. Nếu không gói tin được coi là nhận sai và được phát lại. Kiểm tra số liệu thu phát: Khi nhận số liệu gửi được kiểm tra bằng thuật toán quy định byte kiểm tra (checksum) được gửi cùng với số liệu phát và được so sánh với byte kiểm tra tính lại khi thu trong trường hợp sai lệch có nghĩa là có lỗi xảy ra trên đường truyền khi đó thực thể thu sẽ thông báo kết quả cho thực thể phát và yêu cầu gửi lại. Kiểm tra số tuần tự: Vì các gói TCP được truyền đi trong các gói IP và các gói IP có thể đến đích không theo đúng thứ tự phát (IP là giao thức không hướng kết nối) nên thực thể TCP phải lập lại trật tự các gói tin thu được và huỷ bỏ các gói tin trùng lặp khi cần, rồi chuyển các gói tin đó theo đúng trật tự phát cho các ứng dụng. Điều khiển lưu lượng: Mỗi thực thể của kết nối TCP đều có một vùng đệm hạn chế nào đó. Thực thể TCP chỉ cho phép thực thể TCP phát gửi một lượng số liệu đủ với vùng đệm thu của mình. Điều này cho phép ngăn cản thực thể TCP phát nhanh làm tràn vùng đệm của thực thể TCP thu chậm. 2.1.1. Cách thức truyền dữ liệu qua giao thức TCP Hình 11. Mô hình hoạt động của giao thức TCP Như hình 11, các thực thể ứng dụng sử dụng dịch vụ truyền tin cậy TCP để trao đổi số liệu trong quá trình xử lý. Chú ý: thực thể ứng dụng và thực thể TCP có bộ đệm riêng của mình để lưu trữ tạm thời số liệu trong quá trình xử lý. Cách thức chuyển tiếp số liệu giữa hai bộ đệm trên là yếu tố quyết định hiệu suất chuyển tiếp số liệu của hệ thống TCP. Số liệu có thể được chuyển toàn bộ hoặc một phần từ bộ đệm ứng dụng tới bộ đệm TCP, trước khi quá trình phát được khởi động. Số liệu thu từ kết nối TCP có thể được chuyển tiếp tức thới từ bộ đệm thu TCP tới bộ đệm ứng dụng hoặc chỉ khi tỷ lệ phần bộ đệm bị chiếm dụng so với tổng dung lượng bộ đệm đạt tới một giá trị nào đó. 2.2.2. Cấu trúc gói tin TCP Cấu trúc gói tin số liệu TCP: Giao thức TCP có sự quy định về khuôn dạng của gói tin sẽ được truyền phát. Cấu trúc gói tin TCP gồm có phần tiêu đề TCP “giả” (pseudo header TCP), nó cần thiết cho việc xây dựng gói tin IP, bao gồm các thông tin về địa chỉ IP nguồn, địa chỉ IP đích, số liệu thuộc giao thức TCP và độ dài của gói tin TCP thực. Tiếp nữa là phần gói tin TCP thực: Hình 12. Cấu trúc gói tin TCP với phần tiêu đề giả Hình vẽ 13 sau đây là chi tiết cấu trúc mỗi gói tin TCP: Hình 13. Cấu trúc gói tin TCP Giải thích cấu trúc gói tin: Source Port và Destination Port: số hiệu cổng TCP cùng với địa chỉ IP nguồn và địa chỉ IP đích trong gói tin IP, số hiệu cổng TCP định danh duy nhất hai tiến trình ở hai đầu kết nối. Sequence Number: số tuần tự phát, định danh byte đầu tiên của phần số liệu thuộc gói tin trong dòng số liệu từ thực thể TCP gửi đến thực thể TCP nhận. Số tuần tự phát là khoảng cách tương đối của byte đầu tiên của phần số liệu với phần đầu của dòng byte. Nó là số không dấu 32 bit, có giá trị từ 0 đến 232-1. Nếu ta coi dòng byte là luồng số liệu một chiều từ ứng dụng này tới ứng dụng kia thì TCP đánh số tất cả các byte với giá trị gọi là số tuần tự sequence number. Khi một kết nối đựơc thiết lập, trường số tuần tự chứa giá trị khởi tạo ISN (Initial Sequence Number) được thực thể TCP chọn cho kết nối này. Byte số liệu đầu tiên có số tuần tự bằng ISN+1. ACKnowledgement: vị trí tương đối của byte cuối cùng đã nhận đúng bởi thực thể gửi gói tin ACK cộng thêm 1. Giá trị trường này còn gọi là số tuần tự thu. Giá trị của trường này đúng khi bít cờ ACK=1. Data offset: khoảng cách tương đối của trường số liệu với phần tiêu đề của TCP (TCP header) tính theo từ 32 bít. Tham số này chỉ ra vị trí bắt đầu của vùng số liệu. Reserved: dành để dùng trong tương lai, được thiết lập là 0. Flags: cờ có 6 bit dùng trong phần tiêu đề TCP. Một hay nhiều cờ có thể được thiết lập tại cùng một thời điểm bao gồm các cờ sau: URG=1: thông báo giá trị trường urgent pointer đúng. ACK=1: thông báo giá trị trường ACKnowledgment đúng. PSH=1: thực thể nhận phải chuyển số liệu này cho ứng dụng tức thời. RST=1: tái khởi tạo kết nối, dùng để kết thúc kết nối. SYN=1: đồng bộ trường số thứ tự, dùng để thiết lập kết nối TCP FIN=1: thông báo thực thể gửi đã kết thúc việc gửi số liệu Window size: Độ lớn cửa sổ, quy định tổng số byte số liệu mà thực thể thu có thể nhận được (đồng nghĩa với độ lớn bộ đệm thu), tính khởi đầu từ giá trị trường số tuần tự thu (ACKnowledgmet number) Checksum: từ (word) kiểm tra là giá trị bù 1 của tổng các khối 16 bit trong phần đầu và phần số liệu TCP. Urgent pointer: vị trí tương đối của byte trong trường số liệu TCP cần được xử lý đầu tiên. Giá trị của trường này đúng khi bit cờ URG=1 Options: tuỳ chọn, khai báo các lựa chọn của TCP, như quy định về độ dài lớn nhất MSS (Maximum Segment Size) của một gói tin TCP. Pad: vá thêm vào phần tiêu đề để độ dài của nó là bội của 4, đảm bảo phần header luôn kết thúc ở một mốc 32 bits. Phần thêm này toàn số 0. Data: số liệu của ứng dụng TCP 2.2.3. Thiết lập và kết thúc kết nối TCP 2.2.3.1 Thiết lập kết nối Việc thiết lập kết nối dựa trên phương thức bắt tay 3 bước như sau: Tiến trình trạm làm việc yêu cầu thiết lập một kết nối TCP bằng cách gửi một gói tin TCP với cờ SYN=1, gọi tắt là điều khiển SYN và giá trị khởi tạo số tuần tự ISN của mình. Giá trị ISN là một số 4 byte không dấu và được tăng mỗi khi có một kết nối được yêu cầu (giá trị này quay về 0 khi đạt tới 232). Trong gói điều khiển SYN này còn chứa số hiệu cổng TCP của phần mềm dịch vụ mà tiến trình trạm làm việc muốn kết nối. Mỗi thực thể kết nối TCP đều có một giá trị ISN mới. Số này được tăng theo thời gian. Vì một kết nối TCP có cùng một số hiệu cổng và cùng một địa chỉ TCP được dùng lại nhiều lần, do đó việc thay đổi ISN ngăn không cho các kết nối dùng lại các số liệu cũ, vẫn còn đựoc truyền từ một kết nối cũ và có cùng 1 địa chỉ kết nối. (bước 1) Sau khi nhận được gói điều khiển SYN ở trạng thái sẵn sàng chấp nhận kết nối, thực thể TCP của phần mềm dịch vụ gửi lại gói SYN với giá trị ISN của mình và đặt bít cờ ACK=1, để thông báo rằng thực thể dịch vụ đã nhận được giá trị ISN của tiến trình trạm.(bước 2) Tiến trình trạm phúc đáp lại gói SYN của thực thể dịch vụ bằng 1 thông báo trả lời ACK cuối cùng, khẳng định đã nhận được giá trị ISN của thực thể phần mềm dịch vụ. (bước 3) Bằng cách này, các thực thể TCP trao đổi một cách tin cậy các giá trị ISN của nhau và sẵn sàng trao đổi số liệu. Chú ý rằng: không có gói điều khiển SYN nào trong 3 bước trên chứa số liệu của thực thể ứng dụng; tất cả các số liệu điều khiển được trao đổi đều nằm trong phần tiêu đề của gói điều khiển TCP(bước 3). 2.2.3.2 Kết thúc kết nối Khi có nhu cầu kết thúc kết nối, thực thể TCP (thực thể A) gửi yêu cầu kết thúc kết nối với cờ FIN=1. Vì kết nối TCP là song công nên mặc dù nhận được yêu cầu kết thúc kết nối của A (A thông báo hết số liệu để gửi), thực thể B vẫn có thể tiếp tục truyền số liệu cho đến khi B không còn số liệu để gửi và thông báo cho A bằng yêu cầu kết thúc kết nối với cờ FIN=1 của mình. Khi thực thể TCP nhận được thông điệp FIN, sau khi đã gửi thông điệp FIN của chính mình, kết nối TCP thực sự được kết thúc. TCP hiện nay dung nạp nhiều loại mạng vật lý cơ sở khác nhau bằng việc cung cấp nhiều độ trễ khác nhau, nhiều loại băng thông cũng như tỷ lệ gói tin bị mất. Nó xử lý mỗi kết nối độc lập, cho phép nhiều kết nối từ một máy đến máy khác di chuyển theo con đường có đặc tính cơ sở khác nhau. Quan trọng hơn, TCP có thể hiệu chỉnh đối với những thay đổi của thời gian khứ hồi RTT (Round Trip Time) của một kết nối nên làm cho nó đáng tin cậy ngay cả khi hệ thống chuyển mạch gói cơ sở bị nghẽn mạch hoặc tạm thời bị hỏng. Việc truyền lại với khả năng hiệu chỉnh chính là trọng tâm của TCP và đóng góp vào sự thành công của nó. Việc truyền lại với khả năng hiệu chỉnh sử dụng cách hoạt động vừa qua để dự đoán cách hoạt động trong tương lai. Nó đòi hỏi TCP tính toán thời gian khứ hồi cho mỗi lần truyền và sử dụng các kỹ thuật thống kê để kết hợp các số liệu riêng lẻ thành một ước lượng đủ đúng của thời gian khứ hồi, hơn nữa TCP liên tục cập nhật ước lượng về thời gian khứ hồi của nó. Đặc thù phát triển của các mạng diện rộng ngày nay là phát triển trên nền tích hợp của nhiều công nghệ và phương tiện khác nhau. Một hệ thống như vậy mang đặc trưng của một hệ thống không đối xứng, sự chênh lệch giữa các kênh truyền ảnh hưởng không nhỏ đến tốc độ chung của hệ thống. Mạng diện rộng là hệ thống liên mạng với giao thức trao đổi dữ liệu cơ bản là TCP, trong đó băng thông cho mỗi kênh trao dổi dữ liệu chênh lệch nhau đáng kể. Việc nghiên cứu hiệu suất mạng gắn liền với việc điều khiển các gói xác nhận ACK đóng vai trò quan trọng trong sự phát triển các giao thức mới. Trong các hệ thống mạng, điều khiển lưu lượng và điều khiển tắc nghẽn là hai quá trình có quan hệ mật thiết với nhau. Tắc nghẽn là nguyên nhân, là lý do điều khiển lưu lượng. Sự tắc nghẽn xảy ra khi dữ liệu nhận được vượt quá khả năng xử lý của một nút mạng. Trong các hệ thống mạng diện rộng sự tắc nghẽn làm giảm hiệu suất, tăng thời gian truyền và xử lý, điều này đôi khi dẫn đến nghẽn mạch toàn bộ hệ thống. Điều đó có thể do một số nguyên nhân sau: Thiết bị mạng không đáp ứng được nhu cầu xử lý số liệu (ví dụ: bộ đệm quá nhỏ…) Tần suất dữ liệu đầu vào quá lớn so với tần suất dữ liệu đầu ra Thời gian chờ xử lý, xếp hàng…quá lớn Tần suất lỗi mạng cao Vấn đề là khi một trong các điều kiện trên xảy ra nó có thể kéo theo các điều kiện còn lại. Để giải quyết vấn đề này trong các hệ thống mạng người ta phải đưa vào các thủ tục điều khiển tắc nghẽn. 2.2. Sự kiện tắc nghẽn đầu tiên trên Internet và đề xuất của Jacobson về nguyên lý “bảo toàn gói tin” 2.2.1. Sự kiện tắc nghẽn đầu tiên trên Internet Các mạng máy tính đã trải qua một sự bùng nổ lớn trong những năm qua và trong sự phát triển đã có một số sự kiện tắc nghẽn xảy ra. Ví dụ, người ta thống kê được một việc phổ biến là các cổng (gateway) Internet làm mất tới 10% các gói tin đến vì bị tràn bộ đệm cục bộ (local buffer).Tháng mười năm 1986, trên mạng Internet xảy ra hiện tượng tắc nghẽn đầu tiên. Trong suốt thời kỳ này, thông lượng thực tế của dữ liệu từ mạng của phòng thí nghiệm LBL đến trường đại học UC ở berkeley (đó là hai nơi riêng biệt, cách nhau khoảng 360 m, giữa chúng có 2 router) bị giảm từ 32kbps xuống 40bps. Người ta đã tập trung tìm hiểu nguyên nhân dẫn đến hiện tượng này và đã tìm ra, đồng thời đề xuất các biện pháp khắc phục, đó là tuân theo nguyên lý bảo toàn số lượng gói tin trong mạng. 2.2.2. Nguyên lý bảo toàn gói tin Hình 14. Nguyên lý bảo toàn các gói tin trong điều khiển lưu lượng TCP Nguyên lý bảo toàn gói tin trong điều khiển lưu lượng TCP: ”giữ cho số gói số liệu có mặt trong mạng của một kết nối không thay đổi” Nếu nguyên lý này được tuân theo, thì sự sụp mạng do tắc nghẽn sẽ rất khó xảy ra. Sự điều khiển tắc nghẽn liên quan đến việc tìm ra những nơi vi phạm nguyên lý bảo toàn và sửa chữa chúng Thủ tục điều khiển tắc nghẽn trong giao thức TCP Một số khái niệm, thuật ngữ cơ bản mà chúng ta sử dụng như sau: Gói dữ liệu: đơn vị cơ bản trong kỹ thuật truyền số liệu bằng giao thức TCP. Gói xác nhận ACK: thông tin dùng để xác nhận một gói dữ liệu đã được truyền đến đích. W(t): số gói dữ liệu tối đa cho phép phát tại thời điểm t, hay nó là độ lớn cửa sổ phát thời điểm t. SMSS (Sender Maximum Segment Size): độ lớn tối đa của gói dữ liệu có thể gửi. Giá trị này có thể dựa trên kích thước đơn vị dữ liệu truyền tối đa của mạng. SMSS không bao gồm kích thước tiêu đề TCP và các trường lựa chọn. Rwnd (Received window): giá trị w(t) tại bên nhận. Cwnd (Congestion Window): giá trị w(t) trong trường hợp có tắc nghẽn. Time-out: thời gian chờ tối đa trước khi được coi là có lỗi. RTT (Round Trip Time): thời gian khứ hồi, là thời gian đủ để gói dữ liệu được phát đi đến đích và biên nhận được truyền trở về từ thực thể đối tác. SS (Slow Start): giai đoạn khởi động chậm trong cơ chế điều khiển lưu lượng. CA (Congestion avoidance): giai đoạn tránh tắc nghẽn trong cơ chế điều khiển lưu lượng. Ssthresh (Slow Start threshold): ngưỡng chuyển đổi từ giai đoạn khởi động chậm sang giai đoạn tránh tắc nghẽn. Đối với mỗi phiên làm việc, sự chênh lệch giữa kênh phát và kênh sử dụng cho các gói xác nhận ACK ảnh hưởng rất lớn đến hiệu suất sử dụng trên các kênh phát dữ liệu. Đơn vị cơ bản trong truyền số liệu của TCP là gói dữ liệu, với một hay nhiều gói dữ liệu sẽ tương ứng một hay nhiều gói xác nhận ACK. Như vậy băng thông sử dụng của mạng phải dựa trên các yếu tố: tốc độ, độ lớn gói dữ liệu, độ lớn gói xác nhận ACK và thời gian khứ hồi RTT. Băng thông cơ sở chưa đủ để đảm bảo mạng đó đạt tốc độ cao. Giao thức TCP điều khiển tần suất truyền bằng cách giới hạn số gói xác nhận ACK được truyền. Trong mỗi phiên làm việc, độ lớn cửa sổ phát w là số gói dữ liệu chưa có gói xác nhận ACK trả lời tương ứng. Một cách lý tưởng, khi không có sự mất mát dữ liệu do tắc nghẽn trên đường truyền thì độ lớn cửa sổ phát càng lớn càng tốt. Khi một kết nối được thiết lập, độ lớn cửa sổ truyền ban đầu là thấp, sau đó tăng dần lên nhằm tránh tắc nghẽn. Quá trình tăng liên tục cho đến khi w đạt giá trị tối đa, tức là khi gặp lỗi hay khi nhận được gói xác nhận ACK yêu cầu phát lại, hay quá thời gian chờ tối đa cho phép. Khi đó, độ lớn cửa sổ phát sẽ được giảm và quá trình truyền lại bắt đầu một chu kỳ mới. Chúng ta có thể thấy được về tính động trong cơ chế điều khiển tắc nghẽn của TCP thể hiện ở chỗ nó tự điều chỉnh tần suất khi phát dữ liệu tuỳ theo trạng thái kênh truyền, trong đó đặc biệt là băng thông và tần suất xuất hiện lỗi. Qua đó tự thiết lập các thông số phục vụ cho việc trao đổi số liệu. Điều này có thể thấy rõ trong các thuật toán điều khiển trong TCP: khởi động chậm, phục hồi nhanh và tránh tắc nghẽn. Chúng ta sẽ nghiên cứu các thuật toán điều khiển lưu lượng cơ bản, hợp thành cơ chế điều khiển lưu lượng trong giao thứcTCP đó là: khởi động chậm (slow tart), tránh tắc nghẽn (congestion avoidance), phát lại nhanh và phục hồi nhanh (fast retransmit and fast recovery). 2.3. Các cơ chế điều khiển lưu lượng trong giao thức TCP 2.3.1. Một số cơ chế điều khiển lưu lượng trong giao thức TCP Để thực hiện được điều khiển lưu lượng. TCP có một số cơ chế sau: Cơ chế cửa sổ động (cửa sổ trượt có kích thước thay đổi) Cơ chế cửa sổ động là một trong các phương pháp điều khiển số liệu trong mạng thông tin máy tính. Độ lớn cửa sổ chính bằng số gói tin được gửi liên tục mà không cần chờ thông báo trả lời về kết quả nhận các gói tin đó. Ví dụ, nếu độ lớn của cửa sổ w=3 thì sau khi gửi đi ba gói tin liên tiếp nhau, thực thể phát phải chờ trả lời về kết quả nhận 3 gói tin nói trên, trước khi gửi ba gói tin tiếp theo. Độ lớn cửa sổ quyết định hiệu suất trao đổi trong mạng. Nếu chọn độ lớn cửa sổ cao thì có thể gửi được nhiều số liệu trong cùng một đơn vị thời gian. Một khi việc truyền số liệu có lỗi, trong trường hợp này, rõ ràng số liệu phải gửi lại lớn và vì vậy hiệu quả sử dụng đường truyền thấp (tỷ lệ giữa số liệu được chuyển thực sự trên tổng số số liệu được trao đổi trên mạng). Giao thức TCP cho phép thay đổi độ lớn cửa sổ một cách động, phụ thuộc vào độ lớn bộ đệm thu của thực thể TCP nhận. Để thực hiện cơ chế cửa sổ động, TCP đảm bảo: Trả lời về số tuần tự thu tiếp theo trong trường ACK, nghĩa là khẳng định tổng số byte nhận đúng cho đến thời điểm gửi gói trả lời này. Thông báo về tổng số byte có thể nhận được, tương ứng với độ lớn bộ nhớ đệm thu. Cơ chế phát lại thích nghi Để đảm bảo kiểm tra phát lại và khắc phục lỗi trong việc trao đổi số liệu qua mạng diện rộng được kết nối từ nhiều mạng khác nhau, TCP phải có cơ chế đồng hộ kiểm tra phát (time-out) và cơ chế phát lại (retransmmision) mềm dẻo, thay đổi phụ thuộc vào thời gian trễ thực của môi trường truyền dẫn cụ thể. Thời gian khứ hồi (Round Trip Time), được xác định từ thời điểm bắt đầu phát gói tin cho đến khi nhận được trả lời về kết quả nhận của thực thể đối tác, là yếu tố quyết định giá trị của đồng hồ kiểm tra phát tout. Rõ ràng tout phải lớn hơn hoặc bằng RTT. Như hình 15. Hình 15. Xác định thời gian khứ hồi RTT Cơ chế phát lại thích nghi dựa trên việc xác định thời gian khứ hồi RTT theo thời gian. Bằng việc sử dụng các hàm xác định thời gian của hệ điều hành, hoàn toàn xác định được thời gian khứ hồi của một kết nối TCP tại các mốc thời gian nhất định. Có thể tính thời gian khứ hồi theo công thức sâu đây: RTT a¬RTT+(1-a)*new_RTT (với 0≤a<1, là hằng số khuyếch đại lọc, giá trị gợi ý là 0.9). Từ đó có thể tính thời gian kiểm tra phát tout theo công thức: Tout=β*RTT (với β được xem là khoảng biến đổi của RTT, có giá trị gợi ý là 2). Các cơ chế điều khiển tắc nghẽn số liệu: Hiện tượng tắc nghẽn số liệu được thể hiện trước hết ở việc gia tăng thời gian khứ hồi RTT của một gói tin bất kỳ nào khi chuyển qua mạng. Để hạn chế khả năng dẫn đến tắc nghẽn số liệu trong mạng, người ta điều khiển lưu lượng số liệu trao đổi trên mạng theo một số chiến lược sau đây: Khởi động chậm (Slow Start). Tránh tắc nghẽn (congestion avoidance). Phát lại nhanh (fast retransmission). Khôi phục nhanh (fast recovery). Để thuận tiện cho việc minh hoạ cơ chế hoạt động của các biện pháp này, ta chọn đơn vị cửa sổ w bằng số gói tin TCP (trong thực tế, độ lớn cửa sổ w được tính bằng đơn vị byte). Việc kiểm soát tránh tắc nghẽn trên mạng là vấn đề quan trọng, các thuật toán được phát triển bắt nguồn từ ý tưởng của việc tạo được sự vững chắc, ổn định mạng bằng cách thực hiện kết nối chuyển vận để tuân thủ theo một nguyên lý “bảo toàn gói tin”. Việc chúng ta “bảo toàn gói tin”, có nghĩa rằng thực hiện kết nối “trong cân bằng” (In Equilibrium), tức là, chạy ổn định với một cửa sổ đầy đủ của dữ liệu được chuyển vận qua. Khi đó, một cách vật lý, dòng chảy của các gói tin có thể được đưa vào mạng cho đến khi gói tin cũ đã rời đi. Có thể hình dung thấy tính ổn định của dòng chảy này như một luồng giao thông với sự ổn định lưu lượng của nó. Jacobson đã đưa ra nguyên lý bảo toàn như ở trên để khẳng định tính ổn định của mạng. Nếu nguyên lý này được tuân theo thì sự suy sụp mạng do tắc nghẽn sẽ rất khó xảy ra. Như vậy, sự điều khiển tắc nghẽn liên quan đến việc tìm ra những nơi vi phạm nguyên lý bảo t

Các file đính kèm theo tài liệu này:

  • docĐiều khiển lưu lượng trong giao thức TCP.doc
Tài liệu liên quan