ทำความเข้าใจเบื้องต้น IP Address Version 4 ในระบบ Computer Network
IP ย่อมาจาก Internet Protocol คือ Protocol ที่ใช้ในด้าน Computer Network เพื่อใช้สื่อสารกันได้ในลักษณะที่เรียกกันว่า “Host-to-Host”
โดยทำงานอยู่ในชั้นสื่อสาร OSI Model layer 3 (Network Layer)
Internet Protocol จะมีฟังก์ชั่นที่ใช้ทำ Logical Address เพื่อระบุที่อยู่ให้กับ Host นั้นๆ โดยปกติแล้วจะถูกคอนฟิกที่ Interface LAN เราเรียกกันว่า “IP Address”
Internet Protocol จะมีใช้งานอยู่ 2 Version คือ Version 4 และ 6 ในบทความนี้จะพูดถึง Version 4 ก่อนครับ คือ “IPv4 Address” ครับ
จากบทความเดิม -> https://medium.com/@akenetjpk/4271a7d4b9e1 ได้พูดถึงสิ่งที่เรียกว่า Layer 3 Header (Internet Datagram Header) ไปแล้ว
ในบทความนี้ผมจะพูดถึงข้อมูลอยู่ใน
Field : Destination Address
และ
Field : Source Address
ซึ่งในทั้ง 2 Field ข้างต้นนั้น ข้อมูลในนั้นเราจะใส่ข้อมูลที่เรียกว่า IP Address ลงไปครับ เพื่อใช้ระบุที่อยู่ให้กับ Host นั้นๆครับ
ปี คศ.1981
IPv4 (Internet Protocol version 4) ได้ถือกำเนิดขึ้นมา เพื่อใช้เป็นโปรโตคอลสำหรับการสื่อสารผ่านอินเทอร์เน็ต
IPv4 เป็นข้อกำหนดกฎและข้อจำกัดสำหรับการสื่อสารผ่านอินเทอร์เน็ต (Internet) หรือบนเครือข่ายท้องถิ่น (LAN : Local Area Network)
ปี คศ.1986–1987
คุณ Jon Postel https://www.internethalloffame.org/inductee/jon-postel/ และ คุณ J. Reynolds
ได้กำหนดมาตรฐานและกลุ่มของตัวเลขเพื่อใช้ทำ Logical Address โดยตัวเลขนี้จะเป็นขนาด 32 Bits
ใช้สำหรับ ระบุที่อยู่ ให้กับการติดต่อสื่อสารกันในระดับ Host-to-Host
จากที่ได้กล่าวในตอนต้น ตัวเลข IP Address Version 4 มีขนาด 32 Bits ดังนั้น จะมีค่าตั้งแต่ ถ้ามองเป็นเลขฐาน 2 ก็คือ
ตั้งแต่
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0001
0000 0000 0000 0000 0000 0000 0000 0010
0000 0000 0000 0000 0000 0000 0000 0011
ตามจำนวนนับไปเรื่อยๆจนสุดแล้วถึงที่
1111 1111 1111 1111 1111 1111 1111 1111
แต่เพื่อให้มนุษย์เราเข้าใจง่ายขึ้น การแบ่งตัวเลข 32 Bits นี้ จะถูกคั่นด้วย . (จุด) เพื่อคั่นตัวเลขให้นับทีละ 8 Bits (Octet) ครับดังนี้
ตั้งแต่
00000000.00000000.00000000.00000000
ถึง
11111111.11111111.11111111.11111111
ถ้าแปลงเป็นเลขฐาน 10 ก็คือ
ตั้งแต่
0.0.0.0
ถึง
255.255.255.255
Logical Address จำนวน 32 Bits ในรูปแบบ IP Address Version 4 นี้ ก็จะถูกแบ่งออกเป็น 2 ส่วนครับ คือส่วนที่เรียกว่า Network ID และ Host ID ครับ
เปรียบเทียบง่ายๆให้มองภาพของการส่งจดหมายในชีวิตจริงครับก็คือ
Network ID ก็อาจจะเป็นชื่อ เมือง จังหวัด อำเภอ หรือ ตำบล นั้นๆ
Host ID ก็จะเป็นบ้านเลขที่ ที่อยู่ใน เมือง จังหวัด อำเภอ หรือ ตำบลนั้นๆครับ
ยกตัวอย่างเช่น
เราจะส่งข้อมูล ข้อมูล(Data)ดังกล่าว ก็เปรียบเทียบเป็น เนื้อหาใน จดหมาย
ส่วนที่อยู่ปลายทาง(Destination) หรือผู้รับ เราจะจ่าหน้าซองว่า บ้านเลขที่อะไร และ อยู่ จังหวัด อำเภอ ตำบลอะไร
ข้อมูลที่ส่งผ่าน Internet ก็เช่นเดียวกัน เราก็จะเอาตัวเลข 32 Bits มาแบ่งส่วน เราต้องการส่งข้อมูลไปยังปลายทางที่มี Logical Address นี้ คือ IPv4 address : 192.168.1.34 ก็จะประกอบไปด้วยข้อมูล 2 ส่วนคือ Network ID (จะเป็นค่าทางซ้ายเสมอ) และ Host ID (จะเป็นค่าทางขวาเสมอ ) จากรูปตัวอย่างด้านบน
192.168.1 คือ Network ID เปรียบเทียบก็คือ ไว้ใช้ระบุว่าเป็น เมืองอะไร
.34 คือ Host ID เปรียบเทียบก็คือ ไว้ใช้ระบุว่าเป็น บ้านเลขที่อะไร
ทำไมเราต้องแบ่งแบบนี้ ? ลองนึกภาพตามก็ได้ครับ เทียบกับการส่งจดหมาย ถ้าเราบอกแค่ว่า จดหมายนี้ ต้องส่งไปที่บ้านเลขที่ 123428359 โดยไม่ต้องบอก จังหวัด หรือ ตำบล กว่าจะหาบ้านหลังนี้เจอ ก็ต้องจะต้องค้นหานานมาก แต่ถ้ามีการแบ่งเป็น จังหวัด ตำบล อำเภอ ก็จะทำให้เป็นหมวดหมู่ ค้นหาได้ง่ายและรวดเร็วขึ้นครับ
เช่นเดียวกัน ในระบบเครือข่ายคอมพิวเตอร์เราก็ต้องทำการแบ่งกลุ่ม ของอุปกรณ์เครือข่ายคอมพิวเตอร์ เพื่อที่จะทำให้ส่งข้อมูลไปยังปลายทางที่ต้องการได้ไวขึ้น เพราะระบบจะค้นหาโดยเริ่มต้นอ้างอิงจากกลุ่มก่อนด้วย Network ID จากนั้นก็ค่อยค้นหาในกลุ่มโดยใช้ Host ID
สรุปแล้วเราต้องแบ่งข้อมูล Logical Address 32 Bits ให้มี 2 ส่วนก็เพราะว่า
ต้องการจัดกลุ่มเครือข่าย: Network ID ช่วยระบุเครือข่ายที่อุปกรณ์นั้นอยู่ ทำให้จัดการเครือข่ายได้ง่ายขึ้น โดยการทำ Subnetting ช่วยให้จัดการทรัพยากรเครือข่ายและควบคุมทราฟฟิกได้ดีขึ้น
ต้องการส่งข้อมูลได้รวดเร็ว: เราเตอร์ใช้ Network ID ในการกำหนดเส้นทางข้อมูลไปยังเครือข่ายที่ถูกต้อง และใช้ Host ID ระบุอุปกรณ์ในเครือข่ายนั้น
ต้องการความปลอดภัย: ช่วยในการตั้งค่าการเข้าถึงและการกรองแพ็กเก็ตตาม Network ID เพิ่มความปลอดภัยเครือข่าย
เราจะแบ่งกลุ่มด้วยวิธีไหนหละ? คำตอบก็คือด้วยการทำ Subnet
แล้วการทำ Subnet คืออะไรหละ?
ก็คือการแบ่งกลุ่มของเครือข่ายครับ โดยเราจะใช้ตัวเลขขนาด 32 Bits เช่นเดียวกัน เพื่อมากระทำการบางอย่างกับ Logical Address 32 Bits (IP Address Version 4) เพื่อใช้ระบุว่า Network ID ได้ค่าเท่าไหร่ และ Host ID คือค่าอะไร
จากรูปด้านบน
192.168.1.34 เราจะรู้ได้อย่างไร ว่า Network ID คืออะไร และ Host ID คืออะไร เราก็ต้องมาดูที่ค่าของ Subnet Mask ครับ
192.168.1.34 มีค่า Subnet Mask คือ 255.255.255.0 ก็คือ เป็นการเอาค่า
192.168.1.34 มากระทำการคำนวณทางตรรกศาสตร์ โดยดำเนินการทีละบิทด้วยวิธีการที่เรียกว่า “AND , &&” ครับ
จะได้
192.168.1.34
AND
255.255.255.0
จะได้
192.168.1.0 จะเป็นค่า Network ID ครับ
ส่วน .34 จะเป็นค่า Host ID ครับ
แปลงเป็นเลขฐาน 2 จะเห็นภาพเข้าใจง่ายขึ้นดังนี้ครับ
IPv4 Address: 192.168.1.34 = 11000000.10101000.00000001 .00100010
AND
Subnet Mask: 255.255.255.0 = 11111111.11111111.11111111 .00000000
=>
Network ID : 192.168.1.0 = 11000000.10101000.00000001 .00000000
ถ้าจะบอกว่า IPv4 : 192.168.1.34 อยู่ใน Network อะไรเราก็จะเขียนในรูปนี้ครับคือ Network : 192.168.1.0/24
เลขที่ตามหลังเครื่องหมาย / เราเรียกว่า Prefix Length โดยจะมีค่าเป็น /8, /16 และ /24 ก็ได้ครับ ขึ้นอยู่กับ Class ของ IP (กล่าวในเนื้อต่อไป) ที่เราใช้งานหรือขึ้นอยู่กับการออกแบบตามความต้องการของเราได้ครับ
ส่วน Prefix Length = 24 หมายถึง เป็นการบอกว่า Subnet Mask มี Bit ที่เป็น 1 จำนวนกี่ตัว จากเลขฐาน 10 คือ 255.255.255.0 ก็คือ มีจำนวน Bit ที่เป็น 1 ทั้งหมด 24 ตัวครับ
พอเราได้ Network ID แล้ว เราก็จะรู้ IP Address แรก(เรียกอีกชื่อว่า Network IP) และ IP Address สุดท้าย (เรียกว่า Broadcast IP) ของ Subnet นั้นๆ จากตัวอย่างตอนต้นที่เราคำนวณจาก 192.168.1.34/24 จะได้
Network ID: 192.168.1.0 คือ Network IP หรือ IP Address แรกของ Subnet
Host ID: 192.168.1.34
จากนั้นเราจะหา Broadcast IP ได้โดย ดูจำนวน Bit ที่สามารถเปลี่ยนแปลงได้ คือจากถูกล็อคด้วย 24 Bits ของ Subnet mask เราก็จะเหลือ 8 Bits ทางด้านขวาสุด(จาก 32 Bits) ที่ไว้ใช้สำหรับกำหนด Host ID ใน Subnet นั้นๆครับ
จะได้ 2⁸ = 256 IPs ก็คือ Subnet นี้จะมีจำนวน Host ID ได้ทั้งหมด 256 IPs ครับ โดยจะเริ่มตั้งแต่
192.168.1. 0000 0000 ( Octet ที่ 4 มองเป็นเลขฐาน 2 เพื่อความเข้าใจง่ายครับ)
192.168.1. 0000 0001
192.168.1. 0000 0010
→ ไปเรื่อยๆตามจำนวนนับจนเป็น 1 ทุก Bit จะได้
192.168.1. 1111 1111 ซึ่งก็คือ 192.168.1.255 ในเลขฐาน 10 ครับ
สรุปคือ IP Address แรก 192.168.1.0 จะเป็น Network ID , Network IP
และ IP Address สุดท้าย 192.168.1.255 จะเป็น Broadcast IP Address ครับ
ซึ่ง ทั้ง 2 IPs ดังกล่าวนี้จะไม่สามารถนำมาตั้งค่าให้กับ Hosts ในเครือข่ายได้ครับ แต่จะเป็นการใช้งานสำหรับ Protocol อื่นๆในระบบเครือข่ายครับ เช่น Network ID เอาไว้ประกาศเส้นทางในกระบวนการทำ Routing
แล้วเราจะแบ่ง Network ID และ Host ID อย่างไรดีหละ อะไรคือตัวกำหนด?
ปี คศ.1986
คุณ Jon Postel และคุณ J. Reynolds และทีมงานที่เกี่ยวข้อง ได้ออกเอกสาร RFC 990 ผ่านหน่วยหน่วยงาน IETF โดยเนื้อหาได้มีการระบุ Class ของ IP Address version 4 ไว้ตามรูปด้านบนครับ
Class A : Prefix Length คือ /8 โดย Octet แรก ตำแหน่งบิทที่ 0 จะเป็นค่าคงที่คือ 0 ทำให้จะมี 7 Bits ไว้สำหรับเป็น Network ID และจะเหลืออีก 24 Bits ไว้สำหรับเป็น Host ID คือจะมีจำนวน Host ID ได้ทั้งหมด 2²⁴ IPs
Class B : Prefix Length คือ /16 โดย Octet แรก ตำแหน่งบิทที่ 0,1 จะเป็นค่าคงที่คือ 0 1 ทำให้จะมี 14 Bits ไว้สำหรับเป็น Network ID และจะเหลืออีก 16 Bits ไว้สำหรับเป็น Host ID คือจะมีจำนวน Host ID ได้ทั้งหมด 2¹⁶ IPs
Class C : Prefix Length คือ /24 โดย Octet แรก ตำแหน่งบิทที่ 0,1,2 จะเป็นค่าคงที่คือ 1 1 0 ทำให้จะมี 21 Bits ไว้สำหรับเป็น Network ID และจะเหลืออีก 24 Bits ไว้สำหรับเป็น Host ID คือจะมีจำนวน Host ID ได้ทั้งหมด 2⁸ IPs
Class D : เป็น Multicast Address โดย Octet แรก ตำแหน่งบิทที่ 0,1,2,3 จะเป็นค่าคงที่คือ 1 1 1 0 คือ IP Address หมายเลข 239.0.0.0–239.255.255.255 IP Address Class นี้จะไม่ถูกนำมาใช้งานตั้งค่าให้กับ Host ปกติทั่วไป ไม่ได้ถูกแจกจ่ายให้กับ User ทั่วไปครับ และไม่มี Prefix Length ไว้กำกับครับ
ใช้สำหรับการส่งข้อมูลแบบมัลติคาสต์ (Multicast) ซึ่งหมายถึงการส่งข้อมูลไปยังหลายเครื่องพร้อมกันในเครือข่าย แต่ไม่ใช่การส่งข้อมูลไปยังทุกเครื่องในเครือข่ายแบบบรอดแคสต์ (Broadcast) หรือการส่งข้อมูลไปยังเครื่องเดียวแบบยูนิคาสต์ (Unicast)
การส่งข้อมูลแบบมัลติคาสต์ (Multicast) เช่น IP : 224.0.0.5 เป็น IP Address ที่ถูกใช้ในเรื่องของการทำ Routing ด้วย OSPF Protocol หรือ IP 224.0.0.9 ก็ถูกใช้ใน RIP Protocol เพื่อใช้สำหรับแลกเปลี่ยน Routing Table กัน
Class E : เป็น Reserved for future use สงวนไว้เพื่อการทดลองและการวิจัย ยังไม่ได้นำมาใช้งานทั่วไป คือตั้งแต่ IP Address : 240.0.0.0–240.255.255.255
โปรแกรม Whois คืออะไร?
เป็นเครื่องมือที่ใช้ในการค้นหาข้อมูลเกี่ยวกับการจดทะเบียนชื่อโดเมน หรือ IP Address บนอินเทอร์เน็ต โดยให้รายละเอียดเกี่ยวกับเจ้าของ วันหมดอายุ ชื่อผู้ให้บริการที่จดทะเบียน และข้อมูลติดต่ออื่น ๆ ที่เกี่ยวข้อง
โปรแกรม Whois ดึงข้อมูลจากฐานข้อมูล Whois ที่จัดเก็บโดยองค์กรและหน่วยงานต่าง ๆ ที่รับผิดชอบในการจัดการการจดทะเบียนโดเมนและการจัดสรร IP Address บนอินเทอร์เน็ต ฐานข้อมูลเหล่านี้ถูกดูแลโดยหลายหน่วยงานที่เรียกว่า “Registries” และ “Registrars” ซึ่งทำหน้าที่จัดการข้อมูลและให้บริการการค้นหาข้อมูลผ่านโปรโตคอล Whois
หน่วยงานที่เรียกว่า “Registries” คืออะไร?
โดยหน่วยงาน Registries ก็จะถูกควบคุมและกำหนดกฏเกณฑ์เงื่อนไขโดยองค์กร IANA (Internet Assigned Numbers Authority) โดย IANA เป็นส่วนหนึ่งขององค์กร ICANN (Internet Corporation for Assigned Names and Numbers )
คือหน่วยงานที่รับผิดชอบการจัดการและการกำหนดหมายเลขอินเทอร์เน็ตทั่วโลก ซึ่งรวมถึงการจัดสรร IP Address ก็คือ IP Address จำนวนทั้งหมด 2³² IPs ที่พูดถึงในตอนต้นครับ รวมถึงหมายเลขโปรโตคอล, รหัสประเทศ, และโดเมนระดับบนสุด (Top-Level Domains หรือ TLDs) ให้กับผู้ใช้ทั่วไป องค์กร บริษัทต่างๆทั่วโลกครับ
ซึ่งจะทำการแบ่งหน่วยงานออกเป็น 5 หน่วยงานเรียกว่า RIR เพื่อดูแลใน 5 ทวีป และภายใต้ RIR ก็อาจจะมีหน่วยงานที่เรียกว่า LIR/NIR เพื่อดูแลในแต่ละประเทศครับ
แล้วทำไมเราต้องแบ่ง Class ของ IP Address ?
การแบ่ง IP address ออกเป็นคลาสต่าง ๆ มีจุดประสงค์เพื่อจัดการและแบ่งสรรทรัพยากรเครือข่ายให้มีประสิทธิภาพ โดยแต่ละคลาสมีขนาดและการใช้งานที่แตกต่างกันไป การแบ่งคลาสนี้ช่วยให้สามารถจัดการเครือข่ายได้ง่ายขึ้น และสามารถรองรับขนาดเครือข่ายที่หลากหลายได้ เราเรียกการกำหนด IP Address โดยอ้างอิงตาม Class ว่าเป็นการกำหนดแบบ Classful Addressing
แต่ในปัจจุบันการใช้ Prefix Length ตาม Class ไม่เป็นที่นิยมแล้ว เพราะอุปกรณ์เครือข่ายต่างๆรองรับการทำงานได้ยืดหยุ่นขึ้นทำให้ผู้ดูแลระบบเครือข่ายสามารถกำหนด Prefix Length ได้ตามความต้องการครับ จะทำให้เรากำหนดกลุ่มและจำนวน Host ID ในกลุ่มหรือ Network นั้นๆได้ตามที่เราต้องการ
เราเรียกการกำหนด IP Address โดยไม่อ้างอิงตาม Class ว่าเป็นการกำหนดแบบ Classless Addressing หรือที่เรียกว่า CIDR (Classless Inter-Domain Routing) เป็นวิธีการจัดสรร IP Address ที่ยืดหยุ่นกว่า classful addressing ช่วยให้สามารถจัดสรร IP Address ได้อย่างมีประสิทธิภาพมากขึ้น สามารถรวมหลายเครือข่าย(Network) เข้าด้วยกัน (aggregation) หรือแบ่งเครือข่ายออกเป็นเครือข่ายย่อย (subnetting) ได้ตามต้องการครับ
Classful Addressing มีการแบ่ง IP Address เป็น Class ต่าง ๆ โดยใช้ Subnet mask ที่กำหนดไว้ล่วงหน้า ในขณะที่ Classless Addressing (CIDR) มีความยืดหยุ่นมากกว่าในการกำหนด Subnet mask ทำให้สามารถจัดสรร IP Address ได้อย่างมีประสิทธิภาพมากขึ้นและลดการสิ้นเปลืองของ IP Address ในการใช้งานจริง ในระบบอินเทอร์เน็ตปัจจุบันใช้งาน Classless Addressing เป็นหลักครับ
Special Addresses
ในเอกสาร RFC990 ได้มีการกำหนด ที่อยู่พิเศษ หรือ Special Addresses ไว้ซึ่งเราเรียก IP Address นี้ว่า Loopback IP Address ครับ จากรูปด้านบนคือ IP: 127.rrr.rrr.rrr เขียนในรูปแบบของ IP Network : 127.0.0.0/8 หมายถึงช่วง IP ตั้งแต่ 127.0.0.0–127.255.255.255 ซึ่งเป็น IP Address ที่อยู่ใน Class A ครับ
การใช้งาน IP Address ในช่วงของคลาส A ที่เริ่มต้นด้วย 127.
(หรือ 127.0.0.0/8) มีไว้สำหรับการใช้งานแบบ Loopback หมายความว่า หากมีการส่งข้อมูล (datagram) ไปยังที่อยู่ในช่วงนี้ จากโปรโตคอลระดับสูงเช่น TCP หรือ UDP จะทำการวนกลับ (loopback) ไปยังแอปพลิเคชันที่ส่งข้อมูลไว้เองทันที โดยจะไม่ถูกส่งออกไปยังเครือข่ายภายนอกใดๆ และเราจะไม่เห็นกลุ่ม IP Address 127.0.0.0/8 นี้บนเครือข่ายใดๆเลย
การใช้งานนี้มีประโยชน์ในการทดสอบและแก้ไขปัญหาของซอฟต์แวร์เครือข่ายบนเครื่องคอมพิวเตอร์นั้นๆให้ง่ายและปลอดภัยโดยการใช้ Loopback IP Address ครับ ยกตัวอย่างตามรูปด้านบน เป็นการใช้คำสั่ง ping จะสามารถ ping หาเครื่องตนเองได้ครับ Packet ของคำสั่ง ping ก็จะไม่ได้ถูกส่งออกจากเครื่องนั้นๆครับ
Private Address Space
ปี คศ.1996
หน่วยงาน IETF (Internet Engineering Task Force) ได้ออกเอกสาร RFC 1918 เพื่อเผยแพร่ข้อกำหนดเกี่ยวกับ IP Address version 4 เรียกว่า “Private IP Address” คือ IP Address ที่ถูกกำหนดให้ใช้งานภายในเครือข่ายองค์กรหรือเครือข่ายส่วนบุคคลเท่านั้น ไม่สามารถใช้งานเพื่อเชื่อมต่อโดยตรงกับเครือข่าย Internet
Private IP Address เหล่านี้ถูกกำหนดขึ้นเพื่อช่วยลดการใช้ IP Address ใน Internet ซึ่งเป็นการใช้ที่ไม่ซ้ำกันทั่วโลก หรือที่เรียกว่า “Public IP address” และช่วยให้การจัดการเครือข่ายภายในองค์กรง่ายขึ้น
Private IP Address แบ่งออกเป็น 3 Prefix ตามรูปด้านบนครับ จะสังเกตเห็นว่า เป็นการแบ่งย่อยออกจาก Class หลักเดิมคือ A,B และ C ครับ
ข้อมูลจำนวน IP Address version 4 โดยสรุปแล้ว ก็จะถูกแยกออกเป็น Public และ Private IP Address ตามรูปด้านบนครับ
References :
— https://www.cpe.ku.ac.th/~plw/dccn/presentation/ch23.pdf
— https://datatracker.ietf.org/doc/html/rfc791
— https://datatracker.ietf.org/doc/html/rfc990
— https://datatracker.ietf.org/doc/html/rfc997
— https://datatracker.ietf.org/doc/html/rfc1918
— https://www.cloudns.net/blog/what-is-ipv4-everything-you-need-to-know/
— https://www.nkatc.ac.th/web/pictures/e-learning/e-learning/prawad.html