IP v6 Tác giả: Lê Anh Đức Chương IX: Vấn đề vận chuyển code trong ANIPv6 Chương này mô tả về vấn đề thiết kế và hiện thực kỹ thuật truyền code bởi AIPv6 Node. I. Mục đích của việc tích hợp khả năng demand-load vào IPv6 AIPv6 node có thể xử lý IPv6 node và có thể được triển khai trong mạng IPv6. Nếu kỹ thuật truyền code thiết lập code trong IPv6 packets mà trong quá trình thực thi, các IPv6 nodes gặp lỗi thì AIPv6 packets sẽ không đến được đích. Bất kỳ giải pháp nào đều phải tránh vấn đề ấy để có thể đạt được sử hòa hợp giữa các IPv6 nodes. Giải pháp được đề nghị cũng phải làm việc trong sự đặt tả IPv6 sẵn có. IANA cũng định nghĩa một giải pháp Active protocol. Nếu một giải pháp không thể dùng được cho IPv6 network thì giải pháp ấy cũng vô dụng. II. Demand-load protocol trong ANTS ANTS (Active Node Transport System) đã được nhắc đến trong chương 1. ANTS là cách tiếp cận in-band. Nó dùng một kỹ thuật load code in-band. Cơ chế của nó là một node, load code của một packet vào bộ nhớ của nó trong khi xử lý packet đó. Version cuối cùng của kỹ thuật này đòi hỏi mỗi packet phải mang cả code lẫn giá trị trạng thái tương ứng nhằm mục đích: packet đều có thể được xử lý bởi mỗi node mà nó đi qua. Theo cách đó, thậm chí các packets liền kề nhau được xử lý bởi code giống nhau, thì mỗi packet vẫn mang mỗi đoạn code riêng biệt. ANTS loại trừ code dư thừa này bằng cách dùng demand-load protocol. Thay vì vận chuyển code ở trên mỗi packet, ANTS tin tưởng vào các node thuộc kiến trúc của nó để gửi yêu cầu cần cung cấp code (code request) khi chúng không có code để xử lý packet. Trong cách hiện thực ANTS hiện nay, một node chỉ gửi một code request tới node kề theo hướng ngược lại (upstream node). Khi nhận được code response từ upstream node, requesting node lưu code trong cache trong một thời gian có giới hạn. Sau đó requesting node sẽ dùng code ấy xử lý tất cả các packets liên tiếp có cùng định danh. Quá trình demand loading được minh họa trong hình sau. Các bước trong giao thức ở hình trên có thể được miêu tả như sau: 1. Một capsule được forward bởi một active node (previous node) có sở hữu code để xử lý capsule. Trước khi capsule được gửi thì trường previous address trong định dạng của capsule sẽ được thiết lập. 2. Khi capsule đến active node tiếp theo (loading node) và trong trường hợp code trùng với type của nó bị thiếu thì một load request capsule sẽ được sinh ra và được gửi cho node được xác định bởi trường previous address. 3. Khi load request đến previous node thì các load response capsule sẽ được tạo ra, trong đó sẽ chứa code và những thứ cần thiết để load code. 4. Khi lode response đến loading node thì chúng sẽ được tái tạo lại để xây dựng code group tương ứng. Sau đó, quá trình load code hoàn tất, code group sau đó sẽ được sử dụng để forward capsule. Bởi vì quá trình này đã chứa code trong packet và được chuyển đi trên mạng, nên ứng dụng chỉ cần nhúng thông số trạng thái vào các mẫu phù hợp của code. ANTS demand load protocol có các đặc tính tốt. Thứ nhất, code lập trình chỉ gửi tới những node nào có request thôi. Vì vậy ứng dụng không cần phải xác định trước đường đi của packet và sau đó upload code cho tất cả các node mà packet đi qua, càng không cần phải broadcast programming code tới toàn bộ mạng. Hơn nữa, vì hầu hết các protocol thường dùng một dòng các packets, nên overhead của việc khởi tạo demand load sẽ được giảm dần theo con số packet gửi đi . Tuy nhiên overhead sẽ lớn nếu dòng các packets nhỏ quá. III. Những lựa chọn cho việc vận chuyển code: Phần này mô tả và phân tích về sự lựa chọn cho việc kết hợp giữa Active Network vào IPv6 Network. i. Tunneling: Tunneling là cách để đóng gói một protocol vào trong một protocol khác. Tunneling được dùng khi 2 node không nhìn thấy nhau bằng các protocol riêng biệt của mình. Lợi ích của tunneling là một node tách biệt có thể kết nối đến active network over IPv6 mà không làm hỏng mạng đó. Tunneling có thể hoạt động trên MobileBone và 6bone. Tunneling không thể hòa nhập hoàn toàn vào active network như một thành viên của active network được. ANTS capsule được đóng gói thành dạng IPv6 trước khi gửi vào mạng Active node. Công việc này là tác động ở lớp data link. Một ứng dụng chạy trên IPv6 node nguyên thủy sẽ không bao giờ tương tác với Active protocol, bởi vì IPv6 node nguyên thủy của ứng dụng ấy không bao giờ xử lý các Active packet đã được phân phát trước cho ứng dụng ấy. ii. Dùng Gateways: Một khả năng nữa là tunnel giữa các Active node và sau đó bỏ đi Active payload trước khi Active packet được gởi đi trên mạng IPv6. Công việc này đảm bảo thao tác giữa các Active node và các non-Active node. Loại lượt đồ này yêu cầu một Active node phải chức năng hóa cả một router và một gateway. Để các phần gateway của node chức năng hóa đúng đắn, node phải cần biết mối quan hệ về vị trí giữa tất cả các IPv6 node và Active node trong Internet. Đây là một điểm khó khăn. Active packet có thể được ánh xạ để trở thành IPv6 packet (bằng cách loại bỏ progamming code), nhưng ngược lại thì không thể. Vì thế nên Active node sẽ không loại bỏ progamming code của một packet khi nhận thấy rằng packet ấy vẫn còn đi qua Active node. Khi biết chắc rằng packet ra khỏi Active node, programming code mới được xóa bỏ đi để đi vào IPv6 node. Cost của việc loại bỏ đúng đắn này là rất “nặng ký” hơn các lợi ích thu được từ phương pháp này, bởi vì việc loại bỏ đúng đắn này phải cần một giao thức IPv6 node discovery và một bảng chứa một số lượng rất lớn các thông tin về vị trí của tất cả các IPv6 node. iii. Dùng kỹ thuật của IPv6: Kỹ thuật này vận chuyển code và các giá trị trạng thái (state values) trong một payload và một option IPv6 Extension header Tấc cả các IPv6 node đều phải xử lý các IPv6 extension header. Vì vậy tất cả IPv6 node đều có khả năng trở thành Active node. Upper Layer Payload Upper layer payload là một phần của IPv6 packet, cái theo sau IPv6 header và extension header. Nó không được đặc tả bởi IPv6. Không giống IPv6 extension header, sự tiêu chuẩn hóa của một uper layer protocol chỉ áp dụng cho sự thực thi ở end node. Sự giới hạn kích thước của payload là kích thước lớn nhất của IPv6 packet. Vì thế, payload là một phương tiện tốt để vận chuyển những phân mảnh lớn của code và state values. Một option cũng được chèn vào hop-by-hop option header để báo cho AIPv6 router biết về sự hiện diện của payload này trong packet. Lợi ích của option này là một AIPv6 router không phải phân tích extension header ở mỗi packet cho công việc tìm kiếm một Active header. Không may mắn là việc định nghĩa một payload mới mà IPv6 node không hỗ trợ thì IPv6 end node sẽ drop các packet chứ payload mới này và gửi ICMP error message về node nguồn của packet ấy. Khi này xem như việc vận chuyển code là thất bại. Option trong Hop-by-Hop Header Một IPv6 option cung cấp các thuộc tính cho việc xử lý tiền xác định phi chuẩn. IPv6 node cần điều ấy để áp dụng vào packet kết hợp. IPv6 option là lựa chọn tốt cho việc vận chuyện code, bởi vì nó có thể chỉ định IPv6 node bỏ qua option nếu node đó không hiểu option. Một điểm có lợi nữa là có một cơ chế network socket cung cấp cho các ứng dụng tại end node để chèn option vào và nhận option từ Hop-by-hop option header, nên cho phép ứng dụng dùng kỹ thuật Active Network trong khi chạy ở IPv6 end node. Một khuyết điểm của việc dùng option để vận chuyển code là kích thước của Hop-by-hop option header được giới hạn ở 256 bytes. Với kích thước ấy thì option rất thích hợp với việc vận chuyển state value (trung bình cần khỏang 50 bytes), nhưng không thích hợp với viêc vận chuyển các phân mảnh code lớn (trung bình cần kích thước 750- 1000 bytes). Hop-bu-hop option header có kích thước tối đa là 256 bytes, nên ta có thể tổ chức như sau: hop-by-hop option có thể giữ số lượng các option. Code được phân mảnh ra nhỏ. Một option giữ con số phân mảnh ấy. Mỗi mảnh code nhỏ sẽ được đưa vào option. Khuyết điểm là các Active node phải tốn chi phí cho việc parse. Mỗi Active node có thể phân tích 5 option / 1 packet, như vậy sẽ được 1K phân mảnh code. IV. Giải pháp: kết hợp Option và Payload Quá trình vận chuyển phải phân ra làm hai phần tách biệt: vận chuyển state value và vận chuyển code (state value transport và code transport). Trong Active network, code transport là một quá trình xử lý end-to-end giữa 2 Active node. Active node A gửi một code request tới Active node B, và Active node B gửi code response tới Active node A. Vì thế, trong mạng có Active node và non-Active node (được gọi là mạng lai – hybrid network), một IPv6 payload có thể được dùng để vận chuyển code, bởi vì chỉ có 2 node cố gắng xử lý payload mới được kích hoạt. Mặc khác, state value transport là một quá trình xử lý bao gồm tất cả các node trong mạng Active network. Trong mạng hybrid network, state value có thể sẽ được xử lý bởi các IPv6 node trên đường đi (IPv6 intermediate node)hoặc end node. Packet đi qua mạng vả state value có 2 khả năng : · Đặt các state value trong option ( có tối đa 256 bytes), và kích hoạt sự tương tác giữa các IPv6 intermediate node và các end node. · Đặt các state value trong payload( có tối đa 2056 bytes), và kích hoạt tương tác giữa các IPv6 intermediate node, nhưng yêu cầu rằng source code chỉ gửi các packet cho các Active node đích. AIPv6 transport protocol dùng một option (marshaled option), và một payload (system payload) để transport state value và code trên mạng IPv6. Marshaled option mang state value, system payload mang data được gởi bởi các demand requests, demand responses. Marshaled option có thể ánh xạ trực tiếp thành marshaled capsule trong ANTS, và system payload có thể ánh xạ trực tiếp thành một marshaled system capsule trong ANTS. Chi tiết về option và pay load được trình bày trong phụ lục. . demand-load vào IPv6 AIPv6 node có thể xử lý IPv6 node và có thể được triển khai trong mạng IPv6. Nếu kỹ thuật truyền code thiết lập code trong IPv6 packets mà trong quá trình thực thi, các IPv6 nodes. cả các IPv6 node. iii. Dùng kỹ thuật của IPv6: Kỹ thuật này vận chuyển code và các giá trị trạng thái (state values) trong một payload và một option IPv6 Extension header Tấc cả các IPv6 node. xử lý các IPv6 extension header. Vì vậy tất cả IPv6 node đều có khả năng trở thành Active node. Upper Layer Payload Upper layer payload là một phần của IPv6 packet, cái theo sau IPv6 header