9.6. แพ็กเก็ตและการกำหนดเส้นทาง¶
ที่อยู่ IP บอกว่า ใคร คือผู้รับข้อความ กลไกที่ส่งมอบข้อความจริง ๆ เรียกว่า การกำหนดเส้นทาง และเป็นกระบวนการกระโดดทีละขั้นที่แพ็กเก็ตเดินทางจากเครือข่ายท้องถิ่นของผู้ส่งไปยังเครือข่ายท้องถิ่นของผู้รับ ซึ่งอาจอยู่ไกลมาก
9.6.1. แพ็กเก็ตโดยย่อ¶
แพ็กเก็ต คือหน่วยงานของเลเยอร์ IP -- กลุ่มไบต์ที่มีส่วนหัวขนาดเล็กและเพย์โหลด ส่วนหัวมีสองฟิลด์ที่สำคัญสำหรับการกำหนดเส้นทาง:
ที่อยู่ IP ต้นทาง (แพ็กเก็ตมาจากที่ใด)
ที่อยู่ IP ปลายทาง (แพ็กเก็ตกำลังจะไปที่ใด)
เพย์โหลดคือสิ่งที่เลเยอร์การขนส่งขอให้เลเยอร์เครือข่ายส่งมอบ ส่วนหัวของแพ็กเก็ตยังมีตัวนับ time-to-live เชคซัมสำหรับส่วนหัว และแฟล็กควบคุมบางส่วน ไม่มีสิ่งเหล่านี้ที่โค้ด Python ของกล้องสัมผัสโดยตรง
แพ็กเก็ตไม่รับประกันมากกว่า "เราพยายามแล้ว" -- แพ็กเก็ตสามารถสูญหาย ซ้ำซ้อน หรือส่งมอบไม่ตามลำดับ ความน่าเชื่อถือและลำดับเป็นปัญหาที่เลเยอร์การขนส่งด้านบนแก้ไข เลเยอร์เครือข่ายเพียงแค่พยายามส่งต่อแพ็กเก็ตแต่ละชิ้นไปยังปลายทาง
9.6.2. กระโดดทีละขั้น¶
แพ็กเก็ตออกจากกล้องและมาถึงอุปกรณ์แรกที่ไม่ได้อยู่บนเซกเมนต์ท้องถิ่นของกล้อง ซึ่งก็คือ เกตเวย์เริ่มต้น (หน้าก่อน กล่าวถึง DHCP ที่มอบที่อยู่เกตเวย์ให้กล้องเมื่อเครือข่ายเริ่มทำงาน) อุปกรณ์นั้นคือ เราเตอร์ -- กล่องที่มีหน้าที่รับแพ็กเก็ต ดูที่ปลายทาง และส่งต่อ
แพ็กเก็ตจากกล้องไปยังปลายทางกระโดดระหว่างเราเตอร์ แต่ละขั้นใกล้ขึ้นอีกก้าว¶
เราเตอร์มี ตารางกำหนดเส้นทาง -- รายการ "สำหรับปลายทางที่ตรงกับรูปแบบนี้ ส่งแพ็กเก็ตออกทางอินเทอร์เฟซนี้" สำหรับปลายทางบนเครือข่ายเดียวกับกล้อง รายการบอกว่า "ส่งกลับลงสายเคเบิลที่เข้ามา" สำหรับปลายทางบนอินเทอร์เน็ตที่กว้างกว่า รายการบอกว่า "ส่งไปยังเราเตอร์ต้นทาง" สำหรับรูปแบบปลายทางที่รู้จัก (VPN ขององค์กร เครือข่ายพันธมิตรธุรกิจเฉพาะ ลิงก์ดาวเทียม) เราเตอร์อาจมีรายการเฉพาะเจาะจงกว่าที่แทนที่ค่าเริ่มต้น
เราเตอร์ต้นทางทำสิ่งเดียวกัน และเราเตอร์ถัดไป และถัดไป แต่ละขั้นมีรูปแบบเดิม รับแพ็กเก็ต ค้นหาปลายทางในตาราง ส่งออกทางอินเทอร์เฟซที่ถูกต้อง ในที่สุดแพ็กเก็ตมาถึงเราเตอร์ที่ อยู่บน เซกเมนต์ท้องถิ่นเดียวกับ IP ปลายทาง เราเตอร์นั้นส่งมอบการกระโดดครั้งสุดท้าย ปลายทางรับแพ็กเก็ต และการเดินทางสิ้นสุดลง
9.6.3. ปลายทางไม่รู้เส้นทาง¶
กล้องที่ส่งแพ็กเก็ตไปยังเซิร์ฟเวอร์ระยะไกลไม่รู้ว่า แพ็กเก็ตจะไปถึงอย่างไร รู้เพียงที่อยู่ IP ปลายทางและที่อยู่เกตเวย์เริ่มต้นของตัวเอง ทุกอย่างระหว่างนั้น -- เราเตอร์ใด เส้นใยใด สายใต้น้ำใด -- เป็นสิ่งที่เราเตอร์ตามเส้นทางตัดสินใจไปตามทาง โดยอิงจากตารางของตัวเอง เราเตอร์เองรู้เพียงเพื่อนบ้านทันทีและทิศทางคร่าว ๆ ของปลายทางทั่วไป ไม่มีอุปกรณ์ชิ้นเดียวบนอินเทอร์เน็ตที่มีแผนที่สมบูรณ์
การกระจายอำนาจนั้นคือสาเหตุที่เครือข่ายยังคงทำงานได้เมื่อเส้นทางแต่ละอันล้มเหลว สายเคเบิลที่ถูกตัดที่ใดสักแห่งตรงกลางกลายเป็นเหตุการณ์กำหนดเส้นทางใหม่สำหรับเราเตอร์เพียงไม่กี่ตัว ปลายทางไม่มีวันสังเกตเห็น นอกจากนี้ยังเป็นเหตุผลที่แพ็กเก็ตจากกล้องในโตเกียวไปยังเซิร์ฟเวอร์ในดับลินสำเร็จได้โดยทั้งสองฝ่ายไม่รู้ว่าผ่านประเทศใดบ้าง
9.6.4. ความหมายสำหรับ Python script¶
งานของกล้องที่เลเยอร์เครือข่ายลดเหลือเพียง:
มีที่อยู่ IP
รู้ที่อยู่เกตเวย์เริ่มต้น (DHCP กรอกข้อมูลนี้โดยอัตโนมัติ)
ส่งแพ็กเก็ตขาออกที่ระบุ ที่อยู่ IP ใด ๆ ไปยังเกตเวย์นั้นและเชื่อมั่นในส่วนที่เหลือของเส้นทาง
สคริปต์ไม่เคยเลือกเส้นทาง ไม่เคยระบุการกระโดดระหว่างกลาง และไม่เคยเห็นเราเตอร์ตรงกลาง มันเพียงเขียน IP ปลายทางลงบนแพ็กเก็ตและเลเยอร์เครือข่ายรับช่วงต่อ จาก Python script การกำหนดเส้นทางทั้งหมดเป็นเพียงคุณสมบัติของเครือข่ายที่กล้องเข้าร่วม -- "เกตเวย์ส่งแพ็กเก็ตไปยังที่ที่มีประโยชน์สำหรับฉัน"
เลเยอร์การขนส่งที่ตามมาถือว่าการกำหนดเส้นทางทำงานได้ดี และสร้างความน่าเชื่อถือ ลำดับ และการระบุที่อยู่แบบโปรแกรมต่อโปรแกรมบนพื้นฐานนั้น