Quarto Articolo



		      TCP/IP, protocolli ed altri misteri

							      Parte 4


	Il TRASPORTO

      Nelle puntate precedenti abbiamo parlato pi—  volte di "funzioni
      di trasporto" attive da un  capo all'altro  di una  rete (End-to
      end).  Il TCP Š appunto il livello  che si  occupa del trasporto
      nelle reti TCP/IP.

      Per capire a fondo il TCP credo sia meglio parlare  prima di OSI
      e del suo quarto  livello, per  poi vedere  le somiglianze  e le
      differenze col  TCP.  Non  bisogna dimenticare,  infatti, che il
      TCP/IP Š il passato.  Il futuro si chiama OSI.

	 Prima  di esaminare  il Trasporto  secondo OSI  e secondo TCP
      rivediamo   i concetti   fondamentali su   cui  il   modello  di
      riferimento OSI poggia: solo cos saremo in  grado di inquadrare
      giustamente  le varie  funzioni ed  il modo  in cui   sono state
      realizzate.



	 OSI

      OSI st… per Open System Interconnection.  L'OSI  ha costruito un
      "Modello  di   Riferimento"  su   come  devono    funzionare  le
      comunicazioni  fra  computer  eterogenei  organizzato  in  sette
      livelli.  Ma perchŠ proprio sette livelli ?  ...   non lo  so di
      preciso, ma sicuramente 7 Š un numero  magico.  La  cosa certa Š
      che la comunicazione fra computer Š una cosa molto complicata ed
      il  cervello umano  ha delle   limitazioni sue   intrinseche nel
      trattare problemi complessi: l'unica via di  fuga consiste nello
      spezzare i  problemi complessi  in sottoproblemi  ed affrontarli
      uno alla volta.  Pare infatti che per il cervello umano valga la
      legge del " 4 + o - 3".  I cervelli pi— dotati sono  in grado di
      analizzare  problemi che  al massimo  hanno 7   (4+3) componenti
      indipendenti; un  cervello medio  riesce a  cavarsela al massimo
      con  3 o  4 componenti   contemporanee.  Gli   altri, fortunati,
      vivono felici  e senza  dubbi ragionando  su una  sola cosa alla
      volta.  Da qu si capisce anche il problema che esiste coi Dieci
      Comandamenti   e del   perchŠ si   tende sempre   a dimenticarne
      qualcuno.

	 Quindi l'OSI  ha individuato  7 funzioni  fondamentali per la
      comunicazione fra computer.  Di queste 7 funzioni, o  livelli, i
      primi quattro riguardano le comunicazioni vere e proprie, mentre
      i livelli dal 5 al 7 si occupano di problematiche  pi— vicine ai
      sistemi  operativi ed  al modo   in cui   i dati   sono trattati
      all'interno   di   computer   con   architetture   diverse.   La
      definizione dettagliata di questi livelli non Š ancora del tutto
      terminata:  attualmente   i  lavori   dei  varii    comitati  di
      standardizazione si stanno occupando del livello 7.

      Gi… tutti sanno che il livello fisico, (1),  Š quello incaricato
      della connessione elettrica con la rete.  PoichŠ  di reti  ce ne
      sono di tantissimi tipi  Š ovvio  che anche  di livelli  1 ce ne
      sono altrettanti.  L'accesso ad una rete locale in  fibra ottica
      FDDI Š certamente molto diverso dall'accesso  alla rete pubblica
      mondiale X.25.  Le problematiche per la trasmissione  via Packet
      Radio  sono  diverse  da  quelle  per  la  trasmissione  su cavo
      coassiale  Ethernet.    I  varii    livelli  1    descrivono  il
      funzionamento fisico ed elettrico per interfacciare  le reti cui
      si riferiscono.

      Anche del livello 2 si Š  gia' molto  parlato.  Il  livello 2 si
      occupa  di   individuare  e   correggere  eventuali   errori  di
      trasmissione  dovuti al  rumore o  ad  altre  cause,  tratta per
      tratta, cioŠ fra un nodo e l'altro della  rete.  In  alcuni casi
      al livello 2  si fa  fare qualcosa  in pi—  quando, per esempio,
      occorre  anche conquistarsi  il canale   su cui   trasmettere: Š
      appunto l'esempio del  packet radio  ed in  generale dei sistemi
      CSMA (Carrier Sense Mulptiple Access) in  cui ci  sono opportune
      procedure  per accedere  al canale.   In  questi  casi  si suole
      pensare   il livello   2 diviso   in due   sottolivelli:  quello
      inferiore  si occupa,  appunto, dell'accesso  al  canale, quello
      superiore si  incarica di  scoprire e  correggere gli  errori di
      trasmissione.  Anche per il livello 2 vale il fatto che esistono
      varie implementazioni in funzione del tipo di rete su cui devono
      lavorare.

      L'AX.25 Š prorio un livello  2 a  funzione doppia:  un metodo di
      accesso al canale radio con le sue regole di  monitoraggio della
      portante  e  ritrasmissione  con  un  ritardo  casuale  dopo una
      collisione, ed un metodo  di correzione  degli errori  dovuti al
      rumore o all'interferenza.

      Dei livelli 3 ne abbiamo gi… parlato in abbondanda nelle puntate
      precedenti.  Il  demone di  livello 3  si occupa  di ottenere le
      funzioni di  instradamento attraverso   la rete.    Anche questo
      livello pu• essere spezzato  in due  sottolivelli qualora esista
      una  funzione di  Internetworking, come  nel caso   dell'IP.  In
      questo caso si chiama 3A il livello di rete vero e  proprio e 3B
      quello in Internetworking.

      La sezione del collegamento fra due Host attraverso una rete di
      due nodi Š rappresentata in Fig. 4.1

      Il livello 4 secondo OSI, dicevamo, gestisce il  trasporto da un
      capo  all'altro della  rete e   qu le   cose si   complicano un
      pochino.  Infatti, a seconda del tipo di  rete che  ha sotto, il
      quarto livello  pu• funzionare  in uno  di cinque  modi diversi.
      Questi modi si chiamano "Classi".  Le classi sono individuate da
      un numero che va da zero a quattro.  La classe  zero la lasciamo
      da parte in quanto  Š dedicata  alle reti  TELETEX, un  tipo  di
      telex molto sofisticato ma nato tardi.  Per capire cosa fanno le
      altre classi occorre soffermarsi sul fatto che le reti su cui il
      livello di trasporto  poggia, sono  classificate in  tre tipi in
      funzione delle loro caratteristiche e della loro bont….

	Tipo A: Sono reti molto buone, con un tasso di errori
		accettabile e gli eventuali guasti sono opportunamente
		segnalati. I pacchetti arrivano in ordine e nessuno va
		perso.

	Tipo B: Sono reti molto buone per quel che riguarda il tasso
		di errori, ma scarse in quanto a diagnostica dei
		guasti. I pacchetti possono arrivare fuori sequenza o
		non arrivare affatto.

	Tipo C: Sono reti scarse sia dal punto di vista del tasso di
		errori, sia dal punto di vista della segnalazione dei
		guasti.


      Tanto per fare degli esempi le reti pubbliche X.25 come anche la
      nostra ROSE possono essere considerate di  Tipo A  in quanto non
      ci sono errori dovuti al rumore garzie all'efficiente  livello 2
      ed inoltre  segnalano eventuali  malfunzionamenti  con opportuni
      codici diagnostici.

      La rete NETROM la metterei fra le reti di tipo B in  quanto Š un
      p•  scarsa in  fatto di  diagnostica: se   qualcosa va   male ti
      sconnette e se ne lava le mani. Anche le reti datagram sono
      tendenzialmente di questo tipo.

      Le  reti fatte di RTTY o di connessioni su  linea telefonica con
      modem semplici e senza un meccanismo di correzione degli errori,
      sono sicuramente di tipo C.

      A questo punto avrete capito che il livello 4 si deve comportare
      in modo diverso in funzione del tipo di rete che ha sotto: se la
      rete Š buona deve fare poco, altrimenti deve  farsi carico delle
      deficenze dei livelli sottostanti.

      Tornando alle classi, OSI dice che la Classe 1 Š per  le reti di
      tipo B  ed il  livello di  trasporto fa   il recupero   guasti o
      malfunzionamenti della  rete (disconnessioni  o  reset).  Questa
      classe d… una funzionalit… di base  col minimo  dell'aggiunta di
      byte.

      La Classe 2 Š per le reti di tipo A e  il trasporto  fa, in pi—,
      da   multiplexatore permettendo   pi— connessioni   di trasporto
      contemporanee sulla stessa connessione di  rete.  E' disponibile
      un'opzione per il controllo di flusso.[vedi la prima puntata]

      La Classe 3 Š ancora per le reti di tipo B ma in  questo caso il
      Trasporto    fa  sia    il  recupero    degli  errori    che  la
      multiplexazione.

      Infine la Classe 4 Š per quelle poveracce delle reti  di tipo C:
      in questo caso il trasporto deve anche occuparsi  di individuare
      e correggere gli errori di trasmissione.   In particolare questa
      classe Š capace di individuare e recuperare  da errori  dovuti a
      pacchetti   persi,  duplicati   o  arrivati   fuori  sequenza  o
      addirittura corrotti a causa del rumore.

      Ed ecco una stranezza !  il TCP, che Š l'antesignano dei livelli
      di trasporto, si comporta come il Trasporto di Classe 4...sempre
      ed indipendentemente dal  tipo di  rete o  IP che  ha sotto.  In
      molti  casi questo  Š uno  spreco di  risorse.  Ecco   un valido
      motivo per accellerare la conversione verso i protocolli OSI.

      Ma come fanno i demoni di quarto livello a scegliere la classe ?
	Semplice... la contrattano.

	  Il Trasporto di  cui stiamo  parlando Š  di tipo "Connection
      Oriented" cioŠ all'inizio i demoni  non si  parlano, poi,  ad un
      certo momento fanno  una connessione  fra di  loro, si scambiano
      messaggi e dati poi si sconnettono.  [Esiste anche  un Trasporto
      "Connectionless, ma lasciamolo ai guru].  In fase di connessione
      il  demone   che   apre   propone   all'altro   una   classe  di
      funzionamento.    Il corrispondente   pu•  o   accettare  quanto
      proposto  o richiederne,  a sua  volta, una  inferiore: a questo
      punto  l'iniziatore o  accetta o   chiude.  Questa   sequenza si
      chiama "Negoziazione della classe di trasporto".

      La definizione del  quarto livello  secondo la standardizzazione
      del CCITT si chiama X.224

	Il TCP, ovviamente, non sa cosa sia la negoziazione perchŠ non
      ha classi.




		     CARATTERISTICA IMPORTANTISSIMA

      La struttura a strati del modello di riferimento OSI ha una
      caratteristica importantissima:

==>   "La catasta dei livelli Š sezionabile orizzontalmente" (Fig.4.2)

      Questo significa che uno strato puo' essere cambiato da entrambi
      i  lati  di  una   connessione  purche'   rimangano  intatte  le
      interfacce verso l'alto e verso il basso.  Inoltre,  se occorre,
      una sequenza di strati pu• essere eliminata da entrambe le parti
      come in Fig.4.3.

	  Se l'interfaccia  alla rete  fisica cambia,  per esempio, si
      sostituisce   il livello   1 da   entrambe le   parti  lasciando
      inalterati tutti i livelli superiori.

      Se due computer che, sono nella stessa stanza, ad un metro l'uno
      dall'altro, devono essere collegati  fra di  loro attraverso una
      seriale RS232  i livelli  2 e  3 non  hanno ragione  di esistere
      perche' non c'e' la rete ed il  tasso di  errori su  un pezzo di
      filo da un metro Š del tutto trascurabile.  Quindi i  livelli di
      trasporto possono  interfacciare direttamente  i livelli fisici.
      Ovviamente adattando opportunamente le interfacce fra i livelli.

      Per applicare questa propriet… al  nostro packet  si pu• pensare
      di cambiare il sottolivello  di accesso  al mezzo  fisico (CSMA)
      dell'AX.25 con un altro pi— adatto senza dover toccare tutti gli
      strati  superiori.  Meditate  gente !...ma  torneremo  su questo
      interessante argomento.




	TCP

      Riprendiamo, par ora, il nostro "Trasporto" per  esaminare un p•
      pi— in dettaglio il TCP per capire cosa fa e come lo fa.

	      TCP st…  per "Transmission  Control Protocol"  ed Š cos
      importante, insieme all'IP, da aver dato il suo nome a  tutto il
      sistema dei protocoli correlati.

      Il TCP Š nato apposta per  lavorare sopra  la rete  IP che, come
      abbiamo visto  in precedenza,  Š una  rete inaffidabile  e senza
      connessione.   PoichŠ  l'IP  non  garantisce   la  consegna  dei
      datagram  nŠ il  loro arrivo  in sequenza  il TCP   deve mettere
      ordine   nei   medesimi   ed    eventualmente,   richiedere   la
      ritrasmissione di quelli persi.  Il TCP  deve quindi  fornire un
      Servizio di Trasporto Affidabile per lo scambio  di una Sequenza
      di dati.  I dati che le applicazioni si vogliono  scambiare sono
      una sequenza ordinata di caratteri,  per esempio  la sequenza di
      byte che formano un file o i caratteri di un messaggio.   Il TCP
      Š  fatto proprio  per trasferire  sequenze di  byte.  PoichŠ una
      tale sequenza ha un inizio ed una fine, anche il colloquio fra i
      demoni TCP, da un lato all'altro della rete, ha un inizio ed una
      fine...un p•  come una  telefonata.  Questo  implica che  il TCP
      lavora  "a connessione",  cioŠ apre  un canale  virtuale  per il
      tempo del trasferimento della sequenza di byte e poi  lo chiude.
      Il  TCP deve  anche opportunamente  bufferizzare i  dati che gli
      provengono dai  livelli superiori   (gli applicativi   FTP, SMTP
      ecc.) infatti prima di spedire un datagram Š opportuno riempirlo
      a sufficenza per non sprecare inutilmente le risorse della rete.
      PoichŠ non si sa in che quantit… gli applicativi forniscono byte
      da  trasmettere  il, TCP  si  deve   inacaricare  di  accumulare
      caratteri quanto basta prima di poterli spedire in rete.  Se si
      vuole forzare comunque l'invio di una sequenza di caratteri ci
      si pu• sempre dare, per•, una spinta (PUSH).

	Le connessioni  che il TCP fornisce sono  Full Duplex.  Questo
      significa che ci sono due  correnti di  byte indipendenti  ed in
      direzioni opposte.

	  Il TCP realizza  le sue  funzioni unenendo  la tecnica della
      trasmissione con conferma  positiva ed  eventuale ritrasmissione
      se la conferma non arriva in tempo con la tecnica della finestra
      scorrevole (Sliding Window).

      La tecnica di trasmissione con conferma positiva Š rappresentata
      in figura 4.  Il trasmettitore invia il primo  segmento di dati.
      Il ricevitore lo riceve e risponde con un OK (Acknoledge, ACK) e
      la cosa procede col secondo segmento e cos via.  Tutte le volte
      che il trasmettitore manda un segmento in rete fa  anche partire
      un  timer.  Se  questo timer  si esaurisce  e l'OK  non Š ancora
      ritornato il  segmento viene  considerato perso   e ritrasmesso.
      Nella figura il tempo scorre dall'alto verso il basso.

	   Questa tecnica  Š poco  efficente soprattutto  se i ritardi
      attraverso  la rete  sono considerevoli  perchŠ non  permette di
      trasmettere il  segmento successivo  finchŠ non  arriva l'OK del
      precedente.  Per ovviare a ci• si  usa la  "Finestra scorrevole"
      (Fig.4.5).  In pratica  ci sono  pi— segmenti contemporaneamente
      in transito sulla rete.  Supponiamo che la  finestra sia  di tre
      segmenti: allora il trasmettitore  avr… al  massimo tre segmenti
      in giro non confermati.  Man mano che arrivano gli  OK trasmette
      i   segmenti  successivi   spostando  la   finestra  in  avanti.
      (Fig.4.6)

      Tarando opportunamente la  larghezza della  finestra in funzione
      dei tempi  di attraversamento   della rete   si ottiene   un uso
      ottimale della rete stessa.

      La  cosa interessante  del TCP  Š che  l'ampiezza della finestra
      viene misurata in byte,  non in  numero di  datagram; l'ampiezza
      della finestra, inoltre,  pu• variare  dinamicamente in funzione
      delle  possibilit… trasmissive  della rete  e di   ricezione del
      destinatario, realizzando cos un meccanismo di "Flow Control".

      Ciascun OK spedito  dall' host  ricevente contiene l'indicazione
      del numero di byte ricevuti fino a quel punto nonchŠ  il "Window
      Advertisement" che dichiara quanti byte ancora il destinatario Š
      disposto  a  ricevere.   Il  window   advertisement  pu•  essere
      considerato  come la   dimensione di   buffer libero   presso il
      ricevente.   Il  demone  che  trasmette  allarga  o  stringe  la
      finestra di trasmissione in  funzione del  window advertisement.
      Se il ricevente Š totalmente a corto  di buffer  manda un window
      advertisement a zero, bloccando cos del tutto  la trasmissione.
      La trasmissione pu• riprendere in  un secondo  tempo con l'invio
      di  un   altro  window   advertisement.   Questo   meccanismo  Š
      essenziale  perchŠ nelle  reti  si  hanno  a  volte  computer di
      velocit… molto diversa.   Notate che  questo meccanismo  di flow
      control funziona solo Edn-to-End  e non  ha niente  a che vedere
      col  meccanismo analogo  necessario all'IP  per non   intasare i
      gateway.   L' IP  fa  il  suo  flow  control  apponggiandosi sul
      protocollo ICMP.

	  Anche  il TCP  ha bisogno  di 20  byte per  espletare le sue
      funzioni.  Le   unit… di   trasferimento fra   i demoni   TCP si
      chiamano SEGMENTI.  Per aprire la connessione, trasferire i dati
      e chiudere poi la connessione i  due TCP  si scambiano opportuni
      "segmenti".  Ogni segmento Š composto da 20 byte (se  le opzioni
      sono  assenti)  ed  i  dati  dell'applicativo  vero  e  proprio.
      Fig.4.7










   bit  0               8               16                           31
       ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
       ³     Porta Mittente            ³     Porta Destinatario        ³
       ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
       ³                    Numero di sequenza                         ³
       ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
       ³                    Numero di conferma ACK                     ³
       ÃÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
       ³  Off. ³ Res.  ³   CODICE      ³          Finestra             ³
       ÃÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
       ³       Checksum                ³      Urgent Pointer           ³
       ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
       ³               Opzioni                        ³  Riempitivo    ³
       ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
       ³  dati applicativi...                                          ³
       ³                                                               ³

     Fig. 4.7


      Il campo da 32 bit detto "Numero di  sequenza" specifica appunto
      la   posizione del   segmento di   dati annesso   nella sequenza
      originaria fornita  dall'applicativo.  Il  "Numero  di conferma"
      dice   la posizione   dell'ultimo byte   correttamente  ricevuto
      (Ovviamente per il trasferimento che avviene nel senso opposto).
      Questi sono i due numeri chiave per implementare  la funzione di
      trasporto di cui dicevamo prima.

      Il campo FINESTRA contiene il famoso "Window Advertisement" di
      cui sopra.

      Il campo Offset (Off.) dice dove iniziano i dati veri e propri a
      partire dal primo byte: infatti il  campo opzioni  pu• essere di
      varie lunghezze o assente del tutto.

      Il campo Reserved (Res.) Š per futuri usi.

      Il campo CODICE, invece indica proprio lo scopo del segmento ed
      il suo contenuto. Il campo Codice Š formato da sei bit ognuno
      con un significato.

		   Bit    ³      Significato
		ÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
		   URG    ³  Il campo Urgent Pointer Š valido
		   ACK    ³  Il Numero di conferma Š valido
		   PSH    ³  Questo segmento richiede un PUSH
		   RST    ³  Reset della connessione
		   SYN    ³  Sincronizza i numeri di sequenza
		   FIN    ³  Il mittente Š arrivato alla fine
			  ³


      Il campo Urgent Pointer marca la posizione di byte "Urgenti" che
      devono  essere immediatamente  consegnati all'applicativo.  Sono
      di  questo tipo  quei messaggi   applicativi che,   per esempio,
      richiedono l'interruzione immediata di un comando precedente.

      Il campo CHECKSUM Š quello che serve  a verificare  che tutto il
      segmento    ha      raggiunto     il      destinatario     senza
      corrompersi...ovviamente  nell'ipotesi  che  il  livello  2  non
      esista.  Come gi… sappiamo questo campo  Š superfluo  sulle reti
      moderne  che gi…  dispongono di  un efficente  strumento  per la
      correzione degli errori tratta per tratta.

      I numeri che indicano  le PORTE  mittenti e  destinatarie sono i
      famosi "Well-Known  Port Assignment".   Alcuni di  questi numeri
      sono  riservati per  le  applicazioni  principali  che risiedono
      sopra  il TCP  e sono  quei numeri  che compaiono  della tabella
      quando si d… il comando "TCP STATUS", altri sono disponibili per
      varie applicazioni.  Ecco i principali:

		21   FTP
		20   FTP-DATA
		23   Telnet
		25   SMTP
		79   Finger
		7    ECHO
		9    DISCARD

	Questi numeri servono a sapere a quale applicativo inviare i
      dati di quel segmento. Si realizza cos la multiplexazione.


	IL TCP AL LAVORO

	Dicevamo che i demoni del TCP si connettono, si scambiano dati
      e poi si sconnettono. Vediamo come queste operazioni vengono
      realizzate.

	La connessione avviene con un "Handshake" a tre vie: Fig. 4.8

      Il demone chiamente invia un segmento col  bit SYN  alzato ed un
      numero di sequenza x.  Il chiamato risponde a  sua volta  con un
      segmento che porta il bit  SYN alzato,  il numero  di conferma =
      x+1 ed un suo numero di sequenza y.  A questo punto il chiamante
      risponde con un numero di conferma = y+1.  Da questo  momento in
      poi entrambe i partners sono  daccordo sui  numeri x  ed y nelle
      due direzioni: sono sincronizzati.

	 Ora sapete  cosa vuol  dire quando  TCP STATUS  vi dice: "SYN
      Received":  La vostra  stazione ha   ricevuto una   chiamata, ha
      risposto  al  chiamante  ma  non  ha  ancora  ricevuto  l'ACK di
      ritorno.  Questo ACK di titorno  non arriver…  mai se  le vostre
      tabelle di routing non sono a posto !

      La connessione continua con l'invio, da parte  del chiamante, di
      dati confermati da opportuni ACK dove il numero di conferma Š il
      numero dell'ultimo byte correttamente ricevuto pi— 1...questo se
      tutto fila liscio.  Ma se la rete si intasa cosa succede ?

      Scattano i timeout ed avvengono le  ritrasmissioni.  Infatti per
      ogni segmento inviato il mittente  fa partire  un timer.   Se la
      conferma  di ricezione  non arriva  prima  che  il  timer scatti
      allora  il segmento   Š considerato   perso e   ritrasmesso.  Il
      problema con l'IP, che, lo ricordo, Š una RETE di RETI,  Š che i
      tempi   di propagazione   sono estremamente   variabili: infatti
      dipendono sia  dalle velocit…  delle  singole  reti  che possono
      essere   enormemente     diverse    l'una     dall'altra,    sia
      dall'intasamento dei gateway.  Questo  significa the  i tempi di
      attesa possono cambiare  moltissimo da  un momento  all'altro in
      funzione  delle strade  prese dai  datagram e  dal  traffico del
      momento.

      Per  adattarsi a  questo ambiente  cos variabile  il TCP cambia
      continuamente il tempo dei timer con un algoritmo adattativo.

	Il TCP  calcola continuamente  il "Round  Trip Time"  che Š il
      totale del tempo impiegato per ricevere un  ACK dopo  l'invio di
      un  segmento: Š  il tempo  di andata  e ritorno.   Con  i valori
      misurati ne fa una  media e  calcola la  lunghezza dei  timer in
      funzione di  questa media.   Con  un  opportuno  parametro nella
      formula di calcolo si pu• fare in modo  che le  variazioni della
      lunghezza dei timer siano pi— o meno dolci.

	La chiusura della connessione avviene inviando un segmento col
      bit FIN alzato. PoichŠ le connessioni sono fulduplex, quindi due
      ed indipendenti, la connessione non si interrompe finchŠ anche
      l'altro partner non dichiara di aver finito. Solo a questo punto
      la connessione si spezza. Una connessione pu• essere interrotta
      bruscamente inviando un RESET.

	   Il meccanismo  di conferma  dei byte  ricevuti, dicevamo, Š
      cumulativo,  cioŠ il   destinatario dice   solo quanti   byte ha
      accumulato  fino  a  quel  momento.   Questo  meccanismo  ha dei
      vantaggi, ma   anche  dei   grossi  svantaggi.    Lo  svantaggio
      principale Š  che il  TCP  che  invia  non  ha  informazioni sui
      segmenti ben ricevuti, ma solo sull'ultimo byte ben  ricevuto in
      sequenza.  Supponiamo, per esempio, di avere una finestra di 500
      byte a partire dalla posizione 1000 e di trasmettere 100 byte di
      dati per ogni segmento.

      Supponiamo ancora che il primo segmento sia andato perso, mentre
      tutti i successivi  siano arrivati  correttamente.  Il ricevente
      mander… il numero di conferma ACK  = 1001  molte volte  per ogni
      nuovo segmento  che arriva.   Non c'Š  modo  per  far  sapere al
      trasmittente  che la  maggior parte  dei dati  Š arrivata  e che
      basterebbe inviare un solo segmento per mettere le cose a posto.
      Quando  il timeout  scatta il  trasmittente rimanda  tutti i 500
      byte della finestra...un segmento alla volta.  Ovviamente quando
      ora il primo segmento della finestra arriva  correttamente l'ACK
      conterr…  il numero  1501, ma  non  Š  detto  che,  a  causa dei
      ritardi,   questo  ACK   arrivi  in   tempo  per    bloccare  la
      ritrasmissione degli altri segmenti in coda.   Se d'altro canto,
      nel ritrasmettere, si mandasse un solo segmento e  si aspettasse
      l'ACK  prima di  inviare gli  altri, il  vantaggio della Sliding
      Window sarebbe vanificato.



	BIBLIOGRAFIA

      Per chi  ne vuole  sapere di  pi—, e  spero che  questa serie di
      articoli serva a stimolare il desiderio di conoscenza  nel campo
      delle reti, cosiglio  innanzitutto di  leggere la documentazione
      che viaggia sui dischetti insieme al programma NET.EXE di KA9Q.

      Un ulteriore approfondimento sul TCP/IP lo  si trova sull'ottimo
      libro di Douglas Comer intitolato: "Internetworking with TCP/IP,
      Principles,  Protocols and  Architecture" della  casa editirice
      Prentice Hall.

      Per una conoscenza  generale sulle  reti, sia  a commutazione di
      pacchetto che di circuito, nonchŠ per approfondire la conoscenza
      dell'OSI   e  le   filosofie  che   ci  sono   dietro  consiglio
      "Telecommunication  Networks, Protocols,  Modeling and Analysis"
      di Misha Schwartz, casa editrice Addison Wesley.

	   Chi poi  soffre d'insonnia  pu• sempre  leggere i documenti
      ufficiali dell'OSI  e del   CCITT che   sono migliaia   ed anche
      raccolti in libri variamente colorati.