Qt SOAP – provant els webservices
A l’article Client SOAP genèric ja vaig parlar d’una pàgina web que a partir de la URL del WSDL ja podiem atacar el webservice d’una forma molt senzilla. El problema que té això és que quan estem dintre de la xarxa de l’empresa potser no tenim el webservice publicat a l’exterior d’internet. Doncs amb aquesta simple eina programada en Qt podem tenir una eina similar a la oferida per la pàgina web.
De moment encara no l’he provada però de ben segur ho hauré de fer aviat, així doncs si hi trobo algún inconvenient o avantatge descatbles, amplicaré aquest article sobre el Qt SOAP. Una cosa que ja he vist i que té molt bona pinta és que ens permet veure les HTTP headers de la petició i la respostes SOAP. A més podem definir el content-type de la petició cosa realment útil.
Whatisthatfile.com – què és aquest fitxer?
Sovint en trobem fitxers, sobretot en windows que no sabem ni d’on han sortit i que no ens atrevim a borrar per si les mosques, així que si voleu saber a quí preguntar: “què és aquest fitxer?” cada vegada que ús passi això whatisthatfile.com.
Generant RSS de les revisions de Subversion
Quan treballes en un projecte on hi ha més d’una persona treballant contra un repositori de codi és molt bona idea poder-se sindicar via RSS a les noves revisions que es van publicant del codi i als comentaris associats a aquestes revisions. De fet, aconseguir això amb subversion no és gens difícil. Jo fins ara ho he fet amb el WebSVN (port del ViewCVS. A més gràcies al trac també podem obtenir aquests RSS i moltes més funcionalitats. Però tot això ja us ho he explicat. En alguns casos però ens pot interessar publicar aquests RSS sense haver de tenir programes orientats a altres funcionalitats sinó únicament aprofitar les extencions WebDAV/DAV_SVN per publicar els RSS. Això és el que ens expliquen a l’article HOWTO: Adding an RSS feed to a Subversion Server (local).
De fet, el que planteja aquest article és força senzill. Simplement usa un generador d’RSS a partir de les revisions de l’SVN, l’script esta fet en python i després li diem al subversion que després de cada commit que es fassi al repositori es genir un nou fitxer RSS. Així doncs el tema no té cap misteri però va bé tenir-ho en un howto per si mai fa falta.
Phalanger: the PHP Language Compiler for .NET Framework
Ja coneixia aquesta solució però mai recordava el nom que tenia, de fet, encara no l’he pogut provar mai però pel que he vist a la web en principi qualsevol dels nostres codis fets en PHP hauria de poder-se compilar en bytecode perquè pogués correr en un servidor web ASP.NET.
Penseu el senzill que serà doncs, usar codi des de .NET que haguem fet amb PHP o alrevés, si ja disposem de classes implementades en C# O VB.NET les podrem usar tranquilament des de PHP.
Llàstima que no m’hagi posat mai ni en .NET ni mono ni res de res. A més dubto que ho fassi perquè no és la meva feina, però per alguns codis que tinc fets a la feina en PHP em seria una gran avantatge poder-los fer corre directament sobre infraestructures complemtament windows, així no hauria de portar els codis de PHP a llenguatges més complexos per tal de fer-los corre en servidors 2000 o 2003 amb ISS i .NET.
Per ampliar més informació us recomano la web de Phalanger és força completa i té molta documentació si algú proba mai el compilador que m’avisi ja que hi estic molt interessant però em suposaria molta feina provar-lo amb la infraestructura que tinc montada ara mateix. A més no tinc ni idea de .NET.
Capçaleres IPv6
Basant-me en un parell d’articles de Network Systems Design Line vaig escriure l’article IPv6: repassant les novetats tècniques, doncs bé s’han publicat les parts 3 i 4 que continuen amplicant la introducció feta a les parts 1 i 2 que vaig repassar en el meu article. La part número 3 parla específicament de les característiques de les capçaleres IPv6. Part realment important i interessant en aquesta nova versió IP. Així doncs dedicaré aquest article a resumir la part 3 de l’article de Networki System Design Line que parla sobre les capçaleres IPv6.
IPv6 vs IPv4 formats de capçalera
Per entendre quines són les motivacions que han provat els canvis en la capçalera IPv6 cal tenir clar quins eren els camps de la capçalera IPv4.
- Version (4bits) obviament conté la versió del protocol en aquest cas fixarem la versió a 4.
- Header Length (4bits) llargada en octets de la capçalera.
- Type of Service (ToS) identificador usat en QoS per tal de poder classificar els paquets segons la prioritat que li volem donar.
- Total length (16bits) llargada en octets del paquet sencer, capçalera més dades. La llargada màxima serà 65.535 octets, que és el màxim que podem definir amb 16 bits.
- Identification (16bits) Flags (3bits) Fragment Offset (13bits) a través d’aquests tres camps IPv4 implementa el suport de la fragmentació de paquets.
- Time to Live (TTL) (8bits) número màxim de salts que pot fer un paquet abans d’arribar al seu destí. Amb aquest camp s’evita que si hi ha un problema d’enrutament els paquets saltin infinitament en cercle, sense arribar mai al destí. En cada salt que fa el paquet es decrementa el valor del camp i si aquest arriba a 0 es descarta el paquet.
- Protocol Number (8bits) indica el codi del protocol que encapsula IP en la capa superior, o sigui, la capa 4. Els números que identifiquen aquests protocols (TCP, UDP, ICMP, etc) els defineix la IANA.
- Header Checksum (16bits) serveix per comprobar la integritat de les dades de la capçalera.
- Source IPv4 address (32bits) adreça IP origen.
- Destination IPv4 Address (32 bits) adreça IP destí.
- Options (mida variable) s’acostuma a guardar-hi informació necessària per interpretar les dades que transporta el paquet.
- Padding (mida variable) aquest camp s’usa per ajustar la mida del camp Options a 32 bits totals.
La nova capçalera IPv6 intenta millor els principals problemes de la IPv4 a través de:
- Mida fixa de la capçalera. Sempre de 40bytes, això afavoreix el poder processar-la de forma més ràpida perquè els routers poden buscar les direccions origen i destí de forma més eficient. Les funcionalitats que tenia IPv4 a través del camp de mida variable, Options ara la obtindrem a través de les extensions de la capçalera, concepte del que es parlarà després.
- La fragmentació deixa de tenir sentit ja que a través del PMTU discovery els routers ajusten la mida de les trames per tal de que no hi hagi fragmentació en els paquets. Així els camps de Identification, Flags, i Fragment Offset deixen de tenir sentit.
- Les comprobacions de la capçalera (header checksums) s’eliminen. Aquesta tasca ara és deixa per les capes superiors.
Així doncs, les capçaleres d’IPv6 es defineixen al RFC 2460 i queden com segueix:
- Version (4bits) versió del protocol IP, sempre fixe a 6.
- Traffic Class (8bits) fa el mateix que el ToS del IPv4.
- Flow Label (20bits) a través d’aquest camp identifiquem un fluxe de paquets informant al router que els següents ‘n’ paquets seràn iguals a aquest i per tant, no cal que els processi. Aquesta idea es desenvolupa al RFC 3697. Aquesta informació es fixa en l’origen del paquet i no la poden modificar els routers.
- Payload Lengh (16bits) com que la capçalera sempre té 40bytes amb 16bits en tenim prou per delimitar la mida de les dades. És important recordar que les extensions de la capçalera es consideren part de les dades.
- Next Header (8bits) definim quin tipus de extensió de la capçalera segueix a la capçalera bàsica.
- Hop Limit (8bits) és l’equivalent al TTL. Només se li ha canviat el nom perquè sigui més descriptiu del funcionament del camp.
- Adreça origen IPv6 (128bits)
- Adreça destí IPv6 (128bits)
Extensions de capçalera IPv6
Bàsicament les extensions de capçalera són una segona capçalera, opcional, que s’usa per donar les funcions que es donava en IPv4 a través del camp, de mida variable i màxim de 40bytes, Otpions. En IPv6 podem fer aquestes extensions de capçalera tran grans com ens interessin, sempre que respectem la mida màxima del paquet.
A continuació podem veure un exemple d’una capçalera bàsica, i d’una capçalera amb uan extensió de capçalera.
A l’RFC 2460 podem trobar les definicions de les extencions de capçalera. Podem trobar-hi, una descripció, el format i la funcionalitat.
Hop-by-Hop Options Header
La capçalera Hop-by-Hop és una extenció de la capçalera bàsica, es defineix en el camp Next Header, de la capçalera bàsica, amb el codi 0. És la única extenció de capçalera que s’ha de processar per tots els nodes del camí entre l’origen i el destí del paquet. S’úsa per exemple per facilitar la expedició de dels Jumbograms (després s’explica què és això), o també facilita que els routers es passin informacions d’expedició (forwarding).
Les opcions que transporta aquesta extenció de capçalera es codifiquen en un format que es diu TLV, a continuació es pot veure un diagrama del format.
Tots els nodes que hi ha en el camí rebran aquesta capçalera i la processaran. Si algún dels nodes no entengues les opcions que conté la capçalera i que ha de processar generaria un paquet de tipus ICMP. Tot i que no totes les opcions han de generar forçosament aquest missatge ICMP, amb això s’eviten problemes d’atacs de denegació de serveig per inundació de paquets ICMP.
És important tenir en compte l’impacte en el rendiment que té el fet de processar les capçaleres hop-by-hop en cada un dels routers. Una de les funcionalitats que té és el fet de suportar paquets molt grans. La capçalera bàsica només permet una mida que es pugui definir en 16bits, o sigui, de com a molt 65.536 octets.
Les extensions hop-by-hop contenen un camp de 32 bits de llargada que pot representar paquets molt grans, anomenats Jumbograms. Quan volguem usar el camp de 32bits de la capçalera hop-by-hop el camp Payload length de la capçalera bàsica el posarem a 0, amb això s’idenfica un paquet Jumbogram.
A través de l’RFC 2711 es defineix l’opció Router Alert que a través de la caçalera hop-by-hop permet enviar intruccions d’expedició (forwarding instructions). Per exemple, per fer reserves d’amplada de banda amb RSVP. O per alertar als routers que han de processar paquets multicast, això es fa a través dels paquets Multicast Listener Discovery.
Destination Options Header
Com el propi nom indica, aquesta extenció de la capçalera bàsica es refereix nomes a les Option de la direcció de destí. Per exemple s’usen amb MIPv6. El codi usat en el camp Next Header a la capçalera bàsica és el 60.
Routing Header
Identificada amb el codi 43, al camp Next Header. S’usa per reforçar el camí a seguir per alguns paquets. El camí el defineix l’origen, i podria no coincidir amb el camí calculat pels routers intermitjos.
La capçalera routing header conté un camp de tipus (type) que permet saber amb exactitut a funcionlitat d’aquesta capçalera. En aquest moment hi ha dos tipus de funcionalitats definides:
- Type 0 (RFC 2460) especifica tots els salts que ha de fer el paquet per viatjar fins al seu destí. El que faràn els routers intermitjos és anar canviant la direcció destí de la capçalera bàsica en funció de la capçalera extesa per forçar el salt cap al següent node, si haguessin de fer algún salt no contemplat aquest no modificaria la direcció destí d’aquell moment ni apareixeria ni s’afegiria a la capçalera extesa. Per tant, aquests salts no contemplats serien transparents al procés.
- Type 2 (RFC 3775) usat amb MIPv6. Conté una única adreça unicast, l’adreça del home, i habilita al node corresponent perquè re-envii el tràfic directament a un node mòbil.
Fragment Header
La fragmentació requereix molt de procés en els nodes. Per tal d’evitar les necessitats de sobrecarregar els processadors dels nodes a IPv6 no s’admet la fragmentació de paquets. Abans d’enviar un paquet, l’origen ha de passar per un procés de descobriment de PMTU. Això determinarà quina és la màxima mida que pot tenir un paquet per aquell camí sense que es fragmentin els paquets. Malgrat els routers ja no han de controlar el problema de la fragmentació els nodes destí si que han de saber recomposar un paquet fragmentat. Per tal de poder-ho fer, s’usen les extensions de capçalera Fragment Option Header.
Authentication Header
Aquesta capçalera s’assembla a la capçalera IPSec AH (RFC 2402) usada en IPv4. Aquest sistema autentica l’origen d’una transmissió i assegura la integritat del paquet. El camp Next Header l’identifica amb el codi 51.
Encapsulating Security Payload Header
S’assembla a la idea implmentada en IPSec ESP (RFC 2406) en IPv4. Identificat amb el codi 50 al camp next header.
Mobility Header
Definit a l’RFC 3775 i usat en les comunicacions entre nodes mòbils, nodis corresponents (correspondent nodes) i amb agents domèstics (home agents) en l’establiment i el control de bindings. Identificat amb el codi 135 al next header field.
Acabant…
Amb aquest article n’hi ha prou per veure que el tema de la capçalera s’ha cuidat moltíssim i que hi ha infinitat de combinacions que permeten extendre la capçalera bàsica per gaire bé qualsevol necessitat que se’ns ocurreixi. A més si ens cal fins hi tot podem crear noves extencions per les nostres necessitats. Sota el meu punt de vista aquest és un dels avantatges més potents en IPv6.
Diferents formes de lligar-se els cordons de les sabates
Recordo que quan tenia 16 anys li vaig explicar a algú que a internet hi havia uns foros on la gent tenia converses absolutament de qualsevol tema, fins hi tot hi havia discusions de com s’havia de col·locar el paper de wc: penjant pel cantó de la paret, o per l’altre cantó. Doncs als més populars del delicious m’he trobat un web on es parla d’una cosa gairebé tan rebuscada com la que us he comentat, o sigui, podeu veure una recopilació de desenes de formes diferents de cordar-se les sabates amb les seves avantatges i desavantatges. Realment hi ha gent per tot, fins hi tot gent per referenciar fets així.
Si com jo no podeu evitar perdre-hi 10min llegint totes les formes com uns autistes: 31 Different Ways To Lace Shoes (local).