9.5. Địa chỉ IP¶
Một địa chỉ phần cứng xác định một thiết bị trong số các thiết bị khác trên cùng một cáp hoặc ô vô tuyến cục bộ. Nó phù hợp cho công việc đó, nhưng vô dụng ngoài phân đoạn cục bộ: một switch ở tòa nhà bên cạnh không thể định tuyến bằng nó, vì cơ chế cơ bản cho phép switch học địa chỉ MAC chỉ hoạt động trong một phân đoạn.
Tầng mạng giải quyết điều đó bằng một loại địa chỉ thứ hai độc lập với cáp mà thiết bị được cắm vào. Tên của loại địa chỉ này là địa chỉ Giao thức Internet, hay địa chỉ IP, và phần "Giao thức Internet" đặt tên cho tập hợp các quy tắc mà mọi máy chủ trên internet đều tuân theo khi gửi hoặc chuyển tiếp một gói tin. Internet hiện tại sử dụng song song hai phiên bản của sơ đồ địa chỉ -- IPv4 (dạng cũ hơn, vẫn chiếm ưu thế trên các mạng nhỏ) và IPv6 (dạng mới hơn, đang dần thay thế).
9.5.1. Địa chỉ IP là gì¶
Địa chỉ IP là một số đủ lớn để xác định duy nhất bất kỳ thiết bị nào trên internet. Nó được viết dưới dạng có thể đọc được của con người mà phần còn lại của phần này sử dụng, nhưng trong tiêu đề gói tin nó chỉ là một số nguyên có kích thước cố định.
Địa chỉ IPv4 dài 32 bit và được viết dưới dạng bốn số thập phân được phân tách bằng dấu chấm, mỗi số là một byte:
192.168.1.42 8.8.8.8 10.0.0.1
Ba mươi hai bit cho phép khoảng bốn tỷ địa chỉ có thể, nghe có vẻ đủ khi IPv4 được thiết kế vào những năm 1970 và không đủ vào đầu những năm 2010.
Địa chỉ IPv6 dài 128 bit và được viết dưới dạng tám nhóm bốn chữ số thập lục phân được phân tách bằng dấu hai chấm:
2001:0db8:85a3:0000:0000:8a2e:0370:7334Các chuỗi số không có thể được rút ngắn thành
::, và các số không đứng đầu trong một nhóm có thể bị bỏ qua, vì vậy địa chỉ trên thường được viết là2001:db8:85a3::8a2e:370:7334.
Hai họ địa chỉ về cơ bản là các ngôn ngữ khác nhau; một máy chủ IPv4 không thể trực tiếp gửi gói tin đến máy chủ IPv6 mà không có sự trợ giúp từ gateway. Các module network và socket của camera đều hỗ trợ cả hai. Hướng dẫn này sử dụng IPv4 trong các ví dụ vì hầu hết các mạng cục bộ mà camera sẽ tham gia vẫn chỉ dùng IPv4, nhưng mọi thứ tiếp theo hoạt động hoàn toàn giống nhau cho IPv6 khi các địa chỉ được thay đổi.
9.5.2. Địa chỉ IP dùng để làm gì¶
Địa chỉ IP cho biết gói tin được gửi đến máy chủ nào trên internet. Một router không biết cách đến đích trực tiếp biết rằng một router khác có thể biết, và chuyển tiếp gói tin đến đó. Gói tin di chuyển qua các router, mỗi router tiến gần hơn một chút đến đích, cho đến khi một router nằm trên phân đoạn cục bộ của đích thực hiện bước nhảy cuối cùng.
Hành vi từng bước nhảy đó là điều làm cho internet hoạt động như một mạng lớn thay vì nhiều đảo nhỏ. Trang tiếp theo đề cập đến cách các bước nhảy được chọn; trang này chỉ nói về địa chỉ.
9.5.3. Camera lấy địa chỉ bằng cách nào¶
Một camera vừa tham gia vào một mạng Wi-Fi cần một địa chỉ IP trước khi có thể giao tiếp với bất kỳ thứ gì. Có hai cách phổ biến để điều đó xảy ra.
Cách đầu tiên là phân công tự động. Camera yêu cầu mạng cục bộ cấp địa chỉ; thiết bị phân phát địa chỉ là router -- hộp kết nối mạng cục bộ với internet rộng hơn. Trong hầu hết các cài đặt gia đình và văn phòng nhỏ, cùng một hộp vật lý cũng đóng vai trò là switch mà các thiết bị có dây cắm vào và là điểm truy cập Wi-Fi mà các thiết bị không dây kết nối, vì vậy "router", "switch" và "điểm truy cập" có thể là cùng một thiết bị phần cứng. Router chạy một dịch vụ nhỏ gọi là DHCP (Giao thức Cấu hình Máy chủ Động), giữ một nhóm địa chỉ có sẵn, chọn một địa chỉ cho mỗi thiết bị mới đến và cho thuê trong một thời gian cố định. Đồng thời, router cũng cung cấp cho camera một vài thông tin cấu hình hữu ích khác:
địa chỉ để gửi lưu lượng ra ngoài khi đích ở ngoài mạng cục bộ (the default gateway, là địa chỉ của chính router); và
địa chỉ của một hoặc nhiều máy chủ tên miền chuyển đổi các tên dễ đọc như
example.comthành địa chỉ IP. Dịch vụ tra cứu tên được gọi là DNS, Hệ thống Tên miền, và Tên và DNS đề cập chi tiết về nó.
Tất cả những điều này xảy ra tự động trong khi kết nối được thiết lập. Camera không cần yêu cầu bất kỳ thứ gì trong số này một cách tường minh; ngay khi isconnected() trả về True trong ví dụ ở trang trước, camera đã có địa chỉ, gateway và máy chủ tên miền của nó.
Tùy chọn thứ hai là cấu hình tĩnh. Một số triển khai muốn biết trước địa chỉ của camera để các thiết bị khác có thể kết nối đến nó mà không cần tra cứu trước. Phương thức ipconfig() đặt địa chỉ, gateway và máy chủ tên miền thủ công:
wlan.ipconfig(addr4=("192.168.1.50/24", "192.168.1.1"))
wlan.ipconfig(dns="192.168.1.1")
Cấu hình tĩnh dễ xảy ra lỗi (hai thiết bị vô tình được gán cùng một địa chỉ sẽ xung đột). Hãy dùng DHCP mặc định trừ khi có lý do cụ thể để ghi đè.
Sau khi camera có địa chỉ IP, nó đã tham gia internet (hay ít nhất là phần mạng cục bộ của nó). Các thiết bị khác giờ có thể đánh địa chỉ gói tin đến nó bằng địa chỉ đó, và nó có thể đánh địa chỉ gói tin đến chúng.
9.5.4. Mặt nạ mạng và /24¶
/24 ở cuối địa chỉ trong ví dụ tĩnh ở trên là mặt nạ mạng. Một địa chỉ IP riêng lẻ không cho biết ranh giới của mạng cục bộ -- 192.168.1.50 có thể là một trong vài trăm địa chỉ trên một mạng gia đình nhỏ, hoặc một trong hàng nghìn trên một mạng lớn hơn. Mặt nạ mạng cho biết bao nhiêu phần của địa chỉ đặt tên cho mạng và bao nhiêu phần đặt tên cho máy chủ bên trong nó.
/24 có nghĩa là "24 bit đầu tiên trong 32 bit đặt tên cho mạng; 8 bit cuối đặt tên cho máy chủ". Với 192.168.1.50/24, địa chỉ được chia thành 192.168.1 cho mạng và .50 cho máy chủ, còn chỗ cho khoảng 254 thiết bị trên cùng một mạng cục bộ. /16 sẽ để lại nhiều bit hơn cho phần máy chủ và chứa được nhiều thiết bị hơn trên một mạng; /30 chỉ để lại hai địa chỉ máy chủ và phù hợp cho một kết nối điểm-điểm.
Mặt nạ mạng cũng thường được viết dưới dạng số bốn byte theo ký hiệu chấm giống như địa chỉ. /24 tương đương với 255.255.255.0 -- đọc mỗi byte là "tất cả các bit thuộc phần mạng". Hai dạng này có thể hoán đổi cho nhau; trình đọc ipconfig() trong phần tiếp theo trả về dạng bốn byte.
Tại sao việc chia tách này lại quan trọng -- cách một thiết bị dùng mặt nạ mạng để quyết định đích có nằm trong mạng cục bộ hay cần đi qua gateway, và tại sao hầu hết các mạng gia đình dùng /24 -- được đề cập trong Mạng riêng và NAT.
9.5.5. Đọc lại địa chỉ¶
Phương thức ipconfig() không có đối số trả về cấu hình hiện tại. Chế độ xem addr4 trả về địa chỉ IP và mặt nạ mạng:
>>> wlan.ipconfig("addr4")
('192.168.1.50', '255.255.255.0')