CHƯƠNG 4. GIẢI PHÁP THỰC HIỆN IPv6 TRÊN NỀN IPv4
4.3.4. Lựa chọn giá trị MTU và phân mảnh
Giá trị giới hạn kích thước gói tin trong tầng Datalink của giao thức TCP/IPv6 gọi là MTU (Maximum Transfer Unit). Đối với mỗi giao thức trên tầng Datalink khác nhau có một giá trị MTU khác nhau. Ví dụ giá trị MTU của Ethernet là 1518 octet. Do có nhiều phương thức khác nhau đối với các
luồng traffic trong mạng Internet nên sẽ xảy ra hiện tượng các giá trị MTU tại các điểm gateway nhỏ hơn giá trị MTU của các
mạng trong. Do vậy sẽ xảy ra hiện tượng phân mảnh tại các điểm gateway.
Sau đó sẽ xảy ra hiện tượng tái hợp ở các điểm đích. Hình 4.6 minh họa cơ chế này.
Đối với giao thức IPv4 giá trị MTU chỉ là 576 bytes, giá trị này có thể nhỏ hơn giá trị của một gói tin IPv6. Như vậy ở các node entry-point khi thực hiện đóng gói các gói tin IPv6 sẽ phải kiểm tra gói tin IPv6 mà nó đóng gói có vượt qua giá trị MTU cho phép hay không. Nếu vượt quá thì phải thực hiện phân mảnh gói tin IPv6. Việc phân mảnh này dẫn đến các hiện tượng sau:
• Ở phía nhận sẽ nhận được rất nhiều các mảnh nhỏ được tách ra từ gói lớn.
Nó sẽ phải mất nhiều thời gian và bộ nhớ để tái hợp các gói tin phân mảnh trước khi mở gói.
• Trong trường hợp một gói tin phân mảnh bị mất, các gói tin còn lại sẽ chiếm mất không gian bộ đệm cho đến khi vượt quá giá trị TTL mới bị huỷ. Toàn bộ IPv6 lúc này bị mất và phải truyền lại. Tóm lại, việc tách gói sẽ chỉ là có hại cho tunnel giữa các máy chủ.
Như vậy việc thực hiện phân mảnh gói tin là không hiệu quả. Để xác định giá trị MTU hợp lý người ta đã xây dựng giao thức MTU Discovery Protocol.
Có thể mô tả tóm tắt thuật toán chọn lựa giá trị MTU này như sau:
Hình 4.6. Phân mảnh và tái hợp gói tin.
• Nếu gói tin IPv6 cần đóng gói có kích thước lớn hơn 576 bytes thì ở node entry-point trả về một thông báo ICMPtheo chuẩn IPv6 và node nguồn của gói tin IPv6 đó. Thông báo ICMP có nội dung cảnh báo là kích cỡ gói tin lớn hơn mức cho phép (packet too big). Giá trị MTU hợp lệ là 576 bytes và ở điểm entry tunnel sẽ huỷ gói tin yêu cầu tunneling.
• Nếu gói tin IPv6 cần đóng gói có kích cỡ nhỏ hơn 576 bytes sẽ thực hiện đóng gói và giá trị của trường flag fragmention trong phần header IPv4 được thiết lập bằng không (không phân mảnh).
Để giảm được việc phải phân nhỏ gói tới mức nhỏ nhất, router ở hai đầu tunnel thực hiện tìm kiếm giá trị MTU được coi là hợp lý nhất. Chúng sẽ bắt đầu từ MTU của tunnel tới MTU của giao diện cục bộ của chúng. Nếu như các message ICMP trở lại để chỉ rằng gói là quá lớn, chúng sẽ chuyển tới một MTU thấp hơn. Trong vài trường hợp chúng có thể gửi một message thử để khám phá khả năng tăng trong MTU. Khi MTU của tunnel vẫn còn lớn hơn kích thước gói nhỏ nhất mà IPv6 hỗ trợ (5760 octet) thì việc phân nhỏ gói IPv4 sẽ được tắt đi trong IPv4 header. Nếu như gói IPv6 lớn hơn MTU của tunnel có trong giao diện thì nó sẽ bị loại bỏ và message ICMP “IPv6 packet too big” sẽ được gửi lại cho khách hàng.
Nhưng kích thước nhỏ nhất của gói IPv4 chỉ là 48 octet chứ không phải là 576. MTU của tunnel có thể ít khi nhỏ hơn 576 octet, điều mà buộc các router IPv6 sử dụng việc phân nhỏ gói IPv4.
Nếu MTU của tunnel IPv4 nhỏ hơn 576 octet. Các gói IPv6 lớn hơn 576 octet sẽ bị loại bỏ và message “packet too big” sẽ được gửi trở lại cho người gửi IPv6. Gói này sẽ chỉ ra một MTU IPv6 cực đại của 576 octet.
Nếu một gói IPv6 lớn hơn MTU của tunnel nhưng lại nhỏ hơn 576 thì việc phân nhỏ gói sẽ không thể được dùng.
Hình 4.7 minh họa giao thức MTU discovery được hỗ trợ trong IPv6.