9.2. Giao thức phân lớp¶
Gửi một khung hình từ camera đến máy chủ ở thành phố khác đồng nghĩa với việc giải quyết nhiều vấn đề cùng lúc. Tín hiệu điện phải truyền được qua dây đầu tiên. Các byte trên dây đó phải tìm đường qua một bộ chuyển mạch cục bộ. Mạng cục bộ phải chuyển giao thông điệp sang bất cứ thứ gì nằm giữa nó và phần còn lại của internet. Các gói tin sống sót qua chuyến đi phải được tái lắp ráp theo thứ tự. Bên nhận phải biết chương trình nào của mình để nhận chúng. Và bản thân các byte phải có ý nghĩa mà cả hai đầu đều đồng ý.
Cố gắng giải quyết tất cả những điều đó trong một khối mã sẽ không thể quản lý được. Câu trả lời tiêu chuẩn là chia công việc thành các lớp. Mỗi lớp giải quyết một vấn đề được xác định rõ ràng và cung cấp một dịch vụ đơn giản cho lớp bên trên. Một chương trình chỉ nói chuyện trực tiếp với lớp ngay bên dưới nó; các lớp bên dưới lớp đó vô hình.
Mỗi lớp của ngăn xếp mạng giải quyết một vấn đề và chuyển một lớp trừu tượng rõ ràng lên lớp tiếp theo.¶
9.2.1. Năm lớp¶
Các tên dưới đây là những tên mà phần còn lại của phần này sử dụng. Chúng đến từ mô hình tiêu chuẩn mà các mạng được thiết kế xung quanh. Ranh giới chính xác giữa các lớp đôi khi không rõ ràng, nhưng vai trò mà mỗi lớp đảm nhận là ổn định.
Lớp vật lý. Chuyển bit giữa hai thiết bị trên cùng một dây hoặc radio. Mức điện áp, xung ánh sáng, điều chế RF. Công việc của camera ở đây chủ yếu là cắm đúng cáp hoặc tham gia đúng mạng không dây; silicon làm phần còn lại.
Lớp liên kết. Chuyển khung hình (các khối byte nhỏ) giữa hai thiết bị chia sẻ một đoạn cục bộ. Thêm địa chỉ phần cứng để mỗi khung hình có thể được hướng đến một hàng xóm cụ thể. Ethernet và Wi-Fi là hai công nghệ liên kết mà camera gặp trong thực tế.
Lớp mạng. Chuyển gói tin giữa bất kỳ hai thiết bị nào trên internet, không chỉ trên cùng một đoạn cục bộ. Thêm một địa chỉ cấp phần mềm xác định máy chủ độc lập với cáp nào nó đang kết nối, và một cơ chế định tuyến nhảy gói tin từ đoạn cục bộ này sang đoạn tiếp theo cho đến khi đến nơi. Đây là lớp đầu tiên mà mã Python của camera bắt đầu có điều gì đó để nói.
Lớp vận chuyển. Nằm trên các gói tin và cung cấp giao tiếp giữa các chương trình trên hai máy chủ, không chỉ bản thân các máy chủ. Hai loại phổ biến: một cung cấp luồng byte được kết nối, có thứ tự (công cụ chính cho hầu hết lưu lượng), loại kia cung cấp các thông điệp tự chứa di chuyển độc lập với nhau (được sử dụng khi chi phí thấp quan trọng hơn đảm bảo). Thêm số cổng để nhiều chương trình trên cùng một máy chủ có thể thực hiện các cuộc hội thoại song song.
Lớp ứng dụng. Mọi thứ trên lớp vận chuyển: các giao thức cung cấp ý nghĩa cho các byte. Những giao thức mà trình duyệt web sử dụng để tải trang -- và những giao thức đằng sau hầu hết mọi dịch vụ internet khác mà người đọc đã sử dụng hằng ngày -- nằm ở đây. Hướng dẫn đề cập sâu về lớp vận chuyển; lớp này có một phần tiếp theo riêng của nó.
9.2.2. Cách các lớp chồng lên nhau lúc chạy¶
Khi camera gửi byte qua mạng, mỗi lớp thêm header của nó trước dữ liệu, giống như đặt một phong bì bên trong một phong bì khác:
Các byte của ứng dụng được đặt vào trước.
Lớp vận chuyển bao bọc chúng với một header nhỏ cho biết chúng thuộc về chương trình nào (số cổng).
Lớp mạng bao bọc đó với một header cho biết chúng được dành cho máy chủ nào (địa chỉ cấp phần mềm).
Lớp liên kết bao bọc đó với một header cho biết thiết bị nào trên đoạn cục bộ cần nhận chúng tiếp theo (địa chỉ phần cứng).
Lớp vật lý biến toàn bộ gói thành bit trên dây.
Ở đầu kia, mỗi lớp bóc header của nó và chuyển phần còn lại lên. Ứng dụng nhận lại các byte của nó mà không biết rằng lớp mạng, liên kết và vật lý đã từng tồn tại.
Sự lồng nhau này là lý do hướng dẫn đi từ dưới lên. Hiểu lớp bên dưới làm gì khiến lớp bên trên cảm thấy tất yếu. Hai lớp dưới cùng được đề cập trong một trang mỗi lớp vì hầu như không có gì cần cấu hình từ Python. Từ lớp mạng trở lên, nhịp độ chậm lại khi vai trò của Python ngày càng lớn hơn.