Packet Size หรือ RTP Packet Size คือขนาดความยาวของ Voice ใน Packet ครับ ซึ่งเวลาเราใช้งาน VoIP จะมีการส่งข้อมูลกันเป็นแบบ Packet แต่ละ Packet ก็จะประกอบไปด้วยส่วนประกอบต่างๆหลายอย่างที่จะทำให้สามารถส่งข้อมูลจากต้นทางไปยังปลายทางและส่งย้อนกลับมาได้ อาทิเช่น ไอพีต้นทาง ไอพีปลายทาง พอร์ตต้นทาง พอร์ตปลายทาง ในนั้นก็จะมี Voice หรือเสียงของเรารวมอยู่ด้วยครับ แต่เป็นเสียงที่ถูกแปลงให้อยู่ในรูป Digital แล้วและผ่านกระบวนการบีบอัดข้อมูลด้วย Codec ที่ใช้เพื่อให้อุปกรณ์ปลายทางแปลงกลับมาเป็นเสียงพูดได้เหมือนเดิม
แต่เนื่องจากขนาดของแต่ละ Packet มันมีได้จำกัด เช่นรวมทุกอย่างแล้วต้องไม่เกิน 1500 ไบต์ (บางตำราก็ 2048 ไบต์) ทำให้ไม่สามารถเอาเสียงพูดยาวๆใส่เข้าไปใน Packet เดียวได้ ก็เลยต้องแบ่งเสียงพูดออกเป็น Packet เล็กๆน้อยๆ เช่น แบ่งทุกๆ 20 millisecond (ms) บ้าง 30 ms บ้าง 40 ms บ้าง อย่างนี้เป็นต้นอ่ะรับ
ผมขออนุญาตไม่พูดถึงกรรมวิธีการแบ่งซอยเสียงพูดออกเป็น Packet เล็กๆนะครับ แต่จะพูดในแง่ที่ว่าทำไมต้องแบ่ง แบ่งแล้วจะเกิดประโยชน์อะไร
-ทำไมต้องแบ่งออกเป็น Packet เล็กๆน้อยๆ
ต้องแบ่งเพราะว่าเราใม่สามารถใส่เสียงพูดทั้งหมดเข้าไปใน Data Packet เดียวได้หมด แม้จะพูดสั้นๆเพียง 0.5 วินาทีก็ตาม
- แบ่งแล้วจะได้อะไร
แบ่งแล้วก็จะสามารถสื่อสารด้วยเสียงผ่านอินเตอร์เน็ตได้
- แบ่งให้เยอะๆกว่านี้ได้มั๊ย
จากข้างบนที่ผมว่าไว้ว่า แบ่งทีละ 20 ms, 30 ms, 40 ms, ... ที่จริงจะแบ่งมากกว่านี้ก็ได้นะครับ เช่น 60 ms, 80 ms แต่ก็ไม่นิยมกันสักเท่าไหร่เพราะว่ามันจะทำให้เสียงดีเลย์มากขึ้น ลองนึกดูครับว่า แบ่งทีละ 20 ms ก็แสดงว่าต้องรอนาน 20 ms จึงจะส่ง Packet ออกไป และถ้าแบ่งทีละ 80 ms ก็หมายความว่าต้องรอนาน 80 ms ถึงจะส่งออกไป มันก็จะดีเลย์ขึ้นใช่ป่ะครับ แต่ดีเลย์ขนาดนี้ไม่มีผลต่อการรับฟังของปลายทางครับ (ผมคอนเฟิร์ม) แต่จะมีผลกับอุปกรณ์ปลายทางมากกว่าว่ามันรองรับหรือเปล่า ถ้าไม่รองรับก็อาจจะทำให้คุณภาพเสียงดูลดน้อยลงไปได้ครับ
- แบ่งเยอะ แบ่งน้อย มีผลยังไงต่อแบนวิดธ์
อย่างที่เราทราบกันอยู่แล้วนะครับว่าการรับส่งสัญญาณเสียงพูดผ่านโครงข่ายอินเตอร์เน็ต เป็นการนำเอาสัญญาณเสียงที่ถูกแปลงรูปให้เป็นข้อมูลดิจิตอลใส่เข้าไปใน Data Packet แล้วแปะ Header ที่จำเป็นเข้าไปเพื่อให้ส่งจากอุปกรณ์ต้นทางไปปลายทางได้และส่งกลับมาได้ ถ้าเรามีโปรแกรมหรือเครื่องมือมอนิเตอร์ภายใน Data Packet ก็จะพบว่า ส่วนที่เป็นเสียง มีขนาดเพียงนิดเดียวเมื่อเทียบกับขนาดของ Data Packet เช่น เสียงมีขนาด 20 ไบต์ อยู่ใน Data Packet ขนาด 1500 ไบต์ เห็นมั๊ยครับว่ามีจึ๋งนึงเอง หากเราส่ง 20 ไบต์สองครั้ง ก็จะมีข้อมูลส่งไปขนาด 3000 ไบต์ ส่ง 20 ไบต์ไปสามครั้ง ก็จะมีข้อมูลส่งไปขนาด 4500 ไบต์ ... กินแบนวิดธ์ขนาดไหนไม่รู้ครับ
ทีนี้ถ้าเราแบ่งทีละ 40 ไบต์ ยังใส่เข้าไปได้และยังทำให้ Data Packet มีขนาดไม่เกินมาตรฐาน ก็จะลดข้อมูลที่จะต้องส่งไปได้เกือบเท่านึงครับ ผลก็คือยิ่งถ้าเราแบ่งให้มีขนาดยาวขึ้นเราก็จะลดแบนวิดธ์ที่ต้องการใช้งานลง แต่ก็อาจจะมีผลกระทบต่อคุณภาพของเสียงได้นะครับหากอุปกรณ์ปลายทางไม่รองรับ
และข้อมูลจากเว็บนี้นะครับ http://www.cisco.com/en/US/tech/tk652/t ... 4ae2.shtml
ลองมาคำนวณแบนวิดธ์ที่ต้องใช้ใน 1 วินาทีดูนะครับ
ข้อมูลที่คงที่ Layer 2 Header = 18 ไบต์ (หรือ 18x8= 144 บิต), Layer 3+Layer 4 + Layer 5 Header (IP/UDP/RTP Header) = 40 ไบต์ (หรือ 40x8= 320 บิต)
ข้อมูลที่เปลี่ยนแปลงคือขนาดของ voice payload (หรือก็คือ voice packet size นั่นแหล่ะครับ)
ถ้าเราใช้ G.729, voice packet size ขนาด 20 ms (หรือ 20 ไบต์ หรือ 20x8 = 160 บิต) , ใน 1 วินาที (1000 ms) ก็จะมี voice จำนวน 50 packets หรือ 50 packets per second (pps)
1 packet รวมมีขนาด 144 + 320 + 160 = 624 บิต
50 packet รวมมีขนาด 624x50= 31200 บิต หรือ 31.2 กิโลบิต หรือ 31.2 Kb
และเนื่องจากใน 1 วินาทีเราส่ง packet ออกไป 50 packets ดังนั้นแบนวิดธ์ที่เราต้องใช้คือ 31.2 kbps
ถ้าเราใช้ G.729, voice packet size ขนาด 40 ms (หรือ 40 ไบต์ หรือ 40x8 = 320 บิต) ใน 1 วินาที (1000 ms) มี voice จำนวน 1000/40 = 25 packets
1 packet รวมมีขนาด 144+320+320 = 784 บิต
25 packet รวมมีขนาด 784x25 = 19600 บิต หรือ 19.6 kb
ดังนั้นใน 1 วินาที แบนวิดธ์ที่ต้องใช้คือ 19.6 kbps
ที่เหลือลองคำนวณเล่นๆนะครับว่า ถ้าแบ่ง 60 ms, 80 ms, 100 แบนวิดธ์ที่ต้องใช้จะเหลือเท่าไหร่
-ตัวอย่างอุปกรณ์ที่แบ่ง Voice Packet ได้
ที่ผมเคยใช้งานมาก็จะมี Cisco Voice Gateway ครับ คอนฟิกคือ
!
dial-peer voice 100 voip
codec g729r8 bytes 40
!
ยี่ห้อคือ Soundwin
ยี่ห้อ Sipura/Linksys (รุ่น SPA3102)
บทความที่เกี่ยวข้อง
- วิธีการปรับค่า Packet Size บน Linksys/Sipura SPA3102
- วิธีเช็ค Packet Size ใน Asterisk
- RTP Packet Size ใน Asterisk และวิธีการปรับค่า