Data Link Layer
Position of the data-link layer
Error Detection and Correction
Error Detection and Correction ในการส่งข้อมูลในแต่ละครั้ง อาจจะเกิดการเปลี่ยนแปลงของข้อมูลได้ เนื่องจากสัญญาณรบกวน หรือ ความผิดพลาดอื่น ๆ เพราะฉะนั้นเพื่อให้มีความน่าเชื่อถือของข้อมูลส่ง จึงจำเป็นต้องมีการตรวจสอบ (Detection) และ แก้ไข (Correction) ความผิดพลาดก่อนที่จะนำข้อมูลที่ได้ไปใช้งาน
ชนิดของความผิดพลาด Types of Error ความผิดพลาดแบบบิตเดียว Single-Bit Error ความผิดพลาดแบบหลายบิต Burst Error
ความผิดพลาดแบบบิตเดียว มีเพียงแค่บิตเดียว ที่มีการเปลี่ยนแปลง เช่น จากรูป ผู้ส่งต้องการส่งข้อมูล 00000010 แต่ผู้รับได้รับข้อมูล 00001010
ความผิดพลาดแบบหลายบิต มี 2 บิต หรือมากกว่า ที่มีการเปลี่ยนแปลง เช่น จากรูป มีความผิดพลาดที่มีความยาว 8 บิต โดยนับจากบิตแรกที่ผิดพลาด จนถึงบิตสุดท้ายที่ผิดพลาด
Error Detection and Correction เพื่อตรวจสอบและแก้ไขข้อมูลที่ผิดพลาด จึงมีการส่งบิตพิเศษไปพร้อมกับบิตข้อมูล
Redundancy
วิธีในการตรวจสอบความผิดพลาดของข้อมูลมีดังต่อไปนี้ การตรวจสอบความผิดพลาดของข้อมูล Detection วิธีในการตรวจสอบความผิดพลาดของข้อมูลมีดังต่อไปนี้
วิธีตรวจสอบแบบพาริตี้ (Parity Check) Simple Parity Check ใช้บิตตรวจสอบ หรือ พาริตี้ (parity bit) ส่งไปพร้อมกับบิตข้อมูลจริง โดยการนับจำนวนของบิต 1 ทั้งหมด พาริตี้คู่ (even-parity) พาริตี้คี่ (odd-parity) Two-Dimensional check นำบิตของข้อมูลที่ต้องการส่งออกไปมาทำเป็นตาราง (table) โดยจะคำนวณหาพาริตี้บิตทั้งแนวนอน (row) และแนวตั้ง (column)
พาริตี้คู่ (Even-parity) ตรวจสอบว่าบิต 1 เป็นจำนวนคู่ใช่หรือไม่
ตัวอย่าง 1 สมมติว่า ผู้ส่งต้องการส่งคำว่า World โดยสามารถแปลงเป็น ASCII ได้ดังนี้ 1110111 1101111 1110010 1101100 1100100 เมื่อมีการเพิ่มพาริตี้บิตให้เป็นพาริตี้คู่ (จำนวนบิต 1 เป็นคู่) เข้าไป จะได้ดังนี้ 11101110 11011110 11100100 11011000 11001001 ตัวอย่าง 2 จากตัวอย่าง 1 เมื่อผู้รับได้รับข้อมูลที่ไม่มีความผิดพลาด 11101110 11011110 11100100 11011000 11001001 ทำการนับจำนวนบิต 1 ในแต่ละข้อมูลตัวอักษร จะได้เป็นจำนวนคู่ทั้งหมด (6,6,4,4,4) ดังนั้นแสดงว่าข้อมูลถูกต้อง
Example 3 จากตัวอย่าง 1 เมื่อผู้รับได้รับข้อมูลที่มีความผิดพลาด 11111110 11011110 11101100 11011000 11001001 ทำการนับจำนวนบิต 1 ในแต่ละข้อมูลตัวอักษร จะได้เป็น(7,6,5,4,4) ดังนั้นแสดงว่าข้อมูลมีความผิดพลาดเกิดขึ้น ผู้รับจะทำการยกเลิก และมีการส่งซ้ำอีกครั้ง * ในการตรวจสอบแบบ Simple parity check สามารถตรวจสอบได้เพียงความผิดพลาดแค่บิตเดียวเท่านั้น
Two-dimensional parity
ตัวอย่าง 4 สมมติว่ามีบล็อกข้อมูลที่ต้องการส่งมีดังนี้ 10101001 00111001 11011101 11100111 10101010 เมื่อข้อมูลมีความผิดพลาดแบบหลายบิตเกิดขึ้น (8 บิต) 10100011 10001001 11011101 11100111 10101010 ผู้รับทำการตรวจสอบพาริตี้บิต โดยมีบางบิตที่ไม่เข้ากฎของพาริตี้คู่ ทำให้บล็อกข้อมูลทั้งถูกยกเลิก
วิธีตรวจสอบแบบพาริตี้จะใช้การบวก แต่แบบ CRC จะใช้การหาร วิธีตรวจสอบแบบ Cyclic Redundancy Check (CRC) มีประสิทธิภาพสูงกว่าวิธีตรวจสอบแบบพาริตี้และใช้หลักการทำงานที่แตกต่างกัน วิธีตรวจสอบแบบพาริตี้จะใช้การบวก แต่แบบ CRC จะใช้การหาร แบบพาริตี้สามารถแทรกบิตตรวจสอบลงในข้อมูลได้ แต่แบบ CRC จะต้องนำบิตตรวจสอบไปต่อท้ายของข้อมูล
CRC generator and checker ถ้าเศษในการหารเป็น 0 แสดงว่าข้อมูลถูกต้อง แต่ถ้าไม่ใช่ 0 แสดงว่าข้อมูลผิดพลาด
สรุปวิธีหาบิตตรวจสอบ ถ้าตัวหารมีจำนวนบิตเท่ากับ n+1 บิตแล้วจะต้องเติมบิต 0 จำนวน n ตัวที่ส่วนท้ายของข้อมูล ใช้บิตข้อมูลลบด้วยตัวหาร (ใช้วิธี XOR) เมื่อลบแล้วผลที่ได้จากการลบ ถ้า บิตซ้ายสุดของเศษเป็น 1 ให้นำตัวหารมาเป็นตัวลบอีกครั้ง บิตซ้ายสุดของเศษเป็น 0 ให้นำ 0000 มาเป็นตัวลบ ทำในข้อ 2 จนกระทั่งไม่สามารถลบกันได้อีกแล้ว (จำนวนบิตของเศษน้อยกว่าจำนวนบิตของตัวหาร)จะถือได้ว่าเศษที่ได้จากการหารนั้นคือ บิตตรวจสอบ นำบิตตรวจสอบที่ได้ไปแทนที่บิต 0 จำนวน n ตัวที่ส่วนท้ายของข้อมูล
Binary division in a CRC generator Modulo -2 (XOR) 0 – 0 = 0 , 0 – 1 = 1 , 1 – 0 = 1 , 1 – 1 = 0
Figure 3.9 Binary division in CRC checker
Polynomial ปกติแล้วในการแทนบิตข้อมูลของตัวหารจะไม่ใช้รูปของเลขฐานสอง เนื่องจากค่อนข้างยาวและจำได้ยากแต่จะเขียนให้อยู่ในรูปของโพลิโนเมียล
Table 3.1 Standard polynomials Name Polynomial Application CRC-8 x8 + x2 + x + 1 ATM header CRC-10 x10 + x9 + x5 + x4 + x 2 + 1 ATM AAL ITU-16 x16 + x12 + x5 + 1 HDLC ITU-32 x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1 LANs
ถ้าผลลัพธ์สุดท้ายเป็น 0 แสดงว่าข้อมูลถูกต้อง Figure 3.12 Checksum ถ้าผลลัพธ์สุดท้ายเป็น 0 แสดงว่าข้อมูลถูกต้อง
Checksum ฝั่งผู้ส่ง แบ่งข้อมูลออกเป็นเซ็กเมนต์ก่อน โดยแต่ละเซ็กเมนต์จะมีข้อมูล n บิต (ปกติจะแบ่งเป็นเซ็กเมนต์ละ 16 บิต) นำบิตข้อมูลของทุกเซ็กเมนต์มาบวกกันด้วยวิธีการแบบ 1’s complement ซึ่งจะได้ผลลัพธ์ออกมา n บิต นำมาทำคอมพลีเมนต์หรือทำการกลับบิตให้เป็นตรงกันข้าม (0 - 1, 1 - 0) ผลที่ได้จากการทำคอมพลีเมนต์คือบิตตรวจสอบที่ จะต้องนำไปต่อไว้ส่วนท้ายของบิตข้อมูลก่อนที่จะส่งออกไป
ตัวอย่าง 7 สมมติให้บล็อกข้อมูลทั้งหมดมีขนาด 16 บิต โดยแบ่งออกเป็นบล็อกละ 8 บิต เพื่อส่งไปยังผู้รับ 10101001 00111001 บวกตัวเลขแบบ 1’s complement 10101001 00111001 ------------ Sum 11100010 Checksum 00011101 ข้อมูลที่จะส่งไป คือ 10101001 00111001 00011101
Checksum ฝั่งผู้รับ รวบรวมข้อมูลแต่ละเซ็กเมนต์ๆ ละ n บิต นำข้อมูลของทุกเซ็กเมนต์มาบวกกันด้วยวิธีการแบบ 1’s complement นำผลรวมของทุกเซ็กเมนต์มาทำคอมพลีเมนต์ ถ้าผลลัพธ์ที่ได้เท่ากับ 0 แสดงว่าข้อมูลชุดนั้นถูกต้อง แต่ถ้า ผลลัพธ์ที่ได้ไม่เท่ากับ 0 แสดงว่าข้อมูลชุดนั้นมีความผิดพลาด
ตัวอย่าง 8 สมมติว่าผู้รับได้รับข้อมูลจากตัวอย่าง 7 และ ไม่มีความผิดพลาด 10101001 00111001 00011101 ผู้รับทำการบวกตัวเลขแบบ 1’s complement จะได้เป็นบิต 1 ทั้งหมด แล้วทำการ complement อีกครั้งจะได้ค่าเป็น 0 แสดงว่า ข้อมูลไม่มีความผิดพลาด 10101001 00111001 00011101 Sum 11111111 Complement 00000000
ตัวอย่าง 9 สมมติว่ามีความผิดพลาดของข้อมูลจากตัวอย่าง 7 ดังนี้ สมมติว่ามีความผิดพลาดของข้อมูลจากตัวอย่าง 7 ดังนี้ 10101111 11111001 00011101 ทำการคำนวณ 10101111 11111001 00011101 Partial Sum 111000101 Carry 1 Sum 11000110 Complement 00111001 ผลลัพธ์ไม่เป็น 0 แสดงว่าข้อมูลมีความผิดพลาด
Forward Error Correction Retransmission Forward Error Correction
การแก้ไขความผิดพลาดของข้อมูลด้วยวิธี Forward Error Correction สามารถใช้ได้ในกรณีที่ข้อมูลมีความผิดพลาดเกิดขึ้นบิตเดียว โดยจะกำหนดให้ m เป็นบิตข้อมูล ส่วน r เป็นบิตตรวจสอบ ดังนั้นข้อมูลที่ต้องส่งจริงคือ m + r จากทฤษฏีของแฮมมิง (Hamming) เราสามารถเขียนความสัมพันธ์ระหว่างบิตข้อมูลและบิตตรวจสอบได้ดังนี้ ตัวอย่าง รหัสแอสกี้ (ASCII code) จะมีจำนวนบิตเท่ากับ 7 บิต
Number of redundancy bits r Table 3.2 Data and redundancy bits Number of data bits m Number of redundancy bits r Total bits m + r 1 2 3 5 6 4 7 9 10 11
Hamming Code วิธีในการกำหนดว่าบิตตรวจสอบควรจะต้องตรงไหนบ้าง ซึ่งจะแตกต่างกับหัวข้อก่อนหน้านี้ที่ว่าบิตตรวจสอบจะต้องอยู่ส่วนท้ายของข้อมูล
Figure 3.14 Positions of redundancy bits in Hamming code
Figure 3.15 Redundancy bits calculation
Figure 3.16 Example of redundancy bit calculation
Figure 3.17 Error detection using Hamming code
Data Link Control
Flow and Error Control การควบคุมอัตราการไหลของข้อมูล (Flow Control) การควบคุมความผิดพลาดของข้อมูล (Error Control)
กลไกในการควบคุมอัตราการไหลและ ความผิดพลาด ARQ (automatic repeat request ) protocols Stop - and – Wait Go - Back – N Selective - Repeat
Stop-and-Wait ARQ การทำงานโดยทั่วไป คือ ผู้ส่งหยุดรอจนกว่าจะได้รับ ACK (acknowledge) ถึงจะส่งข้อมูลต่อไป
Stop-and-Wait ARQ, เมื่อมีการสูญหายของ Frame ข้อมูล
ยกเลิกข้อมูล Frame 1 และรอรับ Frame 0 Stop-and-Wait ARQ, เมื่อมีการสูญหายของ ACK ยกเลิกข้อมูล Frame 1 และรอรับ Frame 0
ยกเลิกข้อมูล Frame 1 และรอรับ Frame 0 Stop-and-Wait ARQ, delayed ACK ยกเลิกข้อมูล Frame 1 และรอรับ Frame 0 ยกเลิก
Go-Back-N ARQ วิธีการคือ ส่งข้อมูลเป็นชุดข้อมูลแบบ Window
Window ฝั่งผู้รับ
ตัวแปรควบคุม
Go-Back-N ARQ, แบบทั่วไป
Go-Back-N ARQ, เมื่อมี Frame ข้อมูลสูญหาย
Go-Back-N ARQ: ปัญหาเกี่ยวกับขนาดของ Window ฝั่งผู้ส่ง ขนาด Window ฝั่งผู้ส่งจะต้องน้อยกว่า 2m , Window ฝั่งผู้รับเป็น 1 เสมอ
Selective-Repeat ARQ วิธีการ คล้ายกับ Go-Back-N แต่ Window มีขนาดเท่ากัน
Selective Repeat ARQ, เมื่อ frame ข้อมูลสูญหาย
ขนาด Window ทั้งสองฝั่งจะต้องเป็น 2m-1 Selective Repeat ARQ, ปัญหาเกี่ยวกับขนาดของ Window ฝั่งผู้ส่ง ขนาด Window ทั้งสองฝั่งจะต้องเป็น 2m-1