17

Attualmente sto esaminando le diapositive di rete e mi chiedevo se qualcuno potesse aiutarmi con il concetto di frammentazione e riassemblaggio.Frammentazione e riassemblaggio IP

enter image description here

capisco come funziona, vale a dire come datagrammi vengono suddivisi in blocchi più piccoli perché i collegamenti di rete hanno un MTU. Comunque l'esempio nella foto mi confonde.

Quindi le prime due sezioni mostrano una lunghezza di 1500, perché questa è la MSU, ma questo non dovrebbe significare che l'ultima dovrebbe avere 1000 (per un totale di 4000 byte) e non 1040? Da dove vengono questi 40 byte extra? La mia ipotesi è che, poiché i due precedenti frammenti avevano entrambi un'intestazione di 20 byte, questi 40 byte extra di dati necessari per andare da qualche parte, quindi arriverà nell'ultimo frammento?

Fragflag significa essenzialmente che c'è un altro frammento, quindi tutti avranno un Fragflag di 1 tranne l'ultimo frammento che sarà a zero. Tuttavia, non capisco quale sia l'offset o come viene calcolato. Perché il primo offset è zero? Perché abbiamo diviso i byte nel campo dati (1480) per 8 per ottenere il secondo offset? Da dove viene questo 8? A parte questo, presumo che ogni offset di frammenti aumenterà solo di questo valore?

Ad esempio, il primo frammento avrà un offset di 0, il secondo 185, il terzo 370 e il quarto 555? (370 + 185)

Grazie per qualsiasi aiuto!

risposta

14

C'è un'intestazione di 20 byte in ogni pacchetto. Quindi il pacchetto originale contiene 3.980 byte di dati. I frammenti contengono 1480, 1480 e 1020 byte di dati. 1480 + 1480 + 1020 = 3980

Ogni bit nell'intestazione è prezioso. Dividere l'offset di 8 consente di adattarsi a 13 bit anziché a 16. Ciò significa che ogni pacchetto, ma l'ultimo deve contenere un numero di byte di dati che è un multiplo di 8, che non è un problema.

+1

Grazie! Questo ha risposto chiaramente alla prima parte della mia domanda, ma per quanto riguarda la seconda parte, perché dividiamo 1480 per 8 per ottenere l'offset? – JimmyK

+0

aggiornerò la risposta. –

+0

Grazie mille, questo risponde a tutto! Mi sto solo chiedendo, dividiamo SEMPRE per 8? Ci sono circostanze che ci causerebbero di dividerci per un numero diverso? – JimmyK

0

la dimensione dell'offset è di 13 bit nell'intestazione IP, ma nel caso peggiore abbiamo bisogno di 16 bit. Quindi usiamo un fattore di scala di 8 cioè (2^16/2^13).

14

La frammentazione e il riassemblaggio sono stati illustrati esclusivamente nell'RFC 791. Passare attraverso lo Internet Protocol Specification RFC. La RFC ha varie sezioni che spiegano la frammentazione e il riassemblaggio del campione. Tutti i tuoi dubbi e domande sono ben soddisfatti.

Ans 1: Per quanto riguarda le lunghezze del pacchetto: Il pacchetto originale contiene 4000 byte. Questo pacchetto è un pacchetto IP completo e quindi contiene anche l'intestazione IP. Quindi la lunghezza del carico utile è in realtà 4000 - (Lunghezza intestazione IP i, e. 20).

effettiva Payload Lunghezza = 4000 - 20 = 3980

Ora il pacchetto è frammentato dovuto al fatto che la lunghezza è maggiore della MTU (1500 byte).

Così il 1 ° pacchetto contiene 1500 byte che include intestazione IP + frazione di carico utile.

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

Analogamente per l'altro pacchetto.

Il terzo pacchetto contengono rimanendo rimasto dati (3980 - 1480 -1480) = 1020

Così lunghezza del pacchetto è 20 (IP Header) + 1020 (payload) = 1040

Ans 2 : L'offset è l'indirizzo o il localizzatore da cui i dati iniziano con riferimento al carico utile di dati originale. Per IP il carico utile di dati comprende tutti i dati dopo l'intestazione IP e l'intestazione Opzioni. In questo modo il sistema/router prende il carico utile e lo divide in parti più piccole e mantiene la traccia dell'offset con riferimento al pacchetto originale, in modo da poter eseguire il riassemblaggio.

Come indicato nel RFC pagina 12.

"offset campo Il frammento comunica al ricevitore la posizione di un frammento nel datagramma originale. Il frammento Offset e lunghezza determinano la porzione del datagramma originale comprese il frammento di più-frammenti indica (ripristinando) l'ultimo frammento Questi campi forniscono informazioni sufficienti per riassemblare i datagrammi "

Lo scostamento del frammento viene misurato in Unità di 8 byte ciascuno. Ha un campo a 13 bit nell'intestazione IP. Come detto nella pagina RFC 17

"Questo campo indica dove nel datagramma questo frammento belongs.The frammento offset è misurata in unità di 8 ottetti (64 bit). Il primo frammento ha compensato zero."

Così come è stato chiesto nella domanda da dove è venuto questo 8, è lo standard che è stato definito per la specifica del protocollo IP, dove 8 ottetti sono presi come un valore. Questo ci aiuta anche a trasmettere pacchetti di grandi dimensioni tramite questo.

Pagina 28 delle scritture RFC: * I frammenti vengono contati in unità di 8 ottetti. La strategia di frammentazione è progettata in modo che un datagramma non frammentato abbia tutte le informazioni di frammentazione zero (MF = 0, framment offset = 0). Se un datagramma Internet è frammentato, la sua porzione di dati deve essere interrotta su 8 ottetti. Questo formato consente 2 ** 13 = 8192 frammenti di 8 ottetti ciascuno per un totale di 01.di 65.536 ottetti. Si noti che ciò è coerente con la la datagramma lunghezza totale del campo (ovviamente, l'intestazione è contato nella lunghezza totale e non nei frammenti). *

0

quelli non sono bit extra ma la lunghezza totale di ultimo frammento . dato che 1500 è MTU, ciò significa che possono esserci 1500 byte di dati in un frammento, inclusa l'intestazione. L'intestazione viene aggiunta ad ogni frammento. questo significa che in frammenti siamo in grado di inviare 1500-20 = 1480 byte di dati. è dato che c'è un datagramma 4000B. Il datagramma non è altro che un incapsulamento di pacchetti di dati a livello di rete. Quindi i dati totali che dobbiamo inviare sono 4000-20 = 3980. quindi è frammentato in 3 parti (ceil (3980/1480)) ciascuna di lunghezza 1480,1480,1020 rispettivamente. quindi quando l'intestazione 20B viene aggiunta all'ultimo frammento, la sua lunghezza diventa 1020 + 20 = 1040.

Problemi correlati