Khi dữ liệu đƣợc truyền, các tín hiệu đại diện luồng bit rất dễ bị thay đổi do sự tác động của nhiễu điện từ trong môi trƣờng bên ngoài, tức là các tín hiệu đại diện cho bit 1 bị máy thu dịch ra thành bit nhị phân 0 và ngƣợc lại, thậm chí tín hiệu có thể bị biến mất hoàn toàn. Để việc truyền dữ liệu đƣợc chính xác cần phải có biện pháp để bên thu có khả năng biết đƣợc dữ liệu thu đƣợc có chứa lỗi hay không. Hơn nữa, nếu phát hiện đƣợc lỗi có khả năng sửa lỗi.
Có hai cách tiếp cận cho vấn đề này:
Sửa lỗi theo phản hồi (Feedback Error Correction): mỗi ký tự hay Frame dữ liệu đƣợc truyền chỉ đƣợc bổ sung một lƣợng thông tin đủ cho máy thu phát hiện lỗi, nhƣng không thể xác định vị trí các bit bị lỗi trong dãy bit dữ liệu thu đƣợc; nhƣ vậy, bên phát phải truyền lại bản sao của đơn vị thông tin bị sai này.
Sửa lỗi ở phía trƣớc - FEC: mỗi ký tự hay Frame dữ liệu đƣợc truyền sẽ chứa một lƣợng thông tin bổ sung nhằm giúp máy thu không chỉ phát
hiện lỗi mà còn xác định chính xác lỗi nằm ở đâu trong dãy bit nhận đƣợc. Do đó nếu có lỗi thì máy thu có thể tự sửa lỗi mà không cần truyền lại dữ liệu.
Các kỹ thuật kiểm soát lỗi phổ biến nhất ở tầng Liên kết dữ liệu đều dựa trên hai cách tiếp cận trên. Việc áp dụng cách tiếp cận thứ nhất yêu cầu phải có cơ chế yêu cầu phát lại tự động – ARQ (Automatic Repeat reQuest): khi phát hiện ra lỗi trong dãy dữ liệu đến, bên nhận yêu cầu bên gửi gửi lại. Sự kết hợp kỹ thuật phát hiện lỗi và kỹ thuật ARQ trong giao thức tầng Liên kết dữ liệu có thể biến tầng Liên kết dữ liệu không tin cậy thành một tầng tin cậy. Trong các cơ chế phát lại có sử dụng ARQ, có ba cơ chế phổ biến nhất là:
Dừng và chờ (Stop-and-wait ARQ), Phát lại từ gói số liệu thứ N (Go-back-N). Phát lại có chọn lọc (Selective-repeat).
Trong các cơ chế trên, cơ chế phát lại có chọn lọc cho hiệu quả cao nhất, nhƣng cũng là cơ chế phức tạp nhất khi áp dụng.
Việc sử dụng ARQ có hiệu quả khi sự mất gói số liệu là không thƣờng xuyên và thời gian trễ truyền là không quan trọng. Cơ chế này chỉ làm tốn thêm một dải thông phụ khi có gói số liệu phải phát lại. Tuy nhiên, ARQ có thể đụng độ với cơ chế điều khiển lƣu lƣợng của TCP, trong khi tầng Liên kết dữ liệu đang cố gắng phát lại, bên gửi của kết nối TCP có thể bị hết giờ, dẫn đến kích hoạt giai đoạn khởi động chậm, SS. Giải pháp mà ngƣời ta đã đề xuất để giải quyết vấn đề này là sử dụng giao thức ARQ có nhận biết TCP (TCP-aware ARQ protocol); tầng Liên kết dữ liệu sẽ chặn các biên nhận lặp, không cho chúng đến đƣợc bên gửi. Nếu nhƣ tầng Liên kết dữ liệu không thể gửi lại các gói số liệu thì bên gửi sẽ bị hết giờ và chính nó sẽ phát lại gói số liệu. Giải pháp này chỉ có thể áp dụng đƣợc khi đƣờng truyền gây nhiều lỗi là chặng cuối cùng để đến đích, nếu sau đƣờng truyền gây nhiều lỗi lại có các đƣờng truyền và bộ
định tuyến nữa, những sự mất mát do tắc nghẽn mạng sẽ bị che đi, cơ chế điều khiển tắc nghẽn mất tác dụng, điều này cần phải tránh.
Để giảm ảnh hƣởng xấu của tỉ suất lỗi bit cao của đƣờng truyền không dây đến việc vận chuyển dữ liệu, các thuật toán mã hoá sửa lỗi ở phía trƣớc (FEC) đã đƣợc nghiên cứu và sử dụng rộng rãi. Thuật toán FEC chỉ ra cách bổ sung thông tin dƣ thừa vào dữ liệu gửi, để cho bên nhận có thể khôi phục lại phần bị hỏng của gói số liệu.
Để thực hiện FEC, ngƣời ta đóng các gói tin dữ liệu (data packets) thành các khối (block), trong mỗi khối lại đƣa thêm một số gói tin dƣ thừa (redundancy packets) để bên thu có thể phát hiện và tự khôi phục lại các gói dữ liệu bị hỏng. Công thức để tính xác suất mất gói tin sau khi đóng khối đƣợc Cidon phân tích rất kỹ trong [26], và đƣợc H. Lundqvist và G. Karlsson chỉ ra trong [27] nhƣ sau:
(1)
Trong đó Ppl (pl: packet loss) là xác suất mất gói tin trƣớc khi đóng gói khối, N là số lƣợng các gói tin dữ liệu đƣợc đóng trong một khối, M là số lƣợng các gói tin dƣ thừa dùng để khôi phục dữ liệu trong trƣờng hợp xẩy ra lỗi.
Công thức sau đƣợc H. Lundqvist và G. Karlsson đƣa ra cho phép tính thông lƣợng của TCP khi sử dụng FEC [27]:
Ở đây Wm là kích thƣớc cửa sổ cực đại, b là số lƣợng các gói tin báo nhận trong mỗi xác nhận, p là xác suất lỗi, T0 là chu kỳ timeout và RTT là thời gian khứ hồi.
Thông lƣợng của TCP trong trƣờng hợp kết hợp với FEC và không kết hợp với FEC đƣợc ƣớc lƣợng sử dụng các tham số cố định. H. Lundqvist và G. Karlsson [27] đã lựa chọn N=10 và M=1, đƣờng truyền TCP với tốc độ 1Mbps, độ trễ đƣờng truyền 100ms và kích thƣớc của gói tin là 1000byte, chu kỳ timeout là 1 giây, số lƣợng gói thông báo trong một xác nhận (b) là 2. Kết quả thu đƣợc nhƣ hình 3.1.
Hình 3.1 Thông lƣợng của TCP với FEC và không FEC
Khi không có lỗi hoặc lỗi rất nhỏ thì thông lƣợng của TCP lớn hơn thông lƣợng của TCP+FEC, nguyên nhân vì TCP+FEC cần truyền thêm các thông tin dƣ thừa để phát hiện và sửa lỗi. Lúc lỗi nhỏ hơn 0.01, lƣợng thông tin dƣ thừa
trong FEC đủ để khắc phụ lỗi, do đó thông lƣợng của TCP+FEC vẫn không đổi, trong khi thông lƣợng của TCP không sử dụng FEC bị suy giảm nghiêm trọng. Xác suất lỗi vƣợt quá 0.01 thì lƣợng thông tin dƣ thừa truyền trong TCP+FEC không còn đủ để TCP kiểm tra và tự sửa đƣợc lỗi, TCP sẽ phát yêu cầu phát lại các gói tin bị hỏng, do đó thông lƣợng của TCP+FEC bắt đầu bị suy giảm.
Nhƣợc điểm của thuật toán này là thông tin dƣ thừa bổ sung thêm vào sẽ không cần sử dụng đến trong những lúc trạng thái đƣờng truyền là tốt, gây ra sự lãng phí dải thông. Ngoài ra, việc tính toán đối với thông tin bổ sung này cũng cần đến thời gian xử lý của CPU và bộ nhớ. Tuy nhiên, trong những tình huống kênh truyền có khoảng cách lớn kết hợp với tỉ suất lỗi cao, ƣu điểm của FEC rất xứng đáng với cái giá phải trả. Kỹ thuật FEC còn có một ƣu điểm nổi bật nữa là nó không cản trở các cơ chế điều khiển của giao thức TCP. Với các ƣu và nhƣợc điểm trên, FEC thƣờng đƣợc sử dụng trong truyền thông vệ tinh và truyền thông vũ trụ.