1 / 29

การจัดการแบนด์วิธในเครือข่ายด้วยลินุกซ์

การจัดการแบนด์วิธในเครือข่ายด้วยลินุกซ์. Bandwidth Management using Linux. สุทธิชัย สุทธิทศธรรม ( sutticha@nida.ac.th) สำนักการศึกษาระบบสารสนเทศ สถาบันบัณฑิตพัฒนบริหารศาสตร์. วัตถุประสงค์ของโครงการ. ศึกษากลไกการทำงานในส่วนการควบคุมแบนด์วิธของลินุกซ์

beyla
Download Presentation

การจัดการแบนด์วิธในเครือข่ายด้วยลินุกซ์

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. การจัดการแบนด์วิธในเครือข่ายด้วยลินุกซ์การจัดการแบนด์วิธในเครือข่ายด้วยลินุกซ์ Bandwidth Management using Linux สุทธิชัย สุทธิทศธรรม (sutticha@nida.ac.th) สำนักการศึกษาระบบสารสนเทศ สถาบันบัณฑิตพัฒนบริหารศาสตร์

  2. วัตถุประสงค์ของโครงการวัตถุประสงค์ของโครงการ ศึกษากลไกการทำงานในส่วนการควบคุมแบนด์วิธของลินุกซ์ เพื่อสร้างระบบที่สามารถจัดการแบนด์วิธ ที่ มีประสิทธิภาพ ไม่ต้องลงทุนสูง สนับสนุนการประยุกต์ใช้งานระบบปฏิบัติการลินุกซ์

  3. โครงสร้างการจัดการทราฟฟิกในลินุกซ์โครงสร้างการจัดการทราฟฟิกในลินุกซ์ เน้นการจัดการที่ส่วนของขาออก ของการ์ดเครือข่าย (Output Queuing หรือ Egress) default queue = FIFO (First In First Out)

  4. Queuing Disciplines หรือ qdisc qdisc เป็นกระบวนการจัดการแพคเกตที่อยู่ในคิว qdisc ที่ต่ออยู่กับการ์ดเครือข่ายแต่ละการ์ด เรียก root qdisc ประเภท qdisc Classless qdisc : FIFO, TBF, SFQ Classful qdisc : PRIO, CBQ, HTB

  5. Classless qdisc เป็นคิวอย่างง่ายที่ไม่สามารถสร้างคลาสย่อยภายใต้ root qdiscได้แก่ pfifo_fast TBF (Token Bucket Filter) SFQ (Stochastic Fairness Queuing)

  6. pfifo_fast • แบ่งเป็น 3 band คือ FIFO 0,1,2 ลำดับการส่ง 0,1,2 • จัดแพคเกตเข้า Band ด้วยฟิลด์ Type of Service (TOS) • Band 0 สำหรับแพคเกตประเภท minimize delay เช่น TELNET, FTP-control, SMTP-command, DNS-udp-query

  7. TBF (Token Bucket Filter) • ใช้ Tokens buffer ในการควบคุมการส่งข้อมูล • บังคับให้การส่งข้อมูลแต่ละชิ้น จะต้องมี Token ใน Token Buffer • อัตราเร็วในการส่งออกข้อมูลจะเท่ากับอัตราการสร้าง Token

  8. SFQ (Stochastic Fairness Queuing) • ใช้ในกรณีที่อัตราการส่งข้อมูลไกล้เคียงกับแบนด์วิธที่มีอยู่ • แยกแพคเกตที่เข้ามาไปไว้ในคิว ตาม tcp session, udp stream • ทำการเวียนส่งแพคเกตในคิวสลับกันไปมา เพื่อให้แพคเกตที่ส่งมีการกระจายอย่างสม่ำเสมอ ไม่ให้เกิดการชงักของบาง session

  9. Classful qdisc สามารถสร้างคลาสย่อยและกำหนดเงื่อนไขเรื่องความเร็ว รวมทั้งการจัดลำดับความสำคัญของแพคเกตที่จะส่งออกไปได้แก่ PRIO CBQ (Classes Based Queue) HTB qdisc (Hierarchical Token Bucket)

  10. ส่วนประกอบของ Classful qdisc Queuing discipline Classes Filters Policer

  11. PRIO qdisc • 3 คลาส แต่ละคลาสมีคิวแบบ pfifo ติดอยู่ • ลำดับส่งแพคเกตในคลาส 1,2,3 • filter ใช้ในการคัดแยกแพคเกตเข้าคลาส (default ตาม TOS, เปลี่ยนได้) • ข้อควรระวัง หากคลาส 1 มีปริมาณทราฟฟิคสูงเป็นเวลานานอาจทำให้คลาสอื่นไม่ได้ส่งข้อมูลเลย -> วิธีแก้ไข เปลี่ยนคลาส 1 เป็นคิวแบบ SFQ

  12. สามารถจัดสร้างคลาสในลักษณะที่เป็นเชิงชั้นได้สามารถจัดสร้างคลาสในลักษณะที่เป็นเชิงชั้นได้ • สามารถจัดสร้างคลาสสำหรับ ผู้ใช้หลายราย และรับประกันแบนด์วิธให้กับลูกค้า แต่ละรายได้ ในกรณีที่มีการใช้สายอย่างแออัด • สามารถสร้าง filter เพื่อใช้ในการคัดแยกแพคเกตเข้าคลาส • สามารถสร้างคลาสย่อยภายไต้ผู้ใช้งานแต่ละราย เพื่อบริหารจัดการทราฟฟิกภายในคลาสแม่อีกได้ • สามารถนำแบนด์วิธที่เหลือใช้จากผู้ใช้รายหนึ่งไปให้กับผู้ใช้อีกรายหนึ่งได้ CBQ qdisc

  13. HTB qdisc • ลักษณะการทำงานคล้ายกับ CBQ และมีประสิทธิภาพใกล้เคียงกัน มีความซับซ้อนน้อยกว่า CBQ • CBQ มีความซับซ้อนมากและอาจมีปัญหาในด้านการควบคุมแบนด์วิธ หรือมีความไม่ถูกต้องบ้างในบางครั้ง • มีเอกสารประกอบการใช้งานที่ชัดเจน

  14. HTB qdisc– ตัวอย่างที่ 1 • คำสั่งที่ใช้ในการจัดการทราฟิกในลินุกซ์คือ tc • คำสั่งเปลี่ยน root qdisc เป็น HTB qdisc tc qdisc add dev eth0 root handle 1: htb default 12 (kbps = kilo bytes per sec)

  15. HTB qdisc– ตัวอย่างที่ 1 สร้างคลาสที่มีโครงสร้างตามเงื่อนไข ด้วยคำสั่ง tc class add dev eth0 parent 1: classid 1:1 htb rate 100kbps ceil 100kbps tc class add dev eth0 parent 1:1 classid 1:10 htb rate 30kbps ceil 100kbps tc class add dev eth0 parent 1:1 classid 1:11 htb rate 10kbps ceil 100kbps tc class add dev eth0 parent 1:1 classid 1:12 htb rate 60kbps ceil 100kbps

  16. HTB qdisc– ตัวอย่างที่ 1 สร้าง filter เพื่อคัดแยกแพคเกตเข้าสู่คลาส tc filter add dev eth0 protocol ip parent 1:0 prio 1u32 match ip src 1.2.3.4 match ip dport 80 0xffff flowid 1:10 tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32match ip src 1.2.3.4 flowid 1:11

  17. HTB qdisc– ตัวอย่างที่ 1 สร้าง Classless qdisc เพื่อติดตั้งไว้กับคลาสที่เป็น leaf class tc qdisc add dev eth0 parent 1:10 handle 20: pfifo limit 5 tc qdisc add dev eth0 parent 1:11 handle 30: pfifo limit 5 tc qdisc add dev eth0 parent 1:12 handle 40: sfq perturb 10

  18. HTB qdisc– ตัวอย่างที่ 1 • ผลการทำงาน • ในกรณีที่ทั้ง 3 คลาสมีทราฟฟิกเกิน rate ทั้งหมด HTB จะรับประกันแบนด์วิธสำหรับ A/WWW อย่างน้อย 30 kbps และ A/other 10 kbps ส่วน B ได้อัตราอย่างน้อย 60 kbps • หากทราฟฟิกของ A/WWW หมดไป HTB จะนำเอาแบนด์วิธ 30 kbps ของ A/WWW ไปแบ่งกันระหว่างอีก 2 คลาสที่เหลือตามสัดส่วนของค่า rate ที่กำหนดไว้ในแต่ละคลาส คือ • A/other ได้แบนด์วิธเท่ากับ 10/70 ของ 30 kbps • B ได้แบนด์วิธเท่ากับ 60/70 ของ 30 kbps

  19. HTB qdisc– ตัวอย่างที่ 2 • จุดประสงค์ที่เปลี่ยนแปลง • แบนด์วิธของ A แบ่งกันใช้ได้ ระหว่าง WWW กับ other ก่อน หากแบนด์วิธของ A เหลือจึงแบ่งให้ B ใช้ • ในทางกลับกันถ้าแบนด์วิธของ B เหลือจะแบ่งให้ A ใช้ได้

  20. HTB qdisc– ตัวอย่างที่ 2 สร้างคลาสที่มีโครงสร้างตามเงื่อนไข ด้วยคำสั่ง tc class add dev eth0 parent 1: classid 1:1 htb rate 100kbps ceil 100kbps tc class add dev eth0 parent 1:1 classid 1:2 htb rate 40kbps ceil 100kbps tc class add dev eth0 parent 1:2 classid 1:10 htb rate 30kbps ceil 100kbps tc class add dev eth0 parent 1:2 classid 1:11 htb rate 10kbps ceil 100kbps tc class add dev eth0 parent 1:1 classid 1:12 htb rate 60kbps ceil 100kbps

  21. HTB qdisc– ตัวอย่างที่ 2 • ผลการทำงาน • ในกรณีที่ A/WWW มีทราฟฟิกน้อยกว่า 30 kbps แบนด์วิธที่เหลือจาก A/WWW จะนำไปให้กับ A/other แทนที่จะไปแบ่งกับ B ด้วย • หาก B มีแบนด์วิธเหลือ ก็สามารถให้ A ยืมได้ และในทางกลับกันหาก A มีแบนด์วิธเหลือก็สามารถให้ B ยืมได้ ทั้งนี้แบนด์วิธรวมของ A หรือ B ต้องไม่เกิน ceil ที่ตั้งไว้เนื่องจาก A และ B อยู่ภายไต้ root class เดียวกัน

  22. HTB qdisc– ตัวอย่างที่ 3 • หากกำหนดให้ ceil ของ A เป็น 60 kbps และ A/other เป็น 20 kbps หมายถึง • A สามารถยืมแบนด์วิธจาก B มาได้อีก 20 kbps • A/other สามารถยืมแบนด์วิธจาก A/WWW มาได้อีก 10 kbps

  23. HTB qdisc– ตัวอย่างที่ 3 • กรณีที่ไม่มีทราฟฟิกของ A/WWW แบนด์วิธของ A/WWW จะนำไปให้กับ A/other จนเต็ม ceil คือ A/other ยืมได้อีก 10 kbps ดังนั้น A/other ส่งได้ 20 kbps ส่วนที่เหลืออีก 20 kbps จะส่งให้ B ยืมได้ • กรณีที่ไม่มีทราฟฟิกของ B แบนด์วิธของ B จะนำไปให้ A ยืมได้ ซึ่ง A สามารถได้รับแบนด์วิธไม่เกิน ceil ที่กำหนดไว้คือ 60 kbps ดังนั้นแบนด์วิธที่เหลือในส่วนของ B จะถูกทิ้งไป ถือว่าเป็นข้อดีสำหรับ ISP ที่ต้องการจำกัดแบนด์วิธของลูกค้าแต่ละรายไว้ ถึงแม้ว่าลูกค้ารายอื่นที่เหลือจะไม่มีการใช้แบนด์วิธก็ตาม

  24. เครื่องมือที่ช่วยในการปรับแต่ง HTB/CBQ qdisc แบ่งเป็น 3 ประเภท สคริปต์ที่เขียนลักษณะเรียกเป็นชุดคำสั่ง(script) ที่สร้างคำสั่ง tc เพื่อสั่งงานไปยังลินุกซ์ ได้แก่ htb.init, cbq.init โปรแกรมแบบ Web-based เพื่อช่วยสร้าง class, filter เพื่อช่วยสร้างคำสั่ง tc ได้ง่ายขึ้น ได้แก่ QOS Configurator โปรแกรมที่มีการสร้างชั้นที่ติดต่อกับคำสั่ง tc ขึ้นมาอีก 1 ระดับ โดยสร้างเป็นภาษาที่มีการกำหนดไวยากรณ์และมีตัวแปลภาษา ได้แก่ tcng (tc next generation)

  25. ตัวอย่างการใช้ CBQ qdisc ชื่อไฟล์ cbq-028.backbone-client DEVICE=eth1,10Mbit,1Mbit RATE=28Kbit WEIGHT=2Kbit PRIO=5 RULE=192.168.1.1 ไฟล์ที่ 1 สร้างคลาสที่มี class-id เท่ากับ 028 และกำหนดทราฟฟิกขาออกของ eth1 ซึ่งหมายถึงจาก backbone เข้าสู่เครื่อง client (download) ที่มี IP Address เท่ากับ 192.168.1.1 ด้วยอัตราเร็วไม่เกิน 28 kbit/sec

  26. ตัวอย่างการใช้ CBQ qdisc ชื่อไฟล์ cbq-128.client-backbone DEVICE=eth0,10Mbit,1Mbit RATE=128Kbit WEIGHT=10Kbit PRIO=5 RULE=192.168.1.1, สร้างคลาสที่มี class-id เท่ากับ 128 และกำหนดทราฟฟิกขาออกจาก eth0 ซึ่งหมายถึงจาก client 192.168.1.1 เข้าสู่ backbone (upload) ด้วยอัตราเร็วไม่เกิน 128 kbit/sec

  27. ตัวอย่างการใช้ HTB qdisc ไฟล์ที่ 1: eth0 ระบุ Default class เท่ากับ 30 ไฟล์ที่ 2: eth0-2.root สำหรับสร้าง root class มี class-id เท่ากับ 2 ที่การ์ดเครือข่าย eth0 และกำหนดความเร็วสูงสุด 5 Mbits/sec ไฟล์ที่ 3: eth0-2:10.www สร้างคลาสย่อยภายไต้ class-id 2 โดยตัวเองมี class-id เท่ากับ 10 และกำหนดความเร็ว 5Mbits/sec มี filter เป็น source-port เป็น 80 และใช้เป็น leaf queue ที่ใช้คิวแบบ sfq ไฟล์ที่ 4: eth0-2:20.smtp สร้างคลาสย่อยภายไต้ class-id 2 เช่นเดียวกับไฟล์ที่ 3 โดยมีความเร็ว 3 Mbits/sec และ ความเร็วสูงสุด (ceil) เท่ากับ 5 Mbits/sec มี filter เป็น destination-port เป็น 25 ไฟล์ที่ 5: eth0-2:30.dfl สร้างคลาสย่อยภายไต้ class-id 2 เช่นเดียวกับไฟล์ที่ 3 โดยมีความเร็ว 1 Kbit/sec และ ความเร็วสูงสุด (ceil) เท่ากับ 5 Mbits/sec มี class-id เท่ากับ 30 ซึ่งเป็น default class

  28. สรุป จากการทดลองใช้งานและศึกษาผลการนำลินุกซ์มาควบคุมแบนด์วิธในเครือข่ายพบว่าสามารถควบคุมและจัดการแบนด์วิธได้ในระดับที่น่าพอใจ ปัจจุบันมีบริษัทหลายรายนำเอาลินุกซ์ไปสร้างเป็นอุปกรณ์ (Appliance) สำหรับทำงานด้านเครือข่ายเป็นจำนวนมาก โดยนำไปเป็นระบบปฏิบัติการที่ฝังในอุปกรณ์และ/หรือนำเอาความสามารถในด้านเครือข่ายไปใช้ เช่น Juniper ซึ่งเป็นอุปกรณ์ด้านการหาเส้นทาง, SARAN เป็นอุปกรณ์ด้านการป้องกันการบุกรุก เป็นต้น หากผู้พัฒนาในประเทศได้นำความสามารถด้านการควบคุมแบนด์วิธไปสร้างเป็นอุปกรณ์ที่มีราคาไม่แพงและพัฒนาเครื่องมือที่สามารถให้ผู้ใช้ติดตั้งและทำการปรับแต่งค่าในการควบคุมแบนด์วิธได้ง่ายแล้ว จะช่วยลดค่าใช้จ่ายในการซื้ออุปกรณ์จากต่างประเทศที่มีราคาแพงได้

  29. Thanks you.

More Related