27 June 2012

Worm W32/Conficker

Worm W32/Conficker ทำงานอย่างไร

    * หนอนคอมพิวเตอร์ที่ชื่อ Win32/Conficker มีการติดต่อกันผ่านระบบเครือข่าย โดยผ่านทาง ช่องโหว่ของ Windows Server service (SVCHOST.EXE) หากหนอนตัวนี้สามารถเข้ามาในเครื่องคอมพิวเตอร์ของเราได้แล้ว มันจะเริ่มทำงานเมื่อมีการแชร์ไฟล์ มันจะทำการปิดบริการต่างๆ ของระบบ ปิดโปรแกรมด้านรักษาความปลอดภัย และทำการดาวน์โหลด ไฟล์มัลแวร์ จากอินเทอร์เน็ตและมันยังสามารถแพร่ระบาดผ่านทาง ไดร์ฟเก็บข้อมูลแบบพกพาได้อีกด้วย ดังนั้นผู้ใช้งานจึงไม่ควรทำการแชร์ไฟล์และควรจะตรวจสอบ ไดร์ฟเก็บข้อมูลแบบพกพา ก่อนใช้งานทุกครั้งหรืออาจจะทำการยกเลิกการเปิดไดร์ฟเก็บข้อมูลแบบ พกพาแบบอัตโนมัติ (คลิกที่นี่)

    * วิธีการแก้ไขเบื้องต้น
          o ทำการดาวน์โหลดเครื่องมือในการกำจัด W32/Conficker ได้จากเว็บต่างๆดังนี้
                + Remove Tool จาก Microsoft http://www.microsoft.com/downloads/details.aspx?FamilyID=ad724ae0-e72d-4f54-9ab3-75b8eb148356&displaylang=en
                + โปรแกรม Combofix http://www.bleepingcomputer.com/combofix/how-to-use-combofix
                + F-Secure
                  ดาวน์โหลด F-Downadup ได้ที่เว็บไซต์ ftp://ftp.f-secure.com/anti-virus/tools/beta/f-downadup.zip
                  ดาวน์โหลด FSMRT ได้ที่เว็บไซต์ ftp://ftp.f-secure.com/anti-virus/tools/beta/fsmrt.zip
          o ทำการ Update Patch ของระบบปฏิบัติการ window XP
                + Patch 833x86 http://www.microsoft.com/downloads/details.aspx?FamilyId=2996b9b6-03ff-4636-861a-46b3eac7a305&displaylang=en
          o และควรจะปิดการแชร์ไฟล์ต่างๆภายในเครื่องของท่าน
    * แหล่งที่มาของข้อมูล
          o http://www.microsoft.com/security/portal/Entry.aspx?Name=Win32/Conficker


Removal Tool สำหรับแก้ไวรัส Conficker หรือ Downadup

อัพเดทล่าสุด: 13 มีนาคม 2552

Removal Tool สำหรับแก้ไวรัส Conficker หรือ Downadup
สำหรับท่านที่โดนไวรัส Conficker หรือ Downadup เล่นงาน สามารถดาวน์โหลดเครื่องมีอ Removal Tool สำหรับแก้ไขได้จากเว็บไซต์ต่างๆ ดังนี้

• Enigma Software
ดาวน์โหลด cfremover ได้ที่เว็บไซต์ http://www.enigmasoftware.com/ หรือ คลิกที่นี่เพื่อดาวน์โหลด

• F-Secure
ดาวน์โหลด F-Downadup ได้ที่เว็บไซต์ ftp://ftp.f-secure.com/anti-virus/tools/beta/f-downadup.zip
ดาวน์โหลด FSMRT ได้ที่เว็บไซต์ ftp://ftp.f-secure.com/anti-virus/tools/beta/fsmrt.zip

• Microsoft
ดาวน์โหลด Malicious Software Removal Tool (MSRT)ได้ที่เว็บไซต์ http://support.microsoft.com/kb/890830

• BitDefender
ดาวน์โหลด BitDefender Removal Tool ได้ที่เว็บไซต์ http://www.bitdefender.com/VIRUS-1000462-en--Win32.Worm.Downadup.Gen.html หรือที่เว็บไซต์ http://www.bdtools.net/ หรือคลิกที่นี่เพื่อดาวน์โหลด (อัพเดท: 13 มี.ค. 52)

• McAfee
ดาวน์โหลด McAfee Stinger ได้ที่เว็บไซต์ http://vil.nai.com/vil/stinger/ หรือ http://download.nai.com/products/mcafee-avert/stinger10000482.exe

• Symantec
ดาวน์โหลด W32.Downadup Removal Tool ได้ที่เว็บไซต์
http://www.symantec.com/business/security_response/writeup.jsp?docid=2009-011316-0247-99 หรือ คลิกที่นี่เพื่อดาวน์โหลด

• Norman
ดาวน์โหลด Conficker Removal Tool ได้ที่เว็บไซต์
http://www.norman.com/Virus/Virus_removal_tools/54879/ หรือ http://download.norman.no/public/Norman_Conficker_Cleaner.exe

• Trend Micro
Trend Micro เรียกชื่อไวรัส Conficker หรือ Downadup ว่า WORM_DOWNAD.AD และได้ออก fixtool สำหรับกำจัดไวรัสตัวนี้โดยเฉพาะ สามารถดาวน์โหลดได้ที่เว็บไซต์ http://www.trendmicro.com/ftp/products/pattern/spyware/fixtool/SysClean-WORM_DOWNAD.zip

ดาวน์โหลดอัพเดท 958644 (MS08-067)
สามารอ่านรายละเอียดการดาวน์โหลดอัพเดท 958644 (MS08-067) ของวินโดวส์ทุกระบบได้ที่เว็บไซต์ http://www.microsoft.com/technet/security/Bulletin/MS08-067.mspx หรือดาวน์โหลดอัพเดทได้ตามรายละเอียดด้านล่าง
• Windows XP SP2 และ Windows XP SP3
• Windows Server 2003 SP1 และ Windows Server 2003 SP2
• Windows Vista และ Windows Vista SP1

20 June 2012

Meeting Room Booking System


Meeting Room Booking System
ไปหาดูโปรเจ็คใน SourceForge.net ค้นว่า "room booking"
ก็เจออยู่หลายตัว แต่ตัวที่น่าสนใจที่สุดก็คืออันนี้
Meeting Room Booking System (MRBS)
ล่าสุดเป็นเวอร์ชั่น 1.2.3 ออกมาได้เกือบปีนึงแล้ว
เห็นว่าเป็น php คิดว่าน่าจะแก้ไขปรับปรุงได้ง่ายและเร็วที่สุด
และที่สำคัญ จำนวนดาวน์โหลดมันเยอะดี แปลว่าค่อนข้างเป็นที่นิยม
ของเค้าคงดีจริง ก็เลยเอาปลอดภัยไว้ก่อน
วิธีติดตั้งก็ไม่ยาก ผู้พัฒนาเค้าเขียนเอกสารประกอบมาค่อนข้างละเอียด
ก็ทำตามนั้นได้เลย
อันดับแรกก็แตก zip file ลงไปวางไว้บน web server
ผมทำเป็น virtual host เลยต้องไปแก้ httpd.conf ของ Apache นิดหน่อย
เซิร์ฟเวอร์เดียววางมันซะเจ็ดแปดเวบ อาศัย user น้อย มันคงไม่ล่ม
ต่อไปก็สร้าง db ใน mySql ขึ้นมาก้อนนึง ตั้งชื่อว่า mrbs
เอา script ที่เค้าให้มา (tables.my.sql) รันไปปื้ดนึง ก็ได้ table มาเรียบร้อย
เค้ามี sample-data.sql มาให้ด้วย ดีมากเลย ไม่ต้องคิดเอง
(ถ้าใครใช้ PostgreSql ก็ใช้สคริปต์ในไฟล์ tables.pg.sql แทน)
แค่นี้ก็เสร็จเรียบร้อย ถ้าไม่มีอะไรผิดพลาด ก็ใส่ url ตามโดเมนที่เราตั้งไว้
มันควรจะแสดงผลออกมาได้คล้ายๆ ในรูปข้างบน
จากนั้นก็จะปรับแต่งอะไรก็ตามสะดวก
เริ่มที่ไฟล์ config.inc.php อ่านไปแก้ไปได้เลย
มีรายละเอียดและตัวอย่างให้ชัดเจน
ส่วนมากเป็นพวกค่าคงที่ทั้งหลาย ส่วนของ db ถ้าใช้ mySql อยู่แล้วก็ไม่ต้องแก้อะไร
ส่วนพวกตัวแปร $mrbs_admin
$mrbs_admin_email
$mrbs_company
ก็แก้เอาตามความต้องการ
ต่อไปเรื่อง user ถ้าตามค่า default ของโปรแกรม ตรง $auth["type"] = "config";
เป็นการเขียน user/pwd ลงไปแบบ hard code ใน config.inc.php
ถ้าไม่ซีเรียสอะไร วิธีนี้ก็สะดวกดี แต่ไม่ค่อยปลอดภัย
จะเห็นว่าเค้าใส่ user/pwd มาให้แล้ว 3 user คือ
administrator/secret
alice/a
bob/b
ถ้าอ่านในไฟล์ AUTHENTICATION จะทราบว่า
user จะมี 3 level คือ
Unknown user
Authenticated user
Administrator
ถ้าเป็น unknow ก็ดูได้หมดว่าห้องไหนใครจอง แต่แก้ไขไม่ได้
authen ก็จะดูได้หมด แต่แก้ได้เฉพาะของตัวเอง
admin ก็ทำได้ทุกอย่างตามระเบียบ
โปรแกรมทำไว้ค่อนข้างดี ทำให้ยืดหยุ่นในการเลือกใช้ระบบ log in มาก
นอกจากจะ hard code ตรงๆ แล้วก็ยังไปลิงค์ใช้กับระบบ user/pwd อื่นได้
อาทิ db, external db, pop3, imap, ldap ฯลฯ
ผมเลือกตามหลักสากลนิยมคือ db ก็จัดการแก้
$auth["type"] เปลี่ยนจาก "config" เป็น "db" ซะ
แล้วก็ log in เข้าไปด้วย administrator/secret ก่อน
กดเข้าไปที่ลิงค์ User list ระบบจะสร้างตาราง users ให้เราสามารถ add user เข้าไปได้
ให้ add user administrator เป็นคนแรก จากนั้นก็ตามใจเลยครับ
แล้วกลับไป comment ที่บรรทัด $auth["user"] ใน config.inc.php ให้หมด
เราก็จะใช้ user/pwd จาก db อย่างเดียว
กลับมาดูที่หน้าตาโปรแกรม จะเห็นว่าช่วงเวลาที่กำหนดมาให้เป็นช่วงละ 30 นาที
ตั้งแต่ 7 โมงเช้าถึง 1 ทุ่ม ถ้าอยากได้มากน้อยกว่านี้ก็ไปแก้ที่ config.inc.php ที่ตัวแปร
$resolution = 1800; อันนี้เท่ากับ 30 นาที
$morningstarts = 7; เริ่ม 7 โมงเช้า
$eveningends = 19; สิ้นสุดที่ 1 ทุ่ม
ต่อไปมาดูที่ระบบภาษา โปรแกรมเตรียมภาษาและคำแปลมาให้มากมาย
และแน่นอน ภาษาไทย...มันจะไม่มี!!!
ค่าเริ่มต้นมันจะไปที่ lang.en คือภาษาอังกฤษ เราก็จัดการ copy lang.en เป็น lang.th ซะ
แล้วก็ปรับปรุงแก้ไข lang.th ตามใจชอบเลย แปลให้มันตรงๆ ก็แล้วกัน
แล้วกลับไปแก้ที่ config.inc.php ตรง
$default_language_tokens แก้จาก "en" เป็น "th"
$disable_automatic_language_changing แก้จาก 0 เป็น 1
เป็นอันเสร็จพิธี ต่อไปก็เหลือการทดลองใช้งานให้คล่องก็เรียบร้อย...
อัพเดท (12 Aug. 2008): ช่วงนี้มีคน google เข้ามาเจอหน้านี้บ่อย
แล้วมีปัญหาในการใช้งาน มาโพสถามผม ซึ่งต้องขออภัยจริงๆ ที่หลายๆ กรณีผมช่วยตอบ
หรือแก้ปัญหาให้ไม่ได้ เนื่องจากบล็อกนี้ผมเขียนขึ้นเป็นบันทึกช่วยจำของตัวเองเมื่อกว่า 2 ปีก่อน
ซึ่งทำตามวิธีของตัวเอง สภาพแวดล้อมของตัวเอง ซึ่งถ้าใครอ่านแล้วทำตามได้ก็ยินดีด้วยครับ
ส่วนถ้าติดปัญหา ผมก็จนปัญญาเหมือนกันครับ
วิธีที่ดีที่สุดคือ RTFM
-----------------------------------------------------
-----------------------------------------------------

TCP และ UDP

TCP และ UDP เป็นโพรโตคอลในทรานสปอร์ตเลเยอร์ของตระกูล TCP/IP ที่ให้บริการแก่แอพพลิเคชันทั่วไป และโพรโตคอลในแอพพลิเคชันเลเยอร์ (รวมไปถึง HTTP, SMTP, SNMP, FTP, และ Telnet) ซึ่งทั้งสองโพรโตคอลนี้ จะใช้บริการของ IP ในการส่งแพ็กเกตไปยังระบบเครือข่ายปลายทาง โดยการส่งข้อมูลของ TCP จะเป็นแบบ connection-oriented และรับรองความถูกต้องของข้อมูล (reliable) ในขณะที่ UDP จะเป็นแบบ connectionless และไม่รับรองความถูกต้องของข้อมูล (unreliable) โดยทั้งสองโพรโตคอลจะส่งข้อมูลแบบ byte-stream ซึ่งเราจะอธิบายถึงความหมายของคำเหล่านี้ในภายหลัง
โพรโตคอลแบบ connection-oriented จะสร้างลิงก์จากต้นทางไปถึงปลายทางก่อนที่จะส่งข้อมูล การทำงานของ ATM และเฟรมรีเลย์ก็เป็นแบบ connection-oriented เช่นกัน แต่ว่าโพรโตคอลทั้งสองนี้ทำงานในดาต้าลิงก์เลเยอร์ ไม่ใช่ในทรานสปอร์ตเลเยอร์ การติดต่อผ่านทางโทรศัพท์ก็นับเป็นการทำงานแบบ connection-oriented ด้วยเช่นกัน
โพรโตคอลแบบที่รับรองความถูกต้องของข้อมูล (reliable) จะช่วยป้องกันความผิดพลาดที่เกิดขึ้นในระหว่างการส่งข้อมูล เมื่อคุณได้รับแพ็กเกตที่ปลายทางแล้ว คุณสามารถเปรียบเทียบข้อมูล checksum ที่อยู่ในแพ็กเกต กับ checksum ที่ได้จากการคำนวณของอัลกอริทึม เพื่อตรวจสอบว่าข้อมูลผิดพลาดหรือไม่ ถ้าใช่ คุณก็ต้องส่งแพ็กเกตนั้นซ้ำอีกครั้ง ดังนั้นโพรโตคอลชนิดนี้จึงต้องมีวิธีการที่ยอมให้เครื่องที่ปลายทางส่งสัญญาณมายังต้นทาง ในกรณีที่ข้อมูลเกิดความผิดพลาดขึ้น เมื่อข้อมูลถูกแบ่งเป็นหลายแพ็กเกตแล้ว อาจเดินทางมาถึงปลายทางโดยไม่เรียงตามลำดับของแพ็กเกตก็เป็นได้ ดังนั้นตัวโพรโตคอลจึงต้องมีความสามารถในการตรวจเช็กลำดับของแพ็กเกต, จัดเก็บแพ็กเกตไว้ในบัฟเฟอร์, และส่งแพ็กเกตที่เรียงลำดับเรียบร้อยแล้วไปยังแอพพลิเคชันเลเยอร์ต่อไป อีกทั้งต้องตรวจสอบได้ว่า เมื่อใดมีการส่งข้อมูลซ้ำ และทิ้งข้อมูลซ้ำนั้นไป ในกรณีที่เกิดการผิดพลาดในการสื่อสารโพรโตคอลอาจต้องส่งข้อมูลเดิมนั้นซ้ำอีกครั้ง หรืออาจต้องสร้างลิงก์เชื่อมต่อระหว่างต้นทางกับปลายทางขึ้นมาใหม่ ดังนั้นจึงจำเป็นต้องมีระบบการนับเวลา (timer) เพื่อใช้ในการรอสัญญาณตอบรับ (acknowledgement) จากเครื่องที่อยู่ฟากตรงข้าม
สำหรับโพรโตคอลแบบ byte-stream จะไม่ทำงานกับหน่วยของข้อมูลแบบอื่นนอกเหนือจากหน่วย "ไบต์" ซึ่ง TCP จะไม่สามารถประกอบไบต์เป็นโครงสร้างข้อมูลภายในแพ็กเกตได้ รวมถึงไม่สามารถทำงานในระดับบิตได้เช่นกัน โดยตัว TCP จะทำงานได้แต่เพียงการส่งตัวอักษรขนาด 1 ไบต์ ในลักษณะของสายอักขระแบบไม่มีโครงสร้างไปยังปลายทาง
โพรโตคอลแบบ connectionless จะไม่สร้างลิงก์ผ่านระบบเครือข่ายก่อนที่จะส่งข้อมูล แต่โหนดระหว่างทางแต่ละตัว จะค้นหาเส้นทางในการส่งแพ็กเกต (หรืออาจเรียกว่า ดาต้าแกรม สำหรับในกรณีเช่นนี้) อย่างเป็นอิสระต่อกัน เมื่อปราศจากลิงก์ระหว่างต้นทางกับปลายทาง โพรโตคอลชนิดนี้ อย่าง UDP จะไม่รับรองความถูกต้องของข้อมูล (unreliable) เมื่อแพ็กเกตของ UDP ถูกส่งผ่านไปยังระบบเครือข่าย ผู้ส่งจะไม่มีทางทราบว่าแพ็กเกตไปถึงปลายทาง นอกเสียจากว่าโพรเซสในแอพพลิเคชันเลเยอร์ส่งสัญญาณตอบรับกลับมา การตรวจสอบว่ามีการส่งข้อมูลซ้ำ หรือแพ็กเกตไม่มาตามลำดับ ก็ไม่สามารถทำได้เช่นกัน แม้ว่าในระบบเครือข่ายยุคใหม่นี้ การสื่อสารผ่าน UDP จะมีแนวโน้มในการรับส่งข้อมูลผิดพลาดน้อยลงมาก แต่คุณก็คงจะเรียกการทำงานเช่นนี้ว่า reliable ไม่ได้เช่นกัน
ส่วนของไอพีแพ็กเกตที่อยู่ถัดจากส่วนของไอพีเฮดเดอร์ โดย 16 บิตแรกจะแสดงหมายเลขพอร์ตต้นทาง ส่วน 16 บิตหลังจะเป็นหมายเลขพอร์ตปลายทาง หมายเลขพอร์ตจะช่วยให้เครื่องไอพีโฮสต์สามารถรับส่งข้อมูลหลากหลายชนิด ไปยังไอพีแอดเดรสหนึ่งในเวลาเดียวกันได้ หมายเลขไอพีแอดเดรสขนาด 32 บิต และหมายเลขพอร์ตขนาด 16 บิต จะรวมกันเป็นระบบซ็อกเกตที่ใช้กันอยู่ทั่วไปในระบบปฏิบัติการยุคใหม่ ซึ่งซ็อกเกตต้นทาง และซ็อกเกตปลายทาง จะรวมกันเป็นหนึ่งคอนเน็กชันของ TCP โดยจะมีพอร์ตทั้งหมดอยู่ 216 หรือ 65,536 พอร์ต ซึ่งพอร์ต 1024 พอร์ตแรก จะเป็นพอร์ตที่รู้จักกันดีและถูกใช้กันอยู่ทั่วไป (well-known port) ทั้งหมดนี้ถูกตั้งค่าไว้ตั้งแต่แรก สำหรับนำมาใช้งานในโพรโตคอลบนแอพพลิเคชันเลเยอร์ ยกตัวอย่างเช่น HTTP จะใช้พอร์ต 80 ในขณะที่ POP3 จะใช้พอร์ต 110 ส่วนแอพพลิเคชันอื่นก็สามารถใช้หมายเลขพอร์ตที่สูงกว่านี้ได้ ส่วนหมายเลข sequence number และ acknowledgement number นั้นเป็นกุญแจสำคัญสำหรับการตรวจสอบความถูกต้องของข้อมูล เมื่อสร้างคอนเน็กชันของ TCP แล้ว ผู้ส่งจะส่งหมายเลข sequence number พร้อมกับแพ็กเกตไปยังผู้รับ ผู้รับจะบวก 1 เข้ากับหมายเลข sequence number แล้วเก็บหมายเลขนั้นไว้ใน acknowledgement number ของแพ็กเกตตอบรับ เพื่อบอกถึงหมายเลขของไบต์ถัดไปที่ควรถูกส่งมา จากนั้นก็จะส่งแพ็กเกตตอบรับกลับไปยังผู้ส่ง เมื่อการสื่อสารข้อมูลเริ่มต้นขึ้น หมายเลข sequence และ acknowledgement จะถูกใช้ตรวจสอบว่าข้อมูลไบต์ใดที่ถูกส่งไปแล้ว และข้อมูลใดที่ถูกตอบกลับมาแล้ว เนื่องจากว่าหมายเลขทั้งสองนี้แต่ละหมายเลขจะใช้พื้นที่ 32 บิต ทำให้มีค่าได้ทั้งหมด 232 ค่า โดยแต่ละหมายเลขจะมีค่าได้ตั้งแต่ 0 ไปจนถึง 4,294,967,295 และวกกลับมาที่ 0 เมื่อเกินค่าสูงสุดแล้ว ส่วนฟิลด์ของ HLEN ขนาด 4 บิตจะบอกถึงจำนวนของเวิร์ดขนาด 32 บิตที่ส่วนเฮดเดอร์มีอยู่ ข้อมูลส่วนนี้จำเป็นมาก เพราะว่าเฮดเดอร์มีฟิลด์บางฟิลด์ที่เป็นออปชัน คืออาจมีหรือไม่มีก็ได้ ซึ่งฟิลด์ HLEN นี้ก็จะบอกถึงตำแหน่งในแพ็กเกตว่าเฮดเดอร์จบที่ใด และข้อมูลจริงเริ่มต้นตรงไหน
ผู้ออกแบบ TCP ไม่ได้ใช้พื้นที่ 6 บิตถัดไป เนื่องจากต้องการเก็บไว้ใช้สำหรับการพัฒนาในอนาคต ซึ่งตั้งแต่เกิด RFC793 (Transmission Control Protocol) จนถึง1981 ก็ไม่มีใครจำเป็นจะต้องใช้บิตสำรองเหล่านี้เลย Jon Postel และกลุ่มผู้ร่วมพัฒนาเหล่านั้นคงจะระวังกันเกินกว่าเหตุไปหน่อย
สำหรับอีก 6 บิตถัดไปนั้น แต่ละบิตจัดเป็นแฟล็ก เมื่อแฟล็ก URG (urgent) มีค่า 1 จะบอกว่าข้อมูลในฟิลด์ urgent pointer ในเฮดเดอร์นั้นเป็นข้อมูลสำคัญ ส่วนแฟล็ก ACK (acknowledgement) ใช้บอกว่าหมายเลข acknowledgement นั้นสำคัญ (นั่นคือเป็นแพ็กเกตตอบรับนั่นเอง) แฟล็ก SYN (synchronization) บอกว่าหมายเลข sequence เป็นข้อมูลสำคัญ (นั่นหมายถึง เลข acknowledgement ไม่สำคัญไปด้วย เพราะว่าแพ็กเกตนั้นจะไม่ใช่แพ็กเกตตอบรับ) แฟล็ก PSH (push) ช่วยป้องกันข้อมูลจากการที่ต้องรอถูกส่งและรอรับการจัดการโดยโพรเซสผู้รับ แฟล็ก RST (reset) ใช้ปิดคอนเน็กชันของการสื่อสาร ส่วนแฟล็ก FIN (finish) ใช้บอกว่าผู้ส่งหมดข้อมูลที่ต้องการส่งแล้ว
ฟิลด์ window ขนาด 16 บิตนั้นจะบอกถึงขนาดของ sliding window ซึ่งใช้บอกผู้ส่งว่าตัวเองพร้อมจะรับข้อมูลจำนวนกี่ไบต์ โพรโตคอล TCP จะควบคุมการไหลของข้อมูลและภาวะการสื่อสารติดขัด โดยปรับที่ขนาดของ window นี่เอง ซึ่งถ้าค่านี้เท่ากับ 0 จะเป็นการบอกกับผู้ส่งว่าผู้รับไม่สามารถรับข้อมูลเพิ่มได้อีกในขณะนี้ และจะส่งแพ็กเกตตอบรับพร้อมค่า window ใหม่เมื่อสามารถรับข้อมูลได้อีก โดย window ที่มีขนาดใหญ่จะทำให้ส่งข้อมูลออกไป แม้ในขณะที่ยังไม่ได้รับสัญญาณตอบรับ ได้มากที่สุดถึง 65,536 ไบต์ ณ ช่วงเวลาใดเวลาหนึ่ง แต่ภาวะการสื่อสารติดขัด (congestion) ที่เกิดขึ้นเมื่อไทเมอร์ของ retransmission หมดลงก่อนที่จะได้รับสัญญาณตอบรับ จะทำให้ขนาดของ window ลดลงไปครึ่งหนึ่ง ส่งผลให้อัตราเร็วในการสื่อสารลดลงไปอย่างมาก
ฟิลด์ checksum ขนาด 16 บิต จะป้องกันความปลอดภัยของข้อมูลในแพ็กเกต รวมไปถึงฟิลด์บางฟิลด์ภายในเฮดเดอร์ ผู้ส่งจะคำนวณค่า checksum และใส่ค่าที่คำนวณได้ไว้ในฟิลด์นี้ จากนั้นผู้รับจะหาค่า checksum นี้ใหม่ โดยคำนวณจากแพ็กเกตที่ได้รับ จากนั้นนำค่าที่ได้ไปเปรียบเทียบกับค่าในฟิลด์นี้ ถ้าเท่ากัน ข้อมูลก็น่าจะปลอดภัย และมีความถูกต้อง
ค่า urgent pointer ขนาด 16 บิต จะชี้ไปที่ไบต์สุดท้ายของข้อมูลเร่งด่วนในกรณีที่แฟล็ก urgent มีค่าเป็นหนึ่ง ส่วนฟิลด์ options นั้นอาจมีจำนวนของเวิร์ด (32 บิต) ได้ตั้งแต่ 0 เวิร์ดหรือมากกว่านั้น เพื่อใช้เพิ่มความสามารถของโพรโตคอล TCP โดยค่าของ options ที่นิยมใช้กันมากที่สุดนั้นจะรองรับขนาดของ window ได้มากกว่า 65,536 ไบต์ ช่วยให้ลดเวลาในการรอสัญญาณตอบรับ โดยเฉพาะอย่างยิ่งในกรณีของการรับส่งข้อมูลด้วยความเร็วสูง
การทำงานของ TCP นั้นต้องใช้ไทเมอร์จำนวนมาก ไทเมอร์สำหรับการส่งข้อมูลเดิมซ้ำ จะเริ่มเมื่อข้อมูลถูกส่งไป และจะหยุดเมื่อได้รับสัญญาณตอบรับจากผู้รับ ถ้าเวลาหมดก่อนที่จะได้รับสัญญาณนั้น ข้อมูลเดิมจะถูกส่งซ้ำอีกครั้ง การตั้งเวลาของไทเมอร์ให้พอเหมาะนับเป็นปัญหายุ่งยากอย่างหนึ่ง ถ้านานไป โพรโตคอลก็จะเสียเวลาในการรอ แม้ว่าในขณะนั้นข้อมูลจะสูญหายไประหว่างทางแล้วก็ตาม แต่ถ้าเร็วไป ข้อมูลเดิมก็จะถูกส่งซ้ำไปเป็นจำนวนมาก โดยเฉพาะในกรณีที่เกิดความล่าช้าในการรับส่งสัญญาณตอบรับ ซึ่งในปัจจุบัน ค่าไทเมอร์นี้จะถูกตั้งโดยดูจากสถานะ และสภาพแวดล้อมของระบบเครือข่าย
ไทเมอร์ persistence ถูกใช้เพื่อป้องกันไม่ให้เกิดภาวะ deadlock ขึ้น ถ้าเน็ตเวิร์กได้รับแพ็กเกตตอบรับที่มี window ขนาด 0 และจากนั้นไม่ได้รับแพ็กเกตตอบรับที่จะใช้ในการเริ่มต้นการสื่อสารใหม่ ไทเมอร์นี้ก็จะหมดเวลาและส่งสัญญาณตรวจเช็กไป ซึ่งค่าที่ได้รับกลับมาจะเป็นขนาดของ window (ซึ่งอาจจะยังเป็น 0 อยู่ โดยในกรณีนี้ ไทเมอร์จะทำงานเหมือนเดิมใหม่อีกครั้ง)
ไทเมอร์ keepalive จะใช้เช็กว่า ยังมีโพรเซสทำงานอยู่ที่อีกฟากหนึ่งของคอนเน็กชันหรือไม่ หลังจากไม่มีการทำงานได้ระยะหนึ่ง ตัวไทเมอร์นี้จะปิดคอนเน็กชันลงถ้าไม่มีสัญญาณตอบรับกลับมา
ในการปิดคอนเน็กชันนั้น ไทเมอร์ที่ใช้ปิดคอนเน็กชันจะตั้งเวลาให้มีค่าเป็นสองเท่าของค่าอายุของแพ็กเกตที่มากที่สุด (maximum packet lifetime) เพื่อให้แน่ใจว่า ไม่มีข้อมูลสื่อสารค้างอยู่ในคอนเน็กชันนั้นก่อนที่ตัวเองจะถูกปิด
ไม่ว่ากระบวนการการรับส่งข้อมูลจะถูกสร้างให้มีประสิทธิภาพเพียงใด จำนวนแพ็กเกตที่สูญหายไปแม้เพียงเล็กน้อย ก็สามารถส่งผลกระทบรุนแรงต่อทรูพุตของคอนเน็กชันบน TCP เนื่องจากโพรโตคอลจะทราบว่าแพ็กเกตที่หายไปหรือไม่ ก็ต่อเมื่อหมดเวลาของไทเมอร์แล้วเท่านั้น และโพรเซสผู้รับจำเป็นต้องส่งข้อมูลตามลำดับ การส่งข้อมูลเดิมซ้ำในกรณีที่ข้อมูลสูญหายจะทำให้การสื่อสารข้อมูลหยุดชะงักจนกว่าจะได้รับข้อมูลที่หายไปนั้น การส่งข้อมูลซ้ำเช่นนี้ส่งผลให้ลิงก์ของ TCP มีประสิทธิภาพขึ้นๆ ลงๆ ในบางครั้ง
ถ้านำโครงสร้างของแพ็กเกต UDP มาเปรียบเทียบกับแพ็กเกตของ TCP แล้ว จะเห็นได้ชัดว่า UDP ขาดกลไกอันซับซ้อนในการควบคุมและรับรองความถูกต้องของข้อมูลเหมือนดังที่มีอยู่ใน TCP หมายเลขพอร์ตต้นทาง และปลายทางของ UDP ยินยอมให้มีการทำงานกับแอพพลิเคชันหลายตัวในเครื่องเดียวกันได้ เหมือนกับใน TCP ส่วนค่าในฟิลด์ UDP length จะเท่ากับความยาวของเฮดเดอร์ขนาดสองไบต์ รวมกับความยาวของข้อมูลจริง โดยค่าในฟิลด์ checksum จะช่วยตรวจสอบความถูกต้องและปลอดภัยของข้อมูล (ในปัจจุบันนี้ แอพพลิเคชันจำนวนมากที่ใช้ UDP เช่น โปรแกรมรับส่งสัญญาณเสียง จะไม่ใช้ประโยชน์จากความสามารถนี้ และจะไม่ส่งข้อมูลที่สูญหายหรือผิดพลาดไปซ้ำอีกครั้ง แม้ว่าจะทราบถึงความผิดพลาดนั้นก็ตาม)
TCP นับเป็นโพรโตคอลสำหรับการรับส่งข้อมูลที่ให้ความสำคัญกับความถูกต้องของข้อมูลมากกว่าประสิทธิภาพ ในขณะที่ UDP เป็นตัวเลือกที่ดีที่สุดในกรณีที่ประสิทธิภาพมีความสำคัญกว่า ดังเช่นในแอพพลิเคชันทางด้านมัลติมีเดีย UDP ยังนับเป็นตัวเลือกที่ดีสำหรับการสื่อสารข้อมูลที่ใช้ระยะเวลาที่สั้นมากจนเวลาที่เสียไปในการสร้างลิงก์นับเป็นส่วนใหญ่ของการสื่อสารทั้งหมด ยกตัวอย่างเช่น การแลกเปลี่ยนข้อมูลของ DNS สำหรับการตัดสินใจใช้ UDP ใน SNMP นั้น 
ส่วนหนึ่งมาจากความเชื่อของผู้ออกแบบว่า ด้วยโอเวอร์เฮดของ UDP ที่น้อยกว่า TCP น่าจะทำให้ UDP มีโอกาสที่ดีกว่าในการรับส่งข้อมูลด้านการจัดการในขณะที่การสื่อสารบนเครือข่ายกำลังติดขัด เมื่อพิจารณาถึงฟังก์ชันการทำงานของ TCP ที่มีเป็นจำนวนมาก ในบางครั้งก็ก่อให้เกิดผลลัพธ์ที่คาดเดาไม่ได้ แต่ถ้ากล่าวถึงคอนเน็กชันแบบ end-to-end ที่รับรองความถูกต้องของข้อมูลจาก TCP นั้น ก็เชื่อว่าน่าจะสามารถทำงานกับแอพพลิเคชันระบบเครือข่ายได้เกือบทั้งหมดในอนาคตอันใกล้นี้

01 June 2012


RAID คืออะไร ??RAID (Redundant Array of Inexpensive Disk) คือการนำเอา Harddisk ตั้งแต่ 2 ตัวขึ้นไปมาทำงานร่วมกันเสมือนเป็น harddisk ตัวเดียวที่มีประสิทธิภาพสูงขึ้น หรือมีโอกาสที่จะสูญเสียข้อมูลน้อยลงในกรณีที่เกิดความผิดพลาดของ hardware (fault tolerance) กลุ่มของ harddisk ที่เอามาทำงานร่วมกันในเทคโนโลยี RAID จะถูกเรียกว่า disk array โดยระบบปฏิบัติการและ software จะเห็น harddisk ทั้งหมดเป็นตัวเดียว ซึ่งการทำ RAID นี้นอกจากจะเป็นการเพิ่มประสิทธิภาพของการเก็บรักษาข้อมูลแล้ว ยังเป็นการประหยัดอีกด้วย เพราะว่ายิ่ง harddisk มีความจุมากเท่าไหร่ ราคาของมันก็จะยิ่งสูงขึ้นเท่านั้น ดังนั้น สำหรับงาน ที่จำเป็นต้องใช้พื้นที่ในการเก็บข้อมูลมากๆ อย่าง Database Server ถ้าเราเลือกใช้ harddisk ความจุมากๆ เพียงตัวเดียว ในการเก็บข้อมูลหรือที่เรียกกันว่าเป็นการใช้ harddisk แบบ SLED หรือ Single Large Expensive Disk ราคาที่เราเสียไปกับ harddisk ตัวเดียวนั้น อาจจะไม่คุ้มค่าเท่ากับการใช้ harddisk ที่มีความจุต่ำกว่า (ซึ่งแน่นอนว่าราคาต้องถูกกว่าหลายเท่าด้วย) นำมาต่อเพื่อให้ทำงานร่วมกันหรือที่เรียกกันว่าเป็นการใช้ harddisk แบบ RAID
เทคโนโลยี RAIDความเป็นมา ของ RAID Stripping และ Parity ระดับของ RAID RAID 1, RAID 3 , RAID 5 ส่วนประกอบของ RAID การจัดการ RAIDความเป็นมา
    คำว่า RAID อ่านออกเสียงว่า "เหรดในลักษณะเดียวกันกับ พาเหรด      ในปี 1987 Patterson, Gibson และ Katz ซึ่งทำงานที่University of California    Berkeley ได้พิมพ์บทความเกี่ยวกับ A Case for Redundant Arrays of  Inexpensive Disks (RAID) โดยเอกสารนี้ได้บรรยายถึงชนิดของดิสก์อะเรย์ประเภทต่างๆ โดยเรียกชื่อย่อๆว่า RAID หลักการพื้นฐานของ RAID มาจากแนวคิดที่ว่า  เมื่อเอาดิสก์ที่มีความจุน้อยหลายๆตัวมารวมกัน    ประสิทธิภาพที่ได้จากการใช้งานจะมากกว่าใช้ดิสก์ขนาดใหญ่เพียงตัวเดียว   โดยเมื่อเอาดิสก์มารวมกันแล้วคอมพิวเตอร์จะต้องเห็นว่าเป็นดิสก์ขนาดใหญ่ตัวเดียว (เป็น Logical Drive)
       ครั้นต่อมา RAID ก็เปลี่ยนคำจำกัดความเป็น Redundant Array of independent  disks แปลไทยได้อย่างไม่สละสลวยว่า  ระบบเผื่อไว้แบบอะเรย์ของดิสก์ที่เป็นอิสระต่อกัน ฟังแล้วงงมั้ยงงมากครับ   RAID ก็คือ RAID ฟังแล้วง่าย แต่ไม่เข้าใจไปใหญ่ ลองนึกง่ายๆ ครับ  ถ้าเรามีฮาร์ดดิสก์เพียงตัวเดียว วันหนึ่งถ้าพังก็พังไปเลย ข้อมูลหายหมด  แต่ถ้านำฮาร์ดดิสก์หลายๆ ตัวมาต่อกัน เช่น ตัว ข้อดีคือ ได้ความจุเพิ่มขึ้น   แต่ถ้าตัวใดตัวหนึ่งพังก็จะเสียข้อมูลในฮาร์ดดิสก์ตัวนั้นไป  แต่จะป้องกันได้มากกว่า ถ้าหากเพิ่มฮาร์ดดิสก์เข้าไป ตัว  แล้วใช้ระบบการจัดแบ่งเก็บข้อมูลในแต่ละตัว พร้อมกัน แต่ในแต่ละตัวก็มีข้อมูลที่ซ้ำกัน หรือมีการเก็บ Parity ของอีกตัวไว้ ถ้าเกิดวันใดที่ตัวหนึ่งเกิดพังไป ข้อมูลในตัวที่พังก็ยังคงมีเก็บ    "สำรองเผื่อเสียไว้ การแก้ไข ก็เพียงเอาฮาร์ดดิสก์ใหม่มาเปลี่ยน แล้วค่อยๆ  ผ่องถ่ายข้อมูลที่ฮาร์ดดิสก์ตัวเก่าที่พังไปเคยฝากไว้กับฮาร์ดดิสก์ตัวอื่นลงมาใหม่ๆ ทำให้สมบูรณ์แบบ ทั้งหมดนั้นเรียกว่าระบบ Fault Tolerance    แปลเป็นไทยก็คือ "ระบบที่คงทนต่อความเสียหาย"
คือ  แทนที่ว่าฮาร์ดดิสก์พังไปตัวหนึ่งก็ต้อง "Down" เซิร์ฟเวอร์   ทำให้ระบบต้องหยุดชะงัก เพื่อป้องกันความเสียหายดังกล่าว  จะต้องสร้างระบบให้คงทนต่อความเสียหาย ฮาร์ดดิสก์พังไปแล้วหนึ่งตัว   ระบบยังทำงานต่อไปเหมือนไม่มีอะไรเกิดขึ้น โดยวิธีการนี้ จะต้องใช้RAID   ซึ่งเป็นหัวใจของการสร้าง "ดิสก์ที่คงทนต่อความเสียหาย"
 คำจำกัดความของ RAID คือ
                    เทคโนโลยีของหน่วยเก็บข้อมูลที่ใช้เพื่อปรับปรุงระบบให้มีความสามารถในการประมวลผลเกี่ยวกับการจัดเก็บข้อมูล   เทคโนโลยีดังกล่าวจะออกแบบเพื่อให้ระบบการจัดเก็บข้อมูลแบบอะเรย์มีความเชื่อถือได้   และเพื่อใช้ข้อดีของการนำประสิทธิภาพที่เพิ่มขึ้นจากการเพิ่มฮาร์ดดิสก์เข้าไปในระบบหลายๆ   ตัวเข้ามาใช้งาน นี่เขียนแบบวิชาการต้องแบบนั้น แต่อ่านไม่รู้เรื่องเลย    แปลง่ายๆ คือ ฮาร์ดดิสก์ที่ต่อกันเป็นสมาชิกของอะเรย์    (แบบเดียวกับทางคณิตศาสตร์ เรื่องของ อะเรย์)   แล้วทำอย่างไรให้ทำงานได้น่าเชื่อถือ แล้วการมีฮาร์ดดิสก์หลายๆ ตัว      และให้เขียนและอ่านหลายๆ ตัว พร้อมๆ กัน  จะได้ประสิทธิภาพดีกว่าเขียนและอ่านตัวเดียว ซึ่งต้อง"รอ"  ให้การเขียนเสร็จสิ้นเป็นคราวๆ ถึงจะเริ่มเขียนใหม่ได้  ประโยชน์อีกประการของ RAID คือ "เผื่อเสียคือ ถ้าตัวหนึ่งเสีย   อีกสลับตัวที่สำรองไว้ขึ้นมาทำงานโดยอัตโนมัติ  เพื่อให้มั่นใจว่าระบบนั้นจะคงทนต่อความเสียหาย ระบบดำเนินการต่อไปได้   โดยไม่ต้องถูกขัดจังหวะจากการเสียเวลาซ่อมแซม พูดง่ายๆ ฝรั่งเขาว่า disk       access will still continue normally with the failure transparent to the  host system คือ การใช้งานดิสก์ยังคงเกิดขึ้นอย่างปกติ ตัวที่เสีย       ระบบคอมพิวเตอร์ก็จะมองผ่านไป    ปัจจุบันการนำ RAID มาใช้งานนั้น เกี่ยวกับเซิร์ฟเวอร์เป็นส่วนใหญ่   เมื่อระบบเครือข่ายถูกพัฒนาขึ้นใช้ ความสำคัญของหน่วยเก็บข้อมูล (Storage  System) ก็ทวีความสำคัญขึ้น เพราะในเซิร์ฟเวอร์นั้น ถ้าหากว่าฮาร์ดดิสก์ชำรุด  ใช้งานไม่ได้ นอกจากจะสูญเสียข้อมูลที่เก็บไว้ในฮาร์ดดิสก์ไปทั้งหมดแล้วยังจะต้องเสียเวลาเพื่อรอให้การซ่อมแซมแล้วเสร็จ    ซึ่งหมายถึงการสูญเสียโอกาสทางธุรกิจ    
ประโยชน์จาก RAID 
1.เอื้อประโยชน์ในการรวมเอาพื้นที่จากฮาร์ดดิสก์หลายๆ ตัวเข้ารวมกันเป็น  "ก้อนก้อนเดียว 
2.ใช้ประโยชน์จากการ "เข้าถึงของฮาร์ดดิสก์แต่ละตัว ซึ่งหมายถึง  จะแบ่งข้อมูลออกเป็นบล๊อคย่อยๆ แล้วแยกกันไปเขียน (อ่านลงบนฮาร์ดดิสก์แต่ละตัว ทำให้ย่นระยะเวลาทำงาน และลดระยะเวลาคอย (Wait  State)
3. มีระบบ "เผื่อเสียโดยการทำ "Mirroring" หรือ Parity  การกระจายการเขียน-อ่านข้อมูล (Stripping) และพาริตี้ (Parity)
การกระจายการเขียน-อ่านข้อมูล (Stripping) และพาริตี้ (Parity) 2 กลไก  หัวใจของ RAID
                 การนำเอาดิสก์หลายๆ ตัวมารวมกันเป็นดิสก์อะเรย์ แล้วกำหนดให้เป็น Logical  Drive เพียงหนึ่งตัว นั้นมี "Stripping" เป็นหัวใจในการทำงาน กล่าวได้ว่า Stripping เป็นหลักการพื้นฐานของ RAID คือ เมื่อมีฮาร์ดดิสก์หลายๆ  ตัวมารวมกัน การเขียนข้อมูลชุดหนึ่งๆ ลงดิสก์ เพื่อให้ได้ประสิทธิภาพดีที่สุด  ต้องมีการ "กระจายข้อมูลลงไปในดิสก์ทุกตัวในอะเรย์  เรียกการกระจายเขียน-อ่านข้อมูลเหล่านี้ว่าStripping
                 กระบวนการ Stripping นั้นสิ่งที่สำคัญคือ I/O  เพราะต้องมีการเข้าถึงฮาร์ดดิสก์ในอะเรย์  ต้องจัดการให้ดิสก์ทุกตัวบรรจุข้อมูลที่ถูกเขียน-อ่าน (Access) ในสภาวะที่สมดุลกัน ยิ่ง RAID Controller ออกแบบเท่าไร ก็จะได้ประสิทธิภาพจาก  I/O มากขึ้น สำหรับตัวควบคุมอะเรย์แบบฮาร์ดแวร์ (RAID Controller)    การวัดประสิทธิภาพในการทำงาน สิ่งที่นำมาวัดประสิทธิภาพก็คือ I/O Performance
บันทึกเทคนิค
                 ทำไมถึงว่า I/O สำคัญ กรณีนี้ จะชี้ให้เห็นว่าถ้าหากเป็น file server นั้น I/O ยังมีความสำคัญไม่มากนัก เพราะ user จะไม่ค่อยเปิด/ปิด file เท่าไหร่ (เว้นแต่มีกรณีที่มีการนำเอา network drive เป็น swap space  แต่นั่นไม่ใช่ file request แล้ว เพราะการเปิดแต่ละครั้ง จะเป็นการเปิดเพื่อนำมาแก้ไข ซึ่งกว่าจะ save บางทีใช้เวลานานกว่า 10-15 นาที สมมุติว่ามีผู้ใช้ 20 คน เฉลี่ยเวลาที่จะต้องทำ I/O ก็ยังนานระดับเป็นนาที ซึ่งถือว่าไม่มากนัก แต่ถ้าเป็น database ที่ต้องทำงานระดับ record locking นั้น การเปิดข้อมูลมาแก้ไข 1 record จะมี I/O อย่างน้อย 3-4 ครั้ง (database open, record open, index  open, lock open) และเฉลี่ย ไม่เกิน 30 วินาทีก็ต้องมี I/O อีกรอบ  เพื่อ write ซึ่งแพงกว่า read มากเนื่องจากต้องมี concurrency control, journalizing, log ยิ่งพวก 2-phase commitment (เขียนchanged image ก่อน -> ลบ record เดิม -> เปลี่ยน changed image เป็น record ใหม่จะใช้ I/O ถึง เท่า เฉลี่ย 30 วินาที มี I/O ไม่น้อยกว่า 15 ครั้ง ยิ่งพวก banking หรือ online service เวลาการจัดการ record จะน้อยกว่า 10 วินาทีอีก
                 ถ้าประมาณว่าเฉลี่ย 15 วินาที มี I/O 15 หน หน/วินาที  ถ้ามีเครื่องแค่ 1,000 เครื่อง ที่เข้าจัดการ database อันนั้น  ลองจินตนาการว่าอะไรจะเกิดขึ้น เพราะจากตัวอย่างนั้นแค่ 1 database, 1 job (ที่ซ้ำซาก เหมือนกันเท่านั้น และยังไม่นับ overhead  ที่เกิดจากการ verify parity ของตัว RAID controller เองด้วย cache  จะมีความสำคัญตรงนี้ คือ ถ้าสามารถ hold ข้อมูลไว้ได้ ทำ block I/Oได้, queuing I/O ดีๆ ให้อ่านเขียนโดยมี HDD head movement น้อยที่สุด เปิดยาวทีเดียวเพื่ออ่าน/เขียนจาก track 1 -> last track แบบone-way โดยไม่ต้องกระโดดไปๆ กลับๆ ประสิทธิภาพจะสูงอีกมาก
 จะเห็นได้ว่า data transfer rate แทบไม่มีบทบาทเลย SCSI/2  สามารถส่งผ่านข้อมูลได้ 40 MB/sec แต่ฐานข้อมูลส่วนใหญ่ จะอ่านเขียน data ขนาด ไม่เกิน 2k กันแทบทั้งนั้น (ข้อมูล 1 record ไหน ขนาดที่ใหญ่ๆ จะไม่เกิน กิโลไบต์ ถ้าไม่ใช่ image) พันเครื่องอ่าน-เขียนพร้อมๆกัน data stream  ก็แค่ 2-3 MB เท่านั้นการวัดประสิทธิภาพ I/O วัดว่ารองรับได้กี่ I/O per sec โดย RAID Controller ที่ดีนั้น ได้ถึง 6,000 I/O per sec และปัจจุบัน RAID Controller รุ่นประสิทธิภาพสูง ทำได้ถึง 10 KBPSec แต่มีราคาแพงมากกรณีที่ ค่า I/Oต่ำ ความเร็วในการทำงานของ RAID จะแปรผันตาม cache
 สำหรับ Parity ของข้อมูลนั้น ไม่ได้ถูกระบุสำหรับ RAID ทุกระดับ แต่จะมีเฉพาะบางระดับเท่านั้น Parity จะช่วยในเรื่องของการ "เผื่อเสียคือ ถ้าหากข้อมูลในดิสก์เสียหาย หรือเกิดทำลาย จะใช้ Parity  ช่วยให้กู้ข้อมูลกลับมาได้
              การสร้าง parity อาศัยความสามารถของโปรเซสเซอร์ ซึ่งจะเป็น โปรเซสเซอร์บน RAID Controller หรือโปรเซสเซอร์บนเซิร์ฟเวอร์ก็ตาม             การทำงานของโปรเซสเซอร์ดังกล่าวจะได้ค่า ยิ่งถ้า parity นั้นเป็น CRC ยิ่งต้องการ CPU power มากขึ้น โดยการคำนวณกัน byte per byte             ไม่ได้เอามาทั้ง file แล้ว generate 4 bytes และกรณีที่เป็น RAID-5 ยังต้องคอยหมุนให้ parity bit กระจายไปอยู่ตาม HDD ลูกต่างๆ ในอะเรย์อีก
                ถ้าหากต้องการทราบว่า RAID-5 ใช้พลังงานงานจาก CPU มากขนาดไหน ลองหา HDD SCSI มาสามตัว ลง Windows NT แล้วทำ software RAID ดูสิครับ
ก่อนที่เราจะไปรู้จัก RAID แบบต่างๆ เรามารู้จักคำว่า Data Striping กันก่อนครับ
Data Striping คือการแบ่งข้อมูลออกเป็นส่วนๆ แล้วนำแต่ละส่วนไปเก็บใน harddisk แต่ละตัว การทำ striping นี้จะช่วยให้การอ่าน หรือเขียนข้อมูลใน disk array มีประสิทธิภาพมากขึ้น เพราะแต่ละไฟล์จะถูกแบ่งเป็นส่วนๆ กระจายไปเก็บในส่วนที่ต่างกันของ harddiskหลายตัว โดย harddisk เหล่านั้นทำงานไปด้วยกันแบบขนาน (parallel) จึงทำให้การเข้าถึงข้อมูลนั้นเร็วกว่า harddisk แบบตัวเดียวอย่างแน่นอนและนี่คือ RAID แบบต่างๆ ที่มีความสามารถต่างกัน และถูกเอามาใช้ในงานที่แตกต่างกัน แล้วแต่ผู้ใช้ครับ  
 RAID 0
คือการเอา harddisk มากกว่า 1 ตัวมาต่อร่วมกันในลักษณะ non-redundant ซึ่ง RAID 0 นี้มีจุดประสงค์ เพื่อที่จะเพิ่มความเร็วในการอ่าน/เขียนข้อมูล harddisk โดยตรง ไม่มีการเก็บข้อมูลสำรอง ดังนั้นถ้าฮาร์ดดิสก์ตัวใดตัวหนึ่งเกิดเสียหาย ก็จะส่งผลให้ข้อมูลทั้งหมดไม่สามารถใช้งานได้ทันที จากรูป จะเห็นว่าข้อมูลจะถูกแบ่งไปเก็บที่ harddisk ทั้ง 3 ตัว (กรณีที่เราใช้ harddisk 3 ตัวมาต่อ RAID 0 กัน) และถ้าเพิ่มจำนวน harddisk ใน array ให้มากขึ้น เวลาที่ใช้อ่านหรือเขียนข้อมูลก็จะลดลงไปตามสัดส่วน ตามทฤษฎีแล้ว ถ้า disk array มี harddisk จำนวน N ตัว ก็จะทำให้อ่านหรือแขียนข้อมูลได้เร็วขึ้นเป็น N เท่าตัว แต่ด้วยเหตุผลและปัจจัยหลายประการ เช่น RAID controller, ความคลาดเคลื่อนของความเร็ว harddisk ทำให้ในความเป็นจริงอาจเร็วไม่ถึงตามทฤษฎี
    
RAID 1RAID 1 มีอีกชื่อหนึ่งว่า disk mirroring จะประกอบไปด้วย harddisk 2 ตัวที่เก็บข้อมูลเหมือนกันทุกประการ เสมือนการสำรองข้อมูล หากharddisk ตัวใดตัวหนึ่งเกิดเสียหาย ระบบก็ยังสามารถดึงข้อมูลจาก harddisk อีกตัวหนึ่งมาใช้งานได้ตามปกติ สำหรับ RAID controller ที่ถูกออกแบบมาเป็นอย่างดีแล้ว การเขียนข้อมูลลง harddisk 2 ตัวในเวลาเดียวกัน จะใช้เวลาพอๆ กับการเขียนข้อมูลลง harddisk ตัวเดียว ในขณะที่เวลาในการอ่านก็จะน้อยลง เพราะ RAID controller จะเลือกอ่านข้อมูลจาก harddisk ตัวไหนก็ได้ โดยหากมีคำสั่งให้อ่านข้อมูลชุดในเวลาเดียวกัน ตัว RAID controller ก็สามารถประมวลผลคำสั่งเพื่ออ่านข้อมูลจาก harddisk ตัวหนึ่ง และคำสั่งอีกชุดนึงจากharddisk อีกตัวนึงก็ได้
จุดเด่นของ RAID 1 คือความปลอดภัยของข้อมูล ไม่เน้นเรื่องประสิทธิภาพและความเร็วเหมือนอย่าง RAID 0 แม้ว่าประสิทธิภาพในการอ่านข้อมูลของ RAID 1 จะสูงขึ้นก็ตาม
 
RAID 3

RAID 3 มีลักษณะที่คล้ายกับ RAID 2 แต่แทนที่จะตัดแบ่งข้อมูลในระดับ bit เหมือน RAID 2 ก็จะตัดเก็บข้อมูลในระดับ byte แทนและการตรวจสอบและแก้ไขข้อผิดพลาดของข้อมูล จะใช้ parity แทนที่จะเป็น ECC ทำให้ RAID 3 มีความสามารถในการอ่านและเขียนข้อมูลได้อย่างรวดเร็ว เพราะมีการต่อ harddisk แต่ละตัวแบบ stripe และใช้ harddisk ที่เก็บ parity เพียงแค่ตัวเดียวเท่านั้น แต่ถ้านำRAID 3 ไปใช้ในงานที่มีการส่งผ่านข้อมูลในจำนวนที่น้อยๆ ซึ่ง RAID 3 ต้องกระจายข้อมูลไปทั่วทั้ง harddisk จะทำให้เกิดปัญหาที่เรียกว่า คอขวด ขึ้นกับ harddisk ที่เก็บ parity เพราะไม่ว่าข้อมูลจะมีขนาดใหญ่ขนาดไหน RAID 3 ต้องเสียเวลาไปสร้างส่วน parity ทั้งสิ้น ยิ่งข้อมูลมีขนาดเล็กๆ แต่ parity ต้องสร้างขึ้นตลอด ทำให้ข้อมูลถูกจัดเก็บเสร็จก่อนการสร้าง parity ทั้งระบบต้องมารอให้สร้าง parityเสร็จก่อน จึงจะทำงานต่อไปได้นั่นเอง RAID 3 เหมาะสำหรับใช้ในงานที่มีการส่งข้อมูลจำนวนมากๆ เช่นงานตัดต่อ Video เป็นต้น
 

RAID ระดับ 4

RAID มีแนวคิด ที่คล้ายคลึงกับ RAID ระดับ 3 แต่จะเน้นความสำคัญ ไปที่ประสิทธิภาพ การทำงานของ application ที่ต่างกันไป ตัวอย่างเช่น โปรแกรม Database TP ที่ต้องเกี่ยวข้องกับ ไฟล์ขนาดใหญ่ ที่มีความต่อเนื่องกัน และยังมีอีกความต่าง นั่นคือ ระดับความลึกของแถบข้อมูล ที่ RAID ระดับ 4 จะมีขนาดใหญ่กว่า ซึ่งโดยปกติ ขนาดในระดับ 2 block ซึ่งจะช่วยให้ โปรแกรมจัดการ RAID สามารถทำงานร่วมกับ disc แต่ละตัว ได้อย่างเป็นอิสระต่อกัน มากกว่า RAID ระดับ 3 ซึ่งจะช่วยให้ การจัดการเก็บข้อมูล และการเรียกอ่านข้อมูลที่มีขนาดใหญ่ สามารถทำงานได้รวดเร็วยิ่งขึ้น


RAID 5

มีการตัดแบ่งข้อมูลในระดับ block เช่นเดียวกับ RAID 4 แต่จะไม่ทำการแยก harddisk ตัวใดตัวหนึ่งเพื่อเก็บ parity ในการเก็บ parityของ RAID 5 นั้น จะกระจาย parity ไปยัง harddisk ทุกตัว โดยปะปนไปกับข้อมูลปกติ จึงช่วยลดปัญหาคอขวด ซึ่งเป็นปัญหาที่สำคัญในRAID 3 และ RAID 4 คุสมบัติอีกอันหนึ่งที่น่าสนใจของ RAID 5 คือ เทคโนโลยี Hot Swap คือเราสามารถทำการเปลี่ยน harddisk ในกรณีที่เกิดปัญหาได้ในขณะที่ระบบยังทำงานอยู่ เหมาะสำหรับงาน Server ต่างๆ ที่ต้องทำงานต่อเนื่อง
 
 RAID 6

RAID 6 อาศัยพื้นฐานการทำงานของ RAID 5 เกือบทุกประการ แต่มีการเพิ่ม parity block เข้าไปอีก ชุด เพื่อยอมให้เราทำการ Hot Swap ได้พร้อมกัน ตัว (RAID 5 ทำการ Hot Swap ได้ทีละ ตัวเท่านั้น หาก harddisk มีปัญหาพร้อมกัน ตัว จะทำให้เสียทั้งระบบ) เรียกว่าเป็นการเพิ่ม Fault Tolerance ให้กับระบบ โดย RAID 6 เหมาะกับงานที่ต้องการความปลอดภัยและเสถียรภาพของข้อมูลที่สูงมากๆ
 
RAID 0+1

เป็นการผสมผสานระหว่าง 
RAID 1 และ RAID 0 เข้าด้วยกัน โดยใช้ Harddisk 4 ตัวขึ้นไปครับ และมีการทำ mirror ข้อมูล (backupข้อมูล) ไปด้วย ข้อเสียของ 0+1 คือการเพิ่มจำนวน harddisk ในอนาคตเป็นไปได้ยาก เพราะ harddisk แต่ละตัวมี mirror เป็นของตัวเอง ยิ่งเพิ่ม harddisk เพื่อใช้งานก็ต้องเพิ่ม harddisk เพื่อ backup ไปด้วย ตามรูปครับ
 
RAID 10 (1+0)

RAID 10 หรือ RAID 1+0 เป็นการผสมผสานระหว่าง RAID 1 และ RAID 0 เข้าด้วยกัน การทำงานจะสกับกันทีละตัว พร้อมทั้งทำ Mirror ทำให้การเข้าถึงข้อมูลเป็นไปได้อย่างรวดเร็ว  เหมาะสำหรับ Server ที่ต้องการความเร็วในการเข้าถึงข้อมูลค่อนข้างมาก และมีประสิทธิภาพสูงครับ
 

ส่วนประกอบของ RAID
 RAID Controller
ตัวควบคุมระบบ RAID นั้นใช้ได้ทั้งซอฟต์แวร์และฮาร์ดแวร์ หรือใช้รวมกันก็ได้ ซอฟต์แวร์เช่น Windows NT 4.0 สนับสนุน RAID ระดับ 0 ,1 (Striping , Mirroring) และฮาร์ดแวร์จากผู้ผลิตรายต่างๆ ซึ่งมีอยู่มากหลากหลาย เช่น  Asustek , Adaptec , DCT ,MTI ซึ่งฮาร์ดแวร์เหล่านั้นมีราคาอยู่ในระหว่างสองหมื่นถึงเป็นล้านบาท
กรณีใช้ซอฟต์แวร์เป็น RAID Controller จะมีข้อจำกัดคือ ระดับที่สนับสนุน คือ  0, 1 (Striping , Mirroring) นั้นยังไม่ครอบคลุมระดับ Data Protection ในเรื่องของพาริตี้ ซึ่งมีใน RAID ระดับ 3,5 และใช้กำลังจากโปรเซสเซอร์  ทำให้โปรเซสเซอร์มีเวลาจะไปประมวลผลงานอื่นๆ น้อยลง การใช้ซอฟต์แวร์ควบคุม มีข้อดีคือ ราคาถูกกว่า ไม่ต้องการอุปกรณ์เพิ่มเติมมากนัก
ส่วนฮาร์ดแวร์ โดยมากจะได้รับการออกแบบที่ดี  แต่ฮาร์ดแวร์ก็มีข้อแตกต่างระหว่างยี่ห้อต่างๆ คือ ประสิทธิภาพในการทำงานแตกต่างกันออกไป การติดตั้งยากกว่าซอฟต์แวร์ควบคุม และราคาการลงทุนค่อนข้างสูงกว่า เพราะต้องการอุปกรณ์เพิ่มเติม ไม่ว่าจะเป็นฮาร์ดดิสก์ เคสสำหรับฮาร์ดดิสก์ โดยเฉพาะระบบ "Hot Swap"  แต่ผลของการลงทุนก็คุ้มค่า (เกี่ยวกับ Hardware RAID Controller  ดูข้อมูลเพิ่มเติมได้จาก รู้จักกับ Raid Controller)
 ฮาร์ดดิสก์ที่นำมาต่อเป็น Array (Physical Drive)คือฮาร์ดดิสก์ที่นำมาต่อเข้าเพื่อใช้กับระบบที่จะใช้ RAID  จำนวนของฮาร์ดดิสก์นั้น ขึ้นอยู่กับระดับของ RAID ที่เลือกใช้งาน 
 ดรฟ์อะไหล่ (Spare Drive)เป็นฮาร์ดดิสก์ที่นำมาติดตั้งไว้เป็น "อะไหล่" เผื่อว่าฮาร์ดดิสก์ตัวอื่นๆ ที่ใช้ในระบบ RAID เกิดชำรุดเสียหาย  โดยปกติเมื่อไดรฟ์ตัวใดตัวหนึ่งในระบบเกิดเสียหาย ไดรฟ์ที่เป็น "อะไหล่"  จะถูกสลับเข้าไปใช้งานแทนที่โดยอัตโนมัติทันที
 ไดรฟ์ชำรุด (Failed Drive)ฮาร์ดดิสก์ที่ชำรุดเสียหาย เช่นมี Bad Sector หรือตัวระบบกลไกการทำงานเสียหาย   หรือไม่ตอบสนองต่อการทำงานของ Host SCSI ไดรฟ์พวกนี้ถือเป็น "ไดรฟ์ชำรุด" จะต้องเอาออกและเปลี่ยนไดรฟ์ดีเข้าไปใหม่
 ไดรฟ์ตรรกะ (Logical Drive)เหมือนกับระบบดอสธรรมดา คือ ไม่ใช่ไดรฟ์จริง เป็นเพียงไดรฟ์สมมุติ แต่ใน RAID  ไดรฟ์ตรรกะนั้น เกิดจากการรวมเอาไดรฟ์อื่นๆ มารวมกัน ให้เกิดความจุสูงขึ้น
 Logical Volumeไม่อยากแปลเป็นไทย เอาเป็นแบบเดิม คงความหมายดีกว่า เมื่อต้องการ "ก้อน"  ของฮาร์ดดิสก์ที่มีความจุมากขึ้น ทำได้โดยการนำเอา "Logical Drive"  มารวมเข้าด้วยกันเป็น Logical Volume นั้นเอง
 การจัดการ RAIDเมื่อกล่าวถึงการจัดการ RAID ก็เสมือนว่าเรากำลังคุยกันเกี่ยวกับเทคโนโลยี  "การจัดเก็บข้อมูล" หรือ Storage Technology ซึ่งมีสองส่วนด้วยกันคือ การเลือกระดับของ RAID ที่เหมาะสมกับการใช้งาน  และการจัดการกับไดรฟ์ที่เสียหาย
การเลือกระดับ RAID ที่เหมาะสมRAID แต่ละระดับมีความเหมาะสมเกี่ยวกับการใช้งาน และความต้องการฮาร์ดแวร์  ซอฟต์แวร์ ฮาร์ดดิสก์แตกต่างกัน ดูอ้างอิงได้จากระดับของ RAID ซึ่งกล่าวไว้คร่าวๆ เกี่ยวกับระดับของ RAID และการใช้งาน
การจัดการไดรฟ์เสีย
การจัดการกับไดรฟ์เสีย ไม่ได้หมายถึงว่า ฮาร์ดดิสก์เสียแล้ว ถึงค่อยคิดว่า จะจัดการอย่างไร แต่หมายถึง จะทำอย่างไรกับ "ระบบเผื่อเสีย" หาฮาร์ดดิสก์มา  Standby หรือเปิดไว้รอ เหมือนเตรียมยางรถยนต์อะไหล่ติดไว้ที่ท้ายรถ?  อะไหล่หรือ Spare นี่เป็นของ "เผื่อเสีย" แน่นอน คิดอยากมีระบบ "เผื่อเสีย"  ก็ต้องลงทุนบ้าง สำหรับ RAID ก็เช่นเดียวกัน ต้องลงทุนซื้อไดรฟ์มาไว้  เรียกว่าเป็น Spare Drive ซึ่งมีทั้ง Global Spare Drive และ Local Spare  Drive เป็นสองกลุ่ม ความแตกต่างคือ Local Spare Drive จะเป็นอะไหล่สำหรับ  Local Drive เพียงตัวเดียว (แยกให้ออกนะครับ Local Drive ตัวเดียวหมายถึง 1  "ก้อน" หรือ 1 Volume ซึ่งจะรวมได้หลายๆ Physical Drive เพราะ Local Drive   ในระบบเครือข่าย แตกต่างจาก Local Drive ของพวกเครื่องพีซี) แต่ Global Spare Drive นั้นเป็นอะไหล่สำรองสำหรับ Local Drive 2 ก้อนขึ้นไปการระบุว่าไดรฟ์ไหนเสีย และการวิเคราะห์อาการเสีย เป็นเทคนิคการออกแบบ RAID Controller ที่ผู้ผลิตรายต่างๆ ต่างก็แข่งขันกันพัฒนา  เพราะโดยคุณสมบัติการออกแบบฮาร์ดดิสก์แบบ SCSI แล้ว เป็นไปได้ยากที่ RAID Controller จะตรวจสอบว่าไดรฟ์ไหนเสีย แต่ระบบการตรวจสอบที่เกิดจากการพัฒนาร่วมกันของผู้ผลิต RAID  และผู้ผลิตฮาร์ดดิสก์ ที่มีชื่อเทคโนโลยีว่า SAF-TE ก็ทำให้การวิเคราะห์  และวินิจฉัยอาการเสียของฮาร์ดดิสก์เป็นไปได้ง่ายขึ้นการจัดการกับไดรฟ์เสีย ยังมีระบบสนับสนุนหรืออำนวยความสะดวก  ซึ่งทำงานสอดคล้องกับระบบ RAID Controller อีกส่วนหนึ่งคือ Hot Plug Drive, Hot Swap Drive Bay  ซึ่งหมายถึงการเปลี่ยนฮาร์ดดิสก์โดยอไม่ต้องปิดสวิตช์คอมพิวเตอร์ก่อน  และเมื่อเปลี่ยนแล้วนอกจากสามารถใช้งานได้ทันทีแล้ว หากใช้ระบบ RAID ก็สามารถ  "Rebuild" คือ สร้างระบบ RAID ในฮาร์ดดิสก์ก้อนใหม่ได้ทันที
การเพิ่มขนาดของ Logical Volume
ขนาดของ Logical Drive นั้น ขึ้นกับความจุและจำนวนของฮาร์ดดิสก์ที่นำมาเพิ่มในระบบ RAID โดยปกติระบบ RAID จะระบุไว้ว่า กรณีใช้ฮาร์ดแวร์ในการควบคุม ฮาร์ดดิสก์ทั้งหมดที่นำมาเพิ่มในระบบจะต้องมีความจุเท่ากัน การเพิ่มขนาดของ Logical Drive ทำได้โดยการเพิ่มฮาร์ดดิสก์ SCSI เข้าไปในระบบ
 ถ้าเป็นระบบ RAID เก่าๆ การเพิ่มขนาดของ Logical Drive  ทำได้โดยการสำรองข้อมูลทั้งหมด หลังจากนั้นปิดระบบ (ปิดเฉพาะระบบที่ใช้ RAID) ติดตั้งฮาร์ดดิสก์เพิ่มเติมเข้าไปในระบบ และ Config RAID หรือการสร้าง RAID  ขึ้นใหม่ วิธีการนี้มีข้อด้อยคือ ใช้เวลาในการดำเนินใหม่      และต้องการผู้เชี่ยวชาญ เพราะในระบบเครือข่าย ถ้าหากต้องมีการ    "ติดตั้งระบบใหม่" นั้นหมายถึง การ Config ระบบใหม่ทั้งหมด
แต่ระบบคอมพิวเตอร์ที่ใช้ RAID ใหม่ๆ นั้น ใช้หลักการของ Dynamic System  Expansion การขยายขนาดของระบบโดยวิธีการง่ายกว่าเดิม โดยวิธีนี้ต้องใช้กับระบบ RAID ที่เป็น RAID Hardware Controller เท่านั้น โดยเมื่อเพิ่มฮาร์ดดิสก์เข้าไปในระบบ (จะเป็น Hot Plug หรือ Non Hot-Plug) ก็ได้ หลังจากนั้นใช้ฟังก์ชันในการตรวจจับ (SCSI Harddisk SCAN) เพื่อตรวจสอบว่ามีฮาร์ดดิสก์ใหม่ถูกติดตั้งเข้าไปในอะเรย์      หลังจากนั้นก็ใช้ฟังก์ชันในการเพิ่มขนาด Logical Volume โดยการ Assign  ฮาร์ดดิสก์ใหม่เข้ากับระบบอะเรย์ เพียงไม่กี่นาทีก็เพิ่มขนาดของ Logical  Volume ได้
การจัดการและตรวจสอบโดย RAID Controller
ฮาร์ดแวร์ RAID Controller ที่ผลิตโดยผู้ผลิตหลายๆ รายๆ  มีกลวิธีในการตรวจสอบระบบ DISK Array  โดยเริ่มจากการตรวจสอบตัวคอนโทรลเลอร์เอง ไปจนถึงการตรวจสอบฮาร์ดดิสก์ที่เป็นสมาชิกอะเรย์ ได้แก่การตรวจสอบ disk / PSU  / Power / Over-Temp แล้วแสดงค่าความผิดพลาด พร้อมทั้งแจ้งเตือนกรณีที่ความผิดพลาดนั้น ถือเป็นความผิดพลาดระดับวิกฤติ
ขอขอบคุณบทความจาก http://www.msit.mut.ac.th