TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla...

62
Pianu Daniele Classe 5^ L Indirizzo Informatica “Abacus” Anno scolastico 2003/04 ******************** * TCP/IP * * Il cuore di Internet * ******************** ISTITUTO TECNICO INDUSTRIALE STATALE “OTHOCA” - ORISTANO –

Transcript of TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla...

Page 1: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

Pianu Daniele

Classe 5^ L

Indirizzo Informatica “Abacus”

Anno scolastico 2003/04

********************

* TCP/IP *

* Il cuore di Internet *

********************

ISTITUTO TECNICO INDUSTRIALE STATALE “OTHOCA”

- ORISTANO –

Page 2: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

**** Introduzione ****

Ciascuno degli ultimi tre secoli è stato promotore di nuove tecnologie: il XVIII secolo fu il tempo dei grandi macchinari meccanici che diedero inizio alla prima rivoluzione industriale; il XIX secolo fu l'età della macchina a vapore; il XX secolo segnò la nascita delle tecnologie applicate alla raccolta, elaborazione e distribuzione dell'informazione. In questo contesto si realizzarono l'installazione della prima rete telefonica mondiale, l'invenzione della radio e della televisione, la nascita e la crescita esponenziale dell'industria dei calcolatori, il lancio dei satelliti per la comunicazione. In particolare, l'avvento dei Personal Computer rappresentò il primo passo di quella “rivoluzione informatica” che costituì il principale fenomeno tecnologico non solo degli ultimi decenni, ma bensì dell'intero secolo passato. Il passo successivo di questa rivoluzione fu la nascita dell'informatica distribuita: un PC da solo è un ottimo strumento di lavoro, ma più PC collegati tra loro aumentano notevolmente sia le possibilità di utilizzo della propria macchina, sia la quantit' di informazione accessibile all'utente. Dalle ricerche effettuate sull'interconnessione di più elaboratori nacque quella che oggi definiamo la ''rete delle retì', ovvero INTERNET. Il TCP/IP non è altro che il cuore di questa gigantesca creatura, il motore di questa macchina straordinaria: senza di esso, la ”grande rete” non sarebbe altro che un'utopia.

Page 3: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

**** Internet figlia della ****

bomba atomica

?

Per comprendere appieno le motivazioni che portarono alla costituzione della prima, grande rete telematica è sicuramente necessario analizzare con attenzione la matrice storica nel quale essa venne a costituirsi.

?????????????????

Il secondo conflitto mondiale determinò una cesura profonda della storia contemporanea. In primo luogo, al termine della guerra venne a consolidarsi un nuovo ordine internazionale, che vedeva come protagonisti le due grandi potenze vincitrici del conflitto: Stati Uniti e Unione Sovietica. Di

fronte a loro stava un'Europa indebolita e ormai confinata ad un ruolo subalterno. Altro aspetto da considerare è la globalità e totalità del conflitto: un spirale di morte e distruzione di tali proporzioni non conosceva e non conosce precedenti nella storia. Cinquanta milioni di vittime, intere città rase al suolo e, per la prima volta, tecnologia al servizio della guerra al punto tale da permettere, come

il bombardamento atomico di Hiroshima ha dimostrato, la distruzione dell'umanità stessa.

Il fungo atomico su Hairoshima, che causò oltre 100.000 vittime

Page 4: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

Il processo di Norimberga e l’inizio della Guerra Fredda

Il processo di Norimberga, celebrato nel 1945-46 da un tribunale internazionale istituito per punire i criminali di guerra, Goring, Rosemberg e von Ribbentrop su tutti, segnò una svolta nel diritto internazionale, affermando, per la prima volta, che anche in guerra esistono comportamenti qualificabili e punibili come criminosi: devono esistere principi e norme che obblighino gli individui a trascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti necessari a preservare le generazioni future dal pericolo della guerra, a difendere ovunque i diritti dell'uomo, a favorire il progresso economico mondiale. Un compito giusto, ma anche e soprattutto molto difficile. Il clima di solidarietà che infatti si era creato tra le due fazioni alleate contro il nazifascimo (USA e Inghilterra da una parte, URSS dall'altra) ebbe breve durata. Finita la guerra, le divergenze di interessi politico-economici e l'opposizione ideologica tra le potenze vincitrici si manifestarono con crescente intensità fino a determinare, intorno alla metà del 1947, l'inizio della guerra fredda, una condizione di non guerra-non pace, in cui le due superpotenze si combatterono a colpi di diplomazia e propaganda ideologica, esibendo la loro potenza militare e intervenendo nei conflitti che si aprivano nelle aree periferiche del pianeta.

Dalle sfere d’influenza ai blocchi

Già prima che terminasse la seconda guerra mondiale, i leader delle tre potenze vincitrici (Roosevelt, Churchill e Stalin) erano venuti prefigurando il futuro assetto dell'Europa nella conferenza di Yalta, in Crimea nel febbraio del 1945. Preso atto della situazione militare che si era venuta a formare, con le trueppe sovietiche in procinto di occupare la parte orientale del vecchio continente e le anglo-americane quella occidentale, si accettò, anche se non ufficialmente, l'idea di dividere l'Europa in sfere d'influenza, pur permettendo a ciascun popolo il diritto di scegliere liberamente quale forma di governo adottare. Ma la situazione internazionale post-conflitto si irrigidì, fino a trasformare le sfere d'influenza in blocchi contrapposti, cioè in alleanze politico-militari capeggiate dall'una o dall'altra fazione. Già nel 1946 Stalin, con un discorso alla nazione, determinò la fine della tregua ideologica, affermando che tra comunismo e capitalismo vi era un contrasto insuperabile. La risposta arrivò da Churchill, che accusò l'URSS di ambire a un'espansione senza limiti della sua potenza e delle sue dottrine. Anche l'America non tardò a farsi sentire: il nuovo presidente Truman attribuì al comunismo sovietico mire espansionistiche e dichiarò l'impegno della sua nazione a difendersi ovunque fosse minacciata e a sostenere i popoli liberi che si opponessero ai tentavi di oppressione della rivale Unione Sovietica. Questa strategia fu chiamata del contenimento, perchè consisteva nell'arginare i tentativi espansionistici sovietici e nel contrastare l'influenza comunista nel “blocco” occidentale.

Churhill, Roosevelt e Stalin alla conferenza di Yalta

Page 5: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

La Germania, simbolo della guerra fredda

L'ultima occasione di collaborazione tra Usa e Urss, seppure, come vedremo, intralciata da molti contrasti, fu la conferenza di pace che si tenne a Parigi nel 1946. Le uniche decisioni che fu possibile prendere riguardavano l'annessione all'Urss delle ex repubbliche baltiche e di buona buona parte dell'Europa dell'est, e la perdita da parte dell'Italia del Dodecaneso, di Istria, Fiume e Zara. Non si trovò invece alcun accordo per la sistemazione territoriale della Germania e della capitale Berlino, entrambe divise in quattro zone d'occupazione (britannica, francese, statunitense e sovietica). Tutti i tentativi diplomatici volti a realizzare un'unificazione concordata risultarono vani: l'Urss vedeva nel controllo della Germania un importante avamposto politico e strategico nell'Europa occidentale e, inoltre, intendeva ripagarsi con i beni tedeschi delle risorse bruciate nella guerra contro Hitler; gli anglo-americani intendevano invece accelerare il processo di ricostruzione della Germania e la sua integrazione nel sistema politico-economico occidentale. Una soluzione fu quindi inattuabile: nel febbraio del '48, gli occidentali unificarono le proprie zone di occupazione prefigurando la creazione di uno stato nella Germania occidentale e, di fatto, violando gli accordi di Yalta. La risposta dell'Urss, che segnò l'inizio di quello che venne definito il conflitto di Berlino, fu di bloccare l'accesso da parte degli occidentali alla capitale, impresa impossibile dato che i rifornimenti aerei statunitensi riuscirono di fatto a evitare l'isolamento della città. Il conflitto portò così alla divisione ufficiale, il 5 maggio 1949, della Germania in due stati di regime opposto: la Repubblica Federale Tedesca a occidente e la Repubblica Democratica Tedesca nella parte orientale del paese. Il caso della Germania e di Berlino mise in luce una delle principali caratteristiche della guerra fredda, ossia la forte ideologizzazione di essa: più che di Usa contro Unione Sovietica, si parlava di Comunismo contro Capitalismo, di “mondo dell'uguaglianzà' contro “mondo della libertà', in una guerra che, più che rappresentare uno scontro tra potenze, rappresentava uno sconro di civiltà.

Il blocco occidentale e il

blocco orientale

Nel blocco occidentale, gli Stati Uniti, approfittando del proprio strapotere economico-militare, costituirono un sistema di alleanze che subordinava politicamente a loro i più deboli stati europei. Ciò fu ottenuto isolando la sinistra dalle coalizioni di governo e legando la ricostruzione economica dei paesi all'aiuto statunitense attraverso il piano Marshall. L'edificazione del blocco occidentale culminò con la firma del Patto Atlantico (1949), un'alleanza politico-militare di tipo difensivo dove gli Stati Uniti giocavano un ruolo preponderante, e la costituzione di una forza militare internazionale, la Nato (North Atlantic Treaty Organization), con lo scopo di realizzare gli obbiettivi prescritti nel Patto Atlantico. Altra caratteristica che contraddistinse la fazione occidentale fu il comune clima di sospetto e intolleranza, alimentato, soprattutto negli Stati Uniti, dalla fantomatica minaccia delle “spie comuniste”, minaccia che portò all'esecuzione di varie condanne a morte sulla base di fragili prove. Per quanto riguarda il blocco orientale, questo fu realizzato dall'Urss attraverso la “sovietizzazione” dei paesi liberati dall'Armata Rossa, ossia appoggiando i partiti comunisti delle diverse nazioni al fine di concentrare il potere nelle loro mani ed eliminare le opposizioni, fino a dare vita a dei regimi ispirati e subordinati, politicamente ed economicamente, all'Unione Sovietica, le cosiddette democrazie popolari. In risposta alla NATO, nel '55 l'Urss e i paesi dell'Europa orientale diedero vita al Patto di Varsavia, un'alleanza militare analoga e opposta a quella statunitense. Unica eccezione fu rappresentata dalla Iugoslavia che, guidata dal generale Tito, instaurò un regime socialista autonomo dal blocco sovietico.

Page 6: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

Stalin e la guerra fredda

Negli anni della guerra fredda si ricreò nell'Urss una situazione del tutto simile a quella degli anni dello stalinismo d'anteguerra: in nome della difesa dell'Urss, accerchiata dai “nuovi nemici”, il regime dispotico staliniano tornò ad esercitare una repressione forzata contro ogni forma di dissenso e nuove ondate di processi furono celebrate contro veri o presunti oppositori, concludendosi, il più delle volte, in condanne a morte o deportazioni nei gulag. Per quanto riguarda la la ricostruzione economica del paese, essa fu condotta destinando tutte le risorse interne e dei paesi confinanti all'industria pesante e al potenziamento bellico, logica conseguenza del nuovo conflitto internazionale, che avrebbe portato, nel '49, alla costruzione, da parte dell'Urss, della sua prima bomba atomica.

La rivoluzione in Cina e

il conflitto in Corea

Al termine della seconda guerra mondiale, si riaccese, in Cina, il conflitto fra nazionalisti, guidati da Chiang Kaishek, e comunisti, capeggiati da Mao Zedong, un conflitto che rappresentò un punto di svolta nel confronto fra “mondo socialista” e “mondo capitalistico”. Forte dell'appoggio degli occidentali, Chiang ritenne di poter riprendere con successo il suo programma di eliminazione dei comunisti. L'opposizione di Mao, appoggiato dalle masse contadine, impedì però l'instaurarsi di un qualsiasi forma di pacificazione. Dopo due lunghi anni di guerra civile, Chang, nonostante l'appoggio degli USA, dovette soccombere di fronte alla migliore organizzazione militare dell'esercito comunista. Vennero quindi a formarsi due diversi stati in territorio cinese: la Repubblica Popolare Cinese, proclamata il 1° ottobre 1949, sotto la presidenza di Mao Sedong, e la Repubblica della Cina Nazionalista, sotto il controllo di Chiang Kaishek, unica rappresentante della Cina all'ONU. Nel febbraio del '50, la Cina di Mao stipulò con l'Unione Sovietica un trattato di amicizia e mutua assistenza. Il “campo socialista” allargava così i suoi confini al più vasto e popoloso Stato dell'Asia, rendendo la sfida del mondo capitalistico più ampia e temibile. La prova più drammatica delle dimensioni mondiali del conflitto tra i due blocchi si ebbe in Corea nel 1950. In seguito agli accordi interalleati, il paese era stato diviso in due zone, delimitate da una linea immaginaria coincidente con il 38° parallelo. Una delle due zone, e più esattamente la Corea del Nord, era governata da un regime comunista guidato da Kim Il Sung, mentre nell'altra si era insediato un governo nazionalista appoggiato dagli americani. In un clima crescente di tensione, dovuto al fatto che entrambe le fazioni rivendicavano la sovranità dell'intero territorio, nel giugno del '50 le forze nordcoreane, armate dai sovietici, invasero il sud. La risposta all'evidente tentativo di espansione del blocco comunista arrivò dagli Stati Uniti, che inviarono un forte contingente di truppe che respinse i nordcoreani oltre il 38° parallelo. A questo punto, fu però la Cina di Mao a intervenire, con un massiccio invio di forze che, in poche settimane, capovolsero la situazione penetrando nella Corea del Sud. Dopo due anni di trattative e di sanguinosi scontri, la guerra si concluse nel '53 con un ritorno alla situazione precedente al conflitto, col confine ancora in prossimità del 38° parallelo.

Page 7: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

Corea, truppe della prima divisione dei Marines sulla linea del fronte

Prigionieri di guerra cinesi

1953, l’anno del "disgelo" e della

"coesistenza pacifica"

Una nuova metafora, il disgelo, venne utilizzata per caratterizzare la fase dei rapporti internazionali apertasi con il 1953. Fu quello un anno di svolta: il repubblicano Dwight Eisenhower sostituiva il democratico Harry Truman alla presidenza degli Stati Uniti; Stalin moriva e, nel nuovo gruppo dirigente, emerse la figura dominante di Nikita Chrušcëv e la sua volontà di attenuare la repressione attuata dal regime staliniano e di avviare un dialogo con l'Occidente. Il segno più eloquente di questa svolta è dato dalla rapida risoluzione, nel '53, del conflitto coreano, voluta sia da Washington che da Mosca. Altro chiaro segno dell'inizio di un nuovo clima internazionale viene fornito dalle dichiarazioni di Chrušcëv nel febbraio del 1956: in occasione del XX congresso del Pcus, il leader sovietico denunciò le sopraffazioni e le violenze di cui si era macchiato il regime staliniano e, al tempo stesso, dichiarò che una guerra tra i due blocchi non era “fatalmente inevitabile”. Chrušcëv indicava la “coesistenza pacifica” come l'unica strada alternativa alla “guerra più devastante della storia”. Si rompeva così l'assoluta incomunicabilità fra i due blocchi che aveva caratterizzato il decennio postbellico; riprendevano i rapporti politici e commerciali e si inaugurava un processo di distensione e dialogo internazionale destinato a durare, seppure tra a alti e bassi, per molti anni.

Page 8: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

Una coesistenza competitiva

La definizione di una coesistenza pacifica tra i due blocchi non significò, però, la fine del bipolarismo. Esso, semmai, cambiò prospettiva, abbandonando lo scenario europeo, dove ormai la situazione si era stabilizzata secondo le sfere di influenza definite a Yalta, in favore di tutte quelle aree del mondo destabilizzate dal processo di decolonizzazione. Molti storici preferiscono infatti parlare di “coesistenza competitiva”, piuttosto che di coesistenza pacifica, per indicare il nuovo assetto dei rapporti internazionali. Per l'Unione Sovietica, la coesistenza competitiva significò un radicale mutamento nelle caratteristiche e nelle dimensioni del suo impegno internazionale: a partire da Chrušcëv, la politica estera sovietica acquisì un respiro globale che con Stalin non aveva mai avuto. Mosca si trovò sempre più impegnata non solo nella competizione nucleare con gli Stati Uniti, ma anche in un enorme sforzo di sostegno finanziario e tecnologico a molti stati postcoloniali, soprattutto nel Medio Oriente e in Africa. Per gli Stati Uniti significò, invece, l'assunzione di un ruolo di potenza planetaria e l'estensione a tutto il mondo di una presenza economica e militare precedentemente limitata al solo continente latino-americano.

Sull’orlo della guerra atomica:

la crisi cubana

La grande protagonista dei rapporti internazionali durante tutto il lungo dopoguerra fu la bomba atomica, e la gara nucleare fu il terreno principale sul quale venne combattuta quella “terza guerra mondiale” che, per fortuna dell'umanità, non scoppiò mai. Il momento in cui però si andò più vicini fu la crisi cubana del 1962. La rivolta cubana condotta dal giovane avvocato Fidel Castro, che nel '59 portò al rovesciamento del regime del corrotto generale Fulgencio Batista, non fu vista di buon occhio dal governo statunitense, che temeva una possibile destabilizzazione politica di una zona, l'America centrale e caraibica, da sempre considerata di grande importanza strategica. La situazione peggiorò quando Castro, nel 1960, avviò la trasformazione in senso socialista del paese, avvicinandosi rapidamente all'Unione Sovietica, che assunse il ruolo di principale sostegno economico, politico e militare di Cuba. All'inizio della sua presidenza, il neo eletto presidente democratico John Fitzgerald Kennedy tentò di soffocare il regime socialista cubano, prima per via commerciale, imponendo il blocco delle importazioni dall'isola, e, successivamente, autorizzando lo sbarco di esuli cubani, organizzati e addestrati dai servizi segreti statunitensi (CIA) con il compito di avviare una guerriglia anticastriana. Entrambi i tentativi fallirono clamorosamente. In questo clima di tensione si inserì l'Unione Sovietica, che iniziò l'installazione a Cuba di alcune basi di lancio per missili nucleari. Quando, nell'ottobre del 1962, le basi furono scoperte da aerei-spia americani, Kennedy ordinò un blocco navale attorno a Cuba, in modo da impedire il rifornimento di testate nucleari da parte delle navi sovietiche. Per sei drammatici giorni (16-21 ottobre) il mondo visse sull'orlo di un conflitto nucleare, mentre si intrecciavano frenetiche trattative. Infine Chrušcëv accettò di ritirare i missili, ottenendo in cambio da Kennedy la garanzia che gli Stati Uniti non avrebbero minacciato l'indipendenza di Cuba.

Page 9: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

Resti dell’aereo abbattuto nella “Baia dei Porci” dopo il fallito

tentativo di invasione da parte degli esuli americani addestrati dalla CIA

Page 10: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

*** Da Arpanet a Internet ***

Come si può notare chiaramente, il timore per la nascita di un conflitto atomico tra le due grandi potenze era palpabile. Internet ebbe così inizio come un progetto finanziato dal Governo degli Stati Uniti. Il progetto partì proprio nel 1962, anno della crisi cubana e dello sventato tentativo di attacco atomico da parte dell'Urss, quando l'Areonautica degli Stati Uniti o USAF (United States Air Force) richiese all'azienda californiana RAND Corporation come mantenere il controllo delle armi e dei bombardieri dopo un attacco nucleare. Il documento finale, redatto dall'ingegnere informatico Paul Baran, elencava modalità diverse con cui la USAF avrebbe potuto sopravvivere a un bombardamento atomico. Le conclusioni finali del documento suggerivano l'uso di una rete di comunicazione distribuita, in grado di estendersi in tutti gli Stati Uniti. La rete avrebbe dovuto essere di tipo decentralizzato per poter continuare a funzionare nel caso in cui un nodo qualsiasi (città) fosse stato attaccato e distrutto. La rete distribuita avrebbe dovuto essere una rete a “commutazione di pacchetto”, dove, cioè, i dati venivano suddivisi in “pacchetti” contrassegnati per indicare l'origine e la destinazione delle informazioni. Nel '68, l'agenzia ARPA (Advanced Rearch Project Agency, agenzia con il compito di stimolare e finanziare la ricerca in settori che avrebbero potuto avere una ricaduta militare) assegnò un contratto alla società BBN per la realizzazione di una rete privata sulla base del documento redatto da Baran. La BBN decise di usare minicomputer Honeywell per gestire le operazioni di commutazione in ciascuno dei nodi della rete di computer. La rete originale consisteva in quattro nodi:

? l'Università della California a Los Angeles; ? SRI a Stanford; ? l'Università della California a Santa Barbara; ? l'Università dello Utah.

Tutte le località erano connesse da linee dedicate a 50 Kbps. La rete di computer era chiamata, dal nome del suo promotore, ARPANET. Nel 1983, dopo una precedente fase di collaudo, il protocollo TCP/IP (le cui origini risalgono a quasi dieci anni prima, esattamente al '74) diventò il protocollo di base della rete dell'ARPA, sostituendo l'obsoleto NCP (Network Control Protocol). Grazie all'uso del protocollo TCP/IP era possibile consentire la comunicazione di computer con caratteristiche costruttive differenti. Durante lo stesso anno fu sviluppato il protocollo DNS (Domain Name System) che permetteva l'uso di nomi al posto degli indirizzi numerici per l'identificazione degli host. Nel 1984 ARPANET fu suddivisa in due reti distinte. Una delle nuove reti derivate avrebbe dovuto essere usata esclusivamente a scopi militari. Qust'ultima fu chiamata MILNET, mentre l'altra derivata continuò a mantenere il nome della rete originale. La rete avrebbe dovuto essere usata per continuare a supportare attività di ricerca avanzate. Nello stesso periodo, la rete CSNET, sviluppata dalla NSF (National Science Foundation) nel 1981, fu potenziata elevando la velocità da 56 Kbps a 1,5 Mbps. La nuova rete che venne a formarsi fu chiamata NFSNET, mentre la vecchia rete ARPANET, ormai obsoleta e dai costi insostenibili, fu abbandonata e sostituita dalla nuova nata di casa NSF. Nel 1995 NSF annunciò che non sarebbe più stata consentita la connessione diretta alla sua rete, e la gestione delle connessioni a NSFNET fu assegnata a quattro aziende:

? MCI; ? Sprint; ? BBN; ? ANS.

A queste società fu concessa la possibilità di accedere a NSFNET tramite le proprie reti private. Queste quattro aziende furono i primi ISP (Internet Service Provider) della storia. Gli utenti di NSFNET raggiunsero in quest'anno i 25 milioni, i server si contavano a migliaia. La cessione della propria rete, da parte di NSF, ai privati, in concomitanza con la commercializzazione del primo

Page 11: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

browser web, Netscape (precedentemente chiamato Mosaic) e della vendita, da parte delle maggiori multinazionali delle telecomunicazioni, di connettività alla rete segnarono, di fatto, il passaggio dalla rete nata a scopi militari e di ricerca, a quella che oggi, più che come collegamento di milioni di computer in tutto il mondo, viene considerato un nuovo mass media: INTERNET.

Page 12: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

**** TCP/IP ****

Come precedentemente accennato, il TCP/IP costituisce l'ossatura di Internet. Prima di descriverne le caratteristiche, occorre introdurre una serie di concetti che, data la vastità dell'argomento trattato, saranno solo accennati, tanto per non creare incomprensioni nell'esposizione dei successivi capitoli.

Concetti elementari sulle reti

Per rete di calcolatori intendiamo un insieme di sistemi di elaborazione (nodi), dotati di proprie risorse che, oltre ad essere utilizzabili localmente, possono essere messe a disposizione di altri nodi. Per nodo si intende, appunto, un elaboratore spesso definito col termine host. I collegamenti tra gli host di una rete consentono il passaggio di dati in forma di pacchetti, dove il termine pacchetto si riferisce a una sorta di ''confezionamento” delle informazioni dove si definisce il mittente e il destinatario dei dati trasmessi. Per quanto riguarda la classificazione delle reti in base allo loro estensione, utilizziamo tre acronimi standard:

? LAN (Local area network, rete ad estensione locale) quando la rete è contenuta nell'ambito di un edificio, o di un piccolo gruppo di edifici adiacenti;

? MAN (Metropolitan area network, rete ad estensione metropolitana) quando la rete è composta dall'unione di più LAN nell'ambito della stessa area metropolitana, in altri termini si tratta di una rete estesa sul territorio di una città;

? WAN (Wide area network, rete ad estensione geografica) quando la rete è composta dall'unione di più MAN, estendendosi geograficamente oltre l'ambito di una città singola; l'esempio più classico di WAN è, evidentemente, INTERNET.

Topologie di rete (Network topologys)

Una topologia di rete (network topology) è una mappa che descrive come i vari host sono collocati nella rete stessa. La topologia di rete è spesso rappresentata tramite un grafo dove i vari nodi sono rappresentati da dei computer, mentre i collegamenti tra i vari host vengono rappresentati tramite degli archi. Di seguito saranno elencate le topologie più diffuse, indicandone i principali vantaggi e svantaggi.

Topologia a Bus (Bus topology)

Tutti i nodi sono collegati ad un unico canale di trasmissione, detto bus. La trasmissione è di tipo broadcast, nel senso che quando una stazione trasmette un messaggio, questo è captato da tutti gli altri host connessi al bus: sarà compito del nodo destinatario del messaggio riconoscerlo come proprio o scartarlo nel caso non sia destinato ad esso.

Page 13: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

Vantaggi: una rete con topologia a bus è facilmente estendibile, dato che a tale scopo è sufficiente prolungare la lunghezza del bus; essa è inoltre insensibile ai guasti dei singoli nodi. Svantaggi: un guasto del bus immobilizza l'intera rete; se due host accedono contemporaneamente al bus, si verifica il cosiddetto fenomeno della collisione, che porta ad una perdita di entrambi i messaggi trasmessi dagli host;

Topologia a stella (Star topology)

Questa topologia prevede la presenza di un nodo centrale privilegiato al quale sono collegati tutti gli altri nodi; eventuali connessioni tra i nodi periferici sono eliminate. Vantaggi: la rete è insensibile ai guasti degli elaboratori periferici.

Page 14: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

Svantaggi: un guasto del nodo centrale immobilizza l'intera rete; il numero di host collegabili e limitato al numero di interfacce di connessione presenti nel nodo centrale.

Topologia ad anello (Ring Topology)

I nodi tra loro adiacenti sono collegati in modo da formare una struttura di tipo ciclico.

Vantaggi: facilmente estendibile. Svantaggio: il guasto di un elaboratore immobilizza l'intera rete.

Topologia a maglia (Mesh topology)

Nella topologia a maglia, ogni nodo e collegato:

Page 15: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

? con tutti gli altri (maglia completa);

? parzialmente con gli altri (maglia incompleta)

Vantaggi: elevata affidabilità, dovuta all'insensibilità ai guasti delle linee di comunicazione. Svantaggi: costi di gestione particolarmente elevati.

Page 16: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

Topologie ibride (Hybrid topology)

Una topologia ibrida e formata dalla combinazione di almeno due topologie di base differenti. Le principali sono:

? bus di stelle (Bus-Star Topology), costituita da un cavo condiviso da più; reti con topologia a stella;

? anello di stelle (Ring-Star Topology), costituita da un collegamento tra più stelle volto a formare un anello chiuso.

Protocolli

Con protocollo si intende, in campo informatico, un insieme di regole che ci permettono di comporre dei messaggi e far si che essi possano essere scambiati tra due macchine. Nel nostro caso, sarà più opportuno definire protocollo il linguaggio utilizzato per la comunicazione tra due host remoti. Un protocollo si definisce:

? non orientato alla connessione, se si preoccupa solo di trasmettere i dati instradandoli lungo un certo cammino, ma non effettua alcun controllo sull'avvenuta ricezione da parte del destinatario;

? orientato alla connessione, quando il protocollo dà l'impressione ai due interlocutori di avere a disposizione una linea dedicata.

TCP/IP vs OSI

Prima di analizzare attentamente i vari protocolli che compongono la suite TCP/IP, risulta utile introdurre quello che fu proposto, nel lontano '79, come standard di riferimento in materia di reti di calcolatori: l'Open System Interconnection.

OSI model

Fin dalla comparsa dei primi personal computer, si presentò la necessità di condividere liberamente le risorse del proprio calcolatore con gli altri, senza dover ricorrere agli ingombranti e delicati floppy disk. Nacquero quindi le prime reti ad estensione locale (LAN, Local Area Network), che, sebbene venissero costruite senza precisi standard di riferimento, funzionavano egregiamente. Il problema si presentava, però, quando si sentiva la necessità di interfacciarsi con altre reti, cosa del tutto impensabile in quel periodo, date le profonde differenze a livello di implementazione nelle singole reti. Proprio per risolvere questo problema intervenne la ISO (International Standard Organization), che nel 1979 pubblicò il cosiddetto modello OSI (Open System Interconnection), primo schema di riferimento per progettatori e implementatori di reti. Il modello OSI suddivide le varie fasi di trasmissione e ricezione dei dati in 7 livelli o strati, ciascuno dei quali fornisce servizi ai livelli gerarchicamente superiori e utilizza quelli messi a disposizione dai livelli inferiori. Il modello OSI assegna a ciascuno dei sette livelli dei nomi che richiamano la funzione svolta:

1. livello fisico; 2. livello di collegamento dati; 3. livello di rete; 4. livello di trasporto; 5. livello di sessione;

Page 17: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

6. livello di presentazione; 7. livello di applicazione.

In questo tipo di struttura, tra livelli corrispondenti di trasmettitore e ricevente, viene definito un protocollo di livello (o protocollo paritetico) in modo che la struttura delle informazioni che giungono dal trasmettitore possa essere correttamente interpretata, mentre tra ciascuna coppia di livelli adiacenti della medesima stazione sono presenti delle opportune interfacce, che definiscono le operazione primitive e i servizi offerti dal livello inferiore a quello superiore. Inoltre, il modello prevede che nessun dato venga trasferito direttamente dal livello n del trasmettitore a quello corrispondente del ricevente, ma debba passare tramite tutti gli strati più bassi del trasmettitore fino a raggiungere il mezzo fisico e poi risalire la scala gerarchica del ricevente fino al livello corrispondente.

Per quanto riguarda l'OSI model, mi limiterò a esporre le funzioni basilari dei sette livelli, dato che oggi il modello proposto dalla ISO non trova alcuna implementazione e viene utilizzato quasi esclusivamente in ambito scolastico.

Il livello fisico (Physical Layer)

Si tratta del livello a diretto contatto con il mezzo trasmissivo e si occupa della trasmissione fisica dei bit che compongono il messaggio. Sono di competenza di questo livello tutte le caratteristiche meccaniche, elettriche e procedurali dei dispositivi utilizzati per la trasmissione dei dati.

Il livello di collegamento dati

(Data Link Layer)

Il livello Data Link è il primo che introduce una forma di formattazione dei dati. Il suo compito principale è, infatti, quello di organizzare i byte provenienti dal livello fisico in blocchi di lunghezza prefissata (frame), definendo nel protocollo le configurazioni di controllo che permettono di distinguere l'inizio e la fine di un frame. Inoltre, il livello di collegamento dovrà garantire i primi controlli di correttezza sui dati, introducendo opportuni protocolli di verifica quali, per esempio, il bit di parità o il checksum. Un altro problema che viene affrontato e quello della sincronizzazione della trasmissione, in modo da evitare che un trasmettitore invii dati ad una velocità incompatibile con la capacità di acquisizione del ricevente.

Il livello di rete (Network Layer)

Il compito principale del Network Layer è quello di gestire la comunicazione tra due elaboratori, suddividendo i messaggi in opportuni pacchetti che, di volta in volta, verranno instradati lungo un determinato percorso. Inoltre, quando la struttura della rete permette di collegare due elaboratori attraverso percorsi diversi, sarà compito del livello di rete determinare il percorso migliore, tenendo conto di varie considerazioni, come capacità del canale trasmissivo, traffico della rete ecc.

Page 18: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

Il livello di trasporto

(Transport Layer)

La funzione fondamentale di questo livello è quella di assicurare la corretta trasmissione e ricezione dei dati da e verso il livello superiore, mascherando a quest'ultimo le modalità con cui essi vengono effettivamente trasmessi. Compito di questo livello è anche la segmentazione dei dati e la loro ricompattazione in fase di ricezione, in modo da garantire un accurato controllo sul flusso di trasmissione delle informazioni.

Il livello di sessione (Sesison Layer)

Il quinto livello del modello OSI permette a utenti operanti su macchine diverse di stabilire una sessione di comunicazione. Questa potrà essere una connessione logica o una sessione di trasferimento dati. Compito del livello di sessione è anche quello di effettuare un controllo sugli accessi, verificando se gli utenti dispongono delle necessarie autorizzazioni.

Il livello di presentazione

(Presentation Layer)

Questo livello esegue delle funzioni di carattere generale che, pur essendo tipiche dei programmi applicativi, vengono richiamate così frequentemente da richiedere una soluzione a livello di rete anzichè di singolo utente. Si tratta di servizi e protocolli che si preoccupano di definire degli standard non solo per la configurazione dei bit, ma anche per la loro codifica e interpretazione. Tipiche di questo livello sono la codifica ASCII, EBCDIC e binaria.

Il livello applicazione

(Application Layer)

È il livello più esterno del modello OSI e contiene tutti i protocolli e i servizi che vengono utilizzati dall'utente programmatore nei propri programmi applicativi. Tra i più comuni, ricordiamo i servizi di trasferimento file, quelli per la navigazione ipertestuale (browser), quelli per la gestione della posta elettronica e, infine, i servizi per la gestione dei terminali.

Ora che sono stati esposti i concetti fondamentali riguardanti il modello OSI, effettueremo un confronto con quello che, fin dal lontano 1983, costituisce, di fatto, lo standard adottato per la comunicazione tra reti di calcolatori via Internet: il modello TCP/IP.

TCP/IP model

Le specifiche di questo modello furono elaborate dagli scienziati della DARPA (al nome originale dell'azienda ARPA si era aggiunto il termine “Defense”) Bob Khan e Vinson Cerf nel 1972, mentre

Page 19: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

la prima implementazione risale al 1977. Il modello TCP/IP è una ''suite” di protocolli, non proprietari e standard, adottata per la comunicazione tra reti di computer in Internet e all'interno di reti private. Il suo nome deriva dai due principali protocolli del modello: il TCP (Transmission Contorl Protocol) e l'IP (Internet Protocol). La figura di seguito mostra un confronto tra i livelli che compongono l'OSI e i corrispondenti livelli del TCP/IP:

Osservando attentamente la figura, si possono fare le seguenti considerazioni:

? il livello di rete del modello TCP/IP, unifica al suo interno i livelli di collegamento dati e fisico dell'OSI, rendendo completamente trasparente ai livelli superiori l'implementazione fisica della rete; questo è uno dei principali vantaggi del modello TCP/IP, dato che, ad esempio, un dispositivo che funziona a livello internet, è in grado di far comunicare reti aventi caratteristiche costruttive profondamente diverse (!);

? lo strato Internet del modello TCP/IP corrisponde a quello di rete del modello OSI; entrambi si occupano quindi dell'indirizzamento e dell'instradamento dei dati;

? lo strato di trasporto di entrambi i protocolli fornisce servizi orientati alla connessione, ma, come vedremo, il livello di trasporto del modello TCP/IP consente di scegliere, quando si necessita di una maggiore velocità, un servizio non orientato alla connessione;

? il livello applicazione del TCP/IP comprende i livelli di sessione, presentazione e applicazione dell'OSI; tutto ciò che riguarda la presentazione dell'informazione all'utente, nel TCP/IP rimane, dunque, nell'ambito di definizione delle applicazioni.

Lo strato di rete

Sotto al livello Internet c'è un grande vuoto. Il modello di riferimento TCP/IP non dice molto a proposito di quello che avviene a questo livello, eccetto che l'host deve connettersi alla rete utilizzando un protocollo in modo da inviare pacchetti IP lungo di essa. Questo protocollo varia in rapporto alla topologia di rete scelta dal progettista. A tal proposito, è utile aprire una parantesi sui vari protocolli utilizzati a livello di rete, definiti nel cosiddetto progetto 802.

Page 20: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

Il progetto 802

Le principali tecnologie di rete sono definite in un modello di comunicazione standard, noto come progetto 802, proposto dall'ente internazionale IEEE (Institute of Electrical and Electronics Engineers). Il termine “Progetto 802” deriva dall'anno (1980) e dal mese (febbraio, 2° mese dell'anno) in cui fu proposta la prima bozza dello standard. Il proggetto 802:

? definisce i due strati fisico e di collegamento dati dell'OSI, di cui ne condivide l'organizzazione in livelli e le specifiche dei protocolli;

? migliora il livello di collegamento dati dell'OSI, suddividendolo in due livelli denominati: o controllo logico del collegamento, detto LLC (Logical Link Control), dedicato alle

trasmissioni punto-a-punto; o controllo di accesso ai mezzi fisici, detto MAC (Media Access Control), che

definisce le tecniche di accesso al mezzo.

Nel progetto 802, le tecnologie per reti locali sono definite in protocolli standard rappresentati da un numero x posto dopo 802 (ad esempio, 802.2). Di seguito, riporto i principali protocolli definiti dall'IEEE, relativi a tecnologie presenti nel periodo e a quelle che sarebbero state realizzate in futuro:

? 802.1: Internetworking; ? 802.2: Logical Link Control (LLC); ? 802.3: Carrier-Sense Multiple Access with Collision Detection(CSMA/CD) LAN(Ethernet); ? 802.4: Token Bus LAN; ? 802.5: Token Ring LAN; ? 802.6: Metropolitan Area Network (MAN); ? 802.7: Broadband Technical Advisory Group; ? 802.8: Fiber-Optic Technical Advisory Group; ? 802.9: Integrated Voice/Data Networks; ? 802.10: Network Security; ? 802.11: Wireless Networks; ? 802.12: Demand Priority Access LAN, 100BaseVG-AnyLAN.

Il livello internet

Il livello internet è il perno che mantiene assieme l'intera architettura TCP/IP. Si noti che il termite “internet” viene utilizzato in senso generico, sebbene tale livello sia presente anche nell'Internet con la I maiuscola. Il livello internet è formato principalmente da un protocollo denominato IP (Internet Protocol), dalle funzionalità simili a quelle definite nel livello di rete del modello OSI (indirizzamento, suddivisione in pacchetti, instradamento).

Il protocolli IP

Il protocollo IP definisce un servizio non orientato alla connessione (connessionless service), le cui funzioni principali sono:

? definire i meccanismi di indirizzamento tra reti di computer autonome; ? strutturare i dati in pacchetti, denominati datagrammi IP, e instradarli verso l'host

destinatario; ? frammentare ulteriormente i datagrammi nel caso la dimensione massima dei frame sia

minore di quella del datagramma in transito.

Page 21: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

Il protocollo IP non offre alcun tipo di supporto per verificare se la trasmissione è andata a buon fine (come vedremo successivamente, questo compito sarà affidato all'altro protocollo fondamentale del modello in questione, il TCP).

Organizzazione dei datagrammi

Ogni datagramma IP è suddiviso logicamente in due parti: un'intestazione e un campo dati. L'intestazione del datagramma contiene tutte le informazioni necessarie per il suo corretto instradamento lungo la rete ed è costituito dai seguenti campi:

? Version: contiene la versione del protocollo IP utilizzata. La versione tuttora utilizzata è la Ipv4 (IP version 4); in ambiente Linux è in fase di sperimentazione la versione Ipv6;

? Hlenght: indica la lunghezza dell'intestazione, espressa in parole di 32 bit; ? Service Type: definisce il tipo del servizio richiesto in termini di priorità, velocità e grado di

affidabilità; ? Total Length: definisce in byte la lunghezza totale del datagramma (intestazione più campo

dati); ? Campi Packet Fragmentation: i successivi tre campi (Identificazion, Flags e Fragment

Offset) sono utilizzati per la frammentazione del datagramma nel caso in cui debba essere instradato in reti la cui implementazione a livello di rete consente una dimensione massima dei pacchetti minore di quella del datagramma da instradare. Il datagramma verrà così diviso in unità più piccole, dette MTU (Maximun Transfer Unit), per consentirne il trasferimento nella rete dell'host destinatario. In particolare:

o il campo Identification identifica in modo univoco ciascun MTU appartenente ad un determinato datagramma (più MTU derivati da un singolo datagramma avranno lo stesso campo identification);

o il campo Flags è composto da tre bit: uno è tuttora inutilizzato; il secondo, denominato DF (don't fragment), indica che il datagramma non deve essere frammetato; il terzo, chiamato MF (more fragment), indica che il pacchetto è un MTU;

o il campo Fragment Offset indica lo spiazzamento dell'MTU rispetto alle dimensioni totali del datagramma;

Page 22: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

? Time To Live: indica il tempo massimo di permanenza del datagramma nella rete. Ogni volta che il pacchetto attraversa un ruouter, il valore del Time to Live viene decrementato. Se il router cattura un pacchetto con TTL pari a 0, lo scarta ed invia, tramite il protocollo ICMP, un messaggio di errore al mittente;

? Protocol: identifica il protocollo che ha generato il pacchetto; ? Header Checksum: permette di individuare eventuali errori nella trasmissione

dell'intestazione tramite un meccanismo di controllo della somma; ? Source Address e Destination Address: contiene l'indirizzo IP (questo argomento sarà

affrontato successivamente) dell'host mittente e del relativo destinatario; ? Option: consente l'inserimento di codici relativi ad eventuali opzioni. Viene anche utilizzato

per la sperimentazione di usi futuri; ? Padding: viene utilizzato per portare la lunghezza dell'intestazione ad un multiplo di 32 bit.

Indirizzi IP

Il protocollo IP distingue tutti gli host connessi alla rete tramite un indirizzo numerico univoco, denominato Indirizzo IP. Ciascuna apparecchiatura connessa alla rete (PC, stampante, router ....), denominata, come precedentemente accennato, host, possiede quindi un indirizzo IP che la contraddistingue da tutte le altre contemporaneamente funzionanti all'interno della medesima rete. Un indirizzo IP binario è un numero a 32 bit, organizzato a gruppi di 8 bit. Data la difficoltà per l'essere umano di operare con numeri binari, ciascun indirizzo IP viene espresso con la cosiddetta notazione decimale puntata, dove a ciascun gruppo di 8 bit corrisponde il relativo valore decimale e ciascuna cifra decimale è separata dall'altra tramite un punto. Ecco un esempio:

Indirizzo IP binario 00101101 . 10010101 . 11010011. 10110110 Indirizzo IP decimale 45 . 149 . 211 . 182

Ogni indirizzo IP è formato da due parti distinte, denominate:

? indirizzo di rete (network identifier o Net ID), la cui funzione è quella di individuare una singola rete;

? indirizzo dell'host (host identifier o Host ID), che contraddistingue ogni singola apparecchiatura all'interno della medesima rete.

In una rete IP autonoma tutti i computer hanno lo stesso indirizzo di rete, ma un differente host ID. Nella terminologia TCP/IP, una rete autonoma è anche denominata sottorete (subnet).

?Maschere di sottorete decimali

In un indirizzo IP, per distinguere la parte di rete da quella dell'host, si deve fornire la subnet mask (maschera di sottorete), che nel caso decimale è formata da una combinazione di due numeri 255 e 0. In una subnet mask decimale il numero:

? 255 (8 bit pari a 1) seleziona l’identificativo di rete di un indirizzo IP; ? 0 (8 bit pari a 0) individua l'host ID.

Una rete autonoma è quindi individuata da un indirizzo di rete e una subnet mask unici, ma host ID differenti. Ecco un esempio:

Page 23: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

Indirizzi IP riservati

Tra gli indirizzi IP, ne esistono alcuni riservati per funzioni speciali.

? 0.0.0.0 “questo host” Viene utilizzato come indirizzo IP all'avvio del computer, prima che le impostazioni relative allo stack TCP/IP vengano caricate;

? 127.x.x.x loopback È impiegato per effettuare il debug del software TCP/IP. L'indirizzo 127.0.0.1 rappresenta l'host locale, indipendentemente dal suo vero IP address;

? 255.255.255.255 broadcast rete locale Invia un messaggio di presentazione a tutti gli host dalla rete locale;

? x.x.x.255 broadcast rete remota Invia un messaggio a tutti gli host della rete remota con indirizzo x.x.x.0.

Classi di indirizzi IP decimali

Nel TCP/IP, di denomina classfull la tecnica di indirizzamento (l'indirizzamento IP sarà affrontato nel capitolo successivo) basata su subnet mask decimali. Nel metodo classfull (''con classi intere”), gli indirizzi IP sono suddivisi in 5 differenti classi, come riportato di seguito:

? un indirizzo di classe A assegna 8 bit (uno fisso a 0) alla Net ID , e i rimanenti 24 alla porzione di host. Con un indirizzo di classe A possiamo avere 126 (2^7 – 2) reti con 16.777.214 (2^24 – 2) host ciascuna;

Page 24: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

? un indirizzo di classe B riserva 16 bit (i primi due pari a 10) alla porzione di rete e 16 bit all'Host ID, ottenendo un massimo di 16.384 (2^14) reti con 65.534 (2^16 – 2) host ciascuna;

? con un indirizzo di classe C otteniamo 24 bit (dei quali 3 corrispondenti alla combinazione 110) per la Net ID, mentre i rimanenti 8 bit sono assegnati all'Host ID. Con un indirizzo di classe C, possiamo quindi realizzare 2.097.152 (2^21) reti con 254 host ciascuna.

Per quanto riguarda le seguenti classi di indirizzi, occorre fare delle importanti considerazioni:

? gli indirizzi di classe A non possono assumere, come Net ID, i valori 127 (01111111 in binario) o 0 (00000000 in binario) perchè riservati rispettivamente alla funzione di loopback e indirizzamento del computer all'avvio;

? a tutte le classi di indirizzi devono essere sottratte due combinazioni nella porzione di host, poichè i valori binari di Host ID pari a tutti 0 o tutti 1 (per esempio, per un indirizzo di classe A x.00000000.0000000.0000000 e x.11111111.11111111.11111111) sono riservati alle funzioni di indirizzamento del computer all'avvio e di broadcast .

Gli indirizzi di classe D sono riservati alle trasmissioni multicast, mentre quelli di classe E ad usi futuri e, quindi, preclusi agli utenti.

Indirizzamento IP

La subnet mask fornisce un metodo semplice per selezionare se un indirizzo di destinazione è locale a una rete oppure remoto, perchè appartiene a un host di un'altra rete. Per chiarire meglio questo esempio, supponiamo di avere tre stazioni A, B e C, due presenti nella stessa rete (A e B), ed una in una rete remota (C). Le reti comunicano tramite router IP. Per dirlo in parole povere, un router non è altro che un dispositivo in grado di mettere in comunicazione, nel nostro caso tramite protocollo IP, reti di natura diversa dislocate in aree geografiche differenti. Quando il computer sorgente A dovrà trasmettere dati al computer B, presente nella stessa rete, o alla stazione C, dislocato in un'altra rete, effettuerà le seguenti operazioni:

? inserisce i dati in una serie di pacchetti, includendovi il proprio indirizzo IP (source IP address) e quello del destinatario (destination Ip address);

? analizza l'indirizzo di rete del destinatario, isolato tramite la subnet mask; ? se l'indirizzo appartiene alla stessa rete dell'host sorgente, il frame viene direttamente

instradato dal computer trasmettitore a quello destinatario; è questo il caso di A che trasmette verso B;

? se l'indirizzo non appartiene alla rete della stazione sorgente (A che trasmette a C), la stazione sorgente invierà il frame al router locale, affidandoli il compito di instradarlo verso l'host desiderato.

Le varie fasi della trasmissione vengono rappresentate nella seguente figura:

Page 25: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

Indirizzi pubblici e privati

In Internet non possono esistere due apparecchiature con il medesimo indirizzo IP pubblico, cioè assegnato a livello mondiale dalla società internazionale ICANN (Internet Corporation for Assigned Names and Number). Gli indirizzi IP pubblici sono distribuiti agli ISP (Internet Service Provider) ai propri clienti, e possono essere assegnati in modo:

? statico, se un IP è attribuito in modo permanente per lungo periodo; ? dinamico, quando un IP è fornito soltanto per il periodo di tempo limitato alla navigazione e,

al suo termine, viene rimosso e assegnato ad un altro cliente.

Dato che la domanda mondiale di indirizzi pubblici è maggiore di quelli disponibili, gli enti di standardizzazione di Internet hanno stabilito la possibilità di riutilizzo del seguente gruppo di indirizzi IP, detti privati:

? classe A da 10.0.0.0 a 10.255.255.255; ? classe B da 176.16.0.0 a 172.31.255.255; ? classe C da 192.16.0.0 a 192.168.255.255.

Page 26: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

Questi indirizzi sono stati creati per fornire alle reti non collegate ad Internet, un gruppo di indirizzi IP che non fossero in conflitto con quelli attualmente in uso sulla Rete. Essi non saranno, dunque, mai assegnati come indirizzi pubblici in Internet. Nel caso la rete locale con indirizzi privati avesse necessità di interfacciarsi con Internet, occorrerà disporre di una apposita apparecchiatura (router o server) che effettui la cosiddetta funzione NAT (Network Address Translation), ovvero la conversione da indirizzi privati a indirizzi pubblici e viceversa.

Maschere di sottorete binarie

L'assegnazione degli indirizzi con il metodo classfull non è molto efficiente, come può chiarire il seguente esempio: si supponga che un progettista ottenga un indirizzo di classe C per la realizzazione della propria rete; egli necessita di soli 4 indirizzi IP per il propri server interni (ad esempio server web, server e-mail); un indirizzo di classe C, però, mette a disposizione 254 indirizzi pubblici, di cui solo 4 saranno impiegati, e ben 250 rimarranno inutilizzati! Per ottimizzare il numero di indirizzi IP da assegnare, la tecnica classfull viene rimpiazzata dalla più efficiente CIDR (Classless Inter-Domain Routing). Questa tecnica prevede di assegnare indirizzi IP sempre pari a una potenza di 2 e definiti tramite una subnet mask binaria, in cui:

? gli 1 selezionano la Net ID; ? gli 0 selezionano l'Host ID.

L'indirizzo di rete si ottiene effettuando l'operazione di AND binario bit a bit tra l'indirizzo IP e la subnet mask entrambi in forma binaria. L'esempio di seguito mostra un esempio di subnet mask binaria valida, con relativo numero di host disponibili:

Le subnet mask binarie sono spesso indicate, oltre che in forma decimale, con una barra seguita dal numero di bit pari a 1 della maschera stessa (per esempio, l'indirizzo IP 192.60.45.2/30 possiede la seguente subnet mask binaria 11111111.11111111.11111111.11111100, pari a 255.255.255.252).

Segmentazione di reti (subnetting)

In una rete autonoma con un grande numero di host, il rischio del verificarsi del cosiddetto fenomeno della congestione è sempre in agguato. Per congestione si intende il crollo prestazionale della rete, dovuto all'impossibilità, da parte dei dispositivi di comunicazione, di gestire l'elevato traffico presente all'interno della rete. La tecnica più utilizzata per la risoluzione del problema della congestione viene chiamata subnetting, e consiste nella suddivisione di una rete in una internetwork (connessione di più reti) formata da più sottoreti IP. Tale suddivisione, a livello di protocollo internet, viene effettuata separando l'Host ID dell'indirizzo IP della rete in due parti, una dedicata all'identificazione della sottorete (Subnet ID) e una riservata all'identificazione dell'host all'interno della sottorete (Host ID). La figura di seguito riporta un indirizzo IP prima e dopo il subnetting:

Page 27: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

In una rete frazionata tramite subnetting, la relativa subnet mask binaria separerà, dall'indirizzo IP, Net e Subnet ID dall'Host ID.

Prima di passare alla definizione dei protocolli relativi al livello di trasporto, mi limiterò almeno a nominare gli altri protocolli presenti a livello internet.

Protocollo ARP

L'Address Resolution Protocol, ARP appunto, viene utilizzato per determinare l'indirizzo fisico, detto MAC, di una macchina quando ne si conosce solo l'idirizzo IP. Esso opera inviando una richiesta a tutti gli host della rete (broadcast), richiesta contenente l'indirizzo IP del nodo con il quale di deve comunicare. La stazione che riconosce come proprio l'indirizzo IP contenuto nella richiesta, risponde con un messaggio contenente il proprio indirizzo MAC. Analogo al protocollo ARP, vi è il RARP (Reverse Address Resolution Protocol), che opera in modo inverso all'ARP, ossia dall'indirizzo MAC, ricava l'indirizzo IP.

Protocollo ICMP

Il protocollo ICMP (Internet Control Message Protocol) viene utilizzato per verificare lo stato attuale della rete e per riportare eventuali anomalie nelle trasmissioni di datagrammi IP.

Livello di trasporto

I compiti riservati a questo livello sono del tutto simili a quelli di competenza del livello di trasporto del modello OSI, cioè permettere il trasporto dei dati ed effettuare un controllo sul flusso delle informazioni trasmesso. Tali compiti sono affidati a due diversi protocolli, il TCP e l'UDP.

Page 28: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

Protocollo TCP

(Transmission Control Protocol)

Il protocollo TCP, che logicamente si occupa degli stessi problemi considerati all'interno del livello di trasporto dell'OSI, ha il compito di fornire ai programmi applicativi un servizio affidabile per il trasferimento di dati indipendentemente dalle loro dimensioni. In particolare, il TCP utilizza una tecnica di collegamento orientata alla connessione, grazie alla quale i programmi applicativi del trasmettitore e del destinatario hanno l'impressione di essere direttamente collegati lungo un canale affidabile d tipo full-duplex (bidirezionale-contemporaneo). Il protocollo TCP è un protocollo a sliding window (finestra scorrevole, consente cioè di trasmettere più pacchetti contemporaneamente prima di ricevere la conferma della loro ricezione), con meccanismi di time-out e ritrasmissione dei dati in caso di errore. Inoltre, il TCP segmenta i dati in blocchi di lunghezza compatibili con il protocollo IP utilizzato e denominati segment (segmenti) TCP. Di seguito il formato di un segmento TCP:

? Source Port: numero della porta (vedremo dopo cosa intendiamo per porta) associata al programma trasmettitore;

? Destination Port: numero della porta dell'applicativo ricevente; ? Sequence Number e Acknowledgement Number: vengono utilizzati per cadenzare la

trasmissione secondo il protocollo di handshaking a tre vie; ? Hlenght: indica la lunghezza dell'header TCP in parole di 32 bit; ? Flag: definisce la tipologia del segmento, tramite i seguenti codici:

o URG campo puntatore urgente attivo; o ACK campo di riscontro significativo; o PSH segmento che deve essere accelerato; o RST viene richiesto un reset della connesione; o SYN chiede la sincronizzazione sui numeri di sequenza; o FIN il trasmettitore a terminato la trasmissione dei dati;

? Window: indica le dimensioni del buffer disponibile in ingresso; ? Checksum: campo di checksum a 16 bit; ? Urgent Pointer: definisce la priorità del pacchetto; ? Options: campo riservato alla definizione di eventuali opzioni; ? Padding: campo di riempimento per rendere la lunghezza del segmento pari ad un multiplo

di 32 bit.

?

Page 29: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

Protocollo UDP

Il protocollo UDP (User Datagram Protocol) è un protocollo del livello di trasporto, alternativo al TCP, non orientato alla connessione e privo di meccanismi di controllo sull'avvenuta trasmissione dei messaggi. Esso viene utilizzato quando si necessita, più che di una buona affidabilità, di una elevata velocità di trasmissione, come, ad esempio, nel caso di trasmissioni audio-video (videoconferenze).

Porte e socket

Ad ogni processo applicativo che utilizza uno dei due protocolli di trasporto precedentemente descritti (TCP o UDP), viene assegnato un numero identificativo unico denominato “porta”. Le porte sono numerate da 0 a 65.535. Le porte comprese da 0 a 1.023 sono dette “well knowed ports” (porte ben note) e sono assegnate dalla IANA (Internet Assigned Numbers Authority) ad determinati applicativi (ad esempio, al telnet è associata la porta 23). Viene invece definito socket l'insieme di un indirizzo IP e di una porta che identificano, rispettivamente, il computer sulla rete e il processo o applicativo in esecuzione. Nato in ambiente Unix, il socket definisce di fatto lo standard per l'interfacciamento delle applicazione con il modulo TCP/IP. Esso si basa su primitive del tutto simili a quelle utilizzate per la gestione dei file:

? Socket: impone al sistema operativo la creazione di una socket, specificando il servizio desiderato;

? Bind: associa una porta ad un socket; ? Connect: si connette all'indirizzo dell'interlocutore specificato; ? Read e Write: gestiscono le operazione di trasferimento dati; ? Close: chiude la connessione.

Il livello applicazione

In questo livello troviamo tutti gli applicativi che mettono a disposizione dell'utente, tramite opportune interfacce, i vari servizi di trasferimento file, messaggistica, navigazione ipertestuale e controllo di terminali, utilizzando le risorse messe a disposizione dei livelli gerarchicamente sottostanti. Di seguito descriverò, a grandi linee, i protocolli più conosciuti, rivolgendo una particolare attenzione ai protocolli per l'invio (SMTP) e la ricezione (POP3) di e-mail, dato che sono stati implementati nel programma allegato alla tesi.

TELNET

Il protocollo Telnet, da non confondere con l'omonima applicazione, disponibile nella maggior parte dei sistemi windows e linux, implementa la tecnica del login remoto, che consiste nel trasformare il proprio computer in un terminale virtuale di una macchina remota di cui si intendono sfruttare le potenzialità di calcolo. In pratica, il protocollo prevede l'apertura di una connessione (indifferentemente TCP o UDP) tra il computer richiedente (client) e il computer remoto (server), lungo la quale vengono trasferiti al computer remoto i comandi digitati dal client e visualizzate nel suo monitor le relative risposte del server.

Page 30: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

FTP

Il protocollo più utilizzato per il trasferimento di file tra due host è sicuramente l'FTP (File Transfer Protocol). Esso prevede che vengano attivate contemporaneamente tra client e server due connessioni, una per i messaggi di controllo e una per il trasferimento dei dati. Quando il client contatta il file server, fa riferimento a una precisa porta TCP, identificata con il numero 21, sulla quale invia il propri codici identificativi e i dati relativi al file che intende trasferire. Il modulo FTP del server, verificata la validità della richiesta, si occupa del trasferimento del file utilizzando la porta numero 20. Il processo continua fino alla chiusura della connessione tra i due interlocutori. Molte implementazioni FTP, per preservare una parte dei dati contenuti nel server da accessi autorizzati, prevedono l'accesso ad una sola partizione del disco, denominata partizione pubblica, tramite la login generica anonymous e la password guest.

HTTP

L'HTTP (Hyper Text Transfer Protocol) è uno dei protocolli di più recente concezione e, senza ombra di dubbio, è quello che più di tutti ha contribuito alla crescita della rete. Esso si basa sul linguaggio di programmazione HTML (Hyper Text Markup Language) e premette la navigazione tramite pagine ipertestuali (cioè collegate tramite link) del cosiddetto World Wide Web (l'insieme di tutte le pagine ipertestuali di Internet). L'HTTP è stato progettato come un protocollo senza memoria (state less), dove, cioè , la ricezione dei dati non è vincolata in alcun modo da quelli appena ricevuti. La visualizzazione delle pagine ipertestuali avviene per mezzo di un apposito programma, denominato Browser: tra i più conosciuti, ricordiamo Mozzilla, Netscape Navigator e Internet Explorer. L'apertura di una pagina Html avviene tramite la sua richiesta, da parte del browser, al server dove essa è memorizzata, richiesta che avviene per mezzo di semplici stringhe ASCII.

DNS

Il protocollo DNS (Domain Name System) permette la risoluzione del nome di host nel corrispondente indirizzo IP. Il DNS viene implementato in un server (server DNS), che può essere locale, come in ambiente Windows, o remoto. Sostanzialmente, il server DNS è un database che contiene, per ogni nome identificativo di un host, il relativo indirizzo IP. Il protocollo HTTP si appoggia pesantemente a questo protocollo.

Page 31: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

**** SMTP and POP3 ****

I protocolli SMTP e POP3 rappresentano oggigiorno gli standard, rispettivamente, per l'invio e per la ricezione della posta elettronica. Di seguito darò una breve definizione e illustrerò una ipotetica sessione di comunicazione tra un client e un server che implementino questi protocolli. Per un esempio più pratico, vi rinvio alla sezione dedicata al programma “Internet Suite”, dove i due protocolli sono stati implementati tramite i componenti socket messi a disposizione di Delphi.

SMTP protocol

Simple Mail Transfer Protocol (SMTP) is a protocol created to manage easily and quickly the posting of e-mail. All e-mail client programs that send e-mail over the Internet, like Microsoft Outlook, use SMTP protocol. SMTP protocol traditionally uses a TCP or a UDP connection on 25 port. The communication between a client and a mail server takes place through simple excahnge of information. Once the connection is established:

? the client presents himself sending a string like this , where it's indicated his name.

? the client send his e-mail address with the command . Software like Microsoft Outlook or Netscape ignore this field;

? the client specifies the address of the receiver with the command RCPT TO ;

? as authentication phase finished, the client starts the trasmission of the e-mail whit the

command DATA ? now it's possible to indicate the sender address, for example

; ? now it's necessary to repeat the receiver address ; ? the e-mail must have a subject; to specify it ; ? now the client can sends the e-mail text. The server transmits the message when it

receives the string "."

? the client disconnect himself with the string QUIT.

Post Office Protocol version 3 (POP3)

Pop3 protocol is the most recent version of a standard protocol to receive e-mail. This standard protocol is builted into most popular e-mail products, such as Eudora and Outlook Express. Pop3 protocol provides a set of commands to receive or delete an e-mail. User can connect himself to the provider's Pop3 server and receive all his messages. Pop3 server waits the connections from clients at the 110 TCP port. The main steps in a Pop3 communication session are:

? the client identifies him whit the command USER, followed by his username;

Page 32: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

? client sends his password;

? if username and password are correct, client can start the receipt of the e-mail with the command RETR, followed by the number of the message;

? if the client wants to delete the message from the server, he types DELE and the number of the message;

? the client closes the connection with QUIT command.

The server can answer with two different messages:

? ''+OK'' if the typed command iscorrect;

? ''+ERR'' if the typed command is incorrect or an error occurs.

Page 33: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

?

INTERNET SUITE è il nome del programma sviluppato insieme alla tesi per fornire un esempio pratico di come possano essere implementati i protocolli dello stack TCP/IP. Il programma in questione è stato realizzato sfruttando il componente TcpClient messo a disposizione da Delphi: questo implementa le varie fasi di una connessione TCP dal lato del client, lasciando quindi al programmatore il solo compito di implementare il protocollo utilizzato a livello applicazione. In particolare, nel programma INTERNET SUITE sono stati implementati i due protocolli relativi alla gestione della posta elettronical: l'SMTP e il POP3. Una volta eseguito, il programma si presenta all'utente con la seguente interfaccia:

Prima di avviare un qualsiasi modulo, occorre settare le varie impostazione, relative al proprio account di posta, nell'apposita finestra:

Page 34: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

Dopo aver settato il programma, è possibile eseguire uno dei seguenti moduli:

? SMTP Mail Sender un piccolo programma che permette la trasmissione di semplici e-mail testuali;

? POP3 Mail Receiver consente la ricezione dei messaggi dalla propria casella di posta elettronica;

? INTERNET BROWSER un semplice browser che utilizza l'engine di Internet Explorer.

Page 35: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

SMTP mail sender

Questo modulo consente l'invio di semplici e-mail testuali: per fare ciò, è sufficiente scegliere l'indirizzo dei destinatari (immettendolo direttamente da tastiera o selezionandolo tra quelli disponibili nel menu a tendina), specificare l'oggetto ed il testo del messaggio e cliccare sul tasto INVIA.

Non è stata implementata la funzione di invio degli allegati, poichè la sua complessità non avrebbe concesso tempo a sufficienza per terminare il resto del programma. L'SMTP Mail Sender gestisce, in maniera del tutto automatica, una sessione di scambio dati tra il programma dell'utente e il suo server di posta tramite l'utilizzo del protocollo SMTP. Inoltre, il programma è interfacciato con un database nel quale sono memorizzati tutti gli indirizzi e-mail dell'utente. Il database è accessibile cliccando sul tasto rubrica:

Page 36: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

nella finestra che si aprirà, è possibile gestire i vari indirizzi memorizzati, aggiungendone o eliminandone o vostro piacimento. È stata inoltre aggiunta, a scopo didattico, un memo, dallo stile simile a quello dei terminali in voga negli anni '80. Esso riporta tutti i messaggi che vengono scambiati tra client e mail server durante una sessione di invio e-mail; chi quindi non avesse ancora compreso i passi fondamentali previsti dal protocollo SMTP, può controllare questa memo a trasmissione terminata per osservare le varie stringhe che compongono la sessione di comunicazione tra i due host. La figura di seguito mostra la finestra al termine dell'invio di una e-mail terminato con successo:

Page 37: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

POP3 mail receiver

Se l'SMTP Mail Sender, ci permette di inviare e-mail, il POP3 Mail Receiver fa l'esatto contrario, cioè ci consente di scaricare la posta elettronica dalla nostra casella e-mail. Il protocollo utilizzato questa volta è, come suggerisce il nome del modulo, il POP3. Il suo funzionamento, se possibile, è ancora più semplice di quello del precedente modulo, poichè è sufficente cliccare sul tasto RICEVI per scaricare la propria posta. Terminata la fase di ricezione, la lista in alto a destra indica tutte le e-mail ricevute, identificate dal loro mittente: cliccando su un mittente a scelta, il corrispondente messaggio sarà visualizzato nella memo a fianco.

Page 38: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

Come nel modulo precedente, non sono state implementate le estensioni MIME (allegati): un allegato apparirà quindi come una lunga serie di caratteri indecifrabili. Alla pari dell'SMTP Mail Sender, è inoltre disponibile il terminale che indica le varie fasi della sessione POP3. Per chi volesse tenere le e-mail scaricate, queste sono memorizzate, con estensione *.txt e numerate in base all'ordine di scaricamento, nella cartella del programma.

Internet browser

Non c'è molto da dire su questo modulo, se non che permette di navigare in Internet tramite il motore di Internet Explorer, fornito dal componente WebBrowser del Delphi. Tutti i comandi per la navigazione sono rappresentati dai tasti nella parte alta della finestra. Chi, quindi, ha familiarità con Internet Explorer, non avrà problemi a utilizzare questo modulo.

Page 39: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti
Page 40: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

**** Codice ****

Di seguito, il codice del programma INTERNET SUITE (molto probabile che qualche bug sia ancora presente .....)

Form principale

unit main_form; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, Buttons, ComCtrls, ExtCtrls,tesina; type Timpostazioni= record smtpuser,smtpserver,smtpport,popuser,poppass,popserver,popport: string; end; TF_Inet_suite = class(TForm) Menu_inetsuite: TMainMenu; File1: TMenuItem; InternetBroswer1: TMenuItem; SMTPmailsender1: TMenuItem; POP3Mailreceive1: TMenuItem; Impostazioni1: TMenuItem; Exit1: TMenuItem; About1: TMenuItem; SpeedButton1: TSpeedButton; SpeedButton2: TSpeedButton; SpeedButton3: TSpeedButton; StatBar_suite: TStatusBar; Im_sfondo_main: TImage; VisualizzaTesi1: TMenuItem; function carica_imp: boolean; procedure Impostazioni1Click(Sender: TObject); procedure Exit1Click(Sender: TObject); procedure SpeedButton3MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure FormPaint(Sender: TObject); procedure FormCreate(Sender: TObject); procedure SMTPmailsender1Click(Sender: TObject); procedure SpeedButton1Click(Sender: TObject); procedure SpeedButton3Click(Sender: TObject); procedure InternetBroswer1Click(Sender: TObject); procedure Im_sfondo_mainMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure SpeedButton2Click(Sender: TObject); procedure SpeedButton1MouseMove(Sender: TObject; Shift: TShiftState; X,

Page 41: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

Y: Integer); procedure SpeedButton2MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure About1Click(Sender: TObject); procedure VisualizzaTesi1Click(Sender: TObject); private { Private declarations } public { Public declarations } caricate: boolean; impostazioni: Timpostazioni; end; var F_Inet_suite: TF_Inet_suite; const default = 'Clicca su un tasto per lanciare l''applicazione desideratà; implementation uses smtp_form, impostazioni_form, browser_form, pop3_form; {$R *.dfm} function TF_Inet_suite.carica_imp:boolean; var txtimp: textfile; begin {funzione per il caricamento delle impostazioni dal file impostazioni.txt} if fileexists(GetCurrentDir + '\impostazioni.txt') then begin {è presente il file impostazioni.txt, carichiamo le impostazioni in un record} AssignFile(txtimp,GetCurrentDir + '\impostazioni.txt'); reset(txtimp); with impostazioni do begin readln(txtimp,smtpuser); readln(txtimp,smtpserver); readln(txtimp,smtpport); readln(txtimp,popuser); readln(txtimp,poppass); readln(txtimp,popserver); readln(txtimp,popport); end; CloseFile(txtimp); carica_imp:=true; end else carica_imp:=false; end; procedure TF_Inet_suite.Impostazioni1Click(Sender: TObject); begin F_impostazioni.Show;

Page 42: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

end; procedure TF_Inet_suite.Exit1Click(Sender: TObject); begin close; end; procedure TF_Inet_suite.SpeedButton3MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin StatBar_suite.SimpleText:='Clicca per lanciare Internet Browser'; end; procedure TF_Inet_suite.FormPaint(Sender: TObject); begin StatBar_suite.SimpleText:=default; end; procedure TF_Inet_suite.FormCreate(Sender: TObject); begin caricate:=carica_imp; if not caricate then messagedlg('Impossibile caricare le impostazioni!'+ #10+#13 + 'File impostazioni.txt mancantè,mtInformation,[mbOK],0) end; procedure TF_Inet_suite.SMTPmailsender1Click(Sender: TObject); begin F_smtp.show; end; procedure TF_Inet_suite.SpeedButton1Click(Sender: TObject); begin F_smtp.Show; end; procedure TF_Inet_suite.SpeedButton3Click(Sender: TObject); begin F_browser.show; end; procedure TF_Inet_suite.InternetBroswer1Click(Sender: TObject); begin F_browser.Show; end; procedure TF_Inet_suite.Im_sfondo_mainMouseMove(Sender: TObject;

Page 43: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

Shift: TShiftState; X, Y: Integer); begin StatBar_suite.SimpleText:=default; end; procedure TF_Inet_suite.SpeedButton2Click(Sender: TObject); begin {visualizziamo la finestra per spedire le e-mail} F_pop3.show; end; procedure TF_Inet_suite.SpeedButton1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin StatBar_suite.SimpleText:='Clicca per lanciare SMTP mail sender'; end; procedure TF_Inet_suite.SpeedButton2MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin StatBar_suite.SimpleText:='Clicca per lanciare Pop3 mail receiver'; end; procedure TF_Inet_suite.About1Click(Sender: TObject); begin messagedlg('Programma realizzato da Pianu Danielè+#10#13+ 'Allegato alla tesina "TCP/IP, il cuore di Internet"',mtInformation,[mbOK],0); end; procedure TF_Inet_suite.VisualizzaTesi1Click(Sender: TObject); begin F_tesina.Show; end; end.

Form SMTP mail sender

unit smtp_form; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Page 44: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

Dialogs, StdCtrls, Buttons,main_form,eredita_form, DB, ADODB, ExtCtrls; type TF_smtp = class(TF_eredita) SpeedButton1: TSpeedButton; GBox_dati: TGroupBox; GBox_testo: TGroupBox; E_oggetto: TEdit; Label_a: TLabel; Label_cc: TLabel; Label_oggetto: TLabel; M_testo: TMemo; CBox_to: TComboBox; ADOConnection: TADOConnection; ADOTable: TADOTable; DataSource: TDataSource; ADODataSet: TADODataSet; CBox_cc: TComboBox; Image_smtp: TImage; SBut_reset: TSpeedButton; SBut_rubrica: TSpeedButton; procedure invia_posta; function connetti: boolean; function ctrl_risp: integer; function invia_dati: boolean; function invia_testo: boolean; procedure gestione_err(error: integer); procedure disconnetti; procedure SpeedButton1Click(Sender: TObject); procedure BB_exitClick(Sender: TObject); procedure CBox_toChange(Sender: TObject); procedure CBox_ccChange(Sender: TObject); procedure SBut_resetClick(Sender: TObject); procedure SBut_rubricaClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var F_smtp: TF_smtp; implementation uses rubrica; {$R *.dfm} procedure TF_smtp.invia_posta; begin {procedura per l'invio della posta} if connetti then begin if invia_dati then if invia_testo then begin messagedlg('E-mail inviata con successò,mtInformation,[mbOk],0); end; disconnetti;

Page 45: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

end end; function TF_smtp.connetti: boolean; var risp: integer; begin {funzione per la connessione al server} if F_Inet_suite.caricate then begin Client.RemoteHost:=F_Inet_suite.impostazioni.smtpserver; Client.RemotePort:=F_Inet_suite.impostazioni.smtpport; Client.Open; if Client.Connected and client.WaitForData(800) then begin risp:=ctrl_risp; if risp=220 then connetti:=true else begin gestione_err(risp); connetti:=false end end else begin messagedlg('Impossibile collegarsi al server '+ F_Inet_suite.impostazioni.smtpserver ,mtError,[mbOK],0); connetti:=false; end; end else begin messagedlg('Impossibile stabilire una connessione!'+#10#13+ 'Impostare correttamente i parametri nel menù connessionì,mtError,[mbOK],0); connetti:=false; end; end; function TF_smtp.ctrl_risp: integer; var codmess: string; begin {funzione per l'estrapolazione del codice di errore-conferma dal messaggio inviatoci dal server} codmess:=Client.Receiveln(); Lbox_Server.Items.Add(codmess); ctrl_risp:=strtoint(codmess[1]+codmess[2]+codmess[3]); end; function TF_smtp.invia_dati: boolean; var risp: integer; begin

Page 46: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

{funzione riservata all'invio dei dati personali} Client.Sendln('HELO '+ F_Inet_suite.impostazioni.smtpuser); Lbox_server.Items.Append('HELO '+ F_Inet_suite.impostazioni.smtpuser); risp:=ctrl_risp; if risp=250 then begin {ok invio user name, inviamo il nostro indirizzo (VUOTO eh eh .....)} Client.Sendln('MAIL FROM:<>'); Lbox_server.Items.Append('MAIL FROM:<>'); risp:=ctrl_risp; if risp=250 then begin {ok invio mail from, invio rcpt to} Client.Sendln('RCPT TO:<'+ CBox_to.Text+'>'); Lbox_server.Items.Append('RCPT TO:<'+ CBox_to.Text+'>'); risp:=ctrl_risp; if risp=250 then begin {ok invio rcpt to, invio data} Client.Sendln('DATÀ); Lbox_server.Items.Append('DATÀ); risp:=ctrl_risp; if risp=354 then {ok invio data, e finalmente esco da questa funzione ! :-)} invia_dati:=true else begin {non ho inviato correttamente data, ritorno false} gestione_err(risp); invia_dati:=false; end; end else begin {non ho inviato correttamente rcpt to, ritorno false} gestione_err(risp); invia_dati:=false; end; end else begin {non ho inviato correttamente mail from, ritorno false} gestione_err(risp); invia_dati:=false; end; end else begin {non ho inviato correttamente helo, ritorno false} gestione_err(risp); invia_dati:=false; end; end;

Page 47: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

function TF_smtp.invia_testo: boolean; var i:integer; begin {funzione dedicata all'invio del testo dell'email} {comunico nella list box di status che e in corso l'invio del messaggio} Lbox_server.Items.Append('Invio testo e-mail in corso......'); {inviamo i vari dati come da, a, cc, oggetto ...} Client.sendln('From: '+ F_Inet_suite.impostazioni.smtpuser); Client.Sendln('To: '+ CBox_to.Text); Client.Sendln('Cc: '+ CBox_cc.Text); Client.Sendln('Subject: '+E_oggetto.Text); Client.Sendln(''); {inviamo il testo dell'email suguito da un punto} for i:=0 to M_testo.Lines.Count-1 do Client.Sendln(M_testo.Lines[i]); Client.Sendln(''); Client.Sendln('.'); if ctrl_risp=250 then {testo dell'email inviato con successo} invia_testo:=true else {invio testo email fallito} invia_testo:=false end; procedure TF_smtp.gestione_err(error: integer); begin {procedura per la comunicazione dei messaggi di errore dal server} case error of 251: messagedlg('Codice di stato 521 !'+#10#13+ 'In risposta al comando RCPT, indica che il destinatario non è presente tra I destinatari del'+#10#13+ 'server ma il messaggio verrà inoltrato ad un indirizzo diversò,mtError,[mbOK],0); 421: messagedlg('Codice errore 421!'+#10#13+ 'Servizio non più disponibile. Uno dei possibili motivi può esserè+ 'una richiesta di shutdown in corso.',mtError,[mbOK],0); 450: messagedlg('Codice errore 450!'+#10#13+ 'Una possibile causa può essere il fatto che la mailbox è in usò, mtError,[mbOK],0); 551: messagedlg('Codice errore 551!'+#10#13+ 'In risposta al comando RCPT, indica che il destinatario non è presentè+ 'tra i destinatari del server ed invita a provare con un indirizzo alternativò, mtError,[mbOK],0); 553: messagedlg('Codice errore 553!'+#10#13+ 'Il nome della mailbox specificata non è sintatticamente correttò, mtError,[mbOK],0);

Page 48: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

501: messagedlg('Codice errore 501!'+#10#13+ 'Parametro o argomento erratì,mtError,[mbOk],0); 554: messagedlg('Codice errore 554!'+#10#13+ 'Transazione fallità,mtError,[mbOK],0); end; end; procedure TF_smtp.disconnetti; begin {procedura per la disconnessione dal server} Client.Sendln('QUIT'); Lbox_server.Items.Append('QUIT'); if ctrl_risp=221 then client.Disconnect else messagedlg('Impossibile disconnettersi!',mtError,[mbOK],0); end; procedure TF_smtp.SpeedButton1Click(Sender: TObject); begin {lanciamo la procedura di ricezione della posta in risposta alla pressione del relativo tasto} invia_posta; end; procedure TF_smtp.BB_exitClick(Sender: TObject); begin close; end; procedure TF_smtp.CBox_toChange(Sender: TObject); begin {selezioniamo un indirizzo tra quelli presenti nel database} adodataset.Active:=true; while not adodataset.Eof do begin {carichiamo uno ad uno i campi del dataset nel combobox} CBox_to.Items.Append(adodataset.FieldValues['indirizzò]); adodataset.Next; end; adodataset.First; end; procedure TF_smtp.CBox_ccChange(Sender: TObject); begin {selezioniamo un indirizzo tra quelli presenti nel database}

Page 49: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

adodataset.Active:=true; while not adodataset.Eof do begin {carichiamo uno ad uno i campi del dataset nel combobox} CBox_cc.Items.Append(adodataset.FieldValues['indirizzò]); adodataset.Next; end; adodataset.First; end; procedure TF_smtp.SBut_resetClick(Sender: TObject); begin {resetto i campi} CBox_to.Text:=''; CBox_cc.Text:=''; E_oggetto.Text:=''; M_testo.Clear; end; procedure TF_smtp.SBut_rubricaClick(Sender: TObject); begin F_rubrica.show; end; end.

Form Rubrica

unit rubrica; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids,smtp_form, StdCtrls, DB, ADODB, ExtCtrls; type TF_rubrica = class(TForm) DBGrid_rubrica: TDBGrid; ADOQ_aggiungi: TADOQuery; ADOQ_elimina: TADOQuery; Image_rubrica: TImage; ADOQ_select: TADOQuery; DataSource_rubrica: TDataSource; Label1: TLabel; Label2: TLabel; Label3: TLabel; E_nome: TEdit; E_cognome: TEdit; E_indirizzo: TEdit; Button1: TButton; B_elimina: TButton;

Page 50: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

procedure Button1Click(Sender: TObject); procedure B_eliminaClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var F_rubrica: TF_rubrica; implementation {$R *.dfm} procedure TF_rubrica.Button1Click(Sender: TObject); begin {aggingiamo un indirizzo} ADOQ_aggiungi.Parameters[0].Value:=E_nome.Text; ADOQ_aggiungi.Parameters[1].Value:=E_cognome.Text; ADOQ_aggiungi.Parameters[2].Value:=E_indirizzo.Text; ADOQ_aggiungi.ExecSQL; ADOQ_select.Active:=false; ADOQ_select.Active:=true; end; procedure TF_rubrica.B_eliminaClick(Sender: TObject); begin {eliminiamo un indirizzo} ADOQ_elimina.Parameters[0].Value:=E_nome.Text; ADOQ_elimina.Parameters[1].Value:=E_cognome.Text; ADOQ_elimina.Parameters[2].Value:=E_indirizzo.Text; ADOQ_elimina.ExecSQL; ADOQ_select.Active:=false; ADOQ_select.Active:=true; end; end.

Form POP3 mail receiver

unit pop3_form; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Sockets,eredita_form,main_form, Buttons, ExtCtrls; type

Page 51: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

TF_pop3 = class(TF_eredita) M_messaggi: TMemo; LBox_email: TListBox; SBut_ricevi: TSpeedButton; Image_pop3: TImage; procedure ricevi_posta; function connessione:boolean; function autenticazione: boolean; procedure transazione; procedure disconnetti; function ctrl_risposta: string; procedure gestione_errori(n: char; error: string); function ctrl_n_messaggi: integer; procedure pigliamessaggio(n: integer); procedure vis_messaggi; procedure LBox_emailClick(Sender: TObject); procedure SBut_riceviClick(Sender: TObject); private { Private declarations } public { Public declarations } n_email: integer; end; var F_pop3: TF_pop3; implementation {$R *.dfm} procedure TF_pop3.ricevi_posta; begin {procedura principale per la ricezione della posta} {ci connettiamo al server} if connessione then begin {se siamo connessi} if autenticazione then transazione; disconnetti; end; vis_messaggi; end; function TF_pop3.connessione: boolean; begin {funzione per la disconnessione dal server} if F_Inet_suite.caricate then begin

Page 52: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

Client.RemoteHost:=F_Inet_suite.impostazioni.popserver; Client.RemotePort:=F_Inet_suite.impostazioni.popport; Client.Open; if Client.Connected and Client.WaitForData(800) then begin connessione:=true; Lbox_server.Items.Append(Client.Receiveln()); end else begin connessione:=false; messagedlg('Impossibile connettersi al server '+ F_Inet_suite.impostazioni.popserver,mtError,[mbOk],0); end; end else begin messagedlg('Impossibile stabilire una connessione!'+#10#13+ 'Impostare correttamente i parametri nel menù connessionì,mtError,[mbOK],0); connessione:=false; end; end; function TF_pop3.autenticazione: boolean; var risposta: string[50]; begin {procedura per l'autenticazione al server pop3} {inviamo il nostro user name} Client.Sendln('USER '+ F_Inet_suite.impostazioni.popuser); Lbox_server.Items.Append(F_Inet_suite.impostazioni.popuser); risposta:=ctrl_risposta; Lbox_server.Items.Append(risposta); if risposta='+OK' then begin {se lo user name è corretto, inviamo la password} Client.Sendln('PASS '+ F_Inet_suite.impostazioni.poppass); Lbox_server.Items.Append('PASS ********'); risposta:=ctrl_risposta; Lbox_server.Items.Append(risposta); if risposta='+OK' then {l'autenticazione è andata a buon fine} autenticazione:=true else begin {l'invio della password non si è concluso con successo} gestione_errori('2',risposta); autenticazione:=false; end; end else begin {lo user name non è corretto} gestione_errori('1',risposta); autenticazione:=false; end;

Page 53: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

end; procedure TF_pop3.transazione; var i,n: integer; begin {procedura per l'implementazione della fase di transazione} {controllo il numero di messaggi presenti nel server} n:=ctrl_n_messaggi; n_email:=n; if n > 0 then {prelievo i messaggi} for i:=1 to n do pigliamessaggio(i) else gestione_errori('3',''); end; procedure TF_pop3.disconnetti; begin {procedura per la disconnessione dal server pop3} Client.Sendln('QUIT'); Lbox_server.Items.Append('QUIT'); if ctrl_risposta='+OK' then Lbox_server.Items.Append('+Ok'); Client.Disconnect; end; function TF_pop3.ctrl_risposta: string; var risposta: string[50]; begin {funzione per il controllo dei messaggi di risposta ai comandi del server} risposta:=Client.Receiveln(); {controlliamo la stringa ricevuta dal server} if (risposta[1]+risposta[2]+risposta[3])='+OK' then ctrl_risposta:=risposta[1]+risposta[2]+risposta[3] else ctrl_risposta:=risposta; end; procedure TF_pop3.gestione_errori(n: char; error: string); begin {procedura per la gestione della comunicazione di eventuali errori} case n of

Page 54: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

{user name errato} '1': messagedlg('User name errato! Il server ha riportato il seguente errorè+ CRLF + error,mtError,[mbOK],0); {password errata} '2' :messagedlg('Password errata! Il server ha riportato il seguente errorè + CRLF + error,mtError,[mbOK],0); {non ci sono messaggi nella mail box} '3': messagedlg('Non ci sono messaggi nella mail box',mtInformation,[mbOK],0) end; end; function TF_pop3.ctrl_n_messaggi: integer; var risposta,n: string[50]; i: integer; begin {funzione per il controllo del numero dei messaggi presenti nella mail box} Client.Sendln('STAT'); Lbox_server.Items.Append('STAT'); risposta:=Client.Receiveln(); Lbox_server.Items.Append(risposta); {mi ricavo il numero di messaggi dalla stringa di risposta del server al comando STAT} i:=5; n:=risposta[5]; while not(risposta[i+1]=' ') do begin i:=i+1; n:=n+risposta[i]; end; ctrl_n_messaggi:=strtoint(n); end; procedure TF_pop3.pigliamessaggio(n: integer); var txt: textfile; temp,nome_temp: string; function ctrl_linea: string; var temp_cmd: string[10]; i: integer; trovato: boolean; begin {ricerco il mittente e l'oggetto nell'email} if not (temp='') then begin temp_cmd:=temp[1]; {controllo se la stringa ricevuta dal server contiene il comando from} for i:=2 to 5 do temp_cmd:=temp_cmd+temp[i]; if (temp_cmd='FROM:') or (temp_cmd='from:') or (temp_cmd='From:') then {la stringa inviata dal server è uguale a from:} trovato:=true

Page 55: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

else {la stringa inviata non corrisponde a from } trovato:=false; if trovato then {restituiamo il valore del campo che ci interessa} ctrl_linea:=temp else {non abbimao trovato ne from, ne subject e restituiamo una striga nulla} ctrl_linea:=''; end; end; begin {procedura per il ritiro delle e-mail} {apro il file dove salverò il contenuto dell'email} assignfile(txt,GetCurrentDir+'\'+ inttostr(n) + '.txt'); rewrite(txt); {invio al server la stringa di richiesta del messaggio} Client.Sendln('RETR '+inttostr(n)); LBox_server.Items.Append('RETR '+inttostr(n)); {se la risposta del server è positiva} if ctrl_risposta='+OK' then begin temp:=client.Receiveln(); while temp<>'.' do begin writeln(txt,temp); nome_temp:=nome_temp+ctrl_linea; temp:=Client.Receiveln(); end; closefile(txt); Lbox_email.Items.Append(nome_temp); end; end; procedure TF_pop3.vis_messaggi; begin {procedura per la visualizzazione delle e-mail nella list box} end; procedure TF_pop3.LBox_emailClick(Sender: TObject); var txt: textfile; temp: string; begin inherited; {visualizziamo il file con nome corrispondente all'indice della riga

Page 56: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

della list box selezionata} assignfile(txt,GetCurrentDir + '\' + inttostr(Lbox_email.ItemIndex+1) + '.txt'); reset(txt); {visualizziamo il testo dell'email nella memo} M_messaggi.Clear; while not eof(txt) do begin readln(txt,temp); M_messaggi.Lines.Append(temp); end; closefile(txt); end; procedure TF_pop3.SBut_riceviClick(Sender: TObject); begin {riceviamo la posta} Lbox_email.Clear; ricevi_posta; end; end.

Form Eredita

(questa form, ereditata dai moduli SMTP e POP3, contiene il componente socket ed

il memo in sitle terminale)

?

unit eredita_form; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Sockets; type TF_eredita = class(TForm) Client: TTcpClient; GBox_server: TGroupBox; Lbox_server: TListBox; private { Private declarations } public { Public declarations } end;

Page 57: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

var F_eredita: TF_eredita; implementation {$R *.dfm} end.

Form IMPOSTAZIONI

unit impostazioni_form; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons,main_form; type TF_impostazioni = class(TForm) GBox_smtp: TGroupBox; GBox_pop3: TGroupBox; E_smtpuser: TEdit; E_smtpserver: TEdit; E_smtpporta: TEdit; Label_user: TLabel; Label_server: TLabel; Label_porta: TLabel; E_user: TEdit; E_pass: TEdit; E_server: TEdit; E_porta: TEdit; Label_popuser: TLabel; Label_poppass: TLabel; Label_popserver: TLabel; Label_popporta: TLabel; BB_ok: TBitBtn; BB_canc: TBitBtn; procedure BB_cancClick(Sender: TObject); procedure BB_okClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var F_impostazioni: TF_impostazioni; implementation {$R *.dfm} procedure TF_impostazioni.BB_cancClick(Sender: TObject); begin

Page 58: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

{non vogliamo salvare i cambiamenti, chiudiamo la finestra} close; end; procedure TF_impostazioni.BB_okClick(Sender: TObject); var txtimp: textfile; begin {procedura per il salvataggio delle impostazioni su di un file di testo} AssignFile(txtimp,GetCurrentDir + '\impostazioni.txt'); rewrite(txtimp); with GBox_SMTP do begin {scriviamo le impostazioni dell'SMTP mail sender} writeln(txtimp,E_smtpuser.text); writeln(txtimp,E_smtpserver.text); writeln(txtimp,E_smtpporta.text); end; with GBox_POP3 do begin {scriviamo le impostazioni del POP3 mail receiver} writeln(txtimp,E_user.text); writeln(txtimp,E_pass.text); writeln(txtimp,E_server.text); writeln(txtimp,E_porta.text); end; CloseFile(txtimp); F_inet_suite.carica_imp; F_Inet_suite.caricate:=true; Close; end; end.

Form INTERNET BROWSER

unit browser_form; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ToolWin, OleCtrls, SHDocVw, Menus, main_form, ImgList; type TF_browser = class(TForm) CoolBar1: TCoolBar; SB_esame: TStatusBar; ToolBar1: TToolBar;

Page 59: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

ODialog_apri: TOpenDialog; Browser: TWebBrowser; Mmenu_browser: TMainMenu; MI_file: TMenuItem; TB_indietro: TToolButton; TB_avanti: TToolButton; TB_home: TToolButton; TB_stop: TToolButton; TB_aggiorna: TToolButton; TB_vai: TToolButton; CB_indirizzo: TComboBox; TB_apri: TToolButton; ToolBar2: TToolBar; ImageList1: TImageList; Esci1: TMenuItem; procedure TB_indietroClick(Sender: TObject); procedure TB_avantiClick(Sender: TObject); procedure TB_homeClick(Sender: TObject); procedure TB_stopClick(Sender: TObject); procedure BrowserBeforeNavigate2(Sender: TObject; const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool); procedure BrowserNavigateComplete2(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); procedure BrowserCommandStateChange(Sender: TObject; Command: Integer; Enable: WordBool); procedure BrowserDocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); procedure BrowserProgressChange(Sender: TObject; Progress, ProgressMax: Integer); procedure CB_indirizzoClick(Sender: TObject); procedure TB_aggiornaClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure TB_vaiClick(Sender: TObject); procedure ToolButton1Click(Sender: TObject); procedure CB_indirizzoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure Esci1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var F_browser: TF_browser; implementation {$R *.dfm} procedure TF_browser.TB_indietroClick(Sender: TObject); begin {indietro} Browser.GoBack; end; procedure TF_browser.TB_avantiClick(Sender: TObject); begin {avanti}

Page 60: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

Browser.GoForward; end; procedure TF_browser.TB_homeClick(Sender: TObject); begin {vai alla home page} Browser.GoHome; end; procedure TF_browser.TB_stopClick(Sender: TObject); begin {blocca il caricamento della pagina} Browser.Stop; end; procedure TF_browser.BrowserBeforeNavigate2(Sender: TObject; const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool); begin {indichiamo nella status bar il caricamento della pagina in corso} SB_esame.SimpleText:='Ricerca di '+ URL +' in corsò; end; procedure TF_browser.BrowserNavigateComplete2(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); begin {indichiamo nella status bar che la pagina è stata caricata} SB_esame.SimpleText:=URL + ' raggiuntò; end; procedure TF_browser.BrowserCommandStateChange(Sender: TObject; Command: Integer; Enable: WordBool); begin {abilitiamo o disabilitiamo i comandi indietro e avanti} case command of CSC_NAVIGATEBACK: TB_indietro.Enabled:=Enable; CSC_NAVIGATEFORWARD: TB_avanti.Enabled:=Enable; end; end; procedure TF_browser.BrowserDocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); begin {caricamento della pagina completato} {aggiorniamo la status bar e il combo box con l'indirizzo corrente} SB_esame.SimpleText:='Caricamento '+ URL + ' completatò; CB_indirizzo.Text:=URL; end;

Page 61: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

procedure TF_browser.BrowserProgressChange(Sender: TObject; Progress, ProgressMax: Integer); begin {mostriamo nella status bar la percentuale di caricamento della pagina} if Progress > 0 then SB_esame.SimpleText:=inttostr((Progress * 100) div ProgressMax) + '% completatò; end; procedure TF_browser.CB_indirizzoClick(Sender: TObject); begin {navighiamo nell'URL inserito nel combo box} if browser.Offline then browser.Offline:=false; Browser.Navigate(CB_indirizzo.Text); {se l'URL non è presente nel combo box, l'aggiungiamo} if CB_indirizzo.Items.IndexOf(CB_indirizzo.Text)= -1 then CB_indirizzo.Items.Add(CB_indirizzo.Text); end; procedure TF_browser.TB_aggiornaClick(Sender: TObject); begin {aggiorno la pagina} Browser.Refresh2; end; procedure TF_browser.FormCreate(Sender: TObject); begin {apriamo la home page} Browser.GoHome; end; procedure TF_browser.TB_vaiClick(Sender: TObject); begin {vai all'URL della combo box} if browser.Offline then browser.Offline:=false; Browser.Navigate(CB_indirizzo.Text); end; procedure TF_browser.ToolButton1Click(Sender: TObject); begin {apriamo una pagina dall'apposita finestra di dialogo} if ODialog_apri.Execute then begin ODialog_apri.InitialDir:=GetCurrentDir; CB_indirizzo.Text:='file:///'+ ODialog_apri.FileName; CB_indirizzoClick(CB_indirizzo); end; end;

Page 62: TCP/IPtrascendere il dovere di obbedienza alla propria nazione. Questi stessi principi stanno alla base della fondazione delle Nazioni Unite (ONU), con lo scopo di fornire gli strumenti

procedure TF_browser.CB_indirizzoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin {se premiamo invio ci connettiamo alla pagina scritta nella coolbar} if browser.Offline then browser.Offline:=false; if key = VK_RETURN then Browser.Navigate(CB_indirizzo.Text); end; procedure TF_browser.Esci1Click(Sender: TObject); begin close; end; end.