9.2. โปรโตคอลแบบชั้น¶
การส่งเฟรมจากกล้องไปยังเซิร์ฟเวอร์ในเมืองอื่นหมายถึงการแก้ปัญหาหลายอย่างพร้อมกัน สัญญาณไฟฟ้าต้องผ่านสายแรกไปได้ ไบต์บนสายนั้นต้องหาทางผ่านสวิตช์ในพื้นที่ เครือข่ายท้องถิ่นต้องส่งต่อข้อความไปยังสิ่งที่อยู่ระหว่างมันกับอินเทอร์เน็ตส่วนที่เหลือ แพ็กเก็ตที่รอดจากการเดินทางต้องถูกรวมกลับในลำดับที่ถูกต้อง ผู้รับต้องรู้ว่าจะส่งให้โปรแกรมใด และไบต์เองต้องมีความหมายที่ทั้งสองฝั่งเห็นด้วยกัน
การพยายามแก้ทุกอย่างในโค้ดบล็อกเดียวจะจัดการได้ยาก คำตอบมาตรฐานคือการแบ่งงานออกเป็น ชั้น แต่ละชั้นแก้ปัญหาที่กำหนดไว้อย่างชัดเจนหนึ่งอย่างและเปิดเผยบริการที่เรียบง่ายให้ชั้นที่อยู่ด้านบน โปรแกรมจะคุยกับชั้นที่อยู่ใต้โดยตรงเท่านั้น ชั้นที่อยู่ต่ำกว่านั้นจะมองไม่เห็น
แต่ละชั้นของสแต็กเครือข่ายแก้ปัญหาหนึ่งอย่างและส่งมอบ abstraction ที่สะอาดให้ชั้นถัดไป¶
9.2.1. ห้าชั้น¶
ชื่อต่อไปนี้คือชื่อที่ส่วนที่เหลือของหัวข้อนี้ใช้ มาจากโมเดลมาตรฐานที่เครือข่ายถูกออกแบบมา ขอบเขตที่แน่นอนระหว่างชั้นอาจไม่ชัดเจนในบางครั้ง แต่บทบาทของแต่ละชั้นนั้นคงที่
ชั้น Physical ย้าย บิต ระหว่างอุปกรณ์สองเครื่องบนสายหรือวิทยุเดียวกัน ระดับแรงดันไฟ พัลส์แสง การมอดูเลต RF งานของกล้องที่นี่ส่วนใหญ่คือการเสียบสายที่ถูกต้องหรือเชื่อมต่อเครือข่ายไร้สายที่ถูกต้อง ซิลิกอนจะทำส่วนที่เหลือ
ชั้น Link ย้าย เฟรม (ชิ้นส่วนไบต์ขนาดเล็ก) ระหว่างอุปกรณ์สองเครื่องที่ใช้เซกเมนต์ท้องถิ่นเดียวกัน เพิ่มที่อยู่ฮาร์ดแวร์เพื่อให้แต่ละเฟรมสามารถส่งไปยังเพื่อนบ้านเฉพาะรายได้ Ethernet และ Wi-Fi คือเทคโนโลยีลิงก์สองอย่างที่กล้องพบในทางปฏิบัติ
ชั้น Network ย้าย แพ็กเก็ต ระหว่างอุปกรณ์สองเครื่องใด ๆ บน อินเทอร์เน็ต ไม่ใช่แค่บนเซกเมนต์ท้องถิ่นเดียวกัน เพิ่มที่อยู่ระดับซอฟต์แวร์ที่ระบุโฮสต์โดยไม่ขึ้นอยู่กับว่าอยู่บนสายใด และกลไก routing ที่กระโดดแพ็กเก็ตจากเซกเมนต์ท้องถิ่นหนึ่งไปยังถัดไปจนกว่าจะถึงปลายทาง นี่คือชั้นแรกที่โค้ด Python ของกล้องเริ่มมีบทบาท
ชั้น Transport อยู่เหนือแพ็กเก็ตและเสนอการส่งมอบระหว่าง โปรแกรม บนโฮสต์สองเครื่อง ไม่ใช่แค่โฮสต์เอง มีสองรูปแบบทั่วไป: หนึ่งส่งมอบสตรีมไบต์ที่เชื่อมต่อและเป็นลำดับ (ม้าใช้งานหนักสำหรับปริมาณงานส่วนใหญ่) อีกหนึ่งส่งมอบข้อความที่ครบถ้วนในตัวเองซึ่งเดินทางได้อย่างอิสระ (ใช้เมื่อค่าใช้จ่ายต่ำมีความสำคัญมากกว่าการรับประกัน) เพิ่ม port number เพื่อให้โปรแกรมหลายตัวบนโฮสต์เดียวกันสามารถสนทนาได้พร้อมกัน
ชั้น Application ทุกอย่างที่อยู่เหนือ transport: โปรโตคอลที่ให้ความหมายกับไบต์ โปรโตคอลที่เว็บเบราว์เซอร์ใช้เพื่อโหลดหน้าเว็บ -- และโปรโตคอลที่อยู่เบื้องหลังบริการอินเทอร์เน็ตเกือบทุกบริการที่ผู้อ่านใช้อยู่ทุกวัน -- อยู่ที่นี่ บทช่วยสอนครอบคลุม transport อย่างละเอียด ชั้นนี้จะมีหัวข้อต่อเนื่องของตัวเอง
9.2.2. ชั้นต่าง ๆ ซ้อนกันอย่างไรในเวลารัน¶
เมื่อกล้องส่งไบต์ผ่านเครือข่าย แต่ละชั้นจะเพิ่มเฮดเดอร์ของตัวเองไว้ด้านหน้าของข้อมูล เหมือนการใส่ซองจดหมายไว้ในซองจดหมายอีกอัน:
ไบต์ของแอปพลิเคชันถูกใส่เข้าไปก่อน
ชั้น transport ห่อไบต์เหล่านั้นด้วยเฮดเดอร์เล็ก ๆ ที่บอกว่าโปรแกรมใดเป็นเจ้าของ (port number)
ชั้น network ห่อ สิ่งนั้น ด้วยเฮดเดอร์ที่บอกว่าโฮสต์ใดเป็นปลายทาง (ที่อยู่ระดับซอฟต์แวร์)
ชั้น link ห่อ สิ่งนั้น ด้วยเฮดเดอร์ที่บอกว่าอุปกรณ์ใดบนเซกเมนต์ท้องถิ่นควรรับต่อ (ที่อยู่ฮาร์ดแวร์)
ชั้น physical แปลงชุดข้อมูลทั้งหมดเป็นบิตบนสาย
ที่ปลายอีกด้าน แต่ละชั้นจะลอกเฮดเดอร์ของตัวเองออกและส่งส่วนที่เหลือขึ้นไป แอปพลิเคชันที่รับได้รับไบต์กลับมาโดยไม่รู้ว่าชั้น network, link และ physical เคยมีอยู่
การซ้อนทับนี้เป็นเหตุผลที่บทช่วยสอนดำเนินการจากล่างขึ้นบน การเข้าใจสิ่งที่ชั้นด้านล่างทำทำให้ชั้นด้านบนรู้สึกเหมือนเป็นสิ่งที่หลีกเลี่ยงไม่ได้ สองชั้นล่างครอบคลุมในหน้าเดียวแต่ละหน้าเพราะมีเกือบไม่มีอะไรให้กำหนดค่าจาก Python ตั้งแต่ชั้น network ขึ้นไป ความเร็วจะช้าลงเมื่อบทบาทของ Python เพิ่มขึ้น