CẢNH BÁO: Đây là kiến thức tôi tự đọc sách gốc và hiểu được. Chắc chắn sẽ có sai sót và hiểu sai vấn đề của tác giả. Mọi hành vi sao chép và sử dụng lại vì bất kỳ mục đích nào tôi không chịu trách nhiệm về tính đúng đắn và hợp pháp. Cám ơn!

Mục tiêu chính của chương này

Vì khả năng xảy ra lỗi trong quá trình truyền tin là hoàn toàn có thể, và cũng bởi lý do bên nhận dữ liệu có thể muốn điều chỉnh thứ tự các dữ liệu được gửi đến mà kỹ thuật đồng bộ hóa và kết nối phải được triển khai tự động hóa. Điều này thúc đẩy sự cần thiết cho việc đưa vào một tầng kiểm soát trong mỗi thiết bị truyền tin nhằm cung cấp các cơ chế như kiểm soát lưu lượng (dòng chảy của dữ liệu trong lúc truyền tin), cơ chế phát hiện lỗi và kiểm soát lỗi. Tầng điều khiển có các chức năng này được gọi với cái tên chung nhất là Data Link Control Protocol.

Flow control (kiểm soát dòng chảy hay kiểm soát lưu lượng) cung cấp cho người nhận cơ chế điều chỉnh lưu lượng của dữ liệu từ phía người gửi sao cho bộ đệm bên người nhận không bị tràn hay quá tải.

Trong Data Link Control Protocol, error control (kiểm soát lỗi) xuất hiện khi khi thực hiện truyền lại các frames bị hư hại do không được thừa nhận hoặc do một lý do khác như một phía nào đó (bên gửi hoặc bên nhận) yêu cầu gửi lại.

High-level data link control (HDLC) được sử dụng rộng rãi trong giao thức kiểm soát liên kết dữ liệu. Nó chứa hầu như tất cả các tính năng được tìm thấy trong các giao thức kiểm soát liên kết dữ liệu khác.

Hầu hết các vấn đề thảo luận của chúng ta từ trước tới nay đều quan tâm đến việc gửi đi tín hiệu qua một liên kết truyền dẫn. Để có thể đạt được hiệu quả của một quá trình truyền dữ liệu số, yếu tố cần nhiều nhất là kiểm soát và quản lý quá trình trao đổi. Trong phạm vi bài viết này, chúng ta nhấn mạnh hơn đến khái niệm gửi đi dữ liệu trên một liên kết truyền dẫn dữ liệu. Để đạt được sự kiểm soát cần thiết này, một tầng luận lý được thêm vào phía trên tầng vật lý – tầng luận lý này còn có tên gọi là data link control hay data link control protocol. Khi data link control protocol được sử dụng, các phương tiện truyền dẫn giữa các hệ thống còn được gọi là data link (liên kết dữ liệu).

Để thấy được sự cần thiết của kiểm soát liên kết dữ liệu, chúng ta liệt kê một vài yêu cầu và đối tượng cho tính hiệu quả của truyền dẫn dữ liệu giữa hai trạm kết nối truyền – nhận một cách trực tiếp:

– Frame synchronization: Dữ liệu được gửi đi trong các khối gọi là frame. Điểm bắt đầu và kết thúc của mỗi frame phải được nhận biết. Việc đồng bộ các frame này sẽ được đề cập chi tiết trong phần này.

Flow control: Trạm phát tin phải không phá vỡ nguyên tắc là không được gửi đi gói tin nhanh hơn khả năng đón nhận gói tin của trạm nhận.

Error control: Các bit lỗi được nhận biết trong hệ thống truyền dẫn phải được chỉnh sửa cho đúng với bit ban đầu.

Addressing: Ở các môi trường chia sẻ, như trong mạng LAN, dấu hiệu nhận dạng của hai trạm phát – thu có liên quan đến quá trình truyền phải được chỉ định cụ thể.

Control and data on same link: Đây không phải là một thiết kế riêng biệt với một đường truyền vật lý riêng biệt cho việc kiểm kiểm soát thông tin. Theo đó, bên người nhận phải có khả năng phân biệt được thông tin được truyền đi.

Link management: Việc khởi tạo, bảo trì và kết thúc một quá trình trao đổi dữ liệu toàn vẹn đòi hỏi một sự phối hợp hoàn hảo từ cả hai phía.

  1. Flow Control

Kiểm soát lưu lượng là kỹ thuật đảm bảo cho các chủ thể truyền không lấn át các chủ thể nhận bằng dữ liệu. Các chủ thể nhận thường sắp xếp bộ đệm dữ liệu theo một kích cỡ tối đã cho quá trình truyền. Khi dữ liệu đến, bên nhận nhất định phải làm một số lượng lớn công việc xử lý trước khi chuyển các dữ liệu này tới phần mềm ở mức cao hơn. Trong trường hợp thiếu đi sự kiểm soát lưu lượng, bộ đệm của bên nhận có thể bị làm đầy và tràn trong khi nó đang xử lý dữ liệu cũ.

Để hiểu rõ, ta xem xét cơ chế của kiểm soát lưu lượng trong trường hợp không có lỗi. Mô hình ta khảo sát ở hình 1 được gọi là giản đồ thời gian theo chiều dọc.

Ưu điểm của nó là thể hiện cho ta thời gian phụ thuộc và minh họa chính xác mối quan hệ giữa người gửi-người nhận. Mỗi mũi tên đại diện cho một frame truyền đi dữ liệu liên kết giữa 2 trạm. Dữ liệu được gửi theo một chuỗi các frame, mà mỗi frame như vậy chứa một phần của dữ liệu gốc và một vài thông tin kiểm soát. Thời gian cần cho mỗi trạm để phát đi tất cả cá bit của frame gọi là thời gian truyền, tỷ lệ thuận với chiều dài của frame. Thời gian lan truyền là thời gian nó chiếm cho 1 bit để đi qua các liên kết giữa nguồn và đích. Để minh họa cho vấn đề đặt ra, ta giả định toàn bộ frame được truyền đi thành công tới bên nhận, không frame nào bị mất cũng như bị lỗi. Hơn nữa, các frame đến đúng thời điểm và thứ tự như lúc chúng được gửi đi. Tuy nhiên, mỗi frame phải chịu một sự một sự sắp xếp tùy ý hàng đợi trễ trước khi được tiếp nhận.

  1. Stop-and-Wait Flow Control

Một trong những dạng cơ bản nhất của kiểm soát lưu lượng được biết đến là cơ chế stop-and-wait. Nó hoạt động như sau: Các thực thể nguồn truyền đi 1 frame. Sau khi thực thể đích nhận được frame đó, nó sẽ ra tín hiệu sẵn sàng nhận thêm frame khác bằng cách gửi lại một bản ghi nhận về frame vừa nhận được. Lúc này bên nguồn phải chờ cho đến khi nhận được bản ghi nhận đó thì mới gửi đi frame kế tiếp. Chính vì vậy mà nguồn nhận có thể làm dừng dòng chảy dữ liệu bằng cách không tạo ra một bản ghi nhận nào. Thủ tục này hoạt động ổn và thực sự khó có thể cải tiến hơn được khi một thông điệp được gửi trong một vài frame lớn. Tuy nhiên, trong một vài trường hợp mà phía nguồn sẽ phá vỡ khối lượng lớn dữ liệu thành một khối nhỏ hơn và truyền dữ liệu trong rất nhiều frames nhỏ. Điều này xảy ra bởi các lý do sau:

                        – Kích thước bộ đệm của phía nhận bị giới hạn.

                        – Truyền tải càng lâu, càng dễ xảy ra lỗi, dẫn đến yêu cầu gửi lại toàn bộ frame. Với frame nhỏ hơn, lỗi sẽ được phát hiện sớm, và các tập hợp dữ liệu nhỏ này sẽ được gửi lại nhanh chóng.

– Trong môi trường chia sẻ, như mạng LAN, có một mong muốn tồn tại là không cho phép 1 trạm chiếm giữ thiết bị trong thời gian dài, từ đó gây ra sự tắc nghẽn ở các trạm gửi khác.

Với việc sử dụng nhiều frame cho một thông điệp, phương pháp stop-and-wait này có vẻ không phù hợp cho lắm. Cốt lỗi của vấn đề này là trong một thời điểm, chỉ có 1 frame được phép truyền đi. Có một công thức tính độ dài bit trong một liên kết như sau:

Công thức 1

Trong đó:

B là độ dài của liên kết trong các bit, có thể hiểu đơn giản là số bit hiện có trong liên kết ở thời điểm hiện tại khi quá trình truyền tải đang diễn ra trên đường truyền.

R là tốc độ dữ liệu của liên kết (bps)

d là độ dài (hay khoảng cách) của liên kết trong đơn vị mét.

V là vận tốc truyền sóng (m/s)

Trong trường hợp độ dài bit của liên kết lớn hơn độ dài frame, kết quả lúc này sẽ rất xấu. Minh họa cho vấn đề này là ở hình 2.

Trong hình 2, thời gian truyền dẫn (thời gian để 1 trạm truyền đi 1 frame) được mặt định là 1 và ghi nhận độ trễ (tức là thời gian nó chiếm lấy để 1 bit có thể đi từ bên gửi tới bên nhận) được biểu diễn là a. a có thể biểu diễn bằng công thức:

Công thức 2

Trong đó, L là số bit của một frame.

Khi a nhỏ hơn 1, thời gian ghi nhận sẽ nhỏ hơn thời gian truyền. Trong trường hợp này, các frame chiếm một thời gian đủ lâu để ghi nhận bit đầu tiên của frame đã tới được đích trước khi nguồn hoàn thành quá trình truyền dẫn frame.

Khi a lớn hơn 1, thời gian ghi nhận lớn hơn thời gian truyền. Trong trường hợp này, bên gửi hoàn thành quá trình truyền toàn bộ frame trước cả khi bit đầu tiên tới được bên nhận. Nói một cách khác, một giá trị a rất lớn trong lúc này là phù hợp với tốc độ dữ liệu cao và khoảng cách dài giữa các trạm.

Lấy ví dụ: Có 200m cáp quang với tốc độ 1Gbps. Vận tốc truyền là 2×108 m/s. Ta sử dụng công thức 1, sẽ thu được B là:

Và giả định 1 frame sẽ là 1000 octets, tương đương 8000 bits được truyền tải. Ta sẽ tính được a là:

Sliding-Windows Flow Control

Bản chất của vấn đề được mô tả là chỉ có 1 frame được truyền đi ở một thời điểm. Nếu trong trường hợp độ dài bit của liên kết lớn hơn chiều dài frame ( a > 1), sẽ gây ra hậu quả xấu. Có thể cải thiện vấn đề này bằng cách cho phép nhiều frame được truyền đi ở cùng một thời điểm.

Ta hình dung có hai trạm A và B, kết nối qua một liên kết truyền tải song công. Trạm B sắp xếp vùng trống bộ đệm cho W frame sắp nhận. A sẽ được phép truyền đi W frame tới B mà không cần phải chờ sự ghi nhận của B gửi trả lại. Để ghi nhận lại frame nào đã từng được ghi nhận, mỗi frame sẽ sẽ được gán nhãn với một chuỗi số. B ghi nhận đã có được frame bằng cách đưa ghi nhận kèm chuỗi số về frame kế tiếp mà nó muốn nhận.

Ví dụ, B nhận frame 2,3 và 4 nhưng sẽ giữ lại bản ghi nhận chờ khi frame 4 đến nơi thì thôi. Lúc đưa trả về A yêu cầu frame 5, nó sẽ lập tức ghi nhận đã nhận được frame 2, 3 và 4 cùng một lúc. Và cách hoạt động này được gọi với cái tên Sliding-windows flow control.

Có rất nhiều lưu ý cần phải được nói rõ trong kỹ thuật này. Bởi vì chuỗi số được sử dụng sẽ chiếm giữ một vùng nhất định trong frame, nên cần phải giới hạn vùng nhất định trong 1 frame lại, tránh tình trạng đánh số tràn lan. Cụ thể, với vùng 3 bit, chuỗi số đánh dấu sẽ nằm trong khoảng 0 tới 7. Theo đó, các frame sẽ được đánh số theo dạng chia lấy dư cho 8, nghĩa là sau một chuỗi số kết thúc bằng 7, số kế tiếp sẽ là 0. Tổng kết lại, với 1 vùng chứa k bit thì giới hạn chuỗi số là 0 tới 2k-1, và các frame được đánh số theo dạng chia dư cho 2k. Số lượng tối đa phạm vi của kích thước cho phép sẽ là 2k-1.

Hình 3 dưới đây là minh họa cụ thể của tiến trình sliding-windows .

  1. Error Control

Kiểm soát lỗi đề cập tới cơ chế phát hiện và sửa lỗi xuất hiện trong quá trình truyền frame. Có hai loại lỗi phổ biến trong quá trình này:

Lost frame: là những frame không thể đến được phía bên nhận. Lấy ví dụ, sự nhiễu nổ tín hiệu có thể gây hư hại cho frame đến mức người nhận không ý thức được rằng frame đó đã được truyền tới.

Damaged frame: Các frame được ghi nhận đã tới bên người nhận, nhưng một vài bit trong đó lại bị lỗi.

Kỹ thuật thông dụng nhất cho cơ chế kiểm soát lỗi đó là dựa trên một vài hoặc toàn bộ các yếu tố sau đây:

  • Cơ chế phát hiện lỗi.
  • Positive acknowledgement (Xác nhận khả quan): bên nhận sẽ gửi trả một xác nhận mang tính tích cực về việc nhận frame thành công, frame không bị lỗi.
  • Thực hiện gửi lại sau khi hết hạn: Sau một mốc thời gian nhất định, phía người gửi sẽ chủ động gửi lại frame mà nó không nhận được tín hiệu xác nhận từ bên phía người nhận.
  • Phủ định thừa nhận và truyền lại: Nếu phát hiện có lỗi xuất hiện trong frame vừa nhận, bên nhận sẽ gửi một tín hiệu phủ nhận về frame vừa rồi. Như vậy, bắt buộc bên gửi phải thực hiện thao tác gửi trả lại lần thứ 2.

Chung quy lại, những cơ chế này đều đề cập tới việc tự động hóa quá trình nhắc nhở yêu cầu (ARQ – Automatic repeat request). Các phiên bản trở thành tiêu chuẩn của ARQ bao gồm 3 dạng sau:

Stop-and-wait ARQ

Go-back-N ARQ

Selective-reject ARQ

Ta sẽ lần lượt tìm hiểu 3 cơ chế này.

Stop-and-wait ARQ

Thực chất đây là kỹ thuật stop-and-wait flow control cải tiến thêm. Bên gửi sẽ truyền đi một frame đơn lẻ và dừng lại, chờ tín hiệu ACK bên người nhận gửi về. Không frame nào được phép đi tiếp nếu chưa nhận cờ tín hiệu ACK.

Có hai lỗi có thể xảy ra trong phương án này. Đầu tiên, frame đến được bên nhận có thể bị hư hại. Bên nhận phát hiện ra và sử dụng kỹ thuật phát hiện lỗi để dò ra và hủy bỏ frame này. Để lường trước tình huống này, bên trạm gửi đã chèn sẵn thời gian đợi. Sau khi gửi frame đi, bên gửi sẽ chờ tín hiệu ACK. Nếu không có ACK phản hồi, thì khi bộ đếm thời gian đợi chấm dứt, nó sẽ tự động gửi lại frame lần nữa. Nó chỉ dừng lại khi nào nhận được cờ ACK mà thôi.

Một dạng lỗi khác là hư hại cờ ACK. Giả định A gửi đi 1 frame, frame được nhận đúng trình tự ở bên B, sau đó B gửi phản hồi ACK (đã nhận được). Nhưng ACK bị hư hại trong quá trình đẩy ngược về A và A do đó không thể nhận được cờ xác nhận. Như vậy, A sẽ chờ khi bộ đếm thời gian đợi chấm hết một vòng, nó sẽ tự động gửi lại thông tin lần nữa. Khả năng cao là B sẽ nhận được 2 bản của 1 frame đồng nhất. Do đó, để ngăn ngừa tình trạng này, cá frame được gán nhãn nhanh với 0 và 1, tương ứng ACK0 và ACK1. Theo đúng nguyên tắc của sliding-window, tín hiệu ACK0 sẽ chấp nhận bởi frame được đánh số 1 và tương tự cho frame được đánh số 0.

Go-Back-N ARQ

Với phương thức này, ở phía gửi có thể đưa đi một loạt các frame được đánh số tuần tự cho tới con số tối đa đạt được bằng cách chia dư cho số lớn nhất. Số lượng các frame không được thừa nhận ở bên ngoài sẽ được phát hiện nhờ vào kích thước của cửa sổ (windows size), bằng cách sử dụng kỹ thuật sliding-windows flow control. Khi không có lỗi nào diễn ra, phía nhận sẽ chấp nhận toàn bộ các frame được gửi đến với tín hiệu RR (Receive ready). Nếu có lỗi, nó sẽ gửi tín hiệu từ chối REJ (Reject) cho frame đó. Lúc này, bên nhận sẽ dừng toàn bộ việc nhận thêm frame mới cho đến khi nào có đúng frame đã lỗi được gửi lại hoàn chỉnh.

Selective-reject ARQ

Với kỹ thuật này, chỉ có duy nhất một frame được gửi lại khi có tín hiệu từ chối, gọi là SREJ khi thời gian chờ hết hạn. Kĩ thuật này hiệu quả hơn Go-Back-N vì nó giới hạn được số lần truyền lại frame. Mặt khác, phía nhận cũng phải duy trì cho mình được một vùng bộ đệm đủ lớn để lưu trữ SREJ frame cho đến khi frame bị lỗi được truyền lại và phải chứa dấu hiệu nhận dạng luận lý một cách dễ phân biệt để tránh gửi nhầm.

  • High-Level Data Link Control (HDLC)

Giao thức điều khiển liên kết dữ liệu quan trọng nhất là HDLC (ISO 3009, ISO 4335). Để phục vụ cho một lượng lớn ứng dụng, HDLC định nghĩa 3 loại trạm, 2 kiểu cấu hình liên kết và 3 chế độ truyền tải dữ liệu của hệ thống.

Ba loại trạm ta vừa nói tới là:

  • Primary station: Chịu trách nhiệm cho việc điều khiển hoạt động của liên kết. Các frame do primary station điều hành gọi là các dòng lệnh.
  • Secondary station: Tập hợp các tổ chức dưới sự điều khiển của trạm chính. Frame trong trạm này gọi là phản hồi (responses). Trạm chính duy trì các liên kết luận lý riêng biệt với mỗi trạm thứ 2 này trên từng đường riêng.
  • Combined station: Tổng hợp các đặc tính của hai tầng trên. Đây là nơi tổng hợp cả command (dòng lệnh) và responses (phản hồi).

Hai dạng cấu hình liên kết là:

  • Unbalanced: Bao gồm 1 trạm chính và 1 hoặc nhiều trạm 2 và hỗ trợ cả song công và bán công truyền dẫn.
  • Banlanced: Gồm cả hai dạng trạm kết hợp lại và hỗ trợ cả hai dạng truyền dẫn song công và bán công.

Ba chế độ truyền tải dữ liệu là:

  • Normal respones mode (NRM): sử dụng cấu hình liên kết không cân bằng. Trạm chính có thể bắt đầu truyền dữ liệu tới tầng 2, nhưng tầng 2 chỉ có thể truyền dữ liệu phản hồi tới dòng lệnh từ trạm chính.
  • Asynchronous balanced mode (ABM): Sử dụng cấu hình liên kết balanced. Kể cả trạm kết hợp cũng có thể bắt đầu truyền tin mà không cần có sự cho phép từ phía còn lại.
  • Asynchronous response mode (ARM): sử dụng cấu hình liên kết không cân bằng. Trạm 2 có thể bắt đầu truyền mà không cần có sự cho phép từ trạm chính. Trạm chính vẫn giữ phản hồi trên đường truyền, bao gồm cả việc khởi tạo, khôi phục lỗi và ngắt kết nối luận lý.

Kiểu NRM thường được dùng trong các đường truyền multidrop, nơi có số đầu ngắt kết nối đến máy chủ. ABM sử dụng rộng rãi trong cả 3 chế độ, bởi vì nó tạo hiệu quả cao trong kết nối song công và cũng không tốn quá nhiều chi phí. ARM ít được dùng nhất, nó chỉ được sử dụng tới trong một vài trường hợp đặc biệt như khi trạm thứ 2 cần khởi tạo kênh truyền.

HDLC sử dụng cơ chế truyền tải đồng bộ. Tất cả mọi truyền dẫn đều sử dụng dạng frame, mà mỗi frame sẽ tương thích với kiểu dữ liệu và cách kiểm soát trao đổi riêng.

Hình dưới đây minh họa cấu trúc của HDLC frame. Các cờ hiệu, địa chỉ, vùng kiểm soát được gọi là header.

Vùng Flag: nó phân định các frame ở cả hai đầu với mô hình thống nhất là 01111110. Mỗi cờ có thể dùng như cờ đóng cho 1 frame và cờ mở cho frame kế tiếp.

Vùng Address: Vùng này xác định trạm thứ 2 để truyền đi hay là nhận lại frame. Vùng này thường có kích thước tiêu chuẩn là 8 bit nhưng có thể chấp nhận dạng mở rộng được dùng hiện nay là một tập hợp mở rộng của 7 bit.

Vùng Control: HDLC định nghĩa 3 dạng frame, mỗi loại có 1 dạng kiểm soát khác nhau. Information frames (I-frames) chứa dữ liệu được truyền cho người dùng. Supervisory frames (S-frames) cung cấp cơ chế ARQ khi xâu chuỗi không được dùng. Unnumbered frames (U-frames) cung cấp các chức năng điều khiển liên kết bổ sung. Bit đầu hoặc 2 bit đầu tiên của vùng kiểm soát dùng để nhận dạng kiểu của frame.

Vùng Frame Check Sequence: đây là các mã cơ chế phát hiện lỗi được tính từ những bit còn lại của frame. Mã bình thường sử dụng dạng 16 bit CRC-CCITT. Một dạng khác là 32 bit FCS sử dụng CRC-32.

Operation: Tổ chức của HDLC bao gồm trao đổi các dạng I-frames, S-frames và U-frames giữa hai trạm. Tổ chức này bao gồm 3 pha. Đầu tiên, một trạm sẽ khởi tạo liên kết dữ liệu để các frame có thể được trao đổi. Tiếp theo, hai phía sẽ trao đổi dữ liệu người dùng và thông tin kiểm soát đẻ kiểm soát lỗi và lưu lượng. Cuối cùng, một trong hai phía đưa ra tín hiệu kết thúc quá trình này.

Initialization: Các dòng lệnh trong đây phục vụ 3 mục đích:

  • Phát tín hiệu cho phía còn lại thông báo việc yêu cầu khởi tạo.
  • Chỉ định 1 chế độ cụ thể trong 3 chế độ NRM, ABM, ARM.
  • Quy định sử dụng 3 hay 7 bit chuỗi số tuần tự sẽ được dùng.

Data Transfer: Khi việc khởi tạo được yêu cầu và hoàn tất, một kết nối luận lý sẽ được tạo ra. Cả hai phía đều có thể gửi đi thông tin.

Disconnect: Các cơ chế HDLC đều có thể khởi tạo việc ngắt kết nối. HDLC khởi tạo việc ngắt kết nối bằng cách gửi đi frame ngắt (DISC).

Advertisements