Datagramet IP

Ne do të shohim në se jo të gjitha protokollet link-layer mund të bartin network-layer pako të së njëjtes madhësi. Disa protokolle të mund të bartin datagrame të mëdha, ndërsa të tjera protokolle të mund të bartin vetëm pako të vogla. Për shembull, kornizat Ethernet mund të bartin deri në 1,500 byte të të dhënave, ndërsa kornizat për lidhjet e disa zonave të gjera nuk mund të bartin më shumë se 576 byte. Shuma maksimale e të dhënave që një kornizë link-layer mund të bartë quhet njësi maksimale transmetimit (MTU). Sepse çdo IP Datagram është "encapsulated" brenda kornizës link-layer për transport nga një ruter te ruteri tjetër, MTU e protokollit link-layer vendos një limit të rreptë në gjatësinë e IP Datagramit. 

Duke pasur një limit të rreptë në madhësinë e IP Datagramit nuk është shumë problem. Çfarë është problem është se secila nga lidhjet përgjatë rrugës në mes të dërguesit dhe destinacionit mund të përdor protokolle të ndryshme link-layer , dhe secili prej këtyre protokolleve mund të ketë MTU të ndryshme.
Për të kuptuar më mirë çështjen e dërgimit, imagjinoni se ju jeni një ruter që ndërlidh disa lidhje, secili link-layer protokoll i ndryshëm është ne funksion me MTU të ndryshme. Supozoni se ju merrni një IP Datagram nga një lidhje. Ju kontrolloni tabelën tuaj të dërgimit për të përcaktuar lidhjen që po largohet(outgoing link), dhe kjo lidhje që po largohet(outgoing link) ka një MTU që është më i vogël se gjatësia e IP Datagram-it. 

Koha për panik-si do ta shtrydhësh këtë IP Datagram të tepërt në fushën "payload" të kornizës  link-layer?
Zgjidhja është që të copëtojmë të dhënat në IP Datagram në dy ose më shumë  IP Datagrame të vogla, "encapsulate" secilën nga këto IP Datagrame të vogla në një kornizë të ndarë link-layer , dhe të dërgoj këto korniza mbi linkun që po largohet(outgoing link). Secila nga këto datagrame të vogla është referuar si një fragment.

Fragmentet duhet të jenë të rimbledhura para se të arrijnë te shtresa e transportit(transport layer) në destinacion. Në të vërtetë, të dyja TCP dhe UDP janë duke pritur për ta marrë komplet,segmentet e pa coptuara nga shtresa e rrjetit(network layer). Dizajnerët e IPv4 mendonin se rimbledhja e datagrameve në rutera do të paraqiste nje komplikim domethënës në protokoll dhe vënë në brengosje në punën e ruterit. (Po të ishit një ruter, do të donit të ishit duke rimbledhur fragmente para qdo gjëje tejtër qe ju kishit për të bërë?)

Duke u kapur në parimin e mbajtjes së rrjetit kryesor të thjeshtë, dizajnerët e IPv4 vendosen për të vënë punën e rimbledhjes Datagrameve në sistemet e fundit(end systems) më tepër se sa në ruterat e rrjetit.

Kur një host destinacion merr një seri të datagrameve nga i njëjti burim, ai duhet të përcaktojë nëse ndonjë nga këto datagrame janë fragmente origjinale,të ndonjë Datagrami të madh. Nëse disa datagrame janë fragmente, ai duhet të përcaktojë më tej kur ka marrë fragmentin e fundit dhe si fragmentet që ka marrë duhet të bashkohen për të formuar Datagramin origjinal.

Qe ti lejojnë host destinacionin për të kryer detyrat e rimbledhjes, dizajnerët i IP (versioni 4) vendosën identifikimin, flamurin(flag), dhe fushat fragmentimit të mënjanuar në titullin e IP Datagramit. Kur një Datagram është krijuar, hosti dërgues vulos Datagramin me një numër të identifikimit, burim dhe adresë të destinimit. Në mënyrë tipike,hosti dërgues e rrit numrin e indentifikimit për qdo datagram që ai dërgon. Kur një ruter duhet të fragmentojë(copëtojë) një Datagram, çdo Datagram rezultues (që është, fragment) është vulosur me adresën e burimit, adresën e destinacionit, dhe numrin e identifikimit të Datagramit origjinal.

Kur destinacioni merr një seri të datagrameve nga i njëjti host dërgues, ai mund të shqyrtojë numrat e identifikimit të datagrameve për të përcaktuar se cila prej datagrameve janë në të vërtetë fragmente të Datagramit të madh. Sepse IP është një shërbim jo i besueshëm, një ose më shumë e fragmente mund të mos arrijnë kurrë në destinacion. Për këtë arsye, në mënyrë që hosti i destinuar të jetë absolutisht i sigurt se ka marrë fragmentin e fundit të Datagramit origjinal, fragmenti i fundit ka një flag bit të setuar(vendosur) në 0, ndërsa të gjitha fragmentet e tjera e kanë këtë flag bit të setuar(vendosur) në 1. Gjithashtu, në mënyrë që hosti i destinuar  të përcaktojë nëse një fragment është zhdukur (dhe gjithashtu të jetë në gjendje të rigrumbullojë fragmentet në rendin e tyre të duhur). fusha e mënjanuar është përdorur për të përcaktuar se ku përshtatet fragmenti brenda IP Datagramit  origjinal.

Një Datagram prej 4000 byte (20 byte të titullit të IP plus 3.980 byte  të IP "payload") arrin në një ruter dhe duhet të përcillet në një lidhje me një MTU prej 1500 byte. Kjo nënkupton që të dhënat 3.980 byte në Datagramin origjinal duhet të ndahen në tri fragmente të veçanta (secila prej tyre është gjithashtu një IP Datagram). 

Nëse një ose më shumë fragmente nuk arrijnë në destinacion, Datagrami jokomplet fshihet dhe nuk kalon në transport shtresën(layer). Por, siç kemi mësuar në kapitullin e mëparshëm, në qoftë se TCP  është duke u përdorur në transport shtresën(layer), pastaj 

TCP do të rikthehet nga kjo humbje duke pasur burimin e ritransmetimit të të dhënave në Datagramin origjinal.

## Kategoritë