รูปไง


การใช้วิธี CRC (Cyclic Redundancy Checksum)


                     จากหลายวิธีที่ผ่านมา  จะพบว่ามีข้อเสียตรงที่ไม่สามารถตรวจจับข้อผิดพลาดได้ในบางกรณี  โดยเฉพาะข้อผิด
       พลาดแบบหลายบิตหรือที่เรียกว่า Burst Error จึงทำให้ความน่าเชื่อถือลดลงดังนั้นจึงเกิดวิธีการตรวจจับข้อผิดพลาด
       แบบ CRC ซึ่งเป็นวิธีหนึ่งที่นิยมใช้งานบนเครือข่ายท้องถิ่น  และจัดได้ว่าเป็นวิธีที่มีประสิทธิภาพสูงกว่า 2 วิธีแรกเนื่อง
       จากสามารถตรวจจับข้อผิดพลาดได้ครอบคลุมและแน่นอนกว่าโดยเฉพาะ CRC-32 บิตนั้นมีอัตราความแน่นอนในการ
       ตรวจจับข้อผิดพลาดได้มากถึง  99.99999998% จึงนิยมมาใช้งานบนเครือข่ายแลนอีเทอร์เน็ต

ในการคำนวณหา CRC นั้น สามารถทำได้ด้วยกระบวนการทางซอฟต์แวร์หรือฮาร์ดแวร์เพื่อช่วยในการคำนวณ แต่ส่วนใหญ่นิยมใช้วงจรฮาร์ดแวร์ในการคำนวณหา CRC มากกว่า เนื่องจากการพัฒนานั้นทำได้ง่าย อีกทั้งยังมีต้นทุน การพัฒนาที่ต่ำและมีความรวดเร็วสูง


รูปที่ 5 รูปแบบของเฟรมข้อมูลที่มีรหัสตรวจจับข้อผิดพลาดปะเข้าไปภายในเฟรม
หลักการของ CRC จะใช้รหัสโพลีโนเมียล (Polynomial Codes) ซึ่งมีข้อกำหนดว่าบิตซ้ายสุดและบิตขวาสุด ต้องมีค่าเป็น 1 เสมออีกทั้งรหัสโพลิโนเมียลจะต้องมีจำนวนบิตน้อยกว่าจำนวนบิตของข้อมูลคณิตศาสตร์โพลีโนเมียล จะเป็นลักษณะแบบมอดูโล (Modulo 2)ซึ่งจะไม่มีการใช้ Carry Bit ทั้งการบวกและการลบ หรือเป็นไปในลักษณะ Exclusive-OR นั่นเองโดยบิตที่นำมาบวกหรือลบกัน หากบิตตรงกันผลที่ได้จะเท่ากับ 0 ในขณะที่บิตต่างกัน ผลที่ได้ก็ จะเท่ากับ 1 ซึ่งเป็นไปในลักษณะดังรูปที่ 6


รูปที่ 6 ผลการปฏิบัติด้วยโอเปอเรชั่น Exclusive-OR


รูปที่ 7 โพลีโนเมียล และการแทนค่าเป็นตัวหาร
วิธีการคำนวณหา CRC จะนำสมการโพลีโนเมียลที่กำหนดขึ้นซึ่งก็คือ G(X)ไปหารกับเฟรมข้อมูลที่ต้องการส่ง ซึ่งก็คือ M(X)ที่ได้รวมบิตศูนย์ (n) เพิ่มเติมไว้แล้ว โดยผลลัพธ์ที่ได้จะถูกละทิ้งไป ให้พิจารณาเพียงเศษที่ได้จากการหาร ซึ่งก็ คือ R(X)หรือ Remainder เท่านั้นเฟรมข้อมูลที่ส่งไปยังปลายทางเรียกว่า T(X) ที่เกิดจากการนำ M(X) และเพิ่มต่อ ท้ายด้วยเฟรม R(X)ที่เรียกว่าFCS(Frame Check Sequence) ซึ่งโดยทั่วไปมักเรียกว่า CRC นั่นเอง ครั้นเมื่อสถานีต้นทาง ได้ส่งเฟรม T(X) ผ่านชั้นสื่อสารดาต้าลิงก์ด้วยวิธีการตรวจจับข้อผิดพลาดแบบ CRC ไปยังสถานีปลายทางฝั่งสถานี ปลายทางก็จะใช้รหัสโพลีโนเมียลที่เป็นรหัสชนิดเดียวกันกับฝ่ายส่งนำไปตรวจสอบข้อผิดพลาดด้วยการคำนวณโดย การนำ T(X)หารด้วย G(X) และจะพิจารณาจากเศษที่ได้จากการหาร หากเศษที่ได้มีค่าเป็นศูนย์นั่นหมายถึงข้อมูลที่ได้ รับนั้นถูกต้อง โดยสามารถสรุปรายละเอียดได้ดังต่อไปนี้ M(X)    คือเฟรมข้อมูลที่ต้องการส่ง G(X)    คือมาตรฐานของโพลีโนเมียลที่นำมาใช้ (Generator Polynomial) n        คือบิตศูนย์ที่นำมาผนวกเพิ่มเติม ด้วยการนำไปปะท้ายเฟรม M(X) โดยจำนวนของบิตศูนย์ จะมีจำนวนเท่ากับ (Degree) ของ G(X) R(X)    คือเศษที่ได้จากการคำนวณ (Remainder) (เกิดจากการนำ M(X) ที่ได้ผนวกกับบิตศูนย์ เพิ่มเติม แล้วหารด้วย G(X) โดยเศษที่ได้จากการหารก็คือ R(X)) T(X)    คือเฟรมที่ส่งไป ซึ่งเกิดจากนำ M(X) ปะด้วย R(X) โดยที่ T(X) = M(X) + R(X) จากตัวอย่างในที่นี้ สมมติว่าเฟรมข้อมูลที่ต้องการส่งไปคือ 1101011011 และใช้โพลีโนเมียล X4+X+1 ดังนั้น M(X)    = 1101011011 G(X)    = X4+X+1 = (1×X4) + (0×X3) + (0×X2) + (1×X1) + (1×X0) = 10011 เมื่อนำมาพิจารณาคุณสมบัติ ก็สามารถแสดงรายละเอียดได้ดังต่อไปนี้ 1. บิตซ้ายสุดและบิตขวาสุดของ G(X) มีค่าเป็น 1 นั่นถือว่าตรงคุณสมบัติ 2. จำนวนบิตของ G(X) มีค่าน้อยกว่า M(X) นั่นถือว่าตรงคุณสมบัติ 3. ดีกรีของ G(X) หรือ Highest Exponent เท่ากับ 4 ดังนั้นให้บิตศูนย์จำนวน 4 บิตต่อท้ายเฟรม M(X) ก็จะได้เท่ากับ 1101011011 0000 ครั้นได้พิจารณาคุณสมบัติและหาค่าต่างๆ ดังข้างต้นแล้ว ก็สามารถคำนวณหา CRC ได้ดังตัวอย่างรูปที่ 8 จากวิธีการคำนวณดังรูปที่ 8 เฟรมที่ส่งไปยังปลายทางก็คือ T(X)     = M(X) + R(X) = 1101011011 1110 หลังจากที่ได้ทำการคำนวณ CRC เป็นที่เรียบร้อยแล้ว ฝั่งส่งก็จะส่ง T(X) ไปยังปลายทาง เมื่อปลายทางได้รับ เฟรมดังกล่าวก็จะนำ T(X)ไปหารด้วยรหัสโพลีโนเมียลหรือ G(X) ที่เป็นรหัสเดียวกันกับฝั่งส่ง โดยผลลัพธ์จากการ คำนวณ T(X) / G(X) จะต้องหารลงตัว หรือมีเศษเป็นศูนย์เสมอในกรณีที่ตรวจจับไม่พบข้อผิดพลาด ซึ่งแสดงดังรูปที่ 9


รูปที่ 8 วิธีการคำนวณ CRC


รูปที่ 9 ฝั่งรับจะตรวจสอบความถูกต้องด้วยการนำ T(X) / G(X) โดยไม่พบข้อผิดพลาดเนื่องจากเศษมีค่าเป็นศูนย์
สำหรับในกรณีที่ฝั่งส่งรับตรวจจับข้อผิดพลาดพบ เช่น เฟรมข้อมูลที่ส่งไปยังปลายทางได้เกิดการเปลี่ยนแปลง จำนวนสองบิตด้วยกัน คือ 11010110111000 ผลจากการหารก็จะหารไม่ลงตัวนั่นหมายถึงตรวจจับพบข้อผิดพลาดแล้ว ซึ่งแสดงไว้ดังรูปที่ 10


รูปที่ 10 แสดงการตรวจจับพบข้อผิดพลาด เนื่องจากผลจากการคำนวณไม่ลงตัว
อย่างไรก็ตาม การคำนวณ CRC ที่ผ่านมา เป็นตัวอย่างการใช้รหัสโพลีโนเมียลที่มีดรีเท่ากับ 4 ทั้งนี้ก็เพื่อนำไป ใช้ประกอบเป็นตัวอย่างให้เกิดความเข้าใจง่ายเป็นหลักสำคัญ แต่มาตรฐานโพลีโนเมียลสากลที่นำมาใช้งานจริงและ สามารถรับประกันข้อผิดพลาดได้เป็นอย่างดีนั้นเป็นไปตามตารางดังรูปที่ 11


รูปที่ 11 มาตรฐานของโพลีโนเมียล
โดยเฉพาะ CRC-32 นั้นสามารถรับประกันความถูกต้องในการตรวจจับข้อผิดพลาดได้มากถึง 99.99% จึงถูก นำมาใช้งานบนเครือข่ายท้องถิ่นอย่างแลนอีเทอร์เน็ต