9.5. ที่อยู่ IP

ที่อยู่ฮาร์ดแวร์ระบุอุปกรณ์ออกจากอุปกรณ์อื่นบนสายเคเบิลหรือเซลล์วิทยุเดียวกัน วิธีนี้เหมาะสำหรับงานนั้น แต่ไม่มีประโยชน์เกินขอบเขตเซกเมนต์ท้องถิ่น สวิตช์ในอาคารถัดไปไม่สามารถกำหนดเส้นทางด้วยที่อยู่นั้นได้ เพราะกลไกพื้นฐานที่ทำให้สวิตช์เรียนรู้ที่อยู่ MAC ใช้งานได้เฉพาะภายในเซกเมนต์เดียวเท่านั้น

เลเยอร์เครือข่าย แก้ปัญหานั้นด้วยที่อยู่ประเภทที่สองซึ่งเป็นอิสระจากสายเคเบิลที่อุปกรณ์เสียบอยู่ ชื่อของที่อยู่ประเภทนี้คือ ที่อยู่ Internet Protocol หรือ ที่อยู่ IP และคำว่า "Internet Protocol" ระบุชุดกฎที่ทุกโฮสต์บนอินเทอร์เน็ตปฏิบัติตามเมื่อส่งหรือส่งต่อข้อมูล อินเทอร์เน็ตในปัจจุบันใช้รูปแบบการระบุที่อยู่สองเวอร์ชันพร้อมกัน ได้แก่ IPv4 (รูปแบบเก่ากว่าที่ยังคงครองเครือข่ายขนาดเล็ก) และ IPv6 (รูปแบบใหม่กว่าที่กำลังค่อย ๆ ทดแทน)

9.5.1. ที่อยู่ IP คืออะไร

ที่อยู่ IP คือตัวเลขที่ใหญ่พอที่จะระบุอุปกรณ์ใด ๆ บนอินเทอร์เน็ตได้อย่างไม่ซ้ำกัน เขียนในรูปแบบที่มนุษย์อ่านได้ตามที่ใช้ในส่วนที่เหลือ แต่ในส่วนหัวของแพ็กเก็ตเป็นเพียงจำนวนเต็มขนาดคงที่

  • ที่อยู่ IPv4 มีความยาว 32 บิตและเขียนเป็นตัวเลขทศนิยมสี่ตัวคั่นด้วยจุด แต่ละตัวเลขเป็นหนึ่งไบต์:

    192.168.1.42
    8.8.8.8
    10.0.0.1
    

    สามสิบสองบิตให้ที่อยู่ที่เป็นไปได้ประมาณสี่พันล้านที่อยู่ ซึ่งฟังดูเพียงพอเมื่อ IPv4 ถูกออกแบบในทศวรรษ 1970 แต่ไม่เพียงพอในต้นทศวรรษ 2010

  • ที่อยู่ IPv6 มีความยาว 128 บิตและเขียนเป็นกลุ่มตัวเลขเลขฐานสิบหกสี่หลักแปดกลุ่มคั่นด้วยเครื่องหมายโคลอน:

    2001:0db8:85a3:0000:0000:8a2e:0370:7334
    

    ลำดับศูนย์สามารถย่อเป็น :: และศูนย์นำหน้าในกลุ่มสามารถละไว้ได้ ดังนั้นที่อยู่ข้างต้นมักเขียนว่า 2001:db8:85a3::8a2e:370:7334

ตระกูลที่อยู่ทั้งสองเป็นภาษาที่แตกต่างกัน โฮสต์ IPv4 ไม่สามารถส่งแพ็กเก็ตไปยังโฮสต์ IPv6 โดยตรงโดยไม่มีเกตเวย์ช่วย โมดูล network และ socket ของกล้องรองรับทั้งสอง บทช่วยสอนนี้ใช้ IPv4 ในตัวอย่างเพราะเครือข่ายท้องถิ่นส่วนใหญ่ที่กล้องจะเชื่อมต่อยังเป็น IPv4 อยู่ แต่ทุกอย่างที่ตามมาใช้งานได้เหมือนกันทุกประการสำหรับ IPv6 เมื่อเปลี่ยนที่อยู่แล้ว

9.5.2. ที่อยู่ IP มีไว้เพื่ออะไร

ที่อยู่ IP บอกว่า แพ็กเก็ตมีไว้สำหรับโฮสต์ใดบนอินเทอร์เน็ต เราเตอร์ที่ไม่รู้วิธีเข้าถึงปลายทางโดยตรงจะรู้ว่าเราเตอร์อื่นน่าจะรู้ และส่งต่อแพ็กเก็ตไปยังที่นั้น แพ็กเก็ตกระโดดระหว่างเราเตอร์ แต่ละขั้นใกล้ปลายทางขึ้น จนกว่าเราเตอร์ที่ อยู่บน เซกเมนต์ท้องถิ่นของปลายทางจะส่งการกระโดดครั้งสุดท้าย

พฤติกรรมแบบกระโดดทีละขั้นนี้คือสิ่งที่ทำให้อินเทอร์เน็ตทำงานเป็นเครือข่ายใหญ่เดียวแทนที่จะเป็นเกาะเล็ก ๆ หลายแห่ง หน้าถัดไป อธิบายวิธีเลือกการกระโดด ส่วนหน้านี้เกี่ยวกับที่อยู่เท่านั้น

9.5.3. กล้องได้ที่อยู่ IP อย่างไร

กล้องที่เพิ่งเข้าร่วมเครือข่าย Wi-Fi ต้องการที่อยู่ IP ก่อนจึงจะสื่อสารกับสิ่งใดได้ มีสองวิธีทั่วไปในการดำเนินการนี้

วิธีแรกคือ การกำหนดที่อยู่อัตโนมัติ กล้องขอที่อยู่จากเครือข่ายท้องถิ่น อุปกรณ์ที่แจกที่อยู่คือ เราเตอร์ -- กล่องที่เชื่อมต่อเครือข่ายท้องถิ่นกับอินเทอร์เน็ตที่กว้างกว่า ในบ้านและออฟฟิศขนาดเล็กส่วนใหญ่ กล่องทางกายภาพเดียวกันนั้นทำหน้าที่เป็นสวิตช์สำหรับอุปกรณ์แบบมีสายและจุดเชื่อมต่อ Wi-Fi สำหรับอุปกรณ์ไร้สาย ดังนั้น "เราเตอร์" "สวิตช์" และ "จุดเชื่อมต่อ" อาจเป็นฮาร์ดแวร์ชิ้นเดียวกัน เราเตอร์รันบริการเล็ก ๆ ที่เรียกว่า DHCP (Dynamic Host Configuration Protocol) ซึ่งเก็บกลุ่มที่อยู่ที่ว่าง เลือกหนึ่งที่อยู่สำหรับอุปกรณ์ที่เพิ่งเชื่อมต่อ และ เช่า ที่อยู่นั้นตามระยะเวลาที่กำหนด ในขณะที่ DHCP ทำงาน เราเตอร์ยังมอบการกำหนดค่าที่มีประโยชน์อื่น ๆ ให้กับกล้อง:

  • ที่อยู่สำหรับส่งทราฟฟิกขาออกเมื่อปลายทางอยู่นอกเครือข่ายท้องถิ่น (เกตเวย์เริ่มต้น ซึ่งคือที่อยู่ของเราเตอร์เอง) และ

  • ที่อยู่ของ เนมเซิร์ฟเวอร์ หนึ่งรายการขึ้นไปที่แปลงชื่อที่มนุษย์อ่านได้อย่าง example.com เป็นที่อยู่ IP บริการค้นหาชื่อเรียกว่า DNS (Domain Name System) และ ชื่อและ DNS อธิบายรายละเอียด

ทั้งหมดนี้เกิดขึ้นโดยอัตโนมัติขณะที่ลิงก์กำลังเชื่อมต่อ กล้องไม่จำเป็นต้องร้องขอสิ่งใดอย่างชัดเจน ทันทีที่ isconnected() คืนค่า True ในตัวอย่างจากหน้าก่อน กล้องมีที่อยู่ เกตเวย์ และเนมเซิร์ฟเวอร์พร้อมแล้ว

ตัวเลือกที่สองคือ การกำหนดค่าแบบคงที่ การใช้งานบางอย่างต้องการที่อยู่ที่ทราบสำหรับกล้องเพื่อให้อุปกรณ์อื่นเข้าถึงได้โดยไม่ต้องค้นหาก่อน เมธอด ipconfig() ตั้งที่อยู่ เกตเวย์ และเนมเซิร์ฟเวอร์ด้วยตนเอง:

wlan.ipconfig(addr4=("192.168.1.50/24", "192.168.1.1"))
wlan.ipconfig(dns="192.168.1.1")

การกำหนดค่าแบบคงที่มีความเปราะบาง (อุปกรณ์สองเครื่องที่ได้รับที่อยู่เดียวกันโดยไม่ตั้งใจจะขัดแย้งกัน) ใช้ค่าเริ่มต้น DHCP เว้นแต่จะมีเหตุผลเฉพาะที่ต้องการแทนที่

เมื่อกล้องมีที่อยู่ IP แล้ว มันก็ เข้าร่วม อินเทอร์เน็ตแล้ว (หรืออย่างน้อยก็ส่วนของเครือข่ายท้องถิ่น) อุปกรณ์อื่นสามารถระบุแพ็กเก็ตไปยังกล้องด้วยที่อยู่นั้นได้ และกล้องก็สามารถระบุแพ็กเก็ตไปยังอุปกรณ์อื่นได้

9.5.4. netmask และ /24

/24 ที่ท้ายที่อยู่ในตัวอย่างการกำหนดค่าแบบคงที่ข้างต้นคือ netmask ที่อยู่ IP โดยตัวมันเองไม่บอกว่าเครือข่ายท้องถิ่นสิ้นสุดที่ใด -- 192.168.1.50 อาจเป็นหนึ่งในหลายร้อยที่อยู่บนเครือข่ายบ้านขนาดเล็ก หรือหนึ่งในหลายพันที่อยู่บนเครือข่ายขนาดใหญ่กว่า netmask บอกว่าส่วนใดของที่อยู่ระบุ เครือข่าย และส่วนใดระบุ โฮสต์ ภายในเครือข่ายนั้น

/24 หมายความว่า "24 บิตแรกจาก 32 บิตระบุเครือข่าย 8 บิตสุดท้ายระบุโฮสต์" สำหรับ 192.168.1.50/24 จะแยกที่อยู่เป็น 192.168.1 สำหรับเครือข่ายและ .50 สำหรับโฮสต์ เหลือพื้นที่สำหรับอุปกรณ์ประมาณ 254 เครื่องบนเครือข่ายท้องถิ่นเดียวกัน /16 จะเหลือบิตสำหรับฝั่งโฮสต์มากกว่าและรองรับอุปกรณ์ได้มากกว่าบนเครือข่ายเดียว /30 จะเหลือเพียงสองที่อยู่โฮสต์และพอดีกับลิงก์แบบจุดต่อจุด

netmask ยังเขียนได้บ่อยในรูปตัวเลขสี่ไบต์ในสัญกรณ์ทศนิยมคั่นด้วยจุดเหมือนกับที่อยู่ /24 เทียบเท่ากับ 255.255.255.0 -- อ่านแต่ละไบต์ว่า "บิตทั้งหมดที่เป็นของฝั่งเครือข่าย" สองรูปแบบสามารถใช้แทนกันได้ ตัวอ่าน ipconfig() ในหัวข้อย่อยถัดไปจะคืนค่ารูปแบบสี่ไบต์

เหตุผลที่การแบ่งนี้สำคัญ -- วิธีที่อุปกรณ์ใช้ netmask เพื่อตัดสินใจว่าปลายทางอยู่บนเครือข่ายท้องถิ่นหรือต้องส่งออกผ่านเกตเวย์ และเหตุใดเครือข่ายบ้านส่วนใหญ่จึงใช้ /24 -- อธิบายไว้ใน เครือข่ายส่วนตัวและ NAT

9.5.5. อ่านที่อยู่กลับ

เมธอด ipconfig() ที่ไม่มีอาร์กิวเมนต์จะคืนค่าการกำหนดค่าที่ใช้งานอยู่ มุมมอง addr4 จะคืนค่าที่อยู่ IP และ netmask:

>>> wlan.ipconfig("addr4")
('192.168.1.50', '255.255.255.0')