Mã kiểm tra lỗi CRC
Trang 1LỜI MỞ ĐẦU
Trong thời đại hiện nay thông tin liên lạc đóng vai trò hết sức quan trọng trong cuộc sống, hầu hết chúng ta luôn gắn liền với một vài ứng dụng trao đổi thông tin nào đó Thông tin trao đổi bao gồm việc trao đổi tin tức, các tài nguyên học tập nghiên cứu như các phần mềm (dữ liệu, chương trình ứng dụng, )…Trong môn học truyền dữ liệu chúng ta đã được nghiên cứu rất nhiều cách truyền tin và các vấn đề liên quan đến nó Và đề tài mà chúng em tìm hiểu
đó là : " Mã kiểm tra lỗi CRC " CRC chính là một phương pháp nhằm kiểm tra xem nội dung một tập tin có bị thay đổi trong quá trình truyền tin hay không Ý tưởng về CRC cũng không quá phức tạp
Trong bài viết này, chúng ta sẽ tìm hiểu kĩ mã CRC qua các phần sau:
Phần 1: Giới thiệu mã CRC
Phần 2: Nội dung
Phần 3: Chương trình mô phỏng
Dù đã tìm hiểu rất kỹ nhưng trong bài báo cáo không tránh khỏi thiếu sót
Chúng em xin trân trọng tiếp thu tất cả những ý kiến đóng góp của cô và các bạn để hoàn thiện bản báo cáo này hơn nữa
Xin trân thành cảm ơn!
Trang 2MỤC LỤC
Trang 3PHẦN I: GIỚI THIỆU
Có nhiều cách để kiểm tra các bit kiểm tra lỗi khi truyền dữ liệu Kĩ thuật phổ biến và chi phí ít nhất cho dò tìm lỗi là kỹ thuật VRC, thường được gọi là kiểm tra chẵn lẻ VRC có thể dò tìm tất cả các lỗi bit đơn Nó cũng có thể do tìm các lỗi bit chùm bit miễn là tổng số các bit thay đổi luôn là số lẻ (1, 3, 5…).Tuy nhiên, bộ kiểm tra VRC không thể dò tìm khi tổng số các bit 1 của đơn vị dữ liệu bị thay đổi là chẵn Hoặc kiểm tra lỗi bằng phương pháp LRC, nó là
kỹ thuật tăng cường khả năng dò tìm các lỗi bit hàng loạt Tuy nhiên, khi ở đó có một mẫu các bit vẫn chưa khắc phục được Nếu 2 bit trong một đơn vị dữ liệu bị thay đổi và hai bit ở cùng đúng vị trí trong đơn vị dữ liệu khác cũng bị hư hại, Bộ kiểm tra LRC sẽ không dò tìm thấy lỗi Kỹ thuật thứ 3 và là kỹ thuật mạnh nhất trong các kỹ thuật kiểm tra dư thừa đó là kỹ thuật kiểm tra vòng – CRC
CRC (Cyclic Redundancy Check)
Là việc kiểm tra dư thừa theo chu kỳ viết tắt là CRC, là một kỹ thuật để phát hiện lỗi trong kỹ thuật truyền dữ liệu, nhưng không có khả năng sửa lỗi Nó được sử dụng chủ yếu để truyền dữ liệu Trong phương pháp CRC, một tập tin bit kiểm tra được tính toán cho mỗi khung tin dựa vào nội dung khung, sau đó được gắn vào đuôi khung các bít truyền đi Bên thu thực hiện tính toán tương tự như bên phát Nếu một lỗi xảy
ra, người nhận sẽ gửi một thông báo”NAK” cho bên phát yêu cầu được truyền lại
Kỹ thuật này cũng đôi khi được áp dụng cho các thiết bị lưu trữ dữ liệu chẳng hạn như một ổ đĩa Tại đó, mỗi khối trên đĩa sẽ có bit kiểm tra, và nó có thể tự động bắt đầu đọc lại khi lỗi phát hiện, hoặc nó có thể báo cáo lỗi cho phần mềm
Trang 4PHẦN II: NỘI DUNG
- Bước 3: CRC của n bit dẫn ra từ bước 2 thay thế các bit 0 được ghép vào cuối đơn vị
dữ liệu Chú ý là CRC có thể bao gồm tất cả các bit 0
Đầu tiên, dữ liệu được nhận, theo đó là CRC Bên nhận coi toàn bộ chuỗi dữ liệu đó là một đơn vị và chia nó cho cùng số chia mà đã được sử dụng trước đó để tìm ra số dư CRC
Nếu chuỗi đến mà không có lỗi, bộ kiểm tra CRC sẽ cho kết quả đầu ra là số dư bằng 0 và đơn vị dữ liệu được qua Nếu chuỗi đó bị thay đổi trong quá trình truyền, kết quả phép chia là một số khác 0, do đó đơn vị dữ liệu không được qua
Trang 51010+ 1101
0111
1011 × 11 1011101111101
- Phép cộng Mod-2 được thực hiện bởi cổng EX-OR
- Phép trừ Mod-2 giống như phép cộng
- Nhân Mod-2 một số với 2n tương ứng với dời số đó n bit về bên trái và thêm n bit 0 vào bên phải số đó, thí dụ 11001* 23 = 11001000
- Phép chia Mod-2 được thực hiện giống như phép chia thường nhưng nhớ là phép trừ trong khi chia được thực hiện như phép cộng
* Thuật toán
Gọi T = (k+n) bit là khung thông tin được phát, với n < k, M = k bit dữ liệu, k bit đầu tiên của T
F = n bit của khung FCS, n bit cuối của T
P = (n+1) bit, số chia trong phép toán
Số T được tạo ra bằng cách dời số M sang trái n bit rồi cộng với số F:
T = 2nM + F
Chia số
n
2 M cho P ta được:
Q là số thương bà R là số dư
Vì phép chia thực hiện với số nhị phân nên số dư luôn luôn ít hơn số chia 1 bit Ta dùng số
dư này làm số F, nghĩa là:
T = 2nM + R
Ở máy thu khi nhận được khối dữ liệu, mang chia cho P, kết quả số dư sẽ = 0:
Trang 6Số phải tìm R (3 bít) cho khung FSC được xác định như sau:
- Nhân M với 23 cho kết quả: 101101000
- Thực hiện phép chia cho P:
Trang 7Ta có R=010, cộng R với 23M sẽ cho số T phát đi là:
T= 101101000 + 010 =101101010
Nếu bản tin không có lỗi T phải chia đúng cho P
Thực hiện phép chia T/P ta thấy số dư =0
Tóm lại, để có một khung FCS n bit, người ta phải dùng một số P có n+1 bit để tạo số R có
n bit dùng cho khung FCS P được gọi là đa thức sinh (generator polynomial), dạng của nó do các giao thức qui định, tổng quát P phải có bit đầu và bit cuối là bit 1
2. Dùng phép biểu diễn đa thức
Để thấy quá trình hình thành mã CRC, ta có thể dùng phép biểu diễn một số nhị phân dưới dạng một đa thức của biến x với hệ số là các số nhị phân và bậc của x là giá trị chỉ vị trí của số nhị phân đó
Ví dụ số nhị phân 110110 có thể biểu diển bởi:
1.x5 + 1.x4 + 0.x3 + 1 x2 + 1.x1 + 0.x0 = x5 + x4 + x2 + x
Quá trình hình thành mã CRC được thực hiện như sau:
- Gọi M là đa thức biểu diễn thông tin cần truyền
- P là đa thức sinh, bậc n (chứa n+1 bit)
Trang 9R(x) =x+1 tương ứng với giá trị 011
=> T = 111101011 là khung tin mà ta cần truyền đi
TxD Tín hiệu điều khiển phản hồi (từ 1 thành 0 sau 8 N TxC
Trang 10TxC Thanh ghi PISO Thanh ghi FSC
Trang 11Số bít trong FSC là 4 bít nên cần 1 thanh ghi dịch 4 bít gọi là thanh ghi dịch FSC để biểu diễn x3, x2, x1, x0 trong đa thức sinh Với đa thức sinh này thì các số x3, x0 là 1, còn x2, x1 là 0 Trạng thái mới của x2, x1 được thay bằng trạng thái trước đó của x0, x1 Trạng thái mới của x0,
x3 được thay bằng trạng thái của đường phản hồi đã XOR với số trước đó
Mạch hoạt động như sau: Trước tiên xóa thanh ghi dịch FSC và nạp song song 8 bít đầu tiên trong khung tin vào thanh ghi vào song song, ra nối tiếp – PISO Tín hiệu phản hồi là 1 Theo tốc độ của đồng hồ phát TxC, các bít này được dịch ra đường truyền lần lượt từ MSB đến LSB Cùng lúc này dòng bít này được XOR với x3 qua đầu phản hồi trở lại các đầu vào chọn lọc của FCS Sau khi 8 bit đầu đi qua hết thanh ghi PISO, thủ tục này lặp lại Sau khi xuất ra byte cuối cùng trong khung tin thanh ghi PISO được nạp toàn là số 0, tín hiệu phản hồi
từ 1 trở thành 0, do đó nội dung của thanh ghi FSC là các bit kiểm tra đi theo sau khung tin phát ra đường truyền
2. Mạch tạo mã CRC bên thu
SIPO FCS
Trang 12x 0 x 1 x 2
Đọc song song byte (xN)
x 3
RxC lsb msb
RxD
Trang 13IV Khả năng dò sai của mã CRC
Một lỗi xảy ra ở một vị trí nào đó trong khung dữ liệu làm đảo bit ở vị trí đó của
Trang 14khung, điều này tương đương với phép tính EX-OR bit đó và bit 1 (vì 0+1=1 và 1+1=0)
Nếu gọi E là một khung có số lượng bit bằng với khung dữ liệu, trong đó chỉ các vị trí của bit lỗi = 1 và các bit khác = 0 thì khung thông tin Tr nhận được có thể viết:
1. Mã CRC luôn luôn cho phép máy thu dò ra một bit sai.
Giả sử bản tin chỉ sai một bit khi đó đa thức E(x) có dạng xi, i là một số nguyên, E(x) chia
Trang 15Giả sử bản tin sai một chuỗi, nhưng có tổng số bit sai là số lẻ: đa thức E(x) chứa số lẻ bit 1 nên E(1) =1 Mặt khác, giả sử (x+1) là thừa số của P(x), ta có thể viết P(x) = (x+1)*H(x),với H(x) là một đa thức Ta cũng giả sử lỗi này không được dò ra, nghĩa là E(x) chia đúng cho P(x), hay E(x) = P(x)*K(x) Thay P(x) = (x+1)*H(x) vào E(x) được E(x) = (x+1)*H(x)*K(x), biểu thức này cho E(1) = 0 Điều này trái với giả thiết ở trên, hay nói cách khác, máy thu sẽ dò ra lỗi nếu ta chọn P(x) sao cho chia đúng cho (x+1) Vậy máy thu luôn dò ra lỗi gồm nhiều bit và có tổng số bit lỗi là số lẻ nếu P(x) chia hết cho (x+1).
3. Máy thu luôn luôn dò ra lỗi nếu chuỗi dữ liệu sai có chiều dài ≤ bậc của P(x).
Giả sử nhiễu làm sai một đoạn dữ liệu có chiều dài m ≤ bậc n của P(x)
Giả sử chuỗi bit sai có vị trí từ thứ i đến thứ i+m-1, E(x) có dạng:
do vậy máy thu luôn dò ra lôi nếu chuỗi dữ liệu sai có chiều dài nhỏ hơn bậc của P(x)
4. Với đoạn dữ liệu sai có chiều dài > bậc của P(x)
- Trường hợp m-1 = n hay (m=n+1) Vì bậc của P(x) là n nên để có phép chia đúng P(x) phải có dạng xn+ +1 với các số hạng giữa xn và 1 phải hoàn toàn giống với các số hạng của
xm-1+ +1 thì máy thu không dò được lỗi Có n-1 số hạng giữa xn và 1 nên có 2n-1 tổ hợp và nếu các tổ hợp này có xác suất xảy ra như nhau thì xác suất máy thu không nhận được lỗi sẽ là 1/2n-1
- Trường hợp m>n+1, ta chấp nhận kết quả xác suất này là 1/2n
Lấy thí dụ mã CRC-32 (n=32), xác suất không dò ra một lỗi có chiều dài >33 bit là 1/2.1032 (tương đương với khả năng dò ra lỗi là 99,99999998%)
Tóm lại với n càng lớn việc máy thu không dò ra lỗi càng rất khó xảy ra
Trang 16V Các đa thức sinh thường dùng
Một đa thức sẽ được lựa chọn sao cho thỏa mãn:
- Nó sẽ không được chia hết bởi x
- Nó có thể được chia hết bởi (x+1)
Có 4 đa thức P(x) được dùng để tạo mã CRC thông dụng:
CRC_12 = x12 +x11 + x3 + x2 + x + 1
CRC_16 = x16+x15 + x2 + 1
CRC_CCITT = x16+x12 + x5 + 1
CRC_32 = x32+ x26+ x23+ x22 + x16+ x12 + x11+ x10+ x8+ x7 + x5 + x4 + x2+x+1 CRC_12 dùng truyền với ký tự 6 bit và khung FCS dài 12 bit
CRC_16 & CRC_CCITT dùng truyền ký tự 8 bit và khung FCS dài 16 bit (ở Mỹ và Âu châu)
CRC_32 Dùng trong mạng cục bộ (LAN) và một số ứng dụng của DOD (Department Of Defense)
Trang 17PHẦN III: CHƯƠNG TRÌNH MÔ PHỎNG
1. Giao diện chương trình
Private Sub Command1_Click()
Dim tem3 As String, tem4 As String
Dim y, x, z, tem1 As Long
Dim tem2, i As Integer
Trang 18If i = 0 Then
tem3 = Left(tem4, tem2)
Else tem3 = tem3 + Mid(tem4, tem2 + i, 1)
Do While (Len(tem3) < (tem2 - 1))
tem3 = 0 & tem3
LoopText2.Text = Text1.Text & tem3End Sub
Function Bin2Dec(Num As String) As Long Dim n As Integer
n = Len(Num) - 1
a = n
Trang 19LoopEnd Function
Function Dec2Bin(ByVal n As Long) As String
Do Until n = 0
If (n Mod 2) Then Dec2Bin = "1" & Dec2Bin Else Dec2Bin = "0" & Dec2Bin
n = n \ 2LoopEnd Function
Private Sub Command2_Click()End
Trang 20Combo1.AddItem "11000110011"
Combo1.AddItem "11000000000000101"
End SubPrivate Sub Timer1_Timer()Dim a As String
Dim b As String
a = Left(Label2.Caption, 1)
b = Right(Label2.Caption, Len(Label2.Caption) - 1)Label2.Caption = b + a
End Sub
Trang 21TỔNG KẾT
1. Tự đánh giá kết quả báo cáo đề tài.
Đề tài của nhóm em được hoàn thành ở mức cơ bản và cũng phát triển rộng thêm ở một
số chi tiết trong bài Các định nghĩa cũng như những nội dung trong bài, chúng e đã cố gắng làm ngắn gọn xúc tích và dễ hiểu nhất có thể
Còn một số ít các chi tiết chưa kịp hoàn thành xong như dự tính ban đầu Có thể còn một
số mặt hạn chế chưa được bổ sung Mong thấy khi đọc xong đề tài báo cáo của chúng em thì góp ý kiến cho nhóm em để lần sau nhóm em làm đề tài báo cáo được tốt hơn nữa