เน็ตไม่ห่วย เราท์เตอร์ห่วย

เวลาเล่นดอทมีปัญหาพื้นฐานที่ผมรำคาญมาก

คือ ping มันวิ่งตั้งแต่ 80-200 บางทีจะตีกันอยู่ ping 500 พอเดินออกมาหาย ที่แย่กว่าคือตอนจะตีกัน ping อย่างดี พอจะถอย dc lag ไปเลย ทีมก็ ping รัวๆ เฮ้ยยืนเฉยๆ ทำไร ส่วนผมน่ะหรอ กลับมาอีกทีเห็นแต่ ping รัวๆ กับศัตรูไล่ดันข้ามศพผมมาถึงหน้าป้อมแล้ว

ผมก็ลองหลายๆ วิธีดู เริ่มจากง่ายๆ เสียบแลนเล่น ทีแรกเหมือนจะดี แต่เปล่าเลย placebo ชัดๆ สุดท้ายก็อาการเดิม

ถัดมา ผมมี Cisco-Linksys WAG320N อยู่ตัวนึงตั้งแต่สมัยบ้านผมใช้ xDSL ก็เลยเอามาต่อแล้ว bridge จากโมเด็มทรู (Cisco) เข้าตัวนี้ ให้ตัวนี้ทำ NAT

แรกๆ นี่อย่างลื่นครับ ping 80-100 สนุกเลย

จนกระทั่งวันนึง ping 500 ทั้งเกม ผมบ่นใน team chat จนทีมด่ามันก็ไม่หาย lag จนกระทั่งผม dc lag ผมหันไปดูแล้วพบว่า…. router ดับ!!! คือเคเบิลโมเด็มยังติดอยู่ แต่ว่า WAG320N ดับชนิดที่ว่าเหมือนชักปลั๊กออก (แต่ไม่มีใครไปแตะอะไรมัน)

nrsAU[1]

ผมเล่าให้พ่อฟัง พ่อคิดว่าน่าจะเป็นเพราะสัญญาณเน็ตมากกว่า (บ้านผมอยู่เกินระยะเดินสายฟรีและต้องใช้สายอีกชนิดเดินเข้า)

แต่ผมไม่เชื่อว่ามันจะเป็นที่เน็ตจริงๆ ก็เลยคิดว่าจะเก็บตังซื้อ Ubiquiti EdgeRouter มาใช้ (สรรพคุณมันคือ router ที่เป็นแค่ router จริงๆ ครับ ต่อเน็ตไม่ได้ ไม่มีไวไฟ และไม่มีสวิทช์ด้วย คือแต่ละช่องคือ network แยกกันอิสระไม่เกี่ยวกันเลย จะตั้งให้มันเป็น switch ก็ได้แต่ performance ก็จะต่ำเพราะมันใช้ software ทำ)

พ่อถามว่าบ้าป่าว จะเล่นเกมต้องซื้อ router ตัวหลายพัน หันไปหันมาเจอกับ PC เก่าผมที่รัน whsgroup.ath.cx ก็เลยเอามาทำ router ซะเลยละกัน


สำหรับ Config ที่ผมใช้ก็ไม่มีอะไรมากครับ เป็น Ubuntu 12.04 ลง EBox (ปกติผมไม่อยากลง Ubuntu นะ แต่จะใช้ EBox เลยต้องลง) ที่เลือก Ebox เพราะอยากได้ระบบแชร์ด้วยครับ (ใช้เป็น NAS นั่นแหละ) จริงๆ ก็เซตมือก็ได้แต่ถ้ามี GUI ให้ครบเลยก็จบ และอีกเหตุผลนึงคือมันอยู่บน Ubuntu ปกติที่ผมจะลงอะไรเล่นก็ได้ ถ้าเป็นดิสโตรแบบที่รันแต่ firewall จะลงอะไรก็ลำบาก (เอาเข้าจริงก็แทบไม่ได้ลงอะไรเลยอยู่ดี)

ส่วนการต่อก็จะต่อเป็น Cable modem > server > WAG320N (ใช้ปล่อย Wifi)

Capture

หลังลงเซิร์ฟเวอร์เสร็จแล้วพบความเปลี่ยนแปลงอย่างมากเลยครับ ping dota ผมจาก 80-100 กลายเป็น 80 ทั้งเกมไม่มีกระตุก!! ผมนี่เหลือเชื่อเลย

แต่ก็มีอยู่วันนึงนะครับที่ dota มัน ping 80-500 อยู่ ผมก็งงว่า อ้าว ตกลงมันได้ผลมั้ยเนี่ย ซึ่งตรงนี้ก็เป็นข้อดีของการที่ทุกอย่างผ่าน server คือเราก็แอบดักฟังได้ ผมเลยใช้โปรแกรม iftop ดักเลยครับ

Capture

ด้วยพลังแห่ง iftop ก็จะมองเห็นได้เลยครับว่ามีการต่อไปที่ ip ไหนอยู่บ้างตอนนี้ ใช้ bandwidth เท่าไร อย่างตอนที่กระตุกครั้งนั้นผมเปิดดูแล้วก็พบว่าไม่ใช่อะไร น้องผมดูซีรีส์อยู่นั่นเอง….

>my sister is watching series

>kill your sister

— Teammate, 2015


ปล. พอมี server แล้วเลยลองปรับ wifi ที่บ้านให้ใช้ WPA2-Enterprise ด้วยครับ โดนทั้งบ้านบ่นเลยเพราะว่ามันต่อยากมาก ใน Android มี dropdown 3 ช่อง input 3 ช่องให้กรอก (ซึ่งไม่ต้องกรอกทั้งหมดก็ได้) ถ้าไม่เคยใช้นี่งงแน่นอน

โชคดีที่เลือก PHP

เทอมนี้มีโปรเจกท์วิชาหนึ่งให้เขียนเว็บใน Java ครับ

ผมก็รู้สึกมาสักพักแล้วว่า Java web เนี่ยมัน too enterprise เกินไปจนไม่น่าใช้ ก็มาเขียนจริงๆ ก็พบว่าด้วยธรรมชาติของภาษาที่เป็น static typed เลยไม่ค่อยน่าเขียนด้วย (แต่ทำงานอื่นยังพอน่าใช้นะ มันช่วยเรื่อง document นิดหน่อย)

ข้อสังเกตอันนึงที่ผมเพิ่งพบตอนไปอ่านโค้ดเพื่อนที่ไม่เคยเขียนเว็บฝั่งเซิร์ฟเวอร์ในภาษาอื่นเลย คือมีหลายคนพลาดใช้ class attribute เก็บ state ของโปรแกรม (ซึ่งมันควรจะเป็น stateless)

ก็คงไม่แปลก เพราะตอนเขียน desktop application มันต้องทำแบบนี้ ก็คงมีคนเข้าใจผิดมาทำในเว็บ (ผมเองก็เคยใน Python)

ผมเลยนึกออกว่าสมัยเขียนเว็บใหม่ๆ ผมน่าจะโชคดีแล้วที่ใช้ PHP มาก่อน เพราะตัวภาษามัน design มาเหมาะกับงานเว็บ ทุกอย่างเป็น stateless หมด จบ request คือปิดโปรแกรม มันก็ทำให้ไม่ต้องมานั่งทำความเข้าใจว่าวิธีแบบนี้มันไม่เวิร์ค

ก็คิดไม่ถึงนะว่าถึงตัวภาษาจะ design มาไม่ค่อยดี (ในสมัยนั้น) แต่ก็มีมีข้อดีอยู่เหมือนกัน