mar
06

Lo stack TCP/IP. Introduzione

 

Ringrazio gli amici di oscene.net che mi danno la possibilità di ripubblicare alcuni articoli dal mio blog.

La suite di protocolli TCP/IP nasce verso la fine degli anni ’60 come progetto di ricerca finanziato dal governo americano fino a trasformarsi in quello che è diventato oggi, ovvero, il protocollo più diffuso al mondo per permettere la comunicazione tra computer. La suite è indipendente dalla piattaforma software utilizzata e, pertanto, funziona su tutti i sistemi operativi che ne implementano lo standard (Unix, Linux, OS X, Windows, Symbian, Android, iOS, etc.).

La suite di di protocolli TCP/IP può essere divisa in quattro parti  chiamati livelli. Essi sono:

livello Applicativo –> Telnet, FTP, POP3, HTTP, etc.
livello Trasporto    –> TCP, UDP
livello network       –> IP, ICMP, IGMP
livello data-link     –> Ethernet, Token Ring, FDDI

Ogni livello si occupa di un aspetto specifico della comunicazione tra due postazioni.

Livello Applicativo

Il livello Applicativo si occupa di definire gli standard dei protocolli di comunicazione delle applicazioni (programmi). Come si evince dal nome, questo livello è gestito dal programma che ha necessità di trasmettere dati. E’ a questo livello che troviamo la definizione dei protocolli FTP, HTTP, etc.. Ai dati da trasmettere, preparati nella maniera opportuna, viene aggiunta un’intestazione che li precede. L’intestazione dipende specificamente dall’applicativo che sta inviando i dati. Come esempio possiamo citare la navigazione sui siti web, essa utilizza il protocollo HTTP e, quindi, le informazioni passate al livello successivo della pila (livello Trasporto) si presenteranno in questo modo:

__________________________
!	HTTP header	! dati	 !

I dati vengono passati al livello Trasporto.

Livello Trasporto

Il livello Trasporto riceve i dati dal livello Applicativo e si occupa di gestire il flusso di dati tra due apparati. Per portare a termine il proprio compito si avvale dei protocolli TCP e UDP. La differenza principale tra i due è l’affidabilità della comunicazione. Il protocollo TCP, quando instaura una connessione tra due host (postazioni), si preoccupa che ogni pacchetto  giunga a destinazione. Il protocollo UDP, invece, invia i pacchetti sulla rete senza preoccuparsi che essi arrivino necessariamente a destinazione, lasciando questo compito, se richiesto, al livello applicativo (in pratica se ne deve occupare il programma che trasmette i dati). Anche il livello Trasporto aggiunge un’intestazione ai dati che gli vengono forniti dal livello Applicativo. Riprendendo il nostro esempio sulla navigazione internet avremo:

____________________________________________
! TCP header	!	HTTP header	!	dati !

oppure

____________________________________________
!	UDP header	!	HTTP header	!	dati !

Una volta transitati per questo livello i dati prendono il nome di “pacchetto TCP” o “pacchetto UDP” è vengono trasmessi al livello Network.

Livello Network

Il livello network riceve i dati dal livello Trasporto e si occupa del “viaggio” dei pacchetti sulla rete. Il routing (instradamento) dei pacchetti attraverso i router avviene a questo livello. Il protocollo utilizzato per svolgere tale compito è Internet Protocol (IP). L’IP è un protocollo non affidabile così come visto per il protocollo UDP del livello Trasporto e, pertanto, non garantisce la consegna dei pacchetti. Esso utilizza il protocollo ICMP per notificare alcuni errori occorsi ai pacchetti durante il tragitto ma dell’eventuale ripetizione del invio dei pacchetti andati persi se ne dovrà occupare un livello superiore (normalmente provvede il protocollo TCP). Così come visto per gli altri livelli anche il livello network aggiunge un’intestazione ai pacchetti. Continuando con l’esempio della navigazione internet avremo:

____________________________________________________
!	IP header	!	TCP header	!	HTTP header  ! dati !

Una volta transitati per questo livello i pacchetti prendono il nome di IP Datagram e vengono trasmessi al livello data-link.

Livello data-link

Al livello più basso della pila TCP/IP troviamo il livello data-link che riceve i dati dal livello Network. Questo livello si occupa della comunicazione tra le schede di rete e dell’impiego ottimale delle connessioni fisiche. A questo livello troviamo la definizione dei protocolli Ethernet, Point To Point Protocol (PTPP), etc. Normalmente è implementato come driver del sistema operativo ma ci sono anche dei casi in cui è implementato nel kernel del sistema operativo. Il livello data-link, in alcune versioni, oltre ad aggiungere un’intestazione agli IP Datagram aggiunge anche delle informazioni in coda (trailer). Iltrailer, chiamato Frame Control Sequence, contiene un CRC che serve per verificare l’integrità del frame (questo è il nome che assumono i dati quando transitano per questo livello).  Completando l’esempio della navigazione web e considerando l’utilizzo di una rete Ethernet avremo:

_________________________________________________________________________
!	Ehternet header	 !	IP header	!	TCP header ! HTTP header ! dati ! FCS !

“Incapsulamento”

Lo stack TCP/IP lavora con una tecnica denominata ad “incapsulamento” o “imbustamento”, ovvero come se le informazioni da trasmettere ad ogni livello venissero inserite in una busta sigillata. Pertanto, ogni livello tratta come “dati grezzi” le informazioni ricevuto dal livello superiore non distinguendo tra i dati originari forniti dall’applicativo e gli header (intestazioni) aggiunte dai livelli che essi hanno già attraversato.

Fonte: http://www.thealbatross.it/?p=27

Non ci sono articoli attinenti.

Popularity: unranked [?]



Puoi visualizzare il post originale qui.

mag
25

Va dove ti porta android

 

Popularity: 1% [?]



Puoi visualizzare il post originale qui.

gen
11

Vino per tutti!

 

Popularity: 1% [?]



Puoi visualizzare il post originale qui.

ott
14

Come avere un indirizzo ip pubblico gratis con Fastweb e Linux v2

 

Popularity: 1% [?]



Puoi visualizzare il post originale qui.

set
11

Nasce il nuovo protocollo PPPoP

 

Popularity: 1% [?]



Puoi visualizzare il post originale qui.

ago
20

Server LAMP sulla nostra Ubuntu

 

Popularity: 1% [?]



Puoi visualizzare il post originale qui.

ago
20

DVDSHRINK… sotto ubuntu!

 

Popularity: 1% [?]



Puoi visualizzare il post originale qui.

ago
20

Un personale passo avanti… installare gli ultimi kernel e driver nvidia!

 

Popularity: 1% [?]



Puoi visualizzare il post originale qui.

set
11

Trovare tutti gli IP attivi in una subnet ed effettuare un lookup per trovare il proprio mac address

 

In ambito sistemistico (più networking) si può avere la necessità di avere una lista di tutti gli indirizzi IP che sono già occupati. In più vogliamo sapere anche il mac-address a cui è legato l’ip.

In genere, tute le macchine hanno il ping-reply attivo: per vedere se è online, basta effettuare un ping all’host della macchina per vedere se è attiva.

Possiamo sfruttare, per questo, un comando poco conosciuto ma molto utile in linux: fping.

Non è presente, in genere, nei repository delle solite distribuzioni ma si può trovare, ad esempio, nel rpmforge per Centos/Redhat oppure mirror alternativi. Se non si sa dove prenderlo, basta scaricare i sorgenti e compilarlo.

Fping, come dice l’help, serve ad eseguire un ping su una determinata subnet che può essere specificata in due modi: con la corretta subnet (10.0.0.0/16) oppure in un intervallo (10.0.0.1 10.0.0.255).

Per ricavare il mac-address, possiamo utilizzare l’utilissimo comando arp che serve, appunto, a ricavare il mac-address a partire da un indirizzo IP (lookup).

Chiaramente, per funzione, la macchina da cui si lancia il comando arp DEVE essere sulla stessa rete della subnet altrimenti il lookup non funziona (se passa per un router, chiaramente, il mac-address non verrà visto).

Allora, per fare una combinazione di questi comandi, ho creato uno script in bash per fare questo lavoro:

#!/bin/bash

# coded by morphey (morphey@morphey.org)

FILE_OUT=”/root/out_fpingtoarp.txt”

rm -f $FILE_OUT
function FPingToArp()
{
for IP in `fping -c1 -g $1|cut -d ” ” -f 1-1`
do
STRING=”$IP `arp -n $IP|grep -v HWtype|awk {’print $3?} `”
echo $STRING >> $FILE_OUT
done
}

#### MODIFICARE QUI ###########

FPingToArp 10.0.2.1/24

###############################

echo;echo;echo “done.”

Come si vede, all’interno del codice è possibile lanciare il comando interno FPingToArp quante volte si vuole. Il resto del codice è abbastanza chiaro :)
Da modificare anche il FILE_OUT per avere il responso in qualsiasi file che si vuole.

P.S. nel caso si vuole copiare ed incollare il codice sopra, ricordatevi che wordpress mette delle virgolette che bisogna eliminare :)

Tags


,
,

Popularity: 1% [?]



Puoi visualizzare il post originale qui.

ago
10

IP Forwarding persistente su Debian

 

Inserire la linea seguente nel file /etc/network/options:

ip_forward=yes

Poi riavviare il networking con il comando:

/etc/init.d/network restart

Popularity: 1% [?]



Puoi visualizzare il post originale qui.

mag
31

Velocizzare le navigazione con una cache DNS

 

Popularity: 7% [?]



Puoi visualizzare il post originale qui.

top