9.6. Các gói tin và định tuyến¶
Một địa chỉ IP cho biết ai là người nhận thông điệp. Cơ chế thực sự phân phối nó được gọi là định tuyến, và đó là quá trình từng bước nhảy qua đó một gói tin di chuyển từ mạng cục bộ của người gửi đến mạng cục bộ của người nhận, có thể rất xa.
9.6.1. Gói tin, tóm tắt¶
Một gói tin là đơn vị công việc của tầng IP -- một khối byte với tiêu đề nhỏ và phần tải. Tiêu đề có hai trường quan trọng cho định tuyến:
Địa chỉ IP nguồn (nơi gói tin xuất phát).
Địa chỉ IP đích (nơi gói tin đến).
Phần tải là bất cứ thứ gì tầng truyền tải yêu cầu tầng mạng phân phối. Tiêu đề gói tin cũng bao gồm bộ đếm thời gian sống (time-to-live), checksum của tiêu đề và một số cờ điều khiển. Không có thứ nào trong số đó được mã Python của camera trực tiếp chạm vào.
Các gói tin không hứa hẹn gì hơn "chúng tôi đã cố gắng" -- chúng có thể bị mất, bị trùng lặp hoặc được phân phối không đúng thứ tự. Độ tin cậy và thứ tự là vấn đề mà tầng truyền tải bên trên giải quyết; tầng mạng chỉ cố hết sức để chuyển tiếp mỗi gói tin đến đích của nó.
9.6.2. Từng bước nhảy¶
Gói tin rời camera và đến thiết bị đầu tiên không nằm trên phân đoạn cục bộ của camera: default gateway. (Trang trước đề cập đến DHCP cung cấp địa chỉ gateway cho camera khi mạng được thiết lập.) Thiết bị đó là router -- một hộp có nhiệm vụ nhận gói tin, xem địa chỉ đích và chuyển tiếp chúng đi.
Một gói tin từ camera đến đích di chuyển qua các router, mỗi router tiến gần hơn một bước.¶
Router có một bảng định tuyến -- danh sách "với các đích khớp với mẫu này, hãy gửi gói tin ra giao diện này". Với các đích trên cùng mạng với camera, mục nhập ghi "gửi lại theo cáp nó đến". Với các đích trên internet rộng hơn, mục nhập ghi "gửi đến router thượng nguồn". Với các mẫu đích đã biết (VPN công ty, mạng của đối tác kinh doanh cụ thể, kết nối vệ tinh), router có thể có mục nhập cụ thể hơn ghi đè mặc định.
Router thượng nguồn làm điều tương tự. Và router tiếp theo. Và tiếp theo. Mỗi bước nhảy có cùng hình dạng: nhận gói tin, tra cứu đích trong bảng, gửi ra giao diện đúng. Cuối cùng gói tin đến một router nằm trên cùng phân đoạn cục bộ với địa chỉ IP đích. Router đó thực hiện bước nhảy cuối cùng, đích nhận gói tin và hành trình kết thúc.
9.6.3. Các điểm đầu không biết tuyến đường¶
Một camera gửi gói tin đến máy chủ từ xa không biết gói tin sẽ đến đó bằng cách nào. Nó chỉ biết địa chỉ IP đích và địa chỉ của default gateway của mình. Mọi thứ ở giữa -- các router nào, các sợi cáp nào, các cáp ngầm biển nào -- là điều các router dọc đường quyết định khi di chuyển, dựa trên bảng của chính họ. Bản thân các router chỉ biết các hàng xóm trực tiếp của họ và hướng đại khái của các đích phổ biến; không có thiết bị nào trên internet có bản đồ hoàn chỉnh về nó.
Sự phân tán đó là lý do mạng vẫn hoạt động khi các tuyến đường riêng lẻ bị lỗi. Một cáp bị cắt ở đâu đó ở giữa trở thành sự kiện định tuyến lại tại một vài router; các điểm đầu không bao giờ nhận thấy. Đó cũng là lý do tại sao một gói tin từ camera ở Tokyo đến máy chủ ở Dublin có thể thành công mà không có bên nào biết những quốc gia nằm ở giữa.
9.6.4. Điều này có nghĩa gì đối với tập lệnh Python¶
Công việc của camera ở tầng mạng tóm gọn như sau:
Có địa chỉ IP.
Biết địa chỉ của default gateway (DHCP điền vào tự động).
Giao các gói tin ra ngoài, đánh địa chỉ đến bất kỳ IP nào, cho gateway đó và tin tưởng phần còn lại của đường đi.
Một tập lệnh không bao giờ chọn tuyến đường, không bao giờ đặt tên cho bước nhảy trung gian, và không bao giờ nhìn thấy các router ở giữa. Nó ghi địa chỉ IP đích lên gói tin và tầng mạng tiếp quản. Từ góc độ của một tập lệnh Python, toàn bộ định tuyến chỉ là một thuộc tính của mạng mà camera đã tham gia -- "gateway gửi các gói tin đến đâu đó hữu ích cho tôi".
Tầng truyền tải tiếp theo giả định định tuyến hoạt động bình thường, và xây dựng độ tin cậy, thứ tự và địa chỉ từng chương trình lên trên đó.