Như đã đề cập ở trên, sự công bằng khi truyền tải thông qua một nút cổ chai được chia sẻ chỉ là một trong những mục tiêu bắt buộc đối với MPTCP. Để có được những phẩm chất mong muốn này, tồn tại ba mục tiêu cho thuật toán điều khiển tắc nghẽn đa
26 đường:
Cải thiện thông lượng: Luồng đa đường sẽ hoạt động có hiệu năng ít nhất cũng như luồng đơn đường khi nó hoạt động ở chế độ tốt nhất.
Không gây hại: Luồng đa đường sẽ không chiếm nhiều dung lượng hơn bất kỳ tài nguyên nào được chia sẻ bởi các đường truyền của nó so với một luồng đơn. Điều này đảm bảo nó sẽ không gây hại quá mức cho các luồng khác.
Cân bằng tắc nghẽn: Luồng đa đường nên chuyển hướng càng nhiều lưu lượng càng tốt ra khỏi các đường bị tắc nghẽn, tùy thuộc vào việc đáp ứng hai mục tiêu đầu tiên.
Ba mục tiêu này hỗ trợ thuật toán điều khiển tắc nghẽn và tương ứng với nhiều mục tiêu đã nêu trong các phần trước.
2.2. Kiến trúc của MPTCP
Kiến trúc của MPTCP tuân theo kiến trúc của giao thức Transport – Next– Generation (Tng) được đề xuất chia lớp truyền tải thành các lớp chức năng ứng dụng và mạng. Trong cấu trúc của MPTCP, lớp ngữ nghĩa giống TCP cung cấp khả năng tương thích với ứng dụng, trong khi khả năng tương thích mạng được cung cấp bởi thành phần TCP subflow. Tng không phải là kiến trúc duy nhất hỗ trợ giao thức Multipath, Tng là sự kếthợp từ việcnghiên cứuvà phát triển những kiến trúc giao vận hỗ trợ cơ chế Multipath trước đó.[7]
Hình 2.4. Mô hình phân chia chức năng của Tng
Tng chia tách lớp truyền tải thành hai thành phần: hướng ứng dụng (application- oriented) và hướng mạng (network-oriented) như thể hiện trong Hình 2.4.
Các thành phần hướng ứng dụng(tầng Semantic): Thực hiện chức năng chính
Application Transport Network Application Semantic Functions Flow/Endpoint Funciton Network (Chức năng hướng tầng ứng dụng) (Chức năng hướng tầng mạng)
27
là hỗ trợ và bảo vệ truyền thông đầu cuối của ứng dụng, bao gồm cung cấp các đặc điểm về việc sắp xếp theo thứ tự, gửi gói tin tin cậy giống như luồng byte TCP hay multi- stream SCTP.
Các thành phần hướng mạng (Flow+Endpoint): Thực hiện các chức năng chính bao gồm điều khiển tắc nghẽn và định dạng đầu cuối(dựa vào số hiệu cổng dịch vụ - port number). Các chức năng hướng mạng, thông thường là nằm ngoài tầng giao vận end-to-end. Các chức năng này đã được chứng minh trong thực tế là có liên quan chặt chẽ với các thiết bị điều hành mạng cũng như các các thiết trung gian.
Hình 2.5 thể hiện sự tương tác với các lớp khác nhau của các thiết bị trung gian trong mô hình phân chia tầng giao vận(như ở Hình 2.4): thành phần hướng ứng dụng điều hành end-to-end trong khi đó thành phần hướng mạng điều hành "segment-by- segment" và có thể được đặt xen kẽ các thiết bị trung gian.
Hình 2.5. Các thiết bị trung gian trong mô hình mạng Internet mới
2.3. Mô hình phân chia chức năng MPTCP
Dựa vào nền tảng là mô hình Tng đã phân tích ở phần trước, chúng ta chia MPTCP thành 2 tầng con kết nối với nhau thông qua một giao diện xác định.Kiến trúc của MPTCP thiết kế theo mô hình phân chia Tng như Hình 2.6.
Semantic Flow+Endpoint Network Semantic Flow+Endpoint Network Network Network end-to-end End Host Firewall or NAT Perfomance Enhancing Proxy End Host Flow+End point Application Application Flow+ Endpoint end-to-end
28
Hình 2.6. Mối quan hệ giữa Tng(bên trái) và MPTCP(bên phải)
Tầng con MPTCP:
Có vai trò như lớp Semantic hướng ứng dụng (app oriented), cung cấp khả năng tương thích ứng dụng.
Thành phần luồng con TCP:
Cung cấp khả năng tương thích mạng có vai trò như một luồng TCP thông thường trong mạng, cũng như tầng Flow+Endpoint là thành phần hướng mạng.
Là phần mở rộng giao thức của TCP, MPTCP xác định một giao thức hoạt động ở hai quy mô: các thành phần MPTCP điều hành end-to-end, trong khi nó cho phép thành phần TCP điều hành segment-by-segment. Từ những phân tích ở trên, giao thức vận chuyển đa đường phải có chức năng quản lý Flow/Endpoint đối với mỗi đường dẫn ở kết nối “đầu cuối – đầu cuối”(end-to-end), trong khi vẫn phải có giao diện trong suốt đối với tầng ứng dụng. Giữ nguyên kiến trúc này, MPTCP phân chia tầng vận chuyển thành các phần: phần MPTCP, đáp ứng các chức năng “semantic function” truyền dữ liệu thứ tự và tin cậy, và phần “legacy TCP”(subflow), bao gồm các chức năng Flow/Endpoint.
MPTCP sử dụng các phiên của TCP thông thường, hay còn gọi là các "subflow", để cung cấp cách thức giao vận cơ sở trên mỗi đường dẫn, và như vậy những điều này giữ lại khả năng tương thích trên mạng. Thông tin MPTCP cụ thể được truyền trong một cách thức tương thích với TCP, mặc dù cơ chế này là tách biệt với các thông tin thực tế được chuyển giao để có thể phát triển trong các phiên bản trong tương lai. Ở phần này ta đưa ra một kiến trúc tổng quan cho TCP đa đường. Kiến trúc này cho phép giao thức trực tiếp thực hiện được các mục tiêu đã nêu ra ở trên. MPTCP hoạt động ở tầng vận chuyển, và sự tồn tại của nó mục đích là trong suốt với cả những lớp cao và thấp hơn. Nó được mở rộng từ giao thức TCP chuẩn, và như vậy MPTCP được thiết kế để có thể sử dụng được các ứng dụng kế thừa từ TCP mà không cần thay đổi các ứng dụng này.
29
Những ứng dụng có khả năng sử dụng truyền tải đa đường có thể sử dụng thêm nhiều socket API. Hình 2.7 minh họa kiến trúc phân lớp của TCP thông thường và MPTCP.
Hình 2.7. So sánh mô hình TCP và mô hình của MPTCP
Nằm bên dưới tầng ứng dụng, mở rộng MPTCP lần lượt quản lý các TCP subflows (luồng con) dưới nó. Để làm điều này, nó phải thực hiện các chức năng sau:
a. Quản lý đường dẫn (Path Management):
Đây là chức năng phát hiện và sử dụng nhiều đường dẫn giữa hai host. MPTCP sử dụng sự hiện diện của nhiều địa chỉ IP ở một hoặc cả hai host như là một điều để phát hiện khả năng sử dụng nhiều đường dẫn. Do đầu cuối không thể phân biệt các đường dẫn khác nhau, nên dễ dàng xảy ra trường hợp các đường dẫn này có thể đi qua cùng một liên kết thắt cổ chai. Tính năng quản lý đường dẫn của giao thức MPTCP là các cơ chế để báo hiệu những địa chỉ khác nhau cho các host biết, và cơ chế để thiết lập các subflows mới gia nhập vào một kết nối MPTCP đang tồn tại.
b. Lập lịch cho các phân đoạn (Scheduler):
Chức năng này chia dòng bytes nhận được từ tầng ứng dụng thành các phân đoạn (segments) để truyền đi trên một trong những subflows sẵn có. Thiết kế MPTCP sử dụng một ánh xạ đánh thứ tự dữ liệu (data sequence mapping), liên kết các phân đoạn được gửi trên các subflow khác nhau bằng một chuỗi số ở mức kết nối, do đó cho phép các phân đoạn gửi trên các subflow khác nhau được sắp xếp lại đúng thứ tự ở bên nhận. Lập lịch gói tin là phụ thuộc vào thông tin về sự sẵn có của các đường dẫn từ thành phần quản lý đường dẫn, và sau đó nó sử dụng các subflow để truyền các phân đoạn đã xếp thành hàng đợi. Chức năng này cũng chịu trách nhiệm cho việc sắp xếp lại các phân đoạn ở cấp kết nối khi nhận được gói tin từ các luồng con TCP, theo bản đồ chuỗi dữ liệu.
c. Giao diện Subflow (TCP đơn đường):
Thành phần subflow có các phân đoạn từ các thành phần lập lịch gói tin và truyền
Application TCP Application IP MPTCP Subflow (TCP) Subflow (TCP) IP
30
chúng trên một đường dẫn xác định. Chú ý rằng phần lập lịch gói tin không được gắn đủ thông tin trong gói tin để cho phép thực hiện điều này: các phân đoạn với cùng một Sequence Number cấp kết nối có thể được truyền đi trên nhiều đường dẫn, ví dụ, khi truyền lại hay điều chỉnh tăng khả năng dư thừa (redundancy). MPTCP sử dụng TCP bên dưới (Subflow) cho khả năng tương thích mạng; TCP đảm bảo gửi tin cậy, theo thứ tự. TCP đánh số thứ tự riêng vào các phân đoạn, sử dụng cho việc phát hiện cũng như truyền lại các gói bị mất ở lớp Subflow. Bên nhận, Subflow chuyển tập hợp các phân đoạn cho thành phần lập lịch gói tin ở mức kết nối MPTCP; Ánh xạ tuần tự dữ liệu của thành phần lập lịch gói tin bên gửi cho phép sắp xếp toàn bộ dòng byte theo đúng như thứ tự bên gửi.
d. Kiểm soát tắc nghẽn [6]:
Chức năng này phối hợp kiểm soát tắc nghẽn trên mỗi subflow(TCP thông thường). Thuật toán điều khiển tắc nghẽn phải đảm bảo rằng một kết nối MPTCP không được chiếm nhiều băng thông một cách không công bằng hơn một luồng con TCP chiếm tại một nút cổ chai chia sẻ.Các chức năng này hoạt động phù hợp và liên quan chặt chẽ với nhau. Thể hiện như sau:
Quản lý tuyến sau khi phát hiện (hoặc khởi tạo) nhiều tuyến giữa hai host. Packet Scheduler sau đó nhận được một dòng dữ liệu từ các ứng dụng dành cho mạng, và thực hiện các hoạt động cần thiết trên dữ liệu nhận được này (ví dụ phân mảnh dữ liệu thành các phân mảnh ở cấp kết nối(MPTCP) và đánh số thứ tự cấp kết nối ) rồi gửi nó xuống lớp subflow. Subflow sau đó thêm số thứ tự riêng(cấp luồng con), khung báo nhận ACKs, và chuyển chúng vào mạng. Lớp subflow bên nhận sắp xếp lại dữ liệu(nếu cần thiết) và chuyển dữ liệu sau khi xử lý lên cho thành phần lập lịch gói tin, thành phần này sẽ sắp xếp dữ liệu lại một lần nữa nhưng ở cấp kết nối(MPTCP) và gửi dòng dữ liệu lên tầng ứng dụng xử lý. Cuối cùng thành phần kiểm soát tắc nghẽn tồn tại như một phần của thành phần lập lịch gói tin(tính toán, lập lịch các phân mảnh nên gửi với tốc độ nào, ở subflow nào...).
2.4. Hoạt động của MPTCP
Trong phần này sẽ trình bày và mô tả về các cơ chế hoạt động của MPTCP, như được miêu tả trong RFC 6824. Các hoạt động chính của giao thức MPTCP cho phép tạo, duy trì và kết thúc các kết nối có bao gồm các luồng con [7, 8].
31
2.4.1. Định dạng phân đoạn MPTCP
Hình 2. 8. Định dạng gói MPTCP
Trong MPTCP, một số khái niệm ở TCP thông thường đã thay đổi, sau đây là những thay đổi:
Số thự tự (Sequence Number): Trường “Sequence Number” trong phần mào đầu của gói tin TCP là để đánh số thự tự trong các luồng con. Để cho phép bên nhận có thể sắp xếp lại đúng thứ tự dữ liệu cho việc chuyển lên tầng ứng dụng, giao thức MPTCP sử dụng thêm một phần gọi là không gian thứ tự cấp dữ liệu. Trong trường này, bản tin khởi tạo SYN và bản tin kết thức DATA FIN chiếm 1 octet (8 bit) của không gian thứ tự. Do có hai không gian số thứ tự nên cần một ánh xạ chính xác giữa không gian chuỗi dữ liệu và không gian chuỗi luồng con (chính là Data Sequence Mapping), ánh xạ này được báo hiệu thông qua trường “TCP option” trong các gói tin TCP.
ACK:Trường ACK trong phần mào đầu TCP chỉ báo nhận ở mức subflow thông qua số thứ tự cấp luồng con, không báo nhận ở không gian thứ tự mức dữ liệu(mức kết nối MPTCP). Không nên cố gắng liên hệ việc báo nhận ở mức dữ liệu từ các khung báo nhận ACK mức luồng con thay vì dùng riêng một khung báo nhận tách biệt ở mức kết nối.
Duplicate ACK: Khung ACK dành cho MPTCP này phải được tách biệt độc lập với báo hiệu tắc nghẽn. Để loại bỏ trường hợp những đối tượng non-MPTCP không nhận biết được duplicate ACKS, MPTCP không nên gửi nhiều hơn hai duplicate ACKS chứa báo hiệu MPTCP trong một hàng.
32
là ở cấp luồng con, cửa sổ này dùng để điều chỉnh tốc độ gửi phù hợp với tốc độ xử lý của bên nhận. Trong MPTCP, mỗi luồng con phải báo cáo cùng một cửa sổ nhận toàn phần, được xác định trên mỗi kết nối ở bộ đệm bên nhận. Cửa sổ nhận ở phần mào đầu TCP cho cho biết không gian đệm còn trống cho kết nối mức dữ liệu (trái ngược với mức luồng con) ở bên nhận. Điều này cũng giống ở TCP thông thường, nhưng để duy trì điều này cửa sổ nhận phải được thể hiện ở bên gửi liên hệ với số thứ tự ở khung báo nhận DATA_ACK. Với cách này, vai trò kiểm soát luồng được bảo toàn. Chú ý rằng một số middleboxes có thể làm thay đổi cửa sổ nhận và vì thế một đầu cuối phải sử dụng giá trị cực đại trên mỗi luồng con cho cửa sổ nhận ở mức kết nối cũng như cần phải duy trì một cửa sổ mức luồng con cho việc xử lý mức luồng con
FIN(FINISH): Cờ đánh dấu kết thúc FIN trong mào đầu TCP sử dụng cho mỗi luồng con, không sử dụng ở mức kết nối. Để báo hiệu kết thúc ở mức kết nối, ta sử dụng option DATA_FIN.
RST(RESET): Cũng như cờ FIN, cờ RST cũng chỉ sử dụng ở mức luồng con. Không có RST ở mức kết nối, vì không thể phân biệt RST của hai kết nối. Ví dụ: nếu một máy không có trạng thái về một luồng con, nó sẽ không thể biết luồng con đó thuộc về kết nối nào trong số những kết nối nó đang thực hiện . Để reset một kết nối, ta reset đồng thời tất cả luồng con của kết nối đó.
Danh sách địa chỉ(Address List): Việc quản lý danh sách địa chỉ được thực hiện trên mỗi kết nối(trái ngược với trên mỗi luồng con, trên mỗi đầu cuối, hay trên mỗi host...). Điều này cho phép ứng dụng chính sách cục bộ trên mỗi kết nối. Thêm một địa chỉ vào một kết nối không liên quan đến các kết nối khác của cặp đầu cuối đó.
5 – tuple: bao gồm protocol, local address, local port, remote address, remote port được áp dụng cho tầng ứng dụng đối với ứng dụng không có khả năng nhận diện Multipath trên luồng con đầu tiên, ngay cả khi luồng con đó vừa bị đóng hay xóa khỏi kết nối. Đây là vấn đề liên quan đến Multipath API.
2.4.2. Các tùy chọn MPTCP
Để báo hiệu giữa các máy đầu cuối, MPTCP sử dụng trường tùy chọn TCP. Loại tùy chọn TCP dành riêng cho MPTCP là 30 và được chỉ định bởi Internet Assigned Numbers Authority (IANA). Việc sử dụng các kiểu phụ tùy chọn này là cần thiết để hỗ trợ chức năng đa đường cụ thể và chúng bao gồm một kiểu số duy nhất cho MPTCP, với “sub-types” 4 bit cho mỗi bản tin MPTCP.
33
Giá trị Bản tin Mô tả
0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 MP_CAPABLE MP_JOIN DATA_SEQUENCE_SI GNAL ADD_ADDR REMOVE_ADDR MP_PRIO MP_FAIL MP_FASTCLOSE Multipath Capable Join Connection
Data ACK and Data Sequence Mapping Add Address Remove Address Change SubflowPriority Fallback Fast Close 0x8-0xe 0xf Unassigned
Reserved for private use
Bảng 2.1. Các loại tùy chọn kiểu phụ (subtype) của MPTCP
2.4.3. Thiết lập kết nối
Phần sau đây sẽ mô tả cách một kết nối MPTCP được khởi tạo và chúng ta cũng sẽ xem cách các luồng con mới được thiết lập và thêm vào kết nối hiện có.
Để khởi tạo kết nối MPTCP, máy chủ hỗ trợ MPTCP sẽ mở kết nối TCP thông thường bằng cách gửi gói ACK với tùy chọn MP_CAPABLE. Trong trường hợp máy chủ khác cũng hỗ trợ MPTCP, phản hồi SYN/ACK cũng sẽ chứa tùy chọn MP_CAPABLE. Bắt tay ba bước sau đó được hoàn thành bởi gói ACK cuối cùng cũng chứa tùy chọn MP_CAPABLE.Bây giờ, cả hai máy đều biết rằng máy kia có khả năng thực hiện truyền đa đường và kết quả là có ý định kết nối như vậy trong. Trong trường hợp phản hồi SYN/ACK không chứa tùy chọn MP_CAPABLE, giả sử rằng trình mở thụ động không hỗ trợ MPTCP thì kết nối sẽ tiếp tục như một kết nối TCP đơn đường thông thường.
Trong quá trình bắt tay ba bước, hai máy cũng sẽ trao đổi khóa và đồng ý về một thuật toán mật mã được sử dụng cho kết nối. Hiện tại, thuật toán mật mã duy nhất được