Cos'è il TCP/IP - IV3IUM-2023

Vai ai contenuti

                        INTRODUZIONE
               AI     PROTOCOLLI     INTERNET
            Computer  Science  Facilities  Group
                          RUTGERS
             The State University of New Jersey
                        3 Luglio 1987

      Copyright (C) 1987 Charles L. Hedrick .
                         

                          Presentazione
                                
  Eccovi   un'introduzione  ai  protocolli  di  rete  Internet
TCP/IP. E'inclusa anche una panoramica sui servizi disponibili e
una breve descrizione dei maggiori protocolli della famiglia.
  Ritengo  questo scritto una lettura accattivante  e  non  un
noioso documento tecnico, che richiede una certa preparazione in
materia.
  Infatti  il  testo, sebbene un po' datato, descrive  con  un
linguaggio  semplice, ma appropriato, i concetti  fondamentali,
sempre  attuali,  che  sono alla base della  tecnologia  TCP/IP
consentendo   la   comprensione   immediata   e   lo    stimolo
all'approfondimento.
  Ed  e'  proprio cosi' che deve essere intesa questa lettura:
l'approccio disimpegnato al mondo Internet, ma anche il punto di
partenza per uno studio da compiere con l'ausilio di  testi piu'
specializzati. A tal proposito vorrei indicare un testo di
consultazione  molto valido: "Internetworking with  TCP/IP"  di
Douglas  Comer edito dalla McGraw Hill, (reperibile in italiano
per una settantina di mila lire).
  Lo scritto che segue e' rivolto sia, a chi si avvicina per la
prima volta al mondo della telematica e delle reti, e sia  a chi
e'  gia'  introdotto ed opera con il  TCP/IP.  Infatti  vi
troveranno   indicazioni   e  concetti   preziosi   anche   gli
amministratori di sistemi di rete.
  Vi  auguro  che cio' sia l'inizio di curiosita' ed interesse
per  la materia trattata, cosi' come e' accaduto allo scrivente
cinque  anni  fa.  Se  cio' accadra', vi  assicuro  che  sarete
ripagati ampiamente degli sforzi fatti per capire ed operare in
TCP/IP e  le soddisfazioni non tarderanno a venire!

                         Buona lettura   da   Lino Pizzichetti

                   Tabella dei contenuti


1. Che cosa  e' TCP/IP?
2. Descrizione generale dei protocolli TCP/IP
2.1 Il livello  TCP                        
2.2 Il livello  IP                        
2.3 Il livello  Ethernet                 
3. Porte o Sockets e Strati (Layers) applicativi
3.1 Un esempio di applicativo: SMTP
4. Altri protocolli oltre il TCP: UDP  e  ICMP
5. Tenere traccia dei nomi e delle informazioni: Il sistema Domain    
6. Gli instradamenti
7. Dettagli sugli indirizzi Internet: Sottoreti e Broadcasting              
8. Frammentazione e Riassemblaggio di  datagrammi
9. Incapsulazione  Ethernet: ARP
10.Per ottenere maggiori informazioni

Questo  documento  e'  una  breve  introduzione  al  TCP/IP,
seguito   da   un  consiglio  su  cosa  leggere  per   maggiori
informazioni.  Esso  non  deve essere inteso  come  descrizione
completa,  pero'  puo'  dare   un'  idea  delle  capacita'  dei
protocolli   descritti.  Se  comunque  fosse  necessario   ogni
dettaglio  di  questa  tecnologia,  ci  si  potra'  documentare
personalmente.
  In   tutto   il   testo,  si  troveranno  riferimenti   agli
standards,  nella  forma di "RFC + numero" o  "IEN  +  numero":
questi  sono numeri di documenti. La sezione finale  di  questo
documento spiega come ottenere copie di quegli standards.
  Infine,  laddove  il senso era generale, la parola  Computer
e' stata tradotta con la parola Calcolatore. Tuttavia compaiono
altre   denominazioni  per  indicare  un  "calcolatore",   come
"sistema"  o  "sistema di calcolo" o "micro" o "workstation"  o
altro ancora, sebbene a volte il significato varia leggermente.

 1. Che cosa e' TCP/IP?

  TCP/IP e'un insieme di protocolli sviluppati per ottenere la
cooperazione  tra calcolatori nella condivisione delle risorse
attraverso  la  rete.  E'  stata sviluppata  da   una comunita'
di ricercatori incentrata sulla rete  ARPA  che  e' sicuramente
la rete TCP/IP piu' conosciuta.
  Al  mese  di  giugno 1987, almeno 130 differenti rivenditori
avevano prodotti che supportano TCP/IP, ed infatti  migliaia di
reti di tutti i tipi lo usano.

  Prima  si  daranno alcune definizioni di base. Il nome  piu'
preciso per il gruppo di protocolli che si sta per descrivere e'
"Internet Protocol Suite".
  TCP  e  IP,  due  dei  protocolli  del  gruppo  che  saranno
descritti  fra  poco, sono i piu' conosciuti e percio'  diventa
comume  usare  il termine TCP/IP o IP/TCP per fare  riferimento
all'intera   famiglia:  non  vale  la  pena  criticare   questa
abitudine.  Comunque questo puo' portare  ad alcune  stranezze.
Per  esempio, si fa riferimento a NFS come se fosse  basato  su
TCP/IP,  anche  se  non usa il TCP       (infatti  usa  IP)  ma
impiega  un  protocollo  alternativo anzicche'  il  TCP.  Tutte
queste sigle saranno decifrate nelle pagine seguenti.

  L'Internet  e'  un insieme di reti, che comprende:  Arpanet,
NFSnet,reti regionali come Nysernet,reti locali (LAN) presso un
certo  numero di universita' ed istituzioni di  ricerca,  e
diverse reti militari.
  Il  termine "Internet" fa riferimento all'intero  gruppo  di
reti. Il sottogruppo di queste, che e' diretto dal Dipartimento
della Difesa, si riferisce al "DDN" (Defense Data Network). DDN
include  alcune  reti orientate alla ricerca, come  Arpanet,  e
quelle  strettamente militari (poiche' molti dei fondi  per  lo
sviluppo  dei  protocolli Internet arriva dalla  Organizzazione
DDN  i  termini  Internet e DDN possono qualche volta  sembrare
equivalenti). Tutte queste reti sono connesse l'un l'altra. Gli
utenti  possono mandarsi messaggi da una all'altra e viceversa,
eccetto  dove  c'e' sicurezza o altra politica  di  restrizione
sull'accesso.
  Ufficialmente parlando, i documenti sui protocolli  Internet
sono  semplicemente  degli standards adottati  dalla  Comunita'
Internet  per  i propri usi. Piu' recentemente il  Dipartimento
della Difesa ha pubblicato un documento: "Milspec definition of
TCP/IP". Esso e' una definizione piu' formale e appropriata per
l'uso nell'acquisto delle specifiche.  Comunque molte comunita'
continuano ad usare gli standards Internet. La versione Milspec
e' coerente con questi.

  Comunque  si  chiami, TCP/IP e' una famiglia di  protocolli.
Alcuni  forniscono delle funzioni al livello  basso  necessarie
per  molte applicazioni che includono IP, TCP, e UDP e  saranno
descritti un po' piu' dettagliatamente in seguito . Altri  sono
protocolli  per  effettuare dei compiti  precisi  per  esempio:
trasferimento di files tra calcolatori, spedizione di  posta, o
ricerca di chi ha avuto accesso in un altro calcolatore.
  Inizialmente   il   TCP/IP   era   usato   soprattutto   tra
minicomputers e mainframes che sono macchine con  dischi propri
e generalmente entro-contenuti.

  Cosi  i  servizi   TCP/IP tradizionalmente  piu'  importanti
sono:

 -  trasferimento di files. Il protocollo  trasferimento
    file  (FTP)  permette  ad  un  utente  su  un  calcolatore
    qualsiasi  di  ricevere  o mandare  files  da/a  un  altro
    calcolatore.
       La  sicurezza  si  realizza richiedendo  all'utente  di
    specificare il nome e la parola chiave.
       Disposizioni  sono state prese per il trasferimento  di
    files  tra  macchine con differenti insiemi di  caratteri,
    convenzioni  di fine linea, etc. Esse non sono  le  stesse
    prese  per il recente "file system di rete" o i protocolli
    "netbios", i quali saranno descritti piu' sotto.
       Piuttosto,  FTP  e'  un'utilita' che si  puo'  attivare
    ogni  volta che si vuole accedere ad un file su  un  altro
    sistema  di  calcolo. Lo si usa per copiare un file  sulla
    propria macchina per poi lavorare sulla propria copia  (si
    veda  RFC 959 per le specifiche su FTP).
   -  accesso  remoto  (remote login).  Il  protocollo  di
    terminale  chiamato anche TELNET permette ad un utente  di
    accedere su qualsiasi altro calcolatore in rete.
       Si  inizia una sessione remota specificando il nome del
    calcolatore  al  quale ci si intende  collegare.  Da  quel
    momento fino a che non finisce la sessione, qualsiasi cosa
    si  digiti  sulla tastiera viene inviata al corrispondente
    calcolatore.  Da notare che il colloquio  avviene  con  la
    propria  macchina, ma il programma telnet  fa  si  che  il
    proprio calcolatore sia trasparente nella sua azione. Ogni
    carattere che si digita viene inviato all'altro sistema.
       Generalmente,  la connessione verso il  sistema  remoto
    assomiglia  molto  ad una collegamento con  selezione  del
    circuito telefonico. Cioe', il sistema remoto chiedera' di
    accedere  con un nominativo e una parola chiave,  come  lo
    avrebbe normalmente chiesto ad un utente che avesse appena
    chiamato  via  modem. Quando ci si disconnette  dall'altro
    calcolatore, il programma telnet esce dal corrispondente e
    quindi ci si ritrova a colloquiare con il proprio.
       L'implementazione   su   microcalcolatore   di   telnet
    generalmente include un emulatore di terminale per  alcuni
    tipi comuni (si vedano RFC 854 e 855 per le specifiche  su
    telnet.  A  proposito: il protocollo telnet  non  dovrebbe
    essere  confuso con Telenet che e' un prodotto dei servizi
    commerciali di rete).
    -  posta elettronica. Questa applicazione permette  di
   mandare messaggi  ad utenti su altri calcolatori.
      Originariamente, c'era la tendenza ad usare solo  uno  o
   due  specifici  calcolatori. Cioe' si mantenevano  i  files
   della  posta  su  quelle  macchine.  Il  sistema  di  posta
   elettronica,    da'   semplicemente  la   possibilita'   di
   aggiungere un messaggio tra i files della posta  dell'altro
   utente.
      Pero'  ci  sono alcuni problemi in proposito  quando  si
   impiegano  microcomputers (PC). Il problema piu'  serio  e'
   che  un  micro  non e' adatto a ricevere posta elettronica,
   almeno  direttamente. Quando si manda  posta,  il  software
   preposto   presume  di  essere  in  grado  di  aprire   una
   connessione con il calcolatore dell'indirizzo. Se questo e'
   un  micro,  potrebbe essere spento, oppure potrebbe  essere
   impegnato  con  un altro applicativo, diverso  dalla  posta
   elettronica.  Per questa ragione, la posta e'  trattata  da
   sistemi  piu'  grandi,  dove  e'  piu'  pratico  avere   un
   dispositivo (server) per la posta che sia sempre attivo. Il
   software   per  la  posta  su  micro  allora   diventa   un
   interfaccia  utente  che rintraccia  la  posta  dal  server
   apposito  (si  vedano le RFC 821 e 822  per  le  specifiche
   sulla  posta  tra  calcolatori. Si  veda  RFC  937  per  il
   protocollo POP, studiato apposta per la lettura della posta
   su microcomputer).

  Questi   servizi   dovrebbero  essere   presenti   in   ogni
implementazione  TCP/IP,  eccetto quelle  per  micro  (PC)  che
possono  non supportare la posta elettronica. Tali applicazioni
tradizionali  giocano  ancora un ruolo molto  importante  nelle
reti basate su TCP/IP.
  Comunque  piu' recentemente, il modo in cui le reti  vengono
usate  sta'  cambiando. Il vecchio modello, in  cui  esiste  un
certo  numero  di  grossi  e  autosufficienti  calcolatori,  e'
iniziato  a  cambiare. Oggi molte installazioni, dispongono  di
molti  tipi  di calcolatori, incluso parecchi microcalcolatori,
stazioni   di   lavoro   (workstations),   minicalcolatori,   e
mainframes. Essi, sono probabilmente configurati per effettuare
attivita'   specifiche.  Ebbene,  quegli   stessi   calcolatori
chiameranno un altro sistema nella rete per chiedere  un  altro
servizio specializzato.

    Cio'  ha portato al modello " client - server" dei servizi
di  rete.  Un  server  e' un sistema che fornisce  un  servizio
specifico  per  il  resto della rete. Un  client  e'  un  altro
sistema  che usa quel servizio. Da notare che server  e  client
non  e'  necessario  che siano su differenti calcolatori:  essi
possono  essere  differenti programmi che girano  sullo  stesso
calcolatore.

  Ecco  di  seguito i tipi di server tipicamente  presenti  in
una  moderna installazione di computer. Da notare che i servizi
sottoelencati possono essere tutti forniti entro  la  struttura
di TCP/IP.

       -  file  system  di  rete (NFS). Esso  permette  ad  un
    sistema   di  accedere  ai  dati  (files)  su   un   altro
    calcolatore  in uno stile piuttosto integrato  rispetto  a
    FTP.
       Un  file  system  di  rete fornisce l'illusione  che  i
    dischi   o   altri   dispositivi  di  un   sistema   siano
    direttamente connessi ad altri.
       Non  c'e'  bisogno di utilizzare speciali  utilita'  di
    rete  per  accedere  ad un file su un  altro  sistema.  Il
    calcolatore pensera' semplicemente di avere alcuni  dischi
    in  piu'.  Questi dischi extra, "virtuali", si riferiscono
    agli  altri  dischi dei sistemi o parte  di  questi.  Tale
    capacita'   e'  utile  per  diversi  propositi.   Da'   la
    possibilita'   di  collegare  grossi  dischi   su   alcuni
    calcolatori,  consentendo  tuttavia  altri  accessi   allo
    spazio  sul  disco.  A parte gli ovvi benefici  economici,
    questo  sistema  permette a molta  gente  di  lavorare  su
    diversi calcolatori  per dividere files comuni. Esso rende
    il  sistema di manutenzione ed il salvataggio dei dati  di
    lavoro  (BACKUP) piu' facile, consentendo di  non  doversi
    preoccupare  di  registrare e fare  copie  del  lavoro  su
    diverse macchine.
       Diversi   rivenditori  e  distributori,  oggi   offrono
    calcolatori senza dischi ad alte prestazioni. Infatti essi
    non  hanno  affatto dischi: sono completamente  dipendenti
    dai dischi attaccati al "file server" comune
       Si  vedano  le  RFC 1001 e 1002 per la descrizione  del
    protocollo    NetBIOS   su  TCP  orientate   ai   personal
    computers.  Nelle  aree ove sono presenti  workstations  e
    microcalcolatori, e' molto probabile che sia usato il file
    system della SUN Microsystem. Le specifiche del protocollo
    NFS, sono disponibili appunto presso " SUN Microsystem ".
    
       -   stampa   remota.  Questo  protocollo  permette   di
    accedere  alle  stampanti attaccate su altri  calcolatori,
    come se fossero attaccate direttamente al proprio.
       Il  protocollo  piu'  usato e'  LPR  che  proviene  dal
    sistema operativo "UNIX di Berkeley ". Sfortunatamente non
    e'  molto  diffusa la relativa documentazione. Tuttavia  i
    files  sorgente in linguaggio C sono facilmente ottenibili
    dall'Universita'  di   Berkeley, al  fine  di  rendere  le
    implementazioni comuni .
      -  esecuzione remota, RPC. La presenza di questo server
    permette di richiedere che un particolare programma  venga
    processato su un differente calcolatore.
       Cio'  e'  utile quando si deve effettuare molto  lavoro
    su  di  un piccolo calcolatore, e parte di questo richiede
    invece le risorse di un grosso sistema.
      Ci  sono  diversi  tipi  di esecuzione  remota.  Alcuni
    operano  su  comandi  base.  Cioe'  si  richiede  che  uno
    specifico   comando  o  un  gruppo  di   comandi   vengano
    processati su di uno specifico calcolatore (versioni  piu'
    sofisticate   scieglieranno   un   sistema   che   diviene
    disponibile). Comunque ci sono anche dei sistemi "RPC" che
    permettono  ad  un programma di richiamare una  subroutine
    che funzionera' su un altro calcolatore.

       Ci sono molti protocolli di questa specie.
      Il  sistema  operativo  Unix di Berkeley  contiene  due
    servers  che  eseguono  comandi in modo  remoto:  "rsh"  e
    "rexec".  Le  pagine nel manuale, descrivono i  protocolli
    che essi usano.
      Il  software  per  l'utente su Berkeley  Unix  versione
    4.3,   contiene  un  interprete    di    comandi   (shell)
    distribuito che assegna  compiti e  lavori tra  un  gruppo
    di sistemi, a seconda del carico.
      I  meccanismi RPC sono stati argomento di  ricerca  per
    diversi  anni,  percio'  molte  organizzazioni  hanno   le
    realizzazioni (implementazioni) di tali servizi.
       I    piu'    diffusi    protocolli    RPC    supportati
    commercialmente, sembrano essere: Courier di Xerox  e  RPC
    di  SUN  e  i  relativi documenti sono disponibili  presso
    Xerox  e  Sun. Esiste comunque un implementazione pubblica
    di  Courier su TCP come parte di un pacchetto software  su
    Berkeley  Unix 4.3. Una implementazione di  RPC  e'  stata
    depositata su Usenet da Sun, e appare anche come parte  di
    un pacchetto software su Berkeley Unix 4.3.

      -  server dei nomi. Nelle grosse installazioni, ci sono
    diversi  gruppi  di di nomi che devono essere  manipolati.
    Essi  includeono  utenti e le loro  parole  chiave,  nomi,
    indirizzi  di  reti  per calcolatori e  descrizione  degli
    utenti (accounts).
       Diventa  molto  tedioso  mantenere  tutti  questi  dati
    aggiornati su tutti i calcolatori. In questo modo i  data
    base  sono  tenuti su un piccolo numero  di  sistemi.  Gli
    altri vi accedono ai dati attraverso la rete .
      Le  RFC  822 e 823 descrivono il protocollo del  server
    dei  nomi  usato per tenere traccia dei nomi  di  hosts  e
    indirizzi Internet sulla propria rete. Questa e' una parte
    adesso richiesta  da ogni implementazione TCP/IP. IEN  116
    descrive  un  vecchio protocollo del server dei  nomi  che
    viene usato da alcuni terminal-server e altri prodotti per
    cercare nomi  di hosts.
       Invece,  il  sistema "Pagine Gialle  (Yellow  Page)  di
    Sun"  e'  stato  progettato come meccanismo  generale  che
    manipola  nomi  di  utenti, gruppi  che  condividono  dati
    comuni,  ed altri data-base comunemente usati  dal sistema
    Unix.  Esso  e'  largamente disponibile in  commercio.  La
    definizione del protocollo e' disponibile presso Sun.

      -  terminal  servers.   In molte installazioni  non  si
    connettono  piu' i terminali direttamente ai  calcolatori,
    ma    ai    terminal-servers.   Un   terminal-server    e'
    semplicemente  un piccolo calcolatore che mantiene  attivo
    il  programma  telnet (o usa qualche altro protocollo  per
    l'accesso remoto).
       Se  un  terminale e' connesso ad uno di questi sistemi,
    basta  semplicemente digitare il nome  di  un  calcolatore
    per  essere  connessi. Generalmente  e'  possibile  tenere
    connessioni attive con piu' di un calcolatore allo  stesso
    tempo.
       Il  terminal-server  ha la capacita'  di  scambiare  le
    connessioni   rapidamente  e  avvisare  quando   l'output,
    proveniente  da  un'  altra  connessione,  e'  in  attesa.
    Inoltre  tutti  i veri terminal-server, dovrebbero   anche
    supportare  il  servizio di traduzione dei  nomi  e  altri
    protocolli.
    
       -  sistemi a finestre orientati alla rete. Fino a  poco
    tempo   fa,  i  programmi  grafici  ad  alte  prestazioni,
    dovevano  essere eseguiti su calcolatori che avessero  uno
    schermo grafico "a mappa di bit" direttamente attaccato  a
    questi.  I sistemi a finestre per la rete (network  window
    systems)  permettono ad un programma di usare uno  schermo
    su  un  altro  calcolatore. Nel contesto,  questo  sistema
    fornisce  un'  interfaccia  che  consente  di  distribuire
    lavori ai sistemi che sono piu' adatti a svolgerli,  dando
    tuttavia, un singola interfaccia grafica utente
       Il  sistema  a  finestre piu' implementato  e'  X.  Una
    descrizione di questo  protocollo e una implementazione di
    riferimento  sono  disponibili presso  il  gruppo  Project
    Athena  di MIT. Diversi venditori stanno anche supportando
    NeWS, un sistema a finestre definito da SUN.
       Entrambi  questi  sistemi  sono  stati  progettati  per
    usare TCP/IP.
    
  Da  notare  che alcuni dei protocolli descritti sopra,  sono
stati progettati da Berkeley, Sun , o altre organizzazioni. Per
questo  non  fanno ufficialmente parte del gruppo di protocolli
Internet.  Tuttavia  essi sono stati realizzati  con  l'uso  di
TCP/IP,  proprio come lo sono i normali protocolli  applicativi
TCP/IP.   Inoltre,  poiche'  le  loro  definizioni   non   sono
considerate   proprietarie   e   poiche'   le   implementazioni
commercialmente  supportate  sono  largamente  disponibili,  e'
ragionevole pensare che tali protocolli facciano effettivamente
parte dell'insieme Internet.

  Da  notare che la lista sopra presentata e' semplicemente un
saggio del tipo di servizi disponibili attraverso TCP/IP  anche
se  descrive gran parte delle maggiori applicazioni. Gli  altri
protocolli  comunemente  usati,  tendono  a  svolgere   compiti
specializzati per ottenere informazioni di vario tipo, come chi
e' presente nel sistema, qual'e' l'ora e la data, etc.
  Comunque per i servizi che non sono stati elencati  qui,  si
incoraggia   la  consultazione  della  corrente   edizione   di
"Protocolli  Internet"  (attualmente  RFC  1011).  Esso  elenca
diverse caratteristiche dei protocolli disponibili, e raccoglie
le  osservazioni su alcune delle maggiori implementazioni  allo
scopo di notare cio' che i vari venditori hanno aggiunto.

  2. Descrizione generale dei protocolli TCP/IP

  TCP/IP  e' un insieme di diversi livelli di protocolli.  Per
capire  che  cosa questo  significhi, sara' utile osservare  un
esempio.
  Una   situazione   tipica  e'  spedire  posta   elettronica.
Dapprima  c'e'  un  protocollo per la posta  che  definisce  un
insieme  di  comandi che una macchina manda ad  un  altra,  per
esempio:  i  comandi  per specificare chi e'  il  mittente  del
messaggio, chi e' il destinatario e poi il testo del messaggio.
Questo  protocollo  presume che ci sia una  via  affidabile  di
comunicazione  tra  i  due calcolatori. La  posta,  come  altre
applicazioni, definisce semplicemente un gruppo  di  comandi  e
messaggi da mandare. Essa e' stata progettata per essere  usata
insieme a TCP ed IP. TCP e' responsabile nell'assicurare che  i
comandi  raggiungano  il  corrispondente.  Inoltre  TCP   tiene
traccia di cio' che viene spedito, e ritrasmette ogni cosa  non
recapitata. Se un messaggio e' troppo grande per un datagramma,
per  esempio il testo della posta, TCP lo dividera' in  diversi
datagrammi, e assicurera' che essi arrivino correttamente.
  Poiche'   queste   funzioni  vengono  richieste   da   molte
applicazioni,  esse sono state raccolte insieme  in  protocolli
separati, piuttosto che fare parte di specifiche per l'invio di
posta.
  Si  puo' immaginare TCP come una raccolta di routines che le
applicazioni  possono usare  quando esse hanno bisogno  di  una
comunicazione affidabile di rete con un altro calcolatore.
  Allo  stesso modo, TCP richiama i servizi di IP.  Sebbene  i
servizi  che  TCP offre siano necessari per molte applicazioni,
ci  sono  ancora alcuni tipi di applicazioni che non  ne  hanno
bisogno .
  Ci  sono  pure alcuni servizi che ogni applicazione richiede
e  percio' sono messi insieme dentro IP. Come succede con  TCP,
si  puo'  pensare  di IP come un insieme di  routines  che  TCP
richiama, ma che sono anche disponibili ad applicazioni che non
usino TCP.
  Questa   strategia   nel  costruire  parecchi   livelli   di
protocolli si chiama "stratificazione o layering".
  Si  considerino i programmi applicativi come la  posta,  TCP
ed  IP  come se fossero "strati o layers" separati, ognuno  dei
quali richiama i servizi dello strato inferiore.

  Generalmente, i programmi TCP/IP usano 4 strati:
  
       -un protocollo applicativo come la posta
       -un  protocollo come TCP che fornisce servizi richiesti
        da piu' applicazioni
       -un  protocollo  che  fornisce  il  servizio  base   di
        portare alla destinazione i datagrammi come IP
       -i  protocolli necessari a gestire uno specifico  mezzo
        fisico, come Ethernet o una linea punto a punto.
    
  TCP/IP  e'  basato sul modello "catenet" (esso e'  descritto
piu' dettagliatamente in IEN 48). Questo modello presume che ci
siano  molte  reti  indipendenti  connesse  insieme  attraverso
gateways  o routers. Infatti l'utente dovrebbe essere in  grado
di  accedere  ai  calcolatori o altre risorse su  qualunque  di
queste reti.
    Dunque  i  datagrammi  spesso  passeranno  attraverso  una
dozzina  di  differenti  reti  prima  di  raggiungere  la  loro
destinazione  finale.  Percio' l'instradamento  necessario  per
realizzare   il  collegamento,  dovrebbe  essere  completamente
invisibile   all'utente,  che  per  quanto  lo  riguarda   deve
conoscere solo "l'indirizzo Internet".
  Esso  e' un indirizzo che appare nella forma 128.6.4.194  ed
e'  esattamente  un numero a 32 bit. E' scritto  con  4  numeri
decimali, ognuno rappresentante 8 bits di indirizzo (il termine
ottetto  viene usato nella documentazione Internet per indicare
gruppi di 8 bits. Il termine "Byte" non viene mai usato perche'
TCP/IP e' supportato da alcuni calcolatori che hanno misure  di
byte diverse da 8 bits).
  Generalmente   la   struttura  dell'indirizzo   da'   alcune
informazioni su come raggiungere il sistema, per esempio  128.6
e'   un   numero  di  rete  assegnato  all'autorita'   centrale
dell'Universita' di RUTGERS. RUTGERS usa il successivo  ottetto
per   indicare  quale  rete  locale  ethernet  o  campus  viene
coinvolto. 128.6.4. e' una rete locale (LAN) ethernet usata dal
"Dipartimento  delle  Scienze dei Computer".  L'ultimo  ottetto
consente  la  numerazione fino a 254 sistemi sulla stessa  rete
locale  (esso  e' 254 perche' 0 e 255 non sono  consentiti  per
ragioni  che  saranno  discusse piu'  avanti).  Da  notare  che
128.6.4.194  e 128.6.5.194. sono sistemi distinti. Comunque  la
struttura  di  un indirizzo Internet e' descritta  meglio  piu'
oltre.
  Normalmente   si   fa   riferimento  a   certi   calcolatori
attraverso  dei nomi piuttosto che a degli indirizzi  Internet.
Quando si specifica un nome, il software di rete lo cerca in un
database e ritorna con un corrispondente indirizzo Internet. La
maggior  parte del software di rete tratta solamente  indirizzi
di  rete Internet (RFC 882 descrive la tecnologia del server di
nomi usato per gestire tutto cio').
  TCP/IP  e'  costruito con una tecnologia senza  connessioni:
l'informazione viene trasferita come una sequenza di datagrammi
che  sono  un insieme di dati da spedire come fosse un  singolo
messaggio.   Ognuno   di  questi  datagrammi  viene   trasmesso
attraverso la rete individualmente.
  Naturalmente  ci  sono  degli  accorgimenti  per  aprire  le
connessioni,  per  esempio:  iniziare  una  comunicazione   che
continuera'  per  un po' di tempo. Comunque  a  certi   livelli
l'informazione viene spezzata in datagrammi,  e questi  saranno
trattati dalla rete come se fossero completamente separati.
  Per  esempio,  si supponga di voler trasferire  un  file  di
15000  ottetti (15 Kb). Molte reti non gestiscono 15000 ottetti
in  datagrammi, percio' i protocolli li spezzeranno in qualcosa
come  30 datagrammi da 500 ottetti. Ognuno di questi datagrammi
sara'  inviato  poi  dall' altra parte. A  quel  punto  saranno
rimessi  insieme  nello stesso file da 15000 ottetti.  Comunque
mentre questi datagrammi sono in transito, la rete non sa'  che
esiste  una connessione tra di loro. E' perfettamente possibile
che  il datagramma 14 arrivi prima del datagramma 13. E'  anche
possibile che da qualche parte della rete capiti  un errore  ed
alcuni  datagrammi  non  arrivino  affatto.  In  quel  caso  il
datagramma deve essere rinviato .

  Da  notare,  in  proposito,  che  i  termini  datagramma   e
pacchetto   spesso   sembrano  essere  molto   intercambiabili.
Tecnicamente, datagramma e' la giusta parola da usare quando si
descrive  TCP/IP. Un datagramma e'  l' unita'  di  dati  che  i
protocolli  trattano.  Un pacchetto  e'  una  cosa  fisica  che
compare  su  Ethernet o via cavo, cioe' sul  mezzo  fisico.  In
molti  casi  il pacchetto contiene semplicemente un datagramma,
percio' c'e' molta poca differenza.
  In  ogni  caso  essi possono differire. Quando TCP/IP  viene
usato  su  rete  dati  X.25, la relativa interfaccia  spezza  i
datagrammi in pacchetti da 128 byte. Questo e' invisibile  allo
strato  IP, perche' i pacchetti vengono rimessi insieme  in  un
singolo  datagramma all'altro capo prima di  essere  processati
dal  TCP/IP.  Cosi' in questo caso, un datagramma  IP  verrebbe
trasportato da molti pacchetti. Tuttavia con la maggiore  parte
dei mezzi fisici, ci sono vantaggi in efficienza ad inviare  un
datagramma  per  pacchetto,  e cosi'  la  distinzione  tende  a
sparire .

  2.1 Il livello TCP

  Nella  gestione dei datagrammi TCP/IP vengono coinvolti  due
protocolli separati.
  TCP  (Transmision  Control Protocol) e'  responsabile  della
divisione   del   messaggio   in  datagrammi,   riassemblandoli
all'altro  capo, rinviando qualsiasi cosa che andasse  persa  e
rimettendo  le cose a posto nello stesso ordine.  IP  (Internet
Protocol)  e' responsabile dell' instradamento individuale  dei
datagrammi. Potrebbe sembrare che TCP faccia tutto il lavoro  e
in piccole reti questo e' vero.
  Comunque  sulla  rete  Internet  spedire  semplicemente   un
datagramma potrebbe essere un lavoro complesso. Una connessione
potrebbe  richiedere al datagramma di attraversare molte  reti.
Per esempio a Rutgers, dovrebbe attraversare: una linea seriale
al  Centro Supercomputer John von Neuman, li' una coppia di LAN
ethernet, una serie di linee telefoniche da 56 Kbaud all' altro
sito  NSFNet,  e  infine delle LAN ethernet sull'  altro  lato.
Tenere  traccia  delle  rotte di tutte  queste  destinazioni  e
gestire   le  incompatibilita'  tra  i  differenti   mezzi   di
trasporto, diventa un lavoro complesso.
  Da  notare  che  l'interfaccia tra  TCP e IP  e'  abbastanza
semplice. Infatti TCP passa semplicemente ad IP un datagramma e
una  destinazione. IP non sa come questo datagramma si  collega
ad uno precedente o successivo.

  A  questo punto puo' accadere che qualcosa vada perso. Si e'
parlato  di indirizzi Internet, ma non di come si tiene traccia
delle  connessioni multiple verso un dato sistema:  non  vi  e'
ancora chiaro abbastanza come inviare un datagramma alla giusta
destinazione.
  TCP   deve   sapere  a  quale  connessione   il   datagramma
appartiene.   Questo  compito  e'  chiamato   "Demultiplexing".
Infatti  ci sono molti livelli di demultiplexing che girano  su
TCP/IP.
  Le   informazioni  necessarie  a  fare  tale  lavoro,   sono
contenute  in una serie di "intestazioni o testate o  headers".
Una  intestazione  consiste semplicemente in  alcuni  ulteriori
ottetti   attaccati  all'inizio  del  datagramma   da   qualche
protocollo  allo  scopo  di mantenerne la  traccia.  Assomiglia
molto  all'operazione di mettere una lettera in  una  busta  ed
apporre su di questa l'indirizzo.
  Ad  eccezione delle moderne reti cio' accade molte volte. E'
come  se  si mettesse la lettera in una piccola busta,  poi  la
segretaria  la mette in una busta piu' grande, poi  l'  ufficio
postale la mette in una busta piu' grande ancora, etc.
  Ecco  una  sintesi  delle intestazioni che  accompagnano  un
messaggio che passa attraverso una tipica rete TCP/IP:

  Iniziamo con una singola striscia di dati, diciamo  un  file
che si sta tentando di inviare a qualche altro calcolatore:

 ............................................................

  TCP  lo spezza in tratti piu' facili da trattare e per  fare
questo  TCP deve conoscere la grandezza del datagramma  che  la
rete  puo'  gestire. Infatti, i protocolli  TCP  ad  ogni  capo
dicono  quanto grande e' il datagramma che possono gestire,  ed
allora lo riducono in una misura piu' piccola.

 .....  .....  .....  .....  .....  .....  .....  ..... .....

  TCP  mette  una intestazione all'inizio di ogni  datagramma.
Questa  testata infatti contiene almeno 20 ottetti,  ma  quelli
piu'  importanti sono "il numero di porta logica o  socket"  di
partenza e di arrivo e "il numero di sequenza".
  I  numeri  di  porte vengono usati per tener  traccia  delle
diverse conversazioni.
  Si  immagini  tre differenti persone che stanno  trasferendo
files. Il programma TCP puo' allocare a questi trasferimenti  i
numeri di porta per esempio: 1000, 1001,  1002. Quando si  sta'
mandando  un  datagramma,  essi diventano  i  numeri  di  porta
"sorgente  o  source", poiche' sono l'origine  del  datagramma.
Naturalmente, per la conversazione, il programma TCP  all'altro
capo  deve  assegnare il numero di porta propria  che  comunque
deve  divenire noto al corrispondente alla stessa maniera (esso
lo  scopre  quando la connessione inizia, come verra'  spiegato
piu'   sotto).   Questa   informazione  viene   immessa   nella
intestazione  e precisamente nel campo "porta di destinazione".
Ovviamente,  se l'altro capo rinvia un datagramma indietro,  le
porte  sorgente  e destinazione verranno rovesciate,  e  allora
saranno invertite la sorgente con la destinazione.
  Ogni  datagramma ha un numero di sequenza per far  si'  che,
l'altro capo possa assicurare un invio di datagrammi nel giusto
ordine,  e  che non se ne perda alcuno (si vedano le specifiche
TCP  per  i  dettagli). TCP non numera  i  datagrammi,  ma  gli
ottetti.  Cosi'  se  ci  sono  500  ottetti  di  dati  in  ogni
datagramma,  il  primo  successivo puo' essere numerato  0,  il
secondo  500,  il  successivo 1000, il successivo ancora  1500,
etc.
  Finalmente,  ecco   menzionata  la  "Somma  di  controllo  o
Checksum". Essa e' un numero che viene calcolato sommando tutti
gli  ottetti  nel  datagramma (piu'  o  meno  -  si  vedano  le
specifiche  TCP). Il risultato viene messo nella  intestazione.
TCP  dall'altro  capo calcola il Checksum di nuovo.  Se  questi
sono diversi, allora qualcosa e' capitato al datagramma durante
la spedizione percio' viene gettato via.

  Cosi' ecco come il datagramma appare adesso.

          =============================================
          |   Porta Sorgente   |   Porta Destinazione |
          =============================================
          |           Numero di Sequenza              |
          =============================================
          |           Numero di Ricevuta              |
          =============================================
          |offset o |          |U|A|P|R|S|F|          |
          |locazione|Riservato |R|C|S|S|Y|I| Finestra |
          |dei Dati |          |G|K|H|T|N|N|          |
          =============================================
          |Somma di controllo o Checksum|Punt. Urgente|
          =============================================
          |  ....... .......   dati  per i successivi |
          |            500 ottetti                    |
          |           ....... .......                 |
                               
     Se  si  abbrevia la testata TCP con " T ", l'intero  file
appare come :

     T....  T....  T....  T....  T....  T....  T....  T....
                            
  Si  notera' che ci sono diversi argomenti nell' intestazione
che  non  sono stati descritti prima. Questi generalmente  sono
implicati nella gestione della connessione.
  Allo  scopo di assicurare che il datagramma arrivi alla  sua
destinazione,  il  destinatario  deve  inviare   indietro   una
"ricevuta  o acknowledgement". Percio' viene immesso un  valore
nel  campo  "numero  di ricevuta" del datagramma.  Per  esempio
inviare  un pacchetto con una ricevuta di 1500 indica che  sono
stati ricevuti tutti i dati fino all'ottetto numero 1500. Se il
mittente  non  ottiene  ricevuta entro  un  tempo  ragionevole,
rinvia i dati di nuovo.
  Il  campo  "finestra"  viene  usato per  controllare  quanti
dati  possono  essere in transito ogni volta.  Non  e'  pratico
aspettare che ogni datagramma venga confermato prima di inviare
il  successivo: rallenterebbe troppo le cose. Dall'altra parte,
non si puo' sostenere continuamente l'invio di dati, altrimenti
un  calcolatore piu' veloce potrebbe sopraffare le capacita' di
uno  piu'  lento nell'assorbire dati. In questo modo ogni  lato
della  comunicazione indica quanti nuovi dati e' effettivamente
preparato  ad  assorbire mettendo il numero degli  ottetti  nel
proprio  campo  "finestra". Man mano che un calcolatore  riceve
dati,  la  quantita' di spazio rimasto nella  propria  finestra
diminuisce  e  quando  questa  va  a  zero,  il  mittente  deve
fermarsi. Via via che il destinatario processa i dati,  aumenta
la  propria  finestra,  indicando che e' pronto  ad  accettarne
degli altri. Spesso lo stesso datagramma puo' essere usato  per
dare  ricevuta di un gruppo di dati e dare il permesso di invio
per altri nuovi (aumentando la finestra).
  Il  campo  "urgente" permette ad un capo della comunicazione
di  dire  all'altro di saltare avanti e processare  particolari
ottetti.  Questo  spesso  e' utile  nella  gestione  di  eventi
asincroni, per es. quando si batte un carattere di controllo  o
altri  comandi  che  interrompono  l'output.  Gli  altri  campi
presenti  nel  datagramma TCP vanno oltre lo  scopo  di  questo
documento.

  2.2 Il livello IP

  TCP  invia  ognuno  di  questi datagrammi  ad  IP  indicando
l'indirizzo  Internet  del calcolatore all'  altro  capo  della
comunicazione. Da notare che questa e' l'unica informazione che
interessa  ad  IP.  Non deve preoccuparsi invece  di  cio'  che
contiene il datagramma o anche la testata di TCP.
  Il  lavoro  di IP e' semplicemente trovare una  rotta  sulla
rete per il datagramma ed inviarlo  dall'altra parte.
  Allo  scopo  di  permettere ai gateways o  routers  o  altri
sistemi intermediari di inoltrare il datagramma, IP aggiunge la
propria testata. Gli elementi principali in quest'ultima  sono:
l'indirizzo  sorgente e destinazione Internet (indirizzi  a  32
bit,  nella forma 128.6.4.194), il numero di protocollo,  e  un
altro checksum.
    L'indirizzo  Internet  sorgente  e'  semplicemente  quello
della  macchina  che  ha  originato la comunicazione  (cio'  e'
necessario in modo che il corrispondente conosca la provenienza
del datagramma).
  L'indirizzo  Internet  destinazione  e'  l'indirizzo   della
macchina all'altro capo della comunicazione (cio' e' necessario
in  modo  che qualsiasi gateway o router coinvolto  conosca  la
destinazione del datagramma generato).
  Il  numero  di  protocollo indica ad IP  all'altro  capo  di
inviare  il datagramma a TCP. Sebbene molto traffico  IP  venga
generato da TCP, ci sono altri protocolli che possono  usare  i
servizi di IP e percio' quest'ultimo deve sapere a quale strato
di protocollo inviare il datagramma.
  Finalmente,  il  checksum permette ad IP all'altro  capo  di
verificare  che  la  testata  non  sia  stata  danneggiata   in
transito.  Da notare che TCP e IP hanno separati checksums.  IP
deve  essere  in  grado di verificare che la  testata  non  sia
andata danneggiata in transito, altrimenti potrebbe inviare  un
messaggio al posto sbagliato. Per ragioni che esulano da questa
discussione,  e' piu' efficiente e sicuro che  TCP  calcoli  un
separato checksum per la testata TCP e i dati.

  Una  volta  che  IP ha realizzato la propria  testata,  ecco
come il messaggio apparira':

  
         =============================================
         |Version|IHL|Tipo di Servizio|Lunghezza tot |
         =============================================
         |Identificazione|Flags|Locazione del frammen|
         =============================================
         |Tempo di vita|Protocollo|Somma di controllo|
         |   T T L     |           dell'intestazione |
         =============================================
         |            Indirizzo di Sorgente          |
         =============================================
         |          Indirizzo di Destinazione        |
         =============================================
         |      Testata TCP , e poi i dati ......    |
         |                                           |
                             
  Se  si rappresenta la testata IP con una " I ",  il file ora
rassomigliera' a questo:

     IT....  IT....  IT....  IT....  IT....  IT....  IT....

  Di  nuovo, la testata contiene alcuni campi addizzionali non
menzionati.  Molti  di  loro vanno oltre  lo  scopo  di  questo
documento.
  I  "Flags" e "La locazione dei frammenti o Fragment  Offset"
vengono   usati  per  tenere  traccia   dei  pezzi  quando   un
datagramma deve essere diviso. Questo  puo' accadere  quando  i
datagrammi  vengono inviati attraverso una rete  per  la  quale
questi sono troppo grandi (cio' sara' discusso fra breve).
  Il  "Tempo di Vita o Time to Live" e' un numero che decresce
ogni  volta  che un datagramma passa attraverso un  sistema  di
calcolo:  quando va' a zero il datagramma viene scartato.  Esso
e'  stato  creato  nel  caso che si sviluppi  nel  sistema  una
"chiusura su stesso o loop" in qualche modo. Naturalmente  cio'
non  dovrebbe mai accadere: infatti le reti ben progettate sono
costruite per affrontare condizioni impossibili.

  A  questo  punto, e' possibile che non siano piu' necessarie
altre  intestazioni.  Se il calcolatore dispone  di  una  linea
telefonica direttamente allacciata al corrispondente, o  ad  un
gateway,  puo' semplicemente inviare i datagrammi  sulla  linea
(e'  probabile che venga impiegato un protocollo sincrono  come
HDLC , e che questo aggiunga almeno alcuni ottetti all'inizio e
alla fine).

  2.3 Il livello Ethernet

  Molte  reti  locali (LAN) oggi usano la tecnologia  Ethernet
pertanto ora si rende necessario descriverne le intestazioni.
  Sfortunatamente  Ethernet ha i propri  indirizzi.  Chi  l'ha
progettata ha voluto assicurare che nessuna macchina terminasse
con  lo  stesso  indirizzo  Ethernet ed  inoltre  che  l'utente
dovesse  eventualmente preoccuparsi di assegnarli.  Cosi'  ogni
scheda (controller) Ethernet perviene dal fabbrica costruttrice
con un indirizzo entro contenuto non sostituibile.
  Allo   scopo   di   assicurare  che  non  si   debbano   mai
riutilizzare  gli  indirizzi,  i  progettisti  Ethernet   hanno
allocato 48 bits per tale indirizzo. I costruttori di schede di
rete  devono  registrare gli indirizzi utilizzati all'autorita'
centrale  per  assicurare  che  i  numeri  assegnati   non   si
sovrappongano a quelli di altri fabbricanti.
  Ethernet  e'  un  mezzo trasmissivo:  essa  si  comporta  in
effetti  come una vecchia linea telefonica. Quando si invia  un
pacchetto  su  Ethernet,  ogni  macchina  sulla  rete  vede  il
pacchetto, percio' e' necessario un meccanismo che assicuri  la
ricezione da parte della giusta macchina. Come si puo' intuire,
questo implica una nuova intestazione: quella Ethernet.
  Ogni  pacchetto Ethernet ha una intestazione composta da  14
ottetti  che  include  l'indirizzo della  macchina  sorgente  e
destinazione,  ed il tipo di codice. Ogni macchina  si  suppone
che  presti  attenzione ai pacchetti con il  proprio  indirizzo
Ethernet  nel  campo destinazione (tra l'altro e' perfettamente
possibile imbrogliare, ed e' questa una delle ragioni  per  cui
le comunicazioni Ethernet non sono terribilmente sicure).
  Da  notare che non c'e' connessione tra l'indirizzo Ethernet
e  l'indirizzo Internet. Ogni macchina deve avere  una  tabella
delle  corrispondenze tra l'indirizzo Ethernet e  Internet  (si
descrivera' fra poco come questa tabella viene costruita).
  In  aggiunta agli indirizzi la testata contiene un codice di
tipo.  Il  codice  tipo  esiste  per  consentire  a  differenti
famiglie  di  protocolli di essere impiegate sulla stessa  rete
fisica. In questo modo si potranno usare TCP/IP, DECnet,  Xerox
NS,  etc.  allo  stesso  tempo.  Ognuno  di  loro  mettera'  un
differente valore nel campo tipo.
  Ecco  finalmente il checksum. La scheda Ethernet calcola  un
checksum dell'intero pacchetto e getta via il pacchetto  se  la
risposta discosta dall' originale. Il checksum viene messo alla
fine del pacchetto e non nella testata.


  Il risultato finale assomiglia a questo:

        ====================================================
        |Indirizzo di destinazione Ethernet ( primi 32 bit)|
        ====================================================
        |  Destinazione Ethernet |  Sorgente  Ethernet     |
        |    (ultimi 16 bit)     |   (primi 16 bits)       |
        ====================================================
        |Indirizzo Sorgente Ethernet (gli ultimi 32 bits ) |
        ====================================================
        |  Tipo di codice        |                         |
        ====================================================
        | Testata IP , poi Testata TCP, poi i dati ......  |
        |           ..... ..... .....                      |
        |                  Fine dei dati                   |
        ====================================================
        |                Checksum Ethernet                 |
        ====================================================
        
  Se  si  rappresenta  la  testata  Ethernet  con  "E",  e  il
checksum  Ethernet  con "C", l'iniziale invio  di  file  adesso
appare cosi:

   EIT....C  EIT....C  EIT....C  EIT....C  EIT....C  EIT....C

  Naturalmente, quando questi pacchetti saranno  ricevuti  dal
corrispondente, tutte le testate saranno rimosse.
  Percio'  l'interfaccia Ethernet rimuove la  propria  testata
ed  il proprio checksum; inoltre osserva il "tipo di codice"  e
se  esso  e'  stato assegnato ad IP. In tal caso il dispositivo
software che pilota la scheda Ethernet, cioe' il device driver,
passa  il datagramma su' allo strato IP che rimuove la relativa
testata  osservando  il  campo protocollo  di  IP.  Poiche'  il
"protocollo  tipo"  indica TCP, passa il  datagramma  su'  allo
strato  TCP.  A  sua volta TCP osserva il numero  di  sequenza.
Quest'ultimo   ed  altre  informazioni,  verranno   usate   per
combinare tutti i datagrammi nel file originale.

  Qui   termina  l'iniziale  sommario  su  TCP/IP.  Ci   sono,
tuttavia   ancora diversi concetti cruciali che non sono  stati
toccati,   percio'  ora  si  tornera'  indietro  ad  aggiungere
dettagli in diverse aree della trattazione.
  Per  descrizioni  dettagliate di argomenti discussi  qui  si
vedano  le RFC 793 per TCP,  RFC 791 per IP, RFC 894 e 826  per
l'invio di IP su Ethernet.

  3. Porte o Sockets e Strati  applicativi

  Fin  qui,  e' stato descritto come un flusso di  dati  viene
spezzato  in  datagrammi, inviato ad  un  altro  calcolatore  e
rimesso  insieme. Tuttavia e' necessario qualcosa di  piu'  per
realizzare una comunicazione utile.
  Cioe'  ci   deve  essere  la  possibilita'  di  aprire   una
connessione   con   uno   specifico   calcolatore,   accedervi,
indicargli  quale file si desidera ricevere e  controllarne  la
sua trasmissione.
  Puo'  venire in mente una applicazione diversa da FTP,  come
l'invio  di posta su calcolatore: ebbene e' necessario  qualche
protocollo analogo.
  Le   operazioni  appena  descritte  vengono  effettuate  dai
"protocolli applicativi". Essi operano sopra i livelli di TCP e
IP.   Cioe',   quando  gli  applicativi  vogliono  inviare   un
messaggio,  lo  danno  a  TCP  che  assicura  la  recapitazione
all'altro  capo  della  comunicazione.  Poiche'  TCP  e  IP  si
prendono  cura  di  tutti  dettagli della  rete,  i  protocolli
applicativi  possono trattare una connessione di rete  come  se
fosse  un  semplice flusso di bytes, paragonabile  a  cio'  che
accade su un terminale o una linea telefonica.

  Prima    di   addentrarsi   nei   dettagli   sui   programmi
applicativi,   e'   necessario  descrivere  come   trovare   un
applicazione.
  Si  supponga di voler inviare un file ad un calcolatore  con
l'indirizzo  Internet  "128.6.4.7". Per iniziare  il  processo,
esso   non   e'  sufficiente:  bisogna  effettuare  prima   una
connessione logica al server FTP all'altro capo. Generalmente,
  gli  applicativi di rete  sono  specializzati
per  uno specifico insieme di compiti. Molti sistemi di calcolo
hanno  programmi  separati che gestiscono trasferimento  files,
accesso remoto di terminali, posta elettronica, etc.
     Quando   ci  si  connette,  per  esempio,  alla  macchina
"128.6.4.7",  bisogna specificare che si vuole parlare  con  il
server  FTP.  Cio' si ottiene conoscendo le "porte riservate  o
sockets"  per ogni server. Da ricordare che TCP usa  numeri  di
porta  per  tenere  traccia delle conversazioni  individuali  e
pertanto  i  programmi di utenza o client, usano  piu'  o  meno
numeri  di  porta  casuali. Mentre specifici  numeri  di  porta
vengono  riservati ai programmi che sono in attesa di richieste
o server.
  Per  esempio  se  si vuole inviare un file, si  avviera'  un
programma  che  si  chiama  FTP. Esso aprira'  una  connessione
usando  per  se' alcuni numeri di porta casuali  come:  "1234".
Mentre  specifichera'  la porta numero  21  per  l'altro  capo:
questa e' la porta ufficiale riservata al server FTP.
  Da  notare  che ci sono due differenti programmi  coinvolti.
Da  una  parte  e' attivo il cliente FTP: esso e' il  programma
appositamente  creato  per  accettare  comandi  dal  terminale,
quindi dall'umano, per poi passarli all'altro capo. Dall'altra,
invece,  si  interagisce con il programma FTP  server,  che  si
trova   appunto   sulla   macchina  remota:   esso   e'   stato
appositamente  creato per accettare comandi da  connessioni  di
rete piuttosto che da terminali interattivi.
  Non  c'e'  necessita' per il programma cliente di  usare  un
numero di "porta riservato" (nell'esempio e' il numero 21)  per
se':  nessuno  lo sta' cercando. Al contrario i servers  devono
averlo, in modo che la gente possa aprire connessioni verso  di
questi e iniziare ad inviare i comandi.
  I  numeri ufficiali delle porte riservate per ogni programma
sono riassunte nel documento "Numeri Assegnati".

  Da  notare  che una connessione e' effettivamente  descritta
da un insieme di 4 numeri: l'indirizzo Internet ad ogni capo, e
il numero di porta TCP ad ogni capo.
  Ogni   datagramma   ha   tutte  e  quattro   questi   numeri
all'interno (gli indirizzi Internet sono nella testata IP, e  i
numeri  di  porta TCP sono nella testata TCP).  Allo  scopo  di
tenere   le  cose  in  ordine,  non  ci  potranno  essere   due
connessioni  che  hanno  lo  stesso  insieme  di   numeri:   e'
sufficiente essere differente di un'unita.
  Per  esempio, e' perfettamente possibile per due  differenti
utenti   sulla  stessa  macchina  inviarsi  dei  files.  Questo
potrebbe risultare in connessione con i seguenti parametri:

                         TCP             TCP
   Indirizzi Internet:   locale          remoto     Porte
      connessione 1      128.6.4.194,    128.6.4.7  1234, 21
      connessione 2      128.6.4.194,    128.6.4.7  1235, 21

  Poiche'  sono  coinvolte la stesse macchine,  gli  indirizzi
Internet  sono gli stessi e siccome stanno entrambi effettuando
un  trasferimento di files, un capo della connessione occupa la
porta riservata del server FTP. La sola cosa che differisce  e'
il  numero della porta che sta' usando per il programma utente.
Questo naturalmente fa la differenza.
  Generalmente,  almeno un capo della connessione,  chiede  al
software  di  rete di assegnargli un numero di  porta  che  sia
garantito di essere unico. Normalmente accade dal lato utente o
cliente, poiche' il server deve usare un numero riservato.

  Adesso  che  si  conosce il modo di aprire  connessioni,  si
tornera' indietro ai programmi applicativi.
  Come  menzionato  prima, una volta che  TCP  ha  aperto  una
connessione, si avra' qualcosa che potrebbe assomigliare ad  un
semplice  cavo o linea. Tutte le parti fisiche vengono  gestite
da  TCP e IP. Tuttavia e' necessario ancora qualche accordo su:
cosa inviare sulla connessione. In effetti questo e' un accordo
su  quali  insiemi  di comandi l'applicazione  capira',  ed  il
formato  che  dovra' essere usato per l'invio. Generalmente  si
tratta  di una combinazione di comandi e dati inviati  in  modo
contestuale.
  Per  esempio,  il  protocollo  per  la  posta  lavora  cosi:
l'applicativo di posta apre una connessione al server  apposito
all'altro  capo,  gli  comunica il  nome  della   macchina,  il
mittente  del messaggio, ed il destinatario al quale  si  vuole
effettuare la relativa spedizione. Poi invia un comando dicendo
che   il   messaggio  sta  per  partire.  A  quel   punto,   il
corrispondente, smette di trattare come comandi cio'  che  vede
arrivare sulla connessione ed inizia ad accettare il testo vero
e  proprio del messaggio. Terminato la trasmissione di  questo,
viene  inviato un segno speciale: un punto nella prima colonna.
Dopo  di cio', entrambi i lati, client e server, capiranno  che
il  programma sta di nuovo inviando comandi. Questa e' il  modo
piu' semplice ed anche quello che molte applicazioni usano.

  Il  trasferimento di files e' qualcosa di piu' complesso. Il
protocollo per il trasferimento di files implica due differenti
connessioni. Inizia in modo analogo alla posta.
  Il  programma utente invia comandi tipo: "Fammi entrare come
Questo  Utente", "Questa e' la mia parola chiave", "Inviami  il
file  con  Questo  Nome". Comunque una  volta  che  il  comando
d'invio  dei  dati  viene trasmesso, viene aperta  una  seconda
connessione per i soli dati. Sarebbe certamente possibile, come
fa  la  posta, inviare i dati nella stessa connessione, sebbene
il   trasferimento  di  files  spesso  impieghi  tempi  lunghi.
Tuttavia  i  progettisti  di  questo  protocollo  hanno  voluto
concedere all'utente di continuare ad inviare comandi mentre il
trasferimento e' in atto. Per esempio, l'utente puo'  fare  una
ricerca,  o puo' abbattere il trasferimento. In questo  modo  i
progettisti   hanno  sentito  che  fosse   meglio   usare   una
connessione  separata  per  i dati e  lasciare  la  connessione
originale per i comandi.
  E'  anche  possibile aprire connessioni per  comandi  a  due
differenti  calcolatori e dire loro di inviarsi  i  files  l'un
l'altro.  In  quel  caso,  i dati non possono  attraversare  la
connessione per i comandi.

  Le   connessioni   di  terminali  remoti  usano   un   altro
meccanismo  ancora. Per questa operazione c'e' una  connessione
che  normalmente  invia  dati.  Quando  e'  necessario  inviare
comandi,  per  esempio per comunicare il tipo  di  terminale  o
cambiare  alcuni  modi  di  lavoro, viene  usato  un  carattere
speciale.  Se  all'utente  capita di  digitare  quel  carattere
speciale come dati, ne saranno inviati due.

  Non   c'e'   l'intenzione   di  descrivere   il   protocollo
applicativo  nei  dettagli in questo  documento:  sara'  meglio
leggersi le RFC appropriate da soli.
  Tuttavia ci sono un paio di convenzioni comuni  usate  dalle
applicazioni che saranno qui descritte.
  Primo,  la  rappresentazione comune in rete:  TCP/IP  e'  da
intendere  usabile  su  ogni calcolatore. Sfortunatamente,  non
tutti   i  calcolatori vanno d'accordo su come rappresentare  i
dati.  Ci  sono  differenze di codici nei  caratteri,  ASCII
EBCDIC,  nelle  convenzioni di fine linea , Carriage  Return
Line  Feed,  o  rappresentazioni  che  usano  numeri,  e  se  i
terminali si aspettano caratteri da inviarsi individualmente  o
una linea alla volta.
  Allo  scopo   di permettere a calcolatori di tipo differente
di   comunicare,  ogni  protocollo  applicativo  definisce  una
rappresentazione standard.
  Da   notare   che   TCP   e   IP   non   si   curano   della
rappresentazione. TCP invia semplicemente ottetti.
  Comunque   i  programmi  agli  estremi  della  comunicazione
devono  andare d'accordo su come gli ottetti stanno per  essere
rappresentati   infatti  l'RFC  specifica  la  rappresentazione
standard   per  ogni  applicazione. Normalmente  essa  e'  "net
ASCII".  Questa usa caratteri ASCII, con il carattere  di  fine
riga  composto  da  un "Carriage Return" seguito  da  un  "Line
Feed". Per l'accesso remoto, esiste anche una definizione di un
terminale  standard, che si presenta in modo  "semiduplice  con
l'eco sulla macchina locale".
  Molte  applicazioni  danno  anche  la  possibilita'  a   due
calcolatori  di andare d'accordo su altre rappresentazioni  che
possono trovare piu' convenienti. Per esempio, il Digital  PDP10
ha  parole di  bit da 36: c'e' modo, infatti, di far andare
d'accordo due PDP-10 per l'invio di files binari a 36-bit. Alla
stessa  maniera, due sistemi che preferiscono conversazioni  di
terminali in duplice possono andare d'accordo.
  Comunque   ogni   applicazione   ha   una   rappresentazione
standard, la quale ogni macchina deve supportare.
  3.1 Un esempio di applicazione: SMTP

  Per  dare un'idea migliore di cio' che trattano i protocolli
applicativi, sara' mostrato un esempio di connessione SMTP, che
e'  il  protocollo per la posta elettronica  (  SMTP  sta'  per
"Simple Mail Transfer Protocol").
  Si  supponga  che  un utente presso il calcolatore  di  nome
TOPAZ.RUTGERS.EDU voglia inviare il seguente messaggio:

     Data: Sab, 27 giu 87 13:26:31
     Da:  hedrick@topaz.rutgers.edu
     A:  levy@red.rutgers.edu
     Oggetto: incontro

               Incontriamoci Lunedi alle tredici.

  Primo:  da  notare che il formato del messaggio e' descritto
da  Internet Standard (RFC 822). Lo standard specifica  che  il
messaggio  deve essere trasmesso con la rappresentazione   "net
ASCII" (per esempio deve essere ASCII, con Carriage Return/Line
Feed  per  delimitare la linea). Descrive  anche  la  struttura
generale, che deve essere costituita da un gruppo di  linee  in
testa  e  poi  una  linea bianca che la separa  dal  corpo  del
messaggio.  Finalmente,  descrive la sintassi  delle  linee  di
testa  in  dettaglio. Generalmente queste consistono di  parole
chiave e poi valori numerici.

  Da   notare   che  l'indirizzo  e'  indicato   nella   forma
LEVY@RED.RUTGERS.EDU.
  Inizialmente,  gli  indirizzi erano  semplicemente  "persona
presso la macchina (persona@la_macchina)", poi recenti standard
hanno reso le cose piu' flessibili.
    Ci  sono ora accorgimenti per la gestione di altri sistemi
di posta elettronica. Infatti e' possibile l'inoltro automatico
della  posta per conto di calcolatori non connessi all'Internet
(si  veda  il  protocollo  POP). Come pure  dirigere  la  posta
destinata  ad  un  certo  numero di  sistemi  verso  un  server
centrale  .  Di certo non c'e' l'esigenza che esista  un  reale
calcolatore con il nome  RED.RUTGERS.EDU. I servers dei nomi si
possono  installare  in maniera tale che si  possa  inviare  la
posta  verso  i nomi di dipartimento affinche' venga  dirottata
automaticamente al calcolatore appropriato. E' anche  possibile
che  la parte a sinistra del simbolo @ (che vuol dire "presso")
sia qualcos'altro che il nome d'utenza.
  E'  inoltre possibile che i programmi vengano installati per
processare  la  posta, gestire liste postali, e  nomi  generici
come "direttore" o "operatore".
  Il  modo  in cui il messaggio sta per essere inviato  ad  un
altro sistema di calcolo, e' descritto nella RFC 821 e 974. Il
  programma  che  sta per effettuare  l'invio,  chiede  al
server   dei  nomi  molte  indicazioni  per  determinare   dove
dirottare  il  messaggio. La prima domanda serve  per  scoprire
quale  macchina  gestisce  la posta  per  il  sistema  di  nome
RED.RUTGERS.EDU  nell'esempio.  In  questo  caso,   il   server
risponde  che  RED.RUTGERS.EDU gestisce da  se'  la  posta.  Il
client  allora chiede l'indirizzo IP di RED.RUTGERS.EDU che  e'
"128.6.4.2". Una volta ottenuto, esso  apre una connessione TCP
sulla  porta 25 presso il sistema "128.6.4.2". La porta  25  e'
riservata  e viene usata per ricevere posta. Una volta  che  la
connessione  viene effettuata, il programma inizia  ad  inviare
comandi.



  Ecco  una tipica conversazione. Ogni linea e' contrassegnata
come  se fosse proveniente da TOPAZ o RED. Da notare che  TOPAZ
ha iniziato la connessione:

 RED   220 RED.RUTGERS.EDU SMTP Service at 29  jun 87 05:17:18
TOPAZ     HELO topaz.rutges.edu
 RED   250 RED.RUTGERS.EDU - Hello,TOPAZ.RUTGERS.EDU
TOPAZ     POSTA Da:<hedrick@topaz.rutgers.edu>
 RED   250 Posta accettata
TOPAZ     RCPT  To: <levy@red.rutgers.edu>
 RED   250 Destinatario accettato
TOPAZ     DATA
 RED   354 Comincia ad immettere il testo; termina con i
           caratteri <CRLF>.<CRLF>
TOPAZ     Date : Sat, 27 Jun 87 13:26:31
TOPAZ     Da: hedrick@topaz.rutgers.edu
TOPAZ     A: levy@red.rutgers.edu
TOPAZ     Oggetto: incontro
TOPAZ
TOPAZ     Incontriamoci lunedi alle 13.00.
TOPAZ     .
 RED          250 OK
TOPAZ     QUIT
 RED     221 RED.RUTGERS.EDU Chiusura del canale di
         trasmissione in servizio

  Primo:  da  notare che tutti i comandi usano  testo  normale
che  e'  tipico  dello standard Internet. Molti dei  protocolli
usano   comandi  ASCII  standard  che  rendono  piu'   semplice
l'osservazione  di  cio' che sta succedendo e  degli  eventuali
problemi.
  Per  esempio, il programma della posta prende nota  di  ogni
conversazione e se qualcosa va storta, il  file  di  note  puo'
semplicemente essere spedito al direttore.
  (Tuttavia  alcuni nuovi protocolli sono abbastanza complessi
che non rendono pratica questa operazione. I comandi dovrebbero
avere   una   sintassi   che  richiederebbe   un   analizzatore
consistente.   Per  questo c'e' la tendenza  di  usare  formati
binari   per  i  nuovi  protocolli.  Generalmente   essi   sono
realizzati come le strutture record in linguaggio C o Pascal).
  Secondo,  c'e' da notare che tutte la risposte iniziano  con
numeri.  Anche  questo  e' tipico dei protocolli  Internet.  Le
risposte  possibili  sono  definite nel  protocollo.  I  numeri
permettono  al programma utente di rispondere senza ambiguita'.
Il  resto  delle  risposte e' testo in  modo  da  consentire  a
qualunque umano di controllare il giornale delle note e  dunque
non ha effetto sulle operazioni dei programmi (comunque c'e  un
caso in cui il protocollo usa parte del testo delle risposte).
  I   comandi  permettono  semplicemente  al  programma  della
posta  presso  un sito, di comunicare al server le informazioni
necessarie  allo  scopo di consegnare il messaggio.  In  questo
caso,  il  server  della  posta puo' ottenere  le  informazioni
osservando  il  messaggio stesso. Ma per casi  piu'  complessi,
cio' non sarebbe sicuro.
  Ogni  sessione deve iniziare con HELO, che da' il  nome  del
sistema che ha iniziato la connessione. Poi vengono specificati
il  mittente  ed  il destinatario ( ci puo' essere  piu  di  un
comando RCPT, se ci sono piu destinatari)
  Finalmente  vengono inviati i soli dati. Da  notare  che  il
testo  del  messaggio viene terminato da una  linea  contenente
esattamente un periodo (se tale linea appare nel messaggio,  il
periodo  viene  raddoppiato).  Dopo  che  il  messaggio   viene
accettato,  il  mittente puo' inviare  un  altro  messaggio,  o
terminare la sessione come nell'esempio sopra.

  Generalmente, c'e' un modello per i numeri di  risposta.  Il
protocollo  definisce  un  insieme specifico  di  risposte  che
possono  essere  inviate  ad  ogni  comando  dato.  Comunque  i
programmi  che  non vogliono analizzarle nei dettagli,  possono
osservare solo la prima cifra.
  In  generale  le risposte che cominciano con il  numero  "2"
indicano successo. Quelle che iniziano con il "3" indicano  che
alcune azioni ulteriori sono richieste, come mostrato sopra. "4
e  5"  indicano  errori. "4" e' un errore  "temporaneo",   come
capita  per il riempimento del disco (il messaggio puo'  essere
salvato  per ritentare di nuovo piu' avanti). "5" e' un  errore
permanente,  come  succede  per  un  destinatario  inesistente:
quindi  la  posta dovrebbe tornare al mittente con un messaggio
d'errore.

  Per  maggiori  dettagli  vedere i protocolli  menzionati  in
questa  sezione:  RFC  821/822 per la posta,  RFC  959  per  il
trasferimento files, e RFC 854/855 per l'accesso remoto. Per le
porte riservate, vedere l'edizione corrente di Numeri Assegnati
e possibilmente RFC 814.

  4. Altri protocolli oltre TCP: UDP e ICMP

  Fin  qui, sono state descritte solo le connessioni che usano
TCP. Si ricorda che esso e' responsabile del frazionamento  dei
messaggi in datagrammi, e del loro corretto riassemblaggio.
  Comunque  molte applicazioni generano messaggi  che  saranno
adatti  per  un singolo datagramma, per esempio per la  ricerca
del  nome  dell'host. Quando un utente tenta di effettuare  una
connessione con un altro sistema, generalmente ne specifica  il
nome, piuttosto che l'indirizzo Internet; quindi il suo sistema
deve  tradurre  quel nome in un indirizzo IP prima  che  questo
possa  agire.  Generalmente  solo pochi  calcolatori  hanno  un
database per tradurre i nomi in indirizzi, pertanto gli  utenti
faranno una richiesta a loro. Tale richiesta sara' molto  breve
e  sicuramente  si adattera' in un datagramma e cosi'  pure  la
risposta.
  Per  questo compito sembra stupido usare il TCP perche' esso
fa  molto  di  piu' che spezzare il messaggio  e  metterlo  nei
datagrammi. TCP assicura anche che i dati arrivino, rinviandoli
dove  e' necessario. Ma per una richiesta che si adatta  in  un
singolo datagramma, non serve tutta la complessita' del TCP. Se
non  si  ottiene  risposta  dopo alcuni  secondi,  la  si  puo'
chiedere  di  nuovo.  Per applicazioni  come  questa,  ci  sono
alternative al TCP.

  L'alternativa   piu'   comune   e'   UDP   ("User   Datagram
Protocol"). UDP e' stato progettato per applicazioni  dove  non
e'  necessario  mettere  sequenze di datagrammi  insieme  e  si
adatta nel sistema in modo simile a TCP.
  C'e'  una  intestazione UDP che  il software di rete  genera
all'inizio dei dati, come se mettesse una testata TCP. Poi  UDP
invia  i  dati ad IP che aggiunge una propria testata inserendo
nel  campo  "tipo di protocollo" il numero di  codice  di  UDP,
anzicche' quello di TCP.
  Comunque  UDP non e' capace di fare il lavoro di  TCP:  esso
non divide i dati in datagrammi multipli, non tiene traccia  di
cio'  che  e' stato inviato cosi' che possa essere rinviato  se
necessario.
  UDP  fornisce  solo  le porte numerate, in  modo  che  molti
programmi possano utilizzarlo immediatamente. I numeri di porta
UDP  vengono  usati come quelli TCP. Ci sono  numeri  di  porta
riservati per i server e numeri di porte casuali per i client.
  Da  notare  che la testata UDP e' piu' corta di quella  TCP.
Essa  include  i numeri di porta sorgente, destinazione,  e  il
checksum,  ma  questo  e' tutto. Non compare  alcun  numero  di
sequenza, poiche' esso non e' necessario.
  UDP  viene  usato dai protocolli che gestiscono  la  ricerca
dei nomi, ed applicazioni simili.

  Un  altro protocollo alternativo e' ICMP ("Internet  Control
Message  Protocol").  ICMP  viene usato  per  inviare  messaggi
d'errore,  ed  altri  messaggi significativi  per  il  software
TCP/IP  stesso,  piuttosto  che  alcuni  particolari  programmi
d'utente.  Per esempio, se si tenta di connettere un  host,  il
sistema   puo'   ricevere  un  messaggio  ICMP  dicendo   "Host
Irraggiungibile (host unreachable)".
  ICMP  puo'  anche  essere  usato per  scoprire  informazioni
sulla rete (si veda RFC 792 per i dettagli).
  ICMP  e'  simile ad UDP nel fatto che gestisce messaggi  che
si  adattano in un datagramma. Tuttavia e' ancora piu' semplice
di UDP. Esso non ha le porte numerate nella sua testata poiche'
tutti i messaggi ICMP vengono interpretati dal software di rete
stesso.  Quindi  non e' necessario alcun numero  di  porta  per
comunicare dove sia diretto un messaggio ICMP.

  5.  Tenere  traccia  dei  nomi  e  delle  informazioni:  "Il
sistema Domain".

  Come  indicato  prima, il software di rete  generalmente  ha
bisogno  di  un  indirizzo Internet di 32 bit  per  aprire  una
connessione o inviare datagrammi. Pero' gli utenti preferiscono
trattare con dei nomi associati a calcolatori anzicche' numeri.
Percio'  esiste un database che permette al software di cercare
un nome e di trovare il corrispondente numero di rete.
  Quando  l'Internet  era  piccola,  cio'  era  facile.   Ogni
calcolatore  aveva  un file che elencava  tutto  su  gli  altri
sistemi,  assegnando loro un nome e un numero. Adesso  ci  sono
troppi   calcolatori  perche'  questo  approccio  sia  pratico.
Percio' questi files sono stati sostituiti da un gruppo di nomi
di  servers che tengono traccia dei nomi degli hosts e dei loro
indirizzi  Internet. Infatti questi servers sono piu'  generici
rispetto ai primi sistemi e questo e' solo un esempio sul  tipo
di informazione immagazzinata nel sistema Domain.
  Da   notare   che   viene  usato  un  insieme   di   servers
intercollegati piuttosto che uno singolo e centrale.
  Ci   sono   oggi   tante  differenti  istituzioni   connesse
all'Internet  e  non sarebbe pratico per loro  notificare  all'
autorita'   centrale  nuove  installazioni   o   rimozioni   di
calcolatori.  In  questo modo l'autorita' per la  gestione  dei
nomi viene delegata individualmente alle istituzioni. I servers
dei  nomi  formano  un  albero corrispondente   alla  struttura
istituzionale ed i nomi seguono una struttura simile.
  Un   esempio  tipico  e'  il  nome  BORAX.LCS.MIT.EDU.  Esso
rappresenta un calcolatore presso il Laboratorio per la Scienza
dei  Computer  presso  il MIT. Allo scopo  di  trovare  il  suo
indirizzo  Internet, si dovrebbero consultare quattro   servers
differenti. La prima richiesta sarebbe per il server  centrale,
chiamato  "di  radice o root", per scoprire dove  si  trova  il
server   EDU.  EDU  e'  un  server  che  tiene  traccia   delle
istituzione educazionali o universitarie. Il server  di  radice
darebbe i nomi e gli indirizzi Internet di parecchi servers per
EDU  (ci  sono   molti server ad ogni livello, che garantiscono
una  certa  continuita' anche nel caso  di  avaria  di  uno  di
questi). Poi si chiederebbe ad EDU dove si trova il server  per
MIT. Di nuovo  EDU  darebbe  i nomi e gli indirizzi Internet di
molti  servers per MIT. Normalmente,  nessuno di  quei  servers
dovrebbe  essere  presso il MIT, per evitare  che  ci  sia  una
interruzione del servizio dovuta, per esempio, ad una  generale
mancanza di energia elettrica. Poi ancora si chiederebbe a  MIT
dove si trova il server LCS, e finalmente si chiederebbe ad uno
dei  server  LCS  informazioni su BORAX.  Il  risultato  finale
darebbe  l'indirizzo Internet  di BORAX.LCS.MIT.EDU. Ognuno  di
questi livelli e' un "Dominio".
  Il  nome  intero:  BORAX.LCS.MIT.EDU, e' chiamato  "Nome  di
Dominio"  (cosi'  appaiono i nomi  dei  livelli   piu  alti  di
dominio come: LCS.MIT.EDU,  MIT.EDU e EDU).

  Fortunatamente,  non  e' realmente  necessario  attraversare
tutti questi sistemi di servers.
  Prima  di  tutto i servers dei nomi di radice sono  anche  i
servers dei nomi per i domini di livello piu' alto, cosi'  come
EDU.  In  questo  modo una singola richiesta ad  un  server  di
radice condurrebbe a MIT.
  Secondo,  il software generalmente ricorda le risposte  date
precedentemente.  Cosi'  una volta  che  si  cerca  il  nome  a
LCS.MIT.EDU, il software si ricorda dove trovare i servers  per
LCS.MIT.EDU, MIT.EDU, EDU, e si ricorda anche la traduzione  di
BORAX.LCS.MIT.EDU.
  Ognuno   di questi pezzi di informazione  ha un "  Tempo  di
Vita o Time To Live" ad esso associato. Tipicamente questo vale
alcuni  giorni. Dopo di cio' l'informazione cessa e deve essere
ricercata  di  nuovo.  Questo  permette  alle  istituzioni   di
cambiare le cose.

  Il  sistema  Domain non si limita a scoprire  gli  indirizzi
Internet. Ogni nome di dominio e' un nodo nel database. Il nodo
puo'  avere  delle voci che definiscono un numero di proprieta'
differenti. Un esempio sono "gli indirizzi Internet", "tipo  di
calcolatore"  e  "una  lista  di servizi  forniti  da  un  dato
calcolatore".  Un  programma puo' chiedere  delle  informazioni
specifiche, o tutto su un dato nome.
  E'   possibile per un nodo nel database essere  segnato  con
un  "soprannome o alias" per un altro nodo. E' anche  possibile
usare  il  sistema Domain per immagazzinare informazioni  sugli
liste di utenti di posta o altri oggetti.
  Esiste uno standard Internet che definisce le operazioni  su
questi  database  ed  i  protocolli  usati  per  effettuare  le
richieste appropriate.
  Ogni  utilita'  di rete deve essere in grado  di  fare  tali
richieste,  poiche'  questo e' adesso  il  modo  ufficiale  per
risolvere   i   nomi   di  hosts.  Generalmente   le   utilita'
converseranno  con un server sulla loro rete che  si  prendera'
cura di contattare gli altri servers per loro.
  Tutto  cio' riduce l'ammontare di codice macchina  che  deve
essere presente in ogni programma applicativo.

  Il  sistema  Domain  e' particolarmente  importante  per  la
gestione  della posta. Ci sono tipi di accessi che  definiscono
quale   calcolatore  gestisce  la  posta  per  un  dato   nome,
specificano  dove un individuo puo' riceverla,  e  attivano  le
liste di posta.
  (Si  vedano  le  RFC 882, 883, e 973 per le  spccifiche  del
sistema  Domain.  RFC 974 definisce l'uso  del  sistema  Domain
nell'invio della posta).

  6. Instradamento e Rotte

  La  descrizione data qui sopra spiega che IP e' responsabile
della  consegna  dei datagrammi verso la destinazione  indicata
sull'  indirizzo,  ma  poco e' stato  detto  su  come  cio'  si
realizza.
  Il  compito  di  scoprire  come portare  i  datagrammi  alla
propria  destinazione  e' chiamato "instradamento  o  routing".
Sebbene diversi dettagli dipendono da particolari realizzazioni
software, alcune concetti generali possono essere spiegati.

  Primo,  e'  necessario capire il modello  sul  quale  IP  e'
basato. Esso presume che un sistema di calcolo sia attaccato ad
alcune reti locali. Si suppone che il calcolatore possa inviare
datagrammi ad ogni altro sistema sulla propria rete locale. Per
esempio   nel  caso  di  Ethernet,  esso  scopre  semplicemente
l'indirizzo fisico Ethernet del sistema destinatario, ed emette
il  datagramma verso di questo. Il problema esiste quando viene
chiesto  ad  un  sistema  di  inviare  un  datagramma   ad   un
calcolatore  su una rete remota, o comunque differente.  Questo
problema viene gestito e risolto da un gateway o router IP.
  Un  gateway o router e' un sistema che connette una rete con
molte  altre reti e spesso e' costituito da normali calcolatori
che hanno piu' di una interfaccia rete.
    Per esempio, si abbia una macchina Unix con due differenti
interfacce  Ethernet.  In questo modo  essa  si  connette,  per
ipotesi,  alle  reti locali 128.6.4 e 128.6.3. Questa  macchina
puo'  agire  come gateway tra queste due reti  se  il  software
viene  installato  per  inoltrare  i  datagrammi  da  una  rete
all'altra.  Cioe',  se una macchina sulla rete  locale  128.6.4
invia  un datagramma al gateway, e lo indirizza ad una macchina
sulla  rete  locale 128.6.3, questo inoltrera'   il  datagramma
alla destinazione.
  I  maggiori  centri di comunicazione spesso  hanno  gateways
che connettono un numero di reti differenti.
  In  generale  comunque,  sistemi di  gateways  specializzati
forniscono prestazioni migliori o sono piu' affidabili di altri
calcolatori generici che agiscono come tale. Infatti oggi  sono
reperibili sul mercato diverse marche di tali sistemi  detti  a
punto router o gateway.

  Il  sistema  di instradamento IP e' basato completamente sul
numero di rete dell'indirizzo destinazione. Ogni calcolatore ha
installato  una tabella di numeri di rete e per  ogni   numero,
viene  indicato  un  gateway che viene  usato  per  raggiungere
quella  rete.  Da  notare che il gateway non  deve  connettersi
direttamente  alla  rete  di  destinazione:  esso   deve   solo
rappresentare il miglior posto per raggiungerla.
  Per  esempio a Rutgers, l'interfaccia verso NSFnet e' presso
il Centro Supercomputer John von Neuman (JvNC) e la connessione
per JvNC avviene attraverso una linea seriale ad alta velocita'
connessa ad un gateway con l'indirizzo 128.6.3.12 . Il  sistema
sulla rete 128.6.3 indichera' 128.6.3.12 come gateway per molte
reti  al  di fuori del campus universitario. Mentre il  sistema
sulla rete 128.6.4 indichera' 128.6.4.1 come gateway per quelle
stesse reti al di fuori del campus. Poiche' 128.6.4.1 e'  anche
il  gateway tra le reti 128.6.4 e 128.6.3, questo e'  il  primo
passo  per raggiungere JvNC.

  Per la comprensione dell'esempio sopra descritto si veda  lo
schizzo qui sotto.


                                      |-----|      |-----|
                                      |-----|      |-----|
                                         !!           !!
                                         !!           !! 128.6.4
                                     |----+-----------+------+----|
                                                             !! .1
                            linea seriale alta velocita'     !!
^^^^^^^         ------------                                 !!
/  NFS  \<======|    JvNC    |--------/\                      !!
\  net  /        ------------           \---------+           !!
-------                                      |---|---|   |---+---|
                                             |   G   |   |   G   |
                                             |-------|   |-------|
                                                 !!          !!
                                            .12  !!          !!
                                            |-----+-----------+---|
                                                   128.6.3



  Quando  un  calcolatore vuole inviare un  datagramma,  prima
controlla  se  l'indirizzo IP di destinazione e' sulla  propria
rete  locale.  Se  cosi,  il  datagramma  puo'  essere  inviato
direttamente.  Altrimenti, il sistema  aspetta  di  trovare  un
accesso   per   la  rete  a  cui  appartiene  l'indirizzo.   Il
datagramma,  dunque,  viene  inviato  al  router  indicato  per
quell'accesso.  Queste informazioni si trovano in  una  tabella
(tabella delle rotte) che puo' essere abbastanza grande.
  Per  esempio oggi l'Internet include parecchie centinaia  di
singole  reti  e percio' si stanno sviluppando varie  strategie
per ridurre la grandezza delle tabelle di routing.
  Una   strategia   e'  quella  di  dipendere   dalla   "rotta
predefinita o default".
  Spesso  c'e'  solo  un  gateway  che  puo'  connettere   una
Ethernet locale ad una rete dorsale geografica (WAN).  In  quel
caso,  non c'e' bisogno di avere un accesso separato  per  ogni
rete  nel  mondo. Si definisce semplicemente quel gateway  come
"default". Quando per un datagramma non viene trovata una rotta
specifica,   questo  viene  inviato  al  gateway  di   default.
Quest'ultimo  puo'  anche essere usato  quando  ci  sono  molti
gateway su una rete.
  Ci  sono  degli accorgimenti  per cui i gateways inviano  un
messaggio  dicendo "non sono il migliore gateway -  usa  questo
invece"  (Il  messaggio viene inviato via ICMP;   si  veda  RFC
792).  Molto software di rete viene progettato per usare questi
messaggi  ICMP  allo scopo di aggiungere voci di  accesso  alla
loro tabella di instradamento.
  Si  immagini  per  esempio che la  rete  128.6.4  abbia  due
gateways, 128.6.4.59 e 128.6.4.1 . Il primo conduce a parecchie
altre   reti   interne   di   Rutgers.   Il   secondo   conduce
indirettamente  alla  rete  NSF.  Si  supponga  di   installare
128.6.4.59 come gateway di default, e che non si abbiano  altre
voci nella tabella delle rotte. Ora cosa accade quando si invia
un datagramma verso MIT, che e' la rete 18? Poiche' non ci sono
voci per la rete 18, il datagramma sara' inviato al gateway  di
default  128.6.4.59. Come previsto, questo  gateway  e'  quello
sbagliato.  Cosi  verra'   inoltrato  il  datagramma  verso  il
secondo,  cioe' 128.6.4.1 . Ma ritornera' un errore dicendo  in
effetti:  "per  raggiungere la rete 18 usa  il  router  con  il
numero   IP   128.6.4.1".   Il  software   aggiungera'   quella
informazione  alla  tabella delle rotte e qualsiasi  datagramma
successivo  diretto  verso MIT andra'  allora  direttamente  al
router  128.6.4.1 (il messaggio di errore viene inviato  usando
il  protocollo ICMP. Il tipo di messaggio viene chiamato  "ICMP
redirect ").

  Per la comprensione dell'esempio sopra descritto si veda  lo
schizzo qui sotto.

                                                             
   ^^^^^^^                                                   --^^--
 /         \         / \                                   /        \
/    NFS    \<----  /   \     |-------|    |-------|      /          \
\    net    /            \----|   G   |    |   G   |=====>  Rutgers  |       
 \        /                   |-------|    |-------|      \          /
  --------                        !!            !!           -------  
                               .1 !!            !! .59
                             |----+-------------+-----|
                                       
                                       128.6.4
                                                   


  Molti   esperti   di  IP  raccomandano  che  i   calcolatori
individualmente  non  dovrebbero  tentare  di  tenere   traccia
dell'intera  rete.  Invece,  essi dovrebbero  iniziare  con  un
gateway di default e lasciare che questo indichi loro le rotte,
proprio come descritto sopra.
  Comunque questo non dice come i gateways scoprono le rotte. I
  gateways  non possono dipendere da questa  strategia,  ma
devono  avere una tabella di instradamento abbastanza completa.
A tale scopo, e' necessario qualche sorta di protocollo.
  In   particolare   un  protocollo  per  l'instradamento   e'
semplicemente una tecnica utilizzata dai gateways per scoprirsi
l'un  l'altro  e  prendere  nota  della  maniera  migliore  per
raggiungere la via per ogni rete.
  L'RFC  1009  contiene una rivista di progetto di gateways  e
relative  rotte; e il documento "rip.doc" (non disponibile  per
ora)  e'  probabilmente la migliore introduzione all'argomento.
Esso  contiene  del  materiale istruttivo ed  una  discussione;
inoltre  contiene  descrizioni dettagliate  sui  protocolli  di
instradamento piu' comunemente usati.

  7.   Dettagli   sugli   indirizzi  Internet:   sottoreti   e
broadcasting

  Come  indicato prima, gli indirizzi Internet sono  numeri  a
32  bit,  normalmente scritti come quattro ottetti in notazione
decimale, nella forma "128 . 6 . 4 . 7".
  Ci  sono effettivamente tre tipi differenti di indirizzi. Il
problema  e'  che l'indirizzo deve indicare sia   la  rete  che
l'host, all'interno dell'internet.
  Si  senti' che ci sarebbero state molte reti e molte di loro
sarebbero  state  di piccole dimensioni. Probabilmente  24  bit
sarebbero stati necessari per rappresentare tutta la  rete  IP.
Si senti' inoltre, che alcune reti molto grandi avrebbero avuto
bisogno  di  24 bit per rappresentare tutti i loro hosts.  Cio'
avrebbe  condotto ad un indirizzo di 48 bit. Ma  i  progettisti
vollero  usare  decisamente  un indirizzo  a  32  bit  e  cosi'
escogitarono un trucco.
  Si  assunse  che  molte delle reti sono piccole  percio'  si
predisposero tre differenti spazi di indirizzo.
  Gli  indirizzi che iniziano con 1 fino a 126  usano  solo  i
primi  otto  bit  per il numero di rete o netid.  Gli  altri  3
ottetti sono disponibili per i numeri di hosts e cosi'  24  bit
si  rendono disponibili. Tali numeri IP vengono usati per  reti
piu' grandi. Ma ci possono essere solo 126 di queste reti molto
grandi.   Arpanet  e'  una,  e  ci  sono  anche   alcune   reti
commerciali. Ma poche organizzazioni  normali ottengono  questi
indirizzi di "classe A".
  Per  organizzazioni normalmente grandi sono usati  indirizzi
di  "classe B". Essi usano i primi due ottetti per il numero di
rete che vanno da 128.1 fino 191.254 (si evita lo zero e il 255
per  ragioni  che  si vedranno  fra poco. Si  eviteranno  anche
indirizzi  che  iniziano per 127, perche' e'  usato  da  alcuni
sistemi  per scopi speciali). Gli ultimi due ottetti, cioe'  16
bit,  rimangono  disponibili per gli indirizzi  di  host.  Cio'
permette  di  numerare fino a 64516 calcolatori che  dovrebbero
essere   abbastanza  per  molte  organizzazioni  (e'  possibile
ottenere piu' indirizzi in classe B, se si eccede tale limite).
  Finalmente  gli indirizzi di "classe C" usano  tre  ottetti,
nel  campo  tra 192.1.1 fino 223.254.254. Questi permettono  di
numerare  fino a 254 hosts in ogni rete,  ma ci possono  essere
molte di queste reti.
  Gli  indirizzi  al  di sopra di 223 sono  riservati  ad  usi
futuri come le "classi D ed E".

  Molte grandi organizzazioni trovano conveniente dividere  la
loro  rete in "sottoreti o subnets". Per esempio, a Rutgers  e'
stato  assegnato un indirizzo di classe B, 128.6. Noi  troviamo
conveniente usare il terzo ottetto dell'indirizzo per  indicare
quale  host  e'  sull'Ethernet  locale.  La  divisione  non  ha
significato  fuori da Rutgers. Un calcolatore  presso  un'altra
istituzione  tratterebbe  tutti  i  datagrammi  indirizzati  al
numero   di  rete  128.6  nella  stessa  maniera.  Questi   non
osserverebbero  il  terzo  ottetto  dell"indirizzo.   Cosi'   i
calcolatori  al  di  fuori  di  Rutgers  non  avrebbero   rotte
differenti  per  i  numeri 128.6.4 o 128.6.5,  ma  dentro,  noi
tratteremo questi ultimi come due reti separati. In  effetti  i
gateways  dentro  Rutgers  hanno  accessi  separati  per   ogni
sottorete,  invece  i gateways al di fuori  di   Rutgers  hanno
appena un accesso per la rete 128.6. Da notare che si puo' fare
esattamente la stessa cosa con un indirizzo separato di "classe
C" per ogni ethernet locale.
  Per  quanto riguarda Rutgers, sarebbe conveniente  avere  un
certo  numero  di  indirizzi classe C. Ma  usando  quest'ultimi
sarebbe  sconveniente per il resto del mondo. Ogni  istituzione
che  volesse  contattare Rutgers dovrebbe  avere  una  voce  di
accesso  per ognuna  delle sue reti locali. Se ogni istituzione
lo facesse, ci sarebbero troppe reti perche' ogni gateway possa
tenere  ragionevolmente traccia di queste. Suddividendo  invece
una  rete  di  classe B in sottoreti, si nasconde la  struttura
interna  da  tutti gli altri, e si risparmiera'  al  resto  del
mondo dei problemi.
  Questa    strategia    di   sottorete   richiede    speciali
accorgimenti per il software di rete.
  Tutto cio' e' descritto nell' RFC 950.
  0  e  255  hanno  significati speciali. 0 e' riservato  alle
macchine  che  non  conoscono  il  loro  indirizzo.  In   certe
circostanze  e' possibile per una macchina non  sapere  su  che
rete  si trova, o non sapere anche il numero del suo host.  Per
esempio, 0.0.0.23 sarebbe una macchina che sa di essere  l'host
numero 23, ma non  sa su quale rete.

  255   viene  usato  per  messaggi  "broadcast".  Essi   sono
messaggi  che  si  vuole che veda ogni sistema  sulla  rete.  I
broadcasts sono usati in alcune situazioni dove non si sa'  con
chi si sta parlando.
  Per  esempio si supponga di avere necessita' di  cercare  un
nome  di  host  e si riceva il suo numero di Internet.  Qualche
volta  non  si  conosce l'indirizzo del server  dei  nomi  piu'
vicino.  In  quel  caso  si  puo'  inviare  la  richiesta  come
broadcast.  Ci sono anche casi dove un numero di  sistemi  sono
interessati  all'informazione.  E poi meno dispendioso  inviare
un   singolo   messaggio  broadcast  che   inviare   datagrammi
individualmente    ad   ogni   host   che    e'     interessato
all'informazione. Per inviare un broadcast si usa un  indirizzo
costituito dall'indirizzo di rete, completo nella parte netid o
di rete e tutti "1" nella parte host.
  Per  esempio  se  si  e' sulla rete 128.6.4  ,  si  userebbe
128.6.4.255   come  indirizzo  broadcast.   Come   cio'   viene
effettivamente realizzato dipende dal mezzo. Non e'   possibile
per  esempio inviare messaggi broadcast su Arpanet,  o  su  una
linea  punto  a  punto. Tuttavia cio' e' possibile  sulle  reti
ethernet. Se si usa un indirizzo ethernet con tutti i suoi  bit
(FF:FF:FF:FF:FF:FF), ogni macchina osservera' quel datagramma.

  Sebbene  l'indirizzo ufficiale broadcast per la rete 128.6.4
e' oggi 128.6.4.255, ci sono alcuni altri indirizzi che possono
essere    trattati    come    broadcasts    attraverso    certe
implementazioni software.
  Per   convenienza  lo  standard  permette  di  usare   anche
255.255.255.255 . Questo si riferisce a tutti gli  hosts  sulla
rete  locale.  E'  spesso piu' semplice  usare  255.255.255.255
invece  di  scoprire il numero di rete della LAN e  formare  un
indirizzo broadcast come 128.6.4.255.
  Certe vecchie implementazioni possono usare 0 invece di  255
per  formare  l'indirizzo  broadcast  percio'  esse  userebbero
128.6.4.0 invece di 128.6.4.255 come indirizzo broadcast  sulla
rete 128.6.4.
  Ci   possono  essere  vecchie  realizzazioni  software   che
potrebbero  non comprendere le sottoreti. In questo  modo  esse
considererebbero  il  numero  di rete  128.6  dell'esempio  qui
sopra,  anzicche' 128.6.4. In quel caso, queste supporranno  un
indirizzo broadcast 128.6.255.255 oppure 128.6.0.0.
  Se  il  supporto per i messaggi broadcast viene implementato
in  maniera scorretta, puo' essere una caratteristica piuttosto
pericolosa per la rete.

  Poiche'   0   e  255  vengono  usati  rispettivamente   come
indirizzo:  sconosciuto e broadcasts, agli  hosts  normali  non
dovrebbero essere mai assegnati indirizzi contenenti 0  e  255.
Inoltre gli indirizzi non dovrebbero mai iniziare con 0 ,  127,
o nessun'altro numero al di sopra di 223.
  Gli  indirizzi che violano queste regole sono qualche  volta
indicati  come "marziani" (ci sono delle dicerie  in  giro  che
l'universita' centrale di Mars stia usando la rete 225 !!).

  8. Frammentazione e riassemblaggio di datagrammi

  TCP/IP   e'  stato  progettato  per  l'uso  su  molti   tipi
differenti  di  reti.  Sfortunatamente i progettisti  non  sono
d'accordo  su  quanto grandi i pacchetti  possano  essere.  Per
esempio  i pacchetti delle reti Ethernet possono essere  lunghi
1500  ottetti. Invece, i pacchetti Arpanet hanno un massimo  di
circa  1000  ottetti.  Mentre alcune reti  molto  veloci  hanno
misure di pacchetti piu' grandi.
     Inizialmente   si  potrebbe  pensare  che   IP   dovrebbe
semplicemente  scegliere  la  misura  piu'  piccola  possibile.
Sfortunatamente, cio' causerebbe seri problemi  in  termini  di
prestazioni.
  Per  esempio  nel  trasferimento di grossi files,  pacchetti
grandi sono molto piu' efficienti che piccoli. Dunque si  vuole
essere  in  grado  di  usare pacchetti di  misura  piu'  grande
possibile.  Si vuole anche essere in grado di gestire  le  reti
fisiche limitate in questo senso. Ci sono due possibilita'  per
raggiungere lo scopo.
  Primo,  TCP  ha la capacita' di "negoziare" sulla  grandezza
del  datagramma: quando una connessione TCP inizia, entrambi  i
capi  della comunicazione possono inviare la massima  grandezza
per  datagramma che sia loro possibile gestire. Il piu' piccolo
di   questi   numeri  viene  poi  usato  per  il  resto   della
connessione.  Questo meccanismo permette a due  implementazioni
TCP diverse di gestire grossi datagrammi, ma contemporaneamente
permette loro di conversare con implementazioni limitate.
  Tuttavia  cio'  non risolve interamente il problema.  Quello
piu'  serio  e'  che  un capo della comunicazione  non  conosce
proprio tutto sulle azioni intraprese dall'altro e viceversa.
  Per  esempio,  quando  i calcolatori sulle  reti  locali  di
Rutgers  e Berkeley si inviano dati, e' probabile che siano  su
rete  Ethernet. In questo modo essi saranno preparati a gestire
datagrammi  da  1500  ottetti.  Ma  ad  a  un  certo  punto  la
connessione  potrebbe  cadere  per  poi  riprendere  attraverso
Arpanet. Questa non puo' gestire pacchetti di quella grandezza.
Per  questa  ragione  esistono dei meccanismi  per  spezzare  i
datagrammi in pezzi: ci si riferisce alla "frammentazione".
  La  testata IP contiene campi indicanti che il datagramma e'
stato  diviso,  e  sufficienti informazioni che  permettono  ai
pezzi di essere rimessi insieme.
  Se   un  gateway  connette  una  rete  locale  Ethernet  via
Arpanet,  deve  essere preparato a ricevere pacchetti  da  1500
ottetti provenienti dalla LAN Ethernet e dividerli in pezzi che
saranno  adatti poi per il tragitto su Arpanet.  Inoltre   ogni
implementazione  di  host  TCP/IP  deve  essere  preparata   ad
accettare  pezzi  e  rimetterli insieme.  Ci  si  riferisce  al
"riassemblaggio".

  Le  realizzazioni  TCP/IP  differiscono  nell'approccio  che
esse  hanno  per  decidere sulla grandezza del  datagramma.  E'
piuttosto   comune,   per   le  varie  implementazioni,   usare
datagrammi  da 576 byte tutte le volte che queste  non  possono
verificare  che l'intero tragitto, attraverso la rete,  sia  in
grado  di  gestire  pacchetti piu'  grandi.  Questa  strategia,
piuttosto conservativa, viene usata perche' un certo numero  di
implementazioni ha dei malfunzionamenti (bachi) nel  codice  di
riassemblaggio dei frammenti.
  Gli  implementatori spesso tentano di evitare che accada  la
frammentazione.  Differenti implementatori prendono  differenti
approcci nel decidere quando e' sicuro usare grossi datagrammi.
Alcuni  li  usano  solo per reti locali altri li  useranno  per
qualsiasi rete sulla stessa zona.
  576   bytes  e'  una  grandezza  "sicura",  la  quale   ogni
implementazione deve supportare.

  9. Incapsulazione Ethernet: ARP

  C'e'  stata una breve discussione prima, su come appaiono  i
datagrammi  IP su rete fisica Ethernet. Infatti la  discussione
ha mostrato la testata Ethernet ed il checksum.
  Tuttavia   non  e'  abbastanza:  come  scoprire  l'indirizzo
Ethernet di un dato corrispondente Internet sulla propria  rete
locale?  Per risolvere cio' esiste un protocollo separato,  che
si chiama ARP ("Address Resolution Protocol").
  Da  notare a proposito che ARP non si appoggia su IP,  cioe'
i datagrammi ARP non hanno testata IP.
  Si  supponga  di  essere sul calcolatore  128.6.4.194  e  di
voler  connettere  il sistema 128.6.4.7. Il  calcolatore  prima
verifichera' che 128.6.4.7 sia sulla stessa rete fisica,  cosi'
da   interloquire  direttamente  via  Ethernet.  Poi  cerchera'
128.6.4.7  nella propria tabella ARP, per vedere se ne  conosce
gia'  l'indirizzo fisico. Se cosi, si introdurra' nella testata
Ethernet,  e  inviera'  il pacchetto. Ma  si  supponga  che  il
corrispondente  non sia nella tabella ARP:  non  c'e'  modo  di
inviare il pacchetto, perche' e' necessario l'indirizzo  fisico
del  mezzo  trasmissivo (Ethernet). Per cio' il primo  computer
usa il protocollo ARP per inviare una richiesta. Essenzialmente
una richiesta ARP dice: "ho bisogno dell'indirizzo ethernet del
sistema  128.6.4.7". Ogni calcolatore sulla rete locale ascolta
la richiesta ARP.
    Quando  un  sistema vede una richiesta ARP  indirizzata  a
se', e' previsto che risponda.
  Cosi'   il   sistema  128.6.4.7.  vedra'  la  richiesta,   e
rispondera' con una risposta ARP dicendo in effetti: "128.6.4.7
e'  il  nodo  ethernet  8:0:20:1:56:34"  (si  ricordi  che  gli
indirizzi  Ethernet sono composti di 48 bit, cioe'  6  ottetti.
Essi    vengono   convenzionalmente   mostrati   in   notazione
esadecimale,  utilizzando  la  punteggiatura  dell'esempio  qui
sopra). Quindi il sistema registrera' questa informazione nella
sua tabella ARP, e i pacchetti successivi andranno direttamente
al  corrispondente, senza l'impiego di ARP e  di  comunicazioni
broadcast.
  Molti  sistemi  tengono la tabella ARP  riposta  in  memoria
(cache), e ne ripuliscono le voci all'interno se non sono state
usate per un certo periodo di tempo.

  Da  notare  in proposito che le richieste ARP devono  essere
inviate come "broadcasts". Non c'e' modo che una richiesta  ARP
possa  essere  inviata  direttamente al  sistema  giusto.  Dopo
tutto,  la ragione per l'invio di una richiesta ARP e' che  non
si conosce l'indirizzo fisico Ethernet.
  Cosi'   viene  usato  un  indirizzo  di  tutti  "1",   cioe'
"FF:FF:FF:FF:FF:FF". Per convenzione, ad ogni   macchina  sulla
rete  Ethernet e' richiesto di prestare attenzione ai pacchetti
con  tale  indirizzo. Percio' ogni sistema vede ogni  richiesta
ARP.  Quindi  tutti  i  sistemi cercheranno  di  capire  se  la
richiesta  riguarda  il  proprio  indirizzo.  Se  cosi',   essi
risponderanno.  Se  no,  essi possono ignorarlo  (alcuni  hosts
useranno  le  richieste ARP per registrare la  loro  conoscenza
sulla rete, anche se la richiesta non e' indirizzata a loro).
  Da  notare  che  i pacchetti IP che indicano broadcast,  per
esempio: 255.255.255.255 o 128.6.4.255, vengono inviati con  un
indirizzo Ethernet formato da tutti "1".

  10. Per ottenere maggiori informazioni

  Questo  spazio  contiene una descrizione dei  documenti  che
descrivono   i   maggiori  protocolli.  Ci  sono  letteralmente
centinaia  di  documenti, cosi' sono stati  scelti  quelli  che
sembrano piu' importanti.
  Gli  standards  si  chiamano RFC che sta'  per  Request  For
Comment.  Uno standard  RFC viene inizialmente pubblicato  come
proposta,  e gli viene dato un numero. Quando viene  finalmente
accettato,   esso   viene  aggiunto  ai  Protocolli   Ufficiali
Internet, ma ci si riferisce ancora con il numero RFC.
  Sono  stati  inclusi anche due documenti IEN.  Essi  vengono
usati  per fare una classificazione separata su documenti  piu'
informali. Questa classificazione, pero', non esiste piu' da un
po':  RFC  viene  usato adesso per tutti i  documenti  Internet
ufficiali, e al posto di IEN viene impiegata una lista  postale
per inviare le relazioni piu' informali.
  La  convenzione  e'  che quando una RFC  viene  rivista,  la
versione  ottenuta  prende  un  numero  nuovo.  Questo  e'   un
approccio positivo per molti scopi, ma causa anche dei problemi
con  due  documenti:  Numeri Assegnati, e  Protocolli  Internet
Ufficiali. Essi vengono rivisti di continuo, cosi' il numero di
RFC rispecchiera' i cambiamenti.
  Si  dovrebbe guardare l'indice nel file "rfc-index.txt"  per
trovare il numero dell'ultima edizione.

  Chiunque  sia  seriamente  interessato  al  TCP/IP  dovrebbe
leggere  l'RFC 791 che descrive IP. L'RFC 1009 e'  pure  utile.
Essa e' la specifica per i gateway da impiegare su NFSnet. Come
tale,  essa contiene una rivista di gran parte della tecnologia
TCP/IP.  Si dovrebbe probabilmente leggere anche la descrizione
di  almeno  uno  dei protocolli applicativi, giusto  per  avere
un'idea  di  come le cose funzionino. La posta e' probabilmente
un  buona   esempio  (RFC 821, 822). Quella sul  TCP,  793,  e'
naturalmente una specifica basilare.
  Tuttavia le specifiche sono piuttosto complesse, percio'  si
dovrebbe leggerle solo quando si ha il tempo e la pazienza  per
farlo  attentamente.  Fortunatamente,  l'autore  della  maggior
parte  delle  RFC,  Jon Postel, e' uno scrittore  molto  buono.
Comunque l'RFC su TCP e' molto piu' facile da leggere di quanto
ci  si  aspetti,  data la complessita' della materia  che  essa
descrive.
  Si  puo' comunque dare una occhiata alle altre RFC man  mano
che si diventa curiosi sull'argomento che esse trattano.

  Ecco    una    lista   dei   documenti   che   probabilmente
interesseranno:

  Il file "rfc-index.txt" elenca tutte le RFC.

 rfc1012   Lista piuttosto piena di tutte le RFC
 rfc1011   Protocolli  Ufficiali.  E'  utile  scorrere  questo
         documento  per  vedere   lo scopo per  cui  e'  stato
         creato  un  determinato protocollo. Questa  definisce
         inoltre   quali   RFC   sono   effettivamente   degli
         Standards,   differentemente   dalle   richieste   di
         commento.
 rfc1010   Numeri  Assegnati. Se si sta lavorando con  TCP/IP,
         probabilmente si desiderera' una copia  su  carta  di
         questo  documento.  Esso non e' molto  avvincente  da
         leggere  poiche'  elenca  tutte  le  porte  (sockets)
         riservate definite e molte altre cose.
 rfc1009   Specifiche  per gateway NFSnet. Una  buona  rivista
         sulla tecnologia  di instradamento IP e i gateways.
 rfc1001/2  netBIOS: reti per PC.
 rfc973  Aggiornamento su Domain
 rfc959  FTP (trasferimento di file)
 rfc950  Sottoreti
 rfc937  POP2: protocollo per la lettura della posta  su PC.
 rfc894  Come IP viene immesso su Ethernet,si veda anche rfc825
 rfc882/3   Domains ( il database usato per tradurre da nome di
         host a indirizzo Internet e ritorno; viene usato anche
 per gestire UUCP oggi). Si veda anche rfc973.
 rfc854/5  Telnet - protocollo per accessi remoti.
 rfc826  ARP  -  protocollo  per  scoprire  l'indirizzo Ethernet
 rfc821/2    Mail
 rfc814  Nomi  e  porte - concetti generali dietro le porte
         riservate (sockets).
 rfc793  TCP
 rfc792  ICMP
 rfc791  IP
 rfc768  UDP

 rip.doc  Dettagli sulla maggior parte dei protocolli di instradamento

 ien-116  Vecchi server dei nomi (ancora  necessari a parecchi
          tipi di sistemi)
 ien-48   Il  modello Catenet, descrizione generale della
         filosofia del TCP/IP



  I seguenti documenti sono piu' specializzati.

  rfc813  Strategie della finestra e della conferma in TCP
  rfc815  Tecnica di riassemblaggio dei datagrammi
  rfc816  Isolamento delle avarie e tecnica di risoluzione
  rfc817  Modularita' ed efficienza nelle implementazioni software
  rfc879  L'opzione della massima grandezza del segmento in TCP
  rfc896  Controllo della congestione
  rfc827, 888, 904, 975, 985   EGP e pubblicazioni relative
                               
  Per   quelli  che possono consultare in modo  remoto  questo
documento anzicche' qui' a Rutgers:
  I  documenti RFC piu' importanti sono stati raccolti  in  un
gruppo  di  tre  volumi  - DDN Protocol  Handbook  -.  Esso  e'
disponibile  presso  il NIC del DDN ,  SRI  International,  333
Ravenswood Avenue, Menlo Park, California 94025 (telefono: 800
235-3155).  Si dovrebbe comunque essere in grado di  prelevarli
via anonymous FTP dal sito sri-nic.arpa. I File sono:

    RFC's:
      rfc:rfc-index.txt
      rfc:rfcxxx.txt
    IEN's:
      ien:ien-index.txt
      ien:ien-xxx.txt

  rip.doc   e'  disponibile  via  anonymous   FTP   dal   sito
topaz.rutgers.edu,  come  /pub/tcp-ip-docs/rip.doc.

  I  siti  con accesso alla rete UUCP, e quindi che non  hanno
la  possibilita'  di fare FTP, dovrebbero essere  in  grado  di
prelevarli via UUCP dall'host UUCP di Rutgers. I nomi di  files
sono:

    RFC's:
      /topaz/pub/pub/tcp-ip-docs/rfc-index.txt
      /topaz/pub/pub/tcp-ip-docs/rfcxxx.txt
    IEN's:
      /topaz/pub/pub/tcp-ip-docs/ien-index.txt
      /topaz/pub/pub/tcp-ip-docs/ien-xxx.txt /topaz/pub/pub/tcp-
      ip-docs/rip.doc
      
  Da  notare che l'ente SRI-NIC ha tutte le RFC e IEN,  mentre
rutgers e topaz hanno solo quelli menzionati di sopra.




                   _______________________________



.

Copyright © 2000-2024 - Antonio DIMASI - Ruolo d'Onore dell'ARI nr. 1099 - ® Webmaster iv3ium
Torna ai contenuti