17

Tôi hiện đang xem qua các trang trình bày mạng của mình và đã tự hỏi liệu có ai đó có thể giúp tôi với khái niệm phân mảnh và lắp ráp lại hay không.Phân mảnh và ghép nối IP

enter image description here

Tôi hiểu cách thức hoạt động, cụ thể là như thế nào datagrams được chia thành những phần nhỏ hơn bởi vì các liên kết mạng có MTU. Tuy nhiên, ví dụ trong hình ảnh làm tôi bối rối. Vì vậy, hai phần đầu tiên cho thấy một chiều dài 1500, bởi vì đây là MSU, nhưng không nên điều này có nghĩa là người cuối cùng nên có 1000 (cho tổng số 4000 byte) và không phải là 1040? Trường hợp đã làm thêm 40 byte đến từ đâu? Tôi đoán là bởi vì hai mảnh trước đó đều có tiêu đề 20 byte, thêm 40 byte dữ liệu cần thiết để đi đâu đó, vì vậy nó sẽ đến đoạn cuối cùng?

Fragflag về cơ bản có nghĩa là có một đoạn khác, vì vậy tất cả chúng sẽ có Fragflag 1 trừ đoạn cuối cùng sẽ bằng 0. Tuy nhiên tôi không hiểu bù đắp là gì hoặc nó được tính như thế nào. Tại sao bù đắp đầu tiên ở số không? Tại sao chúng ta phân chia các byte trong datafield (1480) bởi 8 để có được bù thứ hai? 8 cái này đến từ đâu? Bên cạnh đó, tôi giả định rằng mỗi mảnh bù đắp sẽ chỉ tăng theo giá trị này?

Ví dụ: đoạn đầu tiên sẽ có độ lệch là 0, 185 thứ hai, 370 thứ ba và 555 thứ tư? (370 + 185)

Cảm ơn sự giúp đỡ của bạn!

Trả lời

14

Có tiêu đề 20 byte trong mỗi gói. Vì vậy, gói ban đầu chứa 3.980 byte dữ liệu. Các mảnh chứa 1480, 1480 và 1020 byte dữ liệu. 1480 + 1480 + 1020 = 3980

Mọi bit trong tiêu đề đều quý giá. Phân chia bù đắp bằng 8 cho phép nó phù hợp với 13 bit thay vì 16. Điều này có nghĩa là mỗi gói nhưng cuối cùng phải chứa một số byte dữ liệu là bội số của 8, mà không phải là một vấn đề.

+1

Cảm ơn! Điều đó đã trả lời phần đầu tiên của câu hỏi của tôi một cách rõ ràng, nhưng đối với phần thứ hai, tại sao chúng ta chia 1480 cho 8 để có được bù đắp? – JimmyK

+0

Tôi sẽ cập nhật câu trả lời. –

+0

Cảm ơn rất nhiều, câu trả lời mọi thứ! Tôi chỉ tự hỏi, liệu chúng ta luôn chia cho 8? Có hoàn cảnh nào khiến chúng tôi chia cho một con số khác không? – JimmyK

0

kích thước bù đắp là 13 bit trong tiêu đề IP nhưng chúng tôi cần 16 bit như trong trường hợp xấu nhất. Vì vậy, chúng tôi sử dụng hệ số chia tỷ lệ là 8 (tức là 2^16/2^13).

14

Phân mảnh và lắp ráp lại đã được giải thích riêng trong RFC 791. Đi qua Internet Protocol Specification RFC. RFC có các phần khác nhau giải thích sự phân mảnh và khôi phục mẫu. Tất cả những nghi ngờ và câu hỏi của bạn đều được phục vụ tốt trong đó.

Trả lời 1: Về độ dài của gói: Gói gốc chứa 4000 byte. Gói này là một gói IP đầy đủ và do đó chứa tiêu đề IP. Do đó, độ dài tải trọng thực sự là 4000 - (Độ dài tiêu đề IP i. E. 20).

thực tế Payload Length = 4000 - 20 = 3980

Bây giờ các gói tin được phân mảnh do thực tế là độ dài lớn hơn MTU (1500 Bytes).

Do đó gói thứ nhất chứa 1500 byte bao gồm tiêu đề IP + Phân số tải trọng.

1500 = 20 (IP header) + 1480 (Data Payload)

Tương tự cho các gói dữ liệu khác.

Các gói thứ ba sẽ chứa còn lại còn sót lại dữ liệu (3980 - 1480 -1480) = 1020

Như vậy chiều dài của gói tin là 20 (IP Header) + 1020 (payload) = 1040

Ans 2 : Giá trị bù trừ là địa chỉ hoặc bộ định vị từ nơi dữ liệu bắt đầu với tham chiếu đến tải trọng dữ liệu gốc. Đối với IP, tải trọng dữ liệu bao gồm tất cả dữ liệu sau tiêu đề IP và tiêu đề Tùy chọn. Do đó hệ thống/bộ định tuyến lấy tải trọng và phân chia nó thành các phần nhỏ hơn và giữ theo dõi bù đắp với tham chiếu đến gói ban đầu để có thể thực hiện lắp ráp lại.

Như được đưa ra trong RFC trang 12.

"lĩnh vực Đoạn bù đắp cho người nhận vị trí của một đoạn trong datagram gốc. Các đoạn bù đắp và thời gian xác định phần của datagram gốc bao phủ bởi Các mảnh nhiều mảnh hơn chỉ ra (bằng cách thiết lập lại) đoạn cuối cùng. Các trường này cung cấp đầy đủ thông tin để lắp ráp lại các gói dữ liệu "

. Nó có trường 13 bit trong tiêu đề IP. Như đã nói trong trang RFC 17

"Trường này chỉ ra nơi trong datagram đoạn này belongs.The đoạn bù đắp được đo bằng đơn vị 8 octet (64 bit). Đoạn đầu tiên đã bù đắp bằng không."

Vì vậy, khi bạn hỏi trong câu hỏi 8 từ này đến đâu, các tiêu chuẩn của nó được định nghĩa cho đặc tả giao thức IP, trong đó 8 octet được lấy làm một giá trị. Điều này cũng giúp chúng tôi truyền tải các gói lớn thông qua việc này.

Trang 28 của RFC viết: * Các mảnh được tính theo đơn vị 8 octet. Chiến lược phân mảnh được thiết kế sao cho một gói dữ liệu không phân mảnh có tất cả thông tin phân mảnh bằng không (MF = 0, bù đắp mảnh = 0). Nếu một gói dữ liệu internet bị phân mảnh, phần dữ liệu của nó phải là bị hỏng trên 8 octet. Định dạng này cho phép 2 ** 13 = 8192 phân đoạn 8 octet cho mỗi tổng số là 65.536 octet với tổng số là 65.536 octet. Lưu ý rằng điều này phù hợp với trường tổng chiều dài datagram (tất nhiên, tiêu đề được tính trong tổng chiều dài và không nằm trong các đoạn). *

0

chúng không phải là bit phụ mà tổng chiều dài đoạn cuối cùng . là 1500 là MTU có nghĩa là có thể có 1500 byte dữ liệu trong một đoạn bao gồm tiêu đề. Tiêu đề được nối với mọi đoạn. điều này có nghĩa là trong đoạn chúng ta có khả năng gửi 1500-20 = 1480 byte dữ liệu. nó được cho là có 4000B datagram .datagram là gì, nhưng một gói dữ liệu đóng gói dữ liệu ở lớp mạng. Tổng số dữ liệu chúng tôi phải gửi là 4000-20 = 3980. sau đó nó được chia thành 3 phần (ceil (3980/1480)) mỗi chiều dài tương ứng là 1480,1480,1020. do đó khi tiêu đề 20B được nối vào đoạn cuối cùng, chiều dài của nó sẽ là 1020 + 20 = 1040.

Các vấn đề liên quan