X-Git-Url: https://git.llucax.com/z.facultad/75.74/practicos.git/blobdiff_plain/84df7fe38e7c8ff3c99cd3a05b6c42a5b8bcb213..f48d95822c7810a45daf26854de7262ccc20a940:/practicas/pipi/informe.rtf diff --git a/practicas/pipi/informe.rtf b/practicas/pipi/informe.rtf index eebe262..3f2c628 100644 --- a/practicas/pipi/informe.rtf +++ b/practicas/pipi/informe.rtf @@ -9,105 +9,105 @@ \red0\green0\blue0; \red255\green255\blue255;} {\stylesheet -{\s1\fi-431\li720\sbasedon28\snext28Contents 1;} -{\s2\fi-431\li1440\sbasedon28\snext28Contents 2;} -{\s3\fi-431\li2160\sbasedon28\snext28Contents 3;} -{\s8\fi-431\li720\sbasedon28Lower Roman List;} -{\s5\tx431\sbasedon24\snext28Numbered Heading 1;} -{\s6\tx431\sbasedon25\snext28Numbered Heading 2;} -{\s7\fi-431\li720Square List;} -{\*\cs11\sbasedon28Endnote Text;} -{\s4\fi-431\li2880\sbasedon28\snext28Contents 4;} -{\s9\fi-431\li720Diamond List;} -{\s10\fi-431\li720Numbered List;} +{\s1\fi-429\li720\sbasedon29\snext29Contents 1;} +{\s2\fi-429\li1440\sbasedon29\snext29Contents 2;} +{\s3\fi-429\li2160\sbasedon29\snext29Contents 3;} +{\s8\fi-429\li720\sbasedon29Lower Roman List;} +{\s5\tx431\sbasedon25\snext29Numbered Heading 1;} +{\s6\tx431\sbasedon26\snext29Numbered Heading 2;} +{\s7\fi-429\li720Square List;} +{\*\cs11\sbasedon29Endnote Text;} +{\s4\fi-429\li2880\sbasedon29\snext29Contents 4;} +{\s9\fi-429\li720Diamond List;} +{\s10\fi-429\li720Numbered List;} {\*\cs12\fs20\superEndnote Reference;} -{\s13\fi-431\li720Triangle List;} -{\s14\tx431\sbasedon26\snext28Numbered Heading 3;} -{\s15\fi-431\li720Dashed List;} -{\s16\fi-431\li720\sbasedon10Upper Roman List;} -{\s17\sb440\sa60\f0\fs24\b\sbasedon28\snext28Heading 4;} -{\s18\fi-431\li720Heart List;} -{\s34\fi-431\li720Box List;} -{\s20\fi-431\li720\sbasedon10Upper Case List;} -{\s21\fi-431\li720Bullet List;} -{\s22\fi-431\li720Hand List;} -{\*\cs23\fs20\sbasedon28Footnote Text;} -{\s24\sb440\sa60\f0\fs34\b\sbasedon28\snext28Heading 1;} -{\s25\sb440\sa60\f0\fs28\b\sbasedon28\snext28Heading 2;} -{\s19\qc\sb240\sa120\f0\fs32\b\sbasedon28\snext28Contents Header;} -{\s27\fi-431\li720Tick List;} -{\s26\sb440\sa60\f0\fs24\b\sbasedon28\snext28Heading 3;} -{\s29\fi-431\li720\sbasedon10Lower Case List;} -{\s30\li1440\ri1440\sa120\sbasedon28Block Text;} -{\s36\f2\sbasedon28Plain Text;} -{\s32\tx1584\sbasedon5\snext28Section Heading;} -{\s33\fi-431\li720Implies List;} -{\s28\f1\fs24\lang1034Normal;} -{\s35\fi-431\li720Star List;} -{\*\cs31\fs20\superFootnote Reference;} -{\s37\tx1584\sbasedon5\snext28Chapter Heading;}} -\kerning0\cf0\ftnbj\fet2\ftnstart1\ftnnar\aftnnar\ftnstart1\aftnstart1\aenddoc\revprop3{\info\uc1}\deftab720\viewkind1\paperw11905\paperh16837\margl1440\margr1440\widowctl +{\s13\fi-429\li720Triangle List;} +{\s14\tx431\sbasedon27\snext29Numbered Heading 3;} +{\s15\fi-429\li720Dashed List;} +{\s16\fi-429\li720\sbasedon10Upper Roman List;} +{\s17\sb440\sa60\f0\fs24\b\sbasedon29\snext29Heading 4;} +{\s18\fi-429\li720Heart List;} +{\s35\fi-429\li720Box List;} +{\*\cs20\fs20Reference;} +{\s21\fi-429\li720\sbasedon10Upper Case List;} +{\s22\fi-429\li720Bullet List;} +{\s23\fi-429\li720Hand List;} +{\*\cs24\fs20\sbasedon29Footnote Text;} +{\s25\sb440\sa60\f0\fs34\b\sbasedon29\snext29Heading 1;} +{\s26\sb440\sa60\f0\fs28\b\sbasedon29\snext29Heading 2;} +{\s19\qc\sb240\sa118\f0\fs32\b\sbasedon29\snext29Contents Header;} +{\s28\fi-429\li720Tick List;} +{\s27\sb440\sa60\f0\fs24\b\sbasedon29\snext29Heading 3;} +{\s30\fi-429\li720\sbasedon10Lower Case List;} +{\s31\li1440\ri1440\sa118\sbasedon29Block Text;} +{\s37\f2\sbasedon29Plain Text;} +{\s33\tx1584\sbasedon5\snext29Section Heading;} +{\s34\fi-429\li720Implies List;} +{\s29\f1\fs24\lang1034Normal;} +{\s36\fi-429\li720Star List;} +{\*\cs32\fs20\superFootnote Reference;} +{\s38\tx1584\sbasedon5\snext29Chapter Heading;}} +\kerning0\cf0\ftnbj\fet2\ftnstart1\ftnnar\aftnnar\ftnstart1\aftnstart1\aenddoc\revprop3{\info\uc1}\deftab720\viewkind1\paperw11905\paperh16837\margl1440\margr1440\widowctrl \sectd\sbknone\colsx360\pgncont\ltrsect -\pard\plain\ltrpar\qc\s28\itap0{\s28\f0\fs52\b\lang1034{\*\listtag0}\abinodiroverride\ltrch Sistemas Distribuidos I (75.74)}{\s28\f1\fs24\lang1034{\*\listtag1003}\par} -\pard\plain\ltrpar\qc\s28\itap0{\s28\f0\fs28\lang1034{\*\listtag0}\abinodiroverride\ltrch TP 2: Sistema de resoluci\'f3n de nombres sobre IP adaptado a sockets}{\s28\f0\fs28\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\qc\s28\itap0{\field\fdledit{\*\fldinst {\ TOC }}} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f1\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\sb440\sa60\s24\itap0{\s24\f0\fs34\b\lang1034{\*\listtag0}\abinodiroverride\ltrch DNS}{\s24\f0\fs34\b\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\sb440\sa60\s25\itap0{\s25\f0\fs28\b\lang1034{\*\listtag0}\abinodiroverride\ltrch Diagrama de secuencia}{\s25\f0\fs28\b\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f1\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch \page }{\s28\f1\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\sb440\sa60\s25\itap0{\s25\f0\fs28\b\lang1034{\*\listtag0}\abinodiroverride\ltrch Dise\'f1o de mensajes de intercambio de DNS.}{\s25\f0\fs28\b\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f1\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch Petici\'f3n de un nameserver}{\s28\f1\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs22\lang1034{\*\listtag0}\abinodiroverride\ltrch +------------+------------+------------+}{\s28\f2\fs22\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs22\lang1034{\*\listtag0}\abinodiroverride\ltrch | QUERY_TYPE | SIZE | NAME |}{\s28\f2\fs22\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs22\lang1034{\*\listtag0}\abinodiroverride\ltrch +------------+------------+------------+}{\s28\f2\fs22\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs22\lang1034{\*\listtag0}\abinodiroverride\ltrch /-- 1 byte --/- 2 bytes --/- variable -/}{\s28\f2\fs22\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f1\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f1\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch QUERY_TYPE en realidad es una cabecera com\'fan a las peticiones y respuestas, cuyos c\'f3digos pueden ser los siguientes:}{\s28\f1\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs22\b\lang1034{\*\listtag0}\abinodiroverride\ltrch Requests}{\s28\f2\fs22\b\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs22\lang1034{\*\listtag0}\abinodiroverride\ltrch RP_REQ_DIRECT -> B\'fasqueda directa (inter nameservers)}{\s28\f2\fs22\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs22\lang1034{\*\listtag0}\abinodiroverride\ltrch RP_REQ_RECURSIVE-> B\'fasqueda recursiva (para resolvers)}{\s28\f2\fs22\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs22\b\lang1034{\*\listtag0}\abinodiroverride\ltrch Responses}{\s28\f2\fs22\b\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs22\lang1034{\*\listtag0}\abinodiroverride\ltrch RP_RES_A -> OK, se devolvi\'f3 un registro A}{\s28\f2\fs22\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs22\lang1034{\*\listtag0}\abinodiroverride\ltrch RP_RES_NS -> OK, se devolvi\'f3 un registro NS (s\'f3lo en directo)}{\s28\f2\fs22\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs22\lang1034{\*\listtag0}\abinodiroverride\ltrch RP_RES_NOTFOUND -> No se encontr\'f3}{\s28\f2\fs22\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs22\lang1034{\*\listtag0}\abinodiroverride\ltrch RP_RES_TIMEOUT -> Tard\'f3 demasiado la consulta}{\s28\f2\fs22\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f1\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f1\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch SIZE es el tama\'f1o del string con el nombre a buscar, NAME es el string (de longitud variable). Faltar\'eda agregar un campo con un ID para evitar que se confundan unas respuestas o peticiones con otras.}{\s28\f1\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f1\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f1\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch Respuesta de un nameserver}{\s28\f1\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs20\lang1034{\*\listtag0}\abinodiroverride\ltrch +-----------+-----------+-----------+-----------+-----------+-----------+}{\s28\f2\fs20\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs20\lang1034{\*\listtag0}\abinodiroverride\ltrch | RET | TTL | COUNT | IP 1 | ... | IP N |}{\s28\f2\fs20\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs20\lang1034{\*\listtag0}\abinodiroverride\ltrch +-----------+-----------+-----------+-----------+-----------+-----------+}{\s28\f2\fs20\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs20\lang1034{\*\listtag0}\abinodiroverride\ltrch /-- 1 byte -/- 4 bytes -/-- 1 byte -/- 4 bytes -/- 4 bytes -/- 4 bytes -/}{\s28\f2\fs20\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f1\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f1\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch RET es del mismo tipo que QUERY_TYPE y se hizo as\'ed para poder reconocer si un paquete es un request o un response con s\'f3lo leer el 1er byte. TTL es el tiempo que puede vivir en el cache (en segundos), COUNT es la cantidad de IPs encontradas para ese registro e IP1 a IPN son las IP en s\'ed (cantidad variable).}{\s28\f1\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\sb440\sa60\s25\itap0{\s25\f0\fs28\b\lang1034{\*\listtag0}\abinodiroverride\ltrch Par\'e1metros y resultados de la funci\'f3n gethostbyname()}{\s25\f0\fs28\b\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs20\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs20\lang1034{\*\listtag0}\abinodiroverride\ltrch std::vector< IPAddr > gethostbyname(std::string name, int& result);}{\s28\f2\fs20\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs20\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f1\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch Esta funci\'f3n toma como par\'e1metro un string con el nombre de dominio a buscar (por ejemplo "mi.dominio.casa") y retorna un vector de IPs. Si hay un error o no encuentra ninguna el vector se devuelve vac\'edo y se pone el c\'f3digo de error en la variable result. El trabajo de la funci\'f3n es conectarse a todos los nameservers que conozca y env\'ede un pedido de resoluci\'f3n de nombre RECURSIVO, hasta que tenga \'e9xito o se acabe la lista de nameservers disponibles. Por falta de tiempo esta funci\'f3n no est\'e1 implementada del lado del resolver pero s\'ed del nameserver, y es muy muy similar (hace exactamente lo mismo).}{\s28\f1\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\sb440\sa60\s24\itap0{\s24\f0\fs34\b\lang1034{\*\listtag0}\abinodiroverride\ltrch IP}{\s24\f0\fs34\b\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\sb440\sa60\s25\itap0{\s25\f0\fs28\b\lang1034{\*\listtag0}\abinodiroverride\ltrch Dise\'f1o del paquete IP}{\s25\f0\fs28\b\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f1\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch \page }{\s28\f1\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch // Campos}{\s28\f2\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch uint8_t version;}{\s28\f2\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch uint16_t total_len;}{\s28\f2\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch uint16_t id;}{\s28\f2\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch uint16_t reserved_flag: 1;}{\s28\f2\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch uint16_t df: 1;}{\s28\f2\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch uint16_t mf: 1;}{\s28\f2\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch uint16_t offset: 13;}{\s28\f2\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch uint8_t ttl;}{\s28\f2\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch uint8_t proto;}{\s28\f2\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch uint16_t checksum;}{\s28\f2\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch uint32_t src;}{\s28\f2\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f2\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch uint32_t dst;}{\s28\f2\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f1\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch \page }{\s28\f1\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\sb440\sa60\s25\itap0{\s25\f0\fs28\b\lang1034{\*\listtag0}\abinodiroverride\ltrch Diagrama de secuencia}{\s25\f0\fs28\b\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f1\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch \page }{\s28\f1\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\sb440\sa60\s25\itap0{\s25\f0\fs28\b\lang1034{\*\listtag0}\abinodiroverride\ltrch Cambios}{\s25\f0\fs28\b\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f1\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch Se agreg\'f3 principalmente la clase DevTCP que implementa la capa f\'edsica a trav\'e9s de TCP. Por cada frame saliente a un destino en particular se crea una conexi\'f3n TCP (a menos que ya est\'e9 creada, en cuyo caso se reutiliza) y se escucha por conexiones entrantes para recibir frames (tambi\'e9n guard\'e1ndolas para reutilizarlas). A diferencia del DevQue se env\'eda el tama\'f1o del frame exacto (en realidad se agrega una peque\'f1a cabecera).}{\s28\f1\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\sb440\sa60\s24\itap0{\s24\f0\fs34\b\lang1034{\*\listtag0}\abinodiroverride\ltrch Lista de fuentes de informaci\'f3n}{\s24\f0\fs34\b\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f1\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch RFC 1034 - Domain names - concepts and facilities:}{\s28\f1\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f1\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch \tab http://www.faqs.org/rfcs/rfc1034.html}{\s28\f1\fs24\lang1034{\*\listtag0}\par} -\pard\plain\ltrpar\ql\s28\itap0{\s28\f1\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch \tab Conceptos y desiciones de dise\'f1o del DNS.}{\s28\f1\fs24\lang1034{\*\listtag0}\par}} \ No newline at end of file +\pard\plain\ltrpar\qc\s29\sl240\slmult1\itap0{\s29\f0\fs52\b\lang1034{\*\listtag0}\abinodiroverride\ltrch Sistemas Distribuidos I (75.74)}{\s29\f0\fs52\b\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\qc\s29\sl240\slmult1\itap0{\s29\f0\fs28\lang1034{\*\listtag0}\abinodiroverride\ltrch TP 2: Sistema de resoluci\'f3n de nombres sobre IP adaptado a sockets}{\s29\f0\fs28\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f0\fs28\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\sb440\sa60\s25\sl240\slmult1\itap0{\s25\f0\fs34\b\lang1034{\*\listtag0}\abinodiroverride\ltrch DNS}{\s25\f0\fs34\b\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\sb440\sa60\s26\sl240\slmult1\itap0{\s26\f0\fs28\b\lang1034{\*\listtag0}\abinodiroverride\ltrch Diagrama de secuencia}{\s26\f0\fs28\b\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f1\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch \page }{\s29\f1\fs24\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\sb440\sa60\s26\sl240\slmult1\itap0{\s26\f0\fs28\b\lang1034{\*\listtag0}\abinodiroverride\ltrch Dise\'f1o de mensajes de intercambio de DNS.}{\s26\f0\fs28\b\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f1\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch Petici\'f3n de un nameserver}{\s29\f1\fs24\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs22\lang1034{\*\listtag0}\abinodiroverride\ltrch +------------+------------+------------+}{\s29\f2\fs22\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs22\lang1034{\*\listtag0}\abinodiroverride\ltrch | QUERY_TYPE | SIZE | NAME |}{\s29\f2\fs22\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs22\lang1034{\*\listtag0}\abinodiroverride\ltrch +------------+------------+------------+}{\s29\f2\fs22\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs22\lang1034{\*\listtag0}\abinodiroverride\ltrch /-- 1 byte --/- 2 bytes --/- variable -/}{\s29\f2\fs22\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs22\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f1\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch QUERY_TYPE en realidad es una cabecera com\'fan a las peticiones y respuestas, cuyos c\'f3digos pueden ser los siguientes:}{\s29\f1\fs24\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs22\b\lang1034{\*\listtag0}\abinodiroverride\ltrch Requests}{\s29\f2\fs22\b\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs22\lang1034{\*\listtag0}\abinodiroverride\ltrch RP_REQ_DIRECT -> B\'fasqueda directa (inter nameservers)}{\s29\f2\fs22\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs22\lang1034{\*\listtag0}\abinodiroverride\ltrch RP_REQ_RECURSIVE-> B\'fasqueda recursiva (para resolvers)}{\s29\f2\fs22\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs22\b\lang1034{\*\listtag0}\abinodiroverride\ltrch Responses}{\s29\f2\fs22\b\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs22\lang1034{\*\listtag0}\abinodiroverride\ltrch RP_RES_A -> OK, se devolvi\'f3 un registro A}{\s29\f2\fs22\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs22\lang1034{\*\listtag0}\abinodiroverride\ltrch RP_RES_NS -> OK, se devolvi\'f3 un registro NS (s\'f3lo en directo)}{\s29\f2\fs22\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs22\lang1034{\*\listtag0}\abinodiroverride\ltrch RP_RES_NOTFOUND -> No se encontr\'f3}{\s29\f2\fs22\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs22\lang1034{\*\listtag0}\abinodiroverride\ltrch RP_RES_TIMEOUT -> Tard\'f3 demasiado la consulta}{\s29\f2\fs22\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs22\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f1\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch SIZE es el tama\'f1o del string con el nombre a buscar, NAME es el string (de longitud variable). Faltar\'eda agregar un campo con un ID para evitar que se confundan unas respuestas o peticiones con otras.}{\s29\f1\fs24\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f1\fs24\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f1\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch Respuesta de un nameserver}{\s29\f1\fs24\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs20\lang1034{\*\listtag0}\abinodiroverride\ltrch +-----------+-----------+-----------+-----------+-----------+-----------+}{\s29\f2\fs20\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs20\lang1034{\*\listtag0}\abinodiroverride\ltrch | RET | TTL | COUNT | IP 1 | ... | IP N |}{\s29\f2\fs20\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs20\lang1034{\*\listtag0}\abinodiroverride\ltrch +-----------+-----------+-----------+-----------+-----------+-----------+}{\s29\f2\fs20\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs20\lang1034{\*\listtag0}\abinodiroverride\ltrch /-- 1 byte -/- 4 bytes -/-- 1 byte -/- 4 bytes -/- 4 bytes -/- 4 bytes -/}{\s29\f2\fs20\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs20\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f1\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch RET es del mismo tipo que QUERY_TYPE y se hizo as\'ed para poder reconocer si un paquete es un request o un response con s\'f3lo leer el 1er byte. TTL es el tiempo que puede vivir en el cache (en segundos), COUNT es la cantidad de IPs encontradas para ese registro e IP1 a IPN son las IP en s\'ed (cantidad variable).}{\s29\f1\fs24\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\sb440\sa60\s26\sl240\slmult1\itap0{\s26\f0\fs28\b\lang1034{\*\listtag0}\abinodiroverride\ltrch Par\'e1metros y resultados de la funci\'f3n gethostbyname()}{\s26\f0\fs28\b\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f0\fs28\b\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs20\lang1034{\*\listtag0}\abinodiroverride\ltrch result_t gethostbyname(std::string name, std::vector< IPAddr >& ips);}{\s29\f2\fs20\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs20\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f1\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch Esta funci\'f3n toma como par\'e1metro un string con el nombre de dominio a buscar (por ejemplo "mi.dominio.casa") y retorna un vector de IPs. Si hay un error o no encuentra ninguna el vector se devuelve intacto y se devuelve el c\'f3digo de error, que puede ser OK (respuesta v\'e1lida), HOST_NOT_FOUND (no se encuentra dicho host), NO_RECOVERY (error irreparable, por ejemplo, no hay nameservers) o TRY_AGAIN (rrror temporal, por ejemplo, timeout). El trabajo de la funci\'f3n es conectarse a todos los nameservers que conozca y enviar un pedido de resoluci\'f3n de nombre RECURSIVO, hasta que tenga \'e9xito o se acabe la lista de nameservers disponibles. }{\s29\f1\fs24\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\sb440\sa60\s25\sl240\slmult1\itap0{\s25\f0\fs34\b\lang1034{\*\listtag0}\abinodiroverride\ltrch IP}{\s25\f0\fs34\b\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\sb440\sa60\s26\sl240\slmult1\itap0{\s26\f0\fs28\b\lang1034{\*\listtag0}\abinodiroverride\ltrch Dise\'f1o del paquete IP}{\s26\f0\fs28\b\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f1\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch \page }{\s29\f1\fs24\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch // Campos}{\s29\f2\fs24\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch uint8_t version;}{\s29\f2\fs24\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch uint16_t total_len;}{\s29\f2\fs24\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch uint16_t id;}{\s29\f2\fs24\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch uint16_t reserved_flag: 1;}{\s29\f2\fs24\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch uint16_t df: 1;}{\s29\f2\fs24\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch uint16_t mf: 1;}{\s29\f2\fs24\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch uint16_t offset: 13;}{\s29\f2\fs24\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch uint8_t ttl;}{\s29\f2\fs24\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch uint8_t proto;}{\s29\f2\fs24\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch uint16_t checksum;}{\s29\f2\fs24\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch uint32_t src;}{\s29\f2\fs24\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f2\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch uint32_t dst;}{\s29\f2\fs24\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f1\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch \page }{\s29\f1\fs24\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\sb440\sa60\s26\sl240\slmult1\itap0{\s26\f0\fs28\b\lang1034{\*\listtag0}\abinodiroverride\ltrch Diagrama de secuencia}{\s26\f0\fs28\b\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f1\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch \page }{\s29\f1\fs24\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\sb440\sa60\s26\sl240\slmult1\itap0{\s26\f0\fs28\b\lang1034{\*\listtag0}\abinodiroverride\ltrch Cambios}{\s26\f0\fs28\b\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f1\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch Se agreg\'f3 principalmente la clase DevTCP que implementa la capa f\'edsica a trav\'e9s de TCP. Por cada frame saliente a un destino en particular se crea una conexi\'f3n TCP (a menos que ya est\'e9 creada, en cuyo caso se reutiliza) y se escucha por conexiones entrantes para recibir frames (tambi\'e9n guard\'e1ndolas para reutilizarlas). A diferencia del DevQue se env\'eda el tama\'f1o del frame exacto (en realidad se agrega una peque\'f1a cabecera).}{\s29\f1\fs24\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\sb440\sa60\s25\sl240\slmult1\itap0{\s25\f0\fs34\b\lang1034{\*\listtag0}\abinodiroverride\ltrch Lista de fuentes de informaci\'f3n}{\s25\f0\fs34\b\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f1\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch RFC 1034 - Domain names - concepts and facilities:}{\s29\f1\fs24\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f1\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch \tab http://www.faqs.org/rfcs/rfc1034.html}{\s29\f1\fs24\lang1034{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s29\sl240\slmult1\itap0{\s29\f1\fs24\lang1034{\*\listtag0}\abinodiroverride\ltrch \tab Conceptos y desiciones de dise\'f1o del DNS.}{\s29\f1\fs24\lang1034{\*\listtag0}\par}} \ No newline at end of file