Torna all'indice | Parte
1 | Parte 2 | Parte 3
Informazioni sul TCP
- Cos'è il TCP?
- Come provvede il TCP ad evitare i collassi
di rete?
- Come fanno più applicazioni a
far coesistere il TCP e l'UDP?
- Come trovo i numeri di porta assegnati?
Informazioni sull'UDP
- Cos'è l'UDP?
Informazioni sull'ICMP
- Cos'è l'ICMP?
Operazioni di rete TCP/IP
- Come posso misurare la performance di
un collegamento IP?
- Quali indirizzi IP dovrei assegnare
alle macchine in un internet privato?
- Posso installare un gateway che converte
gli indirizzi IP, in modo da non dover cambiare tutti gli indirizzi
interni in una rete ufficiale?
Implementazioni del Protocollo TCP/IP
- Dove posso trovare codice sorgente
del TCP/IP?
- Dove posso trovare codice sorgente
di applicazioni TCP/IP?
- Dove posso trovare codice sorgente
di IPv6?
Ulteriori fonti di informazioni
- Quali newsgroup trattano TCP/IP?
- Ci sono buoni libri sul TCP/IP?
Informazioni sul TCP
- Cos'è il TCP?
Il Transmittion Control Protocol (Protocollo di controllo della trasmissione
- TCP) provvede un attendibile servizio di trasferimento di flussi
di byte tra due punti finali di un internet. TCP dipende dall'IP per
spostare i pacchetti nella rete. L'IP è natualmente inattendibile,
cosicché il TCP protegge contro le perdite di dati, la corruzione
dei dati, il riordino dei pacchetti e la duplicazione dei dati aggiungendo
checksum e sequenze numeriche ai dati trasmessi e, dal lato ricevente,
invia indietro dei pacchetti per informare del ricevimento dei dati.
Prima di mandare i dati nella rete, il TCP stabilisce una connessione
con la destinazione attraverso lo scambio di pacchetti di gestione.
La connessione è distrutta, sempre tramite lo scambio di pacchetti
di gestione, quando l'applicazione che utilizzava TCP indica che non
è necessario trasferire altri dati.
Nei termini OSI, il TCP è un "protocollo di trasporto
responsabile orientato alle connessioni" (Connection-Oriented
Acknowledged Transport protocol).
Il TCP ha un meccanismo di controllo di flusso multistrato che continuamente
aggiusta la velocità di invio dei dati in modo da ottenere il
massimo risultato di invio (throughtput) ed evitare congestioni e seguenti
perdite di pacchetti nella rete. Esso anche prova ad effettuare il miglior
utilizzo delle risorse della rete comprimendo più dati possibili
in un singolo pacchetto IP, anche se questo comportamento può
essere variato dalle applicazioni che richiedono trasferimento di dati
immediato e non si prendono cura dell'inefficienza dei piccoli pacchetti
nella rete.
I fondamenti del TCP sono definiti nella RFC 793, e le successive RFC
rifiniscono il protocollo. La RFC 122 cataloga questi raffinamenti fino
all'Ottobre 1989 e riepiloga i requisiti che un'implementazione TCP
deve possedere.
Il TCP è ancora in sviluppo. Per esempio la RFC 1323 introduce
una nuova opzione TCP che può essere utile quando il traffico
viene inviato a collegamenti ad alta capacità. È importante
che questo genere di sviluppi siano retrocompatibili. Quindi, un'implementazione
TCP che supporta una nuova caratteristica deve continuare a funzionare
sulle vecchie implementazioni TCP che non supportano quella caratteristica.
- Come provvede il TCP ad evitare i collassi di
rete?
Il TCP include alcuni meccanismi che provano a mantenere una buona velocità
di trasferimento dati evitando di immettere un carico eccessivo nella
rete. Gli algoritmi del TCP "Slow Start", "Congestion
Avoidance", "Fast Retransmit" e "Fast Recovery"
sono riassunti nella RFC 2001. Il TCP provvede anche un algoritmo che
evita la "Silly Window Syndrome" (SWS), una spiacevole
condizione che comporta il trasferimento di molti piccoli pezzetti di
dati tra mittente e ricevente. Lo schivamento dell'SWS è discusso
nella RFC 813. Il "Nagle Algorithm", che impedisce al lato
mandante del TCP di inondare la rete con un treno di piccoli pacchetti,
è descritto nella RFC 896.
Van Jacobson ha effettuato un lavoro significativo su questo aspetto
del comportamento del TCP. La FAQ, utilizzata per contenere alcuni pezzi
storicamente interessanti delle email di Van riguardanti le prime implementazioni
dello schivamento della congestione, nell'interesse di risparmiare spazio
è stata rimossa e può invece essere ottenuta via FTP anonimo
da un archivio di lista di discussione end-to-end all'indirizzo <ftp://ftp.isi.edu/end2end/end2end-1990.mail>.
Le diapositive di una presentazione PostScript su questa implementazione
di schivamento di congestione possono essere ottenute via FTP anonimo
all'indirizzo <ftp://ftp.ee.lbl.gov/papers/congavoid.ps.Z>.
Quella cartella contiene anche altri documenti interessanti relativi
al TCP, incluso uno (ftp://ftp.ee.lbl.gov/papers/fastretrans.ps)
di Sally Floyd che discute un algoritmo che prova a dare al TCP la caratteristica
di recuperare velocemente dalle perdite di pacchetti in una rete.
- Come fanno più applicazioni a far coesistere
il TCP e l'UDP?
Ogni applicazione utilizzante TCP o UDP si distingue dalle altre applicazioni
che utilizzano il servizio riservando ed utilizzando un numero di
porta a 16 bit. I numeri di porta di destinazione e sorgente sono
inseriti nelle intestazioni UDP e TCP dal generatore del pacchetto prima
che esso sia dato all'IP, e il numero di porta di destinazione permette
al pacchetto di essere consegnato al recipiente desiderato sul sistema
di destinazione.
Così un sistema può avere un server Telnet in ascolto
di pacchetti sulla porta TCP 23, mentre un server FTP ascolta i pacchetti
sulla porta TCP 21 e un server DNS ascolta i suoi pacchetti sulla porta
53. Il TCP esamina il numero di porta in ogni segmento e lo utilizza
per comprendendere quale server dovrà prendere i dati. Anche
UDP ha un suo set di numeri di porta simile.
Molti server, come quelli visti sopra, ascoltano sempre su un numero
di porta ben conosciuto. Il numero di porta è arbitrario, ma
è fissato da tradizione e da un assegnamento ufficiale del numero
dall'Internet Assigned Numbers Authority (IANA).
- Come trovo i numeri di porta assegnati?
Lo IANA assegna e tiene traccia di tutti i tipi di numeri arbitrari
utilizzati dal TCP/IP, inclusi e noti numeri di porta. L'intera collezione
è pubblicata periodicamente in una RFC chiamata RFC dei numeri
assegnati, ognuna delle quali supera la precedente nella seria.
Attualmente la RFC dei numeri assegnati è la RFC 1700.
Il documento dei numeri assegnati può anche essere ottenuto direttamente
via dallo IANA via FTP all'indirizzo <ftp://ftp.isi.edu/in-notes/iana/assignments>.
Informazioni sull'UDP
- Cos'è l'UDP?
Lo User Datagram Protocol (UDP) provvede un servizio di trasferimento
dati compressi inaffidabile tra due punti finali di un'internet. UDP
dipende da IP per spostare i pacchetti sulla rete.
UDP non garantisce l'attuale consegna dei dati alla destinazione, né
garantisce che i pacchetti di dati vengano consegnati a destinazione
nell'ordine con il quale sono stati inviati dalla fonte e nemmeno garantisce
che sia consegnata a destinazione soltanto una copia dei dati: L'UDP
garantisce l'integrità dei dati e lo fa aggiungendo un checksum
ai dati prima della trasmissione. (Alcune macchine lavorano con la generazione
del checksum di UDP disabilitato, nel cui caso la corruzione o la troncatura
dei dati proceda in maniera non rilevata. Molta poca gente pensa che
questa sia una buona idea.)
I fondamenti dell'UDP sono definiti nella RFC 768. La RFC 1122 elenca
i requisiti che un'implementazione UDP deve avere.
Informazioni sull'ICMP
- Cos'è l'ICMP?
L'Internet Control Message Protocol (ICMP) definisce un piccolo
numero di messaggi utilizzato per scopi di diagnostica o gestione. L'ICMP
dipende dall'IP per spostare i pacchetti nella rete.
I fondamenti dell'ICMP sono definiti nella RFC 792. La RFC 1122 elenca
i requisiti che debba avere un'implementazione ICMP su un host Internet,
e la RFC 1812 elenca i requisiti ICMP per un router Internet.
L'ICMP è fondamentalmente il protocollo di gestione interno della
rete dell'IP e non è inteso per l'utilizzo da parte delle applicazioni.
Due ben conosciute eccezioni sono le utility diagnostiche ping
e traceroute:
- ping invia e riceve pacchetti ICMP "ECHO", il
cui pacchetto di risposta viene preso come segnale che l'host di
destinazione è almeno minimamente attivo nella rete;
- traceroute invia pacchetti UDP e deduce la rotta ottenuta
dal destinatario dai pacchetti ICMP "TIME-TO-LIVE EXCEEDED"
o "PORT UNREACHABLE" ritornati dalla rete. Il tracert
della Microsoft invia un pacchetto ICMP "ECHO" invece
di pacchetti UDP, e pertanto riceve come risposta i pacchetti ICMP
"TIME-TO-LIVE EXCEEDED" o "ECHO RESPONSE".
Operazioni di rete TCP/IP
- Come posso misurare la performance di un collegamento
IP?
Puoi ottenere una veloce approssimazione misurando quando tempo è
necessario per prendere un file via FTP o RPC, ma tieni a mente che
la misurazione sarà falsata dal tempo passato nella gestione
dei filesystem locali e remoti, e non semplicemente dalla rete stessa.
Ricorda di misurare il tempo che impiega nel ricevere un file,
non il tempo passato per inviarlo; il mandante può riportare
che è stata completata l'operazione anche se grosse quantità
di dati sono ancora memorizzate localmente nel buffer del TCP e che
non sono ancora stati inviati a destinazione.
Due ben noti programmi open source che misurano
e riportano il trasferimento di un collegamento IP senza ricorrere ai
filesystem sono:
Se nessuno di questi strumenti effettua quello che desideri, potresti
trovare qualcosa di utile ai tuoi bisogni nella lista di strumenti
di misurazione della CAIDA all'indirizzo <http://www.caida.org/Tools/meastools.html>.
- Quali indirizzi IP dovrei assegnare alle macchine
in un internet privato?
Non dovresti mai utilizzare indirizzi IP che sono stati assegnati da
qualche organizzazione, perché se qualcuno venisse a conoscenza
della tua rete su Internet, la tua innocente attività aziendale
potrebbe essere nei guai. La RFC 1918 provvede una soluzione per questo
problema allocando svariati indirizzi IP specificatamente per l'uso
su una rete privata. Questi indirizzi non saranno mai assegnati ad un'organizzazione
e mai arriveranno su Internet. Questa gamma di indirizzi è:
- Classe A: da 10.0.0.0 fino a 10.255.255.255
- Classe B: da 172.16.0.0 fino a 172.31.255.255
- Classe C: da 192.168.0.0 fino a 192.168.255.255
- Posso installare un gateway che converte gli indirizzi
IP, in modo da non dover cambiare tutti gli indirizzi interni in una
rete ufficiale?
Quest'operazione è denominata NAT (Network Address Translation
- Traduzione di indirizzi di rete). In genere è un'operazione
difficile da eseguire correttamente perché molte applicazioni
includono indirizzi IP nel livello dati-applicazione (il comando FTP
"PORT" è un classico esempio), così il NAT non
è semplicemente una maniera di traduzione degli indirizzi nell'intestazione
IP e il ricalcolo del checksum dell'intestazione. Inoltre, se i numeri
di rete che stai utilizzando coincidono con quelli assegnati ad un'altra
organizzazione, il tuo gateway potrebbe non poter comunicare con quell'organizzazione.
Come visto sopra, la RFC 1918 propone dei numeri di rete che sono utilizzati
per scopi privati, per evitare tali conflitti, ma se stai già
utilizzando un differente numero di rete, questo non ti potrà
aiutare.
Tuttavia, ci sono molti prodotti che provano ad effettuare questo tipo
di NAT al-volo. Linux provvede il NAT tramite la sua caratteristica
di "IP Masquerading", e molti rivenditori di firewall e router
offrono capacità di NAT nei loro prodotti (prova a cercare "Network
Address Translation" nel tuo motore di ricerca web preferito per
ottenere una lista dei rivenditori. I server proxy sviluppati per firewall
a volte possono anche essere utilizzati come sostituti gateway NAT per
particolari protocolli di applicazione. Questo genere di operazioni
sono discusse più a fondo nelle FAQ del newsgroup comp.security.firewalls.
Questa FAQ si trova in rete all'indirizzo Web <http://www.clark.net/pub/mjr/pubs/fwfaq/>.
Implementazioni del Protocollo TCP/IP
- Dove posso trovare codice sorgente del TCP/IP?
Il codice utilizzato nella veneranda versione Net-2 del Berkeley Unix
è disponibile in FTP anonimo all'indirizzo <ftp://ftp.uu.net/systems/unix/bsd-sources/sys/netinet>
(UUNet in Virginia, USA) e <ftp://gatekeeper.dec.com/pub/BSD/net2/sys/netinet>
(Compaq in California, USA).
Il codice sorgente per le implementazioni del TCP/IP negli attuali dialetti
di BSD Unix è disponibile. Istruzione per accedere ai sorgenti
via FTP e altri metodi sono dettagliati nei loro rispettivi siti web:
FreeBSD <http://www.freebsd.org/>,
NetBSD <http://www.netbsd.org/>
e OpenBSD <http://www.openbsd.org/>.
Codici sorgente per il sistema operativo simil-Unix Linux è disponibile
all'indirizzo <http://www.kernel.org/pub/linux/>.
Codici sorgente per l'implementazione TCP/IP nel sistema operativo Xinu
è discusso nell'"Internetworking with TCP/IP Volume II"
di Comer & D.L. Stevens all'indirizzo <ftp://ftp.cs.purdue.edu/pub/Xinu/>.
WATTCP è uno stack TCP/IP per DOS dericato dal programma Telnet
dell'NCSA e migliorato notevolmente. È disponibile in molti siti
di archivi softwre con il nome WATTCP.ZIP. Questo file include alcuni
programmi esempio e codice sorgente completo. L'interfaccia non è
quella del socket BSD ma è abbastanza per l'utilizzo per PC.
KA9Q è il sistema operativo di rete per PC di Phil Karn. Esso
include un'implementazione di TCP/IP originariamente sviluppata per
l'utilizzo di pacchetti radio. Il codice sorgente è disponibile
al sito web di Phil all'indirizzo <http://people.qualcomm.com/karn/code/ka9qos/>.
- Dove posso trovare codice sorgente di applicazioni
TCP/IP?
Il codice sorgente per le varie applicazioni TCP/IP sviluppate con il
'condimento' di BSD Unix è disponibile nei siti FreeBSD, NetBSD
e OpenBSD visti nella sezione precedente.
Il sorgente delle applicazioni Linux sono disponibili all'indirizzo
<http://www.kernel.org/pub/linux/>.
Molti sorgenti delle applicazioni utilizzate in Linux sono state sviluppate
in origine dal GNU Project il cui sito web è all'indirizzo <http://www.gnu.org/>.
Il codice dall'"Internetworking con TCP/IP Volume III"
di Comer & D.L. Stevens è disponibile via FTP anonimo all'indirizzo
<ftp://ftp.cs.purdue.edu/pub/dls/>.
Il codice dall'"TCP/IP Illustrato, Volume 1" è
disponibile all'indirizzo <ftp://ftp.uu.net/published/books/stevens.tcpipv1.tar.Z>.
Il codice sorgente di alcune note applicazioni TCP/IP per sistemi cross-piattaforma
(BIND, sendmail, Apache, ecc..) è disponibile dalle varie organizzazioni
che sponsorizzano le applicazioni.
- Dove posso trovare codice sorgente di IPv6?
Ci sono svariate implementazioni di IPv6 gratuitamente distribuibili,
in particolare per BSD e Linux. Puoi trovare informazioni dettagliate
all'indirizzo <http://playground.sun.com/pub/ipng/html/ipng-implementations.html>,
parte del sito dell'IPv6.
Ulteriori fonti di informazioni
- Quali newsgroup trattano TCP/IP?
Raccolte di documenti FAQ di newsgroup si trovano in molti posti, incluso
<http://www.faqs.org/>
e <ftp://rtfm.mit.edu/pub/faqs/>.
I newsgroup seguenti sono particolarmente rilevanti al TCP/IP:
- Ci sono buoni libri sul TCP/IP?
Certo, ce ne sono molti, pure troppi per elencarli qui. Uri Raz mantiene
la bibliografia su TCP/IP ("La lista di risorse di TCP/IP")
che viene inviata mensilmente al newsgroup comp.protocols.tcp-ip.
È disponibile nel web all'indirizzo <http://www.qnx.com/%7Emphunter/tcpip_resources.html>
e <http://www.faqs.org/faqs/internet/tcp-ip/resource-list/index.html>
oppure si trova via FTP anonimo su <ftp://rtfm.mit.edu/pub/usenet-by-hierarchy/
comp/protocols/tcp-ip/TCP_IP_Resource_List>.
Tuttavia, un paio di libri che stanno sempre in testa nella lista delle
letture raccomandate sono:
- "Internetworking with TCP/IP Volume 1 (Principles, Protocols
and Architecture)" di Douglas E. Comer, pubblicato da Prentice
Hall, 1991 (ISBN 0-13-468505-9). Questo è un libro introduttivo
che copre tutti i protocolli fondamentali, inclusi IP, UDP, TCP e
protocolli gateway. Esso discute anche alcuni protocolli di più
altro livello quali FTP, Telnet e NFS.
- "TCP/IP Illustrated, Volume 1: The Protocols" di
W. Richard Stevens, pubblicato da Addison-Wesley, 1994 (ISBN 0-201-63346-9).
Questo libro spiega i protocolli TCP/IP e molti protocolli di applicazione
in squisito dettaglio. Contiene molte tracce reali dei protocolli
in azione, particolarmente utile per quelli che hanno bisogno di comprendere
i protocolli in profondità.
Se stai scrivendo programmi che utilizzano TCP/IP, il testo classico
è "Unix Network Programming" di W. Richard Stevens,
pubblicato da Prentice Hall, 1990 (ISBN 0-13-949876-1). Attualmente
è in ristampa come set di tre volumi. Il primo volume "Unix
Network Programming: Networking APIs: Sockets and Xti", pubblicato
da Prentice Hall, 1997 (ISBN 013490012X), contiene praticamente tutto
quello che hai bisogno di sapere per utilizzare il TCP/IP e include
materiali sull'argomento (ad esempio IPv6, multicasting, threads) che
non sono trattati nell'UNP originale.
|