2011-10-21 34 views

Trả lời

11

Mọi đoạn trừ phần cuối cùng phải chứa bội số của 8 byte dữ liệu.

Phân đoạn bù có thể chứa 8192 (2^13) đơn vị nhưng gói dữ liệu không thể có 8192 * 8 = 65536 byte dữ liệu vì trường "Tổng chiều dài" của tiêu đề IP ghi tổng kích thước bao gồm tiêu đề và dữ liệu.

Tiêu đề IP dài ít nhất 20 byte, vì vậy giá trị tối đa cho "Bù đắp phân đoạn" bị giới hạn ở 8189, để lại khoảng trống cho 3 byte trong đoạn cuối cùng.

Hy vọng điều này sẽ hữu ích.

+2

cảm ơn câu trả lời @Wayne Shears, như bạn đã nói: Fragment Offset có thể chứa 8192 (2^13) đơn vị [** có nghĩa là các đơn vị? bạn có nghĩa là byte? **] nhưng datagram không thể có 8192 * 8 = 65536 byte dữ liệu [** tại sao? **] vì trường "Tổng chiều dài" của tiêu đề IP ghi tổng kích thước bao gồm tiêu đề và dữ liệu [** tất cả tôi biết là tổng kích thước tiêu đề = lengthle + tải trọng. và tổng số legth là kích thước 16, do đó, giá trị sẽ đi lên đến 2^16 là 65536, tôi đã nghĩ rằng một cái gì đó sai? **]. – user991482

2

Lưu ý rằng trường Fragment Offset được thể hiện bằng đơn vị 8 byte, không phải theo byte. Đây là lý do tại sao kích thước tải trọng bên trong mỗi đoạn, ngoại trừ đoạn cuối cùng, phải là bội số của 8 byte.

Khi bù đắp Fragment được mã hóa trên 13bits, kết quả là phạm vi của nó là từ 0 đến 8191 đơn vị 8 byte. Tuy nhiên, do Tổng chiều dài cũng tính đến tiêu đề IP, giới hạn tối đa của bộ phận bù đắp thực tế là 8189 đơn vị, không phải 8191 đơn vị, xem bên dưới:

Tổng chiều dài được mã hóa trên 16 bit, nghĩa là giới hạn ở 65535 byte. Sau đó, khi tiêu đề IP tối thiểu là 20 byte, kết quả là Tải trọng được giới hạn ở tối đa 65535 byte - 20 byte = 65515 byte. Chia các 65515 byte này thành các đơn vị 8 byte, kết quả là có thể có tối đa 8189 đơn vị, do đó bù đắp phân mảnh được giới hạn tối đa 8189 đơn vị.

Một mảnh IP có Fragment offset giá trị thiết lập để giá trị lớn nhất này của 8189, có thể có một tải trọng tối đa là 3 byte:

tối đa 65535 byte - tối thiểu 20 byte - (8189 đơn vị * 8 byte cho mỗi đơn vị) = tối đa 3 byte

Rurre

0

gì Wayne nói cộng với thực tế là bù đắp thực sự được sử dụng trong host cuối để họ có thể lưu trữ một cách hiệu quả các mảnh vỡ trong bộ nhớ một cách hiệu quả, có nghĩa là, trong một hàng. Offset cho thấy vị trí tương đối của một mảnh đối với toàn bộ gói dữ liệu. Đó là lý do tại sao bù đắp phải là các đoạn IP phải là bội số của 8 byte bởi vì những gì bạn thực sự làm là một sự thay đổi đúng 3 bit (do đó 13 bit).

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