Lớp giao vận – transport layer Lớp giao vận – transport layer Lớp giao vận – transport layer Lớp giao vận – transport layer Lớp giao vận – transport layer Lớp giao vận – transport layer Lớp giao vận – transport layer Lớp giao vận – transport layer Lớp giao vận – transport layer Lớp giao vận – transport layer Lớp giao vận – transport layer
Trang 1Bài giảng Mạng máy tính ET4230 – 20112 (Tuần 9)
TS Trần Quang Vinh Lớp giao vận – Transport Layer (tiếp)
1 Các khái ni ệm
Điều khiển luồng (Flow Control): Điều khiển lượng dữ liệu được gửi đi để đảm
bảo rằng bên gửi có tốc độ nhanh không thể tiếp tục truyền dữ liệu nhanh hơn mức mà bên nhận có thể tiếp thu được (không làm quá tải bên nhận)
Điều khiển luồng luôn luôn liên quan đến một sự phản hồi trực tiếp từ phía nhận đến phía gửi để thông báo khả năng nhận của bên nhận
Chống tắc nghẽn (Congestion Control):
Chống tắc nghẽn là cơ chế kiểm soát thông tin đi vào mạng nhằm đảm bảo tổng
lưu lượng thông tin đi vào mạng không vượt quá khả năng xử lý của toàn mạng Chống tắc nghẽn liên quan đến việc kiểm soát thông tin trên toàn mạng, trong khi điều khiển luồng là việc kiểm soát thông tin giữa hai đầu cuối cụ thể Hai kỹ thuật này có điểm tương đồng là phải giới hạn lưu lượng thông tin nhằm tránh khả năng quá tải của hệ thống đích, điều khiển luồng và tránh tắc nghẽn thường được sử dụng kết hợp với nhau để kiểm soát thông tin trên mạng, ví dụ trong giao thức TCP
Điều khiển luồng được thực hiện ở tầng nào?
Điều khiển luồng và tránh tắc nghẽn được sử dụng nhiều nhất tại các lớp liên kết
dữ liệu (data link), lớp mạng (network) và lớp giao vận (transport) trong đó
Điều khiển luồng từ đầu cuối đến đầu cuối (end-to-end): nhằm tránh cho bộ đệm
của quá trình nhận tại đích khỏi bị tràn, được thực hiện ở lớp Giao vận
Điều khiển luồng trên từng chặng (hop-by-hop): nhằm tránh cho từng đường
truyền khỏi bị tắc nghẽn Tuy nhiên, việc kiểm soát luồng trên từng chặng sẽ có ảnh hưởng đến các chặng khác, do đó nó cũng có tác dụng tránh tắc nghẽn cho các đường truyền có nhiều chặng Trong mô hình tham chiếu OSI, điều khiển luồng hop-by-hop được thực hiện ở lớp Liên kết dữ liệu và lớp Mạng
Mục đích chính của việc sử dụng điều khiển luồng và chống tắc nghẽn trong mạng
là nhằm:
+ Tối ưu hóa thông lượng sử dụng của mạng
+ Giảm trễ gói khi đi qua mạng
+ Đảm bảo tính công bằng cho việc trao đổi thông tin trên mạng
+ Đảm bảo tránh tắc nghẽn trong mạng
1
Trang 22 Kiểm soát luồng (Flow Control)
TCP sử dụng cơ chế “cửa sổ trượt” tương ứng với bộ đệm dữ liệu cung cấp từ các chương trình ứng dụng quy định số lượng dữ liệu tối đa một nguồn có thể gửi trước khi nhận được một báo nhận từ bên nhận
Đây là một trong các cơ chế kiểm soát luồ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, hoặc tầng Giao vận
Các bên gửi/nhận sử dụng cửa sổ để kiểm soát luồng dữ liệu Cửa sổ nhận
(Rwnd) chỉ ra số lượng dữ liệu tối đa bên thu có thể nhận, tham số này do bên nhận báo cho bên gửi trong trường Receive Window Size (thông thường từ 4kB – 8kB)
Cơ chế kiểm soát luồ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ố segment nhất định rồi mới phải dừng lại chờ thông báo về kết quả nhận, ACK, trước khi tiếp tục phát
Bên nhận kiểm soát luồng bằng cách kìm lại hay gửi ngay ACK 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 segment
mà nó được phép gửi đi, các segment này được gọi là nằm trong cửa sổ gửi
Tương tự như vậy, bên gửi cũng duy trì một danh sách gọi là cửa sổ gửi (Cwnd: Congestion window size), tương ứng với các segment mà nó được phép gửi
Hai cửa sổ gửi và nhận không nhất thiết phải có độ lớn bằng nhau
Dữ liệu đã gửi và
2
Trang 3Kích thước cửa sổ phải được điều chỉnh cho phù hợp với bộ đệm của bên thu và đảm bảo hiệu suất kênh truyền Trong thực tế, kích thước cửa sổ được đánh giá qua RTT
RTT > Window Size: hiệu suất kênh truyền thấp
RTT= Window Size: hiệu suất kênh đạt 100%
3 Kiểm soát lỗi (Error Control)
TCP cung cấp độ tin cậy bằng cách kiểm soát lỗi, phát hiện gói tin bị hỏng, bị mất, sai thứ tự, và trùng dữ liệu Kiểm soát lỗi trong giao thức TCP đạt được thông qua việc sử dụng các tổng kiểm tra (checksum), cơ chế xác nhận (ACK), và thời gian chờ (timeout)
- Acknowledgement (ACK): là một gói tin được gửi bởi một trạm để thông báo một
gói tin đã nhận được Gói ACK được tạo ra bằng cách thay đổi trường type trong phần TCP header Vì TCP thực hiện truyền tin song công, nên gói ACK cung có
thể mang dữ liệu (piggyback) (Rule 1) Gói ACK không được gán sequence
number và không có báo nhận cho bản thân gói ACK
- Timeout: cho biết một gói tin đã gửi đi mà chưa nhận được ACK trong một
khoảng thời gian chờ (timer) xác định trước Tham số Timeout khởi động qua trình
truyền lại ở bên gửi (Retransmission TimeOut -RTO) Sau khoảng thời gian
RTO>RTT mà không nhận được ACK truyền lại
- Retransmission: (Rule 2) việc truyền lại sảy ra khi timeout hoặc khi nhận được 3
ACK liên tiếp trùng nhau (Rule 3) Không thiết lập timer cho gói ACK
- Out-of-order: (Rule 4) Dữ liệu đến bên nhận có thể không đúng thứ tự, chúng được lưu trong bộ đệm bên thu và chỉ được chuyển lên tầng trên khi đã sắp xếp lại
Hoạt động ở chế độ song công
3
Trang 4Hình Cơ chế truyền lại sử dụng timeout: (a) trường hợp bình thường, (b,c) truyền lại khi mất frame hoặc mất ACK, (d) timeout < RTT gay ra phát trùng frame
- RTO là giá trị thay đổi, thích ứng với trạng thái kênh ví dụ như khi RTT thay đổi,
vì vậy cần xác định RTO một cách hợp lý để đạt hiệu quả tốt nhất Nếu RTO quá lớn gây ra trễ truyền lớn, nếu RTO quá nhỏ có thể sảy ra phát trùng các gói tin
- Để ước lượng RTO, sử dụng phương pháp “trung bình cửa sổ trượt theo trọng số
mũ” (Exponential Weighted Moving Average - EWMA) theo thuật toán Jacobson
như sau:
Frame
ACK
Frame
ACK
Frame
ACK
Frame
ACK
Frame
ACK
Frame
Frame
ACK
Phát (A)
Thu (B)
ACK
Round-trip time (RTT)
ACK
Retransmission TimeOut (RTO)
Estimated RTT
Guard Band
RTO tr ước đó
RTT đo hiện tại
4
Trang 5+ Tính giá trị ước lượng eRTT:
eRTTk= α eRTTk-1 + (1 - α) SampleRTT (1)
+ Thiết lập timeout dựa trên eRTT
Trong đó:
+ α là trọng số thuật toán EWMA (0 ≤ α ≤ 1, thông thường α =7/8),
+ k là số bước lặp
+ SampleRTT: giá trị RTT đo được (thực tế) cho mỗi cặp packet/ACK tại bước k
Lưu ý: Phải tính eRTT qua eRTT trước đó và RTT hiện tại đo được cộng với một khoảng bảo vệ (chính là giá trị điều chỉnh bởi tham số α)
T rường hợp mất gói (Lost segment)
Chú ý:
+ TCP ở bên nhận chỉ chuyển dữ liệu đã được sắp xếp đúng thứ tự cho tiến trình tương ứng
+ Sinh viên tự tìm hiểu trong trường hợp mất ACK
Ví dụ:
Một kết nối TCP có RTT hiện tại là 30 ms, nhận được các bản tin ACK đến sau 26,
32, và 24 ms Tính ước lượng giá trị RTT theo thuật toán Jacobson với α = 0.9
RTT=αRTT+(1-α)M
RTT1=0.9 x 30 + (1-0.9) x 26 = 29.6
RTT2=0.9 x 29.6 + (1-0.9) x 32 = 29.84
RTT3=0.9 x 29.84 + (1-0.9) x 24 = 29.256
5
Trang 64 Chống tắc nghẽn (Congestion Control)
4.1 Hi ện tượng tắc nghẽn
Tắc nghẽn là một hiện tượng rất quen thuộc trên mạng, mà nguyên nhân nói chung
là do tài nguyên mạng giới hạn trong khi nhu cầu truyền thông tin của con người là không có giới hạn Hay nói cụ thể hơn, tắc nghẽn xảy ra trong mạng khi lưu lượng gửi vào mạng vượt quá dung lượng truyền dẫn Hiện tượng tắc nghẽn có thể
xảy ra ở một hoặc một số nút mạng, hay trên toàn mạng
Chống tắc nghẽn là cơ chế kiểm soát thông tin đi vào mạng nhằm đảm bảo tổng lưu lượng thông tin đi vào mạng không vượt quá khả năng xử lý của toàn mạng
Hình Hi ện tượng tắc nghẽn
(a) Khi số lượng segment đến mạng còn tương đối nhỏ, nằm trong khả năng vận
tải của mạng, chúng sẽ được phân phát đi hết, số lượng segment được chuyển đi
tỉ lệ thuận với số lượng segment đến mạng
(b) Do luôn có một tỉ lệ segment phải phát lại do bị lỗi trong quá trình vận chuyển, lưu lượng mà mạng thực sự phải vận chuyển nhìn chung lớn hơn lưu lượng đi qua mạng (thông lượng <= dung lượng kênh truyền)
(c) Khi lưu lượng đến cao quá một mức nào đó, các nút mạng không còn đủ khả năng chứa và chuyển tiếp các segment, do đó các nút mạng bắt đầu phải loại bỏ các segment thông lượng giảm đi
(d) Nếu lưu lượng đến mạng tiếp tục tăng lên, tỉ lệ segment phát lại trên tổng số segment trong mạng có thể tăng đến 100%, nghĩa là không có segment nào được phân phát đi cả, thông lượng của mạng giảm xuống bằng không, mạng bị nghẹt
hoàn toàn (deadlock)
Chống tắc nghẽn được chia làm hai loại:
- Điều khiển truy nhập mạng (network access): kiểm soát và điều khiển lượng thông tin có thể đi vào trong mạng
- Điều khiển cấp phát bộ đệm (buffer allocation): là cơ chế thực hiện tại các nút mạng nhằm đảm bảo việc sử dụng bộ đệm là công bằng và tránh việc không truyền tin được do bộ đệm của tất cả các nút bị tràn (deadlock)
(a)
(b) (c)
(d)
6
Trang 74.2 Nguyên nhân gây tắc nghẽn mạng
4.2 1 Tràn bộ đệm
Khi số lượng segment đến trên hai hoặc ba giao diện vào của một nút mạng đều
cần đi ra trên cùng một đường truyền để đến đích, chúng sẽ phải xếp hàng đợi được truyền đi Nếu tình trạng trên kéo dài, hàng đợi sẽ dài dần ra và đầy,
không còn chỗ cho các segment mới đến, chúng bị loại bỏ và sẽ được phát lại, làm
tăng tỉ lệ segment phải phát lại trong mạng
Biện pháp khắc phục bằng cách tăng kích thước hàng đợi (bộ nhớ) tại các nút
mạng trong một chừng mực nào đó là có ích, tuy nhiên, người ta đã chứng minh được rằng, tăng kích thước hàng đợi quá một giới hạn nào đó sẽ không
mang lại lợi ích gì, thậm chí còn có thể làm cho vấn đề tắc nghẽn tồi tệ hơn Đó
là vì các segment sẽ bị timeout ngay trong quá trình xếp hàng, bản sao của chúng được bên gửi phát lại, làm tăng số lượng segment phát lại trong mạng
4.2.2 Tốc độ xử lý chậm (hay nghẽn cổ chai)
Tốc độ xử lý chậm của các nút mạng cũng là một nguyên nhân quan trọng gây nên tắc nghẽn, bởi vì chúng có thể sẽ làm hàng đợi bị tràn ngay cả khi lưu
lượng segment đến nút mạng nhỏ hơn năng lực vận tải của đường truyền đi ra Nhu cầu băng thông cao của các dịch vụ đa phương tiện và các loại hình dịch vụ mới: dữ liệu, âm thanh và hình ảnh gây ra tắc nghẽn tại các đường truyền dẫn băng thông nhỏ
Việc tăng dung lượng đường truyền nhưng không nâng cấp bộ xử lý tại nút mạng, hoặc chỉ nâng cấp từng phần của mạng đôi khi cũng cải thiện được tình hình đôi chút, nhưng thường chỉ làm cái “cổ chai”, nơi xảy ra tắc nghẽn, dời đi chỗ khác mà thôi Giải quyết vấn đề tắc nghẽn nói chung, cần đến các giải pháp đồng bộ so sánh với bài toán tắc đường trong giao thông
Nhận xét:
Nếu bộ đệm rỗng trễ nhỏ, mạng không bị tắc nghẽn Nhưng: hiệu suất sử dụng kênh thấp
H1
H 2
A 1 (t)
10Mb/s
D(t)
1.5Mb/s
A 2 (t)
100Mb/s
A 1 (t)
A 2 (t) X(t)
D(t)
7
Trang 8Nếu bộ đệm luôn đầy trễ lớn, có thể tắc nghẽn, nhưng hiệu suất sử dụng kênh cao
Tắc nghẽn có khuynh hướng tự làm cho nó trầm trọng thêm Nếu một nút mạng nào đó bị tràn bộ đệm, segment đến sẽ bị loại bỏ, trong khi đó nút mạng bên trên, phía người gửi, vẫn phải giữ bản sao của segment đã gửi trong hàng đợi, cho đến khi timeout phát lại Việc phải giữ bản sao segment trong hàng đợi để chờ báo nhận, cộng thêm việc có thể phải phát lại segment một số lần làm cho hàng đợi tại chính nút trên cũng có thể bị tràn Sự tắc nghẽn lan truyền ngược trở lại phía nguồn phát sinh ra segment
4.3 Các giải pháp chống tắc nghẽn
4.3.1 Chính sách chung
Các phương pháp chống tắc nghẽn được thực hiện dựa trên các chính sách sau:
− Điều khiển tiếp nhận (Admission control): Cho phép một kết nối mới chỉ khi mạng có thể đáp ứng một cách thích hợp Người dùng đưa ra một tập các mô tả về lưu lượng (tốc độ truyền dẫn cực đại, tốc độ truyền dẫn trung bình, trễ cực đại cho phép ) trong pha thiết lập kết nối Mạng cho phép người sử dụng truy nhập đến chỉ khi nào có đủ tài nguyên sẵn sàng trong mạng Ngược lại, yêu cầu kết nối bị từ chối Mạng giám sát, kiểm soát các luồng lưu lượng để xem liệu người dùng có tuân theo các mô tả về lưu lượng không
− Kiểm soát (Policing): Kiểm tra kết nối nào vi phạm các mô tả về lưu lượng để đưa ra xử lý trừng phạt bằng việc: 1) Xoá các gói vi phạm mô tả; 2) Gán cho chúng quyền ưu tiên thấp hơn
− Điều khiển luồng lưu lượng (Flow control): Yêu cầu các luồng giảm tốc độ
4.3.2 Phân Loại
Theo các đặc điểm chung nêu trên, các phương pháp điều khiển chống tắc nghẽn có thể được phân loại như trên hình sau
8
Trang 9a) C hống tắc nghẽn vòng mở (Open-loop congestion control)
Là sự kết hợp của điều khiển tiếp nhận, kiểm soát, và nguyên lý thùng rò (leaky bucket)
Phương pháp này không sử dụng thông tin phản hồi từ mạng hoặc từ phía nhận Vì vậy, hệ thống phải có khả năng tự quyết định khi nào thì nhận thêm các lưu
lượng mới vào, khi nào thì loại bỏ các segment và loại các segment nào
Thuật toán thùng rò (Leaky Bucket)
- Do Turner đề xuất năm 1986
- Vấn đề: Dòng dữ liệu từ các trạm xuất ra không đều,lúc nhiều lúc ít khiến cho dòng dữ liệu trên mạng tăng giảm không ổn định, những lúc có nhiều trạm đồng thời đổ nhiều dữ liệu vào sẽ gây tắc nghẽn Cần phải điều hòa luồng dữ liệu trên mạng để đạt tới một lưu lượng ổn định, muốn vậy phải điều hòa luồng dữ liệu từ mỗi trạm xuất ra đường truyền
- Giải pháp: Hãy hình dung một cái thùng đựng nước có một lỗ rò dưới đáy Khi thùng có nước, lượng nước chảy qua lỗ thủng dưới đáy gần như không đổi Khi thùng đầy mà nước vẫn chảy vào thêm, lượng nước thừa sẽ tràn đi
Ở đây cái thùng tượng trưng cho một vùng đệm đặt giữa CPU và đường truyền Như vậy dù dữ liệu từ CPU vào thất thường, lúc nhiều lúc ít thì luồng dữ liệu ra (chảy từ đáy thùng) vẫn đều đặn Lương lượng được kiểm soát
Hình minh họa thuật toán Leaky Bucket
- Lưu ý: Nếu thùng đã đầy rồi mà nước vẫn chảy vào thì sẽ bị tràn ra ngoài, tức là những gói tin đến sau khi vùng đệm đã đầy sẽ bị hủy bỏ Nếu các đơn vị dữ liệu trên mạng có cùng kích thước, chẳng hạn như các gói tin trong mạng cell ATM thì
có thể căn cứ vào đơn vị đếm là số gói tin để biết bộ đệm đã đầy hay chưa và lưu
9
Trang 10lượng đi qua là bao nhiêu Nhưng nếu các gói tin không cùng kích thước thì phải cài đặt thêm một bộ đếm (theo đơn vị byte) để tính lưu lượng vào và ra
Thuật toán Token Bucket
Đây là thuật toán cải tiến hơn thuật toán thùng rò
- Vấn đề: Trong thuật toán thùng rò có một số điểm chưa linh hoạt Đó là, dữ liệu chỉ xuất ra đều đặn từ một trạm, do đó không đáp ứng được một số thời điểm trạm muốn truyền ngay một lượng lớn dữ liệu Ta hãy xét một thuật toán linh hoạt hơn gọi là Token Bucket
- Gải pháp: Trong thuật toán này, thùng không chứa các gói tin mà chứa các token (thẻ truyền tin), các token này được sinh ra một cách đều đều, cứ sau một khoảng t nào đó lại có một token được sinh ra Trong thùng có bao nhiêu token thì trạm được phép truyền cùng lúc bấy nhiêu đơn vị dữ liệu,và sau khi truyền thì token trong thùng bị trừ đi một số tương ứng với số đơn vị dữ liệu đã truyền
Cũng như thuật toán Leaky Bucket, đơn vị dữ liệu có thể tính theo số gói tin hoặc theo tổng kích thước (byte) của chúng
Khi trạm rỗi, truyền ít thì số token còn dư được tích lũy (khác với thuật toán Leaky bucket) Với cơ chế này, khi mỗi trạm rỗi thì là lúc nó để dành quyền được gửi để
về sau có thể gửi cùng lúc một lượng lớn dữ liệu
b) C hống tắc nghẽn vòng đóng (Close-loop congestion control)
Đây là phương pháp chống tắc nghẽn dựa trên trạng thái của mạng Việc giám sát tắc nghẽn và kiểm soát luồng dựa trên thông tin phản hồi hiện (explicit) hoặc ẩn (implicit) từ mạng hoặc từ phía nhận
+ Phản hồi ẩn (implicit feedback): bên phát sử dụng thời gian chờ (time-out) để xác định liệu có xảy ra tắc nghẽn hay không Ví dụ: điều khiển chống tắc nghẽn trong TCP thực hiện theo kiểu này
+ Phản hồi hiện (explixit feedback): một số bản tin tường minh được gửi đến nguồn phát Ví dụ: điều khiển chống tắc nghẽn cho dịch vụ ABR (Available Bit Rate) trong ATM
+ Điều khiển theo tốc độ: điều khiển một cách trực tiếp tốc độ truyền tại phía gửi (nguồn gửi tin)
+ Điều khiển theo kích thước cửa sổ: điều khiển gián tiếp tốc độ truyền thông qua việc thay đổi kích thước cửa sổ
Các bước điều khiển vòng đóng:
Các giải pháp điều khiển vòng lặp đóng gồm ba bước như sau:
- Bước một: theo dõi hệ thống để phát hiện tắc nghẽn xảy ra khi nào và ở đâu
10