IPv4 datagram fragmentation - Phân mảnh gói tin IPv4

0 0 0

Người đăng: Viblo Fundamentals

Theo Viblo Asia

I. Phân mảnh gói tin là gì?

1. Maximum Transmission Unit (MTU)

Maximum Transmission Unit có nghĩa là đơn vị truyền tối đa, chỉ kích thước tối đa một môi trường mạng có thể truyền. Chúng ta có thể hình dung mỗi môi trường mạng là một đường ống với các kích thước lớn nhỏ khác nhau (ví dụ môi trường mạng LAN là một đường ống lớn, còn môi trường PPP (Point-to-Point Protocol) là một đường ống nhỏ hơn, ...). Tưởng tượng gói tin là một vật thể được truyền qua những đường ống này, khi sử dụng mạng LAN chúng ta không gặp vấn đề tắc nghẽn, nhưng nếu là mạng PPP, vật thể truyền lớn hơn kích thước đường ống dẫn nên gặp khó khăn trong quá trình vận chuyển.

2. Hướng giải quyết - Phân mảnh gói tin

Hai hướng giải quyết vấn đề trên có thể dễ dàng đưa ra:

  • Tăng kích thước đường ống
  • Giảm kích thước vật thể truyền

Hướng một sẽ dẫn tới một lượng lớn chi phí do đường ống được coi là thứ cố định và cần sử dụng lâu dài, nên chúng ta sẽ ưu tiên hướng hai - giảm kích thước vật thể truyền - bằng cách chia nhỏ vật thể cho phù hợp với kích thước đường ống, hay còn gọi với khái niệm "phân mảnh gói tin": Các gói tin được chia thành từng phần nhỏ được gọi là mảnh.

Xem xét trong môi trường mạng máy tính, hướng xử lý trên thực sự hiệu quả, do dữ liệu từ nguồn thường được gửi qua nhiều loại mạng khác nhau, mỗi loại yêu cầu MTU riêng. Khi không có quá trình phân mảnh, các gói tin lớn hơn MTU của mạng sẽ bị loại bỏ, dẫn đến mất mát dữ liệu, giảm hiệu suất truyền thông. Phân mảnh giúp đảm bảo rằng dữ liệu có thể được truyền qua các mạng với các giới hạn khác nhau về kích thước gói, bằng cách chia chúng thành các phần nhỏ phù hợp hơn.

II. Phân mảnh gói tin được thực hiện như thế nào?

1. Nhắc lại Identification, Flags và Fragment Offset

Các bạn còn nhớ ba trường Identification, Flags và Fragment Offset trong IPv4 datagram header chứ? Trong bài viết trước chúng ta đã nhắc đến ba trường này giúp xử lý việc phân mảnh datagram:

  • Trường Identification: Một giá trị duy nhất xác định tất cả các mảnh từ cùng một datagram ban đầu. Chúng ta cần trường này để quá trình hợp mảnh sử dụng đến để tìm lại đầy đủ các mảnh đã phân.
  • Trường Flags: Chứa các bit cờ điều khiển quá trình phân mảnh, trong đó có một bit chỉ ra có phải là mảnh cuối cùng hay không.
  • Trường Fragment Offset: Xác định vị trí của mảnh dữ liệu trong datagram gốc, cho phép tái tổ hợp chính xác ở điểm đến.

2. Quá trình thực hiện

Khi một gói tin cần được gửi qua mạng, thiết bị định tuyến (router) sẽ xác định MTU của mạng tiếp theo trên đường đi. Trong trường hợp kích thước của gói tin lớn hơn giá trị MTU này, gói tin được xác nhận sẽ thực hiện phân mảnh (bit DF trong trường Flags được đặt là 00).

Để phân mảnh gói tin, router sẽ chia dữ liệu trong gói tin thành các phần nhỏ, mỗi phần có kích thước sao cho khi thêm header IPv4 thì tổng kích thước không vượt quá giá trị MTU. Mỗi mảnh sẽ được gói gọn trong một datagram IPv4 mới với header riêng biệt.

Quá trình phân mảnh có thể được mô tả qua các bước sau:

  • Phần data của gói tin được chia lần lượt thành nhiều mảnh khác nhau, cho tới khi hết (mảnh cuối có thể có kích thước nhỏ hơn).
  • Gán header cho mỗi mảnh mới: Từ khuôn mẫu là header của gói tin ban đầu, gán header cho mỗi mảnh mới.
  • Thiết lập header cho mỗi mảnh mới: Đặt lại giá trị các trường Identification, Flags, Fragment Offset cho mỗi header trong từng mảnh mới.

Ví dụ: giả sử bạn có một gói tin dữ liệu với kích thước là 40204020 bytes (phần header chiếm 2020 bytes) và bạn cần gửi nó qua một mạng có MTU là 15001500 bytes.

Bỏ đi kích thước header thì sau khi phân mảnh mỗi mảnh có kích thước phần data tối đa là 150020=14801500-20=1480 bytes. Dễ thấy chúng ta cần phân gói tin gốc thành 33 mảnh (vì 2×1480<4000<3×14802\times 1480 < 4000 < 3\times 1480).

Mảnh thứ nhất:

  • Có kích thước 15001500 bytes, trong đó phần header 2020 bytes, phần data 14801480 bytes.
  • Trường Identification có giá trị xx (giống với giá trị Identification trong header gói tin gốc).
  • Bit MF (fragflag) trong trường Flags có giá trị 11, cho biết đây không phải mảnh cuối cùng.
  • Trường Fragment Offset có giá trị 00, chỉ data mảnh này bắt đầu từ vị trí đầu tiên.

Mảnh thứ hai:

  • Có kích thước 15001500 bytes, trong đó phần header 2020 bytes, phần data 14801480 bytes.
  • Trường Identification có giá trị xx (giống với giá trị Identification trong header gói tin gốc).
  • Bit MF (fragflag) trong trường Flags có giá trị 11, cho biết đây không phải mảnh cuối cùng.
  • Trường Fragment Offset có giá trị 0+1480:8=1850+1480:8=185, chỉ vị trí data mảnh này bắt đầu từ 185185.

Mảnh thứ ba:

  • Có kích thước 40001480×2+20=1040+20=10604000-1480\times 2 + 20= 1040+20=1060 bytes, trong đó phần header 2020 bytes, phần data 10401040 bytes.
  • Trường Identification có giá trị xx (giống với giá trị Identification trong header gói tin gốc).
  • Bit MF (fragflag) trong trường Flags có giá trị 00, cho biết đây là mảnh cuối cùng.
  • Trường Fragment Offset có giá trị 0+1480:8+1480:8=3700+1480:8+1480:8=370, chỉ vị trí data mảnh này bắt đầu từ 370370.

III. Phân mảnh gói tin dẫn đến độ trễ

Quá trình phân mảnh gói tin có thể dẫn đến độ trễ (delay) cũng như một số vấn đề khác, chúng ta xem xét một vài khía cạnh:

  • Tăng độ trễ do xử lý bổ Sung: Khi một gói tin được phân mảnh, mỗi mảnh phải được xử lý riêng biệt bởi các thiết bị mạng như bộ định tuyến và switch. Quá trình xử lý này bao gồm việc kiểm tra và cập nhật header của mỗi mảnh, cũng như xác định đường đi phù hợp cho chúng. Thời gian xử lý tăng cho mỗi mảnh gây ra độ trễ tổng thể cao hơn cho gói tin gốc khi đi qua mạng.
  • Tái tổ hợp tại điểm đích: Khi tất cả các mảnh của gói tin đến được điểm đích, chúng cần phải được tái tổ hợp lại thành gói tin gốc trước khi dữ liệu được xử lý. Quá trình tái tổ hợp này yêu cầu thời gian và tài nguyên tính toán, làm tăng thêm độ trễ. Nếu một trong các mảnh bị mất hoặc trễ, quá trình tái tổ hợp sẽ trở nên phức tạp và kéo dài thời gian hơn nữa.
  • Khả năng mất mảnh và cần gửi lại: Mỗi mảnh của gói tin được gửi đi độc lập trong mạng và có thể đi qua các đường đi khác nhau. Điều này làm tăng khả năng một hoặc nhiều mảnh bị mất trên đường, đặc biệt là trong các môi trường mạng không ổn định hoặc dễ tắc nghẽn. Khi một mảnh bị mất, toàn bộ gói tin gốc có thể cần phải được gửi lại từ nguồn, gây ra sự chậm trễ đáng kể.
  • Tăng tải trên mạng và sự tắc nghẽn: Phân mảnh tăng số lượng gói tin trên mạng do mỗi gói tin gốc được chia thành nhiều mảnh. Sự gia tăng này có thể dẫn đến tắc nghẽn mạng, đặc biệt là trên các liên kết có băng thông hạn chế. Tắc nghẽn không chỉ làm tăng độ trễ cho các gói tin bị phân mảnh mà còn ảnh hưởng đến hiệu suất của toàn bộ mạng, làm chậm tốc độ truyền dữ liệu cho tất cả các người dùng.
  • Tăng khả năng xảy ra lỗi: Quá trình phân mảnh và tái tổ hợp có thể coi là phức tạp dẫn đến tăng khả năng xảy ra lỗi. Ví dụ, nếu có sự không nhất quán trong việc xử lý các mảnh tại các điểm khác nhau trong mạng, hoặc nếu có lỗi xảy ra trong quá trình tái tổ hợp, sẽ dẫn đến hư hỏng dữ liệu hoặc thất bại trong việc truyền gói tin.

Tài liệu tham khảo

Bình luận

Bài viết tương tự

- vừa được xem lúc

VxLAN - Công nghệ ảo hóa DC

Trong bài viết trước về CDN Tản mạn CDN và một số công nghệ xoay quanh CDN, tôi có đề cập đến VxLAN và mô hình Leaf-Spine. Nào bắt đầu nhé.

0 0 60

- vừa được xem lúc

Tản mạn CDN và một số công nghệ xoay quanh CDN

Như cái tiêu đề, tôi lưu lại một số thứ hay ho về CDN để sau mà quên thì còn có cái mà đọc. Sờ lại một chút về khái niệm CDN cho đỡ bỡ ngỡ... Mục đích CDN. Do vậy, CDN phục vụ một số mục đích chính sau:. . Cải thiện thời gian tải trang web --> Đây là mục đích lớn nhất của CDN.

0 0 63

- vừa được xem lúc

Hướng dẫn cấu hình PC thành public server

Chào mọi người,. Mình đã từng gặp trường hợp phía FE không thể access vào server công ty (vì authen, policy ,.

0 0 1.5k

- vừa được xem lúc

Phân biệt Router, Switch và Hub (Mạng máy tính)

Mục tiêu. Dạo qua một vòng trên Google và qua những câu hỏi mình hay bị mọi người xung quanh "vấn đáp nhanh", ngày hôm nay mình muốn viết blog này để có thể phần nào làm rõ một chút cho các bạn về 3 t

0 0 72

- vừa được xem lúc

Bạn có muốn trở thành Admin của một Server game không?

Mở đầu. .

0 0 71

- vừa được xem lúc

Hướng dẫn NAT port server ra Internet

Hướng dẫn NAT port để có thể sử dụng các dịch vụ trên server từ xa. Internet <---------------> Router <----------------> Server.

0 0 60