9.7. เครือข่ายส่วนตัวและ NAT¶
IPv4 ได้รับการออกแบบมาพร้อมกับที่อยู่ IP สี่พันล้านรายการ ซึ่งในขณะนั้นดูเหมือนจะเพียงพอแล้ว แต่ความจริงคือไม่เพียงพอ ทุกบ้าน สำนักงาน และโรงงานที่เชื่อมต่ออินเทอร์เน็ตต้องการบล็อกที่อยู่ IP เฉพาะของตนเองสำหรับอุปกรณ์ภายใน และเมื่อรวมกล้อง โทรศัพท์ และเครื่องใช้ไฟฟ้าทั่วโลกเข้าไปด้วย ที่อยู่ IP สี่พันล้านก็ไม่เพียงพออีกต่อไป
แนวทางแก้ไขที่อินเทอร์เน็ตนำมาใช้คือ เครือข่ายส่วนตัว: อุปกรณ์ส่วนใหญ่บนเครือข่ายท้องถิ่นใช้ที่อยู่ IP ที่ไม่ซ้ำกันในระดับโลก แต่ซ้ำกันได้ภายในเครือข่ายนั้น และมีอุปกรณ์เดียวที่ขอบเครือข่ายทำหน้าที่แปลระหว่างสองโลกนี้ โดยทั่วไปแล้ว กล้องมักอยู่บนหนึ่งในเครือข่ายส่วนตัวเหล่านี้
9.7.1. ช่วงที่อยู่ IP ส่วนตัว¶
มีช่วงที่อยู่ IPv4 สามช่วงที่สงวนไว้เป็น ที่อยู่ที่ไม่สามารถกำหนดเส้นทางบนอินเทอร์เน็ตสาธารณะ เครือข่ายท้องถิ่นใดก็ตามสามารถใช้ที่อยู่จากช่วงเหล่านี้ได้โดยไม่ต้องประสานงานกับใคร เนื่องจากเราเตอร์ภายนอกเครือข่ายท้องถิ่นจะไม่พยายามส่งแพ็กเก็ตไปยังที่อยู่เหล่านี้:
10.0.0.0--10.255.255.255(16 ล้านที่อยู่ พบบ่อยในเครือข่ายองค์กรขนาดใหญ่)172.16.0.0--172.31.255.255(ประมาณหนึ่งล้านที่อยู่ พบน้อยกว่าในทางปฏิบัติ)192.168.0.0--192.168.255.255(65,000 ที่อยู่ เป็นค่าเริ่มต้นของเราเตอร์บ้านเกือบทุกรุ่น)
ในเครือข่ายบ้านทั่วไป กล้องและแล็ปท็อปที่สื่อสารกันต่างใช้ที่อยู่ IP ในรูปแบบ 192.168.x.x เนื่องจากนั่นคือช่วงที่เราเตอร์บ้านเลือกใช้สำหรับเครือข่ายที่มันดูแล
9.7.1.1. วิธีการใช้งาน netmask¶
หน้า ที่อยู่ IP ได้แนะนำสัญกรณ์ /24 ไปแล้ว เหตุผลที่สำคัญที่นี่คือ netmask คือสิ่งที่แต่ละอุปกรณ์ใช้ในการตัดสินใจว่าแพ็กเก็ตควรไปที่ใดต่อไป ทุกครั้งที่กล้องส่งแพ็กเก็ต มันจะนำ netmask ของตัวเองไปใช้กับที่อยู่ปลายทางและพิจารณาผลลัพธ์:
หากปลายทางมีบิตเครือข่ายที่ตรงกับที่อยู่ของกล้องเอง แสดงว่าปลายทางอยู่บน เครือข่ายท้องถิ่นเดียวกัน กล้องจะส่งแพ็กเก็ตไปยังปลายทางโดยตรง
หากปลายทาง ไม่มี บิตเครือข่ายที่ตรงกัน แสดงว่าปลายทางอยู่บนเครือข่ายอื่น กล้องจะส่งแพ็กเก็ตไปยัง เกตเวย์เริ่มต้น (เราเตอร์ที่กำหนดค่าโดยอัตโนมัติเมื่อเชื่อมต่อ) และปล่อยให้เกตเวย์จัดการส่วนที่เหลือ
การทดสอบง่าย ๆ นั้น -- "เราใช้บิตเครือข่ายเดียวกันหรือไม่?" -- นั่นคือสิ่งที่ netmask มีไว้เพื่ออะไร นั่นคือเหตุผลที่เครือข่ายบ้านใช้ค่าเริ่มต้นเป็น /24: การจำกัดไว้ที่ 254 อุปกรณ์เหมาะสำหรับครัวเรือนและทำให้เครือข่ายเรียบง่าย
9.7.2. Network Address Translation¶
กล้องที่มีที่อยู่ IP 192.168.1.50 ไม่สามารถส่งแพ็กเก็ตไปยังเซิร์ฟเวอร์บนอินเทอร์เน็ตสาธารณะได้โดยตรง เนื่องจากอินเทอร์เน็ตสาธารณะไม่รู้จักเส้นทางไปยัง 192.168.x.x เราเตอร์บ้านแก้ปัญหานี้ด้วย Network Address Translation หรือ NAT และดำเนินการอย่างโปร่งใส
NAT เขียนทับที่อยู่ต้นทางของแพ็กเก็ตขาออกให้เป็นที่อยู่สาธารณะของเราเตอร์ และยกเลิกการเขียนทับเมื่อมีการตอบกลับที่เข้ามา ทำให้อุปกรณ์ส่วนตัวดูเหมือนใช้ที่อยู่สาธารณะเดียวร่วมกัน¶
เราเตอร์มี สอง ที่อยู่: ที่อยู่ส่วนตัวบนเครือข่ายท้องถิ่น (โดยทั่วไปคือ 192.168.1.1) และที่อยู่สาธารณะที่ผู้ให้บริการอินเทอร์เน็ตกำหนดให้ เมื่อกล้องส่งแพ็กเก็ตไปยังที่อยู่สาธารณะ เราเตอร์จะ
บันทึกที่อยู่ส่วนตัว + พอร์ตของกล้องและจับคู่กับพอร์ตขาออกชั่วคราวของตัวเอง
เขียนทับที่อยู่ต้นทางบนแพ็กเก็ตให้เป็นที่อยู่สาธารณะของตัวเอง (และพอร์ตต้นทางให้เป็นพอร์ตขาออกที่เลือก)
ส่งแพ็กเก็ตที่เขียนทับแล้วออกทางด้านสาธารณะ
เมื่อการตอบกลับมาถึงที่อยู่สาธารณะ + พอร์ตของเราเตอร์ เราเตอร์จะค้นหาคู่ที่จดบันทึกไว้ เขียนทับที่อยู่ปลายทางกลับเป็นที่อยู่ส่วนตัว + พอร์ตของกล้อง และส่งต่อไปยังด้านท้องถิ่น กล้องไม่รู้ว่ามีการเขียนทับเกิดขึ้น เซิร์ฟเวอร์ก็ไม่รู้จักแหล่งต้นทางจริง
NAT คือสิ่งที่ทำให้เครือข่ายบ้านใช้งานได้จริง และยังมีผลที่ตามมาสองอย่างที่ควรทราบ
9.7.3. สิ่งที่ NAT เปลี่ยนแปลง¶
ขาออกทำได้ง่าย กล้องบนเครือข่ายส่วนตัวสามารถสื่อสาร ออกไป ได้อย่างอิสระ ทุกครั้งที่มันเปิดการเชื่อมต่อ TCP หรือส่งแพ็กเก็ต UDP ไปยังเซิร์ฟเวอร์ระยะไกล NAT จะตั้งค่าคู่โดยอัตโนมัติ แอปพลิเคชันกล้องส่วนใหญ่ทำงานในทิศทางนี้: ถ่ายภาพ ส่งไปยังเซิร์ฟเวอร์ที่ใดที่หนึ่ง แล้วรับการตอบกลับ
ขาเข้าทำได้ยาก อุปกรณ์บนอินเทอร์เน็ตสาธารณะ ไม่สามารถ เชื่อมต่อโดยตรงไปยังกล้องบนเครือข่ายส่วนตัวได้ ไม่มีคู่ที่เราเตอร์สามารถค้นหาได้เมื่อแพ็กเก็ตที่ไม่ได้รับการร้องขอมาถึงที่อยู่สาธารณะของมัน ดังนั้นแพ็กเก็ตจึงไม่มีที่จะไป เราเตอร์จะทิ้งแพ็กเก็ตหรือส่งต่อไปยังบริการที่ทำงานบนเราเตอร์เอง
มีวิธีแก้ปัญหาสำหรับการรับขาเข้าสามวิธีที่นิยมใช้ เรียงตามความสะดวกในการใช้งาน:
Port forwarding กำหนดค่าเราเตอร์ให้ส่งต่อแพ็กเก็ตขาเข้าทั้งหมดบนพอร์ตสาธารณะที่เลือกไปยังอุปกรณ์ส่วนตัวที่ระบุ ต้องมีสิทธิ์ผู้ดูแลระบบในการเข้าถึงเราเตอร์ และจะหยุดทำงานเมื่อที่อยู่สาธารณะของเราเตอร์เปลี่ยนแปลง
VPN เรียกใช้เครือข่ายส่วนตัวเสมือนที่วางกล้องไว้บนเครือข่ายลอจิคัลเดียวกันกับผู้ที่ต้องการเข้าถึง มีความซับซ้อนสูง และอยู่นอกขอบเขตสำหรับการปรับใช้กล้องส่วนใหญ่
การเชื่อมต่อที่เริ่มต้นจากขาออก กล้องเชื่อมต่อออกไปยังเซิร์ฟเวอร์ที่รู้จักบนอินเทอร์เน็ตสาธารณะและคงการเชื่อมต่อนั้นไว้ เซิร์ฟเวอร์ใช้การเชื่อมต่อที่มีอยู่เพื่อส่งข้อความกลับมา นี่คือวิธีที่การแจ้งเตือนแบบ push และโปรโตคอลอุปกรณ์ที่เชื่อมต่อกับคลาวด์ส่วนใหญ่ทำงาน และเป็นรูปแบบที่แอปพลิเคชันกล้องส่วนใหญ่นิยมใช้
NAT มองไม่เห็นสำหรับโค้ด Python บนกล้อง สคริปต์เพียงแค่สื่อสารกับปลายทางที่ต้องการ แล้วเราเตอร์จัดการการแปลเบื้องหลัง แต่ ทิศทาง ของการเชื่อมต่อมีความสำคัญ และ NAT คือเหตุผลที่ "กล้องติดต่อออกไปยังเซิร์ฟเวอร์คลาวด์" เป็นรูปแบบที่ง่ายกว่า "เซิร์ฟเวอร์คลาวด์ติดต่อเข้ามาหากล้อง" มาก