Technology Experience

Contenuti gestiti da Igor Damiani
posts - 949, comments - 2741, trackbacks - 15120

My Links

News

  • Questo blog si propone di raccogliere riflessioni, teoriche e pratiche, su tutto quello che riguarda il world-computing che mi sta attorno: programmazione in .NET, software attuale e futuro, notizie provenienti dal web, tecnologia in generale, open-source.

    L'idea è quella di lasciare una sorta di patrimonio personale, una raccolta di idee che un giorno potrebbe farmi sorridere, al pensiero di dov'ero e cosa stavo facendo.

    10/05/2005,
    Milano

Archives

Post Categories

Generale

Da una dorsale Internet al blocco note in multipli di due

Zero: questo era il valore il byte in quel preciso momento. Era uno dei tanti bytes nella grande Rete, e navigava tranquillo su una grande dorsale americana. Faceva parte di un pacchetto TCP/IP, la sua destinazione era già stata fissata a valle, ma non sapeva come arrivarci. Poco male - si diceva il byte - al prossimo router chiederò informazioni, lui saprà sicuramente da che parte mandarmi. In realtà questo non sarebbe stato compito suo, ci avrebbe pensato l'header del pacchetto, ma questo lui lo ignorava. Il byte viaggiava veloce, più lento rispetto ai classici bus AGP o PCI, ma molto più rapido rispetto ad una banale linea ADSL a due Mbit.

Quella in cui si trovava il byte era una dorsale Internet fra le più critiche, che doveva assicurare il passaggio di pacchetti in ogni evenienza. Secondo il protocollo, lui era uno dei quattro byte che formavano un indirizzo IP completo. Gli altri bytes erano sparsi chissà dove nel pacchetto, per cui non poteva sapere il loro valore effettivo. Questa cosa lo spaventata un po', perchè non aveva assolutamente modo di conoscere davvero la sua destinazione finale. Si godeva il viaggio, nel frattempo, ed era affascinato da quello che vedeva. Era come viaggiare in una lunga ed ampia autostrada con non meno di otto corsie parallele, in grado di garantire una velocità di trasmissione appena adeguata alle esigenze della Rete che cresceva e cambiava forma in real-time, mentre lui ci viaggiava dentro. Di fianco al byte viaggiava un'e-mail, un po' più in là l'ultimo webcast di Michele si faceva strada infilandosi in mezzo allo stream audio di una radio rumena. Era un continuo sorpassare, scambiarsi di corsia, tutto per evitare eventuali timeout della comunicazione. Provate voi a viaggiare su una statale delle nostre, dove sotto il vostro naso le corsie di allargano, si uniscono, si spostano in lungo ed in largo e si attorcigliano. Si restringono per entrare in un modem analogico, oppure si allargano improvvisamente quando incontrano un linea di trasmissione a fibra ottica. Questo era lo scenario in cui il byte si ritrovava: nonostante l'avesse fatto già altre volte, era meravigliato lo stesso. La Rete fa di questi scherzi. Una volta che ci sei stato dentro, non vorresti più uscirne, nemmeno per tutti e sedici bit di un vecchio indirizzo di memoria di chissà quale vetusto PC.

Dopo qualche secondo, il pacchetto TCP/IP raggiunse un router mediano. Finalmente, dopo un lungo viaggio, i trentadue bit dell'indirizzo IP si unirono, per comunicare all'interfaccia di comunicazione del router la loro destinazione. La consultazione delle tabelle di routing sulle linee ad alta densità può richiedere qualche secondo, cosa che in effetti avvenne. Il byte - ansioso di ripartire - non stava davvero nella pelle, e quando ebbe la conferma, volò via alla volta dell'indirizzo del sistema di arrivo finale. Non poteva ovviamente saperlo, ma si trattava di un potente sistema desktop AMD a sessantaquattro bit di ultima generazione, con centoventotto bit di calcolo sulla pipeline grafica della scheda video, che a sua volta disponeva di duecentocinquantasei MBytes di memoria ad alta velocità. Solo il Creatore poteva sapere cosa avrebbe potuto fare in un sistema del genere, o che fine avrebbe fatto! Per quello che ne sapeva lui, magari avrebbe soltanto sfiorato il MAC address della scheda di rete solo per essere rispedito dall'altra parte della Rete nel ciclo di clock successivo. Meglio stare calmi - pensò d'un tratto il byte - magari mancano ancora cinquecentododici hops (!) prima di giungere al sistema, e non sto ragionando quadrimensionalmente. Insieme agli altri, oltrepassò il router e si incamminò verso un altro bus più piccolo. Il byte diede un'occhiata dietro di sè, e vide milleventiquattro bytes in attesa, che come lui stavano per essere reindirizzati chissà dove, in altre parti dello sconfinato cyberspazio. Se fosse rimasto lì ancora qualche ciclo di clock del router, avrebbe provocato una collisione nella trasmissione che sarebbe stata gestita dal protocollo. Non era proprio il caso di fare i furbi. Il byte, e così gli altri che erano insieme a lui, si lanciarono a capofitto sul bus di trasmissione TCP/IP, una caduta virtuale ad un livello più basso. Duemilaquarantotto cicli di clock più tardi, il byte era ancora nei paraggi. Di fronte a lui uno spettacolo inaudito, che non credeva possibile. Due armate si stavano fronteggiando, muovendosi agilmente lungo la linea digitale, occupando aree di memoria evidentemente non allocate. Da una parte, un campo int di SQL Server stava attaccando sui fianchi, schierando tutti i suoi quattromilanovantasei bit, l'avversario che a sua volta si difendeva dall'interno di una VM Java che stava girando nella memoria attigua. I bit coinvolti si mantenevano in movimento, seguendo il flusso di dati che correvano sulla linea. La memoria in quella zona era sporca, e il byte faceva fatica a distinguere cosa stesse accadendo realmente: riuscì solamente a vedere - in mezzo alla foschia - una variabile C++ dichiarata come double in un applicativo Java. Sebbene fosse l'armata più numerosa, ottomilacentonovantadue bit di estensione in RAM, stava avendo la peggio. La velocità con cui SQL Server elabora le informazioni permettevano al thread di reagire con velocità al software Java in esecuzione. Sebbene non fosse di parte, il byte capì che presta la VM sarebbe collassata e la variabile double sarebbe stata spazzata via. Poco male, sperò che il garbage collector di Java facesse il suo dovere e che ripulisse la zona quanto prima.

Lui non poteva aspettare, il TCP/IP non può aspettare. Il protocollo deve garantire determinate tempistiche, il timeout era dietro l'angolo. Il router che governava quella linea ordinò al pacchetto di shiftare verso destra con un offset sedicimilatrecentottantaquattro bytes, raggiungendo in questo modo una via più tranquilla. Mancavano pochi hops all'interfaccia di rete del modem ADSL dell'utente finale, ed il byte era ansioso di darsi da fare in qualche operazione che gli sarebbe stata ordinata dall'OS. La vita di un byte della Rete è davvero suggestiva: viaggiare in lungo ed in largo sulle grandi dorsali oceaniche, solo per diventare un briciolo di calcolo o un pizzico di rendering su un sistema lontano chilometri e chilometri dal sistema di origine. Questo pensava il byte, mentre intravedeva un po' in là la linea che pian piano si stringeva, per essere entrare comodamente nell'interfaccia di rete RJ45 del modem.

Gli altri bytes che avevano viaggiato con lui si strinsero attorno, per formare l'IP di destinazione. Appena la porta di I/O del modem li accolse, sorrisero felici, ed esultarono quando vennero autenticati per l'ingresso nel sistema. Prima di immettersi sul bus PCI, dovettero attendere un trasferimento dati di un thread ad alta priorità: trentaduemilasettecentosessantotto KBytes passarono davanti ai loro occhi in un batter d'occhio. Il webcast di Michele, che il byte aveva intravisto sulla dorsale, era arrivato esattamente allo stesso indirizzo, ma un po' più veloce di lui, evidentemente percorrendo altre strade e non era capitato nel mezzo dello scontro tra variabili. Lo stream video era in fase di masterizzazione, e l'OS aveva assegnato una priorità più alta a quell'operazione.

Dopo aver atteso, i bytes poterono finalmente raggiungere il bus PCI, dove un nuovo, piccolo mondo li aspettava. Saltarono dalla porta di I/O e si lasciarono trasportare dal clock di sistema.

Dopo aver atteso a lungo l'apertura della pagina di CodePlex, l'utente ebbe un sobbalzo sulla sedia.
Una MessageBox mostrava il seguente messaggio:
Errore di protezione all'indirizzo sessantacinquemilacinquecentotrentasei.

Il thread di Internet Explorer morì improvvisamente, ed il byte - che inizialmente era assegnato al rendering del carattere 'H' sulla pagina Web di Happy Sign - venne riallocato per procedere, insieme a tanti altri, all'apertura di una nuova finestra di "Salve con nome..." del blocco note.

Print | posted on martedì 7 novembre 2006 17:08 | Filed Under [ 010 .bytes. 010 ]

Feedback

Gravatar

# re: Da una dorsale Internet al blocco note in multipli di due

Però "uno" non è mica tanto multiplo di due, eh! :P
07/11/2006 17:19 | Marco De Sanctis
Gravatar

# Re: Da una dorsale Internet al blocco note in multipli di due

licenza poetica!
07/11/2006 17:23 | Igor Damiani
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET