Wednesday, October 31, 2007

AJAX

เพิ่งจะได้มีเวลามานั่งลองเล่น AJAX หรือ Asynchronous JavaScript and XML โดย concept แล้วง่ายดีไม่ได้ซับซ้อนอะไร แต่เอาไปทำอะไรได้เยอะมาก หลักๆก็คือการที่สามารถใช้ JavaScript ติดต่อกับ server-side ให้ทำอะไรก็ได้เช่น query database แล้วรับข้อมูลเอามาใช้โดยไม่ต้อง reload page นั้นใหม่ โดยข้อมูลที่ได้มาก็เอาไปเปลี่ยนหรือเอาไปแสดงเพิ่มบนหน้าที่แสดงอยู่แล้วโดยการ refer ถึง element ที่ต้องการเปลี่ยนด้วย id

key component ที่เพิ่มมาก็คือ XMLHttpRequest object ซึ่งต้องสร้างขึ้นมาโดย(ในกรณี firefox)

xmlHttp=new XMLHttpRequest();

และ XMLHttpRequest object ที่สร้างขึ้นมานี้ก็จะมี property หลักๆ 3 อันด้วยกันที่นำมาใช้คือ .onreadystatechange ซึ่งจะต้อง set ให้เท่ากับ function ที่จะ run เมื่อได้รับ response จาก server กลับมาโดย function ที่ set นี้ก็จะ run ทุกครั้งที่มีการเปลี่ยน readyState ส่วน property อันที่สองก็คือ readyState นั่นเองซึ่งจะมีอยู่ 5 state ด้วยกัน
0=not initialized
1=set up
2=sent
3=in process
4=complete

ดังนั้นส่วนใหญ่ function ใน onreadystatechange เราก็ต้อง check ว่า readyState เป็น complete หรือยังก่อนที่จะเอาข้อมูลไปใช้ property อันที่สามก็คือ responseText ซึ่งจะเท่ากับ response ที่ส่งกลับมาจาก server ตัวอย่าง code ข้างล่างน่าจะทำให้ชัดเจนขึ้น
function stateChanged()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
document.getElementById("txtHint").innerHTML=xmlHttp.responseText
}
}

ส่วน method ในการส่ง request ไปที่ server ก็คือ open กับ send โดย open ก็จะมี parameter คือ GET/POST, url ที่จะเรียกไปที่ server และ "true" เพื่อให้ handle แบบ asynchronous
xmlHttp.open("GET",url,true)
xmlHttp.send(null)

Tuesday, October 23, 2007

VoIP NAT Transversal

เพื่อที่จะสามารถใช้ VoIP จากบ้านที่มี router อยู่ทั่วไปนั้นจะมีอยู่สองเรื่องที่ต้องพิจารณา เรื่องแรกคือการที่ router จะมี firewall อยู่และจะไม่ยอมให้ inbound traffic initiate ขึ้นจากข้างนอกถ้าไม่ได้มีการ initiate โดย outbound traffic จากข้างในก่อน หรือที่พูดกันว่าจะไม่ allow unsolicited traffic หรือ traffic ที่ไม่ได้รับเชิญนั่นเอง ดังนั้นการที่จะมีใคร call มาหาเราก็ย่อมเป็นไปไม่ได้ถ้ายังไม่แก้ไขเรื่องนี้ และการที่ไป configure router ให้ยอมรับ traffic จากข้างนอกก็เป็นวิธีที่ไม่ถูกนะครับเพราะไป compromise security

อีกเรื่องก็คือการใช้ private ip จากการทำ NAT ถึงแม้ว่า router จะทำการ match private ip/port เข้ากับ public ip/port ให้ แต่เนื้อความใน signaling protocol เช่น SIP message ก็จะยังมี addressing ที่เป็น private ip อยู่ดี ซึ่งก็จะทำให้ไม่สามารถ work ได้เมื่อเข้าไปสู่ internet

วิธีการแก้ไขนั้นมีหลายแบบ แต่ที่เหมาะสมที่สุดที่ voip operator ใช้กันก็คือ การมีอุปกรณ์คล้่ายๆเป็น proxy ตัวหนึ่งอยู่ตรงกลางระหว่าง user agent software ที่อยู่ในเครื่องผู้ใช้ กับ call agent software ที่อยู่บน server กลาง ซึ่งอุปกรณ์พวก SBC (Sessio Border Controller) ก็มีหน้าที่หลักอันหนึ่งในการทำสิ่งต่างๆเหล่านี้

ขั้นตอนก็คือ user agent จะมีการ register ไปที่ call agent server เพื่อบอกว่าตัวเอง up ขึ้นมาแล้ว operator ก็จะมีวิธีในการ route signaling message พวกนี้ผ่านไปยังอุปกรณ์ SBC อุปกรณ์ SBC ก็จะรู้ source ip/port ฝั่ง public ของ user และจำไว้ และก็เข้าไปแก้เนื้อความของ signaling message จาก private ip/port ของ user ให้เป็น public ip/port ของตัวอุปกรณ์ sbc เอง แล้วก็แก้ source ip/port ใ้ห้เป็นของตัวเองด้วย เสร็จแล้วค่อยส่งไปที่ call agent server ดังนั้นในฝั่งของ call agent server ก็จะไม่รู้เรื่องอะไรและทำงานเหมือนตัวเองกำลังทำงานกับ user agent รายหนึ่งปกติทุกอย่าง ในทางกลับกัน พอ call agent server ส่ง signaling message กลับมา SBC ก็จะเปลี่ยน destination ip/port ให้เป็น public source ip/port ที่จำไว้ในตอนแรก และก็ระบุในเนื้อความของ signaling message ไปด้วยว่าให้ใช้ media ip/port ของตัว SBC เอง เป็น channel ในการส่ง media ออกมา ซึ่ง user agent ก็จะใช้ public ip/port ของ SBC นี้เป็น destination ในการส่ง media ออกมาหา ทำให้ตัว SBC สามารถเป็น media proxy ไปด้วย และก็ทำให้สามารถทำการ connect control และ charge connection ที่มีการ set up ขึ้นได้ตามที่ต้องการ

ด้วยวิธีการนี้ก็จะทำให้แก้ปัญหาสองเรื่องคือ unsolicited connection กับ private ip ได้ เพราะ SBC รู้อยู่ตลอดเวลาว่าจะติดต่อ user ที่ ip/port ไหน และตัวเองทำตัวเป็น signaling proxy คอยแก้ไข mapping เรื่อง private ip ในเนื้อความของ signaling message ให้

Friday, October 19, 2007

PBT? Not Yet

วันนี้ได้คุยกับ operator เอกชนรายหนึ่งที่ให้บริการวงจร Ethernet กับ ธุรกิจทั่วไป ปรากฏว่าเขาได้ลองทดสอบ PBT จากหลายยี่ห้อในปีที่ผ่านมา แต่ comment ที่ได้กลับไม่ work ครับ ยุ่งยากและ reliability สู้วิ่งผ่าน backbone ที่เป็น TDM ไม่ได้ และก็กำลังจะกลับมาดูการให้บริการโดยใช้ NG-SDH โดยอาศัย feature L2 บน SDH ดู ส่วน service Ethernet ที่เขาใ้ห้บริการอยู่นั้นจะใช้ L2 Switch ในการให้บริการโดยตรง อาศัยแค่ SDH มา transport Gigabit Ethernet ในแบบ point-to-point ในส่วนของ backbone แค่นั้น เป็นข้อมูล reality check ดีเหมือนกัน ว่าในการนำไปใช้จริงตอนนี้เป็นยังไง

Thursday, October 18, 2007

Submarine EDFA

EDFA หรือ Erbium Doped Fiber Amplifier อาศัยหลักการกระตุ้น Erbium ให้มีพลังงานสูง อยู่ใน meta state แล้วพอ wavelength ที่ต้องการขยายวิ่งเข้ามา ก็จะมีการถ่ายเทพลังงานให้ พลังที่ใช้กระตุ้นก็จะเป็นแสงที่ความยาวคลื่น 980 nm ทีนี้ถ้าเป็นใต้ทะเล วิธีการส่งพลังงานก็อาจจะเป็นแบบ Remote Pump คือตัวก่อกำเนิดพลังงานแสงหรือ pump อยู่บนบกแล้วยิงแสงเข้าไปใน fiber หรืออีกแบบก็คือแบบ Remote Power Feed คือ feed กระแสไฟเข้าไปใน fiber ผมไปเจอรูป EDFA ที่ใช้ใต้ทะเลของ Tyco เลยเอามาเก็บไว้ ใหญ่โตดีจริงๆครับ และรู้สึกจะเป็นแบบ Remote Power Feed ครับ

Tuesday, October 16, 2007

Packet-based Transport Acronym Soup

ตอนนี้มีความพยายามพัฒนาเทคโนโลยีที่เป็น packet-based transport ออกมาหลากหลาย มี acronyms เยอะแยะไปหมดจนจะจำไม่ไหวแ้ล้ว ทางฝั่ง ITU ก็เสนอให้เอาเทคโนโลยี MPLS นี่แหละมาทำเป็น transport layer เลย โดยตัด feature ที่ไม่เกี่ยวข้องออกไป โดยเฉพาะในส่วนของ control protocol นี่ให้ตัดออกไปเลยแล้วใช้การ provision ผ่าน network management แทน และก็เน้นเฉพาะ feature ที่จะรองรับ connection-oriented circuit เท่านั้น ITU เรียกอันนี้ว่า T-MPLS

อีกค่ายหนึ่งก็เป็นกลุ่มของทาง IEEE เิริ่มจากการพัฒนาโดยเอา concept ของ 802.1q (VLAN tag), 802.1ad (QinQ) มาใช้พัฒนาเป็นเทคโนโลยีแบบ MAC in MAC ในมาตรฐาน 802.1ah ซึ่งมีชื่อว่า PBB (Provider Backbone Bridge) แล้วก็พัฒนาต่อขึ้นไปอีกเป็น PBT (Provider Backbone Transport) ซึ่งต่อมาก็เปลี่ยนชื่อมาเป็น PBB-TE (Provider Backbone Bridge - Traffic Engineering) โดยใน PBB-TE นี้จะมี frame เหมือนใน PBB แต่จะ disable หลายๆอย่างด้วยกันเช่น mac learning/flooding และใช้การ configure จาก NMS เอาแทน รายละเอียดต่างๆ คงต้องมาเขียนเก็บไว้อีกที

จริงๆแล้วก่อนหน้านี้ก็มีการเอาโครงข่าย MPLS มาเสนอให้เป็น Transport ของ packet traffic เหมือนกัน แต่ใช้ความสามารถของ MPLS network โดยตรง โดยอยู่ในลักษณะของ L2 VPN ที่เรียกว่า Pseudo-wire ที่ IEEE ตั้งมาตรฐานว่า PWE3 (Pseduo-wire emulation edge-to-edge) E3 ก็คือ E ยกกำลังสามไงครับ จำง่ายๆว่าคือของ IEEE โดย PW นี้ก็จะมีทั้งแบบ point-to-point ที่ใช้ martini-draft RFC กับแบบ multipoint ที่เรียกว่า VPLS (Virtual Private LAN Service) บนอุปกรณ์ MPLS ของ Cisco นั้นรองรับ PW มานานแล้วและเรียกว่า AToM (Any Transport over MPLS)

เยอะดีไหมครับ สรุปทั้งสามส่วนนั้นก็เป็นความพยายามจะสร้าง Transport Network ที่มีความเหมาะสมกับการส่งผ่าน Packet มากที่สุดแหละครับ สรุปง่ายๆดังรูปด้านบนนั่นเองครับ จริงๆแล้วในปัจจุบันเราก็พยายามจะใช้ transport network ที่มีอยู่มานานมากแล้วคือ SDH/DWDM นั่นเองโดยเพิ่มความสามารถในการรองรับ Layer 2 เข้าไปและเพิ่ม GFP/VCAT/LCAS เข้าไปเพื่อให้เหมาะสมต่อการ encapsulate และ map Ethernet bandwidth ได้ดีขึ้น นอกจากนี้ก็เอา signaling เข้ามาใช้เพิ่มเข้าไป ก็คือ ASON/GMPLS นั่นเอง ซึ่งความเห็นส่วนตัวผมคิดว่าคงจะไปในแนวนี้อีกนานครับ กว่าทั้ง T-MPLS กับ PBB-TE จะ mature พอ และอย่าลืมนะครับว่า traffic ที่เป็น TDM ก็ยังคงมีอยู่ไม่ได้หายไปไหนมาเป็นเวลานานมากแล้ว ผมคิดว่าโครงข่าย Transport กับ Service ใน core คงจะเป็นดังในรูปข้างล่างนี้ไปอีกพักใหญ่ๆครับ