By Arnon Puitrakul - 30 กรกฎาคม 2021
หลาย ๆ คนอาจจะยังไม่เคยได้ยินคำว่า IP Address มาก่อน แต่เราบอกได้เลยว่ามันเป็นอะไรที่เราใช้งานกันอยู่ทุกวันจริง ๆ เราใช้งานมันตลอดเมื่อเราเชื่อมต่อ Internet ปัจจุบัน IP Address ที่เรานิยมใช้กันอย่างแพร่หลายคือ IPv4
แต่เมื่อเช้าอ่านข่าวเจอว่า ทางจีนกำลังเปลียนแปลงระบบ Network ภายในประเทศให้ไปใช้ IPv6 ภายในปี 2030 บางคนอ่านแล้วอาจจะ งง ว่า แล้ว IPv6 คืออะไร และ ถ้าเปลี่ยนแล้วจะเป็นยังไง วันนี้เราจะมาเล่าให้อ่านกัน
IP Address หรือ Internet Protocol Address ก็ตามชื่อเลยคือมันเป็นที่อยู่ในระบบ Internet ซึ่งในการสือสารบน Internet ทั้งหมด เราจะต้องมี IP Address ทุกคนเลย อารมณ์เหมือนกับบ้าน มันก็ต้องมีที่อยู่เพื่อให้เราสามารถส่งของไปถึงได้อะไรแบบนั้น ถ้าเราอยากรู้ว่า ตอนนี้เรา IP Address อะไร เราสามารถลองค้นหาใน Google ว่า What's my IP มันจะตอบกลับมาเลยว่า ตอนนี้เราอยู่ใน IP Address อะไร (จริง ๆ แล้วมันอาจจะไม่ Accurate ขนาดนั้น เดี๋ยวไว้มาเล่าให้อ่านว่าทำไม)
บางทีเราอาจจะเคยได้เห็น หรือได้ใช้ IP Address กันมาบ้างแหละ โดยเฉพาะเด็กยุค 90 ปลาย ๆ อย่างเรา เมื่อก่อน เวลาเราจะเล่น Counter Strike กัน เราจะบอกว่า เห้ยมึง LAN กัน IP ไรว้าาา นั่นแหละ คือ IP Address เด็กเดี๋ยวนี้น่าจะ งง นะว่ามันคืออะไร ฮ่า ๆ เราอาจจะเคยได้เห็นตัวเลขชุดนึงอารมณ์ประมาณ 192.168.1.112 อะไรแบบนั้น ใช่แล้ว นั่นคือเลข IP Address นั่นเอง ซึ่งตัวเลขที่เป็นไปได้ จะอยู่ตั้งแต่ 0.0.0.0 - 255.255.255.255
ถ้าเราดูดี ๆ มันจะเอ๊ะนิด ๆ 255 มันใช้ 8 Bit ในการแสดง ดังนั้น IP Address เราก็จะใช้ 32 Bits ในการแสดงนั้นเอง เพราะเราใช้ทั้งหมด 4 หลัก ทำให้เราเรียกมันว่า IPv4 นั่นเอง ดังนั้น ถ้าเราบอกว่า ทุกอุปกรณ์ต้องมี 1 IP Address ดังนั้น ชุดตัวเลขขนาด 32 Bits ก็จะสามารถมีอุปกรณ์ในระบบได้เพียง 2 ยกกำลัง 32 หรือ 4,294,967,296 ชิ้นเท่านั้น
เมื่อก่อน เราไม่ได้มีอุปกรณ์เยอะมาก อย่างมากคนนึง ก็เครื่องเดียวเท่านั้น แต่ปัจจุบัน การเข้าถึงเครื่องคอมพิวเตอร์ และ Internet มันง่ายขึ้นกว่าเมื่อก่อนมาก จากมีคนละเครื่องตอนนี้มันล่อมีกันคนละ 3-4 เครื่องเลย ไหนจะโทรศัพท์ ไหนจะ Tablet ไหนจะ Laptop และ PC ทำให้จริง ๆ แล้วอุปกรณ์ทั้งโลกมันเกิน 4 พันล้านกว่าชิ้นที่เราคำนวณเมื่อกี้แน่ ๆ ยิ่งไปกว่านั้น การมาถึงของ IoT (Internet of Things) ก็ทำให้จำนวนอุปกรณ์มันบวกทวีคูณเข้าไปเยอะจนน่าตกใจเลย ถามว่า แล้วถ้าเลข IP Address ของเรามันมีจำนวน Bit ที่ใช้เก็บไม่พอ เราจะทำยังไงดีละ นี่แหละ ง่ายมาก ๆ เราก็เพิ่ม Bit มันเข้าไปดิ ยากอะไร ครับใช่ ดื้อ ๆ เลย จากเดิมเราใช้ 32-Bits ในการบอกเลข IP Address เราก็เอาใหม่ งั้นเราใช้มันไปเลย 128 Bits นั่นแปลว่า ในระบบ เราจะสามารถเก็บอุปกรณ์ได้ถึง 2 ยกกำลัง 128 กันไปเลย ซึ่งถือว่าเยอะมาก ๆ เลยนะ
พอจำนวน Bit มันเยอะขึ้น ถ้าเราจะเขียนแบบเดิม ปวดหัวแน่ ๆ เพราะมันจะยาวมาก ๆ ทำให้ในมาตรฐานเลยกำหนดใหม่ว่า เพื่อให้สั้นลง เราจะเปลี่ยนไปใช้เลขฐาน 16 แทนซะเลย โดยที่ จะแบ่งออกเป็น 8 หลัก ในแต่ละหลักจะถูกแบ่งออกเป็น 16 Bits ก็จะได้ 128 Bits พอดีเลย ทำให้เมื่อเขียนออกมา บางคนอาจจะ งง ว่า เอ๊ะ อะไรของมันทำไมเขียนตัวเลขออกมาเป็นแบบนี้ แล้วจะเข้าใจได้ยังไง แต่เอาจริง ๆ พอเรียนคอมพิวเตอร์ การแปลงเลขฐาน 2,10,8,16 คือเราคิดในหัวได้เร็ว ๆ เลย แปลงกันหนุบหนับทุกวัน เลยไม่มีปัญหาอะไร
เอาให้ลึกขึ้นอีกนิดนึง เราจะแบ่ง IP Address ออกเป็น 3 ส่วนด้วยกัน โดยที่ 48 Bits แรกจะทำหน้าที่เป็น Routing Prefix อีก 16 Bits ต่อไปจะเป็น Subnet ID และที่เหลืออีก 64 Bits จะเป็น Interface ID ถ้ามองง่าย ๆ คือ มันจะไล่การกำหนดลงไปเรื่อย ๆ อย่าง Routing Prefix ก็จะถูกจ่ายโดย ISP (Internet Service Provider) หรือ Regional Internet Registry (RIR) พอลงไปลึกอีกคือ Subnet ID ก็ไปดูว่า เราอยู่ส่วนไหนของ Network ใน ISP หรือ RIR และสุดท้ายมันก็จะลงไปที่ Interface ID ละว่า ใน Subnet หรือส่วนที่เราอยู่ มันคือเท่าไหร่
ดูเหมือนจะยุ่งยากขึ้น แต่จริง ๆ แล้วกลับกันเลย เพราะการที่เราใช้ Address ลักษณะนี้ ทำให้ความซับซ้อนในการทำ Routing นั้นลดลงเป็นอย่างมาก พร้อมกับจำนวน Address ในระบบที่มีมากพอสำหรับจำนวนอุปกรณ์ปัจจุบัน ทำให้ทุกคนสามารถมี Address เป็นของตัวเองได้ นั่นส่งผลในการทำพวก Peer-to-Peer Application เช่นการทำ Video Conference App หรือ VoIP ทำได้อย่างปลอดภัยมากขึ้นเพราะเราสามารถเชื่อมต่อกันตรง ๆ ได้เลย โดยที่ไม่ต้องผ่าน Server กลางเหมือนทุกวันนี้ เหมือนที่เคยมีข่าวว่า Zoom สามารถโดนดักฟังได้ตอนนั้นแหละ (ซึ่งทุกวันนี้เราแก้ปัญหาด้วยการทำ E2E Encrpytion กล่าวคือ ทำการเข้ารหัสทั้ง 2 ฝั่ง ทำให้คนกลางเปิดอ่านข้อมูลไม่ได้)
ปัญหาของ IPv6 คือ มันเปลี่ยน Scheme การแสดง IP Address ใหม่หมดเลย ดังนั้น อุปกรณ์ที่ออกมาก่อนหน้านี้ละ ชิบหายละ เราไม่สามารถที่จะออกมาบอกทุกคนบนโลกที่ต่อ Internet ว่า เห้ย อีก 120 วันจะเปิดประเทศ เห้ย จะให้ทุกคนเปลี่ยนอุปกรณ์เพื่อให้รองรับ IPv6 ทั้งหมดเลยนะ ใครไม่เปลี่ยนใช้ไม่ได้เด้ออออ อะไรแบบนั้น มันก็ทำไม่ได้ถูกม่ะ ดังนั้นสิ่งที่เรากำลังทำกันอยู่ตอนนี้ คือการทำให้การเปลี่ยนผ่านนั้นราบลื่นที่สุด ตอนนี้เราเลยมีการใช้ IPv4 ผสมกับ IPv6 อยู่
ส่วนตัวในมุมของนักคอมพิวเตอร์เรามองว่าการเปลี่ยนจากการใช้ IPv4 กลายเป็น IPv6 ทั้งหมดเลย ก็เป็นเรื่องดีอยู่นะ การมี Address ที่มากขึ้น ก็ทำให้การ Routing ข้อมูลโดยรวมในระบบมีความซับซ้อนน้อยลง นอกจากนั้น การเข้าถึงแบบ Peer-to-Peer ทำได้กับทุกอุปกรณ์ในระบบไปเลย ทำให้เกิดความเป็นไปได้ที่หลากหลายมากขึ้นเยอะมาก ๆ แต่ถ้าเรามองในมุมของการเมือง และการควบคุมได้อย่างเบ็ดเสร็จจริง ๆ เลยนะ เพราะก่อนหน้านี้ การที่เราจะสืบหา IP Address ของผู้กระทำความผิด มันทำได้ยากต้องอาศัยความร่วมมือของ ISP (อาจจะขอความร่วมมือ หรือ ใช้กฏหมาย หมายศาลบังคับก็ว่ากันไป) เพราะ IP Address มันอยู่ข้างหลัง NAT (Network Address Translation) แต่ใน IPv6 มันไม่มีแล้ว เราไม่จำเป็นต้องใช้แล้ว ทำให้การสืบหาผู้ต้องหาทำได้ง่ายขึ้นมาก เรื่องที่เราคุยเล่น ๆ กันสมัยก่อน ที่แบบว่าเราโหลด BitTorrent แล้วตำรวจมาเคาะประตูบ้านเราใน 5 นาที อาจจะเป็นจริงได้เลย
เคยมั้ยเวลา Deploy โปรแกรมสักตัว เราจะต้องมานั่ง Provision Infrastructure ไหนจะ VM และ Settings อื่น ๆ อีกมากมาย มันจะดีกว่ามั้ยถ้าเรามีเครื่องมือบางอย่างที่จะ Automate งานที่น่าเบื่อเหล่านี้ออกไป และลดความผิดพลาดที่อาจจะเกิดขึ้น วันนี้เราจะพาทุกคนมาทำความรู้จักกับ Infrastructure as Code กัน...
เมื่อหลายวันก่อน เราเลื่อนเฟสไปเจอความเห็นนึงที่อ่านแล้วถึงกับต้องขยี้ตาอ่านซ้ำบอกว่า ให้เราลองถาม ChatGPT ดูแล้วเราจะไม่กลับไปหา Google อีกเลย มันเป็นแบบนั้นได้จริงหรือไม่ วันนี้เราจะมาอธิบายในแง่หลักการทำงานของมัน และความเป็นไปได้กันว่า มันเป็นไปได้จริงหรือไม่อย่างไร...
ในปัจจุบันเราพึ่งพาการเก็บข้อมูลต่าง ๆ บนเครื่องคอมพิวเตอร์มากขึ้นเรื่อย ๆ สำหรับบางคนมากจนไม่สามารถเก็บได้ในเครื่องของเราอีกแล้ว ทำให้อาจจะต้องมองหาระบบจัดเก็บข้อมูลอื่น ๆ เข้ามาใช้งาน หนึ่งในนั้นคือการใช้ NAS หลายคนมีคำถามว่า แล้วเราควรจะเลือกซื้อ NAS สำเร็จรูป หรือ DIY ดี...
เราไปเจอความเชื่อนึงเกี่ยวกับ SQL Query มาว่า เนี่ยนะ ถ้าเราจะ Count หรือนับแถว เราอย่าไปใช้ count(*) นะ ให้เราใช้ count(id) หรือด้านในเป็น Primary Key ใน Table นั้น ๆ จะทำให้ Query ได้เร็วกว่า วันน้ีเรามาทดลองกันดีกว่า ว่ามันเป็นแบบนั้นจริง ๆ หรือไม่...