linux training in Thailand
| Home | Articles | Download | Free Linux Tips | Resources | Training | Web Link | Linux Training English|
| Courses | Schedule | Price & Promotion | Map | Customer Ref. | Instructors | Certification | FAQ | Registration Form |
สถาบันฯ ขอแจ้งปิดทำการระหว่างวันที่ 27 -31 กรกฏาคม 2558 และเปิดทำการปกติวันที่ 3 สิงหาคม 2558
We are on vacations 5 days in July 27-31, 2015 Please contract Line ID : nok_fly or e-mail : info@itdestination.com
ITDestination จะปิดปรับปรุงเว็บไซต์ ตั้งแต่วันที่ 7 - 9 มิถุนายน 2556
อาจจะทำให้ใช้งานไม่ได้ในบริการ Webboard Freetips และ E-Learning จึงขออภัยในความไม่สะดวกมา ณ ที่นี้
สถาบันฯ ขอแจ้งปิดทำการวันที่ 22-28 กุมภาพันธ์ 2560 และจะเปิดทำการปกติในวันที่ 1 มีนาคม 2560
กรณีติดต่อส่งข้อความมาที่ Facebook: LinuxITDestination หรือ e-mail: info@itdestination.com ซึ่งจะติดต่อกลับประมาณ 17.00 น.
ผู้ลงทะเบียนอบรมสามารถทำข้อสอบ online ในช่วงที่มาอบรมเพื่อทบทวนความรู้ ทำได้ไม่จำกัดจำนวนครั้ง มีข้อเฉลยที่ถูกต้องแนะนำ
สอบถามรายละเอียดโทร 089 890-5494 >>> อ่านรายละเอียด... คลิ๊ก

Trickle วิธีจำกัดแบนด์วิธที่ง่ายที่สุด

โดย ธีรภัทร มนตรีศาสตร์,RHCE

ในยุคที่อินเตอร์เน็ตบรอดแบนด์กำลังขยายตัวเช่นทุกวันนี้ หลายๆ คนกำลังสนุกสุดเหวี่ยงกับความเร็วในการดาวน์โหลดที่ทำให้โมเด็มความเร็ว 56Kbps กลายเป็นเศษเสี้ยวในความทรงจำ เนื่องจากเป็นการใช้บริการแบบเหมาจ่ายเป็นรายเดือนหรือรายปีนั่นเอง แต่ถึงอย่างไรก็ตามผู้ที่ใช้บริการบรอดแบนด์ในบางพื้นที่ยังจำเป็นต้องใช้บริการแบบจำกัดปริมาณการใช้งาน ซึ่งจะต้องเสียค่าใช้จ่ายในการใช้อินเตอร์เน็ตตามปริมาณการใช้งานในแต่ละเดือน ดังนั้นผู้บริหารระบบเครือข่ายจึงต้องพยายามหาวิธีการต่างๆ เพื่อที่จะควบคุมปริมาณการใช้งานมิให้เกินโควต้าหรือผิดเงื่อนไขที่ผู้ให้บริการอินเตอร์เน็ตกำหนดไว้
การควบคุมการใช้แบนด์วิธของผู้ใช้งานเป็นอีกวิธีหนึ่งในหลายๆ มาตรการที่ถูกนำมาใช้เพื่อการนี้ นอกเหนือจากการปิดกั้นบริการที่ไม่ก่อให้เกิดประโยชน์กับองค์กร ( ผู้บริหารรุ่นใหญ่นิยมใช้คำว่าไม่สร้างสรรค์ ? ) ด้วยเครื่องมือประเภทไฟร์วอลล์ต่างๆ ทั้งระดับแพคเก็ตและระดับแอปพลิเคชั่น แต่การควบคุมแบนด์วิธนี้มีอยู่ด้วยกันหลายเทคนิคหลายวิธีการ อีกทั้งยังสามารถกระทำได้หลายจุดในระบบเครือข่าย ได้แก่ การควบคุมที่ตัวอุปกรณ์ต่างๆ ในระบบเครือข่าย เช่น สวิทช์ เร้าเตอร์ หรือ ไฟร์วอลล์ เป็นต้น การควบคุมที่ตัวโปรแกรมพร๊อกซี่ เช่น กลไก Delaypool ในโปรแกรม Squid เป็นต้น การควบคุมคุณลักษณะของไอพีแพคเก็ตในระดับเคอร์เนลของระบบปฏิบัติการ เช่น เทคนิค QoS ทั้งหลายที่มีอยู่ในเคอร์เนลทั้งประเภท Classless หรือ Classful ก็ตาม เป็นต้น แน่นอนว่าการใช้เทคนิควิธีการต่างๆ ตามที่ได้กล่าวมานี้ย่อมมีทั้งข้อดีข้อเสียและข้อจำกัดที่แต่กต่างกันออกไป ซึ่งผู้บริหารระบบเครือข่ายควรศึกษาในรายละเอียดของแต่ละวิธีเพื่อการเลือกใช้งานให้เหมาะสมกับสภาพแวดล้อมในองค์กรของท่านมากที่สุด ในโอกาสนี้ผู้เขียนอยากเสนอแนวทางที่แตกต่างออกไปบ้าง ( สร้างสรรค์…? ) โดยจะกล่าวถึงวิธีการควบคุมแบนด์วิธในระดับแอปพลิเคชั่น ซึ่งมีความพิเศษตรงที่แทนที่เราจะควบคุมแบนด์วิธโดยรวมทั้งหมดแต่กลับให้ความสนใจเฉพาะบางแอปพลิเคชั่นในโฮสต์ของเราเท่านั้น จัดการแบนด์วิธด้วย Trickle Trickle มีลักษณะการใช้งานที่เป็นการ "ห่อหุ้ม" การสื่อสารของโปรแกรมแอปพลิเคชั่นอื่นไว้ โดยสามารถทำงานร่วมกับโปรแกรมส่วนใหญ่ได้อย่างไม่มีปัญหา จึงทำให้มันสามารถควบคุมการไหลเข้าออกของข้อมูลแบบ TCP ได้ตามต้องการทั้งด้าน upstream และ downstream ดังนั้นจึงไม่จำเป็นต้องแก้ไขคุณสมบัติของตัวโปรแกรมหรือเคอร์เนลของระบบปฏิบัติการแต่อย่างใด

รูปที่ 1 ภาพจำลองความสัมพันธ์ของโปรแกรมที่เกี่ยวข้อง


Trickle เป็นฟรีซอฟต์แวร์ที่เผยแพร่ในแบบ BSD License โดย Marius Aamodt Eriken สามารถทำงานได้หลายแพลตฟอร์ม เช่น Linux FreeBSD OpenBSD และ Solaris คุณสามารถดาว์นโหลดโปรแกรมได้ที่เว็บไซต์ http://monkey.org/~marius/trickle/ เป็นไฟล์ชื่อ trickle-1.06.tar.gz ขนาดประมาณ 163KB แต่ลำพังโปรแกรม Trickle เองจะยังไม่สามารถทำงานได้เต็มที่ แต่จะต้องอาศัยซอฟต์แวร์ประกอบอีกตัวหนึ่งคือ libevent ซึ่งเป็นไลบรารี่แบบ run-time ที่จะช่วยตรวจจับสถานะ เหตุการณ์ต่างๆ ที่เกิดขึ้นกับการสื่อสารบน TCP Stack โดยผ่านฟังชั่นด้านเครือข่ายต่างๆ ที่กำลังทำงานอยู่ในขณะนั้น ดังนั้นเราจึงต้องดาวน์โหลดโปรแกรม libevent นี้มาเพิ่มลงในระบบของเราด้วย มิฉะนั้นจะไม่สามารถติดตั้งโปรแกรมนี้ได้ ท่านสามารถดาวน์โหลดไฟล์โปรแกรม libevent-1.1a.tar.gz ได้จาก http://monkey.org/~provos/libevent/ ขนาดไฟล์ประมาณ 339KB การติดตั้งโปรแกรม
ผู้เขียนได้ใช้งานโปรแกรมนี้โดยติดตั้งไว้บนลินุกซ์ Fedora Core 3 โดยมีขั้นตอนการติดตั้งดังนี้
  1. ดาวน์โหลดไฟล์ทั้งสองดังที่กล่าวไว้ข้างต้น นำเก็บไว้ที่ /root
  2. แตกไฟล์ libevent-1.1a.tar.gz ออก จะได้ไดเร็คทอรี่ชื่อ libevent-1.1a
  3. คอมไพล์ซอร์สโค๊ดนี้ด้วยขั้นตอนปรกติ ( ./configure ,make และ make install )
  4. ผลที่ได้จะเป็นไฟล์ในไดเร็คทอรี่ /usr/local/lib เช่น libevent-1.1a.so.1 เป็นต้น
  5. แตกไฟล์ trickle-1.06.tar.gz ออก แล้วคอมไพล์ในลักษณะเดียวกันกับข้อ 2-3
  6. จะได้โปรแกรมที่ /usr/local/bin จำนวน 3 ไฟล์ คือ trickle trickled และ tricklectl
  7. นอกจากนี้ยังได้ man document อีก 3 ไฟล์ คือ trickle(1) , trickled(8) และ trickled.conf(5) และที่ /usr/local/lib จะมีไฟล์ไลบรารี่เพิ่มอีก 1 ตัว คือ trickle-overload.so
  8. สำคัญมากคือ ต้องเพิ่มข้อความ /usr/local/lib ลงในไฟล์ /etc/ld.so.conf แล้วทำคำสั่ง ldconfig ในฐานะ root
    หลังจากติดตั้งโปรแกรมสำเร็จแล้วสามารถลบไฟล์และไดเร็คทอรี่ต้นฉบับที่อยู่ที่ /root ออกได้เพราะไม่จำเป็นต้องใช้อีกแล้ว

การใช้งานแบบ Stand alone
โปรแกรม Trickle สามารถทำงานได้ 2 ลักษณะ คือ แบบ Standalone กับแบบ Daemon สำหรับการใช้งานในแบบ Standalone ทำได้โดยใช้คำสั่งดังตัวอย่างนี้
# trickle -d 25 ncftp ftp.domain.com

จะเห็นว่าเป็นการนำโปรแกรม trickle มาครอบการใช้งานคำสั่ง ncftp ไว้โดยระบุพารามิเตอร์ -d 25 หมายถึง ให้มี download stream ที่ 25Kbps นั่นเอง หากต้องการกำหนดความเร็วในการ upload สามารถระบุพารามิเตอร์ -u เพิ่มเข้าไปได้ในลักษณะเดียวกันนี้ ผู้เขียนได้ทดสอบการจำกัดความเร็วในการดาวน์โหลดด้วยโปรแกรม Mozilla Firefox โดยใช้คำสั่ง
# trickle -d 25 mozilla

แล้วเปรียบเทียบกับการใช้งาน mozilla ตามปรกติจะสังเกตเห็นความเร็วในการดาวน์โหลดที่วัดด้วย Speed Meter ของ http://www.adslthailand.com ได้ผลลัพธ์ที่ชัดเจนมาก ( รูปที่ 2 และ 3 )

รูปที่ 2 ค่าความเร็วในการ Download ตามปรกต




รูปที่ 3 ค่าความเร็วที่ลดลงเมื่อใช้ Trickle ( -d 25 )


ในการใช้งานแบบ Standalone นี้ จะเห็นว่าการควบคุมแบนด์วิธจะเกิดขึ้นกับโปรแกรมที่เรากำหนดให้ trickle หุ้มห่อหรือครอบไว้เท่านั้น ไม่มีผลใดๆ ต่อโปรแกรมอื่นๆ ในระบบ การใช้งานแบบ Daemon
Trickle สามารถใช้งานได้อีกแบบหนึ่งคือ แบบ Daemon ซึ่งจะใช้โปรแกรมชื่อ trickled รันในแบบฉากหน้าหรือฉากหลังก็ได้ โดยจะต้องทำงานร่วมกับ libevent ซึ่งเราได้ติดตั้งไว้เรียบร้อยแล้ว มีรูปแบบคำสั่งในการเรียกใช้งานดังนี้
# trickled -d 25 -u 5 -f -N 5

พารามิเตอร์ -d และ -u หมายถึง ค่า Kbps ของการดาวน์โหลดและอัพโหลดเช่นเดียวกับการใช้งานในแบบ Standalone ในที่นี้คือ 25Kbps และ 5Kbps ตามลำดับ พารามิเตอร์ -f หมายถึง ให้รันในแบบฉากหน้า ( Foreground )
พารามิเตอร์ -N เป็นการระบุให้มีจังหวะในแสดงผลที่เอาต์พุตทุกๆ 5 วินาที
นอกจากพารามิเตอร์คำสั่งตามตัวอย่างนี้แล้วยังมี -s เป็นการระบุให้แสดงผลลัพธ์ออกทาง SysLog แทนการแสดงผลออกทาง standard output เช่นนี้ และยังมีวิธีกำหนดค่าในไฟล์ trickle.conf ได้อีก ซึ่งสามารถศึกษาเพิ่มเติมได้จาก man page ที่ติดตั้งไว้แล้ว

รูปที่ 4 การทดสอบแบบ Daemon


ผลการทำงานของ trickled จะช่วยให้สามารถระบุขอบเขตของ trickle ได้และยังช่วยในการมอนิเตอร์ค่าความเร็วที่กำลังใช้อยู่ได้อีกด้วย ดังรูปการทดลองดาวน์โหลดไฟล์ในรูปที่ 4 เป็นการดาวน์โหลดไฟล์ด้วยคำสั่ง ncftp ซึ่งจะเฉลี่ยให้ใช้ความเร็วไม่มากนักทำให้สามารถใช้งานอื่นๆ ไปพร้อมกันได้เป็นปรกติ ประโยชน์และการประยุกต์ใช้งาน
หากมองอย่างผิวเผินท่านผู้อ่านอาจจะเห็นว่า Trickle ไม่เหมาะกับการควบคุมแบนด์วิธโดยทั่วไปเท่าไรนัก เพราะเป็นการควบคุมแบบเฉพาะเจาะจงเกินไป เป็นการใช้งานในระดับยูสเซอร์และโปรแกรมประยุกต์โปรแกรมใดโปรแกรมหนึ่งเท่านั้น แต่ผู้เขียนมองว่าทุกสิ่งย่อมมีคุณค่าในตัวของมันเองครับ ลักษณะการประยุกต์ใช้งานที่สามารถนำ Trickle ไปใช้ให้เกิดประโยชน์ ได้แก่ การจำกัดปริมาณการโอนถ่ายข้อมูลระหว่างโฮสต์โดยผ่านระบบเครือข่าย โดยเฉพาะอย่างยิ่งในโฮสต์ที่ฝากไว้ที่ Data Center หรือใช้บริการ Co-location ซึ่งอาจจะต้องการโอนถ่ายข้อมูลเพื่อการสำรองข้อมูลของระบบปฏิบัติการ การส่งผ่านข้อมูลสำรองของฐานข้อมูล อีเมล์ เว็บเพจหรือข้อมูลสำคัญใดๆ ก็ตามไปเก็บรักษาในอีกโฮสต์หนึ่ง หรืออาจจะเป็นการเปิดช่องทางในการทำ Mirror site ซึ่งต้องมีการ sync ข้อมูลเป็นระยะๆ อย่างสม่ำเสมอ หรืออาจจะเป็นการส่งสถานะจำพวก Event Log ต่างๆ ก็เป็นไปได้

รูปที่ 5 การใช้ประโยชน์จาก Trickle


จากรูปที่ 5 จะเห็นว่าหากมีการขนส่งข้อมูลจำนวนมากออกจากเว็บเซิร์ฟเวอร์โดยไม่มีการจำกัดปริมาณแบนด์วิธ จะทำให้โปรแกรมนั้นนำแบนด์วิธทั้งหมดไปใช้ซึ่งมีผลทำให้การสื่อสารประเภทอื่นๆ เช่น การเข้าชมเว็บไซต์ การใช้ FTP เพื่อการแก้ไขหน้าเว็บเพจ หรือการรีโมตเข้ามาจัดการระบบต้องล่าช้าลงหรือไม่อาจเชื่อมต่อได้เลย ดังนั้นการนำ Trickle มาใช้จึงทำให้เราสามารถจัดสรรทรัพยากรที่มีอยู่อย่างจำกัดคือ แบนด์วิธ ได้อย่างมีประสิทธิภาพ โดยแบ่งอัตราส่วนการใช้แบนด์วิธให้พอเหมาะกับงานแต่ละประเภท ตัวอย่างเช่น การโอนถ่ายฐานข้อมูลระยะสั้นให้ใช้ได้ประมาณ 20Kbps การส่งผ่านข้อมูล FTP Mirror ให้จำกัดแค่ 5Kbps ส่วนที่เหลือไว้ให้ FTP หรือ SSH ของผู้จัดการระบบและการให้บริการเว็บแก่บุคคลทั่วไป เป็นต้น QoS : Quality of Services
ความหมายของ QoS นั้น มิใช่เพียงแค่การจำกัดแบนด์วิธของการใช้บริการประเภทต่างๆ ในอัตราส่วนที่เหมาะสมตามความต้องการของผู้บริหารเครือข่ายเท่านั้น แต่หมายถึงการจัดสรรทรัพยากรและบริการที่มีอยู่ในองค์กรอย่างทั่วถึง คุ้มค่า ประหยัดและได้ประสิทธิภาพเพื่อให้ผู้ใช้บริการเครือข่ายเกิดความพึงพอใจ ความสามารถในด้านเทคนิคแต่เพียงอย่างเดียวจึงไม่อาจทำให้ระบบเครือข่ายในองค์กรมีความสมบูรณ์ได้ ความเข้าใจในลักษณะการใช้งานของผู้ใช้และคุณภาพของเครื่องมือที่เลือกใช้จึงเป็นส่วนสำคัญต่อความสำเร็จของการจัดการเครือข่าย ถึงเวลานั้น QoS น่าจะหมายถึง Quality of System Administrator ก็เป็นได้


แหล่งข้อมูลอ้างอิง
Trickle : http://monkey.org/~marius/trickle
Libevent : http://monkey.org/~provos/libevent