Visual Basic Simple
TCP/IP Le risposte alle domande più frequenti
(parte 2)
Sincronizza Indice
Sincronizza Indice
Scarica il progetto
Scarica il progetto
Scarica il testo dell'articolo
Testo dell'articolo
Stampa l'articolo
Stampa l'articolo

Torna all'indice | Parte 1 | Parte 2 | Parte 3

Informazioni sul TCP

  1. Cos'è il TCP?
  2. Come provvede il TCP ad evitare i collassi di rete?
  3. Come fanno più applicazioni a far coesistere il TCP e l'UDP?
  4. Come trovo i numeri di porta assegnati?

Informazioni sull'UDP

  1. Cos'è l'UDP?

Informazioni sull'ICMP

  1. Cos'è l'ICMP?

Operazioni di rete TCP/IP

  1. Come posso misurare la performance di un collegamento IP?
  2. Quali indirizzi IP dovrei assegnare alle macchine in un internet privato?
  3. 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

  1. Dove posso trovare codice sorgente del TCP/IP?
  2. Dove posso trovare codice sorgente di applicazioni TCP/IP?
  3. Dove posso trovare codice sorgente di IPv6?

Ulteriori fonti di informazioni

  1. Quali newsgroup trattano TCP/IP?
  2. Ci sono buoni libri sul TCP/IP?

Informazioni sul TCP

  1. 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.

  2. 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.

  3. 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).

  4. 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

  1. 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

  1. 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

  1. 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>.

  2. 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

     

  3. 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

  1. 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/>.

  2. 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.

  3. 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

  1. 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:
  2.  

  3. 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.

Segue Parte 3 >>

Documento originale: TCP/IP Frequently Asked Question
Traduzione di Fibia FBI
10 Marzo 2001

Scarica il progetto
Scarica il progetto
Scarica il testo dell'articolo
Scarica il testo dell'articolo
Stampa l'articolo
Stampa l'articolo
Torna all'indice degli articoli