3.1. Mô hình lập trình capsule
Một mạng ANTS bao gồm: các ứng dụng sử dụng mạng bằng cách gửi và nhận những
gói tin đặc biệt được gọi là các capsule qua một active node cục bộ (hay còn gọi là một
router có khả năng lập trình). Mỗi active node được kết nối với với các node lân cận với
nó. Các ứng dụng có thể lựa chọn các loại capcule khác nhau tùy thuộc vào phần mềm.
Code sẽ được thực thi tại mỗi active node khi nó đi qua. Do đó, để tạo ra một dịch vụ mới
thì nó chỉ cần xây dựng một tập các loại capsule mới với các code lập trình tương ứng. Vì
vậy, mô hình này cho phép quá trình xử lý tùy biến dọc theo mạng, và cho phép các ứng
dụng mới được triển khai chỉ bằng một bước mà không cần yêu cầu việc triển khai thêm
hay xây dựng thử nghiệm. Và các ứng dụng mới được lựa chọn một cách rõ ràng bằng
cách lựa chọn loại capsule hơn là việc nâng cấp router.
3.2. Forward packet mở rộng
Mô hình lập trình capsule dễ hiểu và linh hoạt nhưng lại khó thực thi. Để có thể thực thi ở
hiệu suất cao cần được giới hạn theo 2 cách:
• Việc forward một capsule được chia làm các phần như: truyền code và thực thi code.
Việc phân chia việc thực thi những forwarding thành những phần trên cho phép mỗi phần
được thực thi với các kỹ thuật phù hợp và cho phép code được cache ở những active node
để tăng hiệu suất. Nhiều kỹ thuật có thể được sử dụng để truyền code phụ thuộc vào kích
thước và tần suất của việc truyền
• Mô hình capsule được sửa đổi để phù hợp với 1 mạng mà trong đó chỉ những node xác
định mới là active node. Ở những node bình thường thì các capsule sẽ được forward như
những gói tin IP bình thường. ANTS xem những active node như những node đặc biệt
được nhúng vào mạng.
Hình 3. 1 Các trường trong gói capsule
3.3. Các thành phần kiến trúc
Gồm một mô hình lập trình capsule, một giao thức demand pull code và hệ điều hành của
node
3.4. Capsule programing module
Gồm 3 phần: định dạng của capsule; luật forward; và API của node
3.4.1. Định dạng của capsule
Mỗi capuslemang theo những trường sau: địa chỉ nguồn, đích; resource limit (tương tự
như TTL của IPv4 và hopcount của IPv6); version( xác định version của ANTS);
type(xác định loại forwarding routine tương ứng); previous address (được sử dụng để
truyền code trong mạng); các trường header khác (phụ thuộc vào loại capsule được xác
định ở trường type); payload.
• Trong những trường này thì trường type là quan trong nhất vì nó xác định forwarding
routine; code group và protocol mà capsule đó thuộc về. Mỗi bit đều được sử dụng để xử
lý capsule ở mỗi node. Yêu cầu là type phải là duy nhất dễ dàng kiểm tra và phân phối.
• Code group và protocol được xác định bởi các cấutrúc phân cấp vì vậy cho phép nó
được sử dụng an toàn trong mạng mà trong đó các code không phải lúc nào cũng có.
Định nghĩa các capsule type bằng cách sẽ cung cấp 2 đặc tính quan trọng:
- Các type mới có thể được phân phối một cách nhanh chóng. Vì các dấu hiệu của nó là
duy nhất và type phụ thuộc vào code tương ứng, do đó chỉ cần chọn một hàm dấu hiệu
với một tầm lớn để làm cho khả năng đụng độ là nhỏ nhất. Với số hash 128 bit ngẫu
nhiên như MD5 thì đụng độ xảy ra khi có 264 dầu hiệu đồng thời. Do đó, các dịch vụ mới
có thể được hỗ trợ bằng sự đồng ý tương hỗ giữa những phần xác định.
- Các type sẽ xác lập một secure binding giữa capsule và code tương ứng. Vì hash là một
chiều nên sẽ xóa được nguy cơ giả code vì mỗi node có thể nhanh chóng xác minh (mà
không cần thêm những thông tin bên ngoàni) rằng một tập các code xác định sẽ tương
ứng với một capsule tương ứng.
3.4.2. Active node API
Trong thực tế, một loại routine có thể được xác định phụ thuộc vào active node API sẵn
có. Ví dụ: nếu không thể lưu và truy cập các trạng thái node thì các chương trình capsule
sẽ không thể giao tiếp với nhau. Ngoài ra việc thực thi code phụ thuộc vào API. Ví dụ:
các hàng xóm của một node xác định có thể được tìm thấy bằng cách đi qua toànn bộ
bảng định tuyến để hỏi những node kế cận hay hỏi trực tiếp node là phụ thuộc vào hàm
API nào được hỗ trợ. Ví dụ: Các hàm API cho capsule forwarding routine:
Bảng 3.1: Các phương thức của Node
Khi kết hợp với các khả năng được cung cấp bởi mô hình forward mở rộng; những loại
API này đủ để hỗ trợ các loại dịch vụ mới một cách hiệu quả:
• Các đặc tính của mạng có thể được khám phá và những đường mới được tính toán bằng
cách sử dụng các hàm truy nhập môi trường kết hợp với các header và việc truyền có
kiểm soát.
• Các dịch vụ định tuyến mới được cung cấp bằng cách sử dụng soft-store để duy trì
những đường vừa được tính và forwarding sẽ đi theo những đường này.
• Multicast có thề được cung cấp bằng cách tạo ra các capsule mới trong mạng và chúng
sẽ đi theo những đường được duy trì trong soft-store.
3.4.3. Capsule forwarding:
Quá trình forward phụ thuộc vào loại capsule trừ khi ở những node không phải active thì
quá trình forward IP mặc định sẽ được sử dụng. Ở mỗi active node thì trường type sẽ
được sử dụng để xác định loại forward tương ứng (được truyền riêng). Sau khi đã xác
định thì routine tương ứng sẽ được thực thi để forward capsule. Việc này xảy ra bằng một
mô hình thực thi.
• Trước hết, các forarding routine được cho phép chạy trong một thời gian ngắn (phụ
thuộc vào tốc độ truyền đích của capsule). Các active node sẽ ép buộc quá trình xử lý này
bằng cách kiểm soát capsule runtime. Nếu tốc độ vượt quá, thì node sẽ bỏ forwarding và
sẽ sử dụng quá trình forward mặc định.
• Thứ 2, chỉ một lượng nhỏ các trạng thái được xác định một cách rõ ràng là được mang
theo cùng với capsule.Các trạng thái khác phải được lưu ở node để xử lý sau, hay sẽ được
phục hồi bởi active node runtime. ANTS cho phép các nhà phát triển dịch vụ định nghĩa
những trường cho capsule để nó có thể được truy cập từ bên trong mạng. Những trường
này được định nghĩa cùng với capsule forwarding routine.
• Thứ 3, routine có thể được chạy mà không bị delay ở mỗi active node trong mạng. Các
forwarding routine có thể thực hiện các lời gọi thông qua API ở mỗi node. Ví dụ: một
capsule theo một route xác định có thể tạo và forward một capsule liên quan giúp tái thiết
lập route nếu nó thấy route đó không còn tồn tại trong mạng nữa. Để lời gọi này thành
công thì code của cả 2 loại capsule phải được truyền cùng nhau để tất cả những code
được yêu cầu có sẳn, điều này dẫn đến việc định nghĩa một code group (một tập bao đóng
các forwarding code được gọi từ forwarding code) được truyền bởi giao thức phân phát
code.
• Thứ 4, active node runtime bảo đảm rằng dưới góc nhìn của các nhà phát tirển ứng dụng
thì các capsule được truyền một cách tuần tự.
• cuối cùng, việc xử lý lỗi trong quá trình truyền. Các lỗi có thể là không đủ resource để
truyền, thiếu một đường mặc định, và một số diều kiện khác. Để hiệu quả thì quá trình xử
lý lỗi nên được thực hiện cục bộ.
3.5. Việc truyền code
Khi một ứng dụng mới được biểu diễn trong một capsule thì nó phải được thực thi trong
hạ tầng mạng trước khi được sử dụng. ANTS cung cấp một giao thức phân phối code
theo yêu cầu cho phép ứng dụng bắt đầu có thể sử dụng một ứng dụng mới.
Việc phân phối code trong ANTS được thiết kế cho những mẫu traffic mà trong đó việc
caching là hiệu quả. Hệ thống demand pull truyền code để thực thi một dịch vụ mới cho
những node dọc theo đường mà một capsule sử dụng dịch vụ đi theo. Code sẽ được cache
ở những node này cho những capsule sau sử dụng. Kỹ thuật này có ích lợi là kích thước
nhỏ của code để cung cấp việc truyền không tin cậy: việc phân phối code sẽ thành công
một cách nhanh chóng hay đôi khi fail.
3.5.1. Các mục đích thiết kế
Dễ thích ứng với việc thay đổi route và node failure; có thể thích hợp cho những mạng
lớn, tối thiểu hóa lượng code được lưu tại những node và khỏang cách mà code được
truyền. Lý tưởng là: một forward routine xác định chỉ nên được truyền một lần trên mỗi
liên kết mạng và chỉ cho những active node yêu cầu nó; tối thiểu hóa khỏang thời gian kể
từ khi một capsule đến một node cho đến lúc code tương ứng được lấy, chống việc giả
code, không gây nghẽn.
• Chiến lược của ANTS là sử dụng pull code dọc theo đường mà capsule đi theo với một
giao thức connectionless và code ở các active node. Để khởi tạo quá trình này thì ứng
dụng ở rìa của mạng phải lấy code để thực thi một ứng dụng mới trước khi chúng có thể
sử dụng dịch vụ, và sau đó sử dụng kỹ thuật: duy trì trạng thái của code dọc theo đường
khi chúng đang được sử dụng và được xem như là một loại kết nối mềm. Có thể thích
ứng với việc thay đổi đường đi và không phụ thuộc vào các kỹ thuật truyền tin cậy cũng
như pha thiết lập.
3.5.2. Phân phối code ở các hệ thống đầu cuối
Việc phân phối code cho một dịch vụ mới xảy ra ở các hệ thống đầu cuối nơi mà các ứng
dụng có thể truy cập vào mạng ANTS. Một ứng dụng phải lấy code để thực thi một ứng
dụng mới trước khi có thể thực thi nó. Nghĩa là tất cả các capsule forwarding routine thực
thi giao thức tương ứng với dịch vụ. Để thực hiện việc này thì một ứng dụng phải tham
khảo một thư mục để ánh xạ tên dịch vụ cho code tương ứng. Trong ANTS toolkit thì thư
mục này là file system cục bộ. Việc ánh xạ này được sử dụng để tách biệt giao diện với
việc thực thi. Các ứng dụng sử dụng các tên ở cấp cao để biểu thị một giao diện với mạng
và con người có thể đọc được. Trong network layer thì các dịch vụ được thực thi dựa trên
các capsule type.
Khi một ứng dụng đã lấy được code cần thiết, nó sẽ đăng ký code với active node cục bộ
của nó. Node sau đó sẽ có thể tính toán loại của capsule sử dụng dịch vụ khi nó vào
mạng, và sẽ có code cần thiết để khởi tạo việc thực thi dịch vụ đó trong mạng. Lúc đó
ứng dụng có thể tự do gửi các capsule thuộc về ứng dụng mới đó vào mạng thông qua
node cục bộ. Những capsule này sẽ khởi tạo quá trình phân phối code trong mạng. Cuối
cùng khi ứng dụng hoànn tất việc sử dụng dịch vụ mới, nó sẽ unregister code.
3.5.3. Việc phân phối code trong mạng
Ở các node trong mạng ANTS, việc phân phối code sẽ được thực thi khi node nhận được
một loại capsule mà nó không biết. Kỹ thuật demand load sẽ được sử dụng để lấy code từ
node trước mà capsule đã đi qua sau đó sẽ cache code tại node hiện tại để sử dụng sau.
Code được truyền phải tuân theo một số yêu cầu sau: nó phải đủ thông tin để forward
capsule khi đã load nó lên và phải nên có kích thước nhỏ để không tốn resource. Cuối
cùng, nó phải cho phép các loại capsule dựa trên dấu hiệu được xác minh để code không
thể bị giả.
Hình 3. 2 Quá trình demand load
Các bước trong giao thức demand load:
• Một capsule được forward bởi một active node (được gọi là previous node) có sở hữu
một code group tương ứng. Trước khi nó được gửi thì trường previuos address sẽ được
thiết lập.
• Khi capsule đến active node tiếp theo (loading node) và nếu code trùng với type của nó
bị thiếu thì một capsule yêu cầu load sẽ được sinh ra và được gửi cho node được xác định
bởi trường previous address.
• Khi yêu cầu load đến previous node thì một nhóm các capsule load response sẽ được
sinh ra, chúng sẽ chứa code group được yêu cầu và những thứ khác để load code.
• Khi load response đến loading node thì chúng sẽ được tái tạo lại để xây dựng code
group tương ứng và kết quả sẽ được kiểm tra và sau đó quá trình load sẽ hoànn tất, code
group sau đó sẽ được sử dụng để forward capsule và quay lại bước 1.
Trong ANTS, code được truyền thành những đơn vị forwarding routine thuộc về code
group cần thiết cộng với các loại code group. Vì một giao thức được định nghĩa bởi code
group type nên thông tin này đủ để tính capsule type và ngăn việc giả code.
Một vấn đề thực tế nữa trong việc truyền các code group là việc mã hóa các lời gọi giữa
những forwarding routine tạo nên một code group. Các lời gọi sẽ được biểu diễn bởi
những tên cục bộ được nhúng thẳng trong code của forwarding routine. Những tên cục bộ
này chỉ được liên kết trong code group được truyền để ngăn việc giả code.
Ví dụ: Một routine xây dựng các route có thể có tên là “producer”, còn routine khác đi
theo những route đó có thể có tên là “consumer”. Các producer routine có thể được kết
với một code group với bất cứ consumer routine, vì vậy cho phép các lời gọi chỉ xảy ra
một cách bảo mật giữa những routine được chọn.
. trúc
Gồm một mô hình lập trình capsule, một giao thức demand pull code và hệ điều hành của
node
3.4. Capsule programing module
Gồm 3 phần: định dạng của. forward; và API của node
3.4.1. Định dạng của capsule
Mỗi capuslemang theo những trường sau: địa chỉ nguồn, đích; resource limit (tương tự
như TTL của IPv4 và