Tổng quan
Giao thức Mạng I2P (I2NP), nằm giữa I2CP và các giao thức truyền tải I2P khác nhau, quản lý việc định tuyến và trộn lẫn các thông điệp giữa các bộ định tuyến, cũng như việc lựa chọn giao thức truyền tải nào sử dụng khi giao tiếp với một máy ngang hàng mà cả hai bên cùng hỗ trợ nhiều giao thức truyền tải.
Định nghĩa I2NP
Các tin nhắn I2NP (I2P Network Protocol) có thể được sử dụng cho các tin nhắn một bước nhảy, từ router đến router, điểm-điểm. Bằng cách mã hóa và gói các tin nhắn vào bên trong các tin nhắn khác, chúng có thể được gửi một cách an toàn qua nhiều bước nhảy đến đích cuối cùng. Độ ưu tiên chỉ được sử dụng cục bộ tại điểm khởi tạo, ví dụ: khi xếp hàng đợi để gửi đi.
Các mức độ ưu tiên được liệt kê bên dưới có thể không còn cập nhật và có thể thay đổi. Việc triển khai hàng đợi ưu tiên có thể khác nhau.
Định dạng tin nhắn
Bảng dưới đây mô tả phần tiêu đề truyền thống 16 byte được sử dụng trong NTCP. Các giao thức truyền tải SSU và NTCP2 sử dụng các tiêu đề đã được sửa đổi.
| Field | Bytes |
|---|---|
| Type | 1 |
| Unique ID | 4 |
| Expiration | 8 |
| Payload Length | 2 |
| Checksum | 1 |
| Payload | 0 - 61.2KB |
Số lượng phân mảnh tối đa là 64, và thông điệp có thể không được căn chỉnh hoàn hảo, do đó thông điệp phải vừa đủ trong 63 phân mảnh theo quy định.
Kích thước tối đa của một đoạn ban đầu là 956 byte (giả sử ở chế độ giao hàng TUNNEL); kích thước tối đa của một đoạn tiếp theo là 996 byte. Do đó, kích thước tối đa vào khoảng 956 + (62 × 996) = 62708 byte, hay 61,2 KB.
Ngoài ra, các giao thức truyền tải có thể có các giới hạn bổ sung. Giới hạn NTCP là 16KB - 6 = 16378 byte. Giới hạn SSU là khoảng 32 KB. Giới hạn NTCP2 là khoảng 64KB - 20 = 65516 byte, cao hơn mức mà một tunnel có thể hỗ trợ.
Lưu ý rằng đây không phải là giới hạn đối với các gói tin mà client nhìn thấy, vì router có thể gom gói thuê (leaseset) phản hồi và/hoặc các thẻ phiên (session tags) cùng với tin nhắn của client vào một tin nhắn garlic. Kích thước của gói thuê và các thẻ cộng lại có thể làm tăng khoảng 5,5KB. Do đó, giới hạn gói tin hiện tại vào khoảng 10KB. Giới hạn này sẽ được tăng lên trong một bản phát hành tương lai.
Các loại tin nhắn
Độ ưu tiên có số cao hơn thì mức ưu tiên càng cao. Phần lớn lưu lượng là TunnelDataMessages (độ ưu tiên 400), do đó mọi thứ trên 400 về cơ bản là ưu tiên cao, và mọi thứ dưới đó là ưu tiên thấp. Lưu ý thêm rằng nhiều tin nhắn thường được định tuyến thông qua các tunnel thăm dò (exploratory tunnels), chứ không phải tunnel khách hàng (client tunnels), và do đó có thể không nằm trong cùng một hàng đợi trừ khi các bước nhảy đầu tiên tình cờ nằm trên cùng một peer.
Ngoài ra, không phải tất cả các loại tin nhắn đều được gửi mà không mã hóa. Ví dụ, khi kiểm tra một tunnel, router sẽ bao bọc một DeliveryStatusMessage, được đặt bên trong một GarlicMessage, và tiếp tục được bao bọc bởi một DataMessage.
| Message | Type | Payload Length | Priority | Comments |
|---|---|---|---|---|
| DatabaseLookupMessage | 2 | 500 | May vary | |
| DatabaseSearchReplyMessage | 3 | Typ. 161 | 300 | Size is 65 + 32*(number of hashes) where typically, the hashes for three floodfill routers are returned. |
| DatabaseStoreMessage | 1 | Varies | 460 | Priority may vary. Size is 898 bytes for a typical 2-lease leaseSet. RouterInfo structures are compressed, and size varies; however there is a continuing effort to reduce the amount of data published in a RouterInfo. |
| DataMessage | 20 | 4 - 62080 | 425 | Priority may vary on a per-destination basis |
| DeliveryStatusMessage | 10 | 12 | Used for message replies, and for testing tunnels - generally wrapped in a GarlicMessage | |
| GarlicMessage | 11 | Generally wrapped in a DataMessage - but when unwrapped, given a priority of 100 by the forwarding router | ||
| TunnelBuildMessage | 21 | 4224 | 500 | |
| TunnelBuildReplyMessage | 22 | 4224 | 300 | |
| TunnelDataMessage | 18 | 1028 | 400 | The most common message. Priority for tunnel participants, outbound endpoints, and inbound gateways was reduced to 200 as of release 0.6.1.33. Outbound gateway messages (i.e. those originated locally) remains at 400. |
| TunnelGatewayMessage | 19 | 300/400 | ||
| VariableTunnelBuildMessage | 23 | 1057 - 4225 | 500 | Shorter TunnelBuildMessage as of 0.7.12 |
| VariableTunnelBuildReplyMessage | 24 | 1057 - 4225 | 300 | Shorter TunnelBuildReplyMessage as of 0.7.12 |
| Others (Types 0, 4-9, 12) | 0, 4-9, 12 | Obsolete, Unused |
Xem trang Thông số kỹ thuật I2NP để biết thông số giao thức đầy đủ. Xem thêm trang Thông số kỹ thuật Cấu trúc Dữ liệu Chung .
Công việc trong tương lai
Chưa rõ liệu sơ đồ ưu tiên hiện tại có hiệu quả nói chung hay không, và liệu các mức ưu tiên cho các tin nhắn khác nhau có cần được điều chỉnh thêm hay không. Đây là chủ đề cần nghiên cứu, phân tích và thử nghiệm thêm.