<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/scripts/pretty-feed-v3.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:h="http://www.w3.org/TR/html4/"><channel><title>Fabian Martinez Rincon</title><description>Porfolio de Fabian Martinez Rincon</description><link>https://fabianmartinezrincon.com</link><item><title>Instalación</title><link>https://fabianmartinezrincon.com/blog/instalacion</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/instalacion</guid><description>Guia paso a paso para instalar y configurar el entorno de desarrollo de Pascal.</description><pubDate>Fri, 13 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Preparando entorno para Pascal&lt;/h1&gt;
&lt;h2&gt;PC Decente&lt;/h2&gt;
&lt;p&gt;https://code.visualstudio.com/download&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage.CTR8PdwG.png&amp;#x26;w=1814&amp;#x26;h=768&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Buscamos estas extenciones en el vscode&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-1.YTSKhkH2.png&amp;#x26;w=1033&amp;#x26;h=679&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Descargamos pascal de la pagina oficial&lt;/p&gt;
&lt;p&gt;https://www.freepascal.org/download.html&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-2.CjtY83tl.png&amp;#x26;w=1422&amp;#x26;h=768&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Se descargan este&lt;/p&gt;
&lt;p&gt;https://sourceforge.net/projects/freepascal/&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Le dan a todo siguiente&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Una vez que estan, se pueden crear un archivo &lt;em&gt;ejemplo.pas&lt;/em&gt; y pegan lo siguiente&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-pascal&quot;&gt;program ej1a_promedio;
var
  num1, num2, promedio: real;
begin
  writeln(&apos;Ingrese el primer numero:&apos;);
  readln(num1);
  writeln(&apos;Ingrese el segundo numero:&apos;);
  readln(num2);

  promedio := (num1 + num2) / 2;
  writeln(&apos;El promedio es: &apos;, promedio:0:2);
end.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-3.Be38xutW.png&amp;#x26;w=900&amp;#x26;h=312&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Ya estaria todo!!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-4.VbOkeWxS.png&amp;#x26;w=1431&amp;#x26;h=795&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;h2&gt;PC Sobreviviente&lt;/h2&gt;
&lt;p&gt;Descargamos Geany&lt;/p&gt;
&lt;p&gt;https://www.geany.org/&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-5.DEux_pjE.png&amp;#x26;w=1290&amp;#x26;h=854&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Lo instale normal, todo siguiente y me anduvo&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-7.kGYLwSP3.png&amp;#x26;w=1846&amp;#x26;h=815&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;h2&gt;PC Super Humilde&lt;/h2&gt;
&lt;p&gt;https://onecompiler.com/pascal&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-6.DOTw7cwe.png&amp;#x26;w=1892&amp;#x26;h=965&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.DexizdtR.jpg"/><enclosure url="/_astro/thumbnail.DexizdtR.jpg"/></item><item><title>Ingreso</title><link>https://fabianmartinezrincon.com/blog/ingreso</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/ingreso</guid><description>Material para los chicos del ingreso.</description><pubDate>Fri, 27 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Ingreso&lt;/h1&gt;
&lt;p&gt;Algunos videos explicativos sobre el proyecto:&lt;/p&gt;
&lt;p&gt;import YoutubeVideo2 from &quot;@/components/YoutubeVideo2.astro&quot;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.DYJgYKf3.jpg"/><enclosure url="/_astro/thumbnail.DYJgYKf3.jpg"/></item><item><title>Lab Genetics</title><link>https://fabianmartinezrincon.com/blog/lab_genetics</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/lab_genetics</guid><description>Proyecto Flask, TailwindCSS y PostgreSQL para la gestión de un laboratorio de genética.</description><pubDate>Fri, 05 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Videos sobre el proyecto&lt;/h1&gt;
&lt;p&gt;Algunos videos explicativos sobre el proyecto:&lt;/p&gt;
&lt;p&gt;import YoutubeVideo2 from &quot;@/components/YoutubeVideo2.astro&quot;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;🧬 Introducción&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Que proyecto mas maravilloso :/&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Marco de indagación para generar “Prototipo de solución”:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Un laboratorio que centraliza muestras biológicas (de otros laboratorios) para mandarlas a analizarlas al exterior quiere digitalizar su funcionamiento ya que actualmente no cuentan con un soporte digital”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#-para-colaborar&quot;&gt;🤝🏼 Para Colaborar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#-recursos&quot;&gt;🧰 Recursos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%EF%B8%8F-instalaci%C3%B3n&quot;&gt;⚙️ Instalación&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%EF%B8%8F-ejecuci%C3%B3n&quot;&gt;🕹️ Ejecución&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#-variables-de-entorno&quot;&gt;👨‍💻 Variables de Entorno&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#-usuarios&quot;&gt;👤 Usuarios&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#administrador-general&quot;&gt;Administrador General&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#administrador-de-laboratorio&quot;&gt;Administrador de Laboratorio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#medico&quot;&gt;Medico&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#paciente&quot;&gt;Paciente&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#transportista&quot;&gt;Transportista&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;🤝🏼 Para Colaborar&lt;/h3&gt;
&lt;p&gt;Para asegurarnos de que estamos en la rama main, antes de crear una mara&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git branch
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Si ya creamos una rama y queremos ir a esa, usamos&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git checkout {nombre-rama}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Si no existe la rama, la creamos con un nombre descriptivo&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git checkout -b {nombre-rama}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Una vez que estamos en la rama, hacemos un pull para asegurarnos de que estamos actualizados&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git pull origin main
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Hacemos la pull request&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git add .
git commit -m &quot;Mensaje descriptivo&quot;
git push origin {nombre-rama}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3&gt;🧰 Recursos&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.python.org/downloads/release/python-3810/&quot;&gt;Python 3.8.10&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pgadmin.org/download/pgadmin-4-windows/&quot;&gt;PGAdmin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;⚙️ Instalación&lt;/h3&gt;
&lt;p&gt;Creamos el entorno Virtual&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;python -m venv .venv
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Activamos el entorno&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;.venv\Scripts\activate
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;En caso de no tener permisos&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Instalamos las dependencias (Solo hace falta la primera vez)&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pip install -r requirements.txt -r requirements-dev.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3&gt;🕹️ Ejecución&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;flask resetdb
flask seeddb
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Para correr la aplicación&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;livetw dev
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;O los siguientes dos&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;flask run --debug
livetw dev --no-flask
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3&gt;👨‍💻 Variables de Entorno&lt;/h3&gt;
&lt;p&gt;Para configurar las variables de entorno, copiamos y renombramos el archivo &lt;code&gt;.env.example&lt;/code&gt; a &lt;code&gt;.env&lt;/code&gt; y configuramos las variables de entorno.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;DB_PASS = &quot;postgres&quot;
DB_USER = &quot;postgres&quot;
DB_NAME = &quot;localhost&quot;
DB_HOST = &quot;grupo08&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3&gt;👤 Usuarios&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#administrador-general&quot;&gt;Owner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#administrador-de-laboratorio&quot;&gt;Administrador de Laboratorio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#laboratorio&quot;&gt;Laboratorio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#medico&quot;&gt;Medico&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#paciente&quot;&gt;Paciente&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#transportista&quot;&gt;Transportista&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]&lt;br&gt;
Las enfermedades raras son enfermedades geneticas&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;</content:encoded><h:img src="/_astro/thumbnail.DXusBOp-.jpg"/><enclosure url="/_astro/thumbnail.DXusBOp-.jpg"/></item><item><title>Programación 1 - Practica 1</title><link>https://fabianmartinezrincon.com/blog/programacion_1_practica_1</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/programacion_1_practica_1</guid><description>Proyecto Flask, TailwindCSS y PostgreSQL para la gestión de un laboratorio de genética.</description><pubDate>Fri, 05 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Practicas Programacion 1&lt;/h1&gt;
&lt;p&gt;Algunos videos explicativos sobre el proyecto:&lt;/p&gt;
&lt;p&gt;import YoutubeVideo2 from &quot;@/components/YoutubeVideo2.astro&quot;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;🧬 Introducción&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Que proyecto mas maravilloso :/&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Marco de indagación para generar “Prototipo de solución”:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Un laboratorio que centraliza muestras biológicas (de otros laboratorios) para mandarlas a analizarlas al exterior quiere digitalizar su funcionamiento ya que actualmente no cuentan con un soporte digital”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#-para-colaborar&quot;&gt;🤝🏼 Para Colaborar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#-recursos&quot;&gt;🧰 Recursos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%EF%B8%8F-instalaci%C3%B3n&quot;&gt;⚙️ Instalación&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%EF%B8%8F-ejecuci%C3%B3n&quot;&gt;🕹️ Ejecución&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#-variables-de-entorno&quot;&gt;👨‍💻 Variables de Entorno&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#-usuarios&quot;&gt;👤 Usuarios&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#administrador-general&quot;&gt;Administrador General&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#administrador-de-laboratorio&quot;&gt;Administrador de Laboratorio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#medico&quot;&gt;Medico&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#paciente&quot;&gt;Paciente&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#transportista&quot;&gt;Transportista&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;🤝🏼 Para Colaborar&lt;/h3&gt;
&lt;p&gt;Para asegurarnos de que estamos en la rama main, antes de crear una mara&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git branch
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Si ya creamos una rama y queremos ir a esa, usamos&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git checkout {nombre-rama}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Si no existe la rama, la creamos con un nombre descriptivo&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git checkout -b {nombre-rama}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Una vez que estamos en la rama, hacemos un pull para asegurarnos de que estamos actualizados&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git pull origin main
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Hacemos la pull request&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git add .
git commit -m &quot;Mensaje descriptivo&quot;
git push origin {nombre-rama}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3&gt;🧰 Recursos&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.python.org/downloads/release/python-3810/&quot;&gt;Python 3.8.10&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pgadmin.org/download/pgadmin-4-windows/&quot;&gt;PGAdmin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;⚙️ Instalación&lt;/h3&gt;
&lt;p&gt;Creamos el entorno Virtual&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;python -m venv .venv
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Activamos el entorno&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;.venv\Scripts\activate
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;En caso de no tener permisos&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Instalamos las dependencias (Solo hace falta la primera vez)&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pip install -r requirements.txt -r requirements-dev.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3&gt;🕹️ Ejecución&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;flask resetdb
flask seeddb
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Para correr la aplicación&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;livetw dev
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;O los siguientes dos&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;flask run --debug
livetw dev --no-flask
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3&gt;👨‍💻 Variables de Entorno&lt;/h3&gt;
&lt;p&gt;Para configurar las variables de entorno, copiamos y renombramos el archivo &lt;code&gt;.env.example&lt;/code&gt; a &lt;code&gt;.env&lt;/code&gt; y configuramos las variables de entorno.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;DB_PASS = &quot;postgres&quot;
DB_USER = &quot;postgres&quot;
DB_NAME = &quot;localhost&quot;
DB_HOST = &quot;grupo08&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3&gt;👤 Usuarios&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#administrador-general&quot;&gt;Owner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#administrador-de-laboratorio&quot;&gt;Administrador de Laboratorio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#laboratorio&quot;&gt;Laboratorio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#medico&quot;&gt;Medico&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#paciente&quot;&gt;Paciente&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#transportista&quot;&gt;Transportista&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]&lt;br&gt;
Las enfermedades raras son enfermedades geneticas&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;</content:encoded><h:img src="/_astro/thumbnail.DXusBOp-.jpg"/><enclosure url="/_astro/thumbnail.DXusBOp-.jpg"/></item><item><title>Practicas de Base de Datos 1</title><link>https://fabianmartinezrincon.com/blog/practicas_base_datos</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/practicas_base_datos</guid><description>Preparando para aprobar la materia</description><pubDate>Sun, 26 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;📒 Estudiando&lt;/h2&gt;
&lt;p&gt;import YoutubeVideo from &quot;@/components/YoutubeVideo.astro&quot;&lt;/p&gt;
&lt;p&gt;Aquí tenés una versión &lt;strong&gt;más clara, prolija y bien redactada&lt;/strong&gt;, ideal para tu blog. Mantiene tu contenido, pero lo ordena mejor, corrige errores y mejora la lectura.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Modelado de Datos (Conceptos Generales)&lt;/h2&gt;
&lt;p&gt;El &lt;strong&gt;modelado de datos&lt;/strong&gt; proporciona una notación para describir cómo se organizan, estructuran y manipulan los datos dentro de un sistema. Un modelo de datos suele incluir:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Estructura de los datos&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Restricciones&lt;/strong&gt; que deben cumplir los datos&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Operaciones&lt;/strong&gt; permitidas sobre esos datos&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En conjunto, estos elementos definen la &lt;strong&gt;estructura subyacente de una base de datos&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;Clasificación de los modelos de datos&lt;/h3&gt;
&lt;p&gt;Una forma habitual de clasificarlos es distinguir entre:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Modelos lógicos&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Modelos físicos&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La diferencia principal radica en &lt;strong&gt;el nivel de abstracción&lt;/strong&gt; y &lt;strong&gt;el tipo de elementos que representan&lt;/strong&gt;. Mientras que los modelos lógicos se enfocan en &lt;em&gt;qué&lt;/em&gt; datos se manejan y sus relaciones, los modelos físicos se concentran en &lt;em&gt;cómo&lt;/em&gt; se almacenan esos datos en el sistema.&lt;/p&gt;
&lt;h3&gt;Modelos de datos lógicos&lt;/h3&gt;
&lt;p&gt;Dentro de los modelos lógicos, podemos distinguir dos grandes grupos:&lt;/p&gt;
&lt;h4&gt;📌 Modelos lógicos basados en &lt;strong&gt;objetos&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Modelo de &lt;strong&gt;Entidades y Relaciones (ER)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Modelo &lt;strong&gt;Orientado a Objetos&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;📌 Modelos lógicos basados en &lt;strong&gt;registros&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Modelo Relacional&lt;/strong&gt; → &lt;em&gt;Este es el que utilizaremos en la materia.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Algunos modelos en particular&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Modelo de Entidades y Relaciones (ER)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Modelo de Entidades y relaciones (ER)&lt;/h3&gt;
&lt;p&gt;Es un modelo de datos lógico basado en objetos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;abstracción del mundo real&lt;/li&gt;
&lt;li&gt;Representa el significado de los datos&lt;/li&gt;
&lt;li&gt;Es independiente de los detalles de la implementación física&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Modelo de entidades y relaciones desde los elementos que define un modelo de datos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Estructura
&lt;ul&gt;
&lt;li&gt;Conjunto de Entidades&lt;/li&gt;
&lt;li&gt;Conjunto de Relaciones&lt;/li&gt;
&lt;li&gt;Atributos&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Restricciones del modelo
&lt;ul&gt;
&lt;li&gt;Cardinalidad, identificador, grado&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Entidades&lt;/h4&gt;
&lt;p&gt;Es una &apos;cosa o concepto&apos; que puede ser identificada y distinguible de otra &apos;cosa o concepto&apos;. Como por ejemplo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&apos;Juan con DNI 12345678&apos;&lt;/li&gt;
&lt;li&gt;&apos;Auto modelo 2015 patente PRI&apos;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Relación&lt;/h4&gt;
&lt;p&gt;Es una asociación de entidades como por ejemplo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Juan con dni 1234567 &lt;strong&gt;es_dueño_de&lt;/strong&gt; Auto modelo 2015 patente PRI&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Atributo&lt;/h4&gt;
&lt;p&gt;Representa información acerca de una entidad o una relación. Por ejemplo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Nombre, DNI, Patente, Modelo, Patente&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Dominio de un Atributo&lt;/h4&gt;
&lt;p&gt;Conjunto de valores que pueden tomar un atributo en particular. Por ejemplo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Nombre puede ser una cadena de máximo 50 letras del abecedario.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Rol de una entidad en una relacion&lt;/h4&gt;
&lt;p&gt;Indica la función que tiene la entidad en la relación. Por ejemplo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;tutor_de&lt;/strong&gt; Jose con dni 123456 es &lt;strong&gt;tutor_de&lt;/strong&gt; Juan cuyo dni es 234567. Juan, tiene el rol de &lt;strong&gt;tutelado_por&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Conjunton de Entidades&lt;/h4&gt;
&lt;p&gt;Es un conjunto de entidades del mismo tipo. Por ejemplo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El conjunto de todas las personas que poseen un nombre y tienen DNI puede llamarse PERSONA.&lt;/li&gt;
&lt;li&gt;El conjunto de todos los autos que poseen información del modelo y de la patente puede llamarse AUTO.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Conjunto de Relaciones&lt;/h4&gt;
&lt;p&gt;Es un conjunto de relaciones del mismo tipo. Por ejemplo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ES_DUEÑO_DE&lt;/strong&gt; es un conjunto de relaciones entre entidades &lt;code&gt;PERSONA&lt;/code&gt; y &lt;code&gt;AUTO&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Los terminos entidad y conjunto de entidades seran intercambiables, haciendo abuso del vocabulario
Los terminos relacion y conjunto de relaciones seran intercambiables, haciendo abuso del vocabulario&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;Restricciones: &lt;strong&gt;Cardinalidad&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Determina el número de veces en el que puede participar una entidad en una relación.&lt;/p&gt;
&lt;p&gt;Indica dependencia (importancia de la cardinalidad mínima)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Total o de existencia: participación obligatoria (mínimo 1)&lt;/li&gt;
&lt;li&gt;Parcial: participación opcional (mínimo 0)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tomamos un conjunto binario de relaciones R entre dos conjuntos de entidades A y B, la cardinalidad (considerando los extremos máximos de cada lado de R) puede ser:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1 a 1&lt;/li&gt;
&lt;li&gt;1 a muchos&lt;/li&gt;
&lt;li&gt;Muchos a muchos&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Restricciones: &lt;strong&gt;Grado&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Representa el número máximo de veces que una entidad puede estar relacionada con otra.&lt;/p&gt;
&lt;p&gt;Ejemplos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1, n -&gt; Grado n&lt;/li&gt;
&lt;li&gt;1, 1 -&gt; Grado 1&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Restricciones: &lt;strong&gt;Clave o Identificador&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Restricción de unicidad del valor del atributo&lt;/li&gt;
&lt;li&gt;Sirven para identificar de manera única a una `entidad``&lt;/li&gt;
&lt;li&gt;Toda entidad posee al menos una posible clave o identificador&lt;/li&gt;
&lt;li&gt;Puede ser:
&lt;ul&gt;
&lt;li&gt;Simple&lt;/li&gt;
&lt;li&gt;Compuesto&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Diagrama de entidades y relaciones&lt;/h4&gt;
&lt;p&gt;Representación gráfica de la estructura de los datos&lt;/p&gt;
&lt;p&gt;Como se representan los elementos&lt;/p&gt;
&lt;p&gt;| Entidad | Relación | Atributo | Cardinalidad |
|-----------|-----------|-----------|-----------|
| &lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-3.Ds0umB60.png&amp;#x26;w=132&amp;#x26;h=63&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt; | &lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-4.C5AkGNBV.png&amp;#x26;w=158&amp;#x26;h=69&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt; | &lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-5.B003VgTO.png&amp;#x26;w=121&amp;#x26;h=56&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt; | &lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-6.Cp7_lWhG.png&amp;#x26;w=143&amp;#x26;h=37&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt; |&lt;/p&gt;
&lt;p&gt;Notación de atributos descriptores e identificadores simples y compuestos en una entidad&lt;/p&gt;
&lt;p&gt;| Simple | Compuesto | De una entidad (Solo descriptivos) |
|-----------|-----------|-----------|
| &lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage.CXEFFm_6.png&amp;#x26;w=379&amp;#x26;h=216&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt; | &lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-1.DR-FKlmf.png&amp;#x26;w=472&amp;#x26;h=192&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt; | &lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-2.BkpniV9_.png&amp;#x26;w=344&amp;#x26;h=152&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt; |&lt;/p&gt;
&lt;p&gt;Ejemplo de un diagrama de Entidades y Relaciones&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-7.BKmVx26A.png&amp;#x26;w=1102&amp;#x26;h=137&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;¿Como se lee esta cardinalidad?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Una persona tiene al menos 1 auto y al menos un auto y a lo sumo n. Y un auto es poseído por una única persona.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Un ejemplo de diagrama de entidades y relaciones -ROL-&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-8.Bkkkj-Vz.png&amp;#x26;w=757&amp;#x26;h=288&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;¿Como se lee esta cardinalidad?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Una persona es superior de cero o muchas otras personas. Una persona trabaja para a lo sumo una persona.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;En algunos ejemplos se &lt;strong&gt;omite&lt;/strong&gt; poner atributos en las entidades
Al momento de realizar los ejercicios propuestos en la materia, tener en cuenta que &lt;strong&gt;toda entidad debe al menos tener un atributo.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;Modelo de entidades y relaciones ampliado&lt;/h2&gt;
&lt;h3&gt;Especialización y Generalización&lt;/h3&gt;
&lt;h4&gt;Especialización&lt;/h4&gt;
&lt;p&gt;Es el resultado de tomar un subconjunto de entidades de un nivel para formar un conjunto de entidades de nivel más bajo. Por ejemplo:&lt;/p&gt;
&lt;p&gt;Tenemos empleados de un hospital. De los médicos nos interesa su matrícula. Puede haber empleados que no son médicos.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-9.CF7nwwbr.png&amp;#x26;w=377&amp;#x26;h=246&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Generalización&lt;/h4&gt;
&lt;p&gt;Es el resultado de tomar uno o más conjuntos de entidades (de nivel más bajo) y producir un conjunto de entidades de un nivel más alto. Por ejemplo:&lt;/p&gt;
&lt;p&gt;Distintos tipos de cuenta: cajas de ahorro y cuentas corrientes, pero ambas son consideradas cuentas&lt;/p&gt;
&lt;p&gt;Mecanismos de abstracción&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-10.BP763aG5.png&amp;#x26;w=1079&amp;#x26;h=275&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;</content:encoded><h:img src="undefined"/><enclosure url="undefined"/></item><item><title>Parcial Teórico de Sistemas y Organizaciones</title><link>https://fabianmartinezrincon.com/blog/teorico_sistemas</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/teorico_sistemas</guid><description>Preguntas del parcialito</description><pubDate>Wed, 22 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;&lt;strong&gt;Examen de Sistemas y Organizaciones – Tema 2 (29/9/2025)&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Parte A – Múltiple Choice&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Según la Teoría General de Sistemas, el aporte metodológico se relaciona principalmente con:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La simplificación del lenguaje&lt;/li&gt;
&lt;li&gt;La reducción de costos&lt;/li&gt;
&lt;li&gt;La programación de computadoras&lt;/li&gt;
&lt;li&gt;La estructura del razonamiento&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;La estructura del razonamiento ✅&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;2. Existe sinergia cuando:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No hay interacción entre subsistemas&lt;/li&gt;
&lt;li&gt;El todo es igual a la suma de las partes&lt;/li&gt;
&lt;li&gt;El todo es más que la suma de las partes&lt;/li&gt;
&lt;li&gt;El todo es menos que la suma de las partes&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;El todo es más que la suma de las partes ✅&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;3. Un sistema abierto se caracteriza porque:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Intercambia energía, materia e información con el medio&lt;/li&gt;
&lt;li&gt;No intercambia energía ni información con el medio&lt;/li&gt;
&lt;li&gt;Permanece aislado totalmente&lt;/li&gt;
&lt;li&gt;Funciona únicamente en equilibrio&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Intercambia energía, materia e información con el medio ✅&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;4. ¿Quién es considerado el fundador de la TGS moderna?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Norbert Wiener&lt;/li&gt;
&lt;li&gt;Kenneth Boulding&lt;/li&gt;
&lt;li&gt;George Klir&lt;/li&gt;
&lt;li&gt;Ludwig von Bertalanffy&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Ludwig von Bertalanffy ✅&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;5. El contexto de un sistema es:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Un elemento interno del sistema&lt;/li&gt;
&lt;li&gt;Lo mismo que metasistema&lt;/li&gt;
&lt;li&gt;El conjunto de objetos exteriores que rodean e influyen en el sistema&lt;/li&gt;
&lt;li&gt;El conjunto de subsistemas&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;El conjunto de objetos exteriores que rodean e influyen en el sistema ✅&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Preguntas de desarrollo&lt;/p&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;¿Qué significa que la TGS sea una teoría integradora y cuál es su importancia?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Defina las componentes básicas de un sistema (entradas, procesos, salidas, retroalimentación).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Explique con ejemplos la diferencia entre un sistema, un metasistema y el contexto.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Defina sinergia y explique por qué &quot;el todo es más que la suma de las partes&quot;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;¿Qué se entiende por recursividad en los sistemas y cómo se relaciona con los niveles jerárquicos (sistema, subsistema, metasistema)?&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Otro parcial&lt;/h2&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;¿Qué se entiende por recursividad en los sistemas? ¿Cómo se relaciona con los niveles jerárquicos (sistema, subsistema, metasistema)?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Explique qué significa que un sistema sea abierto y qué intercambia con su entorno.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Diferencie entre sistema abierto y sistema cerrado con un ejemplo de cada uno.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Defina qué se entiende por estructura de un sistema.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Defina qué se entiende por organización de un sistema y cómo se relaciona con la estructura.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Parte A - Múltiple Choice&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;¿Quién es considerado el fundador de la TGS moderna?&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Kenneth Boulding&lt;/li&gt;
&lt;li&gt;Norbert Wiener&lt;/li&gt;
&lt;li&gt;George Klir&lt;/li&gt;
&lt;li&gt;Ludwig von Bertalanffy&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;✅ &lt;strong&gt;Ludwig von Bertalanffy&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Un sistema abierto se caracteriza porque:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;No intercambia energía ni información con el medio&lt;/li&gt;
&lt;li&gt;Funciona únicamente en equilibrio&lt;/li&gt;
&lt;li&gt;Permanece aislado totalmente&lt;/li&gt;
&lt;li&gt;Intercambia energía, materia e información con el medio&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;✅ &lt;strong&gt;Intercambia energía, materia e información con el medio&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;Según la Teoría General de Sistemas, el aporte metodológico se relaciona principalmente con:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;La programación de computadoras&lt;/li&gt;
&lt;li&gt;La simplificación del lenguaje&lt;/li&gt;
&lt;li&gt;La reducción de costos&lt;/li&gt;
&lt;li&gt;La estructura del razonamiento&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;✅ &lt;strong&gt;La estructura del razonamiento&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;Existe sinergia cuando:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;No hay interacción entre subsistemas&lt;/li&gt;
&lt;li&gt;El todo es más que la suma de las partes&lt;/li&gt;
&lt;li&gt;El todo es menos que la suma de las partes&lt;/li&gt;
&lt;li&gt;El todo es igual a la suma de las partes&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;El todo es más que la suma de las partes ✅&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;El contexto de un sistema es:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;El conjunto de objetos exteriores que rodean e influyen en el sistema&lt;/li&gt;
&lt;li&gt;El conjunto de subsistemas&lt;/li&gt;
&lt;li&gt;Un elemento interno del sistema&lt;/li&gt;
&lt;li&gt;Lo mismo que metasistema&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;✅ &lt;strong&gt;El conjunto de objetos exteriores que rodean e influyen en el sistema&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Teoricas&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Explique la diferencia entre homeostasis y morfogénesis.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Defina qué es un sistema de control y su relación con la información.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Explique la diferencia entre retroalimentación positiva y negativa.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Defina qué se entiende por variedad en un sistema y cómo el control actúa sobre ella.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Detalle los principales aportes de la Teoría General de Sistemas y explique por qué representaron un cambio frente al pensamiento mecanicista.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fima.wIFICsoQ.png&amp;#x26;w=629&amp;#x26;h=678&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-1.KKH2G8_a.png&amp;#x26;w=723&amp;#x26;h=747&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-2.BpB_LyzM.png&amp;#x26;w=1189&amp;#x26;h=476&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-3.D0WV77tO.png&amp;#x26;w=1349&amp;#x26;h=530&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-4.DRa3di6Y.png&amp;#x26;w=699&amp;#x26;h=843&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.CfQ2xfLf.jpg"/><enclosure url="/_astro/thumbnail.CfQ2xfLf.jpg"/></item><item><title>Primer Parcial de Matemáticas 4</title><link>https://fabianmartinezrincon.com/blog/parcial_1_mate_4</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/parcial_1_mate_4</guid><description>Practica de Numeros y Relaciones</description><pubDate>Fri, 10 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;https://youtu.be/DfwWEvyZGWY?si=aMl1qzhjDDe-ONxM&lt;/p&gt;
&lt;h1&gt;TP 3 Numeros&lt;/h1&gt;
&lt;h2&gt;Ejercicio 1&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Número par&lt;/strong&gt; -&gt; Un número entero $$ n $$ es &lt;strong&gt;par&lt;/strong&gt; si existe un número entero $$ k $$ tal que  $$ n = 2k $$ Es decir, $$ n $$ es divisible por 2.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Número impar&lt;/strong&gt; -&gt; Un número entero $$ n $$ es &lt;strong&gt;impar&lt;/strong&gt; si existe un número entero $$ k $$ tal que  $$ n = 2k + 1 $$ Es decir, $$ n $$ no es divisible por 2.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Demostración&lt;/strong&gt; -&gt; Para que un número sea simultáneamente par e impar, debería cumplir ambas definiciones al mismo tiempo.&lt;br&gt;
Es decir, existirían enteros $$ k_1 $$ y $$ k_2 $$ tales que:&lt;/p&gt;
&lt;p&gt;$$
n = 2k_1 \quad \text{y} \quad n = 2k_2 + 1
$$&lt;/p&gt;
&lt;p&gt;Esto implica que:&lt;/p&gt;
&lt;p&gt;$$
2k_1 = 2k_2 + 1
$$&lt;/p&gt;
&lt;p&gt;Restando ambos lados:&lt;/p&gt;
&lt;p&gt;$$
2k_1 - 2k_2 = 1
$$&lt;/p&gt;
&lt;p&gt;Simplificando:&lt;/p&gt;
&lt;p&gt;$$
2(k_1 - k_2) = 1
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusión&lt;/strong&gt; -&gt; Aquí se llega a una &lt;strong&gt;contradicción&lt;/strong&gt;, ya que el lado izquierdo de la ecuación es un número par (por ser múltiplo de 2), mientras que el lado derecho es 1, que es impar.&lt;br&gt;
No existe ningún par de enteros $$k_1$$ y $$k_2$$ que satisfagan esta igualdad.&lt;/p&gt;
&lt;p&gt;Por lo tanto:&lt;/p&gt;
&lt;p&gt;$$
\text{No hay enteros que sean simultáneamente pares e impares.}
$$&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 2&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Analizar si las siguientes afirmaciones son verdaderas o falsas.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(a)&lt;/strong&gt; Si  $$a \mid 1 \quad \text{entonces} \quad a = 1 \ \text{o}\ a = -1$$&lt;/p&gt;
&lt;p&gt;1 = a·k, con k ∈ ℤ&lt;br&gt;
k = 1/a&lt;/p&gt;
&lt;p&gt;Para que esta ecuación sea verdadera, k debe ser igual a $$ \frac{1}{a} $$.&lt;br&gt;
Pero, para que k sea un entero, &lt;strong&gt;a debe ser un divisor de 1&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Los divisores de 1 son aquellos números enteros que, multiplicados por otro entero, dan como resultado 1.&lt;br&gt;
Estos divisores son, únicamente:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a = 1&lt;/li&gt;
&lt;li&gt;a = -1&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ya que $$ 1 = 1 \times 1 $$ y $$ 1 = (-1) \times (-1) $$.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La afirmación es VERDADERA.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(b)&lt;/strong&gt; $$ a \mid b \ \text{y}\ b \mid c \ \text{entonces}\ a \mid c$$&lt;/p&gt;
&lt;p&gt;b = a·k₁, con k₁ ∈ ℤ.&lt;br&gt;
c = b·k₂, con k₂ ∈ ℤ.&lt;/p&gt;
&lt;p&gt;c = a·k₁·k₂&lt;br&gt;
c = a·k₃, con k₃ ≡ k₁·k₂ ∈ ℤ.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La afirmación es VERDADERA.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(c)&lt;/strong&gt;  $$ a(a - 1) \ \text{es par} $$&lt;/p&gt;
&lt;p&gt;Si a es par, (a - 1) es impar y, entonces, el producto es par.&lt;br&gt;
Si a es impar, (a - 1) es par y, entonces, el producto es par.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La afirmación es VERDADERA.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(d)&lt;/strong&gt;  $$ x \mid y \ \text{y}\ y \mid z \ \text{entonces}\ x \mid yz$$&lt;/p&gt;
&lt;p&gt;y = x·k₁, con k₁ ∈ ℤ.&lt;br&gt;
z = y·k₂, con k₂ ∈ ℤ.&lt;/p&gt;
&lt;p&gt;yz = x·k₁·z&lt;br&gt;
yz = x·k₃, con k₃ ≡ k₁·z ∈ ℤ.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La afirmación es VERDADERA.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 3&lt;/h2&gt;
&lt;p&gt;Si a un número se lo divide por 5, el resto es 3 y si se lo divide por 7, el resto es 4.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$$ x = 5k_1 + 3, \quad k_1 \in \mathbb{Z} $$&lt;/li&gt;
&lt;li&gt;$$ x = 7k_2 + 4, \quad k_2 \in \mathbb{Z} $$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Igualando ambas expresiones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$$ 5k_1 + 3 = 7k_2 + 4 $$&lt;/li&gt;
&lt;li&gt;$$ 5k_1 = 7k_2 + 1 $$&lt;/li&gt;
&lt;li&gt;$$ k_1 = 3, \quad k_2 = 2 $$&lt;/li&gt;
&lt;li&gt;$$ x = 5 \times 3 + 3 = 15 + 3 = 18 $$&lt;/li&gt;
&lt;li&gt;$$ x = 7 \times 2 + 4 = 14 + 4 = 18 $$&lt;/li&gt;
&lt;li&gt;$$ x = 35k_3 + 18, \quad k_3 \in \mathbb{Z} $$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Por lo tanto, si se lo divide por 35, el resto es 18.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 4&lt;/h2&gt;
&lt;p&gt;Sean $$ a $$ y $$ b $$ dos números enteros que tienen restos 4 y 7 respectivamente en la división por 11. Hallar los restos de la división por 11 de $$ a + b^2 $$.&lt;/p&gt;
&lt;p&gt;Variables:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$$ a = 11k_1 + 4, \quad k_1 \in \mathbb{Z} $$&lt;/li&gt;
&lt;li&gt;$$ b = 11k_2 + 7, \quad k_2 \in \mathbb{Z} $$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Paso 1&lt;/strong&gt;: Calculamos la suma&lt;/p&gt;
&lt;p&gt;Sabemos que ambos números son múltiplos de 11 más su respectivo resto.&lt;br&gt;
Sumando las dos expresiones obtenemos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$$ a + b = 11k_1 + 4 + 11k_2 + 7  $$&lt;/li&gt;
&lt;li&gt;$$ a + b = 11 (k_1 + k_2) + 11 $$&lt;/li&gt;
&lt;li&gt;$$ a + b = 11 (k_1 + k_2 + 1) $$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por lo tanto -&gt; $$ a + b = 11k_3, \quad k_3 \equiv (k_1 + k_2 + 1) \in \mathbb{Z} $$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 2&lt;/strong&gt;: Calculamos el cuadrado (Elevamos ambos lados al cuadrado):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$$ (a + b)^2 = (11k_3)^2 $$&lt;/li&gt;
&lt;li&gt;$$ (a + b)^2 = 11 \times 11k_3^2 $$&lt;/li&gt;
&lt;li&gt;$$ (a + b)^2 = 11k_4, \quad k_4 \equiv 11k_3^2 \in \mathbb{Z} $$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Por lo tanto, el resto de la división por 11 de $$ (a + b)^2 $$ es 0.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 5&lt;/h2&gt;
&lt;p&gt;Convertir los siguientes números de base 10 a base 8:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$$ 98 = 8 \times 12 + 2 $$&lt;/li&gt;
&lt;li&gt;$$ 12 = 8 \times 1 + 4 $$&lt;/li&gt;
&lt;li&gt;$$ 1 = 8 \times 0 + 1 $$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por lo tanto:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$$ 98 = (142)_8 $$&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;$$ 44 = 8 \times 5 + 4 $$&lt;/li&gt;
&lt;li&gt;$$ 5 = 8 \times 0 + 5 $$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por lo tanto:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$$ 44 = (54)_8 $$&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;$$ 20 = 8 \times 2 + 4 $$&lt;/li&gt;
&lt;li&gt;$$ 2 = 8 \times 0 + 2 $$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por lo tanto:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$$ 20 = (24)_8 $$&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 6&lt;/h2&gt;
&lt;p&gt;Calcular el máximo común divisor entre:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$$ (24, 16) = (16, 8) = (8, 0) = 8 $$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por lo tanto:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$$ \text{mcd}(16, 24) = 8 $$&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;$$ (70, 50) = (50, 20) = (20, 10) = (10, 0) = 10 $$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por lo tanto:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$$ \text{mcd}(70, 50) = 10 $$&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;$$ (121, 88) = (88, 33) = (33, 22) = (22, 11) = (11, 0) = 11 $$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por lo tanto:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$$ \text{mcd}(121, 88) = 11 $$&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;$$ (-90, 90) = (90, 0) $$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por lo tanto:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$$ \text{mcd}(-90, 90) = 90 $$&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;$$ (980, 224) = (224, 84) = (84, 56) = (56, 28) = (28, 0) = 28 $$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por lo tanto:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$$ \text{mcd}(980, 224) = 28 $$&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 7&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Probar que si $$ a $$ y $$ b $$ son enteros:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(a)&lt;/strong&gt;  $$a + b \ \text{es coprimo con} \ a$$&lt;/p&gt;
&lt;p&gt;Definición de coprimo -&gt; Dos números son coprimos si su máximo común divisor es 1.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$$ a = dk_1, \quad k_1 \in \mathbb{Z} $$&lt;/li&gt;
&lt;li&gt;$$ a + b = dk_2, \quad k_2 \in \mathbb{Z} $$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Igualando ambas expresiones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$$ dk_1 + b = dk_2 $$&lt;/li&gt;
&lt;li&gt;$$ b = dk_2 - dk_1 $$&lt;/li&gt;
&lt;li&gt;$$ b = d(k_2 - k_1) $$&lt;/li&gt;
&lt;li&gt;$$ b = dk_3, \quad k_3 \equiv (k_2 - k_1) \in \mathbb{Z} $$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No hay razón para que $$a$$ y $$b$$ tengan un divisor común que no sea $$d = 1$$.
Por lo tanto:&lt;/p&gt;
&lt;p&gt;$$ (a + b,, a) = 1 $$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(b)&lt;/strong&gt;  $$\text{Si } a \text{ es no nulo, } (a, 0) = |a|$$&lt;/p&gt;
&lt;p&gt;$$ a = |a|k_1, \quad k_1 \in \mathbb{Z} $$&lt;br&gt;
$$ 0 = |a|k_2, \quad k_2 \in \mathbb{Z} $$&lt;/p&gt;
&lt;p&gt;No hay divisores comunes entre $$ a $$ y $$ 0 $$ que sean mayores a $$ |a| $$.&lt;br&gt;
Por lo tanto:&lt;/p&gt;
&lt;p&gt;$$ (a, 0) = |a| $$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(c)&lt;/strong&gt;  $$(a, b) = 1 \ \text{entonces} \ ma + nb = k, \ \text{con } m, n, k \in \mathbb{Z}$$&lt;/p&gt;
&lt;p&gt;ma + nb= 1.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 8&lt;/h2&gt;
&lt;p&gt;Hallar  $$mcd(5k + 3, 3k + 2) $$, para cualquier k entero&lt;/p&gt;
&lt;p&gt;$$(5k + 3,, 3k + 2) = (3k + 2,, 2k + 1) = (2k + 1,, k + 1) = (k + 1,, k) = (k,, 1) = (1,, 0)$$&lt;/p&gt;
&lt;p&gt;Por lo tanto:&lt;/p&gt;
&lt;p&gt;$$ \text{mcd}(5k + 3,, 3k + 2) = 1 $$&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 9&lt;/h2&gt;
&lt;p&gt;Sean $$ ( a, b \in \mathbb{Z} ) $$ y sea $$ p $$ primo. Demostrar que si $$ ( p \mid ab ) $$ entonces $$ ( p \mid a ) $$ ó $$ ( p \mid b ) $$.&lt;/p&gt;
&lt;p&gt;Mostrar que esto no se cumple si $$ p $$ no es primo.&lt;/p&gt;
&lt;p&gt;$$ a = p_1^{e_1} p_2^{e_2} \dots p_m^{e_m}, \quad p_i \in \mathbb{Z}, \quad i = 1, 2, \dots, m $$&lt;/p&gt;
&lt;p&gt;$$ b = q_1^{f_1} q_2^{f_2} \dots q_n^{f_n}, \quad q_i \in \mathbb{Z}, \quad i = 1, 2, \dots, n $$&lt;/p&gt;
&lt;p&gt;$$ ab = p^s k, \quad k \in \mathbb{Z} $$&lt;/p&gt;
&lt;p&gt;donde $$ k $$ es el producto de los factores primos que no son $$ p $$ y $$ s $$ es el número de veces que $$ p $$ divide el producto $$ ab $$.&lt;/p&gt;
&lt;p&gt;Dado que $$ p $$ es primo y que $$ ab $$ se compone de factores primos, $$ p $$ debe aparecer en la factorización de, al menos, uno de los factores $$ a $$ o $$ b $$.&lt;/p&gt;
&lt;p&gt;Esto &lt;strong&gt;no se cumple&lt;/strong&gt; si $$ p $$ no es primo.&lt;br&gt;
Consideremos un contraejemplo:&lt;/p&gt;
&lt;p&gt;$$ p = 6, \quad a = 2, \quad b = 3 $$&lt;/p&gt;
&lt;p&gt;$$ p \mid ab \Rightarrow 6 \mid 6 $$&lt;/p&gt;
&lt;p&gt;pero&lt;/p&gt;
&lt;p&gt;$$ p \nmid a \Rightarrow 6 \nmid 2 \quad \text{y} \quad p \nmid b \Rightarrow 6 \nmid 3 $$&lt;/p&gt;
&lt;p&gt;Por lo tanto, si $$ p $$ &lt;strong&gt;no es primo&lt;/strong&gt;, la propiedad deja de cumplirse.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 10&lt;/h2&gt;
&lt;p&gt;Hallar, si existe, un número entero $$ q $$ tal que $$ 7290q $$ es el cubo de un entero.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1️⃣ Factorización de 7290&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Comenzamos descomponiendo $$ 7290 $$ en sus factores primos:&lt;/p&gt;
&lt;p&gt;$$
7290 = 3645 \times 2 \
7290 = 1215 \times 3 \times 2 \
7290 = 405 \times 3^2 \times 2 \
7290 = 135 \times 3^3 \times 2 \
7290 = 45 \times 3^4 \times 2 \
7290 = 15 \times 3^5 \times 2 \
7290 = 5 \times 3^6 \times 2
$$&lt;/p&gt;
&lt;p&gt;Por lo tanto, la &lt;strong&gt;factorización prima de 7290&lt;/strong&gt; es:&lt;/p&gt;
&lt;p&gt;$$
7290 = 2 \times 3^6 \times 5
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2️⃣ Hallar el valor de $$ q $$&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Para que $$ 7290q $$ sea el &lt;strong&gt;cubo de un número entero&lt;/strong&gt;, cada exponente en la factorización debe ser múltiplo de 3.&lt;/p&gt;
&lt;p&gt;Actualmente tenemos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$$ 2^1 $$&lt;/li&gt;
&lt;li&gt;$$ 3^6 $$&lt;/li&gt;
&lt;li&gt;$$ 5^1 $$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Faltan potencias para que todos los exponentes sean múltiplos de 3.&lt;br&gt;
Necesitamos completar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$$ 2^1 \to 2^3 $$ → multiplicamos por $$ 2^2 $$&lt;/li&gt;
&lt;li&gt;$$ 3^6 \to 3^6 $$ → ya es múltiplo de 3&lt;/li&gt;
&lt;li&gt;$$ 5^1 \to 5^3 $$ → multiplicamos por $$ 5^2 $$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por lo tanto:&lt;/p&gt;
&lt;p&gt;$$
q = 5^2 \times 2^2
$$&lt;/p&gt;
&lt;p&gt;$$
q = 25 \times 4 = 100
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3️⃣ Comprobamos que $$ 7290q $$ sea un cubo perfecto&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Multiplicamos ambos:&lt;/p&gt;
&lt;p&gt;$$
n^3 = 7290 \times 100
$$&lt;/p&gt;
&lt;p&gt;Reemplazamos por las factorizaciones:&lt;/p&gt;
&lt;p&gt;$$
n^3 = (5 \times 3^6 \times 2) \times (5^2 \times 2^2)
$$&lt;/p&gt;
&lt;p&gt;Agrupando factores semejantes:&lt;/p&gt;
&lt;p&gt;$$
n^3 = 5^3 \times 3^6 \times 2^3
$$&lt;/p&gt;
&lt;p&gt;Extraemos la raíz cúbica:&lt;/p&gt;
&lt;p&gt;$$
n = (5^3 , 3^6 , 2^3)^{\frac{1}{3}} = 5 \times 3^2 \times 2
$$&lt;/p&gt;
&lt;p&gt;Simplificamos:&lt;/p&gt;
&lt;p&gt;$$
n = 5 \times 9 \times 2 = 90
$$&lt;/p&gt;
&lt;p&gt;✅ Por lo tanto:&lt;/p&gt;
&lt;p&gt;$$
\boxed{q = 100 \quad \text{y} \quad n = 90.}
$$&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 11&lt;/h2&gt;
&lt;p&gt;Demostrar que dados $$ a $$ y $$ b $$ en $$ \mathbb{Q} $$ tales que $$ a &amp;#x3C; b $$, existe otro número racional $$ x $$ tal que
$$ a &amp;#x3C; x &amp;#x3C; b $$.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1️⃣ Punto de partida&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sabemos que $$ a &amp;#x3C; b $$.&lt;br&gt;
Queremos encontrar un número &lt;strong&gt;racional&lt;/strong&gt; $$ x $$ que esté &lt;strong&gt;entre&lt;/strong&gt; ellos, es decir:&lt;/p&gt;
&lt;p&gt;$$
a &amp;#x3C; x &amp;#x3C; b.
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2️⃣ Proponemos un candidato&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Un candidato natural es el &lt;strong&gt;promedio aritmético&lt;/strong&gt; de ambos:&lt;/p&gt;
&lt;p&gt;$$
x = \frac{a + b}{2}.
$$&lt;/p&gt;
&lt;p&gt;Este número es racional porque $$ a, b \in \mathbb{Q} $$ y la suma y división entre racionales sigue siendo racional.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3️⃣ Demostramos que $$ a &amp;#x3C; \frac{a + b}{2} $$&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Partimos de la desigualdad inicial $$ a &amp;#x3C; b $$:&lt;/p&gt;
&lt;p&gt;$$
a + a &amp;#x3C; a + b
$$&lt;/p&gt;
&lt;p&gt;Sumamos $$ a $$ en ambos lados.&lt;br&gt;
Luego simplificamos:&lt;/p&gt;
&lt;p&gt;$$
2a &amp;#x3C; a + b
$$&lt;/p&gt;
&lt;p&gt;Dividimos por 2 (como 2 &gt; 0, la desigualdad se mantiene):&lt;/p&gt;
&lt;p&gt;$$
a &amp;#x3C; \frac{a + b}{2}
$$&lt;/p&gt;
&lt;p&gt;✅ Por lo tanto, el promedio es &lt;strong&gt;mayor que $$ a $$&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4️⃣ Demostramos que $$ \frac{a + b}{2} &amp;#x3C; b $$&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Partimos nuevamente de $$ a &amp;#x3C; b $$ y ahora sumamos $$ b $$ en ambos lados:&lt;/p&gt;
&lt;p&gt;$$
a + b &amp;#x3C; b + b
$$&lt;/p&gt;
&lt;p&gt;Simplificamos:&lt;/p&gt;
&lt;p&gt;$$
a + b &amp;#x3C; 2b
$$&lt;/p&gt;
&lt;p&gt;Dividimos por 2:&lt;/p&gt;
&lt;p&gt;$$
\frac{a + b}{2} &amp;#x3C; b
$$&lt;/p&gt;
&lt;p&gt;✅ Entonces el promedio es &lt;strong&gt;menor que ( b )&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5️⃣ Conclusión&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Hemos probado que:&lt;/p&gt;
&lt;p&gt;$$
a &amp;#x3C; \frac{a + b}{2} &amp;#x3C; b
$$&lt;/p&gt;
&lt;p&gt;Por lo tanto, el número racional $$ x = \frac{a + b}{2} $$ &lt;strong&gt;cumple&lt;/strong&gt; con la condición pedida.&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Resultado final:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
\boxed{x = \frac{a + b}{2}}
$$&lt;/p&gt;
&lt;p&gt;es un número racional tal que $$ a &amp;#x3C; x &amp;#x3C; b $$.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 12&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Probar que no existe un número racional cuyo cubo sea igual a 2.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1️⃣ Suposición inicial&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Supongamos, por contradicción, que existe un número racional $$\frac{p}{q}$$, con $$p, q \in \mathbb{Z}$$, $$ q \neq 0 $$, y en su forma más simple (es decir, $$ p $$ y $$ q $$ son coprimos), tal que:&lt;/p&gt;
&lt;p&gt;$$
\left(\frac{p}{q}\right)^3 = 2
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2️⃣ Desarrollo de la ecuación&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Elevando al cubo:&lt;/p&gt;
&lt;p&gt;$$
\frac{p^3}{q^3} = 2
$$&lt;/p&gt;
&lt;p&gt;Multiplicamos ambos lados por $$ q^3 $$:&lt;/p&gt;
&lt;p&gt;$$
p^3 = 2q^3
$$&lt;/p&gt;
&lt;p&gt;Esto implica que $$ p^3 $$ es &lt;strong&gt;un número par&lt;/strong&gt;, ya que es el doble de otro entero.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3️⃣ Deducción: $$ p $$ debe ser par&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Si $$ p^3 $$ es par, entonces $$ p $$ también es par.&lt;br&gt;
Por lo tanto, podemos escribir:&lt;/p&gt;
&lt;p&gt;$$
p = 2k
$$&lt;/p&gt;
&lt;p&gt;donde $$ k $$ es un número entero.&lt;/p&gt;
&lt;p&gt;4️⃣ Sustitución en la ecuación original&lt;/p&gt;
&lt;p&gt;Sustituyendo $$ p = 2k $$ en $$ p^3 = 2q^3 $$:&lt;/p&gt;
&lt;p&gt;$$
(2k)^3 = 2q^3
$$&lt;/p&gt;
&lt;p&gt;Desarrollamos:&lt;/p&gt;
&lt;p&gt;$$
8k^3 = 2q^3
$$&lt;/p&gt;
&lt;p&gt;Dividimos ambos lados por 2:&lt;/p&gt;
&lt;p&gt;$$
4k^3 = q^3
$$&lt;/p&gt;
&lt;p&gt;O equivalentemente:&lt;/p&gt;
&lt;p&gt;$$
q^3 = 2 \times (2k^3)
$$&lt;/p&gt;
&lt;p&gt;Esto muestra que $$ q^3 $$ también es &lt;strong&gt;par&lt;/strong&gt;, lo cual implica que $$ q $$ también es par.&lt;/p&gt;
&lt;p&gt;5️⃣ Contradicción&lt;/p&gt;
&lt;p&gt;Si tanto $$ p $$ como $$ q $$ son pares, entonces ambos tienen un factor común (el 2).&lt;br&gt;
Esto contradice la suposición inicial de que $$ \frac{p}{q} $$ está en su &lt;strong&gt;forma más simple&lt;/strong&gt; (coprimos).&lt;/p&gt;
&lt;p&gt;6️⃣ Conclusión&lt;/p&gt;
&lt;p&gt;Dado que llegamos a una contradicción, &lt;strong&gt;no puede existir tal número racional&lt;/strong&gt;.&lt;br&gt;
Por lo tanto:&lt;/p&gt;
&lt;p&gt;$$
\boxed{\text{No existe un número racional cuyo cubo sea igual a 2.}}
$$&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 13&lt;/h2&gt;
&lt;p&gt;Indique la parte real $$ \text{Re}(z) $$ y la parte imaginaria $$ \text{Im}(z) $$ de los siguientes complejos:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;a)&lt;/strong&gt;  $$ z = \sqrt{-49} $$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 1 – Reescribimos el número negativo:&lt;/strong&gt;&lt;br&gt;
Recordemos que $$ -1 $$ se asocia con la unidad imaginaria $$ i $$, donde $$ i^2 = -1 $$:&lt;/p&gt;
&lt;p&gt;$$
z = \sqrt{-1 \times 49}
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 2 – Separamos los factores:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z = \sqrt{49} \times \sqrt{-1}
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 3 – Simplificamos cada raíz:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z = 7 \times \sqrt{-1}
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 4 – Reemplazamos $$\sqrt{-1} = i$$:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z = 7i
$$&lt;/p&gt;
&lt;p&gt;✅ Entonces, el número complejo es puramente imaginario.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Parte real:&lt;br&gt;
$$
\text{Re}(z) = 0
$$&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Parte imaginaria:&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;$$
\text{Im}(z) = 7
$$&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;b)&lt;/strong&gt;  $$ z = \sqrt{-20} $$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 1 – Reescribimos el número negativo:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z = \sqrt{-1 \times 20}
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 2 – Separamos las raíces:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z = \sqrt{20} \times \sqrt{-1}
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 3 – Reemplazamos $$\sqrt{-1}$$:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z = \sqrt{20} , i
$$&lt;/p&gt;
&lt;p&gt;✅ El número también es puramente imaginario.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Parte real:&lt;br&gt;
$$
\text{Re}(z) = 0
$$&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Parte imaginaria:&lt;br&gt;
$$
\text{Im}(z) = \sqrt{20}
$$&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;c)&lt;/strong&gt;  $$ z = \sqrt{-\dfrac{9}{16}} $$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 1 – Separar numerador y denominador en la raíz:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z = \frac{\sqrt{-9}}{\sqrt{16}}
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 2 – Reescribir el número negativo como producto con $$-1$$:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z = \frac{\sqrt{-1 \times 9}}{\sqrt{16}}
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 3 – Separar los factores de la raíz:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z = \frac{\sqrt{-1} \times \sqrt{9}}{\sqrt{16}}
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 4 – Calcular cada raíz:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z = \frac{3\sqrt{-1}}{4}
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 5 – Sustituir $$\sqrt{-1} = i$$:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z = \frac{3}{4}i
$$&lt;/p&gt;
&lt;p&gt;✅ El número complejo obtenido es puramente imaginario.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Parte real:&lt;br&gt;
$$
\text{Re}(z) = 0
$$&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Parte imaginaria:&lt;br&gt;
$$
\text{Im}(z) = \frac{3}{4}
$$&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;d)&lt;/strong&gt;  $$ z = -8 $$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 1 – Identificamos el tipo de número:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;El valor $$z = -8$$ es un número &lt;strong&gt;real puro&lt;/strong&gt;, ya que no tiene parte imaginaria.&lt;/p&gt;
&lt;p&gt;Podemos escribirlo como:&lt;/p&gt;
&lt;p&gt;$$
z = -8 + 0i
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 2 – Determinamos sus componentes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Parte real:&lt;br&gt;
$$
\text{Re}(z) = -8
$$&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Parte imaginaria:&lt;br&gt;
$$
\text{Im}(z) = 0
$$&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;✅ Por lo tanto, $$ z $$ pertenece al conjunto de los números reales ($$ \mathbb{R} $$) y también al de los complejos ($$ \mathbb{C} $$), con parte imaginaria nula.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;e)&lt;/strong&gt;  $$ z = 7i $$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 1 – Identificamos el tipo de número:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;El número $$ z = 7i $$ es &lt;strong&gt;puramente imaginario&lt;/strong&gt;, ya que no posee parte real.&lt;/p&gt;
&lt;p&gt;Podemos expresarlo como:&lt;/p&gt;
&lt;p&gt;$$
z = 0 + 7i
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 2 – Determinamos sus componentes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Parte real:&lt;br&gt;
$$
\text{Re}(z) = 0
$$&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Parte imaginaria:&lt;br&gt;
$$
\text{Im}(z) = 7
$$&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;✅ Por lo tanto, $$ z $$ se encuentra sobre el eje imaginario en el plano complejo.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;f)&lt;/strong&gt;  $$ z = (3 + i) + (5 - 4i)$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 1 – Desarrollamos la suma:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z = 3 + i + 5 - 4i
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 2 – Agrupamos las partes reales e imaginarias:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z = (3 + 5) + (1 - 4)i
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 3 – Simplificamos:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z = 8 - 3i
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 4 – Identificamos las componentes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Parte real:&lt;br&gt;
$$
\text{Re}(z) = 8
$$&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Parte imaginaria:&lt;br&gt;
$$
\text{Im}(z) = -3
$$&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;✅ Por lo tanto, $$ z = 8 - 3i $$ es un número complejo con parte real positiva y parte imaginaria negativa.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;g)&lt;/strong&gt;  $$ z = 3i - (5 - 2i) $$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 1 – Quitamos el paréntesis aplicando el signo menos:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z = 3i - 5 + 2i
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 2 – Reordenamos los términos reales e imaginarios:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z = -5 + (3i + 2i)
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 3 – Simplificamos las partes semejantes:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z = -5 + 5i
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 4 – Identificamos las componentes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Parte real:&lt;br&gt;
$$
\text{Re}(z) = -5
$$&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Parte imaginaria:&lt;br&gt;
$$
\text{Im}(z) = 5
$$&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;✅ Por lo tanto, $$ z = -5 + 5i $$ es un número complejo con parte real negativa y parte imaginaria positiva.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;h)&lt;/strong&gt;  $$ z = \dfrac{1 + 3i}{3 - i} $$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 1 – Racionalizamos el denominador:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Multiplicamos numerador y denominador por el conjugado del denominador $$ 3 + i $$:&lt;/p&gt;
&lt;p&gt;$$
z = \dfrac{(1 + 3i)(3 + i)}{(3 - i)(3 + i)}
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 2 – Desarrollamos el numerador:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
(1 + 3i)(3 + i) = 1 \cdot 3 + 1 \cdot i + 3i \cdot 3 + 3i \cdot i
$$&lt;/p&gt;
&lt;p&gt;Simplificamos:&lt;/p&gt;
&lt;p&gt;$$
= 3 + i + 9i + 3i^2
$$&lt;/p&gt;
&lt;p&gt;Recordando que $$ i^2 = -1 $$:&lt;/p&gt;
&lt;p&gt;$$
= 3 + 10i - 3 = 9 + 10i + (-1) \Rightarrow 9 + 10i - 1 = 8 + 10i
$$&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(En el desarrollo del ejemplo original, los términos se agrupan directamente con la sustitución de $$i^2 = -1$$).&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 3 – Desarrollamos el denominador:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
(3 - i)(3 + i) = 3^2 - i^2 = 9 - (-1) = 10
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 4 – Simplificamos la fracción:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z = \dfrac{9 + 10i - 3}{10} = \dfrac{10i}{10} = i
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 5 – Identificamos las componentes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Parte real:&lt;br&gt;
$$
\text{Re}(z) = 0
$$&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Parte imaginaria:&lt;br&gt;
$$
\text{Im}(z) = 1
$$&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;✅ Por lo tanto, el número complejo resultante es puramente imaginario:&lt;br&gt;
$$
z = i
$$&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;i)&lt;/strong&gt;  $$ z = \dfrac{1 - i}{(1 + i)^2} $$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 1 – Expandimos el denominador:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
(1 + i)^2 = (1 + i)(1 + i) = 1 + 2i + i^2
$$&lt;/p&gt;
&lt;p&gt;Como $$ i^2 = -1 $$:&lt;/p&gt;
&lt;p&gt;$$
(1 + i)^2 = 1 + 2i - 1 = 2i
$$&lt;/p&gt;
&lt;p&gt;Por lo tanto:&lt;/p&gt;
&lt;p&gt;$$
z = \dfrac{1 - i}{2i}
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 2 – Racionalizamos el denominador:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Multiplicamos numerador y denominador por el conjugado de $$ 2i $$, que es $$ -2i $$:&lt;/p&gt;
&lt;p&gt;$$
z = \dfrac{(1 - i)(-2i)}{2i(-2i)}
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 3 – Desarrollamos el numerador:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
(1 - i)(-2i) = -2i + 2i^2 = -2i - 2
$$&lt;/p&gt;
&lt;p&gt;y el denominador:&lt;/p&gt;
&lt;p&gt;$$
2i(-2i) = -4i^2 = 4
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 4 – Simplificamos:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z = \dfrac{-2 - 2i}{4} = -\dfrac{1}{2} - \dfrac{1}{2}i
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 5 – Identificamos las componentes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Parte real:&lt;br&gt;
$$
\text{Re}(z) = -\dfrac{1}{2}
$$&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Parte imaginaria:&lt;br&gt;
$$
\text{Im}(z) = -\dfrac{1}{2}
$$&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;✅ Por lo tanto,&lt;br&gt;
$$
z = -\dfrac{1}{2} - \dfrac{1}{2}i
$$
es un número complejo con partes real e imaginaria iguales en magnitud y negativas.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 14&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;La suma de un número complejo y su conjugado es −8 y la suma de sus módulos es 10. ¿De qué números complejos se trata?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1️⃣ Representación general&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sea:
$$
z = a + ib, \quad \bar{z} = a - ib
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2️⃣ Suma del número con su conjugado&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sabemos que:
$$
z + \bar{z} = -8
$$&lt;/p&gt;
&lt;p&gt;Reemplazamos:
$$
(a + ib) + (a - ib) = -8
$$&lt;/p&gt;
&lt;p&gt;Simplificamos:
$$
2a = -8
$$&lt;/p&gt;
&lt;p&gt;Despejamos:
$$
a = -4
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3️⃣ Suma de los módulos&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;También se cumple que:
$$
|z| + |\bar{z}| = 10
$$&lt;/p&gt;
&lt;p&gt;Pero como el módulo de un número complejo y el de su conjugado son iguales:
$$
|z| = |\bar{z}|
$$&lt;/p&gt;
&lt;p&gt;Entonces:
$$
2|z| = 10
$$&lt;/p&gt;
&lt;p&gt;Dividimos por 2:
$$
|z| = 5
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4️⃣ Aplicamos la fórmula del módulo&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sabemos que:
$$
|z| = \sqrt{a^2 + b^2}
$$&lt;/p&gt;
&lt;p&gt;Reemplazamos ( a = -4 ):
$$
\sqrt{(-4)^2 + b^2} = 5
$$&lt;/p&gt;
&lt;p&gt;Elevamos ambos lados al cuadrado:
$$
16 + b^2 = 25
$$&lt;/p&gt;
&lt;p&gt;Restamos 16:
$$
b^2 = 9
$$&lt;/p&gt;
&lt;p&gt;Tomamos raíz cuadrada:
$$
|b| = 3
$$&lt;/p&gt;
&lt;p&gt;Por lo tanto:
$$
b = \pm 3
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5️⃣ Soluciones finales&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sustituyendo los valores de ( a ) y ( b ):&lt;/p&gt;
&lt;p&gt;$$
z_1 = -4 + 3i
$$&lt;/p&gt;
&lt;p&gt;$$
z_2 = -4 - 3i
$$&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Conclusión:&lt;/strong&gt; -&gt; Los números complejos que cumplen las condiciones dadas son:&lt;/p&gt;
&lt;p&gt;$$
\boxed{z_1 = -4 + 3i \quad \text{y} \quad z_2 = -4 - 3i.}
$$&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 15&lt;/h2&gt;
&lt;p&gt;Hallar, si existe, $$ x $$ real tal que $$ \text{Re}(z) = \text{Im}(z) $$ siendo $$ z = \dfrac{x + 2i}{4 - 3i} $$&lt;/p&gt;
&lt;p&gt;1️⃣ Racionalizamos el denominador&lt;/p&gt;
&lt;p&gt;Multiplicamos numerador y denominador por el conjugado de $$4 - 3i$$, que es $$4 + 3i$$:&lt;/p&gt;
&lt;p&gt;$$
z = \dfrac{(x + 2i)(4 + 3i)}{(4 - 3i)(4 + 3i)}
$$&lt;/p&gt;
&lt;p&gt;2️⃣ Desarrollamos el numerador&lt;/p&gt;
&lt;p&gt;$$
(x + 2i)(4 + 3i) = 4x + 3xi + 8i + 6i^2
$$&lt;/p&gt;
&lt;p&gt;Como $$i^2 = -1$$:&lt;/p&gt;
&lt;p&gt;$$
= 4x + 3xi + 8i - 6
$$&lt;/p&gt;
&lt;p&gt;Agrupamos las partes reales e imaginarias:&lt;/p&gt;
&lt;p&gt;$$
= (4x - 6) + (3x + 8)i
$$&lt;/p&gt;
&lt;p&gt;3️⃣ Desarrollamos el denominador&lt;/p&gt;
&lt;p&gt;$$
(4 - 3i)(4 + 3i) = 4^2 - (3i)^2 = 16 - (-9) = 25
$$&lt;/p&gt;
&lt;p&gt;4️⃣ Reescribimos $$z$$&lt;/p&gt;
&lt;p&gt;$$
z = \dfrac{(4x - 6) + (3x + 8)i}{25}
$$&lt;/p&gt;
&lt;p&gt;Separando en parte real e imaginaria:&lt;/p&gt;
&lt;p&gt;$$
z = \dfrac{4x - 6}{25} + \dfrac{3x + 8}{25}i
$$&lt;/p&gt;
&lt;p&gt;5️⃣ Condición: $$\text{Re}(z) = \text{Im}(z)$$&lt;/p&gt;
&lt;p&gt;Igualamos ambas expresiones:&lt;/p&gt;
&lt;p&gt;$$
\dfrac{4x - 6}{25} = \dfrac{3x + 8}{25}
$$&lt;/p&gt;
&lt;p&gt;Multiplicamos por 25 y simplificamos:&lt;/p&gt;
&lt;p&gt;$$
4x - 6 = 3x + 8
$$&lt;/p&gt;
&lt;p&gt;Despejamos:&lt;/p&gt;
&lt;p&gt;$$
x = 14
$$&lt;/p&gt;
&lt;p&gt;6️⃣ Verificamos el valor de ( z )&lt;/p&gt;
&lt;p&gt;Sustituimos ( x = 14 ) en la expresión de ( z ):&lt;/p&gt;
&lt;p&gt;$$
z = \dfrac{4(14) - 6}{25} + \dfrac{3(14) + 8}{25}i
$$&lt;/p&gt;
&lt;p&gt;Calculamos:&lt;/p&gt;
&lt;p&gt;$$
z = \dfrac{56 - 6}{25} + \dfrac{42 + 8}{25}i
$$&lt;/p&gt;
&lt;p&gt;$$
z = \dfrac{50}{25} + \dfrac{50}{25}i
$$&lt;/p&gt;
&lt;p&gt;$$
z = 2 + 2i
$$&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Conclusión:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;El valor real que cumple la condición es:&lt;/p&gt;
&lt;p&gt;$$
\boxed{x = 14}
$$&lt;/p&gt;
&lt;p&gt;y el número complejo correspondiente es:&lt;/p&gt;
&lt;p&gt;$$
\boxed{z = 2 + 2i.}
$$&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 16&lt;/h2&gt;
&lt;p&gt;Encontrar, si existe, un valor de $$ k $$ real para que el complejo $$ \frac{2 - (1 + k)i}{1 - ki} $$ &lt;em&gt;sea un número real.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1) Racionalizamos el denominador&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Multiplicamos numerador y denominador por el conjugado de $$1-ki$$, que es $$1+ki$$:
$$
z=\frac{(2-(1+k)i)(1+ki)}{(1-ki)(1+ki)}.
$$&lt;/p&gt;
&lt;p&gt;El denominador queda
$$
(1-ki)(1+ki)=1-(ki)^2=1+k^2.
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2) Desarrollamos el numerador&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
(2-(1+k)i)(1+ki)
=2+2ki-(1+k)i-(1+k)k,i^2.
$$&lt;/p&gt;
&lt;p&gt;Como $$i^2=-1$$:&lt;/p&gt;
&lt;p&gt;$$
=2+2ki-(1+k)i+(1+k)k.
$$&lt;/p&gt;
&lt;p&gt;Separando partes real e imaginaria:&lt;/p&gt;
&lt;p&gt;$$
\text{Real: } 2+(1+k)k=2+k+k^2, \qquad
\text{Imaginaria: } 2k-(1+k)=k-1.
$$&lt;/p&gt;
&lt;p&gt;Entonces
$$
z=\frac{(2+k+k^2)+(k-1)i}{1+k^2}.
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3) Condición para que (z) sea real&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$z$$ es real $$\iff$$ su parte imaginaria es $$0$$:&lt;/p&gt;
&lt;p&gt;$$
\frac{k-1}{1+k^2}=0 ;;\Longrightarrow;; k-1=0 ;;\Longrightarrow;; \boxed{k=1}.
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4) Valor de (z) para (k=1)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z=\frac{2+1+1}{1+1}=\frac{4}{2}= \boxed{2}.
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusión.&lt;/strong&gt; El valor buscado es $$\boxed{k=1}$$ y en ese caso $$z$$ resulta &lt;strong&gt;real&lt;/strong&gt; e igual a $$\boxed{2}$$.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 17&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Calcular las siguientes potencias:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;a)&lt;/strong&gt;  $$ i^{489} $$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 1 – Usamos el ciclo de potencias de $$i$$:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Recordemos que:&lt;/p&gt;
&lt;p&gt;$$
i^1 = i, \quad i^2 = -1, \quad i^3 = -i, \quad i^4 = 1
$$&lt;/p&gt;
&lt;p&gt;Por lo tanto, las potencias de $$i$$ se repiten &lt;strong&gt;cada 4&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 2 – Dividimos el exponente entre 4:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
489 = 4 \times 122 + 1
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 3 – Reescribimos la potencia:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
i^{489} = i^{4 \times 122 + 1}
$$&lt;/p&gt;
&lt;p&gt;$$
i^{489} = (i^4)^{122} \cdot i^1
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 4 – Simplificamos:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
(i^4)^{122} = 1^{122} = 1
$$&lt;/p&gt;
&lt;p&gt;$$
i^{489} = 1 \cdot i = i
$$&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Resultado final:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
\boxed{i^{489} = i}
$$&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;b)&lt;/strong&gt;  $$ -i^{1026} $$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 1 – Descomponemos el exponente:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
1026 = 4 \times 256 + 2
$$&lt;/p&gt;
&lt;p&gt;Por lo tanto:&lt;/p&gt;
&lt;p&gt;$$
-i^{1026} = -i^{4 \times 256 + 2}
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 2 – Aplicamos la propiedad de potencias:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
-i^{1026} = -\left( i^{4 \times 256} \cdot i^2 \right)
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 3 – Simplificamos usando ( i^4 = 1 ):&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
-i^{1026} = -\left( (i^4)^{256} \cdot (-1) \right)
$$&lt;/p&gt;
&lt;p&gt;$$
-i^{1026} = -\left( 1^{256} \cdot (-1) \right)
$$&lt;/p&gt;
&lt;p&gt;$$
-i^{1026} = -(-1)
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 4 – Resultado final:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
\boxed{-i^{1026} = 1}
$$&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;c)&lt;/strong&gt;  $$(3i)^{168} $$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 1 – Separamos la potencia:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
(3i)^{168} = 3^{168} \cdot i^{168}
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 2 – Descomponemos el exponente de $$i$$:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
168 = 4 \times 42 + 0
$$&lt;/p&gt;
&lt;p&gt;Entonces:&lt;/p&gt;
&lt;p&gt;$$
i^{168} = i^{4 \times 42 + 0} = (i^4)^{42} \cdot i^0
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 3 – Simplificamos usando $$i^4 = 1$$ y $$i^0 = 1$$:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
i^{168} = 1^{42} \cdot 1 = 1
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 4 – Reemplazamos en la expresión original:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
(3i)^{168} = 3^{168} \cdot 1
$$&lt;/p&gt;
&lt;p&gt;$$
(3i)^{168} = 3^{168}
$$&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Resultado final:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
\boxed{(3i)^{168} = 3^{168}}
$$&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 18&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dados los siguientes números complejos, encontrar la forma más adecuada para realizar las operaciones pedidas:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
z_1&amp;#x26;=3+3i &amp;#x26;\quad z_2&amp;#x26;=-1+i &amp;#x26;\quad z_3&amp;#x26;=5+4i &amp;#x26;\quad z_4&amp;#x26;=9 &amp;#x26;\quad z_5&amp;#x26;=5i \
z_6&amp;#x26;=-7   &amp;#x26;\quad z_7&amp;#x26;=-4-4i &amp;#x26;\quad z_8&amp;#x26;=-8i  &amp;#x26;\quad z_9&amp;#x26;=2-2i &amp;#x26;\quad z_{10}&amp;#x26;=3-4i
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Operaciones:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;a) $$ z_1+z_7 $$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 1 – Reemplazamos los valores:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z_1 + z_7 = (3 + 3i) + (-4 - 4i)
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 2 – Agrupamos términos reales e imaginarios:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z_1 + z_7 = (3 - 4) + (3i - 4i)
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 3 – Simplificamos:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z_1 + z_7 = -1 - i
$$&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Resultado final:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
\boxed{z_1 + z_7 = -1 - i}
$$&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;b) $$ z_5 - z_3 $$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 1 – Reemplazamos los valores:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z_5 - z_3 = 5i - (5 + 4i)
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 2 – Quitamos el paréntesis:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z_5 - z_3 = 5i - 5 - 4i
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 3 – Agrupamos las partes reales e imaginarias:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z_5 - z_3 = (-5) + (5i - 4i)
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 4 – Simplificamos:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z_5 - z_3 = -5 + i
$$&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Resultado final:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
\boxed{z_5 - z_3 = -5 + i}
$$&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;c) $$ z_9 \cdot z_6 $$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 1 – Reemplazamos los valores:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z_9 z_6 = (2 - 2i)(-7)
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 2 – Distribuimos el producto:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z_9 z_6 = 2(-7) - 2i(-7)
$$&lt;/p&gt;
&lt;p&gt;$$
z_9 z_6 = -14 + 14i
$$&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Resultado final:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
\boxed{z_9 z_6 = -14 + 14i}
$$&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;d) $$ \dfrac{z_8}{z_{10}} $$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Datos:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z_8 = -8i, \qquad z_{10} = 3 - 4i
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 1 – Escribimos la fracción:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
\dfrac{z_8}{z_{10}} = \dfrac{-8i}{3 - 4i}
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 2 – Racionalizamos el denominador:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Multiplicamos numerador y denominador por el conjugado de $$3 - 4i$$, que es $$3 + 4i$$:&lt;/p&gt;
&lt;p&gt;$$
\dfrac{z_8}{z_{10}} = \dfrac{-8i(3 + 4i)}{(3 - 4i)(3 + 4i)}
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 3 – Desarrollamos el numerador:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
-8i(3 + 4i) = -24i - 32i^2
$$&lt;/p&gt;
&lt;p&gt;Como $$i^2 = -1$$:&lt;/p&gt;
&lt;p&gt;$$
-24i - 32(-1) = -24i + 32
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 4 – Desarrollamos el denominador:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
(3 - 4i)(3 + 4i) = 9 - (4i)^2 = 9 - (-16) = 25
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 5 – Reescribimos la expresión:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
\dfrac{z_8}{z_{10}} = \dfrac{32 - 24i}{25}
$$&lt;/p&gt;
&lt;p&gt;$$
\dfrac{z_8}{z_{10}} = \dfrac{32}{25} - \dfrac{24}{25}i
$$&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Resultado final:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
\boxed{\dfrac{z_8}{z_{10}} = \dfrac{32}{25} - \dfrac{24}{25}i}
$$&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;e) $$ z_3 + z_6 $$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 1 – Reemplazamos los valores:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z_3 + z_6 = (5 + 4i) + (-7)
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 2 – Agrupamos las partes reales e imaginarias:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z_3 + z_6 = (5 - 7) + 4i
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 3 – Simplificamos:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z_3 + z_6 = -2 + 4i
$$&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Resultado final:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
\boxed{z_3 + z_6 = -2 + 4i}
$$&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;f) $$ z_2 - z_6 $$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 1 – Reemplazamos los valores:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z_2 - z_6 = (-1 + i) - (-7)
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 2 – Eliminamos el paréntesis:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z_2 - z_6 = -1 + i + 7
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 3 – Agrupamos términos:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z_2 - z_6 = ( -1 + 7 ) + i
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 4 – Simplificamos:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z_2 - z_6 = 6 + i
$$&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Resultado final:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
\boxed{z_2 - z_6 = 6 + i}
$$&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;g) $$ z_3 \cdot z_{10} $$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 1 – Reemplazamos los valores:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z_3 z_{10} = (5 + 4i)(3 - 4i)
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 2 – Aplicamos la propiedad distributiva:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z_3 z_{10} = 15 - 20i + 12i - 16i^2
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 3 – Simplificamos términos semejantes y recordamos que $$i^2 = -1$$:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z_3 z_{10} = 15 - 8i - 16(-1)
$$&lt;/p&gt;
&lt;p&gt;$$
z_3 z_{10} = 15 - 8i + 16
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 4 – Sumamos las partes reales:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z_3 z_{10} = 31 - 8i
$$&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Resultado final:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
\boxed{z_3 z_{10} = 31 - 8i}
$$&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;h) $$ z_1^{3} $$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1️⃣ Forma binómica&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z_1 = 3 + 3i
$$&lt;/p&gt;
&lt;p&gt;$$
z_1^3 = (3 + 3i)^3
$$&lt;/p&gt;
&lt;p&gt;Aplicamos la expansión del cubo:
$$
(a + b)^3 = a^3 + 3a^2b + 3ab^2 + b^3
$$&lt;/p&gt;
&lt;p&gt;$$
z_1^3 = 3^3 + 3(3^2)(3i) + 3(3)(3i)^2 + (3i)^3
$$&lt;/p&gt;
&lt;p&gt;$$
z_1^3 = 27 + 81i + 9(9i^2) + 27i^3
$$&lt;/p&gt;
&lt;p&gt;Recordando que $$i^2 = -1$$ y $$i^3 = -i$$:&lt;/p&gt;
&lt;p&gt;$$
z_1^3 = 27 + 81i + 81(-1) + 27(-i)
$$&lt;/p&gt;
&lt;p&gt;$$
z_1^3 = 27 + 81i - 81 - 27i
$$&lt;/p&gt;
&lt;p&gt;$$
z_1^3 = -54 + 54i
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2️⃣ Módulo y argumento&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z_1^3 = 27 + 81i - 81 - 27i
$$&lt;/p&gt;
&lt;p&gt;$$
z_1^3 = -54 + 54i
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2️⃣ Módulo y argumento&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
|z_1| = \sqrt{3^2 + 3^2} = \sqrt{9 + 9} = \sqrt{18} = 3\sqrt{2}
$$&lt;/p&gt;
&lt;p&gt;$$
\alpha = \tan^{-1}\left(\frac{3}{3}\right) = \tan^{-1}(1) = \frac{\pi}{4}
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3️⃣ Forma trigonométrica&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z_1 = |z_1|(\cos \alpha + i \sin \alpha)
$$&lt;/p&gt;
&lt;p&gt;$$
z_1^3 = (|z_1|)^3 [\cos(3\alpha) + i \sin(3\alpha)]
$$&lt;/p&gt;
&lt;p&gt;$$
z_1^3 = (3\sqrt{2})^3 [\cos(3 \cdot \frac{\pi}{4}) + i \sin(3 \cdot \frac{\pi}{4})]
$$&lt;/p&gt;
&lt;p&gt;$$
z_1^3 = 27 \cdot 2\sqrt{2} [\cos\left(\frac{3\pi}{4}\right) + i \sin\left(\frac{3\pi}{4}\right)]
$$&lt;/p&gt;
&lt;p&gt;$$
z_1^3 = 54\sqrt{2} \left(-\frac{1}{\sqrt{2}} + i \frac{1}{\sqrt{2}}\right)
$$&lt;/p&gt;
&lt;p&gt;$$
z_1^3 = -54 + 54i
$$&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Resultado final:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
\boxed{z_1^3 = -54 + 54i}
$$&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;i) $$ z_{9}^{9} $$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1) Módulo y argumento de $$z_9$$:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
|z_9|=\sqrt{2^2+(-2)^2}=\sqrt{8}=2\sqrt{2},
\qquad
\alpha=\arg(z_9)=\tan^{-1}!\left(\frac{-2}{2}\right)=\tan^{-1}(-1)=-\frac{\pi}{4}.
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2) De Moivre:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z_9^{,9}=\big(|z_9|,e^{i\alpha}\big)^{9}
=|z_9|^{9},e^{i,9\alpha}
=(2\sqrt{2})^{9},e^{-i,\frac{9\pi}{4}}.
$$&lt;/p&gt;
&lt;p&gt;Como $$-\dfrac{9\pi}{4}\equiv -\dfrac{\pi}{4}\ (\text{mod }2\pi)$$:&lt;/p&gt;
&lt;p&gt;$$
z_9^{,9}=(2\sqrt{2})^{9}\left[\cos!\left(-\frac{\pi}{4}\right)+
i\sin!\left(-\frac{\pi}{4}\right)\right]
=(2\sqrt{2})^{9}\left(\frac{1}{\sqrt{2}}-\frac{i}{\sqrt{2}}\right).
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3) Simplificación del módulo:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
(2\sqrt{2})^{9}=2^{9}(\sqrt{2})^{9}
=2^{9}\cdot 2^{\frac{9}{2}}
=2^{13}\sqrt{2}.
$$&lt;/p&gt;
&lt;p&gt;Entonces:&lt;/p&gt;
&lt;p&gt;$$
z_9^{,9}=2^{13}\sqrt{2}\left(\frac{1}{\sqrt{2}}-\frac{i}{\sqrt{2}}\right)
=2^{13}(1-i).
$$&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Resultado final:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
\boxed{,z_9^{,9}=2^{13}(1-i)=8192-8192,i, }.
$$&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;j) $$ z_{5}^{15} $$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 1 – Reemplazamos el valor de $$z_5$$:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z_5^{15} = (5i)^{15}
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 2 – Separación de potencias:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z_5^{15} = 5^{15} \cdot i^{15}
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 3 – Descomposición del exponente:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
i^{15} = i^{4 \times 3 + 3}
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 4 – Simplificación usando $$i^4 = 1$$:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
i^{15} = (i^4)^3 \cdot i^3
$$&lt;/p&gt;
&lt;p&gt;$$
i^{15} = 1^3 \cdot i^3
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 5 – Recordamos que $$i^3 = -i$$:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
i^{15} = -i
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 6 – Sustituimos en la expresión original:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
z_5^{15} = 5^{15} \cdot (-i)
$$&lt;/p&gt;
&lt;p&gt;$$
z_5^{15} = -5^{15} i
$$&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Resultado final:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
\boxed{z_5^{15} = -5^{15} i}
$$&lt;/p&gt;
&lt;h2&gt;Estos ejercicio son bastantes complejos y los obviamos :(&lt;/h2&gt;
&lt;hr&gt;
&lt;p&gt;k) $$ z_{10}^{3} $$&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;l) Hallar las &lt;strong&gt;raíces cuartas&lt;/strong&gt; de $$ z_2 $$.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;m) Hallar las &lt;strong&gt;raíces cúbicas&lt;/strong&gt; de $$ z_4 $$.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;n) Hallar las &lt;strong&gt;raíces séptimas&lt;/strong&gt; de $$ i $$.&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.DuSqYQ2N.jpg"/><enclosure url="/_astro/thumbnail.DuSqYQ2N.jpg"/></item><item><title>AWS IoT Node-Red</title><link>https://fabianmartinezrincon.com/blog/aws-iot-node-red</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/aws-iot-node-red</guid><description>Actividad 2</description><pubDate>Sun, 05 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Indice&lt;/h1&gt;
&lt;h2&gt;ACLARACION DEL TRABAJO:&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;DEBIDO A FALTA DE TIEMPO NO SE LLEGO A SACAR TODAS LAS IMAGENES DEL PROTOTIPO FINAL NI DE ACTUALIZAR LOS JSON&lt;/strong&gt;, por lo que las imagenes no son 100% representativas del trabajo realizado en clase. Las imagenes que muestran lo ultimo realizado son las del flujo de Node-red en el ejercicio 5 y 6, algunas de las demas (como por ejemplo las del dashboard) estan desactualizadas. Para ver la ultima version del dashboard, ver el video.&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;1) Desplegar dos instancias t3.micro con Linux Debian 13 en AWS EC2: Instancia A e Instancia B.&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Las siguientes imagenes muestran el &lt;strong&gt;inicio exitoso de las instancias EC2&lt;/strong&gt; en AWS, &lt;strong&gt;Instancia A&lt;/strong&gt; e &lt;strong&gt;Instancia B&lt;/strong&gt;.
El proceso de creación se completó correctamente, incluyendo la inicialización, la configuración de grupos y reglas de seguridad, y el lanzamiento final.
Las instancia quedaron listas para su conexión y posterior instalación de Node-RED.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-4.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-5.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;&lt;strong&gt;2) Instalar “Node-RED” en ambas instancias.&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Primero configuramos las &lt;strong&gt;reglas de entrada&lt;/strong&gt; del grupo de seguridad asociado a las instancias, habilitando el &lt;strong&gt;puerto 22 (SSH)&lt;/strong&gt; para permitir el acceso remoto desde cualquier dirección IP, y se agregando una regla &lt;strong&gt;TCP personalizada en el puerto 1880&lt;/strong&gt;, utilizada por &lt;strong&gt;Node-RED&lt;/strong&gt; para su interfaz web.
Esta configuración permite acceder al panel de control de Node-RED desde el navegador, garantizando la comunicación externa necesaria para el proyecto.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-7.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Ya habiendo configurado las &lt;strong&gt;reglas de entrada&lt;/strong&gt;, ejecutamos los siguientes comandos en ambas instancias para instalar &lt;strong&gt;node-red&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo apt update
sudo apt install snapd
sudo snap install core
sudo snap install node-red
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;p&gt;Y para verificar su correcto funcionamiento utilizamos el comando &lt;code&gt;sudo apt install net-tools&lt;/code&gt; para disponer de utilidades de red y, posteriormente, &lt;code&gt;sudo netstat -na | grep 1880&lt;/code&gt; para confirmar que el servicio de Node-RED se encuentra escuchando en el &lt;strong&gt;puerto 1880&lt;/strong&gt;, indicando que la instalación y el despliegue se realizaron correctamente.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-6.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Posteriormente probamos el acceso a la &lt;strong&gt;interfaz gráfica de Node-RED&lt;/strong&gt; mediante el navegador, utilizando las direcciónes públicas de las instancias.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-8.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Estos pasos confirman que la instalación y configuración del entorno Node-RED en las instancias se realizaron correctamente y que el servicio se encuentra operativo.&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;3) Instalar el nodo “node-red-dashboard”.&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;En la siguientes imagenes se puede ver el menú de configuración de &lt;strong&gt;Node-RED&lt;/strong&gt;, para instalar el paquete &lt;strong&gt;&lt;code&gt;node-red-dashboard&lt;/code&gt;&lt;/strong&gt;.
Este módulo permite crear interfaces gráficas interactivas (dashboards) para visualizar y controlar variables del sistema, como el estado de la iluminación o los temporizadores.
La instalación de este nodo es fundamental para el desarrollo del panel de control utilizado en el proyecto.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-10.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-11.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;&lt;strong&gt;4) Registrar ambas instancias como objetos/dispositivos en AWS IoT para poder operar mediante el protocolo MQTT.&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;En la siguiente imagen se muestra el paso de &lt;strong&gt;descarga del kit de conexión&lt;/strong&gt; en el servicio &lt;strong&gt;AWS IoT Core&lt;/strong&gt;, correspondiente al dispositivo &lt;strong&gt;A01-IOT-A&lt;/strong&gt;.
El kit incluye los archivos necesarios para establecer la comunicación segura entre la instancia EC2 y el servicio IoT. Estos elementos permiten autenticar el dispositivo y garantizar una conexión segura mediante el protocolo &lt;strong&gt;MQTT&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-12.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Una configuracion necesaria para su correcto funcionamiento es la de la &lt;strong&gt;política de seguridad&lt;/strong&gt;, la cual fue &lt;strong&gt;actualizada&lt;/strong&gt; de la siguiente manera: Se configuro la versión activa de la política la &lt;strong&gt;versión 2&lt;/strong&gt;, que tiene como proposito permitir todas las acciones (&lt;code&gt;iot:*&lt;/code&gt;) sobre cualquier recurso (&lt;code&gt;*&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-13.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;El mismo procesamiento fue realizado para el dispositivo &lt;strong&gt;A01-IOT-B&lt;/strong&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;&lt;strong&gt;5) Desarrollar, en la instancia A, la solución de un “CONTROL REMOTO” para gestionar la iluminación de un ambiente: ´botón “ENCENDIDO/ON”, botón “APAGADO/OFF”, informe de estado de la luminaria y funcionalidad “TIMER de 5s” para que activada dicha funcionalidad, al encender la luminaria se apague a los 5 segundos.&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Dentro de la &lt;strong&gt;Instancia A&lt;/strong&gt;, se pueden encontrar los botones &lt;strong&gt;ON&lt;/strong&gt;, &lt;strong&gt;OFF&lt;/strong&gt; y el &lt;strong&gt;Timer ON/OFF&lt;/strong&gt; con distintas funciones que manejan la lógica del encendido, apagado y el temporizador de 5 segundos.
Cuando el temporizador está activo, la lámpara se apaga automáticamente después de esos 5 segundos de apretado el boton &lt;strong&gt;ON&lt;/strong&gt;.
Todas las acciones se envían por &lt;strong&gt;MQTT&lt;/strong&gt; al canal configurado en &lt;strong&gt;AWS IoT&lt;/strong&gt;, que luego es recibido por la &lt;strong&gt;Instancia B&lt;/strong&gt;, encargada de mostrar el estado de la luminaria.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-45.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Si nos fijamos en &lt;strong&gt;panel de control hecho con Node-RED Dashboard&lt;/strong&gt;, se podran ver elementos como los botones &lt;strong&gt;ON&lt;/strong&gt; y &lt;strong&gt;OFF&lt;/strong&gt; y un switch &lt;strong&gt;Timer ON/OFF&lt;/strong&gt;.
Desde el dashboard se puede encender y apagar la led o activar el temporizador de la luminaria, que la apaga automáticamente después de 5 segundos de apretado el boton &lt;strong&gt;ON&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;NODOS A DETALLAR:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Function 2&lt;/strong&gt; se encarga de &lt;strong&gt;manejar el estado del temporizador&lt;/strong&gt; usando una variable global llamada &lt;strong&gt;&lt;code&gt;TIMER_ON&lt;/code&gt;&lt;/strong&gt;, cambiando cada vez que se ejecuta el estado de la variable: Si &lt;strong&gt;&lt;code&gt;TIMER_ON&lt;/code&gt; está en 1&lt;/strong&gt;, la función la cambia a &lt;strong&gt;0&lt;/strong&gt; y si está en &lt;strong&gt;0&lt;/strong&gt;, la cambia a &lt;strong&gt;1&lt;/strong&gt;. De esta forma, el sistema alterna entre los dos modos (automático y manual) y mantiene sincronizado el estado del temporizador con el interruptor del panel.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Function 1&lt;/strong&gt; se encarga de manejar el apagado de la luz teniendo en cuenta si el temporizador está activo: Esto lo hace revisando el valor de la variable global &lt;strong&gt;&lt;code&gt;TIMER_ON&lt;/code&gt;&lt;/strong&gt;, que guarda el estado del temporizador.
Si el temporizador &lt;strong&gt;está activado&lt;/strong&gt;, la función envía un mensaje al &lt;strong&gt;delay&lt;/strong&gt; para que luego de 5 segundos se los transmita al la &lt;strong&gt;Function 3&lt;/strong&gt;.
En cambio, si el temporizador &lt;strong&gt;no está activo&lt;/strong&gt;, no se envía nada, y el delay no se activa.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A su vez, si &lt;strong&gt;delay&lt;/strong&gt; se activa, &lt;strong&gt;Function 3&lt;/strong&gt; simplemente cambia el valor del payload a 0 (lo que representa el estado de apagado) y lo envía al mismo canal MQTT que controla la luz. De esta manera, cuando el temporizador está activo, el flujo primero enciende la luz con &lt;code&gt;payload = 1&lt;/code&gt; y, tras los 5 segundos, esta función la apaga enviando &lt;code&gt;payload = 0&lt;/code&gt;.
Así logramos un sistema automático que prende y apaga sin intervención manual.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;&lt;strong&gt;6) Desarrollar, en la instancia B, la solución para controlar la “ILUMINACIÓN” de un ambiente simulando el “ENCENDIDO/APAGADO” de la luminaria, informando el estado de la “LUMINARIA” y el estado del “TIMER”.&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Dentro de la &lt;strong&gt;Instancia B&lt;/strong&gt; se estableció la recepción de las señales recibidas por los canales &lt;strong&gt;A01 - CANAL 1&lt;/strong&gt;, &lt;strong&gt;A01 - CANAL 2&lt;/strong&gt;, que envian, respectivamente, sus valores hacia un gauge y a una celda de texto que indica el estado del timer.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-46.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Los valores recibidos se muestran en tiempo real dentro del dashboard.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;&lt;strong&gt;7) Las instancias A y B deben comunicarse por medio de MQTT utilizando el bróker de AWS IoT.&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;En la intancia 1, en la &lt;strong&gt;configuración del nodo MQTT&lt;/strong&gt; dentro de Node-RED, se incorporon los &lt;strong&gt;certificados de seguridad proporcionados por AWS&lt;/strong&gt; para establecer una conexión segura con el bróker MQTT.
Se cargon: El &lt;strong&gt;certificado del dispositivo (&lt;code&gt;A01-IOT-A.cert.pem&lt;/code&gt;)&lt;/strong&gt;, la &lt;strong&gt;clave privada (&lt;code&gt;A01-IOT-A.private.key&lt;/code&gt;)&lt;/strong&gt; y el &lt;strong&gt;certificado raíz de Amazon (&lt;code&gt;AmazonRootCA1.pem&lt;/code&gt;)&lt;/strong&gt;, asegurando la autenticación y el cifrado de las comunicaciones.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-14.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;El nodo ademas tiene la siguiente configuracion: Se habilita la opción &lt;strong&gt;“Use TLS”&lt;/strong&gt;, asociando el conjunto de certificados &lt;strong&gt;A01-CERTIFICADOS&lt;/strong&gt; previamente cargado, garantizando así una conexión segura y cifrada.
Además, se utiliza el protocolo &lt;strong&gt;MQTT versión 3.1.1&lt;/strong&gt;, con conexión automática y sesión limpia, lo que asegura una comunicación estable y autenticada con el servidor IoT.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-18.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Por ultimo, el nodo está asociado al servidor &lt;strong&gt;A01-ND&lt;/strong&gt;, que contiene los certificados de autenticación configurados previamente, y se define el &lt;strong&gt;tópico “A0-CANALLL”&lt;/strong&gt;, que representa el canal de comunicación por el cual se enviarán los mensajes MQTT. Ademas, se le configuro el QoS para que tenga &lt;strong&gt;tipo 0&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-20.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Similarmente, se hicieron las configuraciones necesarias para la instancia B&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Configuración TLS&lt;/strong&gt; para la &lt;strong&gt;Instancia B&lt;/strong&gt;, donde se cargan los certificados necesarios para la conexión segura con &lt;strong&gt;AWS IoT&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A01-IOT-B.cert.pem&lt;/strong&gt; (certificado del dispositivo)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A01-IOT-B.private.key&lt;/strong&gt; (clave privada)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AmazonRootCA1.pem&lt;/strong&gt; (certificado raíz).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Con esto generamos la &lt;strong&gt;comunicación cifrada y autenticada&lt;/strong&gt; entre Node-RED y el bróker MQTT.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-19.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;h1&gt;Imagenes finales que muestran el funcionamiento&lt;/h1&gt;
&lt;h2&gt;&lt;strong&gt;Ejemplo&lt;/strong&gt; que muestra el funcionamiento esperado&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;image-1.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-2.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-3.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Resolucion&lt;/h2&gt;
&lt;h3&gt;ACLARACION DEL TRABAJO:&lt;/h3&gt;
&lt;p&gt;Como se comento al inicio del trabajo, &lt;strong&gt;DEBIDO A FALTA DE TIEMPO NO SE LLEGO A SACAR TODAS LAS IMAGENES DEL PROTOTIPO FINAL NI DE ACTUALIZAR LOS JSON&lt;/strong&gt;, por lo que las imagenes no son 100% representativas del trabajo realizado en clase. Las imagenes que muestran lo ultimo realizado son las del flujo de Node-red en el ejercicio 5 y 6, algunas de las demas (como por ejemplo las del dashboard) estan desactualizadas. Para ver la ultima version del dashboard, ver el video.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-43.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-44.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;video.gif&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;JSON de instancias&lt;/h1&gt;
&lt;h3&gt;Intancia 1&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;[
    {
        &quot;id&quot;: &quot;8e0cbc430664e608&quot;,
        &quot;type&quot;: &quot;function&quot;,
        &quot;z&quot;: &quot;5e1db891e60b5c59&quot;,
        &quot;name&quot;: &quot;function 2&quot;,
        &quot;func&quot;: &quot;// Obtener el valor de la variable global \&quot;TIMER_ON\&quot;\nvar timerOn = global.get(\&quot;TIMER_ON\&quot;);\n\nif (timerOn) {\n    global.set(&apos;TIMER_ON&apos;, 0);\n    \n    msg.payload = 0;\n    return msg;  \n} else {\n    global.set(&apos;TIMER_ON&apos;, 1);\n\n\n\n    msg.payload = 1;\n    return msg;  \n}\n\nreturn null;\n&quot;,
        &quot;outputs&quot;: 1,
        &quot;timeout&quot;: 0,
        &quot;noerr&quot;: 0,
        &quot;initialize&quot;: &quot;// Code added here will be run once\n// whenever the node is started.\nglobal.set(&apos;TIMER_ON&apos;, 0);\n&quot;,
        &quot;finalize&quot;: &quot;&quot;,
        &quot;libs&quot;: [],
        &quot;x&quot;: 720,
        &quot;y&quot;: 440,
        &quot;wires&quot;: [
            [
                &quot;4643e7018dabdb67&quot;,
                &quot;a9649b8b6a640eb1&quot;
            ]
        ]
    }
]
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Instancia 2&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;[
    {
        &quot;id&quot;: &quot;851e7fe4014bb0d5&quot;,
        &quot;type&quot;: &quot;tab&quot;,
        &quot;label&quot;: &quot;Flow 1&quot;,
        &quot;disabled&quot;: false,
        &quot;info&quot;: &quot;&quot;,
        &quot;env&quot;: []
    },
    {
        &quot;id&quot;: &quot;bf13f7c233638d0b&quot;,
        &quot;type&quot;: &quot;mqtt in&quot;,
        &quot;z&quot;: &quot;851e7fe4014bb0d5&quot;,
        &quot;name&quot;: &quot;&quot;,
        &quot;topic&quot;: &quot;A0 - CANAL 1&quot;,
        &quot;qos&quot;: &quot;0&quot;,
        &quot;datatype&quot;: &quot;auto-detect&quot;,
        &quot;broker&quot;: &quot;89528596d9aa8d87&quot;,
        &quot;nl&quot;: false,
        &quot;rap&quot;: true,
        &quot;rh&quot;: 0,
        &quot;inputs&quot;: 0,
        &quot;x&quot;: 350,
        &quot;y&quot;: 260,
        &quot;wires&quot;: [
            [
                &quot;d2dea35af5752b39&quot;,
                &quot;92e0e2c9e46981de&quot;
            ]
        ]
    },
    {
        &quot;id&quot;: &quot;d2dea35af5752b39&quot;,
        &quot;type&quot;: &quot;ui_gauge&quot;,
        &quot;z&quot;: &quot;851e7fe4014bb0d5&quot;,
        &quot;name&quot;: &quot;&quot;,
        &quot;group&quot;: &quot;93785911cc895a9d&quot;,
        &quot;order&quot;: 0,
        &quot;width&quot;: 0,
        &quot;height&quot;: 0,
        &quot;gtype&quot;: &quot;gage&quot;,
        &quot;title&quot;: &quot;gauge&quot;,
        &quot;label&quot;: &quot;units&quot;,
        &quot;format&quot;: &quot;{{value}}&quot;,
        &quot;min&quot;: 0,
        &quot;max&quot;: &quot;1&quot;,
        &quot;colors&quot;: [
            &quot;#00b500&quot;,
            &quot;#e6e600&quot;,
            &quot;#ca3838&quot;
        ],
        &quot;seg1&quot;: &quot;&quot;,
        &quot;seg2&quot;: &quot;&quot;,
        &quot;diff&quot;: false,
        &quot;className&quot;: &quot;&quot;,
        &quot;x&quot;: 610,
        &quot;y&quot;: 260,
        &quot;wires&quot;: []
    },
    {
        &quot;id&quot;: &quot;da8eff1728975e77&quot;,
        &quot;type&quot;: &quot;mqtt in&quot;,
        &quot;z&quot;: &quot;851e7fe4014bb0d5&quot;,
        &quot;name&quot;: &quot;&quot;,
        &quot;topic&quot;: &quot;A0 - CANAL 2&quot;,
        &quot;qos&quot;: &quot;0&quot;,
        &quot;datatype&quot;: &quot;auto-detect&quot;,
        &quot;broker&quot;: &quot;89528596d9aa8d87&quot;,
        &quot;nl&quot;: false,
        &quot;rap&quot;: true,
        &quot;rh&quot;: 0,
        &quot;inputs&quot;: 0,
        &quot;x&quot;: 170,
        &quot;y&quot;: 360,
        &quot;wires&quot;: [
            [
                &quot;46131f48d11a2d93&quot;
            ]
        ]
    },
    {
        &quot;id&quot;: &quot;43e3a7017615bf0b&quot;,
        &quot;type&quot;: &quot;ui_text&quot;,
        &quot;z&quot;: &quot;851e7fe4014bb0d5&quot;,
        &quot;group&quot;: &quot;93785911cc895a9d&quot;,
        &quot;order&quot;: 1,
        &quot;width&quot;: 0,
        &quot;height&quot;: 0,
        &quot;name&quot;: &quot;&quot;,
        &quot;label&quot;: &quot;ESTADO DE TIMER&quot;,
        &quot;format&quot;: &quot;{{msg.payload}}&quot;,
        &quot;layout&quot;: &quot;row-spread&quot;,
        &quot;className&quot;: &quot;&quot;,
        &quot;style&quot;: false,
        &quot;font&quot;: &quot;&quot;,
        &quot;fontSize&quot;: 16,
        &quot;color&quot;: &quot;#000000&quot;,
        &quot;x&quot;: 640,
        &quot;y&quot;: 360,
        &quot;wires&quot;: []
    },
    {
        &quot;id&quot;: &quot;c350c83e29f26b57&quot;,
        &quot;type&quot;: &quot;mqtt out&quot;,
        &quot;z&quot;: &quot;851e7fe4014bb0d5&quot;,
        &quot;name&quot;: &quot;&quot;,
        &quot;topic&quot;: &quot;A0 - CANAL 3&quot;,
        &quot;qos&quot;: &quot;0&quot;,
        &quot;retain&quot;: &quot;&quot;,
        &quot;respTopic&quot;: &quot;&quot;,
        &quot;contentType&quot;: &quot;&quot;,
        &quot;userProps&quot;: &quot;&quot;,
        &quot;correl&quot;: &quot;&quot;,
        &quot;expiry&quot;: &quot;&quot;,
        &quot;broker&quot;: &quot;89528596d9aa8d87&quot;,
        &quot;x&quot;: 620,
        &quot;y&quot;: 460,
        &quot;wires&quot;: []
    },
    {
        &quot;id&quot;: &quot;92e0e2c9e46981de&quot;,
        &quot;type&quot;: &quot;function&quot;,
        &quot;z&quot;: &quot;851e7fe4014bb0d5&quot;,
        &quot;name&quot;: &quot;function 1&quot;,
        &quot;func&quot;: &quot;if (msg.payload === 1) {\n    msg.payload = true;\n    return msg;\n} else if (msg.payload === 0) {\n    msg.payload = false;\n    return msg;\n}\n\n// Si no es 0 ni 1, no enviar nada\nreturn null;\n&quot;,
        &quot;outputs&quot;: 1,
        &quot;timeout&quot;: 0,
        &quot;noerr&quot;: 0,
        &quot;initialize&quot;: &quot;&quot;,
        &quot;finalize&quot;: &quot;&quot;,
        &quot;libs&quot;: [],
        &quot;x&quot;: 380,
        &quot;y&quot;: 460,
        &quot;wires&quot;: [
            [
                &quot;c350c83e29f26b57&quot;,
                &quot;ef083061253f6d22&quot;
            ]
        ]
    },
    {
        &quot;id&quot;: &quot;ef083061253f6d22&quot;,
        &quot;type&quot;: &quot;ui_text&quot;,
        &quot;z&quot;: &quot;851e7fe4014bb0d5&quot;,
        &quot;group&quot;: &quot;93785911cc895a9d&quot;,
        &quot;order&quot;: 1,
        &quot;width&quot;: 0,
        &quot;height&quot;: 0,
        &quot;name&quot;: &quot;&quot;,
        &quot;label&quot;: &quot;ESTADO DE LED&quot;,
        &quot;format&quot;: &quot;{{msg.payload}}&quot;,
        &quot;layout&quot;: &quot;row-spread&quot;,
        &quot;className&quot;: &quot;&quot;,
        &quot;style&quot;: false,
        &quot;font&quot;: &quot;&quot;,
        &quot;fontSize&quot;: 16,
        &quot;color&quot;: &quot;#000000&quot;,
        &quot;x&quot;: 590,
        &quot;y&quot;: 560,
        &quot;wires&quot;: []
    },
    {
        &quot;id&quot;: &quot;46131f48d11a2d93&quot;,
        &quot;type&quot;: &quot;function&quot;,
        &quot;z&quot;: &quot;851e7fe4014bb0d5&quot;,
        &quot;name&quot;: &quot;function 2&quot;,
        &quot;func&quot;: &quot;if (msg.payload === 1) {\n    msg.payload = true;\n    return msg;\n} else if (msg.payload === 0) {\n    msg.payload = false;\n    return msg;\n}\n\n// Si no es 0 ni 1, no enviar nada\nreturn null;\n&quot;,
        &quot;outputs&quot;: 1,
        &quot;timeout&quot;: 0,
        &quot;noerr&quot;: 0,
        &quot;initialize&quot;: &quot;&quot;,
        &quot;finalize&quot;: &quot;&quot;,
        &quot;libs&quot;: [],
        &quot;x&quot;: 400,
        &quot;y&quot;: 380,
        &quot;wires&quot;: [
            [
                &quot;43e3a7017615bf0b&quot;
            ]
        ]
    },
    {
        &quot;id&quot;: &quot;89528596d9aa8d87&quot;,
        &quot;type&quot;: &quot;mqtt-broker&quot;,
        &quot;name&quot;: &quot;&quot;,
        &quot;broker&quot;: &quot;a19dtnoi0vf30n-ats.iot.us-east-1.amazonaws.com&quot;,
        &quot;port&quot;: &quot;8883&quot;,
        &quot;tls&quot;: &quot;aea41aa768c86303&quot;,
        &quot;clientid&quot;: &quot;&quot;,
        &quot;autoConnect&quot;: true,
        &quot;usetls&quot;: true,
        &quot;protocolVersion&quot;: &quot;5&quot;,
        &quot;keepalive&quot;: &quot;60&quot;,
        &quot;cleansession&quot;: true,
        &quot;autoUnsubscribe&quot;: true,
        &quot;birthTopic&quot;: &quot;&quot;,
        &quot;birthQos&quot;: &quot;0&quot;,
        &quot;birthRetain&quot;: &quot;false&quot;,
        &quot;birthPayload&quot;: &quot;&quot;,
        &quot;birthMsg&quot;: {},
        &quot;closeTopic&quot;: &quot;&quot;,
        &quot;closeQos&quot;: &quot;0&quot;,
        &quot;closeRetain&quot;: &quot;false&quot;,
        &quot;closePayload&quot;: &quot;&quot;,
        &quot;closeMsg&quot;: {},
        &quot;willTopic&quot;: &quot;&quot;,
        &quot;willQos&quot;: &quot;0&quot;,
        &quot;willRetain&quot;: &quot;false&quot;,
        &quot;willPayload&quot;: &quot;&quot;,
        &quot;willMsg&quot;: {},
        &quot;userProps&quot;: &quot;&quot;,
        &quot;sessionExpiry&quot;: &quot;&quot;
    },
    {
        &quot;id&quot;: &quot;93785911cc895a9d&quot;,
        &quot;type&quot;: &quot;ui_group&quot;,
        &quot;name&quot;: &quot;Default&quot;,
        &quot;tab&quot;: &quot;32ebd9f119ce5fb1&quot;,
        &quot;order&quot;: 1,
        &quot;disp&quot;: true,
        &quot;width&quot;: &quot;6&quot;,
        &quot;collapse&quot;: false,
        &quot;className&quot;: &quot;&quot;
    },
    {
        &quot;id&quot;: &quot;aea41aa768c86303&quot;,
        &quot;type&quot;: &quot;tls-config&quot;,
        &quot;name&quot;: &quot;A01-B&quot;,
        &quot;cert&quot;: &quot;&quot;,
        &quot;key&quot;: &quot;&quot;,
        &quot;ca&quot;: &quot;&quot;,
        &quot;certname&quot;: &quot;A01-IOT-B.cert.pem&quot;,
        &quot;keyname&quot;: &quot;A01-IOT-B.private.key&quot;,
        &quot;caname&quot;: &quot;AmazonRootCA1.pem&quot;,
        &quot;servername&quot;: &quot;&quot;,
        &quot;verifyservercert&quot;: false,
        &quot;alpnprotocol&quot;: &quot;&quot;
    },
    {
        &quot;id&quot;: &quot;32ebd9f119ce5fb1&quot;,
        &quot;type&quot;: &quot;ui_tab&quot;,
        &quot;name&quot;: &quot;Home&quot;,
        &quot;icon&quot;: &quot;dashboard&quot;,
        &quot;disabled&quot;: false,
        &quot;hidden&quot;: false
    }
]
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Estas fueron todas las imagenes finales del proyecto&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;image-47.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-48.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-49.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-50.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-51.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-52.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-53.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-54.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-55.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-56.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-57.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-58.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.BaomtVXx.jpg"/><enclosure url="/_astro/thumbnail.BaomtVXx.jpg"/></item><item><title>Lanzando una instancia de AWS EC2</title><link>https://fabianmartinezrincon.com/blog/cloud-aws-ec2</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/cloud-aws-ec2</guid><description>Actividad 1 \n Ricciardi Nicolas y Fabian Martinez</description><pubDate>Thu, 11 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Indice&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-1-lanzar-instancia-ec2&quot;&gt;1. Lanzar instancia EC2 (t3.micro, Debian 13).&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-2-conexi%C3%B3n-ssh&quot;&gt;2. Conexión SSH.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-3-configurar-como-servidor-web-apache2&quot;&gt;3. Configurar como servidor web (Apache2).&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-4-configuraci%C3%B3n-del-security-group&quot;&gt;4. Configurar Security Group (HTTP, SSH, ICMP).&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-5-crear-archivo-indexhtml&quot;&gt;5. Crear &lt;code&gt;index.html&lt;/code&gt; en DocumentRoot.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-6-verificar-los-tres-tr%C3%A1ficos-http-ssh-icmp&quot;&gt;6. Verificar los tres tráficos (HTTP, SSH, ICMP).&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-7-apagar-y-encender-la-instancia-verificar-icmp&quot;&gt;7. Apagar y encender la instancia → verificar ICMP.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-8-reservar-y-asociar-ip-el%C3%A1stica&quot;&gt;8. Reservar y asociar IP Elástica.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-9-verificar-acceso-con-ip-el%C3%A1stica-y-que-la-ip-p%C3%BAblica-previa-no-funcione&quot;&gt;9. Verificar acceso con IP elástica (y que la IP pública previa no funcione).&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-10-hacer-ping-a-la-ip-el%C3%A1stica&quot;&gt;10. Hacer ping a la IP elástica.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-11-lanzar-nueva-instancia-t3micro-debian-13&quot;&gt;11. Lanzar nueva instancia (t3.micro, Debian 13).&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-12-configurarla-con-tag-instancia-2&quot;&gt;12. Configurarla con TAG &lt;code&gt;INSTANCIA-2&lt;/code&gt;.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-13-crear-archivo-indexhtml-con-la-leyenda-correspondiente&quot;&gt;13. Crear &lt;code&gt;index.html&lt;/code&gt; con la leyenda correspondiente.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-14-re-asociar-la-ip-el%C3%A1stica&quot;&gt;14. Re-asociar la IP Elástica.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-15-verificar-ping-sin-p%C3%A9rdida-de-paquetes&quot;&gt;15. Verificar ping sin pérdida de paquetes.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-16-verificar-acceso-web&quot;&gt;16. Verificar acceso web.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-17-apagar-la-instancia-y-chequear-icmp&quot;&gt;17. Apagar la instancia y chequear ICMP.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-18-encenderla-y-verificar-icmp&quot;&gt;18. Encenderla y verificar ICMP.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-19-cambiar-puerto-de-apache-de-80-%E2%86%92-8080&quot;&gt;19. Cambiar puerto de Apache de 80 → 8080.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-20-verificar-acceso-web-en-el-puerto-8080&quot;&gt;20. Verificar acceso web en el puerto 8080.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-21-liberar-ip-el%C3%A1stica-y-terminar-instancias&quot;&gt;21. Liberar IP Elástica y terminar instancias.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 1: Lanzar instancia EC2&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1) Lanzar una instancia en AWS EC2, de tipo “t3.micro” con AMI “Debian 13”.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Para comenzar con la práctica, se procedió a &lt;strong&gt;crear una nueva instancia EC2&lt;/strong&gt; en la consola de Amazon Web Services (AWS).&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Se asignó el nombre &lt;strong&gt;A01&lt;/strong&gt; a la instancia, lo que permite identificarla fácilmente dentro del entorno.&lt;/li&gt;
&lt;li&gt;Se seleccionó la &lt;strong&gt;Imagen de máquina de Amazon (AMI)&lt;/strong&gt; correspondiente a &lt;strong&gt;Debian 13 (20250814-2204)&lt;/strong&gt;, que provee el sistema operativo base para la máquina virtual.&lt;/li&gt;
&lt;li&gt;Como tipo de instancia, se utilizó &lt;strong&gt;t3.micro&lt;/strong&gt;, que pertenece a la capa gratuita de AWS y es suficiente para realizar pruebas de laboratorio.&lt;/li&gt;
&lt;li&gt;El sistema asignó por defecto un &lt;strong&gt;volumen de almacenamiento de 8 GiB&lt;/strong&gt;, suficiente para esta práctica.&lt;/li&gt;
&lt;li&gt;Se creó un &lt;strong&gt;nuevo grupo de seguridad&lt;/strong&gt; que más adelante será configurado para permitir los accesos requeridos.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Una vez revisada la configuración en el &lt;strong&gt;resumen de la derecha&lt;/strong&gt;, se hizo clic en &lt;strong&gt;“Lanzar instancia”&lt;/strong&gt; para desplegar el recurso en la nube.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2F1.CGAVVxfX.png&amp;#x26;w=1626&amp;#x26;h=912&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-2.nbelKBbo.png&amp;#x26;w=1622&amp;#x26;h=911&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Durante el lanzamiento de la instancia, AWS solicita la creación de un &lt;strong&gt;par de claves (Key Pair)&lt;/strong&gt; para garantizar el acceso seguro vía &lt;strong&gt;SSH&lt;/strong&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Se asignó el nombre &lt;strong&gt;A01-1&lt;/strong&gt; al par de claves.&lt;/li&gt;
&lt;li&gt;Se seleccionó el &lt;strong&gt;tipo de clave RSA&lt;/strong&gt;, ampliamente utilizado para conexiones seguras mediante cifrado asimétrico.&lt;/li&gt;
&lt;li&gt;Como formato de archivo se eligió &lt;strong&gt;.ppk&lt;/strong&gt; utilizado en sistemas Windows.&lt;/li&gt;
&lt;li&gt;AWS generó el archivo privado automáticamente y lo descargó al equipo. Este archivo debe guardarse en un lugar seguro, ya que &lt;strong&gt;será imprescindible para conectarse a la instancia&lt;/strong&gt; más adelante.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-1.7KtJ18I3.png&amp;#x26;w=1622&amp;#x26;h=856&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Para controlar el acceso a la instancia desde la red, se creó un &lt;strong&gt;grupo de seguridad&lt;/strong&gt; denominado &lt;strong&gt;A01-SG1&lt;/strong&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Se seleccionó la opción &lt;strong&gt;Crear grupo de seguridad&lt;/strong&gt;, lo que permite establecer reglas de tráfico personalizadas para esta instancia.&lt;/li&gt;
&lt;li&gt;Se asignó el nombre &lt;strong&gt;A01-SG1&lt;/strong&gt; y se generó automáticamente una descripción por defecto.&lt;/li&gt;
&lt;li&gt;En las &lt;strong&gt;reglas de entrada&lt;/strong&gt;, se dejo por defecto, lo que permite entradas ssh desde cualquier lugar del mundo. Esto sera modificado en una paso siguiente de esta actividad.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-3.BcLrsQ1l.png&amp;#x26;w=1624&amp;#x26;h=910&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Una vez configurados los parámetros principales (nombre, AMI, tipo de instancia, par de claves y grupo de seguridad), se procedió a iniciar el lanzamiento.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-5.CKN2LGlr.png&amp;#x26;w=1682&amp;#x26;h=857&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 2: Conexión SSH&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;2) Realizar la conexión a la instancia vía SSH.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Una vez lanzada la instancia EC2, se procedió a establecer la conexión remota utilizando el protocolo &lt;strong&gt;SSH&lt;/strong&gt;, que permite la administración segura del servidor.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Desde la consola de AWS, se identificó la &lt;strong&gt;dirección IP pública asignada&lt;/strong&gt; a la instancia (en este caso, oculta en las capturas por seguridad).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Se utilizó la herramienta &lt;strong&gt;PuTTY&lt;/strong&gt;, donde se configuraron los siguientes parámetros:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En la pestaña &lt;em&gt;Session&lt;/em&gt;, se ingresó la dirección IP pública en el campo &lt;strong&gt;Host Name (or IP address)&lt;/strong&gt; y el puerto &lt;strong&gt;22&lt;/strong&gt;, correspondiente a SSH.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-4.aQYCqgCb.png&amp;#x26;w=1623&amp;#x26;h=845&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En la sección &lt;em&gt;SSH → Auth&lt;/em&gt;, se cargó el archivo de clave privada previamente generado.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-6.CTl1W1iq.png&amp;#x26;w=1622&amp;#x26;h=835&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;Al abrir la sesión, se utilizó el usuario &lt;strong&gt;admin&lt;/strong&gt;, correspondiente a la AMI Debian 13 seleccionada.&lt;/li&gt;
&lt;li&gt;Tras la autenticación con la clave privada, se obtuvo acceso exitoso a la terminal de la instancia, quedando lista para su administración y configuración como servidor web.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-7.BEzVsTX-.png&amp;#x26;w=1621&amp;#x26;h=771&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 3: Configurar como servidor web (Apache2)&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;3) Configurar la instancia como servidor WEB (TAG: “AXX-INSTANCIA-1”): utilizar la herramienta “apt-get” para instalar “Apache2”.&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;NOTA: Recuerde realizar el upgrade del repositorio&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Una vez establecida la conexión vía SSH, se procedió a configurar la instancia para que funcione como servidor web. Para esto, se utilizó &lt;strong&gt;Apache2&lt;/strong&gt;, un servidor HTTP de código abierto muy utilizado en entornos Linux.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Actualizar repositorios del sistema&lt;/strong&gt;
Se ejecutó el siguiente comando para asegurarse de que la lista de paquetes y sus versiones estén actualizadas:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo apt-get update
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esto permite descargar la información más reciente de los repositorios de Debian antes de instalar nuevos paquetes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Instalar Apache2&lt;/strong&gt;
Posteriormente, se instaló el servidor web con el comando:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo apt-get install apache2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esto descargó e instaló todos los paquetes necesarios para el correcto funcionamiento del servidor HTTP Apache.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Con estos pasos, la instancia quedó preparada para servir contenido web a través del protocolo HTTP (puerto 80).&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-8.BGe8v8ZK.png&amp;#x26;w=1625&amp;#x26;h=757&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-9.BxYBxDBj.png&amp;#x26;w=1622&amp;#x26;h=829&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 4: Configuración del Security Group&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;4) Configurar el grupo de seguridad (Security Group) de la instancia para permitir:&lt;/strong&gt;
a. Tráfico Port TCP 80 (HTTP), disponible desde 0.0.0.0/0.
b. Tráfico Port TCP 22 (SSH), disponible desde la red o dirección IP de su LAN.
c. Tráfico ICMP, disponible desde 0.0.0.0/0.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;NOTA: Se deben realizar las pruebas correspondientes de funcionamiento a los protocolos citados (tanto antes de configurar el grupo de seguridad como posterior a la configuración de cada regla); las pruebas deben formar parte de la documentación a entregar.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Para que la instancia EC2 pueda recibir y responder correctamente distintos tipos de tráfico, se configuraron las &lt;strong&gt;reglas de entrada del grupo de seguridad (Security Group)&lt;/strong&gt; asociado a la misma.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Regla HTTP (puerto 80/TCP):&lt;/strong&gt;
Se permitió el tráfico HTTP desde cualquier dirección (0.0.0.0/0). Esto permite acceder al servidor web Apache desde cualquier navegador en Internet.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Regla SSH (puerto 22/TCP):&lt;/strong&gt;
Se habilitó el acceso SSH, restringido a la IP de la red local. Esto mejora la seguridad al limitar el acceso administrativo a direcciones específicas. Para saber cual es la IP de la red local se utilizo un servicio web encontrado al buscar en internet &quot;Cual es mi IP?&quot;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-13.GsfYiyno.png&amp;#x26;w=1482&amp;#x26;h=685&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;&lt;strong&gt;Regla ICMP (Ping):&lt;/strong&gt;
Se permitió el tráfico ICMP desde cualquier origen (0.0.0.0/0), lo que habilita realizar pruebas de conectividad hacia la instancia mediante el comando &lt;code&gt;ping&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-14.CTpALIux.png&amp;#x26;w=1489&amp;#x26;h=765&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Verificación de conectividad&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Prueba ICMP (Ping):&lt;/strong&gt;
Inicialmente, al ejecutar un ping hacia la IP pública de la instancia, no se obtenían respuestas debido a que aún no estaban configuradas las reglas de seguridad.
Tras habilitar ICMP en el Security Group, se comprobó la correcta respuesta a los paquetes, confirmando que la instancia era accesible desde Internet.
| Antes | Despues |
|-----------|--------|
| &lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-15.DtBSRZqm.png&amp;#x26;w=1019&amp;#x26;h=474&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;      | &lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-16.CAnPHbQ1.png&amp;#x26;w=988&amp;#x26;h=287&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;     |&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Prueba HTTP:&lt;/strong&gt;
Una vez habilitado el tráfico en el puerto 80, se accedió desde un navegador a la IP pública de la instancia, mostrando la &lt;strong&gt;página por defecto de Apache2 en Debian&lt;/strong&gt;, lo que confirma que el servidor web estaba en ejecución y accesible.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-10.EnCaUwNl.png&amp;#x26;w=1621&amp;#x26;h=786&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-17.BjEuGUaH.png&amp;#x26;w=1497&amp;#x26;h=765&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Prueba SSH:&lt;/strong&gt;
Se validó también que la conexión SSH seguía funcionando correctamente, tanto antes como después de ajustar las reglas del grupo de seguridad.
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-20.opcEn3dN.png&amp;#x26;w=1623&amp;#x26;h=813&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-7.BEzVsTX-.png&amp;#x26;w=1621&amp;#x26;h=771&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 5: Crear archivo index.html&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;5) Crear en el “DocumentRoot” de Apache, el archivo index.html, que contengan el nombre de la instancia “AXX-INSTANCIA-1 - AÑO 2025 - PRÁCTICA 1”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Una vez instalado Apache2 y verificado su funcionamiento, se procedió a personalizar la página principal del servidor web agregando la identificación de la instancia.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Acceso al directorio DocumentRoot de Apache&lt;/strong&gt;
El contenido web por defecto se almacena en la ruta:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cd /var/www/html/
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Edición del archivo &lt;code&gt;index.html&lt;/code&gt;&lt;/strong&gt;
Se utilizó el editor de texto &lt;code&gt;nano&lt;/code&gt; con privilegios de superusuario para modificar el archivo principal:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo nano index.html
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Inserción de la leyenda solicitada&lt;/strong&gt;
Dentro del archivo se reemplazó el contenido por el texto requerido:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;A01-INSTANCIA-1 – AÑO 2025 – PRÁCTICA 1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-21.RGgTk71N.png&amp;#x26;w=1740&amp;#x26;h=815&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Guardado y verificación&lt;/strong&gt;
Una vez guardados los cambios, se accedió a la dirección IP pública de la instancia mediante un navegador web.
El servidor respondió mostrando la nueva página personalizada, confirmando que Apache estaba sirviendo correctamente el archivo modificado.
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-22.DUbeSBoM.png&amp;#x26;w=1733&amp;#x26;h=872&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 7: Apagar y encender la instancia → verificar ICMP&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;7) Apagar la instancia. Volver a encenderla, y luego, volver a verificar el tráfico ICMP. (Tenga en cuenta de describir en la monografía de la práctica la situación encontrada).&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En este ejercicio se buscó comprobar cómo afecta el ciclo de apagado/encendido de una instancia EC2 a su conectividad de red.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Prueba inicial de ICMP (Ping):&lt;/strong&gt;
Antes de detener la instancia, se ejecutó un ping hacia la IP pública de la misma. Las solicitudes recibieron respuesta con valores de latencia, confirmando la conectividad de la instancia.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Apagado de la instancia:&lt;/strong&gt;
Desde la consola de AWS, se seleccionó la instancia &lt;strong&gt;A01&lt;/strong&gt; y se eligió la opción &lt;strong&gt;Detener instancia&lt;/strong&gt;.
AWS mostró una advertencia indicando que no se generarían más cargos de uso ni transferencia de datos, aunque los volúmenes asociados y las IP elásticas seguirían facturando mientras la instancia estuviera detenida.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-24.HWprmq-b.png&amp;#x26;w=1503&amp;#x26;h=786&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Encendido de la instancia:&lt;/strong&gt;
Una vez detenida, se volvió a encender la instancia mediante la opción &lt;strong&gt;Iniciar instancia&lt;/strong&gt; en la consola de AWS. El estado cambió a &lt;strong&gt;En ejecución&lt;/strong&gt;, lo que habilitó nuevamente los servicios de red y acceso remoto.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Verificación ICMP tras el encendido:&lt;/strong&gt;
Se repitió la prueba de ping hacia la IP pública asignada. En este caso, se observó que las solicitudes no recibían respuesta, quedando en &lt;em&gt;“Tiempo de espera agotado”&lt;/em&gt;. Esto ocurre porque, al apagar y volver a encender una instancia, su dirección IP pública cambia. Por lo tanto, si se intenta hacer ping a la IP anterior, se producirá un error, ya que ya no existe una máquina asociada a esa dirección.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-23.CK45D2Kq.png&amp;#x26;w=1499&amp;#x26;h=365&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 8: Reservar IP Elástica&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;8) Reservar una IP Elástica y asociarla a la instancia “AXX-INSTANCIA-1”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Con el fin de asegurar que la instancia mantenga siempre la misma dirección pública, incluso después de apagarse y volver a encenderse, se procedió a reservar y asociar una &lt;strong&gt;IP Elástica&lt;/strong&gt; en AWS.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Reserva de IP Elástica:&lt;/strong&gt;
Desde la consola de AWS, en la sección &lt;strong&gt;Direcciones IP elásticas&lt;/strong&gt;, se solicitó una nueva dirección. El sistema asignó la IP &lt;strong&gt;54.157.104.45&lt;/strong&gt; y se le agregó la etiqueta &lt;strong&gt;A01-elastica&lt;/strong&gt; para identificarla fácilmente.
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-25.BGciBLBZ.png&amp;#x26;w=1564&amp;#x26;h=669&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Asociación de la IP a la instancia:&lt;/strong&gt;
A continuación, se seleccionó la opción &lt;strong&gt;Asociar dirección IP elástica&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Se eligió como recurso la instancia &lt;strong&gt;A01-INSTANCIA-1&lt;/strong&gt;, que estaba en estado &lt;em&gt;running&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Se mantuvo la configuración predeterminada.
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-26.CtnkXZ9Z.png&amp;#x26;w=1567&amp;#x26;h=781&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Confirmación de asociación:&lt;/strong&gt;
AWS mostró el mensaje de confirmación indicando que la dirección IP &lt;strong&gt;54.157.104.45&lt;/strong&gt; había sido asociada correctamente a la instancia.
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-27.BP7FWyQN.png&amp;#x26;w=1567&amp;#x26;h=842&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 9: Verificar acceso con IP elástica (y que la IP pública previa no funcione)&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Verificar el acceso vía un navegador WEB, por medio de la IP Elástica y que la misma YA NO ES accesible por la IP pública asignada previa la asociación de la IP Elástica.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Una vez asociada la &lt;strong&gt;IP Elástica&lt;/strong&gt; a la instancia &lt;strong&gt;A01-INSTANCIA-1&lt;/strong&gt;, se procedió a verificar el acceso desde distintos puntos de red.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-29.Ctpo5fzW.png&amp;#x26;w=1570&amp;#x26;h=838&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Prueba con la IP Elástica (54.157.104.45):&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Verificación de acceso vía navegador:&lt;/strong&gt;
Desde un navegador web, se accedió a &lt;code&gt;http://54.157.104.45/&lt;/code&gt;, comprobando que el servidor Apache devolvía la página personalizada de la práctica.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-28.BFlApFLm.png&amp;#x26;w=1552&amp;#x26;h=784&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Prueba con la IP pública previa:&lt;/strong&gt;
La instancia tenía asignada una dirección IP pública temporal (54.234.245.179).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Al intentar acceder a esta IP, &lt;strong&gt;no se obtuvo respuesta ni por ping ni por navegador web&lt;/strong&gt;, confirmando que la asociación de la IP Elástica reemplaza la accesibilidad de la IP pública asignada automáticamente.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 10: Hacer ping a la IP elástica&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;10) Abrir una consola y ejecutar el comando “ping” a la IP Elástica, verificando la NO pérdida de paquetes.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Con la IP Elástica ya asociada a la instancia &lt;strong&gt;A01-INSTANCIA-1&lt;/strong&gt;, se realizó una prueba de conectividad desde una terminal local:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Se realizó un &lt;strong&gt;ping&lt;/strong&gt; a la dirección elástica, obteniendo respuestas estables con tiempos de entre 170 y 190 ms.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-30.DGNuwsjW.png&amp;#x26;w=1559&amp;#x26;h=390&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Esta prueba confirma que la IP Elástica mantiene la conectividad con la instancia, incluso si ésta se reinicia o cambia de IP pública temporal.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 11: Lanzar nueva instancia (t3.micro, Debian 13)&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;11) Lanzar una nueva instancia en AWS EC2, de tipo “t3.micro” con AMI “Debian 13”.&lt;/strong&gt;
Se creó una nueva instancia EC2 de tipo &lt;strong&gt;t3.micro&lt;/strong&gt; utilizando la AMI &lt;strong&gt;Debian 13&lt;/strong&gt;, tal como se indica en la consigna. Los pasos son los mismos que los ya explicados anteriormente, por lo que no se volveran a explicar.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 12: Configurarla con TAG INSTANCIA-2&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;12) Configurar la nueva instancia con TAG “AXX-INSTANCIA-2”.&lt;/strong&gt;
A la nueva instancia se le configuró el TAG con el nombre &lt;strong&gt;A01-INSTANCIA-2&lt;/strong&gt;, lo que permite identificarla fácilmente dentro de la consola de AWS.
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-33.BDyf2bFi.png&amp;#x26;w=1502&amp;#x26;h=803&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 13: Crear archivo index.html con la leyenda correspondiente&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;13) Crear en el “DocumentRoot” el archivo index.html, que contengan la leyenda siguiente: “AXX-INSTANCIA-2 – AÑO 2025 – PRÁCTICA 1”.&lt;/strong&gt;
Dentro del directorio &lt;strong&gt;DocumentRoot&lt;/strong&gt; de Apache (&lt;code&gt;/var/www/html/&lt;/code&gt;), se editó el archivo &lt;code&gt;index.html&lt;/code&gt; y se reemplazó el contenido por la leyenda solicitada:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;A01-INSTANCIA-2 – AÑO 2025 – PRÁCTICA 1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Al acceder desde un navegador a la dirección IP pública de la instancia, se mostró la página personalizada, confirmando la correcta configuración del servidor web.
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-34.CnFwMdg0.png&amp;#x26;w=1566&amp;#x26;h=778&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 14: Re-asociar la IP Elástica a la instancia “AXX-INSTANCIA-2”.&lt;/h2&gt;
&lt;p&gt;En este paso se reasignó la &lt;strong&gt;IP Elástica previamente reservada&lt;/strong&gt; (54.xx.xx.xx) a la nueva instancia &lt;strong&gt;AXX-INSTANCIA-2&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Durante el proceso, AWS advierte que si la IP ya estaba asociada a otra instancia (en este caso &lt;em&gt;AXX-INSTANCIA-1&lt;/em&gt;), será automáticamente desasociada y vinculada a la nueva.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-35.a6HXHVH4.png&amp;#x26;w=1505&amp;#x26;h=811&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Una vez confirmada la acción, la consola mostró que la IP Elástica quedó correctamente asociada a &lt;strong&gt;AXX-INSTANCIA-2&lt;/strong&gt;, garantizando que esta instancia pueda mantener conectividad pública estable independientemente de reinicios.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-36.DH7rmlvb.png&amp;#x26;w=1502&amp;#x26;h=748&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 15: Verificar por consola, la NO pérdida de paquetes.&lt;/h2&gt;
&lt;p&gt;Se ejecutó el comando &lt;code&gt;ping&lt;/code&gt; hacia la &lt;strong&gt;IP Elástica 54.157.104.45&lt;/strong&gt;, comprobando la correcta conectividad con la instancia &lt;strong&gt;AXX-INSTANCIA-2&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;El resultado mostró respuestas constantes con tiempos estables de latencia y &lt;strong&gt;sin pérdida de paquetes&lt;/strong&gt;, lo cual confirma que la IP Elástica se encuentra correctamente asociada y accesible desde el exterior.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-37.UMDmo6eU.png&amp;#x26;w=1460&amp;#x26;h=189&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 16: Verificar el acceso vía un navegador WEB, por medio de la IP Elástica, que responda el “AXX-INSTANCIA-2”.&lt;/h2&gt;
&lt;p&gt;Se accedió desde un navegador a la &lt;strong&gt;IP Elástica 54.157.104.45&lt;/strong&gt;, comprobando que la instancia &lt;strong&gt;AXX-INSTANCIA-2&lt;/strong&gt; responde correctamente al servicio HTTP.&lt;/p&gt;
&lt;p&gt;En la página de bienvenida de Apache se visualiza la leyenda configurada en el archivo &lt;code&gt;index.html&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“A01 – INSTANCIA 2 – AÑO 2025 – PRÁCTICA 1”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-38.DSCLkhiP.png&amp;#x26;w=1504&amp;#x26;h=762&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Ejercicio 17: Apagar la instancia y chequear ICMP&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;17) Apagar la instancia “AXX-INSTANCIA-2”. Verificar el tráfico ICMP.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Se apagó la instancia &lt;strong&gt;AXX-INSTANCIA-2&lt;/strong&gt; desde la consola de AWS.
Mientras la instancia estuvo en ejecución, el comando &lt;code&gt;ping&lt;/code&gt; a la IP Elástica respondió correctamente sin pérdida de paquetes.
Una vez que la instancia fue detenida, el tráfico ICMP dejó de responder, confirmando que al estar apagada la instancia no procesa solicitudes de red.&lt;/p&gt;
&lt;p&gt;| Imagen 1 | Imagen 2 | Imagen 3 |
|-----------|--------| ----------------|
| &lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-39.CsuiRxN_.png&amp;#x26;w=636&amp;#x26;h=189&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;      | &lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-40.31ngoREB.png&amp;#x26;w=547&amp;#x26;h=72&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;     | &lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-41.DMH2QY6B.png&amp;#x26;w=1495&amp;#x26;h=420&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;      |&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 18: Encenderla y verificar ICMP&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;18) Volver a encender la instancia y verificar que el tráfico ICMP retoma la respuesta al encendido de la misma.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Se volvió a encender la instancia &lt;strong&gt;AXX-INSTANCIA-2&lt;/strong&gt; desde la consola de AWS.
Durante el apagado, las solicitudes ICMP (&lt;code&gt;ping&lt;/code&gt;) no obtenían respuesta.
Una vez encendida nuevamente, el tráfico ICMP retomó correctamente, respondiendo los paquetes enviados.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-42.D0b-yYjo.png&amp;#x26;w=1478&amp;#x26;h=345&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 19: Verificar acceso web&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;19) Cambiar el puerto del servidor WEB de la instancia “AXX-INSTANCIA-2” del TCP 80 al TCP 8080.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Se modificó la configuración del servidor web Apache en la instancia &lt;strong&gt;AXX-INSTANCIA-2&lt;/strong&gt;, cambiando el puerto de escucha de &lt;strong&gt;80&lt;/strong&gt; a &lt;strong&gt;8080&lt;/strong&gt;.
Para permitir el acceso, se actualizó el &lt;strong&gt;Grupo de Seguridad&lt;/strong&gt; en AWS agregando la regla de entrada correspondiente al puerto &lt;strong&gt;8080/TCP&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Luego, se verificó el acceso web ingresando a la dirección pública de la instancia junto con el puerto &lt;code&gt;:8080&lt;/code&gt;, confirmando que el servidor Apache responde correctamente en el nuevo puerto.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-43.D5g8XCOJ.png&amp;#x26;w=1495&amp;#x26;h=661&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 20: Verificar el acceso WEB desde una navegador.&lt;/h2&gt;
&lt;p&gt;Una vez configurado el servidor web Apache en la instancia &lt;strong&gt;AXX-INSTANCIA-2&lt;/strong&gt; para escuchar en el puerto &lt;strong&gt;8080&lt;/strong&gt;, se procedió a verificar el acceso desde un navegador.&lt;/p&gt;
&lt;p&gt;Se ingresó a la dirección &lt;strong&gt;http://54.157.104.45:8080&lt;/strong&gt;, confirmando que la página de inicio de Apache se despliega correctamente, con la leyenda personalizada &lt;strong&gt;“AXX-INSTANCIA-2 – AÑO 2025 – PRÁCTICA 1”&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-44.DMfRnOxW.png&amp;#x26;w=1495&amp;#x26;h=762&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 21: Liberar la IP Elástica y “terminar” ambas instancias.&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Liberar la IP Elástica:&lt;/strong&gt;
Desde la consola de AWS, se seleccionó la dirección IP elástica asociada a las instancias. Luego, se utilizó la opción &lt;strong&gt;“Liberar direcciones IP elásticas”&lt;/strong&gt;, lo que permite devolver dicha IP al pool de direcciones públicas de Amazon, dejándola disponible para otros usuarios.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-46.CglbHYj4.png&amp;#x26;w=1565&amp;#x26;h=671&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-47.DYlsCoLY.png&amp;#x26;w=1564&amp;#x26;h=817&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Terminar instancias EC2:&lt;/strong&gt;
Posteriormente, se seleccionaron ambas instancias creadas (&lt;strong&gt;A01&lt;/strong&gt; y &lt;strong&gt;A01-INSTANCIA2&lt;/strong&gt;) y se eligió la opción &lt;strong&gt;“Terminar”&lt;/strong&gt;. Esta acción elimina de forma definitiva las instancias, liberando los recursos asociados.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-45.Bdh9flkm.png&amp;#x26;w=1566&amp;#x26;h=823&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Con estas acciones se concluye el ciclo de vida de las instancias creadas durante la práctica, asegurando que no queden recursos activos ni generen costos adicionales.&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.XDDUjcmD.jpg"/><enclosure url="/_astro/thumbnail.XDDUjcmD.jpg"/></item><item><title>Map Reduce</title><link>https://fabianmartinezrincon.com/blog/map_reduce</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/map_reduce</guid><description>Resumen</description><pubDate>Fri, 29 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;MapReduce&lt;/h1&gt;
&lt;p&gt;Es un framework para distribuir tareas en múltiples nodos&lt;/p&gt;
&lt;p&gt;El espíritu de MapReduce es &quot;escriba una vez y lea muchas&quot;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ventajas&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Paralelización y distribución de tareas automática&lt;/li&gt;
&lt;li&gt;Escalable&lt;/li&gt;
&lt;li&gt;Tolerante a fallos&lt;/li&gt;
&lt;li&gt;Monitoreo y capacidad de seguridad&lt;/li&gt;
&lt;li&gt;Flexibilidad de programación (Java, Python, C#, Ruby, C++)&lt;/li&gt;
&lt;li&gt;Abstracción al programador&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Es, a su vez, un paradigma de programación. Hay que pensar como resolver un problema sin tener acceso a todos los datos&lt;/p&gt;
&lt;p&gt;Ejemplo (cálculo del promedio):&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;acum = 0
for d in datos:
    acum = acum + d
prom = acum / len(datos)
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;¿Cómo calculo el promedio de una lista de números si se que no tengo acceso a TODOS los valores?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;El problema del cálculo del promedio se debe &quot;repensar&quot;. Pedirle a cada nodo que sume y cuente sus datos&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;acum = 0; n = 0
for nodo in cluster:
    acum = acum + nodo.acum     # Esto se ejecuta en paralelo
    n = n + nodo.n
promedio = acum / n
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Se pensó en un proceso genérico que permita resolver cualquier problema&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Paradigma MapReduce&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Toda tarea MapReduce se divide en dos fases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fase map&lt;/strong&gt;: en la que los datos de entrada son procesados, uno a uno,
y transformados en un conjunto intermedio de datos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fase reduce&lt;/strong&gt;: se reúnen los resultados intermedios y se reducen a un conjunto de datos resumidos, que es el resultado final de la tarea.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En el ejemplo del promedio:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Map&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pedirle a cada nodo que sume y cuente sus datos&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reduce&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;acum = 0; n = 0
for nodo in cluster:
    acum = acum + nodo.acum
    n = n + nodo.n
promedio = acum / n
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La unidad de trabajo de MapReduce es un Job&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Un Job se divide en una tarea map y una tarea reduce.&lt;/li&gt;
&lt;li&gt;Los Jobs de MapReduce son controlados por un daemon conocido como JobTracker, el cual reside en el &quot;nodo master&quot;&lt;/li&gt;
&lt;li&gt;Los clientes envían Jobs MapReduce al JobTracker y este distribuye la tarea usando otros nodos del cluster&lt;/li&gt;
&lt;li&gt;Esos nodos se conocen como TaskTracker y son responsables de la ejecución de la tarea asignada y reportar el progreso al JobTracker&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-4.Cvf3e00_.png&amp;#x26;w=1162&amp;#x26;h=600&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Un job MapReduce es un proceso que se divide en cuatro fases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Map → Shuffle → Sort → Reduce&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Map y reduce son las tareas que se deben programar para la aplicación.
Cada TaskTracker ejecuta la tarea encomendada (map o reduce) Shuffle y sort son internas en la ejecución del job.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-5.y52Yi28N.png&amp;#x26;w=1096&amp;#x26;h=530&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Las tareas de map y reduce trabajan con el concepto de
&lt;code&gt;&amp;#x3C;clave, valor&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-3.DiYfz2kW.png&amp;#x26;w=1328&amp;#x26;h=221&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;h2&gt;Entrada de datos&lt;/h2&gt;
&lt;p&gt;MapReduce se &quot;alimenta&quot; de uno o mas archivos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En el caso de archivos de texto plano, cada línea del archivo es un dato a procesar.&lt;/li&gt;
&lt;li&gt;La clave de los archivos de texto plano es el offset de la línea dentro del archivo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El o los archivos de entrada son divididos en &quot;splits&quot; y cada TaskTracker trabaja sobre un &quot;split&quot;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Tarea Map&lt;/h2&gt;
&lt;p&gt;Se ejecutan múltiples instancias de la tarea map sobre diferentes porciones del dataset.&lt;/p&gt;
&lt;p&gt;Se intenta que cada map se ejecute sobre una copia local del dataset para minimizar el tráfico de datos. Una tarea map solo ve una porción del dataset de entrada.&lt;/p&gt;
&lt;p&gt;La tarea map lee los datos en forma de pares &lt;code&gt;&amp;#x3C;k1, v1&gt;&lt;/code&gt; y produce una lista de cero, uno o más pares &lt;code&gt;&amp;#x3C;k2, v2&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;#x3C;k1, v1&gt;&lt;/code&gt; ➔ list(&lt;code&gt;&amp;#x3C;k2, v2&gt;&lt;/code&gt;) donde &lt;code&gt;k2&lt;/code&gt; es un identificador definido para el problema utilizado para agrupar los datos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Una tarea map debería analizar una tupla en forma independiente del resto de las tuplas.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejemplo del Promedio&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Suponemos que los valores llegan todos juntos, en formato string, separados por algún carácter que permite hacer la operación de split.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Paso 1 Map&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Por lo general la clave de entrada (&lt;code&gt;k1&lt;/code&gt;) no se usa, aunque depende del problema. En este ejemplo no lo estamos usando. Para el &lt;code&gt;map&lt;/code&gt;, la clave de salida es un valor arbitrario (Ya veremos porqué) y como valor de salida devolvemos la tupla &lt;code&gt;(acum, n)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 4 Reduce&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Finalizadas las tareas intermedias shuffle y sort se ejecuta la tarea reduce.&lt;/p&gt;
&lt;p&gt;La tarea reduce lee los datos en forma de pares &lt;code&gt;&amp;#x3C;k2, list(v2)&gt;&lt;/code&gt; y produce una lista de cero o más pares &lt;code&gt;&amp;#x3C;k3, v3&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;#x3C;k2, list(v2)&gt;&lt;/code&gt; ➔ &lt;code&gt;list(&amp;#x3C;k3, v3&gt;)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La tarea reduce tiene todos los elementos para poder realizar cualquier operación de &quot;resumen&quot;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;K2&lt;/strong&gt; es nuestro valor arbitrario &lt;code&gt;&quot;1&quot;&lt;/code&gt;, que no lo usamos en este ejemplo. En &lt;code&gt;v2&lt;/code&gt; tenemos TODAS las tuplas &lt;code&gt;(acum, n)&lt;/code&gt; devueltas por cada &lt;code&gt;taskTracker&lt;/code&gt; que ejecutó la tarea &lt;code&gt;map&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SIEMPRE tendremos que recorrer el iterable &lt;code&gt;v2&lt;/code&gt; usando un for&lt;/li&gt;
&lt;li&gt;La salida del job será la tupla formada por una clave arbitraria (no importa en este ejemplo) y el cálculo del promedio&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;def map(k1, v1):
    values = v1.split()
    acum = 0
    for v in values:
        acum = acum + float(v)
    return (1, (acum, len(values)))
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;def reduce(k2, v2):
    acum = 0; n = 0
    for v in v2:
        acum = acum + v[0]
        n = n + v[1]
    return (k2, acum / n)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3&gt;Otro ejemplo&lt;/h3&gt;
&lt;p&gt;Se posee un dataset con resultados de eventos. De cada evento se conoce su resultado (&quot;POSITIVO&quot;, &quot;NEUTRO&quot;, &quot;NEGATIVO&quot;).&lt;/p&gt;
&lt;p&gt;Se desea saber cuantos eventos positivos, neutrales y negativos hay en todo el dataset.&lt;/p&gt;
&lt;p&gt;El dataset es uno o más archivos de texto donde en cada línea está el resultado del evento.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;POSITIVO
POSITIVO
NEGATIVO
NEUTRO
POSITIVO
NEUTRO
NEGATIVO
NEGATIVO
NEUTRO
POSITIVO
NEGATIVO
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Tarea map: nuestra intención es contar la ocurrencia de cada tipo de evento.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;V1&lt;/code&gt; es el tipo de evento &quot;POSITIVO&quot;, &quot;NEUTRO&quot;, &quot;NEGATIVO&quot;&lt;/p&gt;
&lt;p&gt;Aca tenemos un problema ya que no importa la informacion que estemos trayendo, siempre vamos a estar trabajando con un reduce. (No estamos distribuyendo bien la carga)&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;def map(k1, v1):
    return (1, v1)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;¿Qué sucede si usamos una única clave intermedia?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;El valor lo usamos como clave intermedia. En este ejemplo el valor intermedio &lt;code&gt;v2&lt;/code&gt;, no lo usamos, por eso le ponemos un valor arbitrario&lt;/p&gt;
&lt;p&gt;Al hacer esto, tenemos 3 claves intermedias (3 taskTrackers)&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;def map(k1, v1):
    return (v1, 1)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-7.WDH-SF3R.png&amp;#x26;w=1204&amp;#x26;h=503&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Los positivos negativos y neutros estan coloreados. Cuantas veces vamos a ejecutar la tarea map?? ESO NO LO SABEMOS, LO DECIDE EL JOBTRACKER. Pero lo que si podemos hacer, que con esto que tenemos tres claves distintas, es asegurarnos, en el mejor de los casos, se ejecuten tres taskTrackers y cada uno va a hacer la tarea de reduce de cada una de esas tres claves.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-8.DWmoak8D.png&amp;#x26;w=1147&amp;#x26;h=754&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;En la fase reduce podemos lograr la paralización de tareas por claves y que se va a ejecutar la función reduce, tantas veces, como claves intermedias distintas generen los maps. En el mejor de los casos en caso de tener nodos suficientes cada nodo ejecutara un reduce para cada clave, logrando una paralelización completa. En el peor de los casos, tendremos un unico nodo, un unico TaskTracker procesando las tres claves de manera secuencial. (Nosotros no nos tenemos que preocupar en esa parte).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Tanto la fase reduce como la map, se va a paralelizar tanto como se pueda.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Cada TaskTracker que ejecuta la tarea de reduce recibe todas las tuplas del tipo &quot;POSITIVO&quot;, &quot;NEUTRO&quot; o &quot;NEGATIVO&quot;.&lt;/li&gt;
&lt;li&gt;Solo hay que contar cuantas ocurrencias existen.&lt;/li&gt;
&lt;li&gt;Tendremos una salida por cada tipo de evento.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Solo hay que contar ocurrencias&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;def map(k1, v1):
    return (v1, 1)
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;def reduce(k2, v2):
    n = 0
    for v in v2:
        n = n + 1
    return ( k2 , n)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;En este ejemplo se ejecutan tres reducers. Cada uno hace la contabilidad de las tuplas que se generaron para cada una de las tres claves (&quot;POSITIVO&quot;, &quot;NEUTRO&quot;, &quot;NEGATIVO&quot;)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-9.Cm1u3gqV.png&amp;#x26;w=1313&amp;#x26;h=619&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Practica 1&lt;/h2&gt;
&lt;p&gt;Dado el siguiente dataset&lt;/p&gt;
&lt;p&gt;| Split 1 |     | Split 2 |     | Split 3 |     | Split 4 |     |
|---------|-----|---------|-----|---------|-----|---------|-----|
| &lt;strong&gt;Key&lt;/strong&gt; | &lt;strong&gt;Value&lt;/strong&gt; | &lt;strong&gt;Key&lt;/strong&gt; | &lt;strong&gt;Value&lt;/strong&gt; | &lt;strong&gt;Key&lt;/strong&gt; | &lt;strong&gt;Value&lt;/strong&gt; | &lt;strong&gt;Key&lt;/strong&gt; | &lt;strong&gt;Value&lt;/strong&gt; |
| 34      | 21  | 23      | 45  | 3       | 21  | 30      | 91  |
| 21      | 34  | 12      | 12  | 15      | 10  | 31      | 32  |
| 10      | 18  | 36      | 18  | 14      | 18  | 32      | 53  |
| 32      | 45  | 4       | 97  | 3       | 15  | 19      | 35  |&lt;/p&gt;
&lt;p&gt;Responda para cada job:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;¿Cuántas veces (invocaciones) se ejecuta la función map?&lt;/li&gt;
&lt;li&gt;¿Cuántas veces (invocaciones) se ejecuta la función reduce?&lt;/li&gt;
&lt;li&gt;¿Cuántos mappers se ejecutan?&lt;/li&gt;
&lt;li&gt;¿Cuántos reducers se ejecutan?&lt;/li&gt;
&lt;li&gt;¿Qué datos recibe cada función reduce?&lt;/li&gt;
&lt;li&gt;¿Cuál es la salida de cada job?&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;a) Job A&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;¿Cuántas veces se ejecuta la función map?&lt;/code&gt;&lt;/strong&gt; 16 (Una por cada linea)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;¿Cuántas veces se ejecuta la función reduce?&lt;/code&gt;&lt;/strong&gt; 4 (Una por cada split)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;¿Cuántos mappers se ejecutan?&lt;/code&gt;&lt;/strong&gt; Se ejecutan 4 mappers (uno por cada nodo en el mejor de los casos)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;¿Cuántos reducers se ejecutan?&lt;/code&gt;&lt;/strong&gt; Se ejecuta 1 reducer ya que al escribir (1, v1) se agrupan todos los valores en una sola clave (por lo que no permite la concurrencia)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;¿Qué datos recibe cada función reduce?&lt;/code&gt;&lt;/strong&gt; Recibe una lista de values&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;# Genera un solo archivo con todos los valores
# por ejemplo
# (1, &quot;21&quot;)
# (1, &quot;34&quot;)
# (1, &quot;18&quot;)
def map(k1, v1, context):
    context.write(1, v1)
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;# Recibe una lista con todos los valores
# Y cuenta los valores simplemente
# Retorna k2 que es 1 y n que seria la cantidad
# de valores en este caso 16
def reduce(k2, v2, context):
    n = 0
    for v in v2:
        n = n + 1
    context.write(k2, n)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;| Split 1 |     | Split 2 |     | Split 3 |     | Split 4 |     |
|---------|-----|---------|-----|---------|-----|---------|-----|
| &lt;strong&gt;Key&lt;/strong&gt; | &lt;strong&gt;Value&lt;/strong&gt; | &lt;strong&gt;Key&lt;/strong&gt; | &lt;strong&gt;Value&lt;/strong&gt; | &lt;strong&gt;Key&lt;/strong&gt; | &lt;strong&gt;Value&lt;/strong&gt; | &lt;strong&gt;Key&lt;/strong&gt; | &lt;strong&gt;Value&lt;/strong&gt; |
| 34      | 21  | 23      | 45  | 3       | 21  | 30      | 91  |
| 21      | 34  | 12      | 12  | 15      | 10  | 31      | 32  |
| 10      | 18  | 36      | 18  | 14      | 18  | 32      | 53  |
| 32      | 45  | 4       | 97  | 3       | 15  | 19      | 35  |&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;¿Cuál es la salida de cada job?&lt;/code&gt;&lt;/strong&gt; La salida de cada Job es (1, 16)&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;b) Job B&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;¿Cuántas veces se ejecuta la función map?&lt;/code&gt;&lt;/strong&gt; 16 (Una por cada key diferente)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;¿Cuántas veces se ejecuta la función reduce?&lt;/code&gt;&lt;/strong&gt; 4 (Una por cada split)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;¿Cuántos mappers se ejecutan?&lt;/code&gt;&lt;/strong&gt; Se ejecutan 4 mappers (uno por cada nodo en el mejor de los casos)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;¿Cuántos reducers se ejecutan?&lt;/code&gt;&lt;/strong&gt; Se ejecuta 1 reducer ya que al escribir (1, v1) se agrupan todos los valores en una sola clave (por lo que no permite la concurrencia)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;¿Qué datos recibe cada función reduce?&lt;/code&gt;&lt;/strong&gt; Recibe una lista de values&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;# Genera un solo archivo con todos los valores
# por ejemplo
# (1, &quot;21&quot;)
# (1, &quot;34&quot;)
# (1, &quot;18&quot;)
def map(k1, v1, context):
    context.write(1, v1)
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;# Recibe una lista con todos los valores
# Y suma los valores simplemente
def reduce(k2, v2, context):
    n = 0
    for v in v2:
        n = n + v
    context.write(k2, n)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;| Split 1 |     | Split 2 |     | Split 3 |     | Split 4 |     |
|---------|-----|---------|-----|---------|-----|---------|-----|
| &lt;strong&gt;Key&lt;/strong&gt; | &lt;strong&gt;Value&lt;/strong&gt; | &lt;strong&gt;Key&lt;/strong&gt; | &lt;strong&gt;Value&lt;/strong&gt; | &lt;strong&gt;Key&lt;/strong&gt; | &lt;strong&gt;Value&lt;/strong&gt; | &lt;strong&gt;Key&lt;/strong&gt; | &lt;strong&gt;Value&lt;/strong&gt; |
| 34      | 21  | 23      | 45  | 3       | 21  | 30      | 91  |
| 21      | 34  | 12      | 12  | 15      | 10  | 31      | 32  |
| 10      | 18  | 36      | 18  | 14      | 18  | 32      | 53  |
| 32      | 45  | 4       | 97  | 3       | 15  | 19      | 35  |&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;¿Cuál es la salida de cada job?&lt;/code&gt;&lt;/strong&gt; La salida de cada Job es (1, 565)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Split 1&lt;/strong&gt; -&gt; 21 + 34 + 18 + 45 = 118&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Split 2&lt;/strong&gt; -&gt; 45 + 12 + 18 + 97 = 172&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Split 3&lt;/strong&gt; -&gt; 21 + 10 + 18 + 15 = 64&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Split 4&lt;/strong&gt; -&gt; 91 + 32 + 53 + 35 = 211&lt;/li&gt;
&lt;li&gt;Total -&gt; 118 + 172 + 64 + 211 = 565&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;c) Job C&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;¿Cuántas veces se ejecuta la función map?&lt;/code&gt;&lt;/strong&gt; 16 (Una por cada linea)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;¿Cuántas veces se ejecuta la función reduce?&lt;/code&gt;&lt;/strong&gt; 8 (Dos por cada split)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;¿Cuántos mappers se ejecutan?&lt;/code&gt;&lt;/strong&gt; 4 mappers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;¿Cuántos reducers se ejecutan?&lt;/code&gt;&lt;/strong&gt; 2 reducers (Uno para cada clave intermedia)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;¿Qué datos recibe cada función reduce?&lt;/code&gt;&lt;/strong&gt; * Recibe una lista de keys&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;# Si la key valor es mayor a 30 lo guarda con la key y la guarda con 1
# En caso contrario lo guarda la key y le pone el valor 2
def map(k1, v1, context):
    if (v1 &amp;#x3C; 30):
        context.write(1, k1)
    else:
        context.write(2, k1)


&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;# Se ejecuta dos veces, uno con las keys con los valores menores a 30
# Y otra con los mayores a 30
def reduce(k2, v2, context):
    max = -1
    for v in v2:
        if(v &gt; max):
            max = v
    context.write(k2, max)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;| Split 1 |     | Split 2 |     | Split 3 |     | Split 4 |     |
|---------|-----|---------|-----|---------|-----|---------|-----|
| &lt;strong&gt;Key&lt;/strong&gt; | &lt;strong&gt;Value&lt;/strong&gt; | &lt;strong&gt;Key&lt;/strong&gt; | &lt;strong&gt;Value&lt;/strong&gt; | &lt;strong&gt;Key&lt;/strong&gt; | &lt;strong&gt;Value&lt;/strong&gt; | &lt;strong&gt;Key&lt;/strong&gt; | &lt;strong&gt;Value&lt;/strong&gt; |
| 34      | 21  | 23      | 45  | 3       | 21  | 30      | 91  |
| 21      | 34  | 12      | 12  | 15      | 10  | 31      | 32  |
| 10      | 18  | 36      | 18  | 14      | 18  | 32      | 53  |
| 32      | 45  | 4       | 97  | 3       | 15  | 19      | 35  |&lt;/p&gt;
&lt;p&gt;Primero se filtra por los valores menores a 30 y guarda las keys&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;¿Cuál es la salida de cada job?&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(1, [34, 10, 12, 36, 3, 15, 14, 3]) -&gt; De este se queda el mayor 36
(2, [21, 32, 23, 4, 30, 31, 32, 19]) -&gt; De este se queda el mayor 32
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;El resultado es (1, 36) (2, 32)&lt;/p&gt;
&lt;h3&gt;d) Job D&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;¿Cuántas veces se ejecuta la función map?&lt;/code&gt;&lt;/strong&gt; 16 veces&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;¿Cuántas veces se ejecuta la función reduce?&lt;/code&gt;&lt;/strong&gt; Se ejecuta reduce() 14 veces (una por cada clave única).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;¿Cuántos mappers se ejecutan?&lt;/code&gt;&lt;/strong&gt;  4 mappers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;¿Cuántos reducers se ejecutan?&lt;/code&gt;&lt;/strong&gt;  14 reducers (unique keys)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;¿Qué datos recibe cada función reduce?&lt;/code&gt;&lt;/strong&gt;  Cada reducer recibe una lista de Value elementos, todos iguales, generados por el map.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;def map(k1, v1, context):
    for v in range(v1):
        context.write(k1, v1)
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;def reduce(k2, v2, context):
    n = 0
    for v in v2:
        n = n + 1
    context.write(k2, n)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;| Split 1 |     | Split 2 |     | Split 3 |     | Split 4 |     |
|---------|-----|---------|-----|---------|-----|---------|-----|
| &lt;strong&gt;Key&lt;/strong&gt; | &lt;strong&gt;Value&lt;/strong&gt; | &lt;strong&gt;Key&lt;/strong&gt; | &lt;strong&gt;Value&lt;/strong&gt; | &lt;strong&gt;Key&lt;/strong&gt; | &lt;strong&gt;Value&lt;/strong&gt; | &lt;strong&gt;Key&lt;/strong&gt; | &lt;strong&gt;Value&lt;/strong&gt; |
| 34      | 21  | 23      | 45  | 3       | 21  | 30      | 91  |
| 21      | 34  | 12      | 12  | 15      | 10  | 31      | 32  |
| 10      | 18  | 36      | 18  | 14      | 18  | 32      | 53  |
| 32      | 45  | 4       | 97  | 3       | 15  | 19      | 35  |&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;¿Cuál es la salida de cada job?&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(34, 21), (34, 21), ... (21 veces)
(21, 34), (21, 34), ... (34 veces)
...
(19, 35), (19, 35), ... (35 veces)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Las salidas del job son &lt;code&gt;(Key, cantidad)&lt;/code&gt; donde &lt;code&gt;cantidad&lt;/code&gt; es el número de repeticiones, equivalente a &lt;code&gt;Value&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;e) Job E&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;¿Cuántas veces se ejecuta la función map?&lt;/code&gt;&lt;/strong&gt; unas 16 veces&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;¿Cuántas veces se ejecuta la función reduce?&lt;/code&gt;&lt;/strong&gt; unas 16 veces&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;¿Cuántos mappers se ejecutan?&lt;/code&gt;&lt;/strong&gt; 4 mappers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;¿Cuántos reducers se ejecutan?&lt;/code&gt;&lt;/strong&gt; 13 reducers (unique values)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;¿Qué datos recibe cada función reduce?&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;def map(k1, v1, context):
    context.write(v1, k1)
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;def reduce(k2, v2, context):
    n = 0
    for v in v2:
        n = n + 1
    context.write(v, n)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;¿Cuál es la salida de cada job?&lt;/code&gt;&lt;/strong&gt; ey, numero entre 1 y veces que aparece su value&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;3) ¿Cómo haría para obtener el top 20 de las palabras más usadas?&lt;/h3&gt;
&lt;p&gt;Como reduce no tiene acceso al orden de aparición ni a líneas específicas, y una palabra puede aparecer en distintas líneas, no es posible agrupar las ocurrencias por línea. Por eso, las apariciones totales se muestran desordenadas y requieren procesamiento adicional externo (por ejemplo, en Excel) si se desea un orden o agrupación específica.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;5) Indique si utilizando el dataset Libros es posible resolver los siguientes problemas:&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;a. Obtener los títulos de todos los libros&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Si, ya que el offset del titulo es 0 en todos los archivos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;b. Obtener la cantidad de palabras promedio por párrafo&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Si, la función map pasa la cantidad de palabras del párrafo que procesó, y la reduce calcula el promedio sumando las cantidades de palabras pasadas, y la cantidad de párrafos se obtiene a partir de la cantidad de VALORES recibidos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;c. Obtener la cantidad de párrafos promedio por libro&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;No, porque la clave no contiene info del archivo origen?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;d. Obtener la cantidad de caracteres del párrafo más extenso&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Se puede obtener la cantidad de caracteres de cada párrafo (ordenado de menor a mayor ya que el valor es único por dato/linea), el máximo estará al final de alguna salida...&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;e. Cantidad total de párrafos con diálogos (se entiende por párrafo con diálogo aquel que empieza con un  guión)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Si, ya que siguen un mismo &quot;prefijo&quot; y se pueden contabilizar todos bajo una única clave, de modo de obtener un solo resultado&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;f. El diálogo más largo (se entiende por diálogo a una secuencia de párrafos con diálogo que aparecen de  manera consecutiva)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;No, porque no se conoce información del dato anterior.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;g. El top 20 de las palabras más usadas por cada libro&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;No, desconozco el archivo origen&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;6) Ejercicio&lt;/h3&gt;
&lt;p&gt;Una empresa proveedora de internet realizó una encuesta para conocer el grado de satisfacción de sus clientes, en un formulario web los clientes debían completar un campo con los textos &quot;&lt;strong&gt;Muy satisfecho&lt;/strong&gt;&quot;, &quot;&lt;strong&gt;Algo satisfecho&lt;/strong&gt;&quot;, &quot;&lt;strong&gt;Poco satisfecho&lt;/strong&gt;&quot;, “&lt;strong&gt;Disconforme&lt;/strong&gt;” o &quot;&lt;strong&gt;Muy disconforme&lt;/strong&gt;&quot;. Utilice el dataset Encuesta para saber cuántos clientes están en cada una de las cinco categorías.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Respuesta&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La función &lt;code&gt;map&lt;/code&gt; enviará cada respuesta como clave, asignándole el valor 1. De esta forma, todas las respuestas iguales se agruparán bajo una misma clave. Luego, la función &lt;code&gt;reduce&lt;/code&gt; sumará la cantidad de apariciones de cada clave para obtener el total por categoría.&lt;/p&gt;
&lt;p&gt;Sin embargo, observamos que &lt;strong&gt;el formato no siempre se respeta&lt;/strong&gt;: existen muchas variantes con errores tipográficos como &lt;code&gt;&quot;muy satisfecho&quot;&lt;/code&gt;, &lt;code&gt;&quot;muys atisfecho&quot;&lt;/code&gt; o &lt;code&gt;&quot;disconfrome&quot;&lt;/code&gt;, que dificultan el conteo correcto.&lt;/p&gt;
&lt;p&gt;Por ello, para obtener resultados confiables, es necesario aplicar una &lt;strong&gt;etapa de normalización previa o durante el &lt;code&gt;map&lt;/code&gt;&lt;/strong&gt;, que agrupe variantes similares en alguna de las cinco categorías válidas:
&lt;code&gt;&quot;Muy satisfecho&quot;&lt;/code&gt;, &lt;code&gt;&quot;Algo satisfecho&quot;&lt;/code&gt;, &lt;code&gt;&quot;Poco satisfecho&quot;&lt;/code&gt;, &lt;code&gt;&quot;Disconforme&quot;&lt;/code&gt; y &lt;code&gt;&quot;Muy disconforme&quot;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Esto puede lograrse usando comparaciones por similitud (por ejemplo, con &lt;code&gt;difflib.get_close_matches&lt;/code&gt; en  Python), o validaciones exactas contra una lista predefinida de opciones válidas. Una vez agrupadas correctamente, el &lt;code&gt;reduce&lt;/code&gt; podrá contabilizar cuántos clientes están en cada categoría con mayor precisión.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;7) Ejercicio&lt;/h3&gt;
&lt;p&gt;El dataset Inversionistas posee los nombres, dni, fecha de nacimiento (día, mes y año como campos separados) e importe invertido por diferentes personas en la apertura de un nuevo negocio en la ciudad. Se desea saber:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; El nombre del inversionista más joven&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; El total del importe invertido por todos los inversionistas&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; El promedio de edad&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Implemente una solución en MapReduce. ¿Se puede resolver los tres problemas en un único job?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Respuesta&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;No, no se pueden resolver los tres puntos con un solo Job, ya que:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a) requiere obtener el máximo de una fecha&lt;/li&gt;
&lt;li&gt;b) requiere la suma de importe&lt;/li&gt;
&lt;li&gt;c) requiere el promedio de edades, lo cual implica contar e ingresar las edades explícitamente&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cada una tiene requerimientos distintos y estructuras de datos diferentes.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 8)&lt;/h3&gt;
&lt;p&gt;Si contáramos con un cluster donde podemos configurar 100 nodos para la tarea de
reduce ¿De qué manera se podrían usar esos 100 nodos en el ejemplo de los eventos
POSITIVO, NEGATIVO y NEUTRO visto en la teoría?&lt;/p&gt;
&lt;p&gt;Producir en los mappers unas tuplas con clave &quot;POSITIVO&quot; + random(33)
Esto permite forzar la paralelización&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.C_m-zTSv.jpg"/><enclosure url="/_astro/thumbnail.C_m-zTSv.jpg"/></item><item><title>Parcial Inge 3</title><link>https://fabianmartinezrincon.com/blog/parcial-inge3</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/parcial-inge3</guid><description>Repasando para el parcial</description><pubDate>Sat, 12 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Resumen Administración de Proyectos&lt;/h2&gt;
&lt;p&gt;Un proyecto es una secuencia de actividades únicas, complejas y conectadas que tienen un objetivo o propósito específico&lt;/p&gt;
&lt;p&gt;Un proyecto tiene un alcance limitado, siempre resulta en un producto u &quot;entregable&quot;, y su éxito se mide por el cumplimiento del presupuesto, el tiempo de entrega y las especificaciones del producto.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Proyecto - Líder de Proyecto&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Es un jugador de equipo que motiva al personal usando sus conocimientos.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Desarrollar el plan del proyecto&lt;/strong&gt;: Esto implica definir cómo se ejecutará el proyecto, estableciendo las actividades, los recursos necesarios y los plazos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identificar los requerimientos y el alcance del proyecto&lt;/strong&gt;: Es crucial definir claramente qué se va a hacer y qué no se va a hacer para evitar desviaciones y asegurar un enfoque claro.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Comunicar y reportar a los interesados&lt;/strong&gt;: El líder de proyecto debe mantener informados a todas las partes relevantes sobre el avance, los problemas y las decisiones del proyecto.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Administrar recursos humanos y materiales&lt;/strong&gt;: Esto incluye la asignación, gestión y motivación del equipo del proyecto, así como la gestión de los recursos físicos necesarios.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Controlar tiempos&lt;/strong&gt;: El líder de proyecto debe supervisar el cronograma del proyecto para asegurar que las actividades se completen según lo planeado y tomar acciones correctivas si es necesario.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identificar y controlar riesgos&lt;/strong&gt;: Esto implica anticipar posibles problemas y desarrollar estrategias para mitigarlos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Administrar costos y presupuesto&lt;/strong&gt;: El líder de proyecto debe gestionar el presupuesto del proyecto, asegurando que los costos se mantengan dentro de los límites establecidos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Asegurar la calidad&lt;/strong&gt;: Esto implica establecer estándares de calidad y realizar revisiones para garantizar que el producto final cumpla con las expectativas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evaluar el desempeño del proyecto&lt;/strong&gt;: El líder de proyecto debe medir el progreso y el rendimiento del proyecto en relación con los objetivos establecidos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Parámetros de un Proyecto&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Los parámetros de un proyecto son los elementos que definen su alcance y éxito. Los principales son&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Alcance&lt;/strong&gt;: Enunciado que define los límites del proyecto. Establece qué se va a hacer y, de manera implícita, qué no se va a hacer. Es fundamental que sea definido correctamente. Puede cambiar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Calidad&lt;/strong&gt;: En el desarrollo de un proyecto, existen dos tipos de calidad a considerar: la calidad del producto final y la calidad del proceso utilizado para crearlo. Asegurar la calidad es una de las tareas del responsable del proyecto.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Costo&lt;/strong&gt;: El costo se refiere al presupuesto disponible para completar el proyecto.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tiempo&lt;/strong&gt;: El tiempo es la ventana temporal dentro de la cual el proyecto debe ser terminado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Recursos&lt;/strong&gt;: Los recursos son los activos necesarios para la realización del proyecto, tales como personas, equipos, facilidades físicas o artefactos. Tienen una disponibilidad limitada y su uso debe ser planificado; también pueden ser contratados a terceros. Algunos recursos son fijos y otros variables a largo plazo. Son centrales para la planificación de las actividades del proyecto y para su finalización ordenada, siendo las personas el recurso más importante en proyectos de desarrollo de sistemas.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La idea principal detrás del &quot;Triángulo de Alcance&quot; es que estos tres aspectos (alcance/calidad, tiempo/costo, y recursos) están en constante interacción y deben mantenerse en equilibrio. Cualquier modificación en uno de estos vértices del triángulo inevitablemente tendrá un impacto en los otros dos.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage.L9eqotQD.png&amp;#x26;w=294&amp;#x26;h=248&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Se pueden clasificar en:&quot;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Duración&lt;/strong&gt;: Tiempo estimado que tomará completar el proyecto, desde la planificación hasta la entrega final. A mayor duración, mayor incertidumbre.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Riesgo&lt;/strong&gt;: Probabilidad de fracaso del proyecto o de que no cumpla con sus objetivos&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Complejidad&lt;/strong&gt;: Es la medida de la dificultad técnica y organizativa del proyecto. Factores clave serían: Tamaño del sistema, Número de módulos, Integraciones con otros sistemas, Lógica de negocio, etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Valor Comercial&lt;/strong&gt;: Representa el impacto económico o estratégico que el proyecto tiene para la organización.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Costo&lt;/strong&gt;: Es la inversión económica estimada necesaria para completar el proyecto.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Resultado en este cuadro:&lt;/p&gt;
&lt;p&gt;| &lt;strong&gt;TIPO&lt;/strong&gt; | &lt;strong&gt;DURACIÓN&lt;/strong&gt;  | &lt;strong&gt;RIESGO&lt;/strong&gt;  | &lt;strong&gt;COMPLEJIDAD&lt;/strong&gt; | &lt;strong&gt;TECNOLOGÍA&lt;/strong&gt;     | &lt;strong&gt;PROBLEMAS&lt;/strong&gt;         |
|----------|---------------|-------------|------------------|---------------------|------------------------|
| A        | &gt; 18 Meses    | Alto        | Alta             | De avanzada         | Seguros                |
| B        | 9–18 Meses    | Medio       | Media            | Actual              | Alta probabilidad      |
| C        | 3–9 Meses     | Bajo        | Baja             | Mejor del tipo      | Algunos                |
| D        | &amp;#x3C; 3 Meses     | Muy Bajo    | Muy Baja         | Práctica            | Ninguno                |&lt;/p&gt;
&lt;p&gt;Tener en cuenta que para la práctica no clasificamos por A, B, C o D. Vamos viendo una a una cada categoría y explicamos que valor tendría el proyecto para la misma.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Causas de Fracaso de un Proyecto&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;No prestar la suficiente atención a…&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Caso de negocio&lt;/strong&gt;: Si no se comprende claramente por qué se está llevando a cabo el proyecto, o si los beneficios esperados no se definen o validan adecuadamente, el proyecto puede fracasar por no entregar valor a la organización&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Calidad&lt;/strong&gt;: Ignorar o no priorizar la calidad del producto o del proceso puede llevar a entregables defectuosos, insatisfacción del cliente y, en última instancia, al fracaso del proyecto&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Definición y medida de los entregables&lt;/strong&gt;: Si no se especifica con claridad qué se debe entregar al final del proyecto y cómo se medirá su éxito, puede haber confusión, expectativas no cumplidas y la percepción de que el proyecto no tuvo éxito.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Inadecuada…&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Definición de responsabilidades&lt;/strong&gt;: Si los roles y responsabilidades de los miembros del equipo y otros interesados no están claramente definidos, puede haber duplicación de esfuerzos, falta de rendición de cuentas y conflictos que lleven al fracaso.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Planificación y coordinación de recursos&lt;/strong&gt;: Una planificación deficiente de los recursos (humanos, materiales, financieros, etc.) y una mala coordinación pueden resultar en escasez, cuellos de botella y retrasos que afecten el éxito del proyecto.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Pobre estimación de…&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Duración&lt;/strong&gt;: Subestimar el tiempo necesario para completar las actividades del proyecto puede llevar a cronogramas irreales, presión excesiva sobre el equipo y, finalmente, al incumplimiento de los plazos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Costos&lt;/strong&gt;: Una estimación inexacta del presupuesto necesario para el proyecto puede resultar en la falta de fondos en etapas críticas, la necesidad de reducir el alcance o la calidad, o la cancelación del proyecto.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Falta de…&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Comunicación con los interesados&lt;/strong&gt;: Una comunicación deficiente con los stakeholders del proyecto (clientes, patrocinadores, equipo, etc.) puede generar malentendidos, expectativas no gestionadas, falta de apoyo y, en última instancia, el fracaso del proyecto.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compromiso de los interesados&lt;/strong&gt;: Si los interesados clave no están involucrados y comprometidos con el proyecto, pueden surgir obstáculos, falta de apoyo y resistencia al cambio que dificulten el éxito.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Control de calidad&lt;/strong&gt;: No implementar procesos de control de calidad adecuados puede llevar a la aceptación de entregables defectuosos, lo que requerirá retrabajo y puede afectar el cronograma y el presupuesto, o resultar en un producto final deficiente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Control de avance&lt;/strong&gt;: No realizar un seguimiento regular del progreso del proyecto y no tomar acciones correctivas ante las desviaciones puede hacer que los problemas se acumulen y lleven al fracaso.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Ciclo de Vida de un Proyecto&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;El ciclo de vida de un proyecto es un proceso que va desde la concepción y planificación,
pasando por la ejecución y el control, hasta su cierre formal.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Definir el proyecto/Iniciar:&lt;/strong&gt; Establecer claramente los objetivos del proyecto, su alcance y los criterios de éxito.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Desarrollar un plan detallado/Planificar:&lt;/strong&gt; Se elabora una hoja de ruta exhaustiva para la ejecución del proyecto&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ejecución del proyecto:&lt;/strong&gt; Se lleva a cabo el trabajo real del proyecto según el plan establecido.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monitorear/Controlar:&lt;/strong&gt;  Durante la ejecución, es esencial realizar un seguimiento del progreso del proyecto en relación con el plan&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Terminación/Cierre:&lt;/strong&gt; Esta etapa marca el final formal del proyecto.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-1.DE6Hmr8-.png&amp;#x26;w=439&amp;#x26;h=393&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Administración de Proyectos&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La administración de proyectos es la planificación, la delegación, el seguimiento y el control de todos los aspectos del proyecto y la motivación de los participantes para satisfacer los requisitos del proyecto&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-2.BLyjNNEh.png&amp;#x26;w=758&amp;#x26;h=70&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Optimización de Recursos&lt;/li&gt;
&lt;li&gt;Cumplimiento de Plazos y Presupuestos&lt;/li&gt;
&lt;li&gt;Mejora en la Calidad&lt;/li&gt;
&lt;li&gt;Gestión Efectiva de Riesgos&lt;/li&gt;
&lt;li&gt;Satisfacción de los Interesados&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Alto nivel de innovación&lt;/li&gt;
&lt;li&gt;Complejidad&lt;/li&gt;
&lt;li&gt;Requerimientos ambiguos&lt;/li&gt;
&lt;li&gt;Falta de competencias necesarias&lt;/li&gt;
&lt;li&gt;Herramientas y técnicas inmaduras&lt;/li&gt;
&lt;li&gt;Cumplir con regulaciones de gobierno&lt;/li&gt;
&lt;li&gt;Cumplir con plazos&lt;/li&gt;
&lt;li&gt;Tratar con proveedores&lt;/li&gt;
&lt;li&gt;Reportar a altas autoridades&lt;/li&gt;
&lt;li&gt;Retener personal calificado&lt;/li&gt;
&lt;li&gt;Administrar personal con diferentes niveles de productividad&lt;/li&gt;
&lt;li&gt;Administrar equipos distribuidos en diferentes ubicaciones&lt;/li&gt;
&lt;li&gt;Administrar entornos multi-culturales y multi-lingua&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Principios de una buena administración&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los proyectos siempre necesitan ser gestionados para tener éxito.&lt;/li&gt;
&lt;li&gt;El proyecto es un proceso finito con un comienzo y un final definidos.&lt;/li&gt;
&lt;li&gt;Se requiere un compromiso sincero de todos los interesados.&lt;/li&gt;
&lt;li&gt;Normalmente se requiere entrenamiento.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Programas&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Un programa es un grupo de proyectos relacionados que se gestionan de manera coordinada
para obtener beneficios. Se ocupa de los resultados y proporciona un paraguas bajo el cual estos proyectos pueden ser coordinados.&lt;/p&gt;
&lt;p&gt;La administración de programas busca integrar los proyectos de modo que se produzca un
resultado mayor que la suma de sus partes. Es complementaria a la Administración de
Proyectos.&lt;/p&gt;
&lt;p&gt;| &lt;strong&gt;Característica&lt;/strong&gt;   | &lt;strong&gt;Programa&lt;/strong&gt;                                      | &lt;strong&gt;Proyecto&lt;/strong&gt;                                |
| -------------------- | ------------------------------------------------- | ------------------------------------------- |
| &lt;em&gt;Alcance&lt;/em&gt;            | Amplio y flexible.                                | Limitado y concreto.                        |
| &lt;em&gt;Cambio&lt;/em&gt;             | Se espera y acepta.                               | Se minimiza.                                |
| &lt;em&gt;Medición del Éxito&lt;/em&gt; | ROI y beneficios organizacionales.                | Presupuesto, tiempo y especificaciones.     |
| &lt;strong&gt;Liderazgo&lt;/strong&gt;        | Enfocado en relaciones y visión estratégica.      | Enfocado en tareas y cumplimiento de metas. |
| &lt;strong&gt;Planificación&lt;/strong&gt;    | General y orientativa.                            | Detallada y operativa.                      |
| &lt;strong&gt;Gerentes&lt;/strong&gt;         | Coordinan múltiples proyectos para generar valor. | Ejecutan productos bajo restricciones.      |&lt;/p&gt;
&lt;p&gt;En este contexto, la &lt;strong&gt;administración de proyectos&lt;/strong&gt; se enfoca en la gestión de cada proyecto individual dentro del programa, mientras que la &lt;strong&gt;administración de programas&lt;/strong&gt; se encarga de supervisar y coordinar estos proyectos relacionados para alcanzar objetivos estratégicos más amplios.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-3.ehEoL5qu.png&amp;#x26;w=486&amp;#x26;h=318&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Work Breakdown Structure (WBS)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;WBS es una descripción jerárquica (top-down) del trabajo que se debe realizar para completar el proyecto. Es similar a una descomposición funcional.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dividimos el &lt;strong&gt;trabajo&lt;/strong&gt; en &lt;strong&gt;actividades&lt;/strong&gt; y las &lt;strong&gt;actividades&lt;/strong&gt; en tareas que son lo más bajo.&lt;/li&gt;
&lt;li&gt;Tiene &lt;strong&gt;forma de árbol&lt;/strong&gt;, la raíz es el proyecto o meta a cumplir, los diversos nodos intermedios son las actividades y las hojas las tareas.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tenemos que buscar que ese árbol esté balanceado o no muy desproporcionado&lt;/p&gt;
&lt;p&gt;El Líder de Proyecto se encarga de la confección del WBS. Las formas de construcción son:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Top-down (de equipo completo o sub-equipos).&lt;/li&gt;
&lt;li&gt;Bottom-up&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Top-down de equipo completo:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Todos los miembros participan en la descomposición.&lt;/li&gt;
&lt;li&gt;Se comienza desde la meta y se particiona hasta que los participantes estén satisfechos en la definición del trabajo.&lt;/li&gt;
&lt;li&gt;Luego de la definición se debe secuenciar y determinar qué actividades se pueden hacer concurrentes.&lt;/li&gt;
&lt;li&gt;Ventaja: Todos los miembros tienen la oportunidad de prestar atención al WBS y discutirlo en su definición.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Top-down de sub-equipos:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Todo el equipo realiza el primer nivel y luego se crean tantos sub-equipos como actividades haya en el nivel uno.&lt;/li&gt;
&lt;li&gt;Un sub-equipo puede necesitar ayuda externa.&lt;/li&gt;
&lt;li&gt;Demanda menos tiempo que el enfoque anterior.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Bottom-up:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Parecido al Brainstorming.&lt;/li&gt;
&lt;li&gt;Actúa como el Top-down de sub-equipos en la división del primer nivel y la asignación de grupos por actividades. Cada sub-grupo realiza un &quot;Brainstorming&quot; para sub-dividir esa actividad de primer nivel&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Diseñar y planificar el trabajo&lt;/strong&gt;: Permite a los integrantes del equipo visualizar cómo puede
definirse y administrarse el proyecto.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diseñar la arquitectura&lt;/strong&gt;: Gráfico del trabajo del proyecto donde se muestra cómo se
relacionan los items a realizar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Planificar&lt;/strong&gt;: Tenemos que estimar esfuerzo, tiempos y recursos para el último nivel.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Informar el estado del proyecto&lt;/strong&gt;: Se usa como estructura para mostrar el grado de avance&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Estado Medible&lt;/strong&gt;: En cualquier momento tengo que poder saber el estado de desarrollo de esa tarea.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Acotada&lt;/strong&gt;: Tiene que poseer una duración acotada.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Producir un entregable&lt;/strong&gt;: El entregable es el output de la Tarea.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tiempo y costo estimable&lt;/strong&gt;: Si no se pueden estimar ni el costo ni el tiempo, entonces no es una Tarea (no es atómico).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Duración aceptable&lt;/strong&gt;: La duración de una tarea no debe exceder los 15 días (10 laborables), aunque puede haber excepciones.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Independiente&lt;/strong&gt;: Al iniciar la actividad no se tiene que necesitar de ningún input adicional para arrancar.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Duración y Esfuerzo de Trabajo&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La duración de una actividad se define como el tiempo transcurrido en días laborables para finalizar el proyecto, sin considerar feriados, fines de semana, días no laborables.&lt;/p&gt;
&lt;p&gt;El esfuerzo de trabajo es la labor requerida para completar una actividad. Esta labor se puede realizar en horas consecutivas o no&lt;/p&gt;
&lt;p&gt;| &lt;strong&gt;Concepto&lt;/strong&gt;            | &lt;strong&gt;Resumen&lt;/strong&gt;                                                                                     |
| ----------------------- | ----------------------------------------------------------------------------------------------- |
| &lt;strong&gt;Duración&lt;/strong&gt;            | Tiempo total en días laborables desde el inicio al fin, incluyendo inactividad o solapamientos. |
| &lt;strong&gt;Esfuerzo de Trabajo&lt;/strong&gt; | Cantidad de trabajo (ej. horas-persona) necesaria, sin importar cuánto tiempo calendario tome.  |&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Variación en los perfiles&lt;/strong&gt;: Las personas pueden tener distintos perfiles para completar la actividad, algunos más adecuados que otros. Una estrategia es estimar la duración basándonos en los perfiles de las personas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Eventos inesperados&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Eficiencia del tiempo de trabajo&lt;/strong&gt;: Trabajando de manera focalizada podemos lograr una mayor eficiencia, tenemos que evitar interrupciones y proveer un ambiente que facilite la concentración.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Errores e interpretaciones erróneas&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Similitud con otras actividades&lt;/strong&gt;: Estimar el esfuerzo en base a actividades similares de otro proyectos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Datos históricos&lt;/strong&gt;: Estimar en base a las estimaciones de actividades similares de otros
proyectos en base a datos fehacientes y registrados.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Juicio experto&lt;/strong&gt;: Las estimaciones las realizan consultores externos o expertos en la metodología o tecnología. El Juicio Experto no tiene que venir del Vendedor (esto no es objetivo).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Técnica Delphi&lt;/strong&gt;: Técnica de grupo que extrae y resume el conocimiento del grupo para arribar una estimación. Cada miembro del grupo hará estimaciones individuales.
&lt;ul&gt;
&lt;li&gt;Se realizan 3 pasadas para llegar a la estimación mediana (el promedio). En cada pasada se toman los extremos, estos extremos debaten y luego se hace la siguiente pasada con nuevos conocimientos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Técnica de 3 puntos&lt;/strong&gt;: Se necesitan 3 estimaciones, la optimista, la pesimista y la media.
&lt;ul&gt;
&lt;li&gt;La técnica de la estimación es un promedio pesado &lt;strong&gt;Estimacion&lt;/strong&gt; = (&lt;strong&gt;Optimista&lt;/strong&gt; + 4*&lt;strong&gt;Media&lt;/strong&gt; + &lt;strong&gt;Pesimista&lt;/strong&gt;) / 6&lt;/li&gt;
&lt;li&gt;La optimista es la más corta (caso feliz).&lt;/li&gt;
&lt;li&gt;La pesimista es la más larga (caso triste, todo falla)&lt;/li&gt;
&lt;li&gt;La media es la normal o usual de la actividad.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Técnica Delphi de banda ancha&lt;/strong&gt;: Combinación de las 2 anteriores. Se basa en la Delphi pero a cada integrante se le pide que haga las 3 estimaciones de los 3 puntos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Estimación de Costos&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Las Estimaciones de Costos son predicciones de cuanto tiempo, esfuerzo y perfiles de RRHH (recursos humanos) son requeridos para construir un sistema de software&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dominio de aplicación.&lt;/li&gt;
&lt;li&gt;Hardware.&lt;/li&gt;
&lt;li&gt;Herramientas.&lt;/li&gt;
&lt;li&gt;Técnicas.&lt;/li&gt;
&lt;li&gt;Personal&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Opinión Experta&lt;/strong&gt;*: Tomamos ventaja de la experiencia de un personal de desarrollo senior.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Analogía&lt;/strong&gt;: Comparamos el proyecto con presupuestos de proyectos pasados.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Descomposición&lt;/strong&gt;: Focalizamos el análisis en el producto o en las tareas requeridas para construirlo, descomponemos el productos en componentes, actividades y tareas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Modelos&lt;/strong&gt;: Son técnicas que identifican contribuyentes claves al esfuerzo, generando fórmulas matemáticas que relacionan estos ítems al esfuerzo. Hay 2 enfoques:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bottom-up&lt;/strong&gt;: Primero estimamos las partes de menor nivel.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Top-down&lt;/strong&gt;: Estimamos el producto entero y luego los componentes se calculan como porciones relativas del todo.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;En planificación&lt;/strong&gt;: Se necesita saber cuantos recursos va a insumir.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;En control&lt;/strong&gt;: Se necesita saber cuanto se hizo y cuanto falta&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;COCOMO original - Constructive Cost Model&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Es una colección de tres modelos de estimación de esfuerzo, duración y costo para proyectos, que difieren en la cantidad de información que se tiene sobre el proyecto y el nivel de detalle en la estimación del esfuerzo y el tiempo de desarrollo&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Modelo Básico&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Es aplicable cuando se conoce muy poco del proyecto.&lt;/li&gt;
&lt;li&gt;Se utiliza en las etapas iniciales, donde la información disponible es limitada.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Modelo Intermedio&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Es aplicable luego de la especificación de requerimientos.&lt;/li&gt;
&lt;li&gt;Se utiliza cuando se tiene un poco más de conocimiento sobre el proyecto, como el lenguaje y las herramientas a utilizar.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Modelo Avanzado (o Detallado)&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;Es aplicable cuando se termina el diseño.&lt;/p&gt;
&lt;p&gt;El &lt;strong&gt;modelo Básico&lt;/strong&gt; ofrece una estimación rápida y general al inicio del proyecto, el &lt;strong&gt;modelo Intermedio&lt;/strong&gt; refina la estimación al considerar los conductores de costos que influyen en el esfuerzo, y el &lt;strong&gt;modelo Avanzado&lt;/strong&gt; proporciona una estimación aún más precisa al aplicar el modelo intermedio a los componentes individuales del sistema y considerar las diferentes fases del desarrollo.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Orgánico:&lt;/strong&gt; Procesa datos y usa bases de datos. Focalizado en transacciones y recuperación de datos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Semi-embebido:&lt;/strong&gt; Intermedio entre orgánico y embebido. Mayor procesamiento de transacciones.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Embebido:&lt;/strong&gt; Software de tiempo real, parte integral de un sistema mayor basado en hardware.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En el modelo COCOMO original, el esfuerzo requerido para desarrollar software se estima en base a tres factores principales:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Constantes del modelo&lt;/strong&gt;: Dependientes del tipo de sistema.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tamaño del software&lt;/strong&gt;: Medido en miles de líneas de código entregadas (KSDI).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Factor de ajuste&lt;/strong&gt;: Modifica el esfuerzo según diferentes características del proyecto.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Tipos de modelos en COCOMO:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En el &lt;strong&gt;modelo básico&lt;/strong&gt;, el factor de ajuste es &lt;strong&gt;1&lt;/strong&gt; (no se modifica).&lt;/li&gt;
&lt;li&gt;En los modelos &lt;strong&gt;intermedio y avanzado&lt;/strong&gt;, este factor se calcula considerando distintos &lt;strong&gt;atributos del proyecto&lt;/strong&gt;, agrupados en 4 categorías:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Categorías de atributos que afectan el esfuerzo:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Del producto&lt;/strong&gt;: Confiabilidad, complejidad, tamaño de base de datos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Del hardware&lt;/strong&gt;: Restricciones técnicas, rendimiento, almacenamiento.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Del personal&lt;/strong&gt;: Experiencia, habilidades, conocimiento del lenguaje y herramientas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Del proyecto&lt;/strong&gt;: Calidad del proceso, herramientas utilizadas, planificación.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Gestión de Beneficios&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Enfoque estratégico que tiene como principal objetivo asegurar que los beneficios sean identificados, definidos claramente, vinculados a los resultados estratégicos, y que cumplan con los criterios de ser específicos, medibles, realizables, realistas y limitados en el tiempo.&lt;/p&gt;
&lt;p&gt;Su enfoque consiste en un proceso que incluye la identificación, cuantificación, realización revisión de dichos beneficios. Este enfoque se desarrolla a través de las siguientes etapas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Desarrollo de una Estrategia de Gestión de Beneficios&lt;/strong&gt;: Define cómo el programa gestionará los beneficios, incluyendo cómo serán cuantificados y medidos, y los sistemas y procesos para hacer seguimiento del progreso y la realización.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identificación y Cuantificación de Beneficios (Perfiles de Beneficios):&lt;/strong&gt; Se identifican los beneficios en áreas como calidad de servicio, sociedad, economía, ajuste estratégico y
administración interna.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Planificación para la Realización de Beneficios (Plan de Realización de Beneficios):&lt;/strong&gt; Se crea un cronograma completo de todos los perfiles de beneficios, definiendo cuándo se realizará cada uno e incluyendo hitos para la revisión y detalles de actividades de traspaso necesarias después del cierre del programa.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Realización de Beneficios&lt;/strong&gt;: Se entregan los beneficios incrementales a través de la implementación de los productos del proyecto, lo que a menudo requiere cambios estructurales y/o de procesos dentro de las organizaciones.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Revisión de Beneficios&lt;/strong&gt;: Se valida regularmente el valor de los beneficios esperados y
realizados a los ojos de los stakeholders. Los objetivos clave son evaluar y actualizar los&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-4.D9J6N4oG.png&amp;#x26;w=374&amp;#x26;h=413&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gestión de los Interesados/Stakeholders&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Es el proceso de identificar y comunicarse efectivamente con aquellas personas o grupos que tienen interés en los resultados de los programas/proyectos. También gestiona las relaciones con las partes interesadas como una forma de lograr influencia y resultados positivos de los programas y proyectos.
Características principales perfiles y el plan de realización, asegurar la alineación con los objetivos del programa, validar el valor para los stakeholders, y evaluar el nivel de logro contra los perfiles previstos.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Análisis y compromiso efectivo de los interesados a distintos niveles&lt;/strong&gt;: Esto implica que los interesados, tanto internos como externos a la organización, deben ser analizados y comprometidos de manera eficaz para lograr los objetivos del programa en términos de apoyo y compromiso.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Planificación de las comunicaciones&lt;/strong&gt;: La gestión de los interesados incluye la planificación
de las comunicaciones.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Uso e identificación efectiva de canales de comunicación&lt;/strong&gt;: Se deben utilizar e identificar de manera efectiva los diferentes canales de comunicación para alcanzar los objetivos del programa.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Comunicación clara, consistente y enfocada&lt;/strong&gt;: A nivel estratégico, la comunicación con los interesados debe ser clara, consistente, enfocada en lo esencial y en un lenguaje comprensible para todos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Proceso continuo&lt;/strong&gt;: La gestión de los interesados debe ser vista como un proceso continuo en todas las iniciativas del programa y vinculada al ciclo de vida de la iniciativa y los controles de la institución.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Objetivos de la gestión de los interesados (stakeholders)&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Identificar a los interesados.&lt;/li&gt;
&lt;li&gt;Definir claramente los intereses e influencias de los interesados.&lt;/li&gt;
&lt;li&gt;Asegurar que los interesados se comprometan de acuerdo a sus intereses e influencias en el
programa.
Asegurar que los interesados se comprometan, se apropien y apoyen el programa.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Preguntas que responde&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;¿QUIÉN?&lt;/strong&gt; (Identificar los interesados)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;¿QUÉ?&lt;/strong&gt; (Crear y analizar los perfiles de los interesados)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;¿CÓMO?&lt;/strong&gt; (Definir estrategia de participación de los interesados)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;¿CUÁNDO?&lt;/strong&gt; (Planificar la participación)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;¿HACER?&lt;/strong&gt; (Participación de los interesados)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;¿RESULTADOS?&lt;/strong&gt; (Medir la efectividad)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La Gestión de los Stakeholders se basa en 5 procesos:&lt;/p&gt;
&lt;p&gt;La identificación de los interesados y sus intereses se representa de diversas formas, siendo una
de ellas a través de un mapa de los interesados. Este mapa es una matriz que muestra a los
interesados y sus intereses particulares en el programa&lt;/p&gt;
&lt;p&gt;| &lt;strong&gt;STAKEHOLDERS&lt;/strong&gt;         | &lt;strong&gt;DIRECCIÓN ESTRATÉGICA&lt;/strong&gt; | &lt;strong&gt;FINANCIERA&lt;/strong&gt; | &lt;strong&gt;CAMBIOS OPERACIONALES&lt;/strong&gt; | &lt;strong&gt;INTERFAZ CON LOS CLIENTES&lt;/strong&gt; |
|--------------------------|---------------------------|----------------|----------------------------|-------------------------------|
| Clientes                 | Bajo                      | Medio          | Alto                       | Alto                          |
| Grupos de Proyectos      | Medio                     | Medio          | Alto                       | Medio                         |
| Personal                 | Medio                     | Medio          | Alto                       | Medio                         |
| Organismos Reguladores   | Alto                      | Medio          | Bajo                       | Medio                         |
| …                        | …                         | …              | …                          | …                             |&lt;/p&gt;
&lt;p&gt;El análisis de los stakeholders comprende entender y analizar su influencia e impacto en el proyecto. Esto es necesario para diseñar canales de comunicación apropiados que respondan a las necesidades e intereses de los stakeholders.&lt;/p&gt;
&lt;p&gt;Para analizar usamos una matriz de impacto de los stakeholders donde se incluyen los
siguientes datos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En un eje de la matriz se representa el &quot;POSIBLE IMPACTO DEL PGM EN LOS STAKEHOLDERS&quot;. Este eje evalúa el nivel de impacto que el programa podría tener en cada uno de los stakeholders, categorizándolo generalmente en niveles como Alto, Medio y Bajo.&lt;/li&gt;
&lt;li&gt;En el otro eje de la matriz se representa la &quot;IMPORTANCIA DE LOS STAKEHOLDERS EN EL PROGRAMA&quot;. Este eje evalúa la relevancia o significancia de cada stakeholder para el éxito del programa, también categorizada en niveles como Alto, Medio y Bajo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-5.B2BswfNl.png&amp;#x26;w=425&amp;#x26;h=358&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Consiste en definir un marco que permita la participación efectiva de los stakeholders. Tenemos a Definir:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;¿Cómo definimos un objetivo claro para el compromiso?&lt;/li&gt;
&lt;li&gt;¿Cómo mantenemos el compromiso dentro de los límites?&lt;/li&gt;
&lt;li&gt;¿Quién debe ser responsable de participar?&lt;/li&gt;
&lt;li&gt;¿Cuál es el mejor método de compromiso?&lt;/li&gt;
&lt;li&gt;¿Cómo medimos el éxito?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La comunicación es un factor crítico de éxito para cualquier proceso de transformación.&lt;/p&gt;
&lt;p&gt;Buscamos principalmente concientizar a los stakeholders sobre los beneficios y el impacto, obtener el compromiso del personal de las organizaciones con los cambios a ser introducidos, promover mensajes claves del programa, etc.
Para realizar esta tarea, se confecciona un plan de comunicación que incluye los siguientes datos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Qué se comunicará y la autoridad requerida para la comunicación.&lt;/li&gt;
&lt;li&gt;Cómo se comunicará.&lt;/li&gt;
&lt;li&gt;Quién comunicará.&lt;/li&gt;
&lt;li&gt;Cuándo se comunicará.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Posibles canales de comunicación:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Seminarios y workshops: Permiten el contacto directo con los interesados.&lt;/li&gt;
&lt;li&gt;Prensa/Medios: Son canales ideales para públicos externos más amplios.&lt;/li&gt;
&lt;li&gt;Boletines, instrucciones, anuncios, informes: Pueden utilizarse para comunicar información general y específica relacionada con interesados particulares.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Es necesario para mantener el impulso y el programa en marcha.&lt;/p&gt;
&lt;p&gt;Esta gestión asegura que:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Existe un entendimiento compartido sobre lo que se entiende por “stakeholder”.&lt;/li&gt;
&lt;li&gt;Existe un conjunto detallado de grupos de stakeholders orientados a la práctica.&lt;/li&gt;
&lt;li&gt;Existen metas establecidas para cada grupo o conjunto de grupos de stakeholders.&lt;/li&gt;
&lt;li&gt;Existe un plan de comunicaciones claro para alcanzar estas metas&lt;/li&gt;
&lt;li&gt;Los miembros del equipo de gestión del programa están motivados para alcanzar estas&lt;/li&gt;
&lt;li&gt;metas.&lt;/li&gt;
&lt;li&gt;Los grupos de stakeholders se sienten suficientemente comprometidos con el programa y comprenden los objetivos y limitaciones de los mismos.&lt;/li&gt;
&lt;li&gt;Se miden las opiniones de los stakeholders y se actúa en consecuencia&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Gestión de Riesgos&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Un riesgo es un evento potencial (negativo o positivo) que podría afectar el curso del programa o proyecto. Se gestiona para &lt;strong&gt;minimizar amenazas&lt;/strong&gt; o &lt;strong&gt;aprovechar oportunidades.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Un problema es una cuestión actual, ya presente o en discusión, que obstaculiza el proyecto. No confundir con el concepto de riesgo.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Identificar riesgos Tipos&lt;/strong&gt;: Estratégicos, De programa, De proyecto y Operativos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Registrar riesgos en un repositorio formal&lt;/strong&gt;. Es el repositorio central de toda la información sobre riesgos. Permite priorizar, tomar acción y hacer seguimiento.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Asignar propiedad del riesgo&lt;/strong&gt; a personas con capacidad para gestionarlos. Cada riesgo debe ser asignado a un responsable que tenga autoridad y competencia para actuar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evaluar los riesgos&lt;/strong&gt; (probabilidad e impacto). Se mide: Probabilidad de que ocurra. Impacto en caso de que ocurra.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Planificar acciones de mitigación&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Implementar acciones&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evaluar efectividad&lt;/strong&gt; de las acciones tomadas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Incorporar la gestión de riesgos&lt;/strong&gt; al programa.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Definir una estrategia formal&lt;/strong&gt; de gestión de riesgos.&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Transferir:&lt;/strong&gt; pasar el riesgo a un tercero (ej. seguros).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Terminar:&lt;/strong&gt; modificar el proyecto para eliminar el riesgo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tolerar:&lt;/strong&gt; aceptar el riesgo y no actuar (usado para riesgos menores).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tratar:&lt;/strong&gt; aplicar acciones para reducir la probabilidad o el impacto.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Calidad&lt;/h2&gt;
&lt;p&gt;La &lt;strong&gt;Calidad&lt;/strong&gt; es un concepto que tiene un significado que tiende a ser ambiguo y subjetivo, podemos quedarnos con una definición de &lt;strong&gt;Calidad&lt;/strong&gt; que nos dice que es &lt;strong&gt;una propiedad o conjunto de propiedades inherentes a algo, que permiten juzgar su valor.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Según &lt;strong&gt;ISO 9000&lt;/strong&gt; es el grado e el que un conjunto de características inherentes cumple con los requisitos.&lt;/p&gt;
&lt;p&gt;La Calidad de la Empresa se ve definida por:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Calidad de los procesos de Negocio&lt;/li&gt;
&lt;li&gt;Calidad de los Sistemas de Información
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Calidad de la Infraestructura&lt;/strong&gt;: calidad de redes y sistemas de software, etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Calidad de Software&lt;/strong&gt;: de las aplicaciones construidas, mantenidas, etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Calidad de Datos&lt;/strong&gt;: que ingresan en el SI.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Calidad de Información&lt;/strong&gt;: relacionada con la Calidad de Datos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Calidad de Gestión&lt;/strong&gt;: presupuesto, planificación y programación.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Calidad de servicio&lt;/strong&gt;: procesos de atención al cliente.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-6.CASiPPYg.png&amp;#x26;w=561&amp;#x26;h=492&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;La Calidad del Software se refiere a qué tan bien un software cumple con los requerimientos funcionales y no funcionales esperados, así como con las necesidades del usuario y del negocio. Se divide en Calidad del producto y Calidad del proceso de desarrollo&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Calidad del producto&lt;/strong&gt;: Los aspectos que medimos son la Calidad interna (medible a partir de las características intrínsecas), Calidad externa (medible en el comportamiento del producto) y Calidad en uso (medible durante el uso efectivo por parte del usuario).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Calidad del proceso&lt;/strong&gt;: Los requisitos más significativos del proceso de software son:
&lt;ul&gt;
&lt;li&gt;Que produzca los resultados esperados.&lt;/li&gt;
&lt;li&gt;Que estén basados en una correcta definición.&lt;/li&gt;
&lt;li&gt;Que sean mejorados en función de los objetivos de negocio.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&quot;Sin un buen proceso de desarrollo es casi imposible obtener un buen producto&quot;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Norma&lt;/strong&gt; es una regla obligatoria o un conjunto de requisitos que se deben cumplir, normalmente es establecida por organismos oficiales o internacionales. Define criterios específicos que deben seguirse en procesos, productos o servicios&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Estándar&lt;/strong&gt; es un modelo o referencia aceptada como guía o mejor práctica, no es obligatorio pero sí recomendado como ejemplo a seguir. Es más flexible y adaptable al contexto de cada organización.&lt;/p&gt;
&lt;p&gt;No confundir una con la otra, la diferencia entre ellas radica en el grado de obligatoriedad y en su uso formal.&lt;/p&gt;
&lt;p&gt;El término de norma es más fuerte que el término estándar.&lt;/p&gt;
&lt;p&gt;| &lt;strong&gt;Organismo&lt;/strong&gt;                                            | &lt;strong&gt;¿Qué hace?&lt;/strong&gt;                                                                                                                                                                       |
| -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| &lt;strong&gt;ISO - International Organization for Standardization&lt;/strong&gt; | Promueve una estandarización a nivel internacional de normas técnicas para diferentes ramas de la industria.                                                                         |
| &lt;strong&gt;IEC - International Electrotechnical Commission&lt;/strong&gt;      | Organización de normalización en los campos: eléctrico, electrónico y tecnologías relacionadas.                                                                                      |
| &lt;strong&gt;ISO/IEC&lt;/strong&gt;                                              | Las normas que se relacionan al software se desarrollan y publican por los dos organismos de arriba.                                                                                 |
| &lt;strong&gt;IRAM&lt;/strong&gt;                                                 | Promueve el uso de las normas ISO en Argentina y es el responsable de realizar las traducciones oficiales. Las normas ISO que han sido adoptadas por IRAM, se las denomina IRAM–ISO. |
| &lt;strong&gt;NM&lt;/strong&gt;                                                   | Identificación de las normas, indica que fue aprobada por la Asociación Mercosur de Normalización.                                                                                   |&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Calidad del Producto de Software&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;El concepto de Calidad de Producto de Software se refiere al conjunto de características que debe tener un software para cumplir con los requisitos funcionales, no funcionales y expectativas del usuario, tanto de forma interna como externa. Es una visión centrada en el software en sí mismo, no en el proceso que lo creó. Evalúa qué tan bien funciona, cómo se comporta y cómo lo percibe el usuario.&lt;/p&gt;
&lt;p&gt;La norma ISO/IEC 14598 (ahora reemplazada por ISO/IEC &lt;strong&gt;25040&lt;/strong&gt;) define un proceso formal para evaluar la calidad de un producto de software de manera sistemática y objetiva.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Etapas en Orden (1 a 5) y ¿Qué se hace?&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Establecer los requisitos de la evaluación&lt;/strong&gt;
Definir el propósito de la evaluación, obtener los requisitos de calidad del producto, identificar qué partes del producto se va a evaluar y definir el nivel de rigor de la evaluación.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Especificar la evaluación&lt;/strong&gt;
Seleccionar los módulos de evaluación, definir los criterios de decisión para las métricas y establecer los criterios de decisión generales de la evaluación.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Diseñar la evaluación&lt;/strong&gt;
Planificar las actividades concretas: qué pruebas se realizarán, qué herramientas se usarán, qué recursos humanos y técnicos se necesitan.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ejecutar la evaluación&lt;/strong&gt;
Realizar las mediciones reales, aplicar los criterios definidos en el paso anterior para interpretar los resultados y registrar todos los hallazgos y resultados de manera organizada.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Finalizar la evaluación&lt;/strong&gt;
Revisar los resultados obtenidos, elaborar el informe de evaluación, incluyendo recomendaciones si corresponde, obtener retroalimentación del proceso de evaluación para mejorar futuras evaluaciones y tratar y almacenar los datos obtenidos.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;La ISO/IEC 9126 (ahora reemplazada por la familia SQuaRE ISO/IEC 25000) es un modelo que define y clasifica las características de calidad del software en términos medibles y evaluables, para ayudar tanto en el desarrollo como en la evaluación del producto.&lt;/p&gt;
&lt;p&gt;| &lt;strong&gt;Norma de la Familia&lt;/strong&gt; | &lt;strong&gt;¿Qué define?&lt;/strong&gt;                                                   |
|-------------------------|---------------------------------------------------------------------|
| ISO/IEC 9126-1          | Modelo de calidad del producto software                            |
| ISO/IEC 9126-2          | Métricas externas (evaluación del software ejecutado)              |
| ISO/IEC 9126-3          | Métricas internas (evaluación sin ejecutar el software)            |
| ISO/IEC 9126-4          | Métricas de calidad en uso (con el usuario final)                  |&lt;/p&gt;
&lt;p&gt;Divide la Calidad del Software en seis características principales, cada una de ellas con subcaracterísticas (ahora reemplazada por ISO/IEC 25010)&lt;/p&gt;
&lt;p&gt;| &lt;strong&gt;Característica&lt;/strong&gt;             | &lt;strong&gt;¿A qué se refiere?&lt;/strong&gt;                                                                 | &lt;strong&gt;Subcaracterísticas&lt;/strong&gt;                                                                                 |
|-------------------------------|----------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------|
| &lt;em&gt;Funcionalidad&lt;/em&gt;               | Qué tan bien el software cumple con las funciones requeridas                         | Adecuación, Exactitud, Interoperabilidad, Cumplimiento y Seguridad de acceso                           |
| &lt;em&gt;Confiabilidad&lt;/em&gt;               | Capacidad del software de mantener su rendimiento bajo condiciones específicas        | Madurez, Tolerancia a fallos y Recuperabilidad                                                         |
| &lt;em&gt;Facilidad de Uso&lt;/em&gt;            | Facilidad con la que el usuario puede entender, aprender y utilizar el software       | Inteligibilidad, Atractivo, Facilidad de aprendizaje y Operabilidad                                    |
| &lt;em&gt;Eficiencia&lt;/em&gt;                  | Capacidad del software de proporcionar alto rendimiento con pocos recursos            | Comportamiento temporal y Utilización de recursos                                                      |
| &lt;em&gt;Potabilidad&lt;/em&gt;                 | Facilidad para modificar el software                                                  | Facilidad de análisis, Facilidad de cambio, Estabilidad y Facilidad de prueba                          |
| &lt;em&gt;Facilidad de Mantenimiento&lt;/em&gt;  | Capacidad del software para ser trasladado a diferentes entornos                      | Adaptabilidad, Facilidad de instalación, Conformidad y Facilidad de reemplazo                          |&lt;/p&gt;
&lt;p&gt;Define métricas para evaluar la calidad del software en forma de Tabla (ahora reemplazada por ISO/IEC 250423), teniendo en cuenta las características y subcaracterísticas definidas en la ISO/IEC 9126-1. Cada métrica se define en una tabla con estos campos:&lt;/p&gt;
&lt;p&gt;| &lt;strong&gt;Componente&lt;/strong&gt;              | &lt;strong&gt;Descripción&lt;/strong&gt;                                                                                       |
|----------------------------|--------------------------------------------------------------------------------------------------------|
| &lt;em&gt;Nombre de la Métrica&lt;/em&gt;     | Identifica de manera clara la métrica evaluada                                                        |
| &lt;em&gt;Propósito&lt;/em&gt;                | Indica qué aspecto de calidad se mide y con qué fin se utiliza esa métrica                            |
| &lt;em&gt;Descripción&lt;/em&gt;              | Define en detalle qué mide la métrica y cuál es su alcance                                            |
| &lt;em&gt;Fórmula&lt;/em&gt;                  | Expresa cómo se calcula la métrica                                                                     |
| &lt;em&gt;Tipo de medida&lt;/em&gt;           | Especifica si se trata de una medida objetiva (cuantitativa) o subjetiva (basada en percepción del usuario) |
| &lt;em&gt;Nivel de aplicación&lt;/em&gt;      | Indica si la métrica se aplica a nivel de módulo, componente, sistema completo, etc.                  |
| &lt;em&gt;Interpretación&lt;/em&gt;           | Señala qué significa un valor alto o bajo para la métrica, y cómo puede ser utilizado para tomar decisiones |&lt;/p&gt;
&lt;p&gt;A su vez, define criterios para crear nuevas métricas:&lt;/p&gt;
&lt;p&gt;| &lt;strong&gt;Criterio&lt;/strong&gt;          | &lt;strong&gt;Explicación de qué tener en cuenta&lt;/strong&gt;                                                                 |
|-----------------------|--------------------------------------------------------------------------------------------------------|
| &lt;em&gt;Relevancia&lt;/em&gt;          | La métrica debe estar directamente relacionada con una característica o subcaracterística de calidad  |
| &lt;em&gt;Validez&lt;/em&gt;             | Debe medir exactamente lo que se pretende medir, sin ambigüedad                                       |
| &lt;em&gt;Fiabilidad&lt;/em&gt;          | La métrica debe ofrecer resultados consistentes cuando se aplica en condiciones similares            |
| &lt;em&gt;Objetividad&lt;/em&gt;         | Siempre que sea posible, se debe preferir la medición cuantitativa y verificable, por sobre la percepción subjetiva |
| &lt;em&gt;Comprensibilidad&lt;/em&gt;    | Debe ser fácil de interpretar por los interesados                                                     |
| &lt;em&gt;Viabilidad&lt;/em&gt;          | La métrica debe ser técnicamente factible de obtener en el entorno donde se aplica                   |&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-7.QQA2_ibi.png&amp;#x26;w=569&amp;#x26;h=473&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;También explica de qué forma se deben combinar los niveles de las métricas para establecer los niveles de las características y de evaluación&lt;/p&gt;
&lt;p&gt;| &lt;strong&gt;Seguir en Orden (1 a 4)&lt;/strong&gt;               | &lt;strong&gt;¿Qué hacer?&lt;/strong&gt;                                                                                      |
|--------------------------------------------------|--------------------------------------------------------------------------------------------------------|
| &lt;em&gt;Evaluación a nivel de métrica&lt;/em&gt;                 | Puntuamos cada métrica según uno de los 4 niveles.                                                    |
| &lt;em&gt;Evaluación a nivel de subcaracterística&lt;/em&gt;       | Las métricas relacionadas a una subcaracterística se combinan, podríamos por ejemplo usar un promedio |
| &lt;em&gt;Evaluación a nivel de característica&lt;/em&gt;          | Se combinan los niveles de todas las subcaracterísticas que componen una característica principal, se puede aplicar nuevamente un promedio |
| &lt;em&gt;Evaluación global&lt;/em&gt;                             | Se combinan los niveles de las características principales para emitir una evaluación global del producto |&lt;/p&gt;
&lt;p&gt;La familia ISO/IEC 25000, conocida como SQuaRE (Software product Quality Requirements and Evaluation), es un conjunto de normas internacionales que proporcionan un marco estructurado y coherente para definir, medir y evaluar la calidad del software, los datos y su uso.&lt;/p&gt;
&lt;p&gt;SQuaRE es un modelo de referencia que reemplaza y amplía normas anteriores como ISO/IEC 9126 y ISO/IEC 14598. Tiene como objetivo definir claramente los requisitos de calidad del software, establecer métricas para medir esa calidad y estandarizar el proceso de evaluación del producto.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;División 2500n – Gestión de la calidad:&lt;/strong&gt; Proporciona guías generales para gestionar la calidad&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;División 2501n – Modelos de calidad&lt;/strong&gt;: Define modelos de calidad para productos de software (ISO/IEC 25010) y calidad de datos (ISO/IEC 25012). Estos modelos especifican características y subcaracterísticas quedeben evaluarse&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;División 2502n – Medición de la calidad:&lt;/strong&gt; Establece métricas específicas para cada característica&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;División 2503n – Requisitos de calidad&lt;/strong&gt;: Proporciona directrices para especificar requisitos de calidad desde la etapa de elicitación&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;División 2504n – Evaluación de la calidad:&lt;/strong&gt; Define cómo planificar y ejecutar la evaluación de un producto software&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La ISO/IEC 25010 reemplaza la ISO/IEC 9126-1 con un modelo más completo y actualizado, integrando aspectos clave como seguridad y compatibilidad, y dando mayor relevancia a la experiencia del usuario final.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Aspecto: Características principales&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;ISO/IEC 9126-1:&lt;/em&gt; 6&lt;/li&gt;
&lt;li&gt;&lt;em&gt;ISO/IEC 25010:&lt;/em&gt; 8&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Aspecto: Seguridad&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;ISO/IEC 9126-1:&lt;/em&gt; Subcaracterística dentro de Funcionalidad&lt;/li&gt;
&lt;li&gt;&lt;em&gt;ISO/IEC 25010:&lt;/em&gt; Característica independiente&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Aspecto: Compatibilidad&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;ISO/IEC 9126-1:&lt;/em&gt; No aparece como categoría&lt;/li&gt;
&lt;li&gt;&lt;em&gt;ISO/IEC 25010:&lt;/em&gt; Se agrega como característica nueva&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Aspecto: Calidad en uso&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;ISO/IEC 9126-1:&lt;/em&gt; Definida como concepto aparte&lt;/li&gt;
&lt;li&gt;&lt;em&gt;ISO/IEC 25010:&lt;/em&gt; Se integra en el mismo modelo&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Aspecto: Estructura&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;ISO/IEC 9126-1:&lt;/em&gt; Modelo de calidad interna y externa separado del de calidad en uso&lt;/li&gt;
&lt;li&gt;&lt;em&gt;ISO/IEC 25010:&lt;/em&gt; Unificación del modelo con mejor integración&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Al cuadro de características de la 9126-1 le quitamos la subcaracterística de Seguridad a Funcionalidad y agregamos 2 filas más:&lt;/p&gt;
&lt;p&gt;La ISO/IEC 25040 reemplaza la ISO/IEC 14598 con un enfoque más moderno, estructurado y alineado con todo el sistema de evaluación de calidad SQuaRE, permitiendo una evaluación más consistente, completa y reutilizable&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Foco&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;ISO/IEC 14598:&lt;/em&gt; Evaluación del producto de software&lt;/li&gt;
&lt;li&gt;&lt;em&gt;ISO/IEC 25040:&lt;/em&gt; Proceso completo de evaluación de calidad, integrado con modelos modernos&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Enfoque&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;ISO/IEC 14598:&lt;/em&gt; Separado del modelo de calidad (9126). La 9126 no estaba integrada a la 14598&lt;/li&gt;
&lt;li&gt;&lt;em&gt;ISO/IEC 25040:&lt;/em&gt; Integrado con ISO/IEC 25010 y resto de la familia 25000&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cobertura&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;ISO/IEC 14598:&lt;/em&gt; Definía evaluación en módulos por roles (desarrollador, adquirente, evaluador independiente)&lt;/li&gt;
&lt;li&gt;&lt;em&gt;ISO/IEC 25040:&lt;/em&gt; Define un único modelo de evaluación aplicable a todos los contextos (más flexible y unificado)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Detalle del proceso&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;ISO/IEC 14598:&lt;/em&gt; Más genérico&lt;/li&gt;
&lt;li&gt;&lt;em&gt;ISO/IEC 25040:&lt;/em&gt; Más detallado y normado, con 5 etapas claras&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Calidad de los Datos - ISO/IEC 25012&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La norma ISO/IEC 25012 define el concepto de Calidad de Datos como: &quot;La capacidad de las características de los datos de satisfacer necesidades explícitas e implícitas bajo condiciones específicas de uso.&quot;.&lt;/p&gt;
&lt;p&gt;Esto significa que los datos son de calidad cuando cumplen con lo que los usuarios necesitan, ya sea para operar, tomar decisiones, generar información o garantizar la interoperabilidad entre sistemas.&lt;/p&gt;
&lt;p&gt;El modelo presenta una clasificación considerando dos puntos de vista (3 si tomamos el combinado):&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Punto de Vista: Inherente&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;¿A qué hace referencia?&lt;/strong&gt;
Se refiere a las propiedades internas de los datos, independientemente del sistema que los gestiona.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;¿Qué evalúa?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Exactitud&lt;/strong&gt;: Reflejan correctamente la realidad.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Completitud&lt;/strong&gt;: Tienen todos los valores necesarios.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consistencia&lt;/strong&gt;: No se contradicen entre sí.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Punto de Vista: Dependiente del sistema&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;¿A qué hace referencia?&lt;/strong&gt;
Analiza cómo el sistema informático mantiene y permite acceder a los datos en determinadas condiciones de uso.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;¿Qué evalúa?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Credibilidad&lt;/strong&gt;: El usuario confía en ellos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Actualidad&lt;/strong&gt;: Están actualizados respecto al tiempo requerido.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Disponibilidad&lt;/strong&gt;: Accesibles cuando se necesitan.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Portabilidad&lt;/strong&gt;: Pueden transferirse entre sistemas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Recuperabilidad&lt;/strong&gt;: Se preservan ante fallos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Punto de Vista: Inherente + Dependiente&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;¿A qué hace referencia?&lt;/strong&gt;
Algunas características aplican a ambos enfoques (inherente y dependiente del sistema).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;¿Qué evalúa?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Accesibilidad&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cumplimiento&lt;/strong&gt; (con normas o estándares)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Confidencialidad&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Precisión&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Eficiencia&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trazabilidad&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Comprensibilidad&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Calidad de Servicio - ISO/IEC 20000&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La norma ISO/IEC 20000 es un estándar para la certificación de Gestión de Servicios de TI (Tecnologías de la Información) de las empresas.&lt;/p&gt;
&lt;p&gt;Define el concepto de Calidad de Servicio como la capacidad de un proveedor de servicios para entregar servicios de tecnología de la información (TI) de acuerdo con los requisitos acordados con los clientes, cumpliendo con las expectativas de calidad definidas.&lt;/p&gt;
&lt;p&gt;El estándar ISO/IEC 20000 es un marco de buenas prácticas para la gestión de servicios de TI, y tiene como objetivo garantizar que los proveedores de servicios entreguen servicios TI de alta calidad de manera consistente.&lt;/p&gt;
&lt;p&gt;El estándar está compuesto por varios componentes que guían a las organizaciones para establecer y gestionar un Sistema de Gestión de Servicios (SGS) eficiente. Su organización es la siguiente:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Componentes de la norma ISO/IEC 20000&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ISO/IEC 20000-1: Especificación&lt;/strong&gt;
Componente principal del estándar y especifica los requisitos para el Sistema de Gestión de Servicios (SGS).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ISO/IEC 20000-2: Código de Prácticas&lt;/strong&gt;
Proporciona orientación y mejores prácticas sobre cómo implementar un SGS basado en los requisitos de la ISO/IEC 20000-1. Aunque no es obligatorio, es muy útil para organizaciones que deseen aplicar el estándar de manera efectiva.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ISO/IEC 20000-3: Guía en la Definición del Alcance y su Aplicabilidad&lt;/strong&gt;
Destinada a los auditores, ofrece directrices sobre cómo realizar auditorías a un SGS implementado conforme a la ISO/IEC 20000-1. Ayuda a evaluar la eficacia de dicha implementación.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ISO/IEC 20000-4: Modelo de Referencia de Procesos&lt;/strong&gt;
Proporciona una metodología para evaluar la gestión de servicios en una organización. Permite medir la eficacia de los servicios entregados y de la implementación del SGS.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ISO/IEC 20000-5: Ejemplo de Implementación&lt;/strong&gt;
Brinda un ejemplo de implementación en un informe técnico.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Calidad de Procesos de Software&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Un proceso es una serie de actividades interrelacionadas que a partir de un input generan un output que puede ser un resultado final o el input de otro proceso.&lt;/p&gt;
&lt;p&gt;El proceso de software es un concepto amplio, basado en el ciclo de vida y que cubre todos los elementos necesarios como tecnología, personal, artefactos, etc. Se puede ver como un conjunto coherente de tareas relacionadas que conducen a la producción de un producto software incluyendo tanto las actividades técnicas (como el diseño y la codificación) como las actividades de gestión (como la planificación y el seguimiento).&lt;/p&gt;
&lt;p&gt;Por buenas prácticas se entiende un conjunto coherente de acciones que han rendido bien en un determinado contexto y que se espera que, en contextos similares, rindan similares resultados.&lt;/p&gt;
&lt;p&gt;Podemos definir a una organización como un conjunto de procesos interconectados, que pueden plasmarse por escrito en un diagrama denominado Mapa de Procesos&lt;/p&gt;
&lt;p&gt;Tipos de Procesos&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Procesos de Gestión&lt;/strong&gt;: Definen y verifican las políticas, estrategias, objetivos y metas de la organización.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Procesos Operativos&lt;/strong&gt;: Procesos de producción de bienes y servicios que se entregan al cliente. Están alineados con la misión principal de la organización.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Procesos de Apoyo&lt;/strong&gt;: Procesos que realizan actividades de apoyo necesarias para el buen funcionamiento de los procesos operativos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En el mapa de procesos, los clientes son las entidades (internas o externas) que reciben los productos o servicios generados por los procesos clave. Son el destinatario final del valor entregado por la organización. Representan:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Las expectativas y necesidades a satisfacer.&lt;/li&gt;
&lt;li&gt;Un punto de partida para la definición de los procesos clave.&lt;/li&gt;
&lt;li&gt;La referencia para evaluar la eficacia del sistema.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-8.BClhMVI4.png&amp;#x26;w=532&amp;#x26;h=314&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Modelo de Calidad de los Proceso de Software&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Un modelo de calidad software puede definirse como una herramienta que guía a las organizaciones a la mejora continua y a la competitividad, proporcionando un conjunto de buenas prácticas para el ciclo de vida del software.&lt;/p&gt;
&lt;p&gt;Un modelo no es una metodología, dice qué hacer pero no cómo hacerlo.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-9.Dgn2enDL.png&amp;#x26;w=517&amp;#x26;h=344&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;El modelo ISO/IEC 12207 es un estándar internacional que define un marco de referencia para los procesos del ciclo de vida del software. Fue desarrollado para establecer un lenguaje común y una estructura formal que permita gestionar, desarrollar y mantener productos de software con calidad. Su objetivo principal es mejorar la calidad y la eficiencia del software y sus procesos asociados.&lt;/p&gt;
&lt;p&gt;Esta norma genera un clasificación de los procesos:&lt;/p&gt;
&lt;p&gt;| &lt;strong&gt;Categoría&lt;/strong&gt;                                                                                         | &lt;strong&gt;¿Qué hacen?&lt;/strong&gt;                                                                                                      |
|--------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------|
| &lt;em&gt;Agreement Processes (Procesos de Acuerdo)&lt;/em&gt;                                                           | Se centran en establecer los acuerdos entre las partes (cliente y proveedor).                                        |
| &lt;em&gt;Organizational Project-Enabling Processes (Procesos Organizacionales de Habilitación de Proyectos)&lt;/em&gt; | Apoyan a la organización para establecer, gestionar y mejorar sus capacidades en proyectos.                         |
| &lt;em&gt;Technical Management Processes (Procesos de Gestión Técnica)&lt;/em&gt;                                        | Son procesos de gestión del proyecto y del producto a lo largo de su ciclo de vida.                                 |
| &lt;em&gt;Technical Processes (Procesos Técnicos)&lt;/em&gt;                                                             | Son los procesos directamente relacionados con la creación del sistema o software.                                  |&lt;/p&gt;
&lt;p&gt;La norma ISO/IEC 15504 tiene como propósito establecer y mejorar la capacidad y madurez de los procesos de las organizaciones en la adquisición, desarrollo, evolución y soporte de productos y servicios.&lt;/p&gt;
&lt;p&gt;En relación con la calidad del proceso, la norma ISO/IEC 15504 proporciona un modelo de calidad software que guía a las organizaciones hacia la mejora continua y la competitividad, ofreciendo un conjunto de buenas prácticas para el ciclo de vida del software.&lt;/p&gt;
&lt;p&gt;Este modelo está relacionado con los conceptos de nivel de capacidad y nivel de madurez.&lt;/p&gt;
&lt;p&gt;Esta norma fue reemplazada por la ISO/IEC 33000, estas son las diferencias:&lt;/p&gt;
&lt;p&gt;| &lt;strong&gt;Característica&lt;/strong&gt;                     | &lt;strong&gt;ISO/IEC 15504 (SPICE)&lt;/strong&gt;                                                                              | &lt;strong&gt;ISO/IEC 33000&lt;/strong&gt;                                                                                                 |
|----------------------------------------|--------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------|
| &lt;em&gt;Propósito principal&lt;/em&gt;                 | Evaluación de procesos de software y determinación de su capacidad                                     | Marco genérico para evaluar &lt;em&gt;cualquier tipo de proceso&lt;/em&gt;, no solo de software                                     |
| &lt;em&gt;Ámbito&lt;/em&gt;                              | Específico de procesos de software                                                                     | Genérico y extensible                                                                                             |
| &lt;em&gt;Estructura&lt;/em&gt;                          | Serie ISO/IEC 15504-1 a 15504-6                                                                         | Familia de normas ISO/IEC 330xx, más modular                                                                      |
| &lt;em&gt;Modelo de evaluación&lt;/em&gt;               | Niveles de capacidad de 0 a 5, con atributos de procesos                                                | Mantiene los niveles de capacidad, pero &lt;em&gt;refina la estructura&lt;/em&gt; de evaluación                                      |
| &lt;em&gt;Consistencia con otros estándares&lt;/em&gt;   | Desalineado parcialmente con ISO 12207/15288 en sus primeras versiones                                 | Totalmente alineado con ISO/IEC/IEEE 12207 y 15288                                                                |
| &lt;em&gt;Flexibilidad&lt;/em&gt;                        | Menos modular, enfoque más rígido                                                                       | &lt;em&gt;Más flexible y extensible&lt;/em&gt;, admite diferentes modelos de proceso (no solo de software)                           |
| &lt;em&gt;Evaluaciones conformes&lt;/em&gt;              | Solo evaluaciones SPICE                                                                                | Permite certificaciones o evaluaciones conforme a modelos personalizados (incluidos ISO, CMMI, etc.)             |&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SGC - IRAM-ISO 9001:2015&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Es una norma internacional certificable que define los requisitos para implementar un Sistema de Gestión de la Calidad (SGC) enfocado en satisfacer al cliente, mejorar procesos y garantizar la calidad de productos/servicios.&lt;/p&gt;
&lt;p&gt;Realizar una certificación bajo la norma IRAM-ISO 9001:2015 significa que la organización ha implementado un Sistema de Gestión de la Calidad (SGC) que cumple con los requisitos especificados en esta norma. Este sistema está orientado a asegurar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La conformidad del producto.&lt;/li&gt;
&lt;li&gt;El aumento de la satisfacción del cliente.&lt;/li&gt;
&lt;li&gt;La mejora de la eficacia del sistema&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La implementación de este sistema, basado en ISO 9001, busca que la organización logre resultados consistentes y predecibles al entender y gestionar sus actividades como procesos interrelacionados&lt;/p&gt;
&lt;p&gt;| &lt;strong&gt;Principio de calidad&lt;/strong&gt;                               | &lt;strong&gt;¿Qué representa?&lt;/strong&gt;                                                              |
|--------------------------------------------------------|-----------------------------------------------------------------------------------|
| &lt;em&gt;Enfoque al cliente&lt;/em&gt;                                   | Cumplir y superar las expectativas del cliente                                   |
| &lt;em&gt;Liderazgo&lt;/em&gt;                                            | Establecer una dirección y propósito común                                       |
| &lt;em&gt;Compromiso de las personas&lt;/em&gt;                           | Involucrar, empoderar y desarrollar a las personas                               |
| &lt;em&gt;Enfoque a procesos&lt;/em&gt;                                   | Gestionar actividades como procesos interrelacionados                            |
| &lt;em&gt;Mejora continua&lt;/em&gt;                                      | Buscar mejoras permanentes en el desempeño del sistema                           |
| &lt;em&gt;Toma de decisiones basada en la evidencia&lt;/em&gt;            | Usar datos y hechos para decidir                                                 |
| &lt;em&gt;Gestión de relaciones&lt;/em&gt;                                | Crear valor mediante relaciones sostenidas con partes interesadas               |&lt;/p&gt;
&lt;p&gt;La norma ISO 90003:2018 se utiliza como una directriz para la interpretación de la norma ISO 9001:2015 en el contexto del proceso de software.&lt;/p&gt;
&lt;p&gt;Su propósito principal es proporcionar una guía para identificar las evidencias dentro del proceso de software que demuestren el cumplimiento de los requisitos establecidos en la norma ISO 9001.&lt;/p&gt;
&lt;p&gt;Las certificaciones se hacen bajo la 9001:2015 NO bajo la 90003:2018&lt;/p&gt;
&lt;p&gt;Trabajar con un sistema de gestión de calidad basado en ISO 9001 proporciona los siguientes beneficios:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Asegura que su negocio cumpla con los requisitos legales y del cliente&lt;/li&gt;
&lt;li&gt;Aumenta el rendimiento de su organización: Al implementar procesos simplificados, ayuda a mejorar la eficiencia operacional.&lt;/li&gt;
&lt;li&gt;Asegura la toma de decisiones.&lt;/li&gt;
&lt;li&gt;Mejora la satisfacción del cliente.&lt;/li&gt;
&lt;li&gt;Optimiza sus operaciones para así cumplir y superar los requisitos de sus clientes.&lt;/li&gt;
&lt;li&gt;Mejora su rendimiento financiero.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Establecen las metas a las que se desea llegar con la certificación y deben suponer un avance, buscando la “mejora continua”. Características que deben tener&lt;/p&gt;
&lt;p&gt;| &lt;strong&gt;Característica&lt;/strong&gt; | &lt;strong&gt;Descripción&lt;/strong&gt;                                                                                         | &lt;strong&gt;Ejemplos&lt;/strong&gt;                                                                                         |
|--------------------|----------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------|
| &lt;em&gt;Específicos&lt;/em&gt;      | Claros, concretos y enfocados en un área o proceso determinado                                           | &quot;Reducir el número de reclamos de clientes del área técnica&quot;                                          |
| &lt;em&gt;Medibles&lt;/em&gt;         | Deben tener indicadores que permitan evaluar el progreso o cumplimiento                                  | &quot;Reducir los reclamos en un 15% respecto al año anterior&quot;                                             |
| &lt;em&gt;Alcanzables&lt;/em&gt;      | Realistas según los recursos, capacidades y contexto de la organización                                  | -                                                                                                     |
| &lt;em&gt;Relevantes&lt;/em&gt;       | Deben estar alineados con la política de calidad, las necesidades del cliente y los objetivos estratégicos de la organización | -                                                                                                     |
| &lt;em&gt;Temporales&lt;/em&gt;       | Deben tener un plazo definido para su cumplimiento o evaluación                                          | &quot;Alcanzar una disminución del 15% en reclamos antes de diciembre 2025&quot;                                |&lt;/p&gt;
&lt;p&gt;Es una descripción resumida del mismo y su naturaleza. Características&lt;/p&gt;
&lt;p&gt;| &lt;strong&gt;Característica&lt;/strong&gt;                                                     | &lt;strong&gt;Descripción&lt;/strong&gt;                                                                                                                                                   |
|------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| &lt;em&gt;Coherente con el contexto de la organización&lt;/em&gt;                         | Debe considerar el entorno interno y externo, así como las necesidades de las partes interesadas relevantes                                                     |
| &lt;em&gt;Incluir los productos y servicios del SGC&lt;/em&gt;                             | Debe indicar claramente qué productos y/o servicios están incluidos dentro del sistema de gestión                                                               |
| &lt;em&gt;Incluir ubicaciones y unidades relevantes&lt;/em&gt;                             | Si la organización opera en varias sedes o departamentos, el alcance debe especificar a qué sitios se aplica el SGC                                              |
| &lt;em&gt;Ser conciso, claro y específico&lt;/em&gt;                                       | El texto debe ser fácil de entender y directo, evitando ambigüedades o generalidades excesivas                                                                  |
| &lt;em&gt;Incluir exclusiones justificadas (cuando correspondan)&lt;/em&gt;               | Cualquier requisito de la norma ISO 9001 excluido debe estar explícitamente mencionado y justificado si no aplica por la naturaleza del producto o servicio     |
| &lt;em&gt;Documentado y mantenido&lt;/em&gt;                                              | El alcance debe estar documentado dentro del SGC, típicamente en el manual de calidad o un documento de contexto, y debe revisarse periódicamente               |&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Auditoría y Peritaje de Sistemas&lt;/h2&gt;
&lt;p&gt;| &lt;strong&gt;Razón&lt;/strong&gt;                                                | &lt;strong&gt;Descripción&lt;/strong&gt;                                                                                                                                                             |
|----------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| &lt;em&gt;Costos por pérdida de datos&lt;/em&gt;                            | Los datos proveen a la organización de una &quot;imagen&quot; de sí misma, su entorno y su futuro. Si esa imagen se pierde o es inexacta, se generan grandes pérdidas.                |
| &lt;em&gt;Costos por decisiones incorrectas&lt;/em&gt;                      | La calidad de las decisiones depende de: - La calidad de los datos (veraces, completos, oportunos). - La correctitud de las reglas de decisión implementadas.       |
| &lt;em&gt;Costos por abusos computacionales&lt;/em&gt;                      | Los abusos informáticos tienden a generar pérdidas mayores que los fraudes tradicionales.                                                                                   |
| &lt;em&gt;Costos por errores de computación&lt;/em&gt;                      | Errores en sistemas automáticos pueden ser graves, ya que: - Son determinísticos. - Se reproducen rápidamente. - Son costosos de corregir.                      |
| &lt;em&gt;Valor del hardware, software y personal&lt;/em&gt;                | Los recursos de TI son críticos para la operación de las organizaciones.                                                                                                     |
| &lt;em&gt;Mantenimiento de la privacidad&lt;/em&gt;                         | La automatización permite la integración de grandes volúmenes de datos personales. Esto puede violar derechos si no se audita adecuadamente.                               |
| &lt;em&gt;Evolución controlada del uso de TI&lt;/em&gt;                     | La confiabilidad de los sistemas complejos no está garantizada. Una adopción no controlada puede generar efectos perjudiciales.                                            |&lt;/p&gt;
&lt;p&gt;Los abusos computacionales son incidentes relacionados con el uso indebido o malicioso de tecnologías de la información, en los cuales una víctima sufre (o podría haber sufrido) una pérdida, y un perpetrador obtiene (o podría obtener) una ganancia intencional. Tipos de Abusos:&lt;/p&gt;
&lt;p&gt;| &lt;strong&gt;Tipo&lt;/strong&gt;                    | &lt;strong&gt;Descripción&lt;/strong&gt;                                                                                                                         |
|-----------------------------|------------------------------------------------------------------------------------------------------------------------------------------|
| &lt;em&gt;Hacking&lt;/em&gt;                   | Acceso no autorizado a sistemas informáticos para leer, modificar, eliminar información o interrumpir servicios                         |
| &lt;em&gt;Virus&lt;/em&gt;                     | Programas maliciosos que infectan archivos, sistemas o macros para dañar, interrumpir o controlar las operaciones del sistema           |
| &lt;em&gt;Acceso físico ilegal&lt;/em&gt;      | Ingreso no autorizado a instalaciones físicas como salas de servidores o terminales de trabajo, con el fin de robar, manipular o destruir datos o equipos |
| &lt;em&gt;Abuso de privilegios&lt;/em&gt;      | Uso indebido de accesos o permisos legítimos para fines no autorizados                                                                  |&lt;/p&gt;
&lt;p&gt;Consecuencias de los abusos computacionales&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Destrucción de activos.&lt;/li&gt;
&lt;li&gt;Sustracción de activos.&lt;/li&gt;
&lt;li&gt;Modificación de activos.&lt;/li&gt;
&lt;li&gt;Violación de privacidad.&lt;/li&gt;
&lt;li&gt;Interrupción de operaciones.&lt;/li&gt;
&lt;li&gt;Uso no autorizado de activos.&lt;/li&gt;
&lt;li&gt;Daño físico a personas.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Auditoría de Sistemas&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La auditoría de sistemas de información es un proceso sistemático y planificado mediante el cual se recolecta, analiza y evalúa evidencia sobre los sistemas informáticos de una organización&lt;/p&gt;
&lt;p&gt;| &lt;strong&gt;Objetivo&lt;/strong&gt;                                        | &lt;strong&gt;Descripción&lt;/strong&gt;                                                                                                                                                                                                                           |
|----------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| &lt;em&gt;Preservar los activos&lt;/em&gt;                            | La auditoría busca garantizar que los activos relacionados con los sistemas de información estén protegidos contra pérdidas, robos, abusos o destrucción                                                                                  |
| &lt;em&gt;Mantener la integridad de los datos&lt;/em&gt;              | Se refiere a asegurar que los datos sean:- Correctos.- Completos.- Consistentes.- Veraces.Sin integridad, los datos no reflejan la realidad de la organización y pueden llevar a decisiones equivocadas o fraudes.     |
| &lt;em&gt;Alcanzar los objetivos organizacionales con eficacia&lt;/em&gt; | Un sistema de información debe cumplir con los objetivos para los que fue diseñado, facilitando que la organización logre sus metas. Esto implica:- Que responda a las necesidades de los usuarios.- Que esté alineado con los procesos del negocio.- Que permita tomar decisiones oportunas y acertadas. |
| &lt;em&gt;Usar los recursos con eficiencia&lt;/em&gt;                 | La auditoría también verifica que los recursos tecnológicos y humanos se estén utilizando de forma óptima                                                                                                                                |&lt;/p&gt;
&lt;p&gt;Se generan 4 resultados clave:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mejora la salvaguarda de activos.&lt;/li&gt;
&lt;li&gt;Mejora la integridad de los datos.&lt;/li&gt;
&lt;li&gt;Mejora la efectividad de los sistemas.&lt;/li&gt;
&lt;li&gt;Mejora la eficiencia de los sistemas&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Alta Gerencia y Sistemas de Control Interno&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Que la alta gerencia implemente un sistema de control interno significa que a alta dirección de la organización asume la responsabilidad de establecer mecanismos formales y organizados para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Proteger los activos&lt;/li&gt;
&lt;li&gt;Garantizar la integridad y precisión de los datos&lt;/li&gt;
&lt;li&gt;Asegurar el cumplimiento de los objetivos institucionales&lt;/li&gt;
&lt;li&gt;Detectar, prevenir y corregir errores o fraudes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Es una forma de establecer reglas, procedimientos y estructuras que permiten controlar y supervisar el uso de los recursos de tecnología de la información. Es importante que lo implemente la alta gerencia porque:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Da legitimidad a los controles.&lt;/li&gt;
&lt;li&gt;Permite asignar recursos y presupuesto.&lt;/li&gt;
&lt;li&gt;Establece una cultura organizacional de responsabilidad y transparencia.&lt;/li&gt;
&lt;li&gt;Sin compromiso de la alta dirección, los controles internos son débiles o simbólicos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La implementación del control interno se realiza a través de componentes estructurados, que deben ser definidos, comunicados y aplicados dentro de la organización, **estos componentes son:&lt;/p&gt;
&lt;p&gt;| &lt;strong&gt;Componente&lt;/strong&gt;                                                | &lt;strong&gt;Descripción&lt;/strong&gt;                                                                                                 |
|---------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------|
| &lt;em&gt;Separación de obligaciones&lt;/em&gt;                                  | Evitar que una misma persona pueda iniciar, registrar y autorizar una transacción                               |
| &lt;em&gt;Delegación clara de autoridad y responsabilidad&lt;/em&gt;             | Establecer roles y responsabilidades bien definidos                                                              |
| &lt;em&gt;Reclutamiento y capacitación de personal calificado&lt;/em&gt;         | Asegurar que quienes trabajan en los sistemas estén capacitados técnica y éticamente                             |
| &lt;em&gt;Sistema de autorizaciones&lt;/em&gt;                                   | Incluir autorizaciones generales (políticas) y específicas (transacciones individuales)                          |
| &lt;em&gt;Documentos y registros adecuados&lt;/em&gt;                            | Mantener trazabilidad de todas las transacciones importantes, incluso en sistemas automatizados                 |
| &lt;em&gt;Controles físicos y documentación de activos&lt;/em&gt;                | Proteger físicamente el acceso a servidores, equipos y datos                                                     |
| &lt;em&gt;Chequeos independientes de performance&lt;/em&gt;                      | Revisar el funcionamiento y rendimiento de los sistemas por terceros o áreas independientes                      |
| &lt;em&gt;Comparación periódica de activos con registros&lt;/em&gt;              | Verificar que los datos del sistema coincidan con la realidad                                                    |&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Controles&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Un control es un sistema que previene, detecta, o corrige eventos ilegales.&lt;/p&gt;
&lt;p&gt;Un control en un sistema de información es un sistema en sí mismo porque no se trata de un único elemento aislado, sino de un conjunto coordinado de componentes y procesos que tienen como objetivo prevenir, detectar o corregir eventos ilegales.&lt;/p&gt;
&lt;p&gt;| &lt;strong&gt;Aspecto&lt;/strong&gt;        | &lt;strong&gt;Preventivo&lt;/strong&gt;                                                                                                                                                                                                                                                                             | &lt;strong&gt;Detectivo&lt;/strong&gt;                                                                                                                                                                               | &lt;strong&gt;Correctivo&lt;/strong&gt;                                                                                                                                                                                                                         |
|--------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| &lt;em&gt;Definición&lt;/em&gt;       | Controles que evitan que ocurra un evento ilegal o no deseado. Se aplican antes de que se produzca una actividad crítica                                                                                                                              | Son controles que permiten identificar que un evento ilegal o no deseado ha ocurrido                                                                 | Son controles que corrigen los efectos de un evento no deseado después de que ha sido detectado                                                                                                 |
| &lt;em&gt;Objetivo&lt;/em&gt;         | Reducir la probabilidad de que ocurra un error, fraude o evento no autorizado                                                                                                                                                                        | Descubrir errores, fraudes o eventos no autorizados después de que ocurrieron                                                                        | Minimizar el impacto de los errores o eventos ilegales y restaurar el estado correcto del sistema                                                                                              |
| &lt;em&gt;Ejemplos&lt;/em&gt;         | - Instrucciones claras y obligatorias para llenar un formulario   - Roles y permisos predefinidos   - Validación de campos obligatorios   - Firewall configurado                                                                         | - Programa que valida datos y rechaza valores incorrectos   - Logs de acceso revisados periódicamente   - Alarmas de detección de intrusión   - Revisión de conciliaciones | - Sistema que detecta ruido y retransmite paquetes   - Restauración desde un backup   - Parcheo de seguridad   - Reset automático de contraseñas fallidas                         |
| &lt;em&gt;Cuándo actúa&lt;/em&gt;     | Antes del evento                                                                                                                                                                                                                                     | Después del evento                                                                                                                                     | Después del evento                                                                                                                                                                               |
| &lt;em&gt;Qué hace&lt;/em&gt;         | Evita que ocurra                                                                                                                                                                                                                                     | Identifica qué ocurrió                                                                                                                                 | Corrige o mitiga el impacto                                                                                                                                                                     |&lt;/p&gt;
&lt;p&gt;La tarea principal del auditor es evaluar si los controles están adecuadamente ubicados y si funcionan correctamente para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Prevenir eventos ilegales o no deseados.&lt;/li&gt;
&lt;li&gt;Detectar estos eventos en caso de que ocurran.&lt;/li&gt;
&lt;li&gt;Corregir sus efectos para minimizar pérdidas.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sigue un proceso sitemático que incluye:&lt;/p&gt;
&lt;p&gt;| &lt;strong&gt;Pasos en Orden (1 a 4)&lt;/strong&gt;                         | &lt;strong&gt;¿Qué hace?&lt;/strong&gt;                                                                                                                                                                 |
|----------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| &lt;em&gt;Identificación de controles existentes&lt;/em&gt;           | Analiza el sistema y los procesos.Determina qué controles están implementados (tanto gerenciales como de aplicación).                                                    |
| &lt;em&gt;Evaluación de su confiabilidad&lt;/em&gt;                   | Verifica si cada control cubre los eventos relevantes.Estima cuán confiables son los controles (efectividad, cobertura, posibilidad de falla).                           |
| &lt;em&gt;Recolección de evidencia&lt;/em&gt;                         | Realiza pruebas (walk-throughs, inspecciones, entrevistas, análisis de logs).Evalúa si los controles funcionan en la práctica y no solo en el papel.                     |
| &lt;em&gt;Detección de brechas&lt;/em&gt;                             | Identifica controles ausentes, débiles o ineficientes.Determina el nivel de exposición a riesgos.                                                                        |&lt;/p&gt;
&lt;p&gt;La confiabilidad se refiere a la efectividad real del control para prevenir, detectar o corregir eventos ilegales o no deseados.&lt;/p&gt;
&lt;p&gt;| &lt;strong&gt;¿Cómo medimos?&lt;/strong&gt;                                    | &lt;strong&gt;Descripción&lt;/strong&gt;                                                                                                                                                                                                                         |
|--------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| &lt;em&gt;Identificando eventos y transacciones relevantes&lt;/em&gt;     | El análisis comienza desde las funciones clave del sistema para entender qué debería y qué no debería pasar                                                                                                                            |
| &lt;em&gt;Evaluando cómo los controles responden ante esos eventos&lt;/em&gt; | Para cada evento ilegal identificado, se debe evaluar:- ¿Existe un control que lo mitigue?- ¿Está ubicado correctamente en el flujo del proceso?- ¿Actúa de forma preventiva, detectiva o correctiva?- ¿Es automático o manual?- ¿Es consistente ante múltiples escenarios? |
| &lt;em&gt;Analizando evidencia de funcionamiento&lt;/em&gt;               | Los auditores usan técnicas como: Walk-throughs, Revisión de logs, Pruebas de cumplimiento, Entrevistas, etc.                                                                                                                           |
| &lt;em&gt;Estimando el nivel de confiabilidad&lt;/em&gt;                  | Aunque no siempre se cuantifica numéricamente, se puede clasificar según escalas:- &lt;em&gt;Alta (A)&lt;/em&gt;: El control cubre completamente el evento y funciona con consistencia.- &lt;em&gt;Media (M)&lt;/em&gt;: El control existe pero no es completamente eficaz o tiene limitaciones.- &lt;em&gt;Baja (B)&lt;/em&gt;: El control es débil, incompleto o no se aplica de manera confiable. |
| &lt;em&gt;Analizando el impacto en el nivel superior&lt;/em&gt;           | Una vez evaluados los controles de subsistemas de menor nivel, se estima su impacto en los subsistemas superiores, considerando:- Frecuencia del evento- Impacto económico o reputacional- Potencial de fraude o pérdida     |&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Factorización&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Desde el punto de vista de la auditoría de sistemas de información, factorizar un sistema significa:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Dividir un sistema complejo en componentes lógicos más pequeños (subsistemas), cada uno con funciones específicas, para facilitar su comprensión, evaluación y auditoría.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Esta técnica permite al auditor enfocar su análisis en partes manejables del sistema, lo cual es especialmente útil en entornos grandes y heterogéneos.&lt;/p&gt;
&lt;p&gt;Factorizamos por las siguientes razones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Identificar controles relevantes por subsistema.&lt;/li&gt;
&lt;li&gt;Evaluar la confiabilidad de cada parte, y así estimar la confiabilidad global.&lt;/li&gt;
&lt;li&gt;Asignar responsabilidades y priorizar esfuerzos de auditoría.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;| &lt;strong&gt;Criterio&lt;/strong&gt;                    | &lt;strong&gt;Descripción&lt;/strong&gt;                                                                                                                                                                                                                                                                                      |
|--------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| &lt;em&gt;Por Función&lt;/em&gt;                  | El auditor identifica primero las funciones principales del sistema y luego divide el sistema de acuerdo a esas funciones                                                                                                                                                                           |
| &lt;em&gt;Acoplamiento y Cohesión&lt;/em&gt;     | - Acoplamiento bajo: los subsistemas deben ser independientes entre sí en lo posible, lo que facilita su análisis individual.- Alta cohesión: cada subsistema debe estar orientado a una sola función clara, sin mezclar responsabilidades.                                                  |
| &lt;em&gt;Por tipo de funciones&lt;/em&gt;        | &lt;strong&gt;Funciones gerenciales&lt;/strong&gt;- Las funciones que se deben realizar para asegurar que el desarrollo, la implementación, operación y mantenimiento de los sistemas de información proceden de una forma planificada y controlada.&lt;strong&gt;Funciones de aplicación&lt;/strong&gt;- Tareas que son necesarias ejecutar para realizar un procesamiento de información confiable. Relacionado con “ciclos”. |&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Riesgos de una Auditoría&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;El concepto de riesgo se analiza como parte de la fórmula RDA = RI ⋅ RC ⋅ RD. Esta expresión refleja cómo los distintos tipos de riesgos interactúan y deben ser gestionados para mantener un nivel aceptable de confianza en el sistema auditado.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RDA&lt;/strong&gt;: Riesgo Deseado de Auditoría.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RI&lt;/strong&gt;: Riesgo Inherente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RC&lt;/strong&gt;: Riesgo de Control.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RD&lt;/strong&gt;: Riesgo de Detección.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;| &lt;strong&gt;Tipo&lt;/strong&gt;                          | &lt;strong&gt;Descripción&lt;/strong&gt;                                                                                                                                                                                                                      |
|----------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| &lt;em&gt;Riesgo Deseado de Auditoría&lt;/em&gt;    | Es el nivel máximo de riesgo que el auditor está dispuesto a aceptar, considerando las consecuencias de no detectar errores o irregularidades materiales. No se calcula, se decide en función del entorno, la criticidad del sistema y el impacto potencial. |
| &lt;em&gt;Riesgo Inherente&lt;/em&gt;               | Es el riesgo de que ocurran errores materiales o irregularidades sin considerar aún los controles existentes. Depende de: - Naturaleza del sistema. - Entorno de negocio. - Complejidad del proceso o tecnología.         |
| &lt;em&gt;Riesgo de Control&lt;/em&gt;              | Es el riesgo de que los controles internos no funcionen adecuadamente para prevenir o detectar errores o eventos ilegales.                                                                                                         |
| &lt;em&gt;Riesgo de Detección&lt;/em&gt;            | Es el riesgo de que los procedimientos de auditoría no logren detectar errores materiales o fraudes, aunque existan.                                                                                                               |&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Proceso de Auditoría&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;El proceso de auditoría de sistemas de información consiste en las siguientes etapas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Es la primera etapa.&lt;/li&gt;
&lt;li&gt;Varía si es una auditoría interna o externa.&lt;/li&gt;
&lt;li&gt;Tareas Principales
&lt;ul&gt;
&lt;li&gt;Determinar el alcance de la auditoría (sistema, conjunto de sistemas o área de TI).&lt;/li&gt;
&lt;li&gt;Emitir opiniones sobre los riesgos (RDA, RI, RC).&lt;/li&gt;
&lt;li&gt;Calcular el Riesgo de Detección (RD) necesario.&lt;/li&gt;
&lt;li&gt;Recolectar y documentar evidencias.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Tipos de procedimientos para recolectar evidencia&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;| &lt;strong&gt;Tipo&lt;/strong&gt;                                                    | &lt;strong&gt;Descripción&lt;/strong&gt;                                                                                                                                                                       | &lt;strong&gt;Técnicas/Ejemplos&lt;/strong&gt;                                                                                  |
|-------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------|
| &lt;em&gt;Procedimientos para comprender los controles&lt;/em&gt;              | Sirven para verificar si los controles existen, cómo están diseñados y si funcionan                                                                                                  | Cuestionarios, inspecciones, observaciones                                                             |
| &lt;em&gt;Testeo de controles&lt;/em&gt;                                       | Evalúa si los controles internos (gerenciales y de aplicación) funcionan eficazmente. Permite reducir el alcance de otros testeos si los controles son confiables                    | Cuestionarios, inspecciones, observaciones, reprocesamiento de datos                                   |
| &lt;em&gt;Testeos sustantivos de detalle de transacciones&lt;/em&gt;           | Analiza si existen errores o irregularidades en el procesamiento de transacciones individuales. También permite evaluar la eficacia y eficiencia operativa                          | Control de facturación, revisión de cálculos, precios o consultas a base de datos                      |
| &lt;em&gt;Testeos sustantivos de detalle de balances contables&lt;/em&gt;      | Se realiza para emitir un juicio sobre las pérdidas potenciales si el sistema falla en proteger activos o asegurar integridad de los datos. Son los más costosos de realizar        | Control de inventario físico, recálculo de amortizaciones, confirmaciones con terceros                 |
| &lt;em&gt;Procedimientos de revisión analítica&lt;/em&gt;                      | Analizan las relaciones entre ítems de datos para detectar áreas inusuales                                                                                                            | Comparar ingresos por ventas entre distintos períodos                                                  |&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Diferencias entre auditoría interna y externa durante la Planificación&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;| &lt;strong&gt;Aspecto&lt;/strong&gt;                         | &lt;strong&gt;Auditoría Interna&lt;/strong&gt;                                                                                     | &lt;strong&gt;Auditoría Externa&lt;/strong&gt;                                                                                         |
|------------------------------------|------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|
| &lt;em&gt;Objetivo principal&lt;/em&gt;               | Evaluar eficiencia e &lt;em&gt;ineficiencias operativas&lt;/em&gt;                                                            | Evaluar errores en los &lt;em&gt;estados financieros&lt;/em&gt;                                                                  |
| &lt;em&gt;Enfoque&lt;/em&gt;                          | Se enfoca en los procesos internos y su impacto operativo                                                  | Se enfoca en la exactitud y validez de la información contable presentada                                     |
| &lt;em&gt;Tareas de planificación&lt;/em&gt;          | - Asignar personal adecuado- Obtener info del cliente- Identificar áreas de riesgo- Comprender el negocio mediante revisión analítica | - Investigar nuevos clientes- Obtener contrato- Realizar revisión analítica- Identificar riesgos financieros |
| &lt;em&gt;Relación con la organización&lt;/em&gt;     | Empleado interno o parte de la estructura organizativa                                                     | Profesional externo contratado                                                                                |&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Se aplican distintos tipos de procedimientos según el objetivo:
&lt;ul&gt;
&lt;li&gt;Comprender los controles internos.&lt;/li&gt;
&lt;li&gt;Testeo de controles (gerenciales y de aplicación).&lt;/li&gt;
&lt;li&gt;Testeos sustantivos (detalle de transacciones y balances contables).&lt;/li&gt;
&lt;li&gt;Procedimientos de revisión analítica.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Se evalúa la efectividad y eficiencia de los sistemas y se estiman posibles pérdidas&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Se realiza una evaluación final sobre la confiabilidad de los controles y los riesgos.&lt;/li&gt;
&lt;li&gt;Se puede ajustar la profundidad de las pruebas según la fortaleza o debilidad de los controles detectados.&lt;/li&gt;
&lt;li&gt;Se completan los testeos necesarios para emitir un juicio fundamentado&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un informe de auditoría de sistemas de información debe ser claro, estructurado y bien fundamentado, normalmente contiene:&lt;/p&gt;
&lt;p&gt;| &lt;strong&gt;Contenido&lt;/strong&gt;                                       | &lt;strong&gt;Descripción&lt;/strong&gt;                                                                                                                                                          |
|-----------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| &lt;em&gt;Introducción&lt;/em&gt;                                      | Describe los objetivos de la auditoría, es decir, qué se auditó y por qué. Define el alcance del trabajo realizado                                                      |
| &lt;em&gt;Enfoque general utilizado&lt;/em&gt;                         | Explica la metodología aplicada, incluyendo los procedimientos, técnicas y criterios de evaluación                                                                      |
| &lt;em&gt;Resumen de conclusiones críticas&lt;/em&gt;                  | Enumera los hallazgos relevantes, tales como deficiencias en los controles, irregularidades, o riesgos detectados. Describe el grado de impacto de cada hallazgo        |
| &lt;em&gt;Recomendaciones&lt;/em&gt;                                   | Proporciona acciones correctivas o preventivas para mitigar los riesgos encontrados o mejorar la eficiencia del sistema                                                 |
| &lt;em&gt;Datos que respaldan las conclusiones/Hallazgos&lt;/em&gt;    | Incluye la evidencia recolectada (documentación, entrevistas, observaciones, pruebas)                                                                                   |
| &lt;em&gt;Opinión de auditoría&lt;/em&gt;                              | El informe puede poseer una Opinión de auditoría que puede ser: Sin calificación, Con calificación, Adversa o Excusada                                                  |&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tipos de opinión&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;| &lt;strong&gt;Tipo&lt;/strong&gt;             | &lt;strong&gt;Descripción&lt;/strong&gt;                                                                                                     |
|----------------------|----------------------------------------------------------------------------------------------------------------------|
| &lt;em&gt;Excusada&lt;/em&gt;           | En base al trabajo realizado no se puede emitir opinión.                                                            |
| &lt;em&gt;Adversa&lt;/em&gt;            | Se concluye que han ocurrido pérdidas materiales o que los estados financieros están distorsionados.               |
| &lt;em&gt;Con calificación&lt;/em&gt;   | Se concluye que han ocurrido pérdidas materiales o existen registros incorrectos, pero las cantidades no son considerables. |
| &lt;em&gt;Sin calificación&lt;/em&gt;   | El auditor considera que no han ocurrido pérdidas materiales o no existen registros incorrectos.                    |&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gobernanza de TI&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La Gobernanza de Tecnologías de la Información (TI) es un subconjunto del Gobierno Corporativo que se enfoca específicamente en los sistemas de TI, su desempeño y los riesgos asociados a su uso. Se ocupa de la relación entre la estrategia empresarial y la gestión de TI, promoviendo que las decisiones estratégicas relacionadas con TI sean tomadas al más alto nivel de la organización, como una junta directiva corporativa&lt;/p&gt;
&lt;p&gt;Tiene como objetivo asegurar que las inversiones en TI generen valor para la organización y que los riesgos relacionados con la tecnología sean mitigados adecuadamente.&lt;/p&gt;
&lt;p&gt;Según el Instituto de Gobernanza de TI, se define como el conjunto de estructuras y procesos de liderazgo y organizativos que aseguran que las TI sostienen y extienden las estrategias y objetivos de la organización.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;COBIT&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;COBIT (Control Objectives for Information and Related Technologies) es un marco de referencia creado por ISACA que proporciona un conjunto de recursos, principios y buenas prácticas para ayudar a las organizaciones a adoptar una gobernanza y control efectivos de las TI.&lt;/p&gt;
&lt;p&gt;COBIT busca asegurar que las TI generen valor, gestionen los riesgos y utilicen los recursos de manera eficiente, contribuyendo directamente a los objetivos estratégicos de la organización. Para ello, establece una diferenciación clara entre Gobernanza y Administración:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La &lt;strong&gt;Gobernanza&lt;/strong&gt; evalúa, dirige y monitorea.&lt;/li&gt;
&lt;li&gt;La &lt;strong&gt;Administración&lt;/strong&gt; planifica, construye, ejecuta y monitorea.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;| &lt;strong&gt;Elemento&lt;/strong&gt;                  | &lt;strong&gt;Descripción&lt;/strong&gt;                                                                                                                                                                     |
|------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| &lt;em&gt;Procesos de TI&lt;/em&gt;             | Clasificados en 2 grandes dominios: Gobernanza y Administración. Son el eje principal de COBIT.                                                                                    |
| &lt;em&gt;Objetivos de Control&lt;/em&gt;       | Son declaraciones del propósito a alcanzar mediante la implementación de controles en cada proceso de TI. Incluyen tanto objetivos de alto nivel como objetivos detallados.       |
| &lt;em&gt;Prácticas de Control&lt;/em&gt;       | Proveen el &quot;qué&quot;, &quot;cómo&quot; y &quot;por qué&quot; implementar los controles.                                                                                                                     |
| &lt;em&gt;Guías de Auditoría&lt;/em&gt;         | Orientan sobre cómo auditar los procesos de TI, incluyendo entrevistas, revisión documental y evaluación de riesgos de control.                                                    |
| &lt;em&gt;Guías de Administración&lt;/em&gt;    | Incluyen modelos de madurez, factores críticos de éxito (CSF), indicadores clave de metas (KGI) e indicadores clave de desempeño (KPI), facilitando la gestión, evaluación y mejora continua de cada proceso. |&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gobernanza&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Se refiere a &lt;em&gt;quién toma las decisiones&lt;/em&gt; importantes en materia de tecnologías de la información.
Define &lt;strong&gt;la autoridad, responsabilidad y rendición de cuentas&lt;/strong&gt; en la toma de decisiones estratégicas.
Su objetivo es &lt;strong&gt;asegurar que las TI generen valor, se alineen con los objetivos del negocio y gestionen riesgos adecuadamente&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Administración&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Se enfoca en &lt;em&gt;la ejecución de esas decisiones&lt;/em&gt;.
Implica la &lt;strong&gt;planificación, construcción, ejecución y monitoreo&lt;/strong&gt; de las actividades de TI siguiendo la dirección establecida por la gobernanza.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Satisfacer las necesidades de las partes interesadas&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;COBIT busca crear valor para las partes interesadas mediante la obtención de beneficios, la optimización de recursos y la gestión adecuada de riesgos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cubrir la empresa de extremo a extremo&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La gobernanza de TI no se limita al área de sistemas, sino que abarca toda la organización, considerando tanto recursos internos como externos&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Aplicar un marco integrado&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;COBIT se alinea e integra con otros estándares y buenas prácticas (como ITIL, TOGAF, ISO 27001), sirviendo como marco general para la gobernanza y administración de TI empresarial&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Habilitar un enfoque holístico&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;COBIT define y considera siete habilitadores que interactúan entre sí:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Principios, políticas y marcos&lt;/li&gt;
&lt;li&gt;Procesos&lt;/li&gt;
&lt;li&gt;Estructuras organizacionales&lt;/li&gt;
&lt;li&gt;Cultura, ética y comportamiento&lt;/li&gt;
&lt;li&gt;Información&lt;/li&gt;
&lt;li&gt;Servicios, infraestructura y aplicaciones&lt;/li&gt;
&lt;li&gt;Personas, habilidades y aptitudes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Separar las funciones de gobernanza y administración&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;COBIT distingue claramente entre:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gobernanza: evalúa, dirige y monitorea&lt;/li&gt;
&lt;li&gt;Administración: planifica, construye, ejecuta y evalúa las actividades en función de las directivas de gobernanza&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Gobernanza de TI (EDM)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Se centra en evaluar, dirigir y monitorear (EDM: Evaluate, Direct, Monitor). Incluye 5 procesos clave.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Administración de TI&lt;/strong&gt;
Se encarga de planificar, construir, ejecutar y monitorear en línea con la estrategia definida. Se divide en 4 dominios que representan las diferentes etapas del ciclo de vida de los servicios y soluciones de TI con un total de 32 procesos.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;APO – Alinear, Planear y Organizar&lt;/strong&gt; Este dominio abarca la estrategia y la estructura organizacional. Se enfoca en
cómo TI puede contribuir al logro de los objetivos de negocio.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BAI – Construir, Adquirir e Implementar&lt;/strong&gt; Se refiere a la identificación, adquisición, desarrollo, implementación y
mantenimiento de soluciones de TI.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DSS – Entregar, Servicio y Soporte&lt;/strong&gt; Trata sobre la entrega efectiva de servicios de TI, asegurando operaciones
estables y seguras, así como soporte a los usuarios.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MEA – Monitorear y Evaluar&lt;/strong&gt; Se enfoca en la evaluación continua del desempeño, cumplimiento y control interno.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Aplicar COBIT en una organización es importante porque permite establecer un marco estructurado y alineado con las mejores prácticas internacionales para la gobernanza y gestión de TI, asegurando que las tecnologías de la información realmente contribuyan al logro de los objetivos estratégicos del negocio.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Sistemas Colaborativos&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Trabajo Colaborativo&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;El trabajo colaborativo supone poner en común conocimientos, materiales e ideas con la finalidad de compartirlos, normalmente de forma desinteresada para construir un conocimiento común que se pueda utilizar globalmente.&lt;/p&gt;
&lt;p&gt;La mayoría de las tareas que realizan los miembros de estas comunidades en forma colaborativa está soportada por herramientas automatizadas.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-10.D5JIdnEx.png&amp;#x26;w=690&amp;#x26;h=435&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Requerimientos de las Herramientas&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Se deben soportar los dos tipos posibles de interacciones entre los usuarios:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sincrónicos&lt;/strong&gt;: Como salas de chat.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Asincrónicos&lt;/strong&gt;: Foros de correo electrónico.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El soporte debe ser distinto dependiendo si los usuarios interactúan en el mismo o diferente espacio y tiempo:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-11.77eKv_0J.png&amp;#x26;w=678&amp;#x26;h=318&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Modelos Conceptuales de Colaboración&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Permite un intercambio de información directo entre los miembros de una comunidad.&lt;/p&gt;
&lt;p&gt;Es un intercambio simple y sólo requiere que los miembros posean facilidades de correo electrónico. Existen distintas alternativas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los miembros pueden enviarse mensajes entre ellos y todos los otros miembros pueden recibir copias de los mensajes relevantes.&lt;/li&gt;
&lt;li&gt;Los mensajes pueden ser distribuidos en base a listas de distribución.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La forma más sencilla de acceso compartido permite que los miembros puedan acceder directamente a los mismos archivos en un repositorio común en un server particular.&lt;/p&gt;
&lt;p&gt;El problema que presenta es la coordinación para la edición y actualización del mismo documento por distintos miembros.&lt;/p&gt;
&lt;p&gt;Algunas soluciones implementan listas de correo y envío de mails con un aviso de actualización a los miembros, cuando el contenido de la carpeta compartida ha sido modificado.&lt;/p&gt;
&lt;p&gt;El acceso mediante páginas interactivas se produce cuando los usuarios pueden colectivamente editar el mismo material.&lt;/p&gt;
&lt;p&gt;La principal característica es que los miembros pueden colaborar haciendo comentarios, ya sea en tiempo real o en forma asincrónica editando el mismo (o los mismos) documento(s).&lt;/p&gt;
&lt;p&gt;Se asemeja más a una discusión verbal entre los miembros, con el valor agregado de que esta discusión virtual es persistente.&lt;/p&gt;
&lt;p&gt;Nacen en torno a un interés común que comparten sus miembros. Son de naturaleza asincrónica, se permite publicar un mensaje en cualquier momento, quedando este siempre visible para que posteriormente cualquier individuo pueda consultarlo y contestar si lo estima oportuno.&lt;/p&gt;
&lt;p&gt;Debido a la persistencia de la información, la búsqueda, el análisis, la organización y la interpretación de la misma se facilita. Se divide en tres tipos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;PÚBLICOS&lt;/strong&gt;: Cualquier persona puede leer y registrar mensajes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PROTEGIDOS&lt;/strong&gt;: Foros inalterables para usuarios registrados.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PRIVADOS&lt;/strong&gt;: Sólo para usuarios registrados – moderador y miembros.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Son programas independientes que acceden y se comunican a través de un repositorio de datos global (blackboard).&lt;/p&gt;
&lt;p&gt;La solución completa a un problema no tiene que ser pre-planificada. La evolución del estado determina las estrategias a ser adoptadas&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Características&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Múltiples componentes acceden al mismo almacenamiento de datos.&lt;/li&gt;
&lt;li&gt;Los componentes se comunican entre ellos a través de dicha memoria.&lt;/li&gt;
&lt;li&gt;El diseño se centra especialmente en los repositorios compartidos.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Parciales (Se re pudrio todo)&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-12.lttfTe4o.png&amp;#x26;w=893&amp;#x26;h=1163&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-13.BaWlYPWw.png&amp;#x26;w=882&amp;#x26;h=1074&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-14.CkuYvR_9.png&amp;#x26;w=3002&amp;#x26;h=4160&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-15.DEGSl2k_.png&amp;#x26;w=3538&amp;#x26;h=4160&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-16.DfVpniCY.png&amp;#x26;w=899&amp;#x26;h=1599&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-17.CoLzKs27.png&amp;#x26;w=877&amp;#x26;h=436&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-18.BlJIQZRM.png&amp;#x26;w=958&amp;#x26;h=1280&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-19.Dr8-PkVf.png&amp;#x26;w=899&amp;#x26;h=1599&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-20.CszOEjka.png&amp;#x26;w=958&amp;#x26;h=1280&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fparcial1.fQCbOGzU.jpg&amp;#x26;w=1055&amp;#x26;h=1364&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fparcial2.CWUzAmJt.jpg&amp;#x26;w=1087&amp;#x26;h=1426&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.ClDzFWqw.jpg"/><enclosure url="/_astro/thumbnail.ClDzFWqw.jpg"/></item><item><title>ACL Manager</title><link>https://fabianmartinezrincon.com/blog/acl_manager</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/acl_manager</guid><description>Gestor de permisos en linux usando ACL (Access Control List) de forma automatica basado en un excel.</description><pubDate>Sun, 01 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Proyecto para poder gestionar ACLs (Access Control List) en un entorno Linux, al tener muchos comandos repetidos basados en un excel se me ocurrio que seria mas comodo poder formater los comandos de forma automatica usando una interfaz &quot;Amigable&quot;.&lt;/p&gt;
&lt;p&gt;import YoutubeVideo from &quot;@/components/YoutubeVideo.astro&quot;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;✏️ Interfaz&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/476e6921-7b13-475e-9ae3-9389d4fc4ad1&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;⚙️ Setup&lt;/h3&gt;
&lt;p&gt;Creamos el entorno Virtual&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;python -m venv .venv
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Activamos el entorno Virtual&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;.venv\Scripts\activate
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;En caso de no tener permisos, utilizar&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Instalamos las dependencias&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pip install -r requirements.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3&gt;🔴 Botones&lt;/h3&gt;
&lt;h4&gt;&lt;code&gt;Consultar&lt;/code&gt;&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;getfacl /home/redes/Desktop
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Resultador&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# file: home/redes/Desktop
# owner: redes
# group: users
user::rwx
group::---
other::r-x
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h4&gt;&lt;code&gt;Setear&lt;/code&gt;&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;setfacl -m g::--- /home/redes/Desktop; setfacl -m g:group1:rwx /home/redes/Desktop; setfacl -m g:group2:r-x /home/redes/Desktop; setfacl -m g:group3:--- /home/redes/Desktop
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Consultamos el resultado&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# file: home/redes/Desktop
# owner: redes
# group: users
user::rwx
group::---
group:group1:rwx
group:group2:r-x
group:group3:---
mask::rwx
other::r-x
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h4&gt;&lt;code&gt;Seteamos de forma Recursiva&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Antes de setear&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;Comando: ls -l /home/redes/Desktop
total 18124
-rwxrwxrwx  1 redes users      205 May 21 07:57  convert_to_csv.py
-rwxrwxrwx  1 redes users      443 May 21 08:07  ejecutar_permisos.sh
drwxr-xr-x  4 redes users     4096 May 31 07:38  MartinezRincon-0d5ae8-main
-rw-rw-rw-  1 redes users    82968 May 31 06:46  MartinezRincon-0d5ae8-main.zip
-rw-rw-rw-  1 redes users    10282 May 21 06:50 &apos;Permisos 2.0.xlsx&apos;
-rw-r--r--  1 redes users     4345 May 21 07:57  permisos.csv
drwxr-xr-x 16 redes users     4096 May 31 07:02  Python-3.8.10
-rw-r--r--  1 redes users 18433456 May  3  2021  Python-3.8.10.tar.xz
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Despues de setear&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;setfacl -R -m g::--- /home/redes/Desktop; setfacl -R -m g:group1:rwx /home/redes/Desktop; setfacl -R -m g:group2:r-x /home/redes/Desktop; setfacl -R -m g:group3:--- /home/redes/Desktop
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;Comando: ls -l /home/redes/Desktop
total 18124
-rwxrwxrwx+  1 redes users      205 May 21 07:57  convert_to_csv.py
-rwxrwxrwx+  1 redes users      443 May 21 08:07  ejecutar_permisos.sh
drwxrwxr-x+  4 redes users     4096 May 31 07:38  MartinezRincon-0d5ae8-main
-rw-rwxrw-+  1 redes users    82968 May 31 06:46  MartinezRincon-0d5ae8-main.zip
-rw-rwxrw-+  1 redes users    10282 May 21 06:50 &apos;Permisos 2.0.xlsx&apos;
-rw-rwxr--+  1 redes users     4345 May 21 07:57  permisos.csv
drwxrwxr-x+ 16 redes users     4096 May 31 07:02  Python-3.8.10
-rw-rwxr--+  1 redes users 18433456 May  3  2021  Python-3.8.10.tar.xz
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h4&gt;&lt;code&gt;Eliminar&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Antes de eliminar los permisos&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;Comando: getfacl /home/redes/Desktop
getfacl: Removing leading &apos;/&apos; from absolute path names
# file: home/redes/Desktop
# owner: redes
# group: users
user::rwx
group::---
group:group1:rwx
group:group2:r-x
group:group3:---
mask::rwx
other::r-x
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Elimina los permisos actuales y los que tiene por defecto.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;setfacl -b /home/redes/Desktop &amp;#x26;&amp;#x26; setfacl -k /home/redes/Desktop
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;Comando: getfacl /home/redes/Desktop
getfacl: Removing leading &apos;/&apos; from absolute path names
# file: home/redes/Desktop
# owner: redes
# group: users
user::rwx
group::---
other::r-x
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h4&gt;&lt;code&gt;Eliminar R&lt;/code&gt; (De forma Recursiva)&lt;/h4&gt;
&lt;p&gt;Antes de eliminar los permisos&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;Comando: ls -l /home/redes/Desktop
total 18124
-rwxrwxrwx+  1 redes users      205 May 21 07:57  convert_to_csv.py
-rwxrwxrwx+  1 redes users      443 May 21 08:07  ejecutar_permisos.sh
drwxrwxr-x+  4 redes users     4096 May 31 07:38  MartinezRincon-0d5ae8-main
-rw-rwxrw-+  1 redes users    82968 May 31 06:46  MartinezRincon-0d5ae8-main.zip
-rw-rwxrw-+  1 redes users    10282 May 21 06:50 &apos;Permisos 2.0.xlsx&apos;
-rw-rwxr--+  1 redes users     4345 May 21 07:57  permisos.csv
drwxrwxr-x+ 16 redes users     4096 May 31 07:02  Python-3.8.10
-rw-rwxr--+  1 redes users 18433456 May  3  2021  Python-3.8.10.tar.xz
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Elimina los permisos actuales y los que tiene por defecto de forma recursiva.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;setfacl -R -b /home/redes/Desktop &amp;#x26;&amp;#x26; setfacl -R -k /home/redes/Desktop
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;Comando: ls -l /home/redes/Desktop
total 18124
-rwx---rwx  1 redes users      205 May 21 07:57  convert_to_csv.py
-rwx---rwx  1 redes users      443 May 21 08:07  ejecutar_permisos.sh
drwx---r-x  4 redes users     4096 May 31 07:38  MartinezRincon-0d5ae8-main
-rw----rw-  1 redes users    82968 May 31 06:46  MartinezRincon-0d5ae8-main.zip
-rw----rw-  1 redes users    10282 May 21 06:50 &apos;Permisos 2.0.xlsx&apos;
-rw----r--  1 redes users     4345 May 21 07:57  permisos.csv
drwx---r-x 16 redes users     4096 May 31 07:02  Python-3.8.10
-rw----r--  1 redes users 18433456 May  3  2021  Python-3.8.10.tar.xz
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h4&gt;&lt;code&gt;Setear Por Defecto&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Antes de setear&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;Comando: getfacl /home/redes/Desktop
getfacl: Removing leading &apos;/&apos; from absolute path names
# file: home/redes/Desktop
# owner: redes
# group: users
user::rwx
group::---
other::r-x
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Seteamos los permisos por defecto&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;setfacl -d -m g::--- /home/redes/Desktop; setfacl -d -m g:group1:rwx /home/redes/Desktop; setfacl -d -m g:group2:r-x /home/redes/Desktop; setfacl -d -m g:group3:--- /home/redes/Desktop
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;Comando: getfacl /home/redes/Desktop
getfacl: Removing leading &apos;/&apos; from absolute path names
# file: home/redes/Desktop
# owner: redes
# group: users
user::rwx
group::---
other::r-x
default:user::rwx
default:group::---
default:group:group1:rwx
default:group:group2:r-x
default:group:group3:---
default:mask::rwx
default:other::r-x
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h4&gt;&lt;code&gt;Setear&lt;/code&gt; Por Defecto de Forma Recursiva&lt;/h4&gt;
&lt;p&gt;Antes de setear&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ls -l /home/redes/Desktop
total 18124
-rwx---rwx  1 redes users      205 May 21 07:57  convert_to_csv.py
-rwx---rwx  1 redes users      443 May 21 08:07  ejecutar_permisos.sh
drwx---r-x  4 redes users     4096 May 31 07:38  MartinezRincon-0d5ae8-main
-rw----rw-  1 redes users    82968 May 31 06:46  MartinezRincon-0d5ae8-main.zip
-rw----rw-  1 redes users    10282 May 21 06:50 &apos;Permisos 2.0.xlsx&apos;
-rw----r--  1 redes users     4345 May 21 07:57  permisos.csv
drwx---r-x 16 redes users     4096 May 31 07:02  Python-3.8.10
-rw----r--  1 redes users 18433456 May  3  2021  Python-3.8.10.tar.xz
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Seteamos los permisos por defecto de forma recursiva (Solo se aplica en directorios)&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;setfacl -R -d -m g::--- /home/redes/Desktop; setfacl -R -d -m g:group1:rwx /home/redes/Desktop; setfacl -R -d -m g:group2:r-x /home/redes/Desktop; setfacl -R -d -m g:group3:--- /home/redes/Desktop
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ls -l /home/redes/Desktop
total 18124
-rwx---rwx   1 redes users      205 May 21 07:57  convert_to_csv.py
-rwx---rwx   1 redes users      443 May 21 08:07  ejecutar_permisos.sh
drwx---r-x+  4 redes users     4096 May 31 07:38  MartinezRincon-0d5ae8-main
-rw----rw-   1 redes users    82968 May 31 06:46  MartinezRincon-0d5ae8-main.zip
-rw----rw-   1 redes users    10282 May 21 06:50 &apos;Permisos 2.0.xlsx&apos;
-rw----r--   1 redes users     4345 May 21 07:57  permisos.csv
drwx---r-x+ 16 redes users     4096 May 31 07:02  Python-3.8.10
-rw----r--   1 redes users 18433456 May  3  2021  Python-3.8.10.tar.xz
&lt;/code&gt;&lt;/pre&gt;</content:encoded><h:img src="/_astro/acl.BRiMe3kN.png"/><enclosure url="/_astro/acl.BRiMe3kN.png"/></item><item><title>Emuti</title><link>https://fabianmartinezrincon.com/blog/emuti</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/emuti</guid><description>Proyecto para ingresar datos automaticamente desde Excel a un sistema que esta en constante actualizacion.</description><pubDate>Sun, 01 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Video del flujo de uso&lt;/h1&gt;
&lt;p&gt;import YoutubeVideo from &quot;@/components/YoutubeVideo.astro&quot;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Software para testear NRG de una maquina&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#guia-primer-uso&quot;&gt;Guia Primer Uso&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#-manual-usuario&quot;&gt;Manual de Usuario&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;⚙️ Guia Primer Uso&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Requerimientos del Sistema&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Se necesita tener python version mayor o igual a 3.8.10&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Obtener el repositorio (Existen dos maneras)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Clonar el repositorio por medio de SSH o HTTPS&lt;/li&gt;
&lt;li&gt;Descargar el .zip (luego descomprimirlo)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Instalación del entorno virtual (En caso de no tener permisos)&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;powershell -ExecutionPolicy Bypass -File .\setup.ps1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Ejecutar el programa&lt;/strong&gt; Ejecutar el archivo main.py&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;python main.py
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h4&gt;📝 Manual Usuario&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;Cargar Archivo&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;| &lt;strong&gt;Pantalla Principal&lt;/strong&gt; | &lt;strong&gt;Elegir Archivo&lt;/strong&gt; |
| :---: | :---: |
| &lt;img src=&quot;https://raw.githubusercontent.com/Fabian-Martinez-Rincon/EmuTi/refs/heads/main/assets/img/image.png&quot; alt=&quot;Alt text&quot;&gt; |  &lt;img src=&quot;https://raw.githubusercontent.com/Fabian-Martinez-Rincon/EmuTi/refs/heads/main/assets/img/image-1.png&quot; alt=&quot;Alt text&quot;&gt; |&lt;/p&gt;
&lt;p&gt;Seleccionamos un excel con el siguiente formato. (Tenes un excel base como ejemplo en la carpeta &lt;strong&gt;assets&lt;/strong&gt;)&lt;/p&gt;
&lt;p&gt;| SIMBOLO | SIMBOLO | SIMBOLO | SIMBOLO | SIMBOLO | R1 | R2 | R3 | R4 | R5 |
| ------- | ------- | ------- | ------- | ------- | -- | -- | -- | -- | -- |
| FG      | FG      | FG      | FG      | FG      | 23 | 24 | 31 | 9  | 4  |
| FG      | FG      | FG      | FG      | FG      | 13 | 6  | 13 | 27 | 12 |&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SIMBOLO:&lt;/strong&gt; Es el simbolo que tiene el rodillo de la maquina.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;R:&lt;/strong&gt; Es el nro que representa el rodillo de la maquina.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Da igual si el excel tiene otros campos, solo es importante que tenga los solicitados.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Ingreso de Datos&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;import Table from &quot;@/components/Table.astro&quot;&lt;/p&gt;
&lt;h3&gt;📝Transformar TXT&lt;/h3&gt;
&lt;p&gt;Puede que ya tengamos un conjunto de datos en algun TXT con un formato especifico como por ejemplo para los Bonus. Entonces podemos transformar ese TXT a un excel con el formato que necesita el programa.&lt;/p&gt;
&lt;p&gt;El texto se puede modificar de mejor manera con el visual studio code.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://vscode.dev/&quot;&gt;VsCodo Online&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Fabian-Martinez-Rincon/EmuTi/refs/heads/main/assets/img/image-4.png&quot; alt=&quot;Alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Una vez procesado el txt, ese mismo se puede usar para cargarlo en el programa.&lt;/p&gt;</content:encoded><h:img src="/_astro/emuti.BOKPS3e4.png"/><enclosure url="/_astro/emuti.BOKPS3e4.png"/></item><item><title>Hope Trade</title><link>https://fabianmartinezrincon.com/blog/hope_trade</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/hope_trade</guid><description>Proyecto para intercambio y donacion de productos</description><pubDate>Sun, 01 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Proyecto de tradeo tipo Marketplace con donaciones.&lt;/h2&gt;
&lt;p&gt;Video explicando la primera parte del proyecto.&lt;/p&gt;
&lt;p&gt;import YoutubeVideo from &quot;@/components/YoutubeVideo.astro&quot;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Administración de donaciones&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Esta épica engloba todas las HU relacionadas con la gestión de las donaciones dentro del sistema. Esto incluye la capacidad de realizar donaciones con tarjeta, registrar donaciones en efectivo y donaciones de productos. También abarca los listados de donaciones, junto con la opción de ﬁltrado donaciones.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Título&lt;/strong&gt;
&lt;strong&gt;Como&lt;/strong&gt; Usuario Owner &lt;strong&gt;quiero&lt;/strong&gt; ver el listado de las donaciones registradas en el sistema &lt;strong&gt;para&lt;/strong&gt; poder consultarlo y administrarlo.&lt;/p&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito al mostrar donaciones
&lt;strong&gt;Dado&lt;/strong&gt; el usuario Owner con email &quot;owner@gmail.com&quot; que ha iniciado sesión y que existen donaciones
&lt;strong&gt;Cuando&lt;/strong&gt; selecciona la opción del menú &quot;Listar Historial de Donaciones&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema muestra un listado con las donaciones.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 2:&lt;/strong&gt; Éxito al mostrar Listado vacío de donaciones
&lt;strong&gt;Dado&lt;/strong&gt; el usuario Owner con email &quot;owner@gmail.com&quot; que ha iniciado sesión y que NO existen donaciones
&lt;strong&gt;Cuando&lt;/strong&gt; selecciona la opción del menú &quot;Listar Historial de Donaciones&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema informa que &quot;No existen donaciones realizados en el sistema.&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Título&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Como&lt;/strong&gt; usuario colaborador o usuario owner
&lt;strong&gt;Quiero&lt;/strong&gt; registrar una donación de producto por parte de un usuario registrado o una persona no registrada
&lt;strong&gt;Para&lt;/strong&gt; que quede registrado en el sistema&lt;/p&gt;
&lt;h4&gt;Regla de negocio&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Un usuario colaborador / Owner no puede realizar una donación.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;p&gt;Escenario 1: Éxito al registrar donación de producto donado por un usuario registrado
Dado que un usuario colaborador con email &quot;colaborador@gmail.com&quot; que posee su sesión iniciada y el mail &quot;general@gmail.com&quot; el cual se encuentra registrado y pertenece a un usuario general
Cuando selecciona la opción &quot;Registrado&quot; e ingresa email: &quot;general@gmail.com&quot;, descripción: &quot;Arroz&quot; y selecciona la categoría del producto: &quot;Comida&quot;
Entonces el sistema registra la donación del producto, notifica por email al usuario general y al owner, actualiza el historial de mis donaciones, actualiza el historial de todas las donaciones e informa el éxito de la operación.&lt;/p&gt;
&lt;p&gt;Escenario 2: Éxito al registrar donación de producto donado por una persona no registrada
Dado que un usuario colaborador con email &quot;colaborador@gmail.com&quot; que posee su sesión iniciada y el mail &quot;general@gmail.com&quot; el cual se encuentra registrado y pertenece a un usuario general
Cuando selecciona la opción &quot;No registrado&quot; e ingresa email: &quot;general@gmail.com&quot;, Nombre: &quot;Pepe&quot;, Apellido: &quot;Pérez&quot;, Descripción: &quot;Arroz&quot;, selecciona la categoría del producto: &quot;Comida&quot;.
Entonces el sistema registra la donación del producto, notifica por email al donante y al owner, actualiza el historial de mis donaciones, actualiza el historial de todas las donaciones e informa el éxito de la operación.&lt;/p&gt;
&lt;p&gt;Escenario 3: Fallo al registrar donación de producto por un usuario no registrado.
Dado que un usuario colaborador con email &quot;colaborador@gmail.com&quot; que posee su sesión iniciada y el mail &quot;general@gmail.com&quot; el cual NO se encuentra registrado
Cuando selecciona la opción &quot;Registrado&quot; e ingresa email: &quot;general@gmail.com&quot;, descripción: &quot;Arroz&quot; y selecciona la categoría del producto: &quot;Comida&quot;
Entonces el sistema informa &quot;Usuario no registrado. Por favor, complete los datos requeridos.&quot; y no registra el producto.&lt;/p&gt;
&lt;p&gt;Escenario 4: Fallo al registrar donación en efectivo por una persona con email registrado.
Dado que un usuario colaborador con email &quot;colaborador@gmail.com&quot; que posee su sesión iniciada y el mail &quot;general@gmail.com&quot; el cual se encuentra registrado y pertenece a un usuario general
Cuando selecciona la opción &quot;No registrado&quot; e ingresa email: &quot;general@gmail.com&quot;, Nombre: &quot;Pepe&quot;, Apellido: &quot;Pérez&quot;, Descripción: &quot;Arroz&quot;, selecciona la categoría del producto: &quot;Comida&quot;.
Entonces el sistema informa &quot;El Usuario ya se encuentra registrado. Complete los campos como corresponde.&quot; y no registra el producto.&lt;/p&gt;
&lt;p&gt;Escenario 5: Fallo al registrar donación de producto por un usuario colaborador.
Dado que un usuario colaborador con email &quot;colaborador@gmail.com&quot; que posee su sesión iniciada y el mail &quot;colaborador2@gmail.com&quot; el cual se encuentra registrado y pertenece a un usuario colaborador
Cuando selecciona la opción &quot;No registrado&quot; e ingresa email: &quot;colaborador2@gmail.com&quot; Nombre: &quot;Pepe&quot;, Apellido: &quot;Pérez&quot;, Descripción: &quot;Arroz&quot;, selecciona la categoría del producto: &quot;Comida&quot;.
Entonces el sistema informa &quot;El donante no puede ser ni Dueño, ni Colaborador. Complete los campos como corresponde.&quot; y no registra el producto.&lt;/p&gt;
&lt;p&gt;Título
&lt;strong&gt;Como&lt;/strong&gt; Usuario general
&lt;strong&gt;quiero&lt;/strong&gt; ver mi historial de donaciones
&lt;strong&gt;para&lt;/strong&gt; tener un registro de las donaciones que realice&lt;/p&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito al mostrar mis donaciones
&lt;strong&gt;Dado&lt;/strong&gt; el usuario general con email &quot;general@gmail.com&quot; que ha iniciado sesión y que realizo donaciones
&lt;strong&gt;Cuando&lt;/strong&gt; selecciona la opción del menú &quot;Listar Mi Historial de Donaciones&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema muestra un listado con todas las donaciones del usuario.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 2:&lt;/strong&gt; Éxito al mostrar Listado vacío de donaciones
&lt;strong&gt;Dado&lt;/strong&gt;el usuario general con email &quot;general2@gmail.com&quot; que ha iniciado sesión y que NO realizo donaciones
&lt;strong&gt;Cuando&lt;/strong&gt; selecciona la opción del menú  &quot;Listar Mi Historial de Donaciones&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema informa que &quot;No hay donaciones disponibles.&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Título
• Como usuario General
• Quiero donar con tarjeta
• Para colaborar con Caritas&lt;/p&gt;
&lt;h4&gt;Regla de negocio&lt;/h4&gt;
&lt;p&gt;• El usuario general DEBE ser titular de la tarjeta.&lt;/p&gt;
&lt;p&gt;#Criterios de aceptación&lt;/p&gt;
&lt;p&gt;• Escenario 1: Éxito al realizar la donación
Dado el usuario general “Pérez Juan” que tiene la sesión iniciada, con una tarjeta valida que le pertenece, posee fondos y que hay conexión con el servidor bancario
• Cuando ingresa monto: $1000, selecciona tarjeta “VISA”, Numero de tarjeta: “4970110000001029”, fecha de expiración “05/27”, código de seguridad: “111” y nombre del titular(Como aparece en la tarjeta): &quot;Perez Juan&quot; y presiona “Donar”
Entonces el sistema registra el pago, notifica por email al usuario general y al owner, actualiza el historial de mis donaciones, actualiza el historial de todas las donaciones e informa el éxito de la operación.&lt;/p&gt;
&lt;p&gt;• Escenario 2: Fallo al realizar la donación por fondos insuficientes
Dado el usuario general “Pérez Juan” que tiene la sesión iniciada, con una tarjeta valida que le pertenece, NO posee fondos y que hay conexión con el servidor bancario
• Cuando ingresa monto: $1000, selecciona tarjeta “VISA”, Numero de tarjeta: “4970110000001029”, fecha de expiración “05/27”, código de seguridad: “111” y nombre del titular(Como aparece en la tarjeta): &quot;Perez Juan&quot; y presiona “Donar”
Entonces el sistema informa “El monto ingresado supera el saldo de la tarjeta.” Y no registra el pago.&lt;/p&gt;
&lt;p&gt;• Escenario 3: Fallo al registrar donación por datos de la tarjeta inválidos
Dado el usuario general “Pérez Juan” que tiene la sesión iniciada, con una tarjeta que le pertenece con código de seguridad &quot;333&quot; y que hay conexión con el servidor bancario
• Cuando ingresa monto: $1000, selecciona tarjeta “VISA”, Numero de tarjeta: “4970110000001029”, fecha de expiración “05/27”, código de seguridad: “111” y nombre del titular(Como aparece en la tarjeta): &quot;Perez Juan&quot; y presiona “Donar”
Entonces el sistema informa &quot;Los datos de la tarjeta son inválidos.&quot; y no registra el pago.&lt;/p&gt;
&lt;p&gt;• Escenario 4: Fallo al registrar donación, la tarjeta no le pertenece
Dado el usuario general “Diaz Bruno” que tiene la sesión iniciada, con una tarjeta valida que NO le pertenece, el titular es “Perez Juan” y que hay conexión con el servidor bancario
• Cuando ingresa monto: $1000, selecciona tarjeta “VISA”, Numero de tarjeta: “4970110000001029”, fecha de expiración “05/27”, código de seguridad: “111” y nombre del titular(Como aparece en la tarjeta): &quot;Perez Juan&quot; y presiona “Donar”
Entonces el sistema informa “La donación debe hacerse con una tarjeta a su nombre” Y no registra el pago.&lt;/p&gt;
&lt;p&gt;• Escenario 5: Fallo al registrar donación por error en la conexión con el servidor bancario
Dado el usuario general “Pérez Juan” que tiene la sesión iniciada, con una tarjeta valida que le pertenece, posee fondos y que NO hay conexión con el servidor bancario
• Cuando ingresa monto: $1000, selecciona tarjeta “VISA”, Numero de tarjeta: “4970110000001029”, fecha de expiración “05/27”, código de seguridad: “111” y nombre del titular(Como aparece en la tarjeta): &quot;Perez Juan&quot; y presiona “Donar”
Entonces el sistema informa “Fallo la conexión con el banco.” Y no registra el pago.&lt;/p&gt;
&lt;p&gt;Título&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Como&lt;/strong&gt; Usuario Owner
&lt;strong&gt;quiero&lt;/strong&gt; filtrar entre dos fechas y/o por tipo el listado de las donaciones registradas en el sistema
&lt;strong&gt;para&lt;/strong&gt; poder verificarlo según un tipo de filtrado, verlo y administrarlo.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito al mostrar Listado filtrado por tipo de donación entre dos fechas
&lt;strong&gt;Dado&lt;/strong&gt;  el usuario owner con email &quot;hopetrade08@gmail.com&quot; que ha iniciado sesión, el tipo de donación &quot;efectivo&quot;,  la fecha de inicio &quot;30/01/2024&quot; que no es mayor a la fecha de fin, la fecha de fin: &quot;30/02/2024&quot; que no es futura al presente y que hay donaciones en efectivo en el rango de fechas.
&lt;strong&gt;Cuando&lt;/strong&gt; selecciona el tipo de donación &quot;Efectivo&quot;, las fechas &quot;30/01/2024&quot; , &quot;30/04/2024&quot; y presiona &quot;Filtrar por Fecha&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema muestra el listado de las donaciones pertenecientes al tipo de donación registradas entre las dos fechas.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 2:&lt;/strong&gt; Éxito al mostrar listado filtrado vacío de donaciones por tipo de donación entre dos fechas
&lt;strong&gt;Dado&lt;/strong&gt;  el usuario owner con email &quot;owner@gmail.com&quot; que ha iniciado sesión, el tipo de donación &quot;efectivo&quot;,  la fecha de inicio &quot;30/01/2024&quot; que no es mayor a la fecha de fin, la fecha de fin: &quot;30/02/2024&quot; que no es futura al presente y que NO hay registro de donaciones entre las fechas pertenecientes al tipo de donación.
&lt;strong&gt;Cuando&lt;/strong&gt; selecciona el tipo de donación &quot;Efectivo&quot;, las fechas &quot;30/01/2024&quot; , &quot;30/04/2024&quot; y presiona &quot;Filtrar por Fecha&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema informa que no existen coincidencias.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 3:&lt;/strong&gt; Fallo listado filtrado por fecha futura al presente
&lt;strong&gt;Dado&lt;/strong&gt;  el usuario owner con email &quot;owner@gmail.com&quot; que ha iniciado sesión, el tipo de donación &quot;efectivo&quot;, la fecha de inicio &quot;30/01/2024&quot; que no es mayor a la fecha de fin, la fecha de fin: &quot;30/02/2025&quot; que es futura al presente
&lt;strong&gt;Cuando&lt;/strong&gt; selecciona el tipo de donación &quot;Efectivo&quot;, las fechas &quot;30/01/2024&quot; , &quot;30/02/2025&quot; y presiona &quot;Filtrar por Fecha&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema informa &quot;La fecha no puede ser futura al presente.&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 4:&lt;/strong&gt; Fallo listado filtrado por fecha de inicio mayor a fecha de fin.
&lt;strong&gt;Dado&lt;/strong&gt;  el usuario owner con email &quot;owner@gmail.com&quot; que ha iniciado sesión, el tipo de donación &quot;efectivo&quot;,  la fecha de inicio &quot;30/04/2024&quot; que ES mayor a la fecha de fin, la fecha de fin: &quot;30/02/2024&quot;
&lt;strong&gt;Cuando&lt;/strong&gt; selecciona el tipo de donación &quot;Efectivo&quot;, las fechas &quot;30/04/2024&quot; , &quot;30/02/2024&quot; y presiona &quot;Filtrar por Fecha&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema informa &quot;La fecha inicial no puede ser mayor a la fecha final.&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Título&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Como&lt;/strong&gt; usuario colaborador o usuario Owner
&lt;strong&gt;Quiero&lt;/strong&gt; registrar una donación en efectivo por parte de un usuario registrado o una persona no registrada
&lt;strong&gt;Para&lt;/strong&gt; que quede registrado en el sistema&lt;/p&gt;
&lt;h4&gt;Regla de negocio&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Un usuario colaborador / Owner no puede realizar una donación.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito al registrar donación en efectivo donado por un usuario registrado
&lt;strong&gt;Dado&lt;/strong&gt; que un usuario colaborador con email &quot;colaborador@gmail.com&quot; que posee su sesión iniciada y el mail &quot;general@gmail.com&quot; el cual se encuentra registrado y pertenece a un usuario general
&lt;strong&gt;Cuando&lt;/strong&gt; selecciona la opción &quot;Registrado&quot; e ingresa email: &quot;general@gmail.com&quot; y monto de la donación: 1000
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema registra la donación en efectivo, notifica por email al usuario general y al owner, actualiza el historial de mis donaciones, actualiza el historial de todas las donaciones e informa el éxito de la operación.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 2:&lt;/strong&gt; Éxito al registrar donación en efectivo donado por una persona no registrada
&lt;strong&gt;Dado&lt;/strong&gt; que un usuario colaborador con email &quot;colaborador@gmail.com&quot; que posee su sesión iniciada y el mail &quot;general@gmail.com&quot; el cual se encuentra registrado y pertenece a un usuario general
&lt;strong&gt;Cuando&lt;/strong&gt; selecciona la opción &quot;No registrado&quot; e ingresa email: &quot;general@gmail.com&quot;, nombre: &quot;Juan&quot;, apellido: &quot;Martínez&quot;, teléfono: 221122112  y monto: 1000.
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema registra la donación en efectivo, notifica por email al usuario general y al owner, actualiza el historial de mis donaciones, actualiza el historial de todas las donaciones e informa el éxito de la operación.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 3:&lt;/strong&gt; Fallo al registrar donación en efectivo por un usuario no registrado.
&lt;strong&gt;Dado&lt;/strong&gt; que un usuario colaborador con email &quot;colaborador@gmail.com&quot; que posee su sesión iniciada y el mail &quot;general@gmail.com&quot; el cual NO se encuentra registrado
&lt;strong&gt;Cuando&lt;/strong&gt; selecciona la opción &quot;Registrado&quot; e ingresa email: &quot;general@gmail.com&quot; y monto de la donación: 1000
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema informa &quot;El usuario no se encuentra registrado. Complete los campos como corresponde.&quot; y no registra el pago.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 4:&lt;/strong&gt; Fallo al registrar donación en efectivo por una persona con email registrado.
&lt;strong&gt;Dado&lt;/strong&gt; que un usuario colaborador con email &quot;colaborador@gmail.com&quot; que posee su sesión iniciada y el mail &quot;general@gmail.com&quot; el cual se encuentra registrado y pertenece a un usuario general
&lt;strong&gt;Cuando&lt;/strong&gt; selecciona la opción &quot;No registrado&quot; e ingresa email: &quot;general@gmail.com&quot;, nombre: &quot;Juan&quot;, apellido: &quot;Martínez&quot;, teléfono: 221122112 y monto de la donación: 1000
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema informa &quot;El Usuario ya se encuentra registrado. Complete los campos como corresponde.&quot; y no registra el pago.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 5:&lt;/strong&gt; Fallo al registrar donación en efectivo por un usuario colaborador.
&lt;strong&gt;Dado&lt;/strong&gt; que un usuario colaborador con email &quot;colaborador@gmail.com&quot; que posee su sesión iniciada y el mail &quot;colaborador2@gmail.com&quot; el cual se encuentra registrado y pertenece a un usuario colaborador
&lt;strong&gt;Cuando&lt;/strong&gt; selecciona la opción &quot;Registrado&quot; e ingresa email: &quot;colaborador2@gmail.com&quot; y monto de la donación: 1000
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema informa &quot;El donante no puede ser ni Dueño, ni Colaborador. Complete los campos como corresponde.&quot; y no registra el pago.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong&gt;Administración de intercambios&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Esta épica engloba todas las HU relacionadas a la gestión de solicitudes de intercambio, desde la realización, selección, rechazo o conﬁrmación, ya sea por parte de un usuario en la página o de un colaborador en la ﬁlial a la hora de un intercambio.&lt;/p&gt;
&lt;p&gt;Título&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Como&lt;/strong&gt; usuario general
&lt;strong&gt;Quiero&lt;/strong&gt; listar las ofertas enviadas
&lt;strong&gt;Para&lt;/strong&gt; consultar su estado&lt;/p&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito al listar las ofertas enviadas
&lt;strong&gt;Dado&lt;/strong&gt; un usuario general con email general@gmail.com y ofertas enviadas que existen&lt;br&gt;
&lt;strong&gt;Cuando&lt;/strong&gt; presiona el botón &quot;Listar Ofertas Enviadas&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema muestra el listado detallado con las ofertas enviadas&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 2:&lt;/strong&gt; Éxito al mostrar un listado vació de ofertas enviadas
&lt;strong&gt;Dado&lt;/strong&gt; un usuario general con email general@gmail.com y que no existen ofertas enviadas
&lt;strong&gt;Cuando&lt;/strong&gt; presiona el botón &quot;Listar Ofertas Enviadas&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; El sistema informa que &quot;No hay Ofertas de intercambios&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Título&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Como&lt;/strong&gt; usuario general
&lt;strong&gt;Quiero&lt;/strong&gt; listar las ofertas recibidas
&lt;strong&gt;Para&lt;/strong&gt; consultar su estado&lt;/p&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito al listar las ofertas recibidas
&lt;strong&gt;Dado&lt;/strong&gt; un usuario general con email general@gmail.com y ofertas recibidas que existen&lt;br&gt;
&lt;strong&gt;Cuando&lt;/strong&gt; presiona el botón &quot;Listar Ofertas Recibidas&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema muestra el listado detallado con las ofertas recibidas&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 2:&lt;/strong&gt; Éxito al mostrar un listado vació de ofertas recibidas
&lt;strong&gt;Dado&lt;/strong&gt; un usuario general con email general@gmail.com con un listado vació de ofertas recibidas
&lt;strong&gt;Cuando&lt;/strong&gt; presiona el botón &quot;Listar Ofertas Recibidas&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; El sistema informa que &quot;No hay Ofertas de intercambios&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Título&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Como&lt;/strong&gt; usuario general
&lt;strong&gt;Quiero&lt;/strong&gt; Rechazar la oferta recibida
&lt;strong&gt;Para&lt;/strong&gt; buscar otra oferta que me interese&lt;/p&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito al rechazar la oferta recibida
&lt;strong&gt;Dado&lt;/strong&gt; un usuario general con email general@gmail.com, una oferta recibida y una descripción &quot;No me interesa&quot;
&lt;strong&gt;Cuando&lt;/strong&gt; presiona &quot;Rechazar&quot;, &quot;detalle el motivo&quot;: &quot;No me interesa&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema informar &quot;Oferta rechazada con éxito&quot;, cambia el estado de la oferta a rechazada, notifica por email al  usuario solicitante y almacena la descripción del rechazo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Título&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Como&lt;/strong&gt; usuario general
&lt;strong&gt;Quiero&lt;/strong&gt; ver el detalle de la oferta recibida
&lt;strong&gt;Para&lt;/strong&gt; determinar si la acepto o no&lt;/p&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito al detallar oferta recibida en estado pendiente
&lt;strong&gt;Dado&lt;/strong&gt; un usuario general con email general@gmail.com y una oferta recibida
&lt;strong&gt;Cuando&lt;/strong&gt; selecciona la oferta en la lista de ofertas recibidas
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema muestra la información detallada de la oferta recibida, su estado actual y las opciones para &quot;Aceptar&quot; , &quot;Rechazar&quot; y  campo &quot;detalle el motivo&quot;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 2:&lt;/strong&gt; Éxito al detallar oferta recibida
&lt;strong&gt;Dado&lt;/strong&gt; un usuario general con email general@gmail.com y una oferta recibida
&lt;strong&gt;Cuando&lt;/strong&gt; selecciona la oferta en la lista de ofertas recibidas
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema muestra la información detallada de la oferta recibida y su estado actual&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Título&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Como&lt;/strong&gt; usuario general
&lt;strong&gt;Quiero&lt;/strong&gt; aceptar la oferta recibida
&lt;strong&gt;Para&lt;/strong&gt; proceder al intercambio de los productos&lt;/p&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito al aceptar la oferta recibida
&lt;strong&gt;Dado&lt;/strong&gt; un usuario general con email general@gmail.com y una oferta recibida
&lt;strong&gt;Cuando&lt;/strong&gt; presiona &quot;Aceptar&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema informa &quot;Oferta aceptada con éxito&quot;, cambia el estado de la oferta a aceptada, notifica por email al usuario solicitante y almacena el intercambio de productos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Título&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Como&lt;/strong&gt; Usuario Colaborador  o Usuario Owner
&lt;strong&gt;quiero&lt;/strong&gt; ver el listado de intercambios pendientes del día
&lt;strong&gt;para&lt;/strong&gt; poder confirmar o cancelar un intercambio.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Reglas de negocio&lt;/h4&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito al listar los intercambios pendientes del día
&lt;strong&gt;Dado&lt;/strong&gt; que el usuario owner con email owner@gmail.com e  intercambios pendientes durante el día que existen
&lt;strong&gt;Cuando&lt;/strong&gt; presiona el botón &quot;Listar Intercambios Pendientes&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema muestra el listado detallado y habilita las opciones para &quot;Confirmar Intercambio&quot;, &quot;Cancelar Intercambio&quot; y el campo &quot;detalle el motivo&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 2:&lt;/strong&gt; Éxito al mostrar listado vacío de intercambios pendientes del día
&lt;strong&gt;Dado&lt;/strong&gt; que el usuario owner con email owner@gmail.com con un listado vacío de intercambios pendientes durante el día
&lt;strong&gt;Cuando&lt;/strong&gt; presiona el botón &quot;Listar Intercambios Pendientes&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; El sistema informa que &quot;No hay intercambios pendientes para el día de hoy.&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Título
Como usuario colaborador o owner
Quiero confirmar un intercambio pendiente del día
Para registrar la confirmación del intercambio realizado&lt;/p&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito al confirmar el intercambio pendiente
&lt;strong&gt;Dado&lt;/strong&gt; un usuario colaborador con email colaborador@gmail.com y una oferta pendiente a intercambio
&lt;strong&gt;Cuando&lt;/strong&gt; selecciona &quot;Confirmar intercambio&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema informa &quot;Intercambio confirmado con éxito&quot;, cambia el estado de la oferta a finalizada, cambia la descripción de la oferta a &quot;Intercambio confirmado con éxito&quot;, cambia la visibilidad de las publicaciones involucradas a &quot;eliminada&quot;, notifica por email a los usuarios ofertante y solicitante, lo registra en el historial de intercambios y lo redirige a intercambios pendientes del día.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Título
Como Usuario Colaborador o Usuario Owner
quiero ver el listado del historial intercambios
para ver los intercambios que se realizaron o no.&lt;/p&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito al mostrar listado
&lt;strong&gt;Dado&lt;/strong&gt; que el usuario colaborador colaborador@gmail.com con una sesión iniciada y el listado de historial de intercambios no está vacío
&lt;strong&gt;Cuando&lt;/strong&gt; presiona el botón &quot;Listar historial de intercambios&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema muestra en pantalla el listado de intercambios realizados&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 2:&lt;/strong&gt; Éxito al mostrar listado vacío
&lt;strong&gt;Dado&lt;/strong&gt; que el usuario colaborador colaborador@gmail.com con una sesión iniciada y el listado de historial de intercambios está vacío
&lt;strong&gt;Cuando&lt;/strong&gt; presiona el botón &quot;Listar historial de intercambios&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema muestra &quot;No existen intercambios realizados en el sistema&quot;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Título
Como usuario colaborador o usuario owner
Quiero Cancelar un intercambio del día
Para registrar la cancelación del intercambio no realizado&lt;/p&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito al Cancelar el Intercambio pendiente
&lt;strong&gt;Dado&lt;/strong&gt; un usuario colaborador con email colaborador@gmail.com, una oferta pendiente a intercambio y una descripción &quot;No estuvieron de Acuerdo&quot;
&lt;strong&gt;Cuando&lt;/strong&gt;  ingresa &quot;detalle el motivo&quot;: &quot;No estuvieron de acuerdo&quot; y presiona &quot;Cancelar intercambio&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema informa &quot;Intercambio cancelado con éxito&quot;, cambia el estado de la oferta a finalizada, notifica por email a los usuarios ofertante y solicitante, almacena la descripción de la cancelación, lo registra en el historial de intercambios y lo redirige a intercambios pendientes del día.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Título&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Como&lt;/strong&gt; usuario general
&lt;strong&gt;Quiero&lt;/strong&gt; ver el detalle de la oferta enviada
&lt;strong&gt;Para&lt;/strong&gt; consultar su estado&lt;/p&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito al detallar oferta enviada
&lt;strong&gt;Dado&lt;/strong&gt; un usuario general con email general@gmail.com y una oferta enviada
&lt;strong&gt;Cuando&lt;/strong&gt; selecciona la oferta en la lista de ofertas recibidas
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema muestra la información detallada de la oferta enviada y su estado actual&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong&gt;Administración de publicaciones&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Esta épica incluye todas las HU que facilitan el ciclo de vida completo de las publicaciones de intercambio en el sistema, desde la subida y modiﬁcación de visibilidad hasta la interacción y gestión de las mismas mediante listados, detalles, ofertas y comentarios.&lt;/p&gt;
&lt;p&gt;Título
Como Usuario General
Quiero cambiar la visibilidad de una publicación
Para usarla de diferentes maneras&lt;/p&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito archivar una publicación publicada
&lt;strong&gt;Dado&lt;/strong&gt; que el usuario general con mail &quot;general@gmail.com&quot; en su publicación que existe y esta publicada
&lt;strong&gt;Cuando&lt;/strong&gt; presiona el botón &quot;Archivar&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema cambia el estado de la publicación, la archiva e informa  &quot;La publicación se ha actualizado correctamente.&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 2:&lt;/strong&gt; Éxito al publicar una publicación archivada
&lt;strong&gt;Dado&lt;/strong&gt; que el usuario general con mail &quot;general@gmail.com&quot; en su publicación que existe y esta archivada
&lt;strong&gt;Cuando&lt;/strong&gt; presiona el botón &quot;Publicar&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema cambia el estado de la publicación, la publica e informa &quot;La publicación se ha actualizado correctamente.&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Título
Como Usuario General
Quiero Editar una publicación
Para actualizar los datos de la misma&lt;/p&gt;
&lt;h4&gt;Regla de negocio&lt;/h4&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Edición Exitosa
&lt;strong&gt;Dado&lt;/strong&gt; que el usuario general con mail &quot;general@gmail.com&quot; en su publicación que existe
&lt;strong&gt;Cuando&lt;/strong&gt; presiona el botón de &quot;Editar Publicación&quot;, &quot;Nueva Descripción&quot;: &quot;Estado Perfecto&quot; y presiona el botón de &quot;Confirmar&quot;.
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema informa &quot;La publicación se ha actualizado correctamente.&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Título
Como Usuario general
Quiero listar mis publicaciones
Para poder ver las publicaciones que he subido&lt;/p&gt;
&lt;h4&gt;Regla de negocio&lt;/h4&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito al listar mis Publicaciones
&lt;strong&gt;Dado&lt;/strong&gt; el usuario general &quot;general@gmail.com&quot; con sesión iniciada y con publicaciones subidas
&lt;strong&gt;Cuando&lt;/strong&gt;  se presiona el botón &quot;Listar Mis Publicaciones&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema muestra un listado de las publicaciones subidas por el usuario&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 2:&lt;/strong&gt; Éxito al mostrar un listado vacío de publicaciones
&lt;strong&gt;Dado&lt;/strong&gt; el usuario general general2@gmail.com con sesión iniciada y sin publicaciones subidas
&lt;strong&gt;Cuando&lt;/strong&gt; se presiona el botón &quot;Listar Mis Publicaciones&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; El sistema muestra el mensaje &apos;No hay Publicaciones disponibles&apos;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Título&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Como&lt;/strong&gt; usuario general o usuario owner o usuario colaborador&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quiero&lt;/strong&gt; listar las publicaciones&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Para&lt;/strong&gt; conocerlas&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito al mostrar las publicaciones
&lt;strong&gt;Dado&lt;/strong&gt; El Usuario General con Mail &quot;general@gmail.com&quot; y que existen publicaciones subidas
&lt;strong&gt;Cuando&lt;/strong&gt; se presiona el botón &quot;Listar publicaciones&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema muestra un listado con las publicaciones publicas subidas por otros usuarios&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 2:&lt;/strong&gt; Éxito al mostrar un listado vacío de publicaciones&lt;br&gt;
&lt;strong&gt;Dado&lt;/strong&gt; El Usuario General con Mail &quot;general@gmail.com&quot; y no existen publicaciones subidas
&lt;strong&gt;Cuando&lt;/strong&gt;  se presiona el botón &quot;Listar publicaciones&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; El sistema muestra el mensaje &apos;No hay Publicaciones disponibles&apos;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Título
Como usuario general,
Quiero Subir una Publicación,
Para poder intercambiarlo en el futuro&lt;/p&gt;
&lt;h4&gt;Regla de negocio&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;La imagen tiene que ser en formato png o jpg&lt;/li&gt;
&lt;li&gt;Nombre de la publicación único para el usuario&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Subida Exitosa de una Publicación Publica
&lt;strong&gt;Dado&lt;/strong&gt;: que la imagen tiene formato png y el Título &quot;Cafetera&quot; no pertenece a una publicación del usuario
&lt;strong&gt;Cuando&lt;/strong&gt;: Selecciona la imagen, ingresa Título: &quot;Cafetera&quot;, Descripción: &quot;En buen estado&quot;, Horarios Libres (opcional) : &quot;de 13 a 18&quot;, selecciona la categoría &quot;Electrodomésticos&quot; y presiona el botón: &quot;Publicar&quot;
&lt;strong&gt;Entonces&lt;/strong&gt;: Sistema registra la publicación para el usuario como pública, informa &quot;La publicación se ha subido correctamente.&quot; y lo redirige al listado de sus publicaciones&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 2:&lt;/strong&gt; Subida Exitosa de una Publicación Archivada
&lt;strong&gt;Dado&lt;/strong&gt;: que la imagen tiene formato jpg y el Título &quot;Paquete de Arroz&quot; no pertenece a una publicación del usuario
&lt;strong&gt;Cuando&lt;/strong&gt;: Selecciona la imagen, ingresa Título: &quot;Paquete de Arroz&quot;, Descripción: &quot;Largo Fino&quot;, Horarios Libres (opcional) : &quot;de 10 a 18&quot;, selecciona la categoría &quot;Comida&quot; y presiona el botón: &quot;Archivar&quot;
&lt;strong&gt;Entonces&lt;/strong&gt;: Sistema registra la publicación para el usuario como archivada, informa &quot;La publicación se ha subido correctamente.&quot;  y lo redirige al listado de sus publicaciones&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 3:&lt;/strong&gt; Subida Fallida por formato invalido
&lt;strong&gt;Dado&lt;/strong&gt;: que la imagen tiene formato webp y el Título &quot;Mesita de luz&quot; no pertenece a una publicación del usuario
&lt;strong&gt;Cuando&lt;/strong&gt;: Selecciona la imagen, ingresa Título: &quot;Mesita de luz&quot;, Descripción: &quot;Barnizada&quot;, Horarios Libres (opcional) : &quot;de 10 a 18&quot;, selecciona la categoría &quot;Muebles&quot; y presiona el botón: &quot;Publicar&quot;
&lt;strong&gt;Entonces&lt;/strong&gt;: Sistema informa &quot;El archivo debe ser una imagen en formato JPG o PNG.&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 4:&lt;/strong&gt; Subida Fallida por Titulo ya registrado
&lt;strong&gt;Dado&lt;/strong&gt;: que la imagen tiene formato png y el Título &quot;Cafetera&quot; pertenece a una publicación del usuario
&lt;strong&gt;Cuando&lt;/strong&gt;: Selecciona la imagen, ingresa Título: &quot;Cafetera&quot;, Descripción: &quot;En regular estado&quot;, Horarios Libres (opcional) : &quot;de 13 a 18&quot;, selecciona la categoría &quot;Electrodomésticos&quot; y presiona el botón: &quot;Publicar&quot;
&lt;strong&gt;Entonces&lt;/strong&gt;: Sistema informa &quot;Ya tienes una publicación con el mismo título.&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Título&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Como&lt;/strong&gt; usuario general
&lt;strong&gt;Quiero&lt;/strong&gt; comentar una publicación
&lt;strong&gt;Para&lt;/strong&gt; interactuar con otro usuario&lt;/p&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito al comentar publicación ajena
&lt;strong&gt;Dado&lt;/strong&gt; un usuario general con email general@gmail.com y una publicación ajena que existe
&lt;strong&gt;Cuando&lt;/strong&gt; presiona el botón &quot;Comentar&quot;, ingresa &quot;Me interesa&quot; y presiona el botón &quot;Agregar Comentario&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema registra el comentario, informa &quot;¡Comentario agregado con éxito!&quot; y notifica por email al autor de la publicación&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Como&lt;/strong&gt; usuario general o usuario colaborador o usuario owner
&lt;strong&gt;Quiero&lt;/strong&gt; ver la información detallada de una publicación
&lt;strong&gt;Para&lt;/strong&gt; conocer más detalles sobre la misma&lt;/p&gt;
&lt;h4&gt;Reglas de negocio&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Un comentario tiene solo una respuesta&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito al detallar una publicación ajena  sin comentarios siendo usuario general
&lt;strong&gt;Dado&lt;/strong&gt; un usuario general con email &quot;general@gmail.com&quot; que ha iniciado sesión y una publicación ajena que existe
&lt;strong&gt;Cuando&lt;/strong&gt; selecciona la publicación en la lista de publicaciones
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema muestra la información detallada de la publicación, la sección de comentarios con un mensaje &quot;No hay comentarios&quot;, la opción de Comentar y la opción de &quot;Ofertar&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 2:&lt;/strong&gt; Éxito al detallar una publicación propia sin comentarios
&lt;strong&gt;Dado&lt;/strong&gt; un usuario general con email &quot;general@gmail.com&quot; que ha iniciado sesión y una publicación propia que existe,
&lt;strong&gt;Cuando&lt;/strong&gt; selecciona una publicación en la lista de sus publicaciones
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema muestra la información detallada de la publicación y habilita las opciones para &quot;Archivar&quot; o &quot;Publicar&quot; , &quot;Eliminar&quot; y &quot;Editar Publicación&quot;, muestra la sección de comentarios con un mensaje &quot;No hay comentarios&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 3:&lt;/strong&gt; Éxito al detallar una publicación ajena con comentarios siendo usuario general
&lt;strong&gt;Dado&lt;/strong&gt; un usuario general con email &quot;general@gmail.com&quot; que ha iniciado sesión y una publicación ajena que existe
&lt;strong&gt;Cuando&lt;/strong&gt; selecciona la publicación en la lista de publicaciones
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema muestra la información detallada de la publicación, la opción de &quot;Ofertar&quot; , la sección de comentarios y la opción de Comentar&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 4:&lt;/strong&gt; Éxito al detallar una publicación propia con comentarios
&lt;strong&gt;Dado&lt;/strong&gt; un usuario general con email &quot;general@gmail.com&quot; que ha iniciado sesión y una publicación propia que existe
&lt;strong&gt;Cuando&lt;/strong&gt; selecciona una publicación en la lista de sus publicaciones
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema muestra la información detallada de la publicación y habilita las opciones para &quot;Archivar&quot; o &quot;Publicar&quot; , &quot;Eliminar&quot; y &quot;Editar Publicación&quot;, muestra la sección de comentarios con la opción de Responder si corresponde&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 5:&lt;/strong&gt; Éxito al detallar una publicación con comentarios siendo owner
&lt;strong&gt;Dado&lt;/strong&gt; un usuario owner con email &quot;owner@gmail.com&quot; que ha iniciado sesión y una publicación que existe
&lt;strong&gt;Cuando&lt;/strong&gt; selecciona la publicación en la lista de publicaciones
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema muestra la información detallada de la publicación, la sección de comentarios  y habilita las opción para &quot;Eliminar&quot;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 6:&lt;/strong&gt; Éxito al detallar una publicación sin comentarios siendo owner
&lt;strong&gt;Dado&lt;/strong&gt; un usuario owner con email &quot;owner@gmail.com&quot; que ha iniciado sesión y una publicación que existe
&lt;strong&gt;Cuando&lt;/strong&gt; selecciona la publicación en la lista de publicaciones
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema muestra la información detallada de la publicación, la sección de comentarios con un mensaje &quot;No hay comentarios&quot;  y habilita las opción para &quot;Eliminar&quot;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Título&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Como&lt;/strong&gt; usuario general
&lt;strong&gt;Quiero&lt;/strong&gt; responder un comentario
&lt;strong&gt;Para&lt;/strong&gt; interactuar con otro usuario&lt;/p&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito al responder comentario
&lt;strong&gt;Dado&lt;/strong&gt; un usuario general con email general@gmail.com y un comentario en una publicación propia
&lt;strong&gt;Cuando&lt;/strong&gt; presiona el botón &quot;Responder&quot;, ingresa &quot;Gracias&quot; y presiona el botón &quot;Enviar Respuesta&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema registra la respuesta, informa &quot;¡Respuesta enviada con exito! y notifica por email al autor del comentario&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Título
Como Usuario General
Quiero Ofertar una publicación
Para Intercambiar un producto que me guste&lt;/p&gt;
&lt;h4&gt;Regla de negocio&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Tener al menos una publicación subida por parte del usuario general&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Oferta fallida por falta de publicaciones subidas.&lt;br&gt;
&lt;strong&gt;Dado&lt;/strong&gt; que el usuario general general@gmail.com no posee publicaciones subidas.
&lt;strong&gt;Cuando&lt;/strong&gt; toca la opción de ofertar
&lt;strong&gt;Entonces&lt;/strong&gt; El sistema muestra un mensaje &quot;No tienes publicaciones para ofertar.&quot; y el usuario general es redirigido al listado de publicaciones.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 2:&lt;/strong&gt; Oferta fallida por horario invalido
&lt;strong&gt;Dado&lt;/strong&gt; que el usuario general general@gmail.com y tiene al menos 1 publicación subida
&lt;strong&gt;Cuando&lt;/strong&gt; toca la opción de ofertar, selecciona una publicación propia, filial &quot;La Plata&quot;, Fecha &quot;1/1/2025&quot; Hora &quot;07:00&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; El sistema informa &quot;El horario debe estar entre las 8 AM y las 7 PM.&quot;, y no se realiza la oferta.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 3:&lt;/strong&gt; Oferta fallida por fecha invalida
&lt;strong&gt;Dado&lt;/strong&gt; que el usuario general generalCaritas@gmail.com y tiene al menos 1 publicación subida
&lt;strong&gt;Cuando&lt;/strong&gt; toca la opción de ofertar, selecciona una publicación propia, filial &quot;La Plata&quot;, Fecha &quot;01/06/2001&quot; y Hora &quot;15:00&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; El sistema informa &quot;La fecha no puede ser anterior a la actual.&quot;  y no se realiza la oferta.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 4:&lt;/strong&gt; Oferta exitosa
&lt;strong&gt;Dado&lt;/strong&gt; que el usuario general general@gmail.com y tiene al menos 1 publicación subida
&lt;strong&gt;Cuando&lt;/strong&gt; el selecciona una publicación propia, filial &quot;La Plata&quot;, Fecha &quot;10/06/2024&quot; y Hora &quot;18:00&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; El sistema muestra un mensaje &quot;Oferta realizada con éxito.&quot;, registra la oferta realizada al sistema, y envía una notificación al email sobre la oferta de intercambio al usuario ofertado. El Usuario general es redirigido al listado de publicaciones.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 5:&lt;/strong&gt; Oferta fallida por repetir la oferta
&lt;strong&gt;Dado&lt;/strong&gt; que el usuario general general@gmail.com, tiene al menos 1 publicación subida, ya posee una oferta de intercambio similar realizada con el mismo producto ofertado y mismo ofrecido.
&lt;strong&gt;Cuando&lt;/strong&gt; toca la opción de ofertar, selecciona una publicación propia, filial &quot;La Plata&quot;, Fecha &quot;1/10/2025&quot; Hora &quot;09:00&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; El sistema redirige al usuario a la página de ofertas enviadas, informa &quot;Ya existe una oferta similar, revise sus ofertas enviadas&quot;. Y no se realiza la oferta.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 6:&lt;/strong&gt; Oferta fallida por oferta similar recibida
&lt;strong&gt;Dado&lt;/strong&gt; que el usuario general general2@gmail.com, tiene al menos 1 publicación subida, ya posee una oferta de intercambio similar recibida con los mismos productos.
&lt;strong&gt;Cuando&lt;/strong&gt; toca la opción de ofertar, selecciona una publicación propia, filial &quot;La Plata&quot;, Fecha &quot;1/10/2025&quot; Hora &quot;09:00&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; El sistema redirige al usuario a la página de ofertas recibidas, informa &quot;Ya existe una oferta similar, revise sus ofertas recibidas&quot;. Y no se realiza la oferta.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Titulo&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Como&lt;/strong&gt; Usuario General&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quiero&lt;/strong&gt; eliminar mi publicación&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Para&lt;/strong&gt; que no se encuentre en el sistema&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Regla de Negocio&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;La publicación no debe tener ofertas recibidas pendientes&lt;/li&gt;
&lt;li&gt;La publicación no debe tener una oferta aceptada&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito al eliminar mi publicación sin ofertas pendientes y sin una oferta aceptada
&lt;strong&gt;Dado&lt;/strong&gt; que el usuario general con mail &quot;general@gmail.com&quot; en su publicación que existe, la cual no posee ofertas pendientes y no posee una oferta aceptada.
&lt;strong&gt;Cuando&lt;/strong&gt; presiona el botón de &quot;Eliminar&quot; y acepta la operación
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema elimina la publicación, informa al usuario &quot;La publicación ha sido eliminada correctamente.&quot; y redirecciona a sus publicaciones&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Escenario 2:&lt;/strong&gt; Fallo al eliminar mi publicación con ofertas pendientes
&lt;strong&gt;Dado&lt;/strong&gt; que el usuario general con mail &quot;general@gmail.com&quot; en su publicación que existe, la cual posee ofertas pendientes
&lt;strong&gt;Cuando&lt;/strong&gt; presiona el botón de &quot;Eliminar&quot; y acepta la operación
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema informa al usuario &quot;No Puedes Eliminar esta Publicacion ya que tenes ofertas pendientes.&quot; y redirecciona al listado de ofertas recibidas.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Escenario 3:&lt;/strong&gt; Éxito al cancelar eliminar mi publicación
&lt;strong&gt;Dado&lt;/strong&gt; que el usuario general con mail &quot;general@gmail.com&quot; en su publicación que existe
&lt;strong&gt;Cuando&lt;/strong&gt; presiona el botón de &quot;Eliminar&quot; y cancela la operación
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema cancela la operación&lt;/p&gt;
&lt;h4&gt;Titulo&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Como&lt;/strong&gt; usuario owner&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quiero&lt;/strong&gt; eliminar una publicación que incumple las normas&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Para&lt;/strong&gt; que ya no se encuentre disponible&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Reglas de Negocio&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;La publicación no debe tener ofertas con estado aceptada&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito al eliminar publicación sin ofertas pendientes o aceptadas
&lt;strong&gt;Dado&lt;/strong&gt; El usuario owner con mail owner@gmail.com en una publicación que existe
&lt;strong&gt;Cuando&lt;/strong&gt; presiona el botón de Eliminar y confirma la operación
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema elimina la publicación, redirige a la página principal , informa &quot;La publicación ha sido eliminada correctamente&quot; y notifica por email al usuario General que su publicación fue eliminada por un administrador.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 2:&lt;/strong&gt; Éxito al eliminar publicación con ofertas pendientes
&lt;strong&gt;Dado&lt;/strong&gt; El Usuario owner con mail owner@gmail.com en una publicación que existe
&lt;strong&gt;Cuando&lt;/strong&gt; presionar el botón de Eliminar y confirma la operación
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema cancela las ofertas recibidas o enviadas en estado pendiente, cambia el estado de la oferta a &quot;cancelada&quot; y la descripcion a &quot;La oferta fue cancelada por la eliminacion de La publicacion (titulo de la publicacion)&quot;, notifica por email al usuario solicitante u ofertante (según corresponda) que la oferta fue cancelada, elimina la publicación, redirige a la página principal, informa &quot;La publicación ha sido eliminada correctamente.&quot; y notifica por email al usuario General que su publicación fue eliminada por un administrador.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 3:&lt;/strong&gt; Éxito al cancelar eliminar publicación&lt;br&gt;
&lt;strong&gt;Dado&lt;/strong&gt; El usuario owner con mail owner@gmail.com en una publicación que existe&lt;br&gt;
&lt;strong&gt;Cuando&lt;/strong&gt; presionar el botón de Eliminar y cancela la operación&lt;br&gt;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema cancela la operación.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong&gt;Gestión de usuarios&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Esta épica cubre todas las funciones vinculadas a la administración de usuarios y colaboradores en el sistema, incluyendo el registro, listado y eliminación de cuentas, así como la posibilidad de aplicar sanciones en caso de incumplimientos normativos.&lt;/p&gt;
&lt;p&gt;Título&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Como&lt;/strong&gt; usuario owner
&lt;strong&gt;Quiero&lt;/strong&gt; registrar un colaborador
&lt;strong&gt;Para&lt;/strong&gt; habilitarle las funcionalidades correspondientes&lt;/p&gt;
&lt;h4&gt;Regla de negocio&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;El mail debe ser único en el sistema&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito al registrar colaborador
&lt;strong&gt;Dado&lt;/strong&gt; el mail &quot;gallardolucas003@gmail.com&quot; el cual no se encuentra registrado previamente
&lt;strong&gt;Cuando&lt;/strong&gt; se ingresa Nombre: &quot;Lucas&quot;, Apellido: &quot;Gallardo&quot; y el Email:&quot;gallardolucas003@gmail.com&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema da de alta un nuevo colaborador e informa &quot;Usuario registrado Correctamente!. Se ha enviado un correo electrónico con la contraseña&quot; y lo redirige al listado de usuarios colaboradores&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 2:&lt;/strong&gt; Error al registrar colaborador
&lt;strong&gt;Dado&lt;/strong&gt; el mail &quot;gallardolucas003@gmail.com&quot; el cual se encuentra registrado previamente
&lt;strong&gt;Cuando&lt;/strong&gt; se ingresa Nombre: &quot;Fabian&quot;, Apellido: &quot;Martinez&quot; y el Email:&quot;gallardolucas003@gmail.com&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema informa &quot;El mail ingresado ya se encuentra registrado.&quot; y lo redirige al listado de usuarios colaboradores&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Título&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Como&lt;/strong&gt; usuario colaborador o usuario owner&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quiero&lt;/strong&gt; ver los usuarios generales&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Para&lt;/strong&gt; tener un control de los mismos&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito al listar usuarios Generales
&lt;strong&gt;Dado&lt;/strong&gt; El Usuario Owner con Mail owner@gmail.com y usuarios generales existentes
&lt;strong&gt;Cuando&lt;/strong&gt; se presiona el botón &quot;Listar Usuarios&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema muestra un listado con los usuarios generales&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 2:&lt;/strong&gt; Éxito al mostrar un listado vacío de usuarios generales
&lt;strong&gt;Dado&lt;/strong&gt; El Usuario Owner con Mail owner@gmail.com y que no existen usuarios generales
&lt;strong&gt;Cuando&lt;/strong&gt;  se presiona el botón &quot;Listar Usuarios&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; El sistema informa que &quot;No existen usuarios generales cargados en el sistema&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Título&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Como&lt;/strong&gt; usuario Owner&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quiero&lt;/strong&gt; listar los usuarios colaboradores&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Para&lt;/strong&gt; mantener un control&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito al mostrar usuarios colaboradores
&lt;strong&gt;Dado&lt;/strong&gt; El Usuario Owner con Mail owner@gmail.com y que existen usuarios colaboradores
&lt;strong&gt;Cuando&lt;/strong&gt; presiona el botón &quot;Listar Colaboradores&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema muestra un listado con los usuarios colaboradores&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 2:&lt;/strong&gt; Listado vacío de usuarios colaboradores
&lt;strong&gt;Dado&lt;/strong&gt; El Usuario Owner con Mail owner@gmail.com  y que no existen usuarios colaboradores
&lt;strong&gt;Cuando&lt;/strong&gt;  presiona el botón &quot;Listar Colaboradores&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; El sistema informa que &quot;No existen usuarios colaboradores cargados en el sistema&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Título&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Como&lt;/strong&gt; Usuario Visitante&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quiero&lt;/strong&gt; Registrarme&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Para&lt;/strong&gt; poder acceder a las funcionalidades del sistema&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Reglas de negocio&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;El mail debe ser único en el sistema&lt;/li&gt;
&lt;li&gt;El DNI debe ser único en el sistema&lt;/li&gt;
&lt;li&gt;El usuario visitante debe ser mayor de edad&lt;/li&gt;
&lt;li&gt;La contraseña debe tener mínimo 8 caracteres&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Registro Exitoso
&lt;strong&gt;Dado&lt;/strong&gt; el mail &quot;prueba@gmail.com&quot; el cual no se encuentra registrado previamente, DNI &quot;42342521&quot; el cual no se encuentra registrado previamente, fecha de nacimiento &quot;01/01/2000&quot; la cual pertenece a una persona mayor de edad y contraseña &quot;contraprueba&quot; la cual tiene mínimo 8 caracteres
&lt;strong&gt;Cuando&lt;/strong&gt; se ingresa el Nombre &quot;Nombre1&quot;, Apellido &quot;Apellido1&quot;, Email &quot;prueba@gmail.com&quot;, Contraseña &quot;contraprueba&quot;, DNI &quot;42342521&quot;,  Teléfono &quot;22132131&quot;  y Fecha de Nacimiento &quot;01/01/2000&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; El sistema da de alta un nuevo usuario, redirecciona al Iniciar sesión e informa &quot;Fue registrado correctamente&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 2:&lt;/strong&gt; Registro Fallido por mail ya registrado
&lt;strong&gt;Dado&lt;/strong&gt; el mail &quot;prueba@gmail.com&quot; el cual se encuentra registrado
&lt;strong&gt;Cuando&lt;/strong&gt; se ingresa el Nombre &quot;Nombre2&quot;, Apellido &quot;Apellido2&quot;, Email &quot;prueba@gmail.com&quot;, Contraseña &quot;contracualquiera&quot;, DNI &quot;554353412&quot;, Teléfono &quot;31214523&quot; , Fecha de Nacimiento &quot;01/01/2000&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; El sistema informa &quot;Ya existe un usuario registrado con ese mail&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 3:&lt;/strong&gt; Registro Fallido por dni ya registrado
&lt;strong&gt;Dado&lt;/strong&gt; el mail &quot;pruebadni@gmail.com&quot; el cual no se encuentra registrado previamente y el DNI &quot;42342521&quot; el cual se encuentra registrado previamente
&lt;strong&gt;Cuando&lt;/strong&gt; se ingresa el Nombre &quot;Nombre3&quot;, Apellido &quot;Apellido3&quot;, Email &quot;pruebadni@gmail.com&quot;, Contraseña &quot;contrarepetida&quot;, DNI &quot;42342521&quot;, Teléfono &quot;745345534&quot;,  y fecha de nacimiento &quot;01/01/2000&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; El sistema informa al usuario &quot;Ya existe un usuario registrado con ese dni&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 4:&lt;/strong&gt; Registro Fallido por Persona menor de edad
&lt;strong&gt;Dado&lt;/strong&gt; el mail &quot;menor@gmail.com&quot; el cual no se encuentra registrado previamente, DNI &quot;98413292&quot; el cual no se encuentra registrado previamente, fecha de nacimiento &quot;08/08/2018&quot; la cual no pertenece a una persona mayor de edad
&lt;strong&gt;Cuando&lt;/strong&gt; se ingresa el Nombre &quot;Nombre4&quot;, Apellido &quot;Apellido4&quot;, Email &quot;menor@gmail.com&quot;, Contraseña &quot;contramenor&quot;, DNI &quot;98413292&quot;, Teléfono &quot;4234321&quot;, y fecha de nacimiento &quot;08/08/2018&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; El sistema informa al usuario &quot;Debes tener al menos 18 años para registrarte.&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 5:&lt;/strong&gt; Registro Fallido por contraseña con menos de 8 caracteres
&lt;strong&gt;Dado&lt;/strong&gt; el mail &quot;prueba2@gmail.com&quot; el cual no se encuentra registrado previamente, DNI &quot;31234324&quot; el cual no se encuentra registrado previamente, fecha de nacimiento 01/01/2000 la cual pertenece a una persona mayor de edad y contraseña &quot;hola&quot; la cual tiene menos de 8 caracteres
&lt;strong&gt;Cuando&lt;/strong&gt; se ingresa el Nombre &quot;Nombre5&quot;, Apellido &quot;Apellido5&quot; Email &quot;prueba2@gmail.com&quot;, Contraseña &quot;hola&quot;, DNI &quot;31234324&quot;, Teléfono &quot;4234321&quot; y fecha de nacimiento &quot;01/01/2000&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; El sistema informa que &quot;La contraseña debe tener mínimo 8 caracteres&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Como&lt;/strong&gt; Usuario Owner o Usuario Colaborador
&lt;strong&gt;quiero&lt;/strong&gt; filtrar a los usuarios generales por email  mediante una cadena
&lt;strong&gt;para&lt;/strong&gt; realizar una búsqueda mas rápida&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Reglas de negocio&lt;/h4&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito al filtrar por mail
&lt;strong&gt;Dado&lt;/strong&gt; que el usuario owner con email &quot;owner@gmail.com&quot; que ha iniciado sesión y hay usuarios generales con un mail que coincide con la cadena &quot;general2&quot;
&lt;strong&gt;Cuando&lt;/strong&gt; ingresa &quot;Filtrar por email&quot; : &quot;general2&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema muestra el listado de usuarios generales que comiencen con la cadena &quot;general2&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 2:&lt;/strong&gt; Éxito al filtrar sin coincidencias.
&lt;strong&gt;Dado&lt;/strong&gt; que el usuario colaborador con email &quot;colaborador@gmail.com&quot; que ha iniciado sesión y no hay usuarios generales con un mail que coincide con la cadena &quot;nuevo&quot;
&lt;strong&gt;Cuando&lt;/strong&gt; ingresa &quot;Filtrar por email&quot; : &quot;nuevo&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; El sistema muestra el mensaje &apos;No existen coincidencias&apos;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Título&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Como&lt;/strong&gt; Usuario Owner
&lt;strong&gt;quiero&lt;/strong&gt; filtrar el listado de los usuarios colaboradores por email mediante una cadena
&lt;strong&gt;para&lt;/strong&gt; poder obtener un listado filtrado de los usuarios que coinciden con la cadena ingresada.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Reglas de negocio&lt;/h4&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Filtrado de listado éxitoso
&lt;strong&gt;Dado&lt;/strong&gt; que el usuario owner con email &quot;owner@gmail.com&quot; que ha iniciado sesión y hay usuarios colaboradores con un mail que coincide con la cadena &quot;colaborador2&quot;.
&lt;strong&gt;Cuando&lt;/strong&gt; ingresa &quot;Filtrar por email&quot; : &quot;colaborador2&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema muestra el listado de usuarios colaboradores que comiencen con la cadena &quot;colaborador2&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 2:&lt;/strong&gt; Filtrado de listado éxitoso
&lt;strong&gt;Dado&lt;/strong&gt; que el Usuario Owner con email &quot;owner@gmail.com&quot; que ha iniciado sesión y no hay usuarios colaboradores con un mail que coincide con la cadena &quot;austin&quot;
&lt;strong&gt;Cuando&lt;/strong&gt; ingresa &quot;Filtrar por email&quot; : &quot;austin&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; El sistema muestra el mensaje &apos;No existen coincidencias&apos;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Título
&lt;strong&gt;Como&lt;/strong&gt; Usuario Colaborador o Usuario Owner
&lt;strong&gt;Quiero&lt;/strong&gt; penalizar a un usuario general
&lt;strong&gt;Para&lt;/strong&gt; darle una advertencia&lt;/p&gt;
&lt;h4&gt;Regla de negocio&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;El usuario debe tener menos de 3 penalizaciones.&lt;/li&gt;
&lt;li&gt;El motivo no puede estar en blanco&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito al penalizar usuario con menos de 2 penalizaciones
&lt;strong&gt;Dado&lt;/strong&gt; El Usuario Owner con Mail &quot;hopetrade08@gmail.com&quot;, usuarios generales existentes y el usuario General  &quot;general@gmail.com&quot; posee menos de 2 penalizaciones.
&lt;strong&gt;Cuando&lt;/strong&gt; selecciona al usuario &quot;general@gmail.com&quot;,  Motivo: &quot;Ausencia en el intercambio&quot; y presiona el botón &quot;Penalizar&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema incrementa la cantidad de penalizaciones del usuario general reportado ,lo notifica al email que fue penalizado, informa &quot;El usuario fue penalizado con éxito&quot; y lo redirige al listado de usuarios generales&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 2:&lt;/strong&gt; Éxito al penalizar usuario con 2 penalizaciones
&lt;strong&gt;Dado&lt;/strong&gt;El Usuario Owner con Mail &quot;hopetrade08@gmail.com&quot;, usuarios generales existentes y el usuario General  &quot;general@gmail.com&quot; posee 2 penalizaciones.
&lt;strong&gt;Cuando&lt;/strong&gt; selecciona al usuario &quot;general@gmail.com&quot;,  Motivo: &quot;Otra Ausencia en el intercambio&quot; y presiona el botón &quot;Penalizar&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema elimina al usuario general, lo notifica por mail, elimina todas sus publicaciones, cancela todas las ofertas enviadas o recibidas en estado pendiente o aceptada, cambia el estado de las ofertas a &quot;cancelada&quot;, junto con las descripciones, notifica por email a los usuarios solicitantes u ofertantes (según corresponda) de lo ocurrido, e informa &quot;El usuario fue penalizado y eliminado con éxito&quot;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 3:&lt;/strong&gt; Éxito al cancelar operación
&lt;strong&gt;Dado&lt;/strong&gt; El Usuario Owner con Mail &quot;hopetrade08@gmail.com&quot;, usuarios generales existentes y el usuario General  &quot;general2@gmail.com&quot; posee menos de 3 penalizaciones.
&lt;strong&gt;Cuando&lt;/strong&gt; selecciona un usuario y presiona el botón de &quot;Cerrar&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema cancela la operación.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Titulo&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Como&lt;/strong&gt; usuario owner&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quiero&lt;/strong&gt; eliminar un usuario colaborador&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Para&lt;/strong&gt; que ya no se encuentre en el sistema&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito al eliminar usuario colaborador
&lt;strong&gt;Dado&lt;/strong&gt; El Usuario Owner con Mail &quot;hopetrade08@gmail.com&quot; en el listado de colaboradores y que existen usuarios colaboradores
&lt;strong&gt;Cuando&lt;/strong&gt; selecciona un usuario y presiona el botón de &quot;Eliminar&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema elimina al usuario colaborador e informa &quot;Usuario colaborador eliminado correctamente&quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Escenario 2:&lt;/strong&gt; Éxito al cancelar la eliminación de usuario colaborador
&lt;strong&gt;Dado&lt;/strong&gt; El Usuario Owner con Mail &quot;hopetrade08@gmail.com&quot; en el listado de colaboradores y que existen usuarios colaboradores
&lt;strong&gt;Cuando&lt;/strong&gt; selecciona un usuario y presiona el botón de &quot;Cerrar&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema cancela la operación.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Titulo&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Como&lt;/strong&gt; usuario owner&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quiero&lt;/strong&gt; eliminar un usuario general&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Para&lt;/strong&gt; que ya no se encuentre en el sistema&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito al eliminar
&lt;strong&gt;Dado&lt;/strong&gt; El Usuario Owner con Mail &quot;hopetrade08@gmail.com&quot; y hay usuarios generales existentes
&lt;strong&gt;Cuando&lt;/strong&gt; selecciona un usuario,
Motivo: &quot;Incumplimiento de las normas&quot; y presiona el botón &quot;Eliminar&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema elimina al usuario general, lo notifica por mail,  elimina todas sus publicaciones, cancela todas las ofertas enviadas o recibidas en estado pendiente o aceptada, cambia el estado de las ofertas a &quot;cancelada&quot;, junto con las descripciones, notifica por email a los usuarios solicitantes u ofertantes (según corresponda) de lo ocurrido, e informa &quot;Usuario General eliminado correctamente&quot;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 2:&lt;/strong&gt; Éxito al cancelar la eliminación de usuario general
&lt;strong&gt;Dado&lt;/strong&gt; El Usuario Owner con Mail &quot;hopetrade08@gmail.com&quot; y hay usuarios generales existentes
&lt;strong&gt;Cuando&lt;/strong&gt; selecciona un usuario general y presiona el botón &quot;Cerrar&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema cancela la operación.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong&gt;Manejo de cuenta&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Esta épica engloba todas las HU relacionadas a gestionar la cuenta de usuario en el sistema. Incluye iniciar y cerrar sesión, ver y editar el perﬁl del usuario, acceder al menú de opciones, y revisar las notiﬁcaciones y las ﬁliales disponibles.&lt;/p&gt;
&lt;p&gt;Título
&lt;strong&gt;Como&lt;/strong&gt; usuario visitante o usuario general o usuario colaborador o usuario owner
&lt;strong&gt;Quiero&lt;/strong&gt; listar las filiales
&lt;strong&gt;Para&lt;/strong&gt; conocer su información&lt;/p&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito al listar filiales
&lt;strong&gt;Dado&lt;/strong&gt; un usuario visitante que se encuentra en la pagina principal y un listado de filiales que existe
&lt;strong&gt;Cuando&lt;/strong&gt; presiona en el botón &quot;Ver Filiales&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema muestra un listado de las filiales&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Título&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Como&lt;/strong&gt; usuario general o usuario colaborador o usuario owner&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quiero&lt;/strong&gt; ver mi Perfil&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Para&lt;/strong&gt; ver mis datos personales&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Escenario:&lt;/strong&gt; Éxito al mostrar perfil
&lt;strong&gt;Dado&lt;/strong&gt; El Usuario General con Mail &quot;general@gmail.com&quot; que ha iniciado sesión
&lt;strong&gt;Cuando&lt;/strong&gt; presiona el botón &quot;Ver Perfil&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema muestra la información personal del usuario y el botón &quot;Editar perfil&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Título&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Como&lt;/strong&gt; usuario general o usuario owner o usuario colaborador&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quiero&lt;/strong&gt; editar mi perfil&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Para&lt;/strong&gt; cambiar mis datos de acceso&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Reglas de Negocio&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;La contraseña debe tener mínimo 8 caracteres&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Éxito al Editar Perfil
&lt;strong&gt;Dado&lt;/strong&gt; El Usuario General con Mail &quot;general@gmail.com&quot; y la contraseña nueva &quot;contranueva&quot; la cual tiene mínimo 8 caracteres
&lt;strong&gt;Cuando&lt;/strong&gt; ingresa Contraseña Actual: &quot;contrageneral&quot;, Nueva Contraseña: &quot;contranueva&quot; y presiona el botón &quot;Actualizar&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema registra la contraseña e informa &quot;¡Perfil actualizado correctamente!&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 2:&lt;/strong&gt; Fallo al Editar Perfil por contraseña menor a 8 caracteres
&lt;strong&gt;Dado&lt;/strong&gt; El Usuario General con Mail &quot;general@gmail.com&quot; y la contraseña nueva &quot;contra&quot; la cual tiene menos 8 caracteres
&lt;strong&gt;Cuando&lt;/strong&gt; ingresa Contraseña Actual: &quot;contranueva&quot;, Nueva Contraseña: &quot;contra&quot; y presiona el botón &quot;Actualizar&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema informa &quot;La contraseña debe tener mínimo 8 caracteres&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 3:&lt;/strong&gt; Fallo al Editar Perfil por contraseña actual incorrecta
&lt;strong&gt;Dado&lt;/strong&gt; El Usuario General con Mail &quot;general@gmail.com&quot; y la contraseña nueva &quot;contrafinal&quot; la cual tiene mínimo 8 caracteres
&lt;strong&gt;Cuando&lt;/strong&gt; ingresa Contraseña Actual: &quot;contrarara&quot;, Nueva Contraseña: &quot;contrafinal&quot; y presiona el botón &quot;Actualizar&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema informa &quot;Contraseña actual incorrecta. Inténtalo de nuevo.&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Título
&lt;strong&gt;Como&lt;/strong&gt; usuario general o usuario owner o usuario colaborador
&lt;strong&gt;Quiero&lt;/strong&gt; cerrar sesión
&lt;strong&gt;Para&lt;/strong&gt; salir del sistema&lt;/p&gt;
&lt;h4&gt;Regla de negocio&lt;/h4&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario:&lt;/strong&gt; Éxito al cerrar sesión
&lt;strong&gt;Dado&lt;/strong&gt; el usuario general con email &quot;general@gmail.com&quot; que ha iniciado sesión
&lt;strong&gt;Cuando&lt;/strong&gt; presiona el botón &quot;Cerrar Sesión&quot; y confirma el cierre
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema cierra la sesión del usuario, informa &quot;Se ha cerrado la sesión correctamente.&quot; y lo redirecciona a la página principal&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 2:&lt;/strong&gt; Éxito al cancelar el cierre de sesión
&lt;strong&gt;Dado&lt;/strong&gt; el usuario general con email &quot;general@gmail.com&quot; que ha iniciado sesión
&lt;strong&gt;Cuando&lt;/strong&gt;  presiona el botón &quot;Cerrar Sesión&quot; y cancela el cierre
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema cancela la operación&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Título&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Como&lt;/strong&gt; Usuario general o usuario owner o usuario colaborador&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quiero&lt;/strong&gt; Iniciar Sesión&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Para&lt;/strong&gt; acceder al sistema&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Inicio de sesión exitoso como usuario general
&lt;strong&gt;Dado&lt;/strong&gt; Un Usuario General con el mail &quot;general@gmail.com&quot; el cual pertenece un usuario general y contraseña &quot;contrageneral&quot; la cual es valida
&lt;strong&gt;Cuando&lt;/strong&gt; se ingresa el mail &quot;general@gmail.com&quot; y la contraseña &quot;contrageneral&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema habilita las funcionalidades de usuario general, informa &quot;Inicio de sesión Exitoso&quot; y lo redirige a la página principal&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 2:&lt;/strong&gt; Inicio de sesión exitoso como usuario colaborador
&lt;strong&gt;Dado&lt;/strong&gt; Un Usuario Colaborador con el mail &quot;colaborador@gmail.com&quot; el cual pertenece a un usuario colaborador y contraseña &quot;contracolaborador&quot; la cual es valida
&lt;strong&gt;Cuando&lt;/strong&gt; se ingresa el mail &quot;colaborador@gmail.com&quot; y la contraseña &quot;contracolaborador&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema habilita las funcionalidades de usuario colaborador, informa &quot;Inicio de sesión Exitoso&quot; y lo redirige a la página principal&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 3:&lt;/strong&gt; Inicio de sesión exitoso como usuario owner
&lt;strong&gt;Dado&lt;/strong&gt; Un Usuario Owner con el mail &quot;owner@gmail.com&quot; el cual pertenece a un usuario owner y contraseña &quot;contraowner&quot; la cual es valida
&lt;strong&gt;Cuando&lt;/strong&gt; se ingresa el mail &quot;owner@gmail.com&quot; y la contraseña &quot;contraowner&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema habilita las funcionalidades de usuario owner, informa &quot;Inicio de sesión Exitoso&quot; y y lo redirige a la página principal&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 4:&lt;/strong&gt; Inicio de sesión fallido por correo invalido
&lt;strong&gt;Dado&lt;/strong&gt; Un Usuario General con el mail &quot;invalido@gmail.com&quot; el cual no pertenece a un usuario general del sistema y contraseña &quot;contrarandom&quot;
&lt;strong&gt;Cuando&lt;/strong&gt; se ingresa mail &quot;invalido@gmail.com&quot; y contraseña &quot;contrarandom&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema le informa &quot;El mail o contraseña son incorrectos&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 5:&lt;/strong&gt; Inicio de sesión fallido por contraseña invalida
&lt;strong&gt;Dado&lt;/strong&gt; Un Usuario General el mail &quot;general@gmail.com&quot; el cual pertenece a un usuario general del sistema y contraseña &quot;contraivalida&quot; la cual es invalida
&lt;strong&gt;Cuando&lt;/strong&gt; se ingresa mail &quot;general@gmail.com&quot; y contraseña &quot;contraivalida&quot;
&lt;strong&gt;Entonces&lt;/strong&gt; el sistema le informa &quot;El mail o contraseña son incorrectos&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Título
&lt;strong&gt;Como&lt;/strong&gt; usuario visitante o usuario general o usuario colaborador o usuario owner
&lt;strong&gt;Quiero&lt;/strong&gt; Abrir el menú
&lt;strong&gt;Para&lt;/strong&gt; para seleccionar una opción&lt;/p&gt;
&lt;h4&gt;Criterios de aceptación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 1:&lt;/strong&gt; Ingreso Al Menú Exitoso como Usuario Visitante
&lt;strong&gt;Dado&lt;/strong&gt; un usuario visitante que no ha iniciado sesión
&lt;strong&gt;Cuando&lt;/strong&gt; el Usuario Visitante presiona el botón para desplegar el menú
&lt;strong&gt;Entonces&lt;/strong&gt; El sistema muestra las opciones del Usuario Visitante&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 2:&lt;/strong&gt; Ingreso Al Menú Exitoso como Usuario General
&lt;strong&gt;Dado&lt;/strong&gt; un mail &quot;general@gmail.com&quot; que ha iniciado sesión
&lt;strong&gt;Cuando&lt;/strong&gt; presiona el botón para desplegar el menú
&lt;strong&gt;Entonces&lt;/strong&gt; El sistema muestra las opciones del Usuario General&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 3:&lt;/strong&gt; Ingreso Al Menú Exitoso como Usuario Colaborador
&lt;strong&gt;Dado&lt;/strong&gt; un mail colaborador@gmail.com que ha iniciado sesión
&lt;strong&gt;Cuando&lt;/strong&gt; presiona el botón para desplegar el menú
&lt;strong&gt;Entonces&lt;/strong&gt; El sistema muestra las opciones del Usuario Colaborador&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escenario 4:&lt;/strong&gt; Ingreso Al Menú Exitoso como Usuario Owner
&lt;strong&gt;Dado&lt;/strong&gt; un mail owner@gmail.com que ha iniciado sesión
&lt;strong&gt;Cuando&lt;/strong&gt; el usuario Owner presiona el botón para desplegar el menú
&lt;strong&gt;Entonces&lt;/strong&gt; El sistema muestra las opciones del usuario Owner&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;Integrantes&lt;/h3&gt;
&lt;p&gt;Fabian Martinez Rincon | Lucia Lamella | Lucas Gallardo | Myles Barker
--- | --- | --- | ---
&lt;img src=&quot;https://avatars.githubusercontent.com/u/55964635?s=150&amp;#x26;v=1&quot; alt=&quot;@FabianMartinez&quot;&gt; | &lt;img src=&quot;https://avatars.githubusercontent.com/luciana678?s=150&amp;#x26;v=1&quot; alt=&quot;@luciana678&quot;&gt; | &lt;img src=&quot;https://avatars.githubusercontent.com/u/91075804?s=150&amp;#x26;v=1&quot; alt=&quot;@Lucas-Andres-GF&quot;&gt; | &lt;img src=&quot;https://avatars.githubusercontent.com/Austin-Myles?s=150&amp;#x26;v=1&quot; alt=&quot;@KinnaGt&quot;&gt;
&lt;a href=&quot;https://github.com/fabian-martinez-rincon&quot;&gt;@fabian-martinez-rincon&lt;/a&gt; | &lt;a href=&quot;https://github.com/luciana678&quot;&gt;@luciana678&lt;/a&gt; | &lt;a href=&quot;https://github.com/Lucas-Andres-GF&quot;&gt;@Lucas-Andres-GF&lt;/a&gt; | &lt;a href=&quot;https://github.com/Austin-Myles&quot;&gt;@Austin-Myles&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Para Colaborar&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Para asegurarnos de que estamos en la rama main, antes de crear una mara
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git branch
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Si ya creamos una rama y queremos ir a esa, usamos
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git checkout {nombre-rama}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Si no existe la rama, la creamos con un nombre descriptivo
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git branch {nombre-rama} o git checkout -b {nombre-rama}  //Para movernos despues de crearla
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Una vez que estamos en la rama, hacemos un pull para asegurarnos de que estamos actualizados
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git pull origin main
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Hacemos la pull request
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git add .
git commit -m &quot;Mensaje descriptivo&quot;
git push origin {nombre-rama}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;Requirements&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.python.org/downloads/release/python-3810/&quot;&gt;Python 3.8.10&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;Instalación&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Paso 1 Creamos el entorno Virtual
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;python -m venv .venv
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Paso 2 Activamos el entorno
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;.venv\Scripts\activate
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Dependiendo el idioma
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;.venv/Scripts/activate
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;En caso de no tener permisos
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Instalamos las dependencias (Solo hace falta la primera vez)
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pip install -r requirements.txt -r requirements-dev.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;No hace falta
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;livetw init -d
livetw build
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;Ejecución&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;flask resetdb
flask seeddb
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Para correr la aplicación&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;livetw dev
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;o los siguientes dos&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;flask run --debug
livetw dev --no-flask
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;p&gt;Para configurar las variables de entorno, copiamos y renombramos el archivo &lt;code&gt;.env.example&lt;/code&gt; a &lt;code&gt;.env&lt;/code&gt; y configuramos las variables de entorno.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;DB_PASS = &quot;password_example&quot;
DB_USER = &quot;user_example&quot;
DB_NAME = &quot;database_example&quot;
DB_HOST = &quot;host_example&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3&gt;Extensiones Recomendadas&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Pretier - Code formatter&lt;/li&gt;
&lt;li&gt;Headwind&lt;/li&gt;
&lt;li&gt;Error Lens&lt;/li&gt;
&lt;li&gt;Auto Close Tag&lt;/li&gt;
&lt;li&gt;Auto Rename Tag&lt;/li&gt;
&lt;li&gt;Image preview&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Rutas para la primera demo&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/eliminar_publicaciones&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/eliminar_colaboradores&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/eliminar_generales&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><h:img src="/_astro/charit.BfW_DbQc.png"/><enclosure url="/_astro/charit.BfW_DbQc.png"/></item><item><title>1er Parcial Aspectos Legales</title><link>https://fabianmartinezrincon.com/blog/parcial-aspectos</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/parcial-aspectos</guid><pubDate>Fri, 02 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Evaluaciones&lt;/h1&gt;
&lt;h2&gt;Bancos de Datos&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1- ¿Cuál de los siguientes datos NO se encuentra dentro del ámbito de aplicación de la ley de Bancos de Datos?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Los datos médicos&lt;/li&gt;
&lt;li&gt;[ ] Los datos de identidad mínimos de una persona&lt;/li&gt;
&lt;li&gt;[ ] Los datos estadísticos&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage.BkZl4lSc.png&amp;#x26;w=1219&amp;#x26;h=287&amp;#x26;f=webp&quot; alt=&quot;A&quot;&gt;&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Los datos estadísticos&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Según lo establecido en la Ley 25.326:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Los &lt;strong&gt;datos disociados&lt;/strong&gt;, como los &lt;strong&gt;estadísticos&lt;/strong&gt;, &lt;strong&gt;no permiten identificar al titular&lt;/strong&gt;, ya que fueron tratados para hacer imposible su vinculación con una persona determinada. Por ello, &lt;strong&gt;no se consideran datos personales&lt;/strong&gt; y &lt;strong&gt;están excluidos del ámbito de aplicación&lt;/strong&gt; de la ley.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;En cambio:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los &lt;strong&gt;datos médicos&lt;/strong&gt; son &lt;strong&gt;datos sensibles&lt;/strong&gt; y están expresamente regulados por la ley.&lt;/li&gt;
&lt;li&gt;Los &lt;strong&gt;datos de identidad mínimos&lt;/strong&gt; (nombre, domicilio, DNI, etc.) son &lt;strong&gt;datos personales de acceso público&lt;/strong&gt;, también incluidos en la ley.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;2- La obligación de recabar los datos personales previa autorización de su titular, está vinculada a qué principio&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] La licitud y buena fe&lt;/li&gt;
&lt;li&gt;[ ] La Confidencialidad&lt;/li&gt;
&lt;li&gt;[ ] La calidad de los datos&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-1.C4Lkoak1.png&amp;#x26;w=1188&amp;#x26;h=288&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;La licitud y buena fe&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;De acuerdo con la Ley 25.326 y el &lt;strong&gt;art. 4.2&lt;/strong&gt; establece el:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&quot;principio de licitud y lealtad en el tratamiento de datos personales&quot;&lt;/strong&gt;, indicando que la recolección &lt;strong&gt;no puede hacerse por medios desleales o sin consentimiento expreso e informado&lt;/strong&gt; del titular.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Este principio exige que &lt;strong&gt;el tratamiento de los datos sea legal y transparente&lt;/strong&gt;, y que &lt;strong&gt;el consentimiento informado&lt;/strong&gt; sea &lt;strong&gt;condición necesaria para la recolección&lt;/strong&gt; de datos personales.&lt;/p&gt;
&lt;p&gt;Las otras opciones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidencialidad&lt;/strong&gt; → se refiere a la obligación de &lt;strong&gt;guardar secreto&lt;/strong&gt; sobre los datos recolectados (art. 10).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Calidad de los datos&lt;/strong&gt; → se refiere a que los datos deben ser &lt;strong&gt;veraces, actualizados y pertinentes&lt;/strong&gt; (art. 4.4).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;3- ¿Cuál es el sistema de la ley de bancos de datos respecto a la responsabilidad administrativa?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] No dice nada&lt;/li&gt;
&lt;li&gt;[ ] Establece cuáles son las sanciones y delega en la autoridad de aplicación definir cuáles son las conductas prohibidas&lt;/li&gt;
&lt;li&gt;[ ] Establece las conductas prohibidas y sus respectivas sanciones&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-2.BaA6LPvp.png&amp;#x26;w=1205&amp;#x26;h=349&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;❌ ESTA NO &lt;strong&gt;Establece las conductas prohibidas y sus respectivas sanciones&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La Ley 25.326 &lt;strong&gt;no se limita solo a sancionar&lt;/strong&gt;, sino que &lt;strong&gt;define claramente las conductas prohibidas&lt;/strong&gt; (como la recolección de datos sensibles sin consentimiento, uso indebido, falta de inscripción del banco, cesión sin autorización, etc.) y &lt;strong&gt;establece el régimen sancionatorio correspondiente&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Además:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El artículo 32 &lt;strong&gt;modifica el Código Penal&lt;/strong&gt;, incorporando el &lt;strong&gt;art. 157 bis&lt;/strong&gt;, que &lt;strong&gt;penaliza la revelación indebida de datos&lt;/strong&gt; cuando hay obligación de confidencialidad.&lt;/li&gt;
&lt;li&gt;También se detallan &lt;strong&gt;infracciones administrativas&lt;/strong&gt; y sus sanciones (multas, clausura, etc.) a través de la &lt;strong&gt;autoridad de aplicación&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por lo tanto, &lt;strong&gt;no se delega totalmente&lt;/strong&gt; en la autoridad, sino que la ley ya establece un marco normativo claro.&lt;/p&gt;
&lt;p&gt;En la autoevaluación estaba mal&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Establece cuáles son las sanciones y delega en la autoridad de aplicación definir cuáles son las conductas prohibidas&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Esto significa que, &lt;strong&gt;aunque la ley establece el régimen sancionatorio&lt;/strong&gt;, &lt;strong&gt;las conductas prohibidas no están todas específicamente detalladas en el texto de la ley&lt;/strong&gt;, sino que se &lt;strong&gt;delegan parcialmente en la autoridad de aplicación&lt;/strong&gt; (la Agencia de Acceso a la Información Pública en Argentina) para su reglamentación o interpretación.&lt;/p&gt;
&lt;p&gt;Mi error fue asumir que todas las conductas prohibidas estaban claramente definidas en la ley, cuando en realidad muchas &lt;strong&gt;quedan sujetas a regulación administrativa posterior&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;4- Los datos sensibles&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Están fuera del ámbito de aplicación de la ley&lt;/li&gt;
&lt;li&gt;[ ] Pueden ser tratados siempre que exista un consentimiento informado del titular de los datos&lt;/li&gt;
&lt;li&gt;[ ] Salvo excepciones no pueden ser recogidos ni tratados&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-3.DX8fGBiZ.png&amp;#x26;w=1201&amp;#x26;h=306&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Salvo excepciones no pueden ser recogidos ni tratados&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La Ley 25.326 establece en el &lt;strong&gt;artículo 7.2&lt;/strong&gt; que:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&quot;&lt;strong&gt;Queda prohibida la formación de archivos, registros o bancos de datos que almacenen información que revele directa o indirectamente datos sensibles&lt;/strong&gt;, salvo en los casos expresamente autorizados por la ley.&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Los datos sensibles&lt;/strong&gt; (como salud, vida sexual, origen étnico, religión, opiniones políticas, etc.) solo pueden ser tratados en &lt;strong&gt;casos excepcionales&lt;/strong&gt;, como:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fines estadísticos y disociados&lt;/li&gt;
&lt;li&gt;Instituciones como iglesias o sindicatos, respecto de sus miembros&lt;/li&gt;
&lt;li&gt;Profesionales de la salud, en el marco de su actividad&lt;/li&gt;
&lt;li&gt;Razones de interés público debidamente justificadas&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por tanto, &lt;strong&gt;su tratamiento está prohibido de forma general&lt;/strong&gt; y solo se permite en &lt;strong&gt;supuestos muy específicos&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;5- ¿Cuál de las siguientes hipótesis es una excepción a la obligación de autorización para recabar los datos?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] La contratación de un servicio que necesite acceder a estos datos para ser cumplido&lt;/li&gt;
&lt;li&gt;[ ] La renuncia anticipada del titular de los datos&lt;/li&gt;
&lt;li&gt;[ ] Que la conducta del titular de los datos permite inferir que autoriza la recolección&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-4.VrG9RDA-.png&amp;#x26;w=1185&amp;#x26;h=327&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;La contratación de un servicio que necesite acceder a estos datos para ser cumplido&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Según la &lt;strong&gt;Ley 25.326, artículo 5&lt;/strong&gt;, existen excepciones a la obligación de contar con consentimiento previo para la recolección de datos. Una de ellas es:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“Cuando los datos se recaben en el ejercicio de funciones propias de los poderes del Estado o en virtud de una obligación legal o contractual del titular de los datos.”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Esto incluye los &lt;strong&gt;casos contractuales&lt;/strong&gt;, como cuando alguien &lt;strong&gt;contrata un servicio&lt;/strong&gt; y es &lt;strong&gt;necesario acceder a ciertos datos personales&lt;/strong&gt; para cumplir con ese contrato (por ejemplo, nombre, dirección para entrega, etc.).&lt;/p&gt;
&lt;p&gt;Las otras opciones son incorrectas porque:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;La renuncia anticipada del titular&lt;/strong&gt; no está prevista por la ley y &lt;strong&gt;no suprime sus derechos&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inferir consentimiento por conducta&lt;/strong&gt; está &lt;strong&gt;prohibido&lt;/strong&gt;: el consentimiento debe ser &lt;strong&gt;libre, expreso y por escrito&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Aspectos Generales de la Ciencia Jurídica&lt;/h2&gt;
&lt;p&gt;Primera Clase: en ella veremos el concepto de derecho, la diferencia entre derecho objetivo y subjetivo, las fuentes del derecho y las distintas divisiones, que desde el punto de vista académico se han intentado&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1-&lt;/strong&gt; La ciencia jurídica comprende el conjunto organizado de normas emanadas por un órgano competente&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Verdadero&lt;/li&gt;
&lt;li&gt;[ ] Falso&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-5.DEohgswR.png&amp;#x26;w=1108&amp;#x26;h=210&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;✅ Verdadero&lt;/strong&gt; ESTO ES MAS FALSO QUE LA MIERDA PERO BUENO&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“el conjunto organizado de normas emanadas de un poder estatal competente, las cuales son percibidas por la población como obligatorias.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Esa es justamente la definición que adopta la ciencia jurídica para estudiar el derecho objetivo dentro de un sistema legal específico (como el argentino), por lo tanto la afirmación es &lt;strong&gt;verdadera&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;2-&lt;/strong&gt; El derecho real establece una relación entre dos personas&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Verdadero&lt;/li&gt;
&lt;li&gt;[ ] Falso&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-6.DLxh-Map.png&amp;#x26;w=886&amp;#x26;h=213&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;✅ Falso&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;El &lt;strong&gt;derecho real&lt;/strong&gt; no establece una relación entre dos personas, sino &lt;strong&gt;una relación directa entre una persona y una cosa&lt;/strong&gt; (por ejemplo, la propiedad sobre un bien). Es un derecho que se ejerce &lt;em&gt;erga omnes&lt;/em&gt; (frente a todos), y no entre partes específicas como sucede en los derechos personales u obligaciones.&lt;/p&gt;
&lt;p&gt;Esto se diferencia de los &lt;strong&gt;derechos personales&lt;/strong&gt;, que &lt;strong&gt;sí implican una relación entre personas&lt;/strong&gt;, como un contrato donde una parte exige algo a otra.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;3-&lt;/strong&gt; El ejercicio de un derecho subjetivo siempre es lícito&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Verdadero&lt;/li&gt;
&lt;li&gt;[ ] Falso&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;El &lt;strong&gt;derecho subjetivo&lt;/strong&gt; es la &lt;strong&gt;facultad que tiene una persona&lt;/strong&gt; para exigir algo conforme a la ley. Surge del derecho objetivo y permite hacer valer un interés propio protegido jurídicamente.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-7.CHknEk3O.png&amp;#x26;w=893&amp;#x26;h=219&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;✅ Falso&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;El ejercicio de un &lt;strong&gt;derecho subjetivo&lt;/strong&gt; &lt;strong&gt;no siempre es lícito&lt;/strong&gt;. Aunque el derecho reconoce ciertas facultades, su ejercicio está limitado por el principio de &lt;strong&gt;no abuso del derecho&lt;/strong&gt;.
Como vimos en el texto, si una persona ejerce un derecho en forma abusiva, más allá de los fines legítimos para los cuales fue otorgado, puede incurrir en responsabilidad.&lt;/p&gt;
&lt;p&gt;➡️ Esta doctrina se consolidó con la idea de que los derechos no se ejercen en abstracto, sino en función de &lt;strong&gt;intereses jurídicamente tutelados&lt;/strong&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;COMO MIERDA ABUSAS DE UN DERECHO QUE MIERDA ESTA PASANDOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ODIO ESTA MATERIA PROGRE&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;4-&lt;/strong&gt; Cuando analizamos las fuentes del derecho, el decreto reglamentario de la ley de promoción de software es ley en sentido material pero no formal&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Verdadero&lt;/li&gt;
&lt;li&gt;[ ] Falso&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-8.DvDAmw8s.png&amp;#x26;w=1268&amp;#x26;h=231&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;✅ Verdadero&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En el marco de las &lt;strong&gt;fuentes del derecho&lt;/strong&gt;, una norma tiene &lt;strong&gt;valor de ley en sentido material&lt;/strong&gt; cuando &lt;strong&gt;establece reglas generales y obligatorias&lt;/strong&gt;, sin importar qué órgano la haya dictado.
El &lt;strong&gt;decreto reglamentario&lt;/strong&gt; de la ley de promoción de software es &lt;strong&gt;dictado por el Poder Ejecutivo&lt;/strong&gt;, y si bien &lt;strong&gt;no es una ley formal&lt;/strong&gt; (porque no proviene del Congreso), &lt;strong&gt;sí lo es en sentido material&lt;/strong&gt; ya que tiene contenido normativo obligatorio.&lt;/p&gt;
&lt;p&gt;Este concepto está claramente explicado en el material cuando se diferencia entre:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ley formal&lt;/strong&gt;: emanada del Congreso.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ley material&lt;/strong&gt;: cualquier norma obligatoria dictada por autoridad competente.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;5-&lt;/strong&gt; El objeto de normas supletorias son obligatorias si las partes guardan silencio al momento del contrato, pero pueden apartarse de lo previsto si así lo desean&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Verdadero&lt;/li&gt;
&lt;li&gt;[ ] Falso&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Las &lt;strong&gt;normas supletorias&lt;/strong&gt; son reglas legales que &lt;strong&gt;se aplican solo si las partes no acuerdan otra cosa&lt;/strong&gt;. Se pueden modificar por voluntad de las partes.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-9.Dt7PWe4K.png&amp;#x26;w=1230&amp;#x26;h=243&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;✅ Verdadero&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Las &lt;strong&gt;normas supletorias&lt;/strong&gt; son aquellas que &lt;strong&gt;se aplican automáticamente si las partes no acuerdan otra cosa&lt;/strong&gt; en un contrato. Como dice tu material:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&quot;&lt;em&gt;El acuerdo de voluntades se compone por lo que las partes expresamente acordaron más lo que la ley marca en caso de silencio.&lt;/em&gt;&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sin embargo, estas normas &lt;strong&gt;pueden ser dejadas de lado&lt;/strong&gt; si las partes lo deciden expresamente, ya que &lt;strong&gt;no son imperativas&lt;/strong&gt;. Es decir, &lt;strong&gt;son obligatorias solo si no se pacta lo contrario&lt;/strong&gt;, y &lt;strong&gt;pueden ser sustituidas por la voluntad de las partes&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Estructura Constitucional&lt;/h2&gt;
&lt;p&gt;En esta unidad repasaremos algunos conceptos de derecho constitucional, en particular, la forma del estado y del gobierno y los límites que el derecho le impone al poder estatal.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1- El habeas corpus es&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Un derecho constitucional contra las detenciones arbitrarias&lt;/li&gt;
&lt;li&gt;[ ] Una garantía que protege la libertad ambulatoria&lt;/li&gt;
&lt;li&gt;[ ] Una declaración de derechos humanos&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;El &lt;strong&gt;derecho constitucional&lt;/strong&gt; es la rama del derecho que regula la estructura y el funcionamiento del Estado, definiendo cómo se organizan y limitan los poderes públicos (Ejecutivo, Legislativo y Judicial) y garantizando los derechos fundamentales de las personas. Su base es la Constitución Nacional, que establece las normas más importantes del país y asegura libertades como la igualdad ante la ley, la libertad de expresión y el derecho a la educación.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-10.C1IvygRo.png&amp;#x26;w=1173&amp;#x26;h=555&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Una garantía que protege la libertad ambulatoria&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Según el texto que me compartiste, el &lt;em&gt;habeas corpus&lt;/em&gt; es una &lt;strong&gt;garantía constitucional&lt;/strong&gt; que &lt;strong&gt;tutela la libertad física o ambulatoria&lt;/strong&gt; de una persona frente a detenciones o restricciones arbitrarias. Si bien puede considerarse un derecho constitucional, en sentido técnico y preciso &lt;strong&gt;es una garantía&lt;/strong&gt;, es decir, un mecanismo procesal que permite proteger ese derecho.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;2- Aparte del preámbulo el texto constitucional se divide en:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Dos partes: Declaraciones derechos y garantías y autoridades de la nación&lt;/li&gt;
&lt;li&gt;[ ] Tres partes: Declaraciones derechos y garantías, autoridades de la nación y gobiernos provinciales&lt;/li&gt;
&lt;li&gt;[ ] Cuatro partes: Declaraciones derechos y garantías y tres correspondiendo a cada poder del estado&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-11.CEdyAlRo.png&amp;#x26;w=1177&amp;#x26;h=612&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Dos partes: Declaraciones derechos y garantías y autoridades de la nación&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Según el desarrollo teórico, el texto constitucional argentino —aparte del preámbulo— se divide en dos grandes secciones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Parte dogmática&lt;/strong&gt;: que contiene las declaraciones, derechos y garantías.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Parte orgánica&lt;/strong&gt;: que regula la organización y funcionamiento de los poderes del Estado (autoridades de la Nación).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;3- La monarquía es una forma&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] De nación&lt;/li&gt;
&lt;li&gt;[ ] De estado&lt;/li&gt;
&lt;li&gt;[ ] De gobierno&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-12.jNosQ1KI.png&amp;#x26;w=1174&amp;#x26;h=605&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;De gobierno&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Según el texto que compartiste, &lt;strong&gt;la monarquía&lt;/strong&gt; se clasifica dentro de las &lt;strong&gt;formas de gobierno&lt;/strong&gt;, ya que se refiere al modo en que se ejerce el poder sobre la población. Se contrapone a la república, y puede ser &lt;strong&gt;constitucional&lt;/strong&gt; o &lt;strong&gt;absoluta&lt;/strong&gt;, dependiendo del grado de poder del monarca.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;4- La existencia del federalismo se relaciona&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Con la preexistencia de los gobiernos locales, que retienen para sí las competencias no expresamente delegadas&lt;/li&gt;
&lt;li&gt;[ ] La mayor descentralización de las facultades del estado en beneficio de los gobiernos locales&lt;/li&gt;
&lt;li&gt;[ ] La existencia de provincias en un territorio&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-13.BjsZKd9s.png&amp;#x26;w=1169&amp;#x26;h=649&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Con la preexistencia de los gobiernos locales, que retienen para sí las competencias no expresamente delegadas&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Según el texto, el federalismo argentino se basa en que &lt;strong&gt;las provincias son preexistentes a la Nación&lt;/strong&gt; y, por lo tanto, &lt;strong&gt;toda facultad no delegada permanece en ellas&lt;/strong&gt;, lo que implica una distribución de competencias en favor de los gobiernos locales. Esto es lo que distingue al federalismo de otras formas de organización estatal.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;5-&lt;/strong&gt; Un sistema de control constitucional difuso implica&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Que cualquier juez puede declarar la inconstitucionalidad&lt;/li&gt;
&lt;li&gt;[ ] Que la declaración se expande a los casos similares&lt;/li&gt;
&lt;li&gt;[ ] Que tanto el poder ejecutivo como el judicial puede declararla&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-14.CQIYGMKu.png&amp;#x26;w=1185&amp;#x26;h=606&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Que cualquier juez puede declarar la inconstitucionalidad&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En el sistema de &lt;strong&gt;control constitucional difuso&lt;/strong&gt;, como el que rige en Argentina a nivel federal, &lt;strong&gt;todos los jueces&lt;/strong&gt; tienen la facultad de declarar la inconstitucionalidad de una norma en un caso concreto. Esto lo diferencia del sistema concentrado, donde solo un tribunal específico tiene esa atribución.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Hechos y Actos Jurídicos&lt;/h2&gt;
&lt;p&gt;En esta clase analizaremos como el derecho aprehende los fenomenos externos y les da un significado jurídíco, Veremos el concepto de acto humano voluntario tanto ilicito como lícito y dentro de estos últimos, nos detendremos en aquellos que tienen la intención de generar relaciones jurídicas&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1- La intervención de un oficial público le da carácter a un instrumento cuando&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Lo realiza según la normativa y con las formalidades previstas para tal acto&lt;/li&gt;
&lt;li&gt;[ ] Solo si el oficial público le otorga tal característica&lt;/li&gt;
&lt;li&gt;[ ] Debe ser certificado por el Estado mediante su presentación ante la autoridad competente&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-15.ChZt1J-U.png&amp;#x26;w=1188&amp;#x26;h=342&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[x] &lt;strong&gt;Lo realiza según la normativa y con las formalidades previstas para tal acto&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La intervención del oficial público no es por sí sola suficiente para conferir carácter de instrumento público. Es necesario que &lt;strong&gt;se cumplan además las formalidades legales exigidas por el ordenamiento jurídico&lt;/strong&gt;, tal como se establece en el desarrollo sobre los instrumentos públicos y el artículo 979 del Código Civil.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;2- La fe pública otorgada al instrumento se extiende&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] A todo el contenido del instrumento&lt;/li&gt;
&lt;li&gt;[ ] A lo percibido por el oficial público y a las manifestaciones de las partes&lt;/li&gt;
&lt;li&gt;[ ] A lo percibido por el oficial público&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-16.BpZ4WgiM.png&amp;#x26;w=1207&amp;#x26;h=323&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Respuesta correcta: A lo percibido por el oficial público&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La fe pública del instrumento &lt;strong&gt;no se extiende a todo su contenido&lt;/strong&gt;, sino &lt;strong&gt;solo a lo que el oficial público ha visto u oído directamente&lt;/strong&gt;. Las &lt;strong&gt;manifestaciones de las partes&lt;/strong&gt; hacen fe &lt;strong&gt;hasta prueba en contrario&lt;/strong&gt;, mientras que el &lt;strong&gt;hecho de haberlas realizado ante el oficial sí tiene fe pública&lt;/strong&gt;. Por lo tanto, &lt;strong&gt;la autenticidad del instrumento se limita a los hechos cumplidos ante el oficial público&lt;/strong&gt;, según lo establece el texto.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;3- Un hecho se comete con dolo eventual en el caso que el autor&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Se represente el resultado de la acción y dirija sus acciones a su producción&lt;/li&gt;
&lt;li&gt;[ ] Se represente el resultado y le resulte indiferente si se produce o no&lt;/li&gt;
&lt;li&gt;[ ] No se presente ese resultado por negligencia o falta de cuidado&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-17.Bu3Ws4j7.png&amp;#x26;w=1177&amp;#x26;h=366&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Respuesta correcta: Se represente el resultado y le resulte indiferente si se produce o no&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Según el texto, el &lt;strong&gt;dolo eventual&lt;/strong&gt; se configura cuando hay &lt;strong&gt;representación del resultado&lt;/strong&gt;, pero el autor &lt;strong&gt;no actúa directamente para causarlo&lt;/strong&gt;, sino que &lt;strong&gt;le es indiferente si ocurre o no&lt;/strong&gt;. Se diferencia del dolo directo (donde se busca el resultado) y de la culpa (donde no se representa el resultado por negligencia o imprudencia).&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;4- En un acto jurídico accesorio&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] La desaparición del accesorio implica la desaparición del principal&lt;/li&gt;
&lt;li&gt;[ ] La desaparición del principal conlleva la del accesorio&lt;/li&gt;
&lt;li&gt;[ ] Son independientes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-18.CNS7dAGU.png&amp;#x26;w=1167&amp;#x26;h=339&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Respuesta correcta: La desaparición del principal conlleva la del accesorio&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En los actos jurídicos, el &lt;strong&gt;accesorio depende del principal&lt;/strong&gt; para su validez y existencia. Tal como se menciona en el texto, “la nulidad del contrato principal hace caer la garantía dada por la fianza”, es decir, si desaparece el acto principal, &lt;strong&gt;el accesorio también pierde efecto&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;5- La violencia afecta a qué elemento de la voluntad&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] La libertad&lt;/li&gt;
&lt;li&gt;[ ] La intención&lt;/li&gt;
&lt;li&gt;[ ] El discernimiento&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-19.C25Qi0V1.png&amp;#x26;w=1170&amp;#x26;h=292&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Respuesta correcta: La libertad&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Según el texto, &lt;strong&gt;la violencia&lt;/strong&gt; como vicio de los actos jurídicos “se encuentra directamente relacionada con la &lt;strong&gt;libertad&lt;/strong&gt; o por lo menos con su falta”, ya que impide que el autor del acto pueda decidir libremente si lo realiza o no.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Contratos Informaticos&lt;/h2&gt;
&lt;p&gt;Dentro de los actos jurídicos, los contratos permiten la creación y modificacion de relaciones personales entre las partes. En la presente unidad, veremos en primer término los contratos en general, para luego adentrarnos en la problemática de los contratos sobre sistemas de información.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1- Un contrato informático es&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Un contrato sobre sistemas de información&lt;/li&gt;
&lt;li&gt;[ ] Un contrato celebrado mediante una red abierta como internet&lt;/li&gt;
&lt;li&gt;[ ] Un contrato celebrado por un sistema experto&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-20.OUeWYAX6.png&amp;#x26;w=1181&amp;#x26;h=320&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;[x] &lt;strong&gt;Un contrato sobre sistemas de información&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Justificación:&lt;/strong&gt;
Según la definición de Mosset Iturraspe, un contrato informático es aquel mediante el cual se crean, modifican, transmiten o extinguen relaciones obligacionales sobre &lt;strong&gt;bienes y/o servicios informáticos&lt;/strong&gt;. Estos bienes se integran generalmente en un &lt;strong&gt;sistema destinado a la gestión organizada de información&lt;/strong&gt;.
Por lo tanto, lo que caracteriza a este tipo de contrato es su objeto: &lt;strong&gt;los sistemas de información&lt;/strong&gt; y no el medio por el que se celebra (como internet) ni el uso de inteligencia artificial.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;2- Un sistema informático se define por&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Las especificaciones técnicas&lt;/li&gt;
&lt;li&gt;[ ] Las necesidades a satisfacer&lt;/li&gt;
&lt;li&gt;[ ] El hardware entregado&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-21.BcgdDZDw.png&amp;#x26;w=1180&amp;#x26;h=301&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;[x] &lt;strong&gt;Las necesidades a satisfacer&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En los contratos informáticos, el sistema se define como un &lt;strong&gt;conjunto de bienes organizados en función de un objetivo común&lt;/strong&gt;, es decir, lo que &lt;strong&gt;define a un sistema informático es la función que debe cumplir según las necesidades del usuario&lt;/strong&gt;. No basta con especificaciones técnicas o hardware entregado si no se satisface la necesidad planteada por el cliente.
Esto fue claramente sostenido en el fallo &lt;em&gt;“Sisteco S.A. c/ Sujoy”&lt;/em&gt;, donde se concluyó que el cumplimiento de la obligación del proveedor no se mide por la entrega física de elementos, sino por la &lt;strong&gt;adecuación del sistema a los fines previstos&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;3- La entrega del sistema se produce&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Cuando el mismo cumple con los test de funcionamiento&lt;/li&gt;
&lt;li&gt;[ ] Con la instalación del equipo&lt;/li&gt;
&lt;li&gt;[ ] Con la entrega física del material al cliente&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-22.DTumi1cx.png&amp;#x26;w=1178&amp;#x26;h=317&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;[x] &lt;strong&gt;Cuando el mismo cumple con los test de funcionamiento&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En los contratos informáticos, &lt;strong&gt;la entrega del sistema no se limita a la entrega física del hardware ni a su instalación&lt;/strong&gt;, sino que se considera cumplida &lt;strong&gt;cuando el sistema pasa satisfactoriamente el test de aceptación&lt;/strong&gt;.
Este test consiste en una verificación funcional previamente acordada que demuestra que el sistema cumple con los requisitos y objetivos definidos. Por lo tanto, &lt;strong&gt;la entrega efectiva se da cuando el sistema funciona conforme a lo pactado&lt;/strong&gt;, incluyendo su adecuación a las necesidades del usuario.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;4- La obligación de consejo abarca&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Los aspectos económicos y técnicos del proyecto&lt;/li&gt;
&lt;li&gt;[ ] Todos los aspectos del proyecto&lt;/li&gt;
&lt;li&gt;[ ] Solo los aspectos técnicos&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-23.Cs41nyj2.png&amp;#x26;w=1170&amp;#x26;h=292&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;[x] &lt;strong&gt;Solo los aspectos técnicos&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Según el marco teórico sobre contratos informáticos, &lt;strong&gt;la obligación de consejo del proveedor se limita a los aspectos técnicos&lt;/strong&gt; del sistema, como la configuración, compatibilidad, escalabilidad y adecuación a las necesidades funcionales del usuario.
&lt;strong&gt;No abarca aspectos económicos ni decisiones empresariales&lt;/strong&gt;, ya que estos exceden el rol técnico del proveedor y son responsabilidad del cliente o de consultores externos. Esto fue confirmado por la jurisprudencia en casos como &lt;em&gt;“Cajus Face vs IBM”&lt;/em&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;5- ¿Cuál de las siguientes sería una excepción a la obligación de consejo?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Que el cliente sea una empresa líder en su sector&lt;/li&gt;
&lt;li&gt;[ ] El acuerdo de partes&lt;/li&gt;
&lt;li&gt;[ ] La contratación de un consultor externo por parte del cliente&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-24.5tizAnWc.png&amp;#x26;w=1164&amp;#x26;h=317&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;[x] &lt;strong&gt;La contratación de un consultor externo por parte del cliente&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Según el contenido desarrollado sobre contratos informáticos, &lt;strong&gt;cuando el cliente contrata a un consultor especializado para definir el pliego de condiciones&lt;/strong&gt;, la responsabilidad de asesoramiento &lt;strong&gt;se traslada&lt;/strong&gt; de forma parcial o total al consultor.
En ese caso, &lt;strong&gt;el proveedor ya no tiene el deber de interpretar directamente las necesidades del usuario&lt;/strong&gt;, ya que se presume que fueron correctamente traducidas por el profesional contratado por este último.
Esta posición fue sostenida por la jurisprudencia francesa en el caso &lt;em&gt;&quot;Ste. Sopresur N.C.R. vs Sté Groupe Lebrun&quot;&lt;/em&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Contratos Parte General&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1) Todo contrato tiene efectos respecto de terceros&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;( ) Verdadero&lt;/li&gt;
&lt;li&gt;( ) Falso&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-25.Duz0KWHF.png&amp;#x26;w=895&amp;#x26;h=422&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Respuesta: ( ) Falso&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;De acuerdo con el principio general del derecho contractual, &lt;strong&gt;los contratos solo producen efectos entre las partes que los celebran&lt;/strong&gt;, no respecto de terceros. Esta regla está expresamente reconocida en el derecho argentino y es coherente con el principio de relatividad de los contratos.&lt;/p&gt;
&lt;p&gt;Sin embargo, existen &lt;strong&gt;excepciones&lt;/strong&gt; a este principio, como:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Contratos con cláusula a favor de terceros&lt;/strong&gt;, como los seguros de vida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contratos que transfieren derechos reales&lt;/strong&gt;, los cuales pueden ser oponibles a terceros.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esto se encuentra desarrollado tanto en la doctrina como en la jurisprudencia y fue señalado en los materiales bajo estudio (como en el análisis sobre los sujetos en los contratos).&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;2) El contrato se perfecciona con la aceptación de la oferta&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;( ) Verdadero&lt;/li&gt;
&lt;li&gt;( ) Falso&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-26.DcxeJX5q.png&amp;#x26;w=888&amp;#x26;h=446&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Respuesta: (✔) Verdadero&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Según el &lt;strong&gt;Código Civil y Comercial argentino (art. 1148 y siguientes)&lt;/strong&gt; y el material estudiado, &lt;strong&gt;el contrato se perfecciona cuando la oferta es aceptada en tiempo y forma&lt;/strong&gt;. Es decir, cuando hay un &lt;strong&gt;acuerdo de voluntades&lt;/strong&gt; entre dos o más partes sobre un objeto lícito, posible y determinado.&lt;/p&gt;
&lt;p&gt;Este principio es esencial en la &lt;strong&gt;formación del contrato&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La oferta debe contener los elementos esenciales del negocio.&lt;/li&gt;
&lt;li&gt;La aceptación debe ser &lt;strong&gt;lisa y llana&lt;/strong&gt;, sin modificar los términos de la oferta.&lt;/li&gt;
&lt;li&gt;El contrato queda perfeccionado &lt;strong&gt;en el momento del envío de la aceptación&lt;/strong&gt;, salvo pacto en contrario (art. 1154).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;3) Un contrato es un acto jurídico&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;( ) Verdadero&lt;/li&gt;
&lt;li&gt;( ) Falso&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-27.MEoTqo6B.png&amp;#x26;w=891&amp;#x26;h=437&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Respuesta: (✔) Verdadero&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Un contrato es, efectivamente, un &lt;strong&gt;acto jurídico&lt;/strong&gt; porque cumple con todas las características de este tipo de actos: es un hecho &lt;strong&gt;voluntario, lícito y destinado a crear, modificar o extinguir derechos y obligaciones&lt;/strong&gt; entre las partes (art. 944 del Código Civil).&lt;/p&gt;
&lt;p&gt;En el marco de los contratos, se trata de un &lt;strong&gt;acto jurídico bilateral o plurilateral&lt;/strong&gt;, ya que requiere el acuerdo de dos o más voluntades para su existencia.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;4) Solo se pueden celebrar los contratos previstos por la ley&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;( ) Verdadero&lt;/li&gt;
&lt;li&gt;( ) Falso&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-28.DPEtr5L-.png&amp;#x26;w=881&amp;#x26;h=491&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Respuesta: (✔) Falso&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;No es necesario que un contrato esté expresamente previsto por la ley para que sea válido. Existen &lt;strong&gt;contratos nominados&lt;/strong&gt; (regulados por la ley) y &lt;strong&gt;contratos innominados&lt;/strong&gt;, que surgen del &lt;strong&gt;principio de la autonomía de la voluntad&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Mientras no contravengan normas de orden público, la moral o las buenas costumbres, &lt;strong&gt;las partes pueden celebrar contratos atípicos o innominados&lt;/strong&gt;, fijando libremente su contenido, según sus intereses y necesidades. Esto está reconocido tanto en la doctrina como en la jurisprudencia argentina.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;5 El pacto comisorio resuelve el contrato en caso de incumplimiento&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;( ) Verdadero&lt;/li&gt;
&lt;li&gt;( ) Falso&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-29.DX0OQl97.png&amp;#x26;w=886&amp;#x26;h=437&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Respuesta: (✔) Verdadero&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;El &lt;strong&gt;pacto comisorio&lt;/strong&gt; es una cláusula que permite &lt;strong&gt;resolver el contrato&lt;/strong&gt; cuando una de las partes &lt;strong&gt;incumple&lt;/strong&gt; sus obligaciones. Según el artículo 1204 del Código Civil argentino (reformado por la ley 17.711), puede ser:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Expreso&lt;/strong&gt;, si las partes lo pactan explícitamente (no requiere intimación).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tácito&lt;/strong&gt;, si no se pactó expresamente, pero se aplica de todos modos, con la &lt;strong&gt;obligación de intimar&lt;/strong&gt; al cumplimiento en un plazo mínimo de 15 días.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Una vez resuelto, el contrato se considera extinguido con &lt;strong&gt;efectos retroactivos&lt;/strong&gt;, y puede dar lugar al reclamo de &lt;strong&gt;daños y perjuicios&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;6) El contrato se perfecciona con la firma de las partes&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;( ) Verdadero&lt;/li&gt;
&lt;li&gt;( ) Falso&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-30.BqRUUnoF.png&amp;#x26;w=883&amp;#x26;h=439&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Respuesta: (✘) Falso&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;El &lt;strong&gt;contrato se perfecciona con el acuerdo de voluntades&lt;/strong&gt;, es decir, &lt;strong&gt;cuando hay aceptación de la oferta&lt;/strong&gt; (art. 1154 del Código Civil). La &lt;strong&gt;firma&lt;/strong&gt; no es un requisito esencial para todos los contratos; es solo una &lt;strong&gt;forma de exteriorizar&lt;/strong&gt; ese consentimiento, especialmente en contratos escritos.
En muchos casos, el contrato es válido &lt;strong&gt;aunque no haya sido firmado&lt;/strong&gt;, siempre que haya consentimiento entre las partes y no se requiera una forma solemne para su validez.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;7) Un contrato unilateral tiene una sola parte&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;( ) Verdadero&lt;/li&gt;
&lt;li&gt;( ) Falso&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-31.BZt4DcGT.png&amp;#x26;w=883&amp;#x26;h=444&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Respuesta: (✘) Falso&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Un contrato &lt;strong&gt;unilateral&lt;/strong&gt; no implica que haya una sola &lt;strong&gt;parte&lt;/strong&gt;, sino que &lt;strong&gt;solo una de las partes asume obligaciones&lt;/strong&gt;. Siempre se requiere al menos &lt;strong&gt;dos partes&lt;/strong&gt; para que exista un contrato (art. 1137 del Código Civil), pero en el contrato unilateral, &lt;strong&gt;solo una queda obligada&lt;/strong&gt;. Ejemplo: una &lt;strong&gt;donación&lt;/strong&gt;, donde el donante se obliga a entregar y el donatario no asume obligación alguna.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;8) Un contrato de adhesión es una convención con cláusulas predispuestas&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;( ) Verdadero&lt;/li&gt;
&lt;li&gt;( ) Falso&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-32.CYmz1b7Q.png&amp;#x26;w=884&amp;#x26;h=456&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Respuesta: (✔) Verdadero&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Un &lt;strong&gt;contrato de adhesión&lt;/strong&gt; es aquel en el que &lt;strong&gt;las cláusulas están predispuestas por una de las partes&lt;/strong&gt; (generalmente la más fuerte económicamente) y la otra parte solo puede &lt;strong&gt;aceptarlas o rechazarlas&lt;/strong&gt;, sin posibilidad real de negociación. Este tipo de contratos es típico en servicios masivos como seguros, banca o telefonía.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;9) Una aceptación que modifique la oferta implica una contraoferta&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;( ) Verdadero&lt;/li&gt;
&lt;li&gt;( ) Falso&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-33.DhtvHJSG.png&amp;#x26;w=887&amp;#x26;h=466&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Respuesta: (✔) Verdadero&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Según el Código Civil argentino (art. 1154), para que el contrato se perfeccione, la aceptación debe ser &lt;strong&gt;lisa y llana&lt;/strong&gt;, es decir, no debe introducir modificaciones a la oferta. Si la aceptación &lt;strong&gt;altera alguno de sus términos&lt;/strong&gt;, no constituye una aceptación propiamente dicha, sino que &lt;strong&gt;implica una nueva oferta o contraoferta&lt;/strong&gt;, que deberá ser aceptada por quien realizó la oferta original.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;10) El objeto de un contrato debe ser posible&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;( ) Verdadero&lt;/li&gt;
&lt;li&gt;( ) Falso&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-34.DHjkwACF.png&amp;#x26;w=881&amp;#x26;h=485&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Respuesta: (✔) Verdadero&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Según el artículo 953 del Código Civil argentino, el objeto de los actos jurídicos —y por lo tanto, de los contratos— debe ser &lt;strong&gt;posible&lt;/strong&gt;, &lt;strong&gt;lícito&lt;/strong&gt;, y &lt;strong&gt;conforme a la moral y las buenas costumbres&lt;/strong&gt;. Un objeto imposible (como obligarse a realizar una acción físicamente irrealizable) torna el contrato &lt;strong&gt;nulo&lt;/strong&gt;, ya que no puede cumplirse válidamente.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Propiedad intelectual&lt;/h2&gt;
&lt;p&gt;En esta clase veremos como el derecho recepta el trabajo intelectual y cuales son las formas de reinvidicar como propios los contenidos (software, marcas, etc) generados por el profesional informático&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1) El dominio público implica que los derechos de explotación económica terminan&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;( ) Verdadero&lt;/li&gt;
&lt;li&gt;( ) Falso&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-35.Bljo41rM.png&amp;#x26;w=951&amp;#x26;h=438&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;✅ Respuesta: Verdadero&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Según el texto, una vez vencido el plazo de protección (70 años desde la muerte del autor), la obra entra en &lt;strong&gt;dominio público&lt;/strong&gt;, lo cual significa que &lt;strong&gt;los derechos patrimoniales&lt;/strong&gt; (económicos) del autor &lt;strong&gt;quedan sin efecto&lt;/strong&gt;, y su utilización pasa a ser libre para todos sin necesidad de autorización ni pago .&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;2) El software se protege mediante la ley de patentes de invención&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;( ) Verdadero&lt;/li&gt;
&lt;li&gt;( ) Falso&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-36.1UYE6H01.png&amp;#x26;w=881&amp;#x26;h=436&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;❌ Respuesta: Falso&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;El software &lt;strong&gt;no se protege&lt;/strong&gt; mediante la Ley de Patentes de Invención (Ley 24.481), sino que está expresamente incluido en la &lt;strong&gt;Ley 11.723 de Propiedad Intelectual&lt;/strong&gt; como una &lt;strong&gt;obra literaria&lt;/strong&gt;. Esta protección fue incorporada luego del fallo “Pellicori” y tiene respaldo en tratados internacionales como el acuerdo TRIPS.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;3) Las marcas comerciales deben ser utilizadas en todas las categorías donde se anotan&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;( ) Verdadero&lt;/li&gt;
&lt;li&gt;( ) Falso&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-37.D9XigPck.png&amp;#x26;w=992&amp;#x26;h=447&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;✅ Respuesta: Falso&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La ley &lt;strong&gt;no exige&lt;/strong&gt; que las marcas se utilicen en &lt;strong&gt;todas&lt;/strong&gt; las categorías donde se anotan. Basta con que se &lt;strong&gt;utilicen en al menos una&lt;/strong&gt; de las categorías inscriptas para que puedan ser renovadas. Las marcas inscritas en categorías donde no se pretende usarlas se conocen como &lt;strong&gt;marcas de defensa&lt;/strong&gt;, y su objetivo es evitar la dilución de la marca por uso de terceros en rubros distintos.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;4) Toda obra registrada debe tener un mínimo de originalidad&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;( ) Verdadero&lt;/li&gt;
&lt;li&gt;( ) Falso&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-38.C-jFUBEC.png&amp;#x26;w=881&amp;#x26;h=441&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;✅ Respuesta: Verdadero&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La ley exige que para que una obra sea protegida por derechos de autor, debe poseer un &lt;strong&gt;mínimo grado de originalidad&lt;/strong&gt;. No se requiere una originalidad absoluta, pero sí debe haber un aporte personal del autor que diferencie la obra de otras preexistentes. Esto es esencial para que la obra pueda considerarse una creación protegible.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;5) La protección ofrecida por la ley de derechos de autor es tecnológicamente neutra&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;( ) Verdadero&lt;/li&gt;
&lt;li&gt;( ) Falso&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-39.BJnOD2PM.png&amp;#x26;w=966&amp;#x26;h=473&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;✅ Respuesta: Verdadero&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La &lt;strong&gt;ley 11.723&lt;/strong&gt; de propiedad intelectual, especialmente tras su reforma, establece una protección &lt;strong&gt;amplia y no taxativa&lt;/strong&gt; que permite incluir nuevas formas de expresión como el software. Su redacción, en especial en el &lt;strong&gt;artículo 1&lt;/strong&gt;, fue diseñada para abarcar toda producción científica, literaria o artística &lt;strong&gt;sin importar el medio o tecnología utilizada&lt;/strong&gt;, lo que confirma su &lt;strong&gt;neutralidad tecnológica&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Primer Parcial Aspectos Legales&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1) Que un sistema de control constitucional sea difuso significa&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Que un cualquier juez puede decretar la inconstitucionalidad&lt;/li&gt;
&lt;li&gt;[ ] Que los efectos de la declaración se extienden a casos similares&lt;/li&gt;
&lt;li&gt;[ ] Que el planteo se puede producir en cualquier momento del proceso&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[x] &lt;strong&gt;Que un cualquier juez puede decretar la inconstitucionalidad&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Un sistema de control constitucional &lt;strong&gt;difuso&lt;/strong&gt; implica que &lt;strong&gt;todos los jueces&lt;/strong&gt; del país tienen la facultad de declarar la inconstitucionalidad de una norma en el caso concreto que estén resolviendo, a diferencia de un sistema &lt;strong&gt;concentrado&lt;/strong&gt;, donde esa facultad está reservada a un tribunal específico (como una Corte Constitucional). ¿Querés que continúe con la siguiente pregunta?&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;2) La propiedad intelectual de un software se regula&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Por la ley de derechos de autor&lt;/li&gt;
&lt;li&gt;[ ] Por la ley de patentes de invención&lt;/li&gt;
&lt;li&gt;[ ] Por una ley especial creada a tal fin&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[x] &lt;strong&gt;Por la ley de derechos de autor&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Según la Ley 11.723 de Propiedad Intelectual (modificada), &lt;strong&gt;el software está protegido como una obra literaria&lt;/strong&gt; dentro del régimen de derechos de autor, y &lt;strong&gt;no&lt;/strong&gt; por la ley de patentes ni por una ley especial creada a tal fin. ¿Seguimos con la siguiente?&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;3) Un sistema de información es una universalidad de bienes definida por&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Los bienes ofrecidos&lt;/li&gt;
&lt;li&gt;[ ] Las necesidades a satisfacer&lt;/li&gt;
&lt;li&gt;[ ] El contenido del contrato&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[x] &lt;strong&gt;Las necesidades a satisfacer&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Un sistema de información se define como una universalidad de bienes &lt;strong&gt;cuya configuración depende de los objetivos y necesidades que debe satisfacer el usuario&lt;/strong&gt;, no simplemente por los bienes ofrecidos ni por lo que se establezca en el contrato .&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;4) Por principio general, los contratos tienen el siguiente efecto respecto de los terceros&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Son obligatorios, salvo pacto en contrario&lt;/li&gt;
&lt;li&gt;[ ] Son obligatorios en los casos que se realizaron por instrumento público&lt;/li&gt;
&lt;li&gt;[ ] No le son oponibles&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[x] &lt;strong&gt;No le son oponibles&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Por principio general, los contratos &lt;strong&gt;sólo producen efectos entre las partes que los celebran&lt;/strong&gt;. Es decir, &lt;strong&gt;no son oponibles a terceros&lt;/strong&gt;, salvo en casos excepcionales previstos por la ley.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;5) La fe pública de un documento se extiende&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] A todo el contenido del documento&lt;/li&gt;
&lt;li&gt;[ ] A lo manifestado por las partes&lt;/li&gt;
&lt;li&gt;[ ] A lo percibido por el oficial público&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[x] &lt;strong&gt;A lo percibido por el oficial público&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La fe pública &lt;strong&gt;se extiende solo a lo que el oficial público ha percibido por sus sentidos o ha constatado personalmente&lt;/strong&gt;, no a lo manifestado por las partes, ya que esas manifestaciones pueden ser falsas o inexactas y no están bajo control directo del oficial.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;6) La obligación de consejo se extiende a qué aspectos del proceso&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Los técnicos&lt;/li&gt;
&lt;li&gt;[ ] Los técnicos y financieros&lt;/li&gt;
&lt;li&gt;[ ] Todos los aspectos del proyecto&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[x] &lt;strong&gt;Los técnicos&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La obligación de consejo del proveedor en contratos informáticos &lt;strong&gt;se limita a los aspectos técnicos&lt;/strong&gt;, relacionados con la funcionalidad, compatibilidad y adecuación del sistema a las necesidades del usuario. No abarca aspectos financieros o empresariales.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;7) ¿Cuál de las siguientes características NO pertenece a las obligaciones personales?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Se establecen entre dos personas&lt;/li&gt;
&lt;li&gt;[ ] Implican un hacer, un dar o un omitir&lt;/li&gt;
&lt;li&gt;[ ] Se crean solo por ley&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[x] &lt;strong&gt;Se crean solo por ley&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Las obligaciones personales &lt;strong&gt;pueden originarse por ley, contrato, cuasicontrato, delito o cuasidelito&lt;/strong&gt;, pero &lt;strong&gt;no se crean exclusivamente por ley&lt;/strong&gt;, por lo que esta opción &lt;strong&gt;no&lt;/strong&gt; pertenece a sus características.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;8) Si una persona actúa con indiferencia respecto a la posibilidad de la producción de un resultado, estamos frente a un caso de&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Dolo Eventual&lt;/li&gt;
&lt;li&gt;[ ] Dolo Directo&lt;/li&gt;
&lt;li&gt;[ ] Culpa con representación&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[x] &lt;strong&gt;Dolo Eventual&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;El &lt;strong&gt;dolo eventual&lt;/strong&gt; ocurre cuando una persona &lt;strong&gt;se representa la posibilidad del resultado dañoso y, aun así, actúa con indiferencia respecto a su producción&lt;/strong&gt;. Es decir, no busca directamente el daño, pero lo acepta como posible consecuencia de su conducta.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;9) Un contrato será bilateral cuando&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Las partes ocupen en forma simultánea la posición de deudor y acreedor&lt;/li&gt;
&lt;li&gt;[ ] Las obligaciones se puedan expresar en dinero&lt;/li&gt;
&lt;li&gt;[ ] Su celebración implica la participación de dos o más partes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[x] &lt;strong&gt;Las partes ocupen en forma simultánea la posición de deudor y acreedor&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Un &lt;strong&gt;contrato bilateral&lt;/strong&gt; es aquel en el que &lt;strong&gt;ambas partes asumen obligaciones recíprocas&lt;/strong&gt;, es decir, &lt;strong&gt;cada una es acreedora y deudora al mismo tiempo&lt;/strong&gt;. Por ejemplo, en una compraventa, el vendedor debe entregar la cosa y el comprador pagar el precio.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;10) Si un sistema de voto electrónico no permite acceder al código fuente ¿cuál de los requisitos estudiados se vería afectado directamente?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] La universalidad&lt;/li&gt;
&lt;li&gt;[ ] La seguridad&lt;/li&gt;
&lt;li&gt;[ ] La transparencia&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[x] &lt;strong&gt;La transparencia&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Si no se puede acceder al código fuente de un sistema de voto electrónico, &lt;strong&gt;no se puede verificar cómo funciona internamente&lt;/strong&gt;, lo que &lt;strong&gt;afecta directamente la transparencia&lt;/strong&gt; del proceso electoral. La transparencia exige que tanto los ciudadanos como los especialistas puedan auditar el sistema para garantizar que funcione correctamente y sin manipulaciones.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Recuperatorio&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1) Un elemento definitorio de los derechos reales es&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] La relación directa entre la cosa y el titular&lt;/li&gt;
&lt;li&gt;[ ] Se crean solo por ley&lt;/li&gt;
&lt;li&gt;[ ] Son oponibles a todos los sujetos&lt;/li&gt;
&lt;li&gt;[ ] Todo lo anterior&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-40.CCn4bIjB.png&amp;#x26;w=1212&amp;#x26;h=268&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;[x] &lt;strong&gt;Todo lo anterior&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Los derechos reales se caracterizan por:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La &lt;strong&gt;relación directa&lt;/strong&gt; entre el titular y la cosa (ej. dominio, usufructo).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Se crean solo por ley&lt;/strong&gt;, no por la voluntad de las partes.&lt;/li&gt;
&lt;li&gt;Son &lt;strong&gt;oponibles a todos los sujetos&lt;/strong&gt; (eficacia &quot;erga omnes&quot;).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;2) La fuerza física irresistible es un vicio de&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] La libertad&lt;/li&gt;
&lt;li&gt;[ ] La intención&lt;/li&gt;
&lt;li&gt;[ ] El discernimiento&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-41.BaL_gKpf.png&amp;#x26;w=1199&amp;#x26;h=231&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;[x] &lt;strong&gt;La libertad&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Justificación:&lt;/strong&gt;
La &lt;strong&gt;fuerza física irresistible&lt;/strong&gt; anula la libertad del sujeto para actuar, ya que lo obliga a ejecutar una acción contra su voluntad. Por eso, se considera un &lt;strong&gt;vicio de la libertad&lt;/strong&gt;, no de la intención ni del discernimiento.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;3) Los requisitos de un instrumento público son&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] La firma y la fecha cierta&lt;/li&gt;
&lt;li&gt;[ ] La firma y el doble ejemplar&lt;/li&gt;
&lt;li&gt;[ ] La fecha cierta y el doble ejemplar&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-42.B7cLQzFL.png&amp;#x26;w=1203&amp;#x26;h=234&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;[x] &lt;strong&gt;La firma y la fecha cierta&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Un &lt;strong&gt;instrumento público&lt;/strong&gt; debe reunir determinados requisitos formales para ser válido, y los esenciales son:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La &lt;strong&gt;firma&lt;/strong&gt; del funcionario autorizado.&lt;/li&gt;
&lt;li&gt;La &lt;strong&gt;fecha cierta&lt;/strong&gt;, que le otorga autenticidad y fuerza probatoria frente a terceros.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;4) El software se protege por la ley&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] De derechos de autor&lt;/li&gt;
&lt;li&gt;[ ] De patentes y diseños industriales&lt;/li&gt;
&lt;li&gt;[ ] De promoción de la sociedad del conocimiento&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-43.DENz93Cz.png&amp;#x26;w=1209&amp;#x26;h=231&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;[x] &lt;strong&gt;De derechos de autor&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Según la legislación argentina (Ley 11.723), el software está protegido como una obra intelectual bajo el régimen de &lt;strong&gt;derechos de autor&lt;/strong&gt;, y no por el sistema de patentes o diseños industriales. Esta protección fue incorporada expresamente tras el fallo &quot;Autodesk&quot;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;5) ¿Cuáles son los requisitos comunes a todos los sistemas de sufragio según los pactos internacionales?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] La universalidad, la igualdad y la transparencia&lt;/li&gt;
&lt;li&gt;[ ] La Universalidad, La Igualdad y La Seguridad&lt;/li&gt;
&lt;li&gt;[ ] La Universalidad, La Igualdad y el Secreto&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-44.BCJPt4Hm.png&amp;#x26;w=1200&amp;#x26;h=234&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;[x] &lt;strong&gt;La Universalidad, La Igualdad y el Secreto&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Los pactos internacionales de derechos humanos, como el &lt;strong&gt;Pacto Internacional de Derechos Civiles y Políticos&lt;/strong&gt; (art. 25), establecen que todo ciudadano debe gozar del derecho al voto mediante un sistema &lt;strong&gt;universal&lt;/strong&gt;, &lt;strong&gt;igualitario&lt;/strong&gt; y mediante &lt;strong&gt;voto secreto&lt;/strong&gt;, garantizando la libre expresión de la voluntad del elector.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;6) La obligación de consejo se extiende a qué aspectos del proyecto&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] A todos los aspectos del proyecto&lt;/li&gt;
&lt;li&gt;[ ] Solo a los aspectos técnicos&lt;/li&gt;
&lt;li&gt;[ ] A los aspectos técnicos y el posible beneficio económico del proyecto&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-45.B2AUr9EN.png&amp;#x26;w=1198&amp;#x26;h=236&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;[x] &lt;strong&gt;Solo a los aspectos técnicos&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Según el análisis doctrinario y jurisprudencial, la &lt;strong&gt;obligación de consejo&lt;/strong&gt; en los contratos informáticos recae exclusivamente sobre los &lt;strong&gt;aspectos técnicos&lt;/strong&gt; del sistema contratado. No se extiende a evaluaciones económicas ni decisiones empresariales, ya que esas competencias corresponden al usuario o a sus asesores. Así lo reflejan tanto la jurisprudencia argentina (como en &lt;em&gt;Sistex c/Oliva&lt;/em&gt;) como la francesa (como en &lt;em&gt;Cajus Face vs IBM&lt;/em&gt;).&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;7) Un contrato unilateral tiene&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Una parte&lt;/li&gt;
&lt;li&gt;[ ] Por lo menos dos partes&lt;/li&gt;
&lt;li&gt;[ ] Dos partes contratantes y un tercero que es el beneficiario de la prestación acordada&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-46.DPX_-pxz.png&amp;#x26;w=1202&amp;#x26;h=246&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;[x] &lt;strong&gt;Por lo menos dos partes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Un contrato &lt;strong&gt;unilateral&lt;/strong&gt; tiene &lt;strong&gt;al menos dos partes&lt;/strong&gt;, ya que todo contrato requiere el acuerdo entre dos o más personas. Lo que lo distingue es que &lt;strong&gt;solo una de las partes asume obligaciones&lt;/strong&gt;, mientras la otra no tiene carga alguna. No debe confundirse con que haya una sola parte firmante o interviniente: siempre hay dos partes, aunque una no esté obligada.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;8) El contrato comienza a existir con&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] La entrega del doble ejemplar&lt;/li&gt;
&lt;li&gt;[ ] La firma&lt;/li&gt;
&lt;li&gt;[ ] La aceptación de la oferta&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-47.Ctm_FcFw.png&amp;#x26;w=1198&amp;#x26;h=230&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;[x] &lt;strong&gt;La aceptación de la oferta&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Según el régimen general de los contratos, &lt;strong&gt;el contrato se perfecciona cuando la oferta es aceptada&lt;/strong&gt; en tiempo y forma. La firma puede ser una forma de expresar esa aceptación, pero lo que da nacimiento al contrato como vínculo jurídico es el &lt;strong&gt;acuerdo de voluntades&lt;/strong&gt;, es decir, la &lt;strong&gt;aceptación de la oferta&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;9) Un contrato innominado es un contrato&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Que está prohibido por la legislación vigente&lt;/li&gt;
&lt;li&gt;[ ] Que no está previsto en la legislación vigente&lt;/li&gt;
&lt;li&gt;[ ] Que tiene regulación supletoria en la legislación vigente&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-48.CUzC5-_i.png&amp;#x26;w=1200&amp;#x26;h=232&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;[x] &lt;strong&gt;Que no está previsto en la legislación vigente&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Un &lt;strong&gt;contrato innominado&lt;/strong&gt; es aquel que &lt;strong&gt;no tiene una regulación específica en la ley&lt;/strong&gt;, a diferencia de los contratos &lt;strong&gt;nominados&lt;/strong&gt;, que sí están tipificados (como compraventa, locación, etc.). Sin embargo, los contratos innominados &lt;strong&gt;son válidos&lt;/strong&gt; si respetan los principios generales del derecho contractual, y su contenido se rige por la voluntad de las partes y por normas supletorias en caso de omisiones.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;10) Según el moderno concepto de entrega, ¿cuándo se cumple con la entrega de un sistema informático?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Con la finalización de las pruebas de funcionamiento&lt;/li&gt;
&lt;li&gt;[ ] Con la puesta en funcionamiento&lt;/li&gt;
&lt;li&gt;[ ] Con la entrega física de los componentes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-49.TKMmkZnD.png&amp;#x26;w=1195&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;[x] &lt;strong&gt;Con la finalización de las pruebas de funcionamiento&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Según el moderno concepto de entrega en los contratos informáticos, no basta con la entrega física ni con la instalación del sistema. &lt;strong&gt;La entrega se considera cumplida cuando el sistema supera el test de aceptación&lt;/strong&gt;, es decir, cuando se verifica que funciona conforme a lo pactado y satisface las necesidades del usuario.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Autoevaluacion - Parcial de prueba&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1) Un sistema de control constitucional difuso implica&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Que cualquier juez puede declarar la inconstitucionalidad&lt;/li&gt;
&lt;li&gt;[ ] Que la declaración se expande a los casos similares&lt;/li&gt;
&lt;li&gt;[ ] Que tanto el poder ejecutivo como el judicial puede declararla&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-50.DGxNvn--.png&amp;#x26;w=1200&amp;#x26;h=494&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;[x] &lt;strong&gt;Que cualquier juez puede declarar la inconstitucionalidad&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En un sistema de control constitucional &lt;strong&gt;difuso&lt;/strong&gt;, como el que rige en Argentina, &lt;strong&gt;cualquier juez&lt;/strong&gt; tiene la facultad de declarar la inconstitucionalidad de una norma al resolver un caso concreto. Este control se da en el marco de un juicio y sus efectos se limitan a las partes (control &quot;inter partes&quot;).&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;2) La existencia del federalismo se relaciona&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Con la preexistencia de los gobiernos locales, que retienen para sí las competencias no expresamente delegadas&lt;/li&gt;
&lt;li&gt;[ ] La mayor descentralización de las facultades del estado en beneficio de los gobiernos locales&lt;/li&gt;
&lt;li&gt;[ ] La existencia de provincias en un territorio&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-51.CphT-WQi.png&amp;#x26;w=1187&amp;#x26;h=541&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;[x] &lt;strong&gt;Con la preexistencia de los gobiernos locales, que retienen para sí las competencias no expresamente delegadas&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;El &lt;strong&gt;federalismo&lt;/strong&gt; implica la existencia de &lt;strong&gt;gobiernos locales preexistentes&lt;/strong&gt; (como las provincias en Argentina) que conservan autonomía y &lt;strong&gt;retienen las competencias no delegadas&lt;/strong&gt; expresamente al gobierno nacional. Es un principio constitucional clave en sistemas federales.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;3) La monarquía es una forma&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] De nación&lt;/li&gt;
&lt;li&gt;[ ] De estado&lt;/li&gt;
&lt;li&gt;[ ] De gobierno&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-52.DMfj5DJ6.png&amp;#x26;w=1193&amp;#x26;h=521&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;[x] &lt;strong&gt;De gobierno&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La &lt;strong&gt;monarquía&lt;/strong&gt; es una forma de &lt;strong&gt;gobierno&lt;/strong&gt;, ya que se refiere a cómo se organiza el poder en un Estado. Se contrapone a otras formas como la república. En cambio, &quot;forma de Estado&quot; alude a la organización territorial del poder (unitario, federal), y &quot;forma de nación&quot; no es una categoría jurídica.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;4) La entrega del sistema se produce&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Cuando el mismo cumple con los test de funcionamiento&lt;/li&gt;
&lt;li&gt;[ ] Con la instalación del equipo&lt;/li&gt;
&lt;li&gt;[ ] Con la entrega física del material al cliente&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-53.B7sNPa_e.png&amp;#x26;w=1195&amp;#x26;h=263&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;[x] &lt;strong&gt;Cuando el mismo cumple con los test de funcionamiento&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Según el enfoque moderno sobre la entrega de sistemas informáticos, &lt;strong&gt;la entrega no se considera completada hasta que el sistema haya superado exitosamente las pruebas de funcionamiento&lt;/strong&gt;. Esto garantiza que el producto cumple con las especificaciones pactadas y es apto para su uso previsto.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;5) ¿Cuál de las siguientes sería una excepción a la obligación de consejo?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Que el cliente sea una empresa líder en su sector&lt;/li&gt;
&lt;li&gt;[ ] El acuerdo de partes&lt;/li&gt;
&lt;li&gt;[ ] La contratación de un consultor externo por parte del cliente&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-54.COvNUw3Q.png&amp;#x26;w=1194&amp;#x26;h=258&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;[x] &lt;strong&gt;La contratación de un consultor externo por parte del cliente&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cuando el cliente contrata a un &lt;strong&gt;consultor especializado&lt;/strong&gt;, se entiende que ya cuenta con el conocimiento técnico necesario para evaluar el sistema. Esto &lt;strong&gt;disminuye o elimina la disparidad informativa&lt;/strong&gt; entre las partes, lo que a su vez &lt;strong&gt;exime al proveedor de su obligación de consejo&lt;/strong&gt;, tal como ha sido reconocido por la jurisprudencia francesa y nacional.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;6) En un acto jurídico accesorio&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] La desaparición del accesorio implica la desaparición del principal&lt;/li&gt;
&lt;li&gt;[ ] La desaparición del principal conlleva la del accesorio&lt;/li&gt;
&lt;li&gt;[ ] Son independientes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-55.DmWqHr91.png&amp;#x26;w=1193&amp;#x26;h=287&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;[x] &lt;strong&gt;La desaparición del principal conlleva la del accesorio&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Un acto jurídico accesorio está subordinado al principal y &lt;strong&gt;carece de autonomía propia&lt;/strong&gt;. Si el acto principal desaparece o se extingue, &lt;strong&gt;el accesorio pierde su razón de ser y también se extingue&lt;/strong&gt;. Un ejemplo clásico es la fianza, que depende de un contrato principal como el de alquiler.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;7) La fe pública otorgada al instrumento se extiende&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] A todo el contenido del instrumento&lt;/li&gt;
&lt;li&gt;[ ] A lo percibido por el oficial público y a las manifestaciones de las partes&lt;/li&gt;
&lt;li&gt;[ ] A lo percibido por el oficial público&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-56.jydz4--e.png&amp;#x26;w=1192&amp;#x26;h=277&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;[x] &lt;strong&gt;A lo percibido por el oficial público&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La fe pública que otorga un instrumento público se limita a lo que el oficial público &lt;strong&gt;percibe por sí mismo en el acto&lt;/strong&gt; (por ejemplo, la presencia de las partes, sus firmas, fecha y lugar), pero &lt;strong&gt;no abarca las manifestaciones o declaraciones internas de las partes&lt;/strong&gt; si no fueron directamente percibidas por él.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;8) Un contrato unilateral tiene&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Una parte&lt;/li&gt;
&lt;li&gt;[ ] Por lo menos dos partes&lt;/li&gt;
&lt;li&gt;[ ] Dos partes contratantes y un tercero que es el beneficiario de la prestación acordada&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-57.BysQLRRS.png&amp;#x26;w=1190&amp;#x26;h=278&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;[x] &lt;strong&gt;Por lo menos dos partes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Un contrato unilateral &lt;strong&gt;requiere al menos dos partes para su celebración&lt;/strong&gt;, ya que todo contrato implica un acuerdo entre partes. Lo que lo caracteriza como &quot;unilateral&quot; es que &lt;strong&gt;solo una de ellas asume obligaciones&lt;/strong&gt;, mientras la otra no contrae ninguna.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;9) La fuerza física irresistible es un vicio de&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] La libertad&lt;/li&gt;
&lt;li&gt;[ ] La intención&lt;/li&gt;
&lt;li&gt;[ ] El discernimiento&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-58.BiYTMvRI.png&amp;#x26;w=1186&amp;#x26;h=264&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;[x] &lt;strong&gt;La libertad&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La &lt;strong&gt;fuerza física irresistible&lt;/strong&gt; afecta la &lt;strong&gt;libertad&lt;/strong&gt;, ya que impide que la persona actúe de manera voluntaria. Si alguien es forzado físicamente a realizar un acto, no está ejerciendo libremente su voluntad, lo que vicia el consentimiento.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;10) La propiedad intelectual de un software se regula&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Por la ley de derechos de autor&lt;/li&gt;
&lt;li&gt;[ ] Por la ley de patentes de invención&lt;/li&gt;
&lt;li&gt;[ ] Por una ley especial creada a tal fin&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-59.q5I1_bCY.png&amp;#x26;w=1181&amp;#x26;h=259&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;[x] &lt;strong&gt;Por la ley de derechos de autor&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En Argentina, el software se encuentra protegido bajo la &lt;strong&gt;Ley 11.723 de Propiedad Intelectual&lt;/strong&gt;, que fue modificada para incluir expresamente a los &lt;strong&gt;programas de computación fuente y objeto&lt;/strong&gt;. Esta protección abarca tanto los derechos patrimoniales como los derechos morales del autor.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Autoevaluacion - Parcial de prueba 2&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1) La monarquía es una forma&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] De nación&lt;/li&gt;
&lt;li&gt;[ ] De estado&lt;/li&gt;
&lt;li&gt;[ ] De gobierno&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-60.CLPAjhy8.png&amp;#x26;w=1198&amp;#x26;h=528&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;2) La existencia del federalismo se relaciona&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Con la preexistencia de los gobiernos locales, que retienen para sí las competencias no expresamente delegadas&lt;/li&gt;
&lt;li&gt;[ ] La mayor descentralización de las facultades del estado en beneficio de los gobiernos locales&lt;/li&gt;
&lt;li&gt;[ ] La existencia de provincias en un territorio&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-61.DrGbWTpo.png&amp;#x26;w=1194&amp;#x26;h=539&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;3) Un contrato unilateral tiene&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Una parte&lt;/li&gt;
&lt;li&gt;[ ] Por lo menos dos partes&lt;/li&gt;
&lt;li&gt;[ ] Dos partes contratantes y un tercero que es el beneficiario de la prestación acordada&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-62.DoeZ0sES.png&amp;#x26;w=1182&amp;#x26;h=285&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;4) La fuerza física irresistible es un vicio de&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] La libertad&lt;/li&gt;
&lt;li&gt;[ ] La intención&lt;/li&gt;
&lt;li&gt;[ ] El discernimiento&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-63.CPq5SPyg.png&amp;#x26;w=1189&amp;#x26;h=264&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;5) Un sistema informático se define por&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Las especificaciones técnicas&lt;/li&gt;
&lt;li&gt;[ ] Las necesidades a satisfacer&lt;/li&gt;
&lt;li&gt;[ ] El hardware entregado&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-64.9jMtvtJC.png&amp;#x26;w=1181&amp;#x26;h=266&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;6) Según el moderno concepto de entrega, ¿cuándo se cumple con la entrega de un sistema informático?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Con la finalización de las pruebas de funcionamiento&lt;/li&gt;
&lt;li&gt;[ ] Con la puesta en funcionamiento&lt;/li&gt;
&lt;li&gt;[ ] Con la entrega física de los componentes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-65.OSG-7Seu.png&amp;#x26;w=1181&amp;#x26;h=257&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;7) El contrato comienza a existir con&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] La entrega del doble ejemplar&lt;/li&gt;
&lt;li&gt;[ ] La firma&lt;/li&gt;
&lt;li&gt;[ ] La aceptación de la oferta&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-66.Dx7Gp0k8.png&amp;#x26;w=1188&amp;#x26;h=262&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;8) ¿Cuál de las siguientes características NO pertenece a las obligaciones personales?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Se establecen entre dos personas&lt;/li&gt;
&lt;li&gt;[ ] Implican un hacer, un dar o un omitir&lt;/li&gt;
&lt;li&gt;[ ] Se crean solo por ley&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-67.r-m_NW0A.png&amp;#x26;w=1181&amp;#x26;h=264&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;9) Que un sistema de control constitucional sea difuso significa&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Que un cualquier juez puede decretar la inconstitucionalidad&lt;/li&gt;
&lt;li&gt;[ ] Que los efectos de la declaración se extienden a casos similares&lt;/li&gt;
&lt;li&gt;[ ] Que el planteo se puede producir en cualquier momento del proceso&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-68.B2Be-Xw8.png&amp;#x26;w=1182&amp;#x26;h=316&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;10) Aparte del preámbulo el texto constitucional se divide en:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Dos partes: Declaraciones derechos y garantías y autoridades de la nación&lt;/li&gt;
&lt;li&gt;[ ] Tres partes: Declaraciones derechos y garantías, autoridades de la nación y gobiernos provinciales&lt;/li&gt;
&lt;li&gt;[ ] Cuatro partes: Declaraciones derechos y garantías y tres correspondiendo a cada poder del estado&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-70.ChGxSyYC.png&amp;#x26;w=1191&amp;#x26;h=539&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.BAVpvCDh.jpg"/><enclosure url="/_astro/thumbnail.BAVpvCDh.jpg"/></item><item><title>Optimizando el CV</title><link>https://fabianmartinezrincon.com/blog/formateando-cv</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/formateando-cv</guid><description>Formateando mi cv para que sea optimizable a la hora de aplicar a trabajos.</description><pubDate>Sat, 26 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Objetivo&lt;/h1&gt;
&lt;p&gt;Mi objetivo con este blog es poder postularme a empresas grandes, estaba viendo que se usan principalmente los filtrso ATS. Voy a tratar de adaptarlo a este formato.&lt;/p&gt;
&lt;p&gt;Un &lt;strong&gt;filtro ATS&lt;/strong&gt; (por &lt;em&gt;Applicant Tracking System&lt;/em&gt;) es un software que usan muchas empresas para &lt;strong&gt;filtrar y organizar currículums&lt;/strong&gt; automáticamente cuando alguien aplica a un trabajo.&lt;/p&gt;
&lt;p&gt;Su función principal es:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Leer&lt;/strong&gt; los CVs que llegan.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Buscar palabras clave&lt;/strong&gt; (por ejemplo, “Python”, “SQL”, “Data Engineer” si son requisitos del puesto).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Descartar&lt;/strong&gt; los CVs que no cumplen ciertos criterios (como experiencia, estudios o habilidades específicas).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ordenar&lt;/strong&gt; los CVs que sí pasan, para que el reclutador vea primero los más relevantes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por eso, si un CV no está optimizado para ATS (por ejemplo, tiene formatos raros, imágenes, tablas complicadas o no usa las palabras clave adecuadas), &lt;strong&gt;puede ser rechazado antes de que un humano lo lea&lt;/strong&gt;, aunque el candidato sea bueno.&lt;/p&gt;
&lt;hr&gt;</content:encoded><h:img src="/_astro/thumbnail.CGfow7zL.jpg"/><enclosure url="/_astro/thumbnail.CGfow7zL.jpg"/></item><item><title>Final Programación Concurrente</title><link>https://fabianmartinezrincon.com/blog/final-concurrente</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/final-concurrente</guid><description>Finales de la materia programación concurrente</description><pubDate>Wed, 12 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-40.DNYGJmtz.png&amp;#x26;w=1075&amp;#x26;h=104&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;📌 Preguntas Practicas FIJAS&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#1-calculos-con-matrices&quot;&gt;1) Calculos con Matrices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#2-cuales-cumplen-con-asv&quot;&gt;2) Cuales Cumplen con ASV&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#3-cuales-cumplen-con-asv-2&quot;&gt;3) Cuales Cumplen con ASV 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#4-numero-de-mensajes-y-granularidad&quot;&gt;4) Numero de Mensajes y Granularidad&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#5-numero-de-mensajes-y-granularidad-2&quot;&gt;5) Numero de Mensajes y Granularidad 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#6-indicar-para-cada-item-si-son-equivalentes&quot;&gt;6) Indicar para cada item si son equivalentes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#7-que-valores-quedan&quot;&gt;7) ¿Que valores quedan?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#8-que-valores-quedan-2&quot;&gt;8) ¿Que valores quedan? 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#9-la-soluci%C3%B3n-a-un-problema-es-paralelizada&quot;&gt;9) La Solución a un problema es paralelizada&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#10-la-soluci%C3%B3n-a-un-problema-es-paralelizada-2&quot;&gt;10) La Solución a un problema es paralelizada 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#11-la-soluci%C3%B3n-a-un-problema-es-paralelizada-3&quot;&gt;11) La Solución a un problema es paralelizada 3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#12-la-soluci%C3%B3n-a-un-problema-es-paralelizada-4&quot;&gt;12) La Solución a un problema es paralelizada 4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#13-suponga-que-el-tiempo-de-ejecuci%C3%B3n-de-un-algoritmo-secuencial&quot;&gt;13) Suponga que el tiempo de ejecución de un algoritmo Secuencial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#14-suponga-que-el-tiempo-de-ejecuci%C3%B3n-de-un-algoritmo-secuencial-2&quot;&gt;14) Suponga que el tiempo de ejecución de un algoritmo Secuencial 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#15-suponga-que-el-tiempo-de-ejecuci%C3%B3n-de-un-algoritmo-secuencial-3&quot;&gt;15) Suponga que el tiempo de ejecución de un algoritmo Secuencial 3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#16-calcular-la-suma-de-todos-los-valores&quot;&gt;16) Calcular la suma de todos los valores&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#17-token-passing-con-mensajes-asincr%C3%B3nicos&quot;&gt;17) Token passing con mensajes asincrónicos&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;📢 Miralas de Reojo&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#1-propuesta-al-problema-de-alocaci%C3%B3n-sjn&quot;&gt;1) Propuesta al problema de alocación SJN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#2-passing-the-condition-en-semaforos&quot;&gt;2) “passing the condition” En Semaforos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#3-problema-de-concurrencia&quot;&gt;3) Problema de Concurrencia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#4-problema-de-concurrencia-2&quot;&gt;4) Problema de Concurrencia 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#5-indique-los-posibles-valores-finales-de-x&quot;&gt;5) Indique los posibles valores finales de x&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#6-cuales-valores-de-k-son-posibles&quot;&gt;6) Cuales valores de k son posibles&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;🚨 Rezar para que no Tomen&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#1-resuelva-con-monitores&quot;&gt;1) Resuelva con monitores&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#2-protocolos-de-acceso-a-la-sc&quot;&gt;2) Protocolos de Acceso a la SC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#3-soluci%C3%B3n-a-la-criba&quot;&gt;3) Solución a la Criba&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#4-transformar-solucion-usando-mensajes-asincronicos&quot;&gt;4) Transformar Solucion usando mensajes asincronicos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#5-problema-de-ordenar-de-menor-a-mayor-un-arreglo&quot;&gt;5) Problema de ordenar de menor a mayor un arreglo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#6-problema-de-ordenar-de-menor-a-mayor-2&quot;&gt;6) Problema de ordenar de menor a mayor 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#7-suponga-que-un-proceso-productor-y-n-procesos-consumidores&quot;&gt;7) Suponga que un proceso productor y &lt;code&gt;n&lt;/code&gt; procesos consumidores&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#8-implemente-una-butterfly-barrier-para-8-procesos&quot;&gt;8) Implemente una butterfly barrier para 8 procesos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#9-suponga-n2-procesos-organizados-en-forma-de-grilla-cuadrada&quot;&gt;9) Suponga n^2 procesos organizados en forma de grilla cuadrada&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#10-una-imagen-se-encuentra-representada-por-una-matriz&quot;&gt;10) Una imagen se encuentra representada por una matriz&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Notas&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2F1.DmZxMaec.jpg&amp;#x26;w=1275&amp;#x26;h=1754&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2F2.BO8EEvvk.jpg&amp;#x26;w=1275&amp;#x26;h=1754&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2F3.BEp1DDQV.jpg&amp;#x26;w=1275&amp;#x26;h=1754&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2F4.ybxgRsAI.jpg&amp;#x26;w=1275&amp;#x26;h=1754&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2F5.lcrsI_KY.jpg&amp;#x26;w=1275&amp;#x26;h=1754&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2F6.Ct9CcOl5.jpg&amp;#x26;w=1275&amp;#x26;h=1754&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2F7.BTt6pDav.jpg&amp;#x26;w=1275&amp;#x26;h=1754&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2F8.RrjXtHwF.jpg&amp;#x26;w=1275&amp;#x26;h=1754&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2F9.KJ037_Wz.jpg&amp;#x26;w=1275&amp;#x26;h=1754&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2F10.Cs2W6eMI.jpg&amp;#x26;w=1275&amp;#x26;h=1754&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2F11.Bo1I6yHO.jpg&amp;#x26;w=1275&amp;#x26;h=1754&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2F12.FzBoDlYU.jpg&amp;#x26;w=1275&amp;#x26;h=1754&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2F13.BLS5R0dF.jpg&amp;#x26;w=1275&amp;#x26;h=1754&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2F14.CLkawybE.jpg&amp;#x26;w=1275&amp;#x26;h=1754&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2F15.BqcALJHq.jpg&amp;#x26;w=1275&amp;#x26;h=1754&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2F16.BzojKf2b.jpg&amp;#x26;w=1275&amp;#x26;h=1754&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2F17.BpJcEjQ2.jpg&amp;#x26;w=1275&amp;#x26;h=1754&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2F18.DWkd-N-0.jpg&amp;#x26;w=1275&amp;#x26;h=1754&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2F19.OzPHWslA.jpg&amp;#x26;w=1275&amp;#x26;h=1754&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2F20.vVDcTmm7.jpg&amp;#x26;w=1275&amp;#x26;h=1754&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2F21.BTcQwqNE.jpg&amp;#x26;w=1275&amp;#x26;h=1754&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2F22.CFYQYyBe.jpg&amp;#x26;w=1275&amp;#x26;h=1754&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Aprendes o te moris&lt;/h1&gt;
&lt;h2&gt;0) Una imagen se encuentra representada por una matriz&lt;/h2&gt;
&lt;p&gt;Suponga que una imagen se encuentra representada por una matriz a &lt;strong&gt;(n×n)&lt;/strong&gt;, y que el valor de cada pixel es un número &lt;strong&gt;entero&lt;/strong&gt; que es mantenido por un proceso distinto (es decir, el valor del píxel &lt;strong&gt;I&lt;/strong&gt;,&lt;strong&gt;J&lt;/strong&gt; está en el proceso &lt;strong&gt;P(I,J)&lt;/strong&gt;). Cada proceso puede comunicarse solo con sus vecinos izquierdo, derecho, arriba y abajo. (Los procesos de las esquinas tienen solo 2 vecinos, y los otros bordes de la grilla tienen 3 vecinos).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;a)&lt;/strong&gt; Escriba un algoritmo &lt;strong&gt;Herbeat&lt;/strong&gt; que calcule el &lt;strong&gt;máximo&lt;/strong&gt; y el &lt;strong&gt;mínimo&lt;/strong&gt; valor de los píxeles de la imagen. Al terminar el programa, cada proceso debe conocer ambos valores.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;chan topologia[1:n](
    proceso_emisor : int;
    ya_conoce_todo : bool;
    topologia_conocida : [1:n,1:n] bool;
    valor_max : int;
    valor_min : int
);

process nodo[p = 1..n] {
    bool vecinos_directos[1:n];              # inicialmente vecinos[q] true si q es vecino de p
    bool vecinos_activos[1:n] = vecinos_directos;     # vecinos aún activos
    bool topologia_conocida[1:n,1:n] = ([n*n]false);  # vecinos conocidos (matriz de adyacencia)
    bool topologia_recibida[1:n,1:n];
    bool ya_conoce_todo = false;
    int proceso_emisor;
    bool vecino_listo;
    int valor_pixel_local, valor_max, valor_min;
    
    topologia_conocida[p,1..n] = vecinos_directos;          # llena la fila para los vecinos
    valor_max := valor_pixel_local; 
    valor_min := valor_pixel_local;                # miValor inicializado con el valor del píxel

    while (not ya_conoce_todo) {            # envía conocimiento local de la topología a sus vecinos
        for (vecino = 1 to n st vecinos_activos[vecino]) {
            send topologia[vecino](p, false, topologia_conocida, valor_max, valor_min);
        }

        for (vecino = 1 to n st vecinos_activos[vecino]) {
            receive topologia[p](proceso_emisor, vecino_listo, topologia_recibida, nuevoMax, nuevoMin);
            topologia_conocida = topologia_conocida or topologia_recibida;                  # hace OR con su top juntando la información
            if (nuevoMax &gt; valor_max) valor_max := nuevoMax;    # actualiza los máximos y mínimos
            if (nuevoMin &amp;#x3C; valor_min) valor_min := nuevoMin;
            if (vecino_listo) vecinos_activos[proceso_emisor] = false;
        }

        if (todas las filas de topologia_conocida tienen 1 entry true) ya_conoce_todo = true;
    }

    # envía topología completa a todos sus vecinos aún activos
    for (vecino = 1 to n st vecinos_activos[vecino]) {
        send topologia[vecino](p, ya_conoce_todo, topologia_conocida, valor_max, valor_min);
    }

    # recibe un mensaje de cada uno para limpiar el canal
    for (vecino = 1 to n st vecinos_activos[vecino]) {
        receive topologia[p](proceso_emisor, ya_conoce_todo, topologia_recibida, nuevoMax, nuevoMin);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;Esto se tiene que consultar, porque la solución es mucho mas simple de la que esta aca&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;b) Analice la solución de desde el punto de vista del número de mensajes.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Si M es el numero maximo de vecinos que puede tener un nodo, y D es el diametro de la red, el número de mensajes maximo que pueden intercambiar es de &lt;strong&gt;2n&lt;/strong&gt; * &lt;strong&gt;m&lt;/strong&gt; * &lt;strong&gt;(D+1)&lt;/strong&gt;. Esto es porque cada nodo ejecuta a lo sumo &lt;strong&gt;D-1&lt;/strong&gt; rondas, y en cada una de ellas manda &lt;strong&gt;2&lt;/strong&gt; mensajes a sus m vecinos&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;1) Calcular la suma de todos los valores&lt;/h2&gt;
&lt;p&gt;Suponga que &lt;strong&gt;N&lt;/strong&gt; procesos poseen inicialmente cada uno un valor. Se debe calcular la suma de todos los valores y al finalizar la computación todos deben conocer dicha suma.&lt;/p&gt;
&lt;p&gt;Analice (desde el punto de vista del número de mensajes y la performance global) las soluciones posibles con memoria distribuida para &lt;strong&gt;arquitecturas en Estrella&lt;/strong&gt; (centralizada), &lt;strong&gt;Anillo Circular&lt;/strong&gt;, &lt;strong&gt;Totalmente Conectada&lt;/strong&gt; y &lt;strong&gt;Árbol&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;En este tipo de arquitectura todos los procesos (workers) envían su valor local al procesador central (coordinador), este suma los &lt;code&gt;N&lt;/code&gt; datos y reenvía la información de la suma al resto de los procesos.&lt;br&gt;
Por lo tanto se ejecutan &lt;code&gt;2(N-1)&lt;/code&gt; mensajes. Si el procesador central dispone de una primitiva broadcast, se reduce a &lt;code&gt;N&lt;/code&gt; mensajes.&lt;/p&gt;
&lt;p&gt;En cuanto a la performance global, los mensajes al coordinador se envían casi al mismo tiempo.&lt;br&gt;
Estos se quedarán esperando hasta que el coordinador termine de computar la suma y envíe el resultado a todos.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-c&quot;&gt;chan canal_valor(INT);
canal_resultado[n](INT suma);

Process Coordinador[0]{              // coordinador, v está inicializado
    INT valor_local; 
    INT suma_total = 0;
    suma_total = suma_total + valor_local;

    for (i = 1 to n-1){
        receive canal_valor(valor_recibido);
        suma_total = suma_total + valor_recibido;
    }
    for (i = 1 to n-1)
        send canal_resultado[i](suma_total);
}

process Trabajador[i = 1 to n-1]{   // worker, v está inicializado
    INT valor_local;
    INT suma_total;
    send canal_valor(valor_local);
    receive canal_resultado[i](suma_total);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;🧩 Supuestos&lt;/p&gt;
&lt;p&gt;De nuevo usamos &lt;code&gt;n = 4&lt;/code&gt; procesos:&lt;/p&gt;
&lt;p&gt;| Proceso | Rol        | Valor local &lt;code&gt;v[i]&lt;/code&gt; |
|---------|------------|--------------------|
| P[0]    | Coordinador| 2                  |
| P[1]    | Worker     | 3                  |
| P[2]    | Worker     | 5                  |
| P[3]    | Worker     | 7                  |&lt;/p&gt;
&lt;p&gt;🎯 Objetivo&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;P[0]&lt;/code&gt; recibe los valores de todos los procesos.&lt;/li&gt;
&lt;li&gt;Suma: &lt;code&gt;2 + 3 + 5 + 7 = 17&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Luego envía la &lt;strong&gt;suma global&lt;/strong&gt; de vuelta a todos los workers.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;🚀 Ejecución paso a paso&lt;/p&gt;
&lt;p&gt;📨 Fase 1: Envío de los valores al coordinador&lt;/p&gt;
&lt;p&gt;| Paso | Acción |
|------|--------|
| 1 | &lt;code&gt;P[1]&lt;/code&gt; envía &lt;code&gt;3&lt;/code&gt; a &lt;code&gt;P[0]&lt;/code&gt; |
| 2 | &lt;code&gt;P[2]&lt;/code&gt; envía &lt;code&gt;5&lt;/code&gt; a &lt;code&gt;P[0]&lt;/code&gt; |
| 3 | &lt;code&gt;P[3]&lt;/code&gt; envía &lt;code&gt;7&lt;/code&gt; a &lt;code&gt;P[0]&lt;/code&gt; |
| 4 | &lt;code&gt;P[0]&lt;/code&gt; ya tiene su &lt;code&gt;v = 2&lt;/code&gt;, recibe &lt;code&gt;3&lt;/code&gt;, &lt;code&gt;5&lt;/code&gt;, y &lt;code&gt;7&lt;/code&gt;, suma total = &lt;strong&gt;17&lt;/strong&gt; |&lt;/p&gt;
&lt;p&gt;📤 Fase 2: Coordinador difunde la suma&lt;/p&gt;
&lt;p&gt;| Paso | Acción |
|------|--------|
| 5 | &lt;code&gt;P[0]&lt;/code&gt; envía &lt;code&gt;17&lt;/code&gt; a &lt;code&gt;P[1]&lt;/code&gt; |
| 6 | &lt;code&gt;P[0]&lt;/code&gt; envía &lt;code&gt;17&lt;/code&gt; a &lt;code&gt;P[2]&lt;/code&gt; |
| 7 | &lt;code&gt;P[0]&lt;/code&gt; envía &lt;code&gt;17&lt;/code&gt; a &lt;code&gt;P[3]&lt;/code&gt; |&lt;/p&gt;
&lt;p&gt;✅ Resultado final&lt;/p&gt;
&lt;p&gt;| Proceso | Valor final conocido |
|---------|----------------------|
| P[0]    | 17 (lo calculó)      |
| P[1]    | 17 (lo recibió)      |
| P[2]    | 17 (lo recibió)      |
| P[3]    | 17 (lo recibió)      |&lt;/p&gt;
&lt;p&gt;💬 Observaciones&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Total de mensajes: &lt;code&gt;2(n - 1)&lt;/code&gt; = &lt;code&gt;2(4 - 1)&lt;/code&gt; = &lt;strong&gt;6 mensajes&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Con &lt;strong&gt;broadcast&lt;/strong&gt;: solo &lt;code&gt;n = 4&lt;/code&gt; mensajes (1 de cada worker al coordinador, 1 broadcast de vuelta).&lt;/li&gt;
&lt;li&gt;Buena performance en tiempo, porque los workers &lt;strong&gt;envían todos al mismo tiempo&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Pérdida de paralelismo en el cómputo: solo el &lt;strong&gt;coordinador trabaja&lt;/strong&gt;, los demás esperan.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Punto único de falla&lt;/strong&gt;: si &lt;code&gt;P[0]&lt;/code&gt; se cae, el sistema no funciona.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Se tiene un anillo donde &lt;code&gt;P[i]&lt;/code&gt; recibe mensajes de &lt;code&gt;P[i-1]&lt;/code&gt; y envía mensajes a &lt;code&gt;P[i+1]&lt;/code&gt;. &lt;code&gt;P[n-1]&lt;/code&gt; tiene como sucesor a &lt;code&gt;P[0]&lt;/code&gt;. El primer proceso envía su valor local ya que es el único que conoce.&lt;/p&gt;
&lt;p&gt;Este esquema consta de dos etapas:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Cada proceso recibe un valor y lo suma con su valor local, transmitiendo la suma local a su sucesor.&lt;/li&gt;
&lt;li&gt;Todos reciben la suma global.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;P[0]&lt;/code&gt; debe ser algo diferente para poder “arrancar” el procesamiento: debe enviar su valor local ya que es el único que conoce. Se requerirán &lt;strong&gt;2(n-1)&lt;/strong&gt; mensajes.&lt;/p&gt;
&lt;p&gt;A diferencia de la solución centralizada, esta reduce los requerimientos de memoria por proceso pero tardara más en ejecutarse, por más que el número de mensajes requeridos sea el mismo. Esto se debe a que cada proceso debe esperar un valor para computar una suma parcial y luego enviársela al siguiente proceso; es decir, un proceso trabaja por vez, se pierde el paralelismo.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-c&quot;&gt;chan canal_suma[n](suma_parcial);

process p[0] {
    INT valor_local;
    INT suma_parcial = valor_local;
    send canal_suma[1](suma_parcial);
    receive canal_suma[0](suma_parcial);
    send canal_suma[1](suma_parcial);
}

process ProcesoAnillo[i = 1 to n-1] {
    INT valor_local;
    INT suma_parcial;
    receive canal_suma[i](suma_parcial);
    suma_parcial = suma_parcial + valor_local;
    siguiente = (i + 1) mod n
    send canal_suma[siguiente](suma_parcial);
    receive canal_suma[i](suma_parcial);
    if (i &amp;#x3C; n - 1)
        send canal_suma[i + 1](suma_parcial);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;| Proceso | &lt;code&gt;v[i]&lt;/code&gt; |
|---------|--------|
| P[0]    | 2      |
| P[1]    | 3      |
| P[2]    | 5      |
| P[3]    | 7      |&lt;/p&gt;
&lt;p&gt;El objetivo es que &lt;strong&gt;todos los procesos conozcan la suma total&lt;/strong&gt;, que es &lt;code&gt;2 + 3 + 5 + 7 = 17&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;🧠 Etapa 1: &lt;strong&gt;Suma parcial hacia adelante&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;| Paso | Acción |
|------|--------|
| 1 | &lt;code&gt;P[0]&lt;/code&gt; envía &lt;code&gt;2&lt;/code&gt; a &lt;code&gt;P[1]&lt;/code&gt; |
| 2 | &lt;code&gt;P[1]&lt;/code&gt; recibe &lt;code&gt;2&lt;/code&gt;, suma su &lt;code&gt;v=3&lt;/code&gt;, total = &lt;code&gt;5&lt;/code&gt;, envía &lt;code&gt;5&lt;/code&gt; a &lt;code&gt;P[2]&lt;/code&gt; |
| 3 | &lt;code&gt;P[2]&lt;/code&gt; recibe &lt;code&gt;5&lt;/code&gt;, suma su &lt;code&gt;v=5&lt;/code&gt;, total = &lt;code&gt;10&lt;/code&gt;, envía &lt;code&gt;10&lt;/code&gt; a &lt;code&gt;P[3]&lt;/code&gt; |
| 4 | &lt;code&gt;P[3]&lt;/code&gt; recibe &lt;code&gt;10&lt;/code&gt;, suma su &lt;code&gt;v=7&lt;/code&gt;, total = &lt;code&gt;17&lt;/code&gt;, envía &lt;code&gt;17&lt;/code&gt; a &lt;code&gt;P[0]&lt;/code&gt; |&lt;/p&gt;
&lt;p&gt;🧠 Etapa 2: &lt;strong&gt;Difusión de la suma global&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;| Paso | Acción |
|------|--------|
| 5 | &lt;code&gt;P[0]&lt;/code&gt; recibe &lt;code&gt;17&lt;/code&gt; de &lt;code&gt;P[3]&lt;/code&gt;, reenvía &lt;code&gt;17&lt;/code&gt; a &lt;code&gt;P[1]&lt;/code&gt; |
| 6 | &lt;code&gt;P[1]&lt;/code&gt; recibe &lt;code&gt;17&lt;/code&gt;, reenvía &lt;code&gt;17&lt;/code&gt; a &lt;code&gt;P[2]&lt;/code&gt; |
| 7 | &lt;code&gt;P[2]&lt;/code&gt; recibe &lt;code&gt;17&lt;/code&gt;, reenvía &lt;code&gt;17&lt;/code&gt; a &lt;code&gt;P[3]&lt;/code&gt; |
| 8 | &lt;code&gt;P[3]&lt;/code&gt; recibe &lt;code&gt;17&lt;/code&gt; |&lt;/p&gt;
&lt;p&gt;✅ Resultado final&lt;/p&gt;
&lt;p&gt;Todos los procesos conocen el valor total &lt;code&gt;17&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;| Proceso | Valor recibido |
|---------|----------------|
| P[0]    | 17             |
| P[1]    | 17             |
| P[2]    | 17             |
| P[3]    | 17             |&lt;/p&gt;
&lt;p&gt;💬 Observaciones&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cantidad de mensajes&lt;/strong&gt;: 2(n - 1) = 2(4 - 1) = 6 mensajes, como indica tu descripción.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Secuencialidad&lt;/strong&gt;: cada proceso espera su turno para sumar → &lt;strong&gt;no hay paralelismo&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;P[0]&lt;/strong&gt; es especial, porque inicia la suma &lt;strong&gt;y también&lt;/strong&gt; es el primero que difunde la suma global.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Todos los procesos ejecutan el mismo algoritmo. Existe un canal entre cada par de procesos.&lt;br&gt;
Cada uno transmite su dato local &lt;code&gt;v&lt;/code&gt; a los &lt;code&gt;n-1&lt;/code&gt; restantes. Luego recibe y procesa los &lt;code&gt;n-1&lt;/code&gt; datos que le faltan, de modo que en paralelo toda la arquitectura está calculando la suma total y tiene acceso a los &lt;code&gt;n&lt;/code&gt; datos.&lt;/p&gt;
&lt;p&gt;Se ejecutan &lt;code&gt;n(n-1)&lt;/code&gt; mensajes. Si se dispone de una primitiva de broadcast, serán &lt;code&gt;n&lt;/code&gt; mensajes.&lt;br&gt;
Es la solución más corta y sencilla de programar, pero utiliza el mayor número de mensajes si no hay broadcast.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;chan canal_valor[n](INT);

process Proceso[i=0 to n-1] {
    INT valor_local;
    INT valor_recibido
    INT suma_total = valor_local;
    
    for (int destino = 0 to n-1 st destino &amp;#x3C;&gt; i)
        send canal_valor[destino](valor_local);
        
    for (int origen = 0 to n-1 st k &amp;#x3C;&gt; i) {
        receive canal_valor[i](valor_recibido);
        suma_total = suma_total + valor_recibido;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;🧩 Supuestos&lt;/p&gt;
&lt;p&gt;Usamos de nuevo &lt;code&gt;n = 4&lt;/code&gt; procesos y valores locales:&lt;/p&gt;
&lt;p&gt;| Proceso | &lt;code&gt;v[i]&lt;/code&gt; |
|---------|--------|
| P[0]    | 2      |
| P[1]    | 3      |
| P[2]    | 5      |
| P[3]    | 7      |&lt;/p&gt;
&lt;p&gt;🚀 ¿Qué hace cada proceso?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cada proceso envía su valor a los otros 3 (&lt;code&gt;n-1&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Luego, &lt;strong&gt;recibe&lt;/strong&gt; los 3 valores que le faltan, y los &lt;strong&gt;suma&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Esto se hace en paralelo, es decir, todos los procesos trabajan al mismo tiempo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;📊 Ejecución paso a paso&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fase 1: Envío&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;| Proceso | Envía a...             | Mensajes |
|---------|------------------------|----------|
| P[0]    | P[1], P[2], P[3]       | 3        |
| P[1]    | P[0], P[2], P[3]       | 3        |
| P[2]    | P[0], P[1], P[3]       | 3        |
| P[3]    | P[0], P[1], P[2]       | 3        |
| &lt;strong&gt;Total&lt;/strong&gt; |                        | &lt;strong&gt;12 mensajes&lt;/strong&gt; |&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fase 2: Recepción y suma&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cada proceso recibe 3 valores y los suma con el propio:&lt;/p&gt;
&lt;p&gt;| Proceso | Valores recibidos | Suma final |
|---------|-------------------|------------|
| P[0]    | 3, 5, 7           | 2 + 3 + 5 + 7 = 17 |
| P[1]    | 2, 5, 7           | 3 + 2 + 5 + 7 = 17 |
| P[2]    | 2, 3, 7           | 5 + 2 + 3 + 7 = 17 |
| P[3]    | 2, 3, 5           | 7 + 2 + 3 + 5 = 17 |&lt;/p&gt;
&lt;p&gt;✅ Resultado final&lt;/p&gt;
&lt;p&gt;Todos conocen la suma global &lt;strong&gt;17&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;| Proceso | Suma calculada |
|---------|----------------|
| P[0]    | 17             |
| P[1]    | 17             |
| P[2]    | 17             |
| P[3]    | 17             |&lt;/p&gt;
&lt;p&gt;💬 Observaciones&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Total de mensajes: &lt;code&gt;n(n-1)&lt;/code&gt; = &lt;code&gt;4 × 3&lt;/code&gt; = &lt;strong&gt;12 mensajes&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Todos trabajan en &lt;strong&gt;paralelo&lt;/strong&gt; → &lt;strong&gt;alta velocidad&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Pero: requiere &lt;strong&gt;muchos canales y mensajes&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Si tuvieras broadcast, solo necesitarías &lt;strong&gt;n mensajes&lt;/strong&gt; (1 por proceso).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Se tiene una red de procesadores (nodos) conectados por canales de comunicación bidireccionales. Cada nodo se comunica directamente con sus vecinos. Si un nodo quiere enviar un mensaje a toda la red, debería construir un árbol de expansión de la misma, poniéndose a él mismo como raíz.&lt;/p&gt;
&lt;p&gt;El nodo raíz envía un mensaje por broadcast a todos los hijos, junto con el árbol construido. Cada nodo examina el árbol recibido para determinar los hijos a los cuales deben reenviar el mensaje, y así sucesivamente.&lt;/p&gt;
&lt;p&gt;Se envían &lt;code&gt;n - 1&lt;/code&gt; mensajes, uno por cada padre/hijo del árbol.&lt;/p&gt;
&lt;p&gt;🧩 Supuestos&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tenemos &lt;code&gt;n = 7&lt;/code&gt; nodos numerados del &lt;code&gt;0&lt;/code&gt; al &lt;code&gt;6&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Se construye un &lt;strong&gt;árbol de expansión&lt;/strong&gt; para propagar un mensaje, con el &lt;strong&gt;nodo &lt;code&gt;0&lt;/code&gt; como raíz&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;El árbol tiene esta estructura (por simplicidad):&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;        0
      / | \
     1  2  3
        |   \
        4    5
              \
               6
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;p&gt;🎯 Objetivo&lt;/p&gt;
&lt;p&gt;Difundir un &lt;strong&gt;mensaje&lt;/strong&gt; desde el nodo raíz (&lt;code&gt;0&lt;/code&gt;) hacia todos los demás nodos usando el árbol.&lt;/p&gt;
&lt;p&gt;🚀 Ejecución paso a paso&lt;/p&gt;
&lt;p&gt;| Paso | Nodo emisor | Nodo receptor | Descripción |
|------|-------------|----------------|-------------|
| 1    | 0           | 1              | Nodo 0 envía a su hijo 1 |
| 2    | 0           | 2              | Nodo 0 envía a su hijo 2 |
| 3    | 0           | 3              | Nodo 0 envía a su hijo 3 |
| 4    | 2           | 4              | Nodo 2 reenvía a su hijo 4 |
| 5    | 3           | 5              | Nodo 3 reenvía a su hijo 5 |
| 6    | 5           | 6              | Nodo 5 reenvía a su hijo 6 |&lt;/p&gt;
&lt;p&gt;✅ Resultado final&lt;/p&gt;
&lt;p&gt;Todos los nodos reciben el mensaje, usando solo &lt;code&gt;n - 1 = 6&lt;/code&gt; mensajes.&lt;/p&gt;
&lt;p&gt;| Nodo | ¿Recibió el mensaje? |
|------|------------------------|
| 0    | Sí (es la raíz)       |
| 1    | Sí                    |
| 2    | Sí                    |
| 3    | Sí                    |
| 4    | Sí                    |
| 5    | Sí                    |
| 6    | Sí                    |&lt;/p&gt;
&lt;p&gt;💬 Observaciones&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mensajes totales&lt;/strong&gt;: &lt;code&gt;n - 1 = 6&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Es la forma más eficiente si ya tenemos el árbol.&lt;/li&gt;
&lt;li&gt;Permite &lt;strong&gt;paralelismo&lt;/strong&gt;: varios nodos pueden reenviar a la vez.&lt;/li&gt;
&lt;li&gt;Ideal para redes distribuidas con &lt;strong&gt;vecindades limitadas&lt;/strong&gt; (no totalmente conectadas).&lt;/li&gt;
&lt;li&gt;Si se necesita hacer una suma global, se puede hacer un &lt;strong&gt;recorrido postorden&lt;/strong&gt; (bottom-up), y luego &lt;strong&gt;difundir el resultado&lt;/strong&gt; (top-down).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;2) Token passing con mensajes asincrónicos&lt;/h2&gt;
&lt;p&gt;Implemente una solución al problema de exclusión mutua distribuida entre &lt;strong&gt;N&lt;/strong&gt; procesos utilizado un algoritmo de tipo token passing con mensajes asincrónicos.&lt;/p&gt;
&lt;p&gt;El algoritmo de &lt;strong&gt;token passing&lt;/strong&gt;, se basa en un tipo especial de mensaje o &lt;strong&gt;“token”&lt;/strong&gt; que
puede utilizarse para otorgar un &lt;strong&gt;permiso&lt;/strong&gt; (control) o para &lt;strong&gt;recoger información global&lt;/strong&gt; de la arquitectura distribuida.&lt;/p&gt;
&lt;p&gt;Si &lt;strong&gt;User[1:n]&lt;/strong&gt; son un conjunto de procesos de aplicación que contienen secciones críticas y
no críticas. Hay que desarrollar los protocolos de interacción (E/S a las secciones críticas), asegurando &lt;strong&gt;exclusión mútua&lt;/strong&gt;, &lt;strong&gt;no deadlock&lt;/strong&gt;, &lt;strong&gt;evitar demoras innecesarias&lt;/strong&gt; y &lt;strong&gt;eventualmente fairness&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Para no ocupar los procesos &lt;strong&gt;User&lt;/strong&gt; en el manejo de los &lt;strong&gt;tokens&lt;/strong&gt;, ideamos un proceso &lt;strong&gt;auxiliar (helper)&lt;/strong&gt; por cada &lt;strong&gt;User&lt;/strong&gt;, de modo de manejar la circulación de los &lt;strong&gt;tokens&lt;/strong&gt;. Cuando &lt;strong&gt;helper[i]&lt;/strong&gt; tiene el &lt;strong&gt;token&lt;/strong&gt; adecuado, significa que &lt;strong&gt;User[i]&lt;/strong&gt; tendrá prioridad para acceder a la sección crítica.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;chan canal_token[n]() ;                   # para envío de tokens
chan canal_solicitud_entrada[n]()
chan canal_permiso_entrada[n]()
chan canal_salida_seccion_critica[n](); # para comunicación proceso-helper

process ProcesoHelper[i = 1..N] {
    while(true){
        receive canal_token[i](); //Recibe el token desde el proceso anterior

        if(!(empty(canal_solicitud_entrada[i]))){
            receive canal_solicitud_entrada[i](); // Atiende la solicitud
            send canal_permiso_entrada[i]();     // Le da permiso para entrar a SC
            receive canal_salida_seccion_critica[i](); // Espera a que salga
        }
        send canal_token[i MOD N + 1]();
    }
}

process ProcesoUsuario[i = 1..N] {
    while(true){
        send canal_solicitud_entrada[i]();
        receive canal_permiso_entrada[i]();
        ... sección crítica ...
        send canal_salida_seccion_critica[i]();
        ... sección no crítica ...
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;Se asume que el primero ya tenga el token&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;Suponga que N Procesos&lt;/h2&gt;
&lt;p&gt;Suponga que &lt;strong&gt;N procesos&lt;/strong&gt; poseen inicialmente cada uno un valor. Se debe calcular el promedio de todos los valores y al finalizar la computación todos deben conocer dicho promedio.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;a) Describa conceptualmente las soluciones posibles con memoria distribuida para arquitecturas en estrella (centralizada), anillo circular, totalmente conectada y árbol.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Estrella (centralizada)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cada proceso envía su valor al coordinador. Este los suma, divide por &lt;code&gt;N&lt;/code&gt; para obtener el promedio y lo reenvía a todos.&lt;br&gt;
Cantidad de mensajes: &lt;code&gt;2(N - 1)&lt;/code&gt;, o &lt;code&gt;N&lt;/code&gt; si hay broadcast.&lt;br&gt;
Paralelismo solo en el envío inicial. El coordinador es cuello de botella y único punto de falla.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Anillo circular&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Un proceso (ej. &lt;code&gt;P0&lt;/code&gt;) inicia la suma parcial pasando su valor al siguiente. Cada proceso suma y reenvía. Al completar la vuelta, se divide entre &lt;code&gt;N&lt;/code&gt; para obtener el promedio, que luego se difunde por el anillo.&lt;br&gt;
Cantidad de mensajes: &lt;code&gt;2(N - 1)&lt;/code&gt;.
No hay paralelismo: cada proceso espera al anterior.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Totalmente conectada&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cada proceso envía su valor a todos los demás. Luego calcula localmente el promedio.&lt;br&gt;
Cantidad de mensajes: &lt;code&gt;N(N - 1)&lt;/code&gt;, o &lt;code&gt;N&lt;/code&gt; si hay broadcast.&lt;br&gt;
Alta velocidad gracias al paralelismo completo, pero alto costo en comunicación.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Árbol&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Se construye un árbol donde cada nodo envía su valor a su padre (bottom-up) para sumar. La raíz calcula el promedio dividiendo la suma por &lt;code&gt;N&lt;/code&gt;, y luego lo difunde (top-down).&lt;br&gt;
Cantidad de mensajes: &lt;code&gt;2(N - 1)&lt;/code&gt;.&lt;br&gt;
Hay cierto grado de paralelismo en ambas etapas (varios hijos pueden enviar al mismo tiempo).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;b) Implemente al menos 2 de las soluciones.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Estrella (centralizada)&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-c&quot;&gt;chan canal_valores(INT);
chan canal_promedios[n](REAL promedio);

process Coordinador[0]{              // Coordinador
    INT valor_local;
    INT suma_total  = valor_local;
    REAL promedio_global;
    
    for (i = 1 to n - 1) {
        INT valor_recibido;
        receive canal_valores(valor_recibido);
        suma = suma + valor_recibido;
    }
    promedio_global  = suma_total / n;
    for (i = 1 to n - 1)
        send canal_promedios[i](promedio_global);
}

process ProcesoTrabajador[i = 1 to n - 1]{ // Cada proceso envía su valor y recibe el promedio
    INT valor_local;
    REAL promedio_recibido;

    send canal_valores(valor_local);
    receive canal_promedios[i](promedio_recibido);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Anillo circular&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-c&quot;&gt;chan canal_suma[n](INT suma_parcial);      // Para pasar sumas parciales en el anillo
chan canal_promedio[n](REAL promedio_global);  // Para difundir el promedio calculado

process ProcesoInicial[0] {
    INT valor_local
    INT suma_total  = valor_local;
    REAL promedio_calculado;

    // Fase 1
    send canal_suma[1](suma_total);

    //Fase 2
    receive canal_suma[0](suma_total);

    promedio_calculado  = suma_total / n;
    send canal_promedio[1](promedio_calculado);
}

process ProcesoAnillo[i = 1 to n - 1] {
    INT valor_local, 
    INT suma_total;
    REAL promedio_recibido;
    INT siguiente = (i + 1) mod n; // El siguiente proceso en el anillo

    // Fase 1: recibe suma parcial, acumula y reenvía
    receive canal_suma[i](suma_total);
    suma_total = suma_total + v;
    
    send canal_suma[siguiente](suma_total);

    // Fase 2: recibe el promedio y lo reenvía
    receive canal_promedio[i](promedio_recibido);
    if (i &amp;#x3C; n - 1)
        send canal_promedio[siguiente](promedio_recibido);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Totalmente conectada (simetrica)&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-c&quot;&gt;chan canal_valores[n](INT valor_recibido); // Canal para intercambio de valores entre todos los procesos

process ProcesoSimetrico[i = 0 to n - 1] {
    INT valor_local  = ...;
    INT suma_total  = valor_local ;
    REAL promedio_local;

    // Envío mi valor_local a todos los demás procesos
    for (int destino = 0 to n - 1 st destino  &amp;#x3C;&gt; i)
        send canal_valores[k](valor_local );

    // Recibo los valores de los demás procesos y acumulo la suma
    for (int origen = 0 to n - 1 st origen &amp;#x3C;&gt; i) {
        INT valor_recibido
        receive canal_valores[i](valor_recibido);
        suma_total  = suma_total  + valor_recibido;
    }
    // Calculo el promedio de todos los valores
    promedio_local = suma_total  / n;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;c) Para cada una de las soluciones (todas), calcule la cantidad de mensajes y el tiempo (considerando que eventualmente hay operaciones que pueden realizarse concurrentemente).&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Instancie c) para &lt;strong&gt;N=4, N=8, N=16, N=32 y N=64&lt;/strong&gt;. Analice la performance para cada caso y compare las soluciones.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nota:&lt;/strong&gt; puede suponer que cada una de las operaciones tarda una unidad de tiempo.&lt;/p&gt;
&lt;p&gt;Estrella (centralizada)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fórmula de mensajes:&lt;/strong&gt;  &lt;code&gt;2(n - 1)&lt;/code&gt; sin broadcast , &lt;code&gt;n&lt;/code&gt; con broadcast&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fórmula de tiempo:&lt;/strong&gt;  Envío (1) + procesamiento (1) + difusión (1) = &lt;strong&gt;3&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Resultados:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;N = 4 → Mensajes: &lt;code&gt;2(4 - 1) = 6&lt;/code&gt;, Tiempo: 3&lt;/li&gt;
&lt;li&gt;N = 8 → Mensajes: &lt;code&gt;2(8 - 1) = 14&lt;/code&gt;, Tiempo: 3&lt;/li&gt;
&lt;li&gt;N = 16 → Mensajes: &lt;code&gt;2(16 - 1) = 30&lt;/code&gt;, Tiempo: 3&lt;/li&gt;
&lt;li&gt;N = 32 → Mensajes: &lt;code&gt;2(32 - 1) = 62&lt;/code&gt;, Tiempo: 3&lt;/li&gt;
&lt;li&gt;N = 64 → Mensajes: &lt;code&gt;2(64 - 1) = 126&lt;/code&gt;, Tiempo: 3&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Anillo circular&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fórmula de mensajes:&lt;/strong&gt;  &lt;code&gt;2(n - 1)&lt;/code&gt; (una vuelta para la suma + una vuelta para difusión)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fórmula de tiempo:&lt;/strong&gt;  &lt;code&gt;2(n - 1)&lt;/code&gt; (no hay paralelismo)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Resultado&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;N = 4 → Mensajes: &lt;code&gt;2(4 - 1) = 6&lt;/code&gt;, Tiempo: 6&lt;/li&gt;
&lt;li&gt;N = 8 → Mensajes: &lt;code&gt;2(8 - 1) = 14&lt;/code&gt;, Tiempo: 14&lt;/li&gt;
&lt;li&gt;N = 16 → Mensajes: &lt;code&gt;2(16 - 1) = 30&lt;/code&gt;, Tiempo: 30&lt;/li&gt;
&lt;li&gt;N = 32 → Mensajes: &lt;code&gt;2(32 - 1) = 62&lt;/code&gt;, Tiempo: 62&lt;/li&gt;
&lt;li&gt;N = 64 → Mensajes: &lt;code&gt;2(64 - 1) = 126&lt;/code&gt;, Tiempo: 126&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Totalmente conectada&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fórmula de mensajes:&lt;/strong&gt; &lt;code&gt;n(n - 1)&lt;/code&gt; sin broadcast  &lt;code&gt;n&lt;/code&gt; con broadcast&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fórmula de tiempo:&lt;/strong&gt;  Envío + recepción, ambos en paralelo = &lt;strong&gt;2&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Resultados:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;N = 4 → Mensajes: &lt;code&gt;4 × (4 - 1) = 12&lt;/code&gt;, Tiempo: 2&lt;/li&gt;
&lt;li&gt;N = 8 → Mensajes: &lt;code&gt;8 × (8 - 1) = 56&lt;/code&gt;, Tiempo: 2&lt;/li&gt;
&lt;li&gt;N = 16 → Mensajes: &lt;code&gt;16 × (16 - 1) = 240&lt;/code&gt;, Tiempo: 2&lt;/li&gt;
&lt;li&gt;N = 32 → Mensajes: &lt;code&gt;32 × (32 - 1) = 992&lt;/code&gt;, Tiempo: 2&lt;/li&gt;
&lt;li&gt;N = 64 → Mensajes: &lt;code&gt;64 × (64 - 1) = 4032&lt;/code&gt;, Tiempo: 2&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Árbol&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fórmula de mensajes:&lt;/strong&gt;  &lt;code&gt;2(n - 1)&lt;/code&gt; (una subida bottom-up + una bajada top-down)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fórmula de tiempo:&lt;/strong&gt;  &lt;code&gt;2 × log₂(n)&lt;/code&gt; (dos recorridos del árbol)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Resultados:&lt;/strong&gt;   (Suavemente redondeado para &lt;code&gt;log₂(n)&lt;/code&gt;)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;N = 4 → Mensajes: &lt;code&gt;2(4 - 1) = 6&lt;/code&gt;, Tiempo: &lt;code&gt;2 × 2 = 4&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;N = 8 → Mensajes: &lt;code&gt;2(8 - 1) = 14&lt;/code&gt;, Tiempo: &lt;code&gt;2 × 3 = 6&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;N = 16 → Mensajes: &lt;code&gt;2(16 - 1) = 30&lt;/code&gt;, Tiempo: &lt;code&gt;2 × 4 = 8&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;N = 32 → Mensajes: &lt;code&gt;2(32 - 1) = 62&lt;/code&gt;, Tiempo: &lt;code&gt;2 × 5 = 10&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;N = 64 → Mensajes: &lt;code&gt;2(64 - 1) = 126&lt;/code&gt;, Tiempo: &lt;code&gt;2 × 6 = 12&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Suponga una ciudad representada por una matriz&lt;/h2&gt;
&lt;hr&gt;
&lt;h2&gt;Exclusión mutua distribuida&lt;/h2&gt;
&lt;p&gt;Implemente una solución al problema de exclusión mutua distribuida entre &lt;strong&gt;N procesos&lt;/strong&gt; utilizando un algoritmo &lt;strong&gt;Token Passing&lt;/strong&gt; con &lt;strong&gt;PMA&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Una ciudad representada por una matriz&lt;/h2&gt;
&lt;p&gt;Suponga una ciudad representada por una matriz &lt;strong&gt;A(n×n)&lt;/strong&gt;. De cada esquina &lt;strong&gt;x, y&lt;/strong&gt; se conocen dos valores enteros que representan la cantidad de &lt;strong&gt;autos&lt;/strong&gt; y &lt;strong&gt;motos&lt;/strong&gt; que cruzaron en la última hora. Los valores de cada esquina son mantenidos por un proceso distinto &lt;strong&gt;P(x, y)&lt;/strong&gt;. Cada proceso puede comunicarse con sus vecinos izquierdo, derecho, arriba y abajo, y también con los de las 4 diagonales (los procesos de las esquinas tienen sólo 3 vecinos y los otros en los bordes de la grilla tienen 5 vecinos).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;a)&lt;/strong&gt; Escriba un algoritmo &lt;strong&gt;Heartbeat&lt;/strong&gt; que calcule las esquinas donde cruzaron la &lt;strong&gt;mayor cantidad de autos&lt;/strong&gt; y la &lt;strong&gt;menor cantidad de motos&lt;/strong&gt; respectivamente, de forma que al terminar el programa, cada proceso conozca ambos valores.&lt;br&gt;
&lt;strong&gt;Nota:&lt;/strong&gt; Indicar qué tipo de pasajes de mensajes se va a utilizar. Justificar la elección.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;b)&lt;/strong&gt; Analizar desde el punto de vista de la &lt;strong&gt;cantidad de mensajes&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;c)&lt;/strong&gt; Analizar cómo podría &lt;strong&gt;mejorarse&lt;/strong&gt; la cantidad de mensajes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;d)&lt;/strong&gt; Analizar &lt;strong&gt;qué pasaría si no existieran las diagonales&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Exclusión mutua distribuida&lt;/h2&gt;
&lt;p&gt;Implemente una solución al problema de exclusión mutua distribuida entre &lt;strong&gt;N procesos utilizando un algoritmo token passing con mensajes asincrónicos&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Solución al problema del pruducto de matrices&lt;/h2&gt;
&lt;p&gt;Sea la siguiente solución al problema del producto de matrices de &lt;strong&gt;n×n&lt;/strong&gt; con &lt;strong&gt;P procesos&lt;/strong&gt; en paralelo con variables compartidas.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-c&quot;&gt;process worker [w = 1 to P] {  # strips en paralelo (p strips de n/P filas)
    int first = (w - 1) * n / P + 1;    # Primera fila del strip
    int last = first + n/P - 1;        # Última fila del strip
    for (i = first to last) {
        for (j = 1 to n) {
            c[i,j] = 0.0;
            for (k = 1 to n)
                c[i,j] = c[i,j] + a[i,k] * b[k,j];
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Suponga &lt;strong&gt;n = 512&lt;/strong&gt; y cada procesador capaz de ejecutar un proceso.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;a)&lt;/strong&gt; Calcular cuántas asignaciones, sumas y productos se hacen secuencialmente (caso en que P=1), y cuántas se realizan en cada procesador en la solución paralela con &lt;strong&gt;P=8&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;b)&lt;/strong&gt; Si los procesadores &lt;strong&gt;P1 a P7&lt;/strong&gt; son idénticos, con tiempos de &lt;strong&gt;asignación 1&lt;/strong&gt;, de &lt;strong&gt;suma 2&lt;/strong&gt; y de &lt;strong&gt;producto 3&lt;/strong&gt;, y si el procesador &lt;strong&gt;P8 es 3 veces más lento&lt;/strong&gt;, calcule cuánto tarda el proceso total concurrente.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;c)&lt;/strong&gt; ¿Cuál es el valor del &lt;strong&gt;speedup&lt;/strong&gt;?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;d)&lt;/strong&gt; ¿Cómo modificaría el código para lograr un mejor speedup?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTA:&lt;/strong&gt; para realizar los cálculos &lt;strong&gt;no tenga en cuenta&lt;/strong&gt; las operaciones de asignación e incremento correspondientes a las sentencias &lt;strong&gt;for&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Defina los paradigmas de interacción&lt;/h2&gt;
&lt;p&gt;Defina los paradigmas de interacción entre procesos distribuidos &lt;strong&gt;heartbeat&lt;/strong&gt;, &lt;strong&gt;servidores replicados&lt;/strong&gt; y &lt;strong&gt;token passing&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Marque &lt;strong&gt;ventajas y desventajas&lt;/strong&gt; en cada uno de ellos cuando se utiliza comunicación por &lt;strong&gt;mensajes sincrónicos o asincrónicos&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Suponga que N Procesos&lt;/h2&gt;
&lt;p&gt;Suponga que &lt;strong&gt;N procesos&lt;/strong&gt; poseen inicialmente cada uno un valor. Se debe calcular el &lt;strong&gt;promedio de todos los valores&lt;/strong&gt; y al finalizar la computación todos deben conocer dicho promedio.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;a)&lt;/strong&gt; Describa conceptualmente las soluciones posibles con memoria distribuida para arquitecturas en &lt;strong&gt;estrella (centralizada)&lt;/strong&gt;, &lt;strong&gt;anillo circular&lt;/strong&gt;, &lt;strong&gt;totalmente conectada&lt;/strong&gt; y &lt;strong&gt;árbol&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;b)&lt;/strong&gt; Implemente al menos &lt;strong&gt;2 de las soluciones&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;c)&lt;/strong&gt; Para cada una de las soluciones (todas), &lt;strong&gt;calcule la cantidad de mensajes y el tiempo&lt;/strong&gt; (considerando que eventualmente hay operaciones que pueden realizarse concurrentemente).&lt;br&gt;
Instancie c) para &lt;strong&gt;N = 4, N = 8, N = 16, N = 32&lt;/strong&gt; y &lt;strong&gt;N = 64&lt;/strong&gt;. Analice la &lt;strong&gt;performance&lt;/strong&gt; para cada caso y &lt;strong&gt;compare las soluciones&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nota:&lt;/strong&gt; puede suponer que cada una de las operaciones tarda una unidad de tiempo.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Suponga que N Procesos&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Suponga que N procesos poseen inicialmente cada uno un valor.&lt;/strong&gt;&lt;br&gt;
Se debe calcular el &lt;strong&gt;promedio de todos los valores&lt;/strong&gt; y al finalizar la computación todos deben conocer dicho promedio.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;a.&lt;/strong&gt; Describa conceptualmente las soluciones posibles con memoria distribuida para arquitectura en&lt;br&gt;
&lt;strong&gt;estrella (centralizada)&lt;/strong&gt;, &lt;strong&gt;anillo circular&lt;/strong&gt;, &lt;strong&gt;totalmente conectada&lt;/strong&gt; y &lt;strong&gt;árbol&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;b.&lt;/strong&gt; Implemente al menos 2 de las soluciones.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;c.&lt;/strong&gt; Para cada una de las soluciones (todas), &lt;strong&gt;calcule la cantidad de mensajes y el tiempo&lt;/strong&gt;.&lt;br&gt;
Instancie c) para &lt;strong&gt;N = 4, N = 8, N = 16, N = 32 y N = 64&lt;/strong&gt;.&lt;br&gt;
Analice la &lt;strong&gt;performance&lt;/strong&gt; en cada caso y &lt;strong&gt;compare las soluciones&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTA:&lt;/strong&gt; Puede suponer que cada una de las operaciones tarda una unidad de tiempo.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Suponga que N Procesos&lt;/h2&gt;
&lt;p&gt;Suponga que &lt;strong&gt;N procesos&lt;/strong&gt; poseen inicialmente cada uno un valor. Se debe calcular la &lt;strong&gt;suma de todos los valores&lt;/strong&gt; y al finalizar la computación todos deben conocer dicha suma.&lt;br&gt;
Analice (desde el punto de vista del número de mensajes y la performance global) las soluciones posibles con memoria distribuida para arquitecturas en &lt;strong&gt;Estrella (centralizada)&lt;/strong&gt;, &lt;strong&gt;Anillo Circular&lt;/strong&gt;, &lt;strong&gt;Totalmente Conectada&lt;/strong&gt; y &lt;strong&gt;Árbol&lt;/strong&gt;.&lt;br&gt;
&lt;strong&gt;Definir conceptualmente y decir cantidad de mensajes de cada uno. Implementar dos de esos.&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;En la mesa de mayo eran los mismos ejercicios excepto el último&lt;/strong&gt;: había que implementar &lt;strong&gt;heartbeat o passing the baton&lt;/strong&gt; (se elegía uno de los dos).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;Suponga que N Procesos&lt;/h2&gt;
&lt;p&gt;Implemente una solución al problema de &lt;strong&gt;exclusión mutua distribuida entre n procesos&lt;/strong&gt; utilizando un algoritmo &lt;strong&gt;Token Passing con mensajes asincrónicos&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Suponga una ciudad representada por una matriz&lt;/h2&gt;
&lt;p&gt;Suponga una ciudad representada por una &lt;strong&gt;matriz A(n×n)&lt;/strong&gt;. De cada esquina &lt;strong&gt;x, y&lt;/strong&gt; se conocen dos valores enteros que representan la cantidad de &lt;strong&gt;autos y motos&lt;/strong&gt; que cruzaron en la última hora. Los valores de cada esquina son mantenidos por un proceso distinto &lt;strong&gt;P(x,y)&lt;/strong&gt;.&lt;br&gt;
Cada proceso puede comunicarse con sus vecinos &lt;strong&gt;izquierdo, derecho, arriba y abajo&lt;/strong&gt;, y también con los de las &lt;strong&gt;4 diagonales&lt;/strong&gt; (los procesos de las esquinas tienen solo 3 vecinos y los otros en los bordes de la grilla tienen 5 vecinos).&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Suponga que N Procesos&lt;/h2&gt;
&lt;p&gt;Suponga que &lt;strong&gt;N procesos&lt;/strong&gt; poseen inicialmente cada uno un valor.&lt;br&gt;
Se debe calcular el &lt;strong&gt;promedio de todos los valores&lt;/strong&gt; y al finalizar la computación todos deben conocer dicho promedio.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;a.&lt;/strong&gt; Describa conceptualmente las soluciones posibles con memoria distribuida para arquitectura en &lt;strong&gt;estrella (centralizada)&lt;/strong&gt;, &lt;strong&gt;anillo circular&lt;/strong&gt;, &lt;strong&gt;totalmente conectada&lt;/strong&gt; y &lt;strong&gt;árbol&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;b.&lt;/strong&gt; Implemente al menos 2 de las soluciones.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;c.&lt;/strong&gt; Para cada una de las soluciones (todas), &lt;strong&gt;calcule la cantidad de mensajes y el tiempo&lt;/strong&gt;.&lt;br&gt;
Instancie c) para &lt;strong&gt;N = 4, N = 8, N = 16, N = 32 y N = 64&lt;/strong&gt;.&lt;br&gt;
&lt;strong&gt;Analice la performance&lt;/strong&gt; en cada caso y &lt;strong&gt;compare las soluciones&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTA:&lt;/strong&gt; Puede suponer que cada una de las operaciones tarda &lt;strong&gt;una unidad de tiempo&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;📌 Preguntas Practicas FIJAS&lt;/h1&gt;
&lt;hr&gt;
&lt;h2&gt;1) Calculos con Matrices&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Sea la siguiente solución al problema del producto de matrices de nxn con P procesos trabajando en paralelo.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;process worker[w = 1 to P] {        // strips en paralelo (P strips de n/P filas)
    int first = (w - 1) * n / P;    // Primera fila del strip
    int last  = first + n / P - 1;  // Última fila del strip

    for (i = first to last) {
        for (j = 0 to n - 1) {
            c[i,j] = 0.0;
            for (k = 0 to n - 1)
                c[i,j] = c[i,j] + a[i,k] * b[k,j];
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;a) Suponga que n = 128 y cada procesador es capaz de ejecutar un proceso. ¿Cuántas asignaciones, sumas y productos se hacen secuencialmente (caso en que P = 1)?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Asignaciones&lt;/strong&gt;  &lt;code&gt;128^3&lt;/code&gt; + &lt;code&gt;128^2&lt;/code&gt; &lt;strong&gt;-&gt;&lt;/strong&gt; &lt;code&gt;2.097.152&lt;/code&gt; + &lt;code&gt;16.384&lt;/code&gt; &lt;strong&gt;-&gt;&lt;/strong&gt; &lt;strong&gt;&lt;code&gt;2.113.536&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sumas&lt;/strong&gt;  &lt;code&gt;128^3&lt;/code&gt; -&gt; &lt;strong&gt;&lt;code&gt;2.097.152&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Productos&lt;/strong&gt; &lt;code&gt;128^3&lt;/code&gt; &lt;strong&gt;-&gt;&lt;/strong&gt; &lt;strong&gt;&lt;code&gt;2.097.152&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;b)&lt;/strong&gt; ¿Cuántas se realizan en cada procesador en la solución paralela con &lt;strong&gt;P = 8&lt;/strong&gt;?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Strip&lt;/strong&gt; 128/8 = 16 Filas por procesador (MIRA EL CODIGO O PEGO 👊)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Asignaciones&lt;/strong&gt; &lt;code&gt;16 * 128^2&lt;/code&gt; + &lt;code&gt;16 * 128&lt;/code&gt; -&gt; &lt;code&gt;262.144&lt;/code&gt; + &lt;code&gt;2048&lt;/code&gt; -&gt; &lt;strong&gt;&lt;code&gt;264.192&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sumas&lt;/strong&gt;  &lt;code&gt;16 * 128^2&lt;/code&gt; -&gt; &lt;strong&gt;&lt;code&gt;262.144&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Productos&lt;/strong&gt; &lt;code&gt;16 * 128^2&lt;/code&gt; -&gt; &lt;strong&gt;&lt;code&gt;262.144&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;c)&lt;/strong&gt; Si los procesadores P1 a P7 son iguales, y sus tiempos de asignación son 1, de suma 2 y de producto 3, y si P8 es 4 veces más lento,&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;¿Cuánto tarda el proceso total concurrente?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;T(P1-P7)&lt;/code&gt;&lt;/strong&gt; -&gt; (264.192 * 1) + (262.144 * 2) + (262.144 * 3) &lt;strong&gt;-&gt;&lt;/strong&gt; 264.192 + 524.288 + 786.432 &lt;strong&gt;-&gt;&lt;/strong&gt; &lt;strong&gt;&lt;code&gt;1.574.912&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;T(P8)&lt;/code&gt;&lt;/strong&gt; -&gt; &lt;code&gt;T(P1-P7) * 4&lt;/code&gt; &lt;strong&gt;-&gt;&lt;/strong&gt; &lt;code&gt;1.574.912 * 4&lt;/code&gt; &lt;strong&gt;-&gt;&lt;/strong&gt; &lt;strong&gt;&lt;code&gt;6.299.648&lt;/code&gt;&lt;/strong&gt; (El tiempo paralelo)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;¿Cuál es el valor del &lt;em&gt;speedup&lt;/em&gt; (Tiempo secuencial / Tiempo paralelo)?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Tiempo Total Secuencial&lt;/code&gt;&lt;/strong&gt; = (2.113.536 * 1) + 2.097.152 * 2) + 2.097.152 * 3) &lt;strong&gt;-&gt;&lt;/strong&gt; &lt;code&gt;12.599.296&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Speedup&lt;/code&gt;&lt;/strong&gt; = &lt;code&gt;T(secuencial) / T(paralelo)&lt;/code&gt; &lt;strong&gt;-&gt;&lt;/strong&gt; &lt;code&gt;(12.599.296) / (6.299.648)&lt;/code&gt; &lt;strong&gt;-&gt;&lt;/strong&gt; &lt;strong&gt;&lt;code&gt;2.02&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Modifique el código para lograr un mejor &lt;em&gt;speedup&lt;/em&gt;. (Este punto no se como hacerlo)&lt;/strong&gt; (Le tenemos que dejar la menor cantidad de filas posibles a P8 ya que tarda un 🥚)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Multiplo(7)&lt;/strong&gt; mas cercano a 128 -&gt; 126&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Strip P8&lt;/strong&gt; -&gt; 2 filas (128 - 126)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Strip P1-P7&lt;/strong&gt; -&gt; 18 filas (126/7)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Calculamos los tiempos para &lt;strong&gt;P8&lt;/strong&gt; con la nueva distribución de filas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Asignaciones&lt;/strong&gt; &lt;code&gt;2 * 128^2&lt;/code&gt; + &lt;code&gt;2 * 128&lt;/code&gt; -&gt; &lt;code&gt;32.768&lt;/code&gt; + &lt;code&gt;256&lt;/code&gt; -&gt; &lt;strong&gt;&lt;code&gt;33.024&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sumas&lt;/strong&gt;  &lt;code&gt;2 * 128^2&lt;/code&gt; -&gt; &lt;strong&gt;&lt;code&gt;32.768&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Productos&lt;/strong&gt; &lt;code&gt;2 * 128^2&lt;/code&gt; -&gt; &lt;strong&gt;&lt;code&gt;32.768&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;T(P8)&lt;/code&gt;&lt;/strong&gt; -&gt; &lt;strong&gt;(33.024 * 1)&lt;/strong&gt; + &lt;strong&gt;(32.768 * 2)&lt;/strong&gt; + &lt;strong&gt;(32.768 * 3)&lt;/strong&gt; &lt;strong&gt;-&gt;&lt;/strong&gt; 33.024 + 65.536 + 98.304 &lt;strong&gt;-&gt;&lt;/strong&gt; &lt;strong&gt;&lt;code&gt;196.864&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;T(P8)&lt;/strong&gt; -&gt; TP8 * 4 &lt;strong&gt;-&gt;&lt;/strong&gt; &lt;code&gt;196.864 * 4&lt;/code&gt; &lt;strong&gt;-&gt;&lt;/strong&gt; &lt;strong&gt;&lt;code&gt;787.456&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Calculamos el tiempo para &lt;strong&gt;P1-P7&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Asignaciones&lt;/strong&gt; &lt;code&gt;18 * 128^2&lt;/code&gt; + &lt;code&gt;18 * 128&lt;/code&gt; -&gt; &lt;code&gt;294.912&lt;/code&gt; + &lt;code&gt;2.304&lt;/code&gt; -&gt; &lt;strong&gt;&lt;code&gt;297.216&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sumas&lt;/strong&gt;  &lt;code&gt;18 * 128^2&lt;/code&gt; -&gt; &lt;strong&gt;&lt;code&gt;294.912&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Productos&lt;/strong&gt; &lt;code&gt;18 * 128^2&lt;/code&gt; -&gt; &lt;strong&gt;&lt;code&gt;294.912&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;T(P1-P7)&lt;/code&gt;&lt;/strong&gt; -&gt; &lt;strong&gt;(297.216 * 1)&lt;/strong&gt; + &lt;strong&gt;(294.912 * 2)&lt;/strong&gt; + &lt;strong&gt;(294.912 * 3)&lt;/strong&gt; &lt;strong&gt;-&gt;&lt;/strong&gt; 297.216 + 589.824 + 884.736 &lt;strong&gt;-&gt;&lt;/strong&gt; &lt;strong&gt;&lt;code&gt;1.771.776&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Como el tiempo mas grande es el de T(P1-P7) el tiempo paralelo  es: &lt;strong&gt;&lt;code&gt;1.771.776&lt;/code&gt;&lt;/strong&gt; y volvemos a calcular el speedup:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Speedup&lt;/code&gt;&lt;/strong&gt; = &lt;code&gt;T(secuencial) / T(paralelo)&lt;/code&gt; &lt;strong&gt;-&gt;&lt;/strong&gt; &lt;code&gt;(12.599.296) / (1.771.776)&lt;/code&gt; &lt;strong&gt;-&gt;&lt;/strong&gt; &lt;strong&gt;&lt;code&gt;7.11&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;2) Cuales Cumplen con ASV&lt;/h2&gt;
&lt;p&gt;Dado el siguiente programa concurrente con memoria compartida:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;x := 4; y := 2; z := 3;&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;co
   x := x - z;
   z := z * 2;
   y := z + 4
oc
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Una asignación &lt;code&gt;x := e&lt;/code&gt; &lt;strong&gt;cumple la propiedad de ASV&lt;/strong&gt; si:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;(1) &lt;code&gt;e&lt;/code&gt; contiene &lt;strong&gt;a lo sumo una referencia crítica&lt;/strong&gt;, y la variable &lt;code&gt;x&lt;/code&gt; &lt;strong&gt;no es referenciada por otros procesos&lt;/strong&gt;,  o&lt;/li&gt;
&lt;li&gt;(2) &lt;code&gt;e&lt;/code&gt; no contiene ninguna referencia crítica, en cullo caso &lt;strong&gt;X&lt;/strong&gt; puede ser leida por otros procesos&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Referencia critica se da cuanto estas leyendo una variable que es modificada por otro proceso concurrente&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;a) ¿Cuáles de las asignaciones dentro de la sentencia &lt;code&gt;co&lt;/code&gt; cumplen la propiedad de ASV? Justifique claramente.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;| Instrucción      | ¿Cumple_ASV? | Justificación                                                                 |
|------------------|--------------|--------------------------------------------------------------------------------|
| &lt;strong&gt;X := X - Z&lt;/strong&gt;     | ✅ Sí         | &lt;strong&gt;&quot;e&quot;&lt;/strong&gt; tiene a lo sumo una referencia critica &lt;strong&gt;(X - Z)&lt;/strong&gt;, y la variable &lt;strong&gt;x&lt;/strong&gt; no es referenciada en otros procesos (&lt;strong&gt;X&lt;/strong&gt;) |
| &lt;strong&gt;Z := Z * 2&lt;/strong&gt;     | ✅ Sí         | &lt;strong&gt;&quot;e&quot;&lt;/strong&gt; no contiene niguna referencia critica &lt;strong&gt;(Z * 4)&lt;/strong&gt;, en cullo caso &lt;strong&gt;x&lt;/strong&gt; puede ser leida por otros procesos (&lt;strong&gt;Z&lt;/strong&gt;) |
| &lt;strong&gt;Y := Z + 4&lt;/strong&gt;     | ✅ Sí         | &lt;strong&gt;&quot;e&quot;&lt;/strong&gt; tiene a lo sumo 1 referencia critica &lt;strong&gt;(Z + 4)&lt;/strong&gt;, y la variable &lt;strong&gt;x&lt;/strong&gt; no es referenciada por otros procesos (&lt;strong&gt;&lt;code&gt;Y&lt;/code&gt;&lt;/strong&gt;) |&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;b)&lt;/strong&gt; Indique los resultados posibles de la ejecución. Justifique.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cada tarea se ejecuta sin ninguna interrupción hasta que termina (Si una sentencia no es atómica se puede cortar su ejecución pero al cumplir ASV la ejecución no se ve afectada) y las llamamos T1, T2 y T3 respectivamente obtenemos el siguiente subconjunto de historias:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;T1, T2, T3 =&gt; X=1, Z=6, y=10&lt;/li&gt;
&lt;li&gt;T1, T3, T2 =&gt; X=1, Z=6, y=7&lt;/li&gt;
&lt;li&gt;T2, T1, T3 =&gt; X=-2, Z=6, y=10&lt;/li&gt;
&lt;li&gt;T2, T3, T1 =&gt; X=-2, Z=6, y=10&lt;/li&gt;
&lt;li&gt;T3, T1, T2 =&gt; X=1, Z=6, y=7&lt;/li&gt;
&lt;li&gt;T3, T2, T1 =&gt; X=-2, Z=6, y=7&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Explicación:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El valor de Z es siempre el mismo ya que no posee ninguna referencia crítica.&lt;/li&gt;
&lt;li&gt;Los valores de X e Y se ven afectados por la ejecución de T2 ya que sus resultados dependen de la referencia que hacen a la variable Z que es modificada.&lt;/li&gt;
&lt;li&gt;Entonces, si T1 y T3 se ejecutan antes que T2 ambas usarán el valor inicial de Z que es 3 obteniendo los resultados X=1 e Y=7;&lt;/li&gt;
&lt;li&gt;Ahora si T2 se ejecuta antes que las demás los resultados serán X=-2 e Y=10 y por último, tenemos los casos en que T2 se ejecuta en medio con T1 antes y T3 después o con T3 antes y T1 después.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;3) Cuales Cumplen con ASV 2&lt;/h2&gt;
&lt;p&gt;Dado el siguiente programa concurrente con memoria compartida:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;x = 3; y = 2; z = 5;&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;co
    x = y * z
    z = z * 2
    y = y + 2x
oc
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;a) ¿Cuáles de las asignaciones dentro de la sentencia &lt;code&gt;co&lt;/code&gt; cumplen la propiedad de “A lo sumo una vez”? Justifique claramente.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;| Instrucción      | ¿Cumple_ASV? | Justificación                                                                 |
|------------------|--------------|--------------------------------------------------------------------------------|
| &lt;strong&gt;X = Y * Z&lt;/strong&gt;     | ❌ No         | &lt;strong&gt;&quot;e&quot;&lt;/strong&gt; tiene dos referencias criticas &lt;strong&gt;(X - Z)&lt;/strong&gt; |
| &lt;strong&gt;Z = Z * 2&lt;/strong&gt;     | ✅ Sí         | &lt;strong&gt;&quot;e&quot;&lt;/strong&gt; no contiene niguna referencia critica &lt;strong&gt;(Z * 2)&lt;/strong&gt;, en cullo caso &lt;strong&gt;x&lt;/strong&gt; puede ser leida por otros procesos &lt;strong&gt;(Z)&lt;/strong&gt; |
| &lt;strong&gt;Y = Y + 2X&lt;/strong&gt;     | ❌ No         | &lt;strong&gt;&quot;e&quot;&lt;/strong&gt; tiene a lo sumo 1 referencia critica &lt;strong&gt;(Y + 2X)&lt;/strong&gt;, y la variable &lt;strong&gt;x&lt;/strong&gt; es referenciada por otros procesos (&lt;strong&gt;&lt;code&gt;Y&lt;/code&gt;&lt;/strong&gt;) |&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;b)&lt;/strong&gt; Indique los resultados posibles de la ejecución. Justifique.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A, B y C o A, C y B -&gt; x = 10; z = 10; y = 22&lt;/li&gt;
&lt;li&gt;C, B y A o B, C y A -&gt; x = 80; z = 10; y = 8&lt;/li&gt;
&lt;li&gt;C, A y B -&gt; x = 40; z = 10; y = 8&lt;/li&gt;
&lt;li&gt;B, A y C-&gt; x = 20; z = 10; y = 42&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si se empieza a ejecutar &lt;strong&gt;A&lt;/strong&gt; leyendo a &lt;strong&gt;y = 2&lt;/strong&gt;, y en ese momento se ejecuta &lt;strong&gt;C&lt;/strong&gt; leyendo a &lt;strong&gt;x = 3&lt;/strong&gt; (porque no terminó la asignación de &lt;strong&gt;A&lt;/strong&gt;), y luego termina lo que falta de &lt;strong&gt;A&lt;/strong&gt; y se ejecuta &lt;strong&gt;B&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;x = 10; z = 10; y = 8&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si se empieza a ejecutar &lt;strong&gt;A&lt;/strong&gt; leyendo a &lt;strong&gt;y = 2&lt;/strong&gt;, y en ese momento se ejecuta &lt;strong&gt;C&lt;/strong&gt; leyendo a &lt;strong&gt;x = 3&lt;/strong&gt; (porque no terminó la asignación de &lt;strong&gt;A&lt;/strong&gt;), y luego se ejecuta &lt;strong&gt;B&lt;/strong&gt; y lo que falta de &lt;strong&gt;A&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;x = 20; z = 10; y = 8&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;4) Numero de Mensajes y Granularidad&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Suponga los siguientes programas concurrentes. Asuma que “función” existe, y que los procesos son iniciados desde el programa principal.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;chan canal (double);

process grano1 {
    int veces, i;
    double sum;

    for (veces = 1 to 10) {
        for (i = 1 to 10000)
            sum = sum + funcion(i);
        send canal(sum);
    }
}

process grano2 {
    int veces;
    double sum;

    for (veces = 1 to 10) {
        receive canal(sum);
        printf(sum);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;chan canal (double);

process grano1 {
    int veces, i;
    double sum;

    for (veces = 1 to 10000) {
        for (i = 1 to 10)
            sum = sum + i;
        send canal(sum);
    }
}

process grano2 {
    int veces;
    double sum;

    for (veces = 1 to 10000) {
        receive canal(sum);
        printf(sum);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;a) Analice desde el punto de vista del número de mensajes.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En &lt;strong&gt;P1&lt;/strong&gt; se envían solo &lt;strong&gt;10 mensajes&lt;/strong&gt; (uno por cada bloque de 10000), mientras que en &lt;strong&gt;P2&lt;/strong&gt; se envían &lt;strong&gt;10000 mensajes&lt;/strong&gt; (uno por cada bloque de 10), por lo que &lt;strong&gt;P1 es mucho más eficiente&lt;/strong&gt; en términos de comunicación.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;b) Analice desde el punto de vista de la granularidad de los procesos.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En &lt;strong&gt;P1&lt;/strong&gt;, la comunicación es poco frecuente y el cómputo por mensaje es alto, por lo que tiene &lt;strong&gt;granularidad gruesa&lt;/strong&gt;.&lt;br&gt;
En &lt;strong&gt;P2&lt;/strong&gt;, hay mucha más comunicación en menos tiempo, lo que implica &lt;strong&gt;granularidad fina&lt;/strong&gt;, mayor concurrencia pero también más sobrecarga.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-7.CJpjOlIH.png&amp;#x26;w=889&amp;#x26;h=654&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;c) Cuál de los programas le parece más adecuado para ejecutar sobre una arquitectura de tipo cluster de PCs? Justifique.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La implementación más adecuada para este tipo de arquitecturas es &lt;strong&gt;P1&lt;/strong&gt;, por ser de &lt;strong&gt;granularidad gruesa&lt;/strong&gt;. Al tratarse de una arquitectura con memoria distribuida la comunicación entre los procesos es más costosa ya que cada proceso puede ejecutarse
en computadores diferentes, por lo tanto sería más eficiente que la sobrecarga de
comunicación sea lo más baja posible, y dicha característica la brinda la &lt;strong&gt;granularidad gruesa&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5) Numero de Mensajes y Granularidad 2&lt;/h2&gt;
&lt;p&gt;Suponga los siguientes programas concurrentes. Asuma que &lt;strong&gt;EOS&lt;/strong&gt; es un valor especial que indica el &lt;strong&gt;fin de la secuencia de mensajes&lt;/strong&gt;, y que los procesos son iniciados desde el programa principal.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;chan canal (double);

process Genera {
    int fila, col;
    double sum;

    for (fila = 1 to 10000) {
        for (col = 1 to 10000)
            send canal(a(fila, col));
    }

    send canal(EOS);  // End of Stream
}

process Acumula {
    double valor, sumT;
    sumT = 0;

    receive canal(valor);
    while (valor &amp;#x3C;&gt; EOS) {
        sumT = sumT + valor;
        receive canal(valor);
    }

    printf(sumT);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;chan canal (double);

process Genera {
    int fila, col;
    double sum;

    for (fila = 1 to 10000) {
        sum = 0;
        for (col = 1 to 10000)
            sum = sum + a(fila, col);
        send canal(sum);
    }
    send canal(EOS);  // End of Stream
}

process Acumula {
    double valor, sumT;
    sumT = 0;
    receive canal(valor);
    while (valor &amp;#x3C;&gt; EOS) {
        sumT = sumT + valor;
        receive canal(valor);
    }

    printf(sumT);
}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;a) ¿Qué hacen los programas?&lt;/strong&gt;&lt;br&gt;
Ambos suman todos los elementos de una matriz 10000×10000, pero:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;P1&lt;/strong&gt;: &lt;code&gt;Genera&lt;/code&gt; envía cada elemento (100M mensajes) y &lt;code&gt;Acumula&lt;/code&gt; suma todo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;P2&lt;/strong&gt;: &lt;code&gt;Genera&lt;/code&gt; suma por fila y envía 1 valor por fila (10K mensajes); &lt;code&gt;Acumula&lt;/code&gt; suma esos totales.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Conclusión&lt;/strong&gt;: Hacen lo mismo, pero &lt;strong&gt;P2 es mucho más eficiente&lt;/strong&gt; en comunicación y procesamiento.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;b) Analice desde el punto de vista del número de mensajes.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Desde el punto de vista de los mensajes, &lt;strong&gt;P1 envía 100 millones&lt;/strong&gt; y &lt;strong&gt;P2 solo 10000&lt;/strong&gt;, por lo que &lt;strong&gt;P2&lt;/strong&gt; es mucho más eficiente en comunicación.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;c) Analice desde el punto de vista de la granularidad de los procesos.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Desde el punto de vista de granularidad, &lt;strong&gt;P2 tiene un grano más grueso&lt;/strong&gt; que &lt;strong&gt;P1&lt;/strong&gt; porque realiza más cómputo local y menos comunicación, lo que mejora la eficiencia.&lt;/p&gt;
&lt;p&gt;La &lt;strong&gt;granularidad&lt;/strong&gt; de una aplicación concurrente o paralela se refiere a la &lt;strong&gt;relación entre el tiempo dedicado al cómputo y el tiempo dedicado a la comunicación&lt;/strong&gt; entre procesos o hilos.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si una aplicación realiza &lt;strong&gt;mucho cómputo local&lt;/strong&gt; antes de necesitar comunicarse, se dice que tiene &lt;strong&gt;grano grueso&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Si, por el contrario, realiza &lt;strong&gt;frecuentes comunicaciones&lt;/strong&gt; con poco cómputo entre medio, se dice que tiene &lt;strong&gt;grano fino&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esta característica es clave para el &lt;strong&gt;diseño y rendimiento&lt;/strong&gt; de programas paralelos, ya que:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Grano grueso&lt;/strong&gt; suele ser más eficiente en arquitecturas donde la comunicación es costosa.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Grano fino&lt;/strong&gt; puede aprovechar mejor arquitecturas con alta velocidad de comunicación o memoria compartida eficiente.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;🔧 &lt;strong&gt;Resumen&lt;/strong&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;La granularidad es la proporción entre el cómputo y la comunicación en una aplicación. Afecta cómo se adapta el programa a una arquitectura paralela, diferenciándose entre &lt;strong&gt;grano fino&lt;/strong&gt; (más comunicación) y &lt;strong&gt;grano grueso&lt;/strong&gt; (más procesamiento local).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;d) ¿Cuál de los programas le parece más adecuado para ejecutar sobre una arquitectura de tipo cluster de PCs? Justifique.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;P2&lt;/strong&gt;, porque en clusters la comunicación es costosa y se prioriza el cómputo local.&lt;br&gt;
P2 reduce drásticamente los mensajes (de 100M a 10K), adaptándose mejor al &lt;strong&gt;grano grueso&lt;/strong&gt; que requieren estas arquitecturas.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6) Indicar para cada Item si son Equivalentes&lt;/h2&gt;
&lt;p&gt;Dados los siguientes dos segmentos de codigo, indicar para cada uno de los ítems si son equivalentes o no. Justificar cada caso (de ser necesario dar ejemplos).&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;...
int cant = 1000;

DO 
  (cant &amp;#x3C; -10); datos?(cant) → Sentencias1
▭ (cant &gt; 10);  datos?(cant) → Sentencias2
▭ (INCOGNITA);  datos?(cant) → Sentencias3
END DO
...
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;...
int cant = 1000;

While (true) {
  IF (cant &amp;#x3C; -10); datos?(cant) → Sentencias1
  ▭  (cant &gt; 10);  datos?(cant) → Sentencias2
  ▭  (INCOGNITA); datos?(cant) → Sentencias3
END IF}
...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dado que ambos comienzan con cant = 1000, se ejecuta la rama (cant &gt; 10). La diferencia clave está en el comportamiento ante guardas no habilitadas&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En el Segmento 1 (DO), si ninguna guarda es verdadera, el ciclo termina.&lt;/li&gt;
&lt;li&gt;En el Segmento 2 (while true), si ninguna guarda es verdadera, el programa se bloquea.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para que sean equivalentes, debe haber una guarda siempre habilitada, como INCOGNITA.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a) INCOGNITA equivale a: (cant = 0)&lt;/strong&gt; No son equivalentes si INCOGNITA solo cubre cant == 0, ya que valores como cant = 5 no están contemplados.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b) INCOGNITA equivale a: (cant &gt; -100)&lt;/strong&gt; Ambos segmentos son equivalentes si INCOGNITA ≡ (cant &gt; -100), ya que siempre hay una guarda habilitada y el ciclo no se detiene.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c) INCOGNITA equivale a: ((cant &gt; 0) or (cant &amp;#x3C; 0))&lt;/strong&gt; Ambos segmentos &lt;strong&gt;no son equivalentes&lt;/strong&gt; porque con &lt;code&gt;cant = 0&lt;/code&gt; ninguna guarda se cumple: el &lt;code&gt;DO&lt;/code&gt; finaliza, pero el &lt;code&gt;while (true)&lt;/code&gt; queda bloqueado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d) INCOGNITA equivale a: ((cant &gt; -10) or (cant &amp;#x3C; 10))&lt;/strong&gt; Los segmentos &lt;strong&gt;no son equivalentes&lt;/strong&gt; porque con &lt;code&gt;cant = 10&lt;/code&gt; o &lt;code&gt;-10&lt;/code&gt; ninguna guarda se cumple: el &lt;code&gt;DO&lt;/code&gt; finaliza, pero el &lt;code&gt;while (true)&lt;/code&gt; queda bloqueado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e) INCOGNITA equivale a: ((cant &gt;= -10) or (cant &amp;#x3C;= 10))&lt;/strong&gt; Con esta condición, los segmentos &lt;strong&gt;son equivalentes&lt;/strong&gt; porque la guarda cubre todos los casos y garantiza que siempre haya al menos una rama habilitada.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7) ¿Que valores quedan?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;4.&lt;/strong&gt; Dado el siguiente bloque de código, indique para cada inciso qué valor queda en &lt;code&gt;aux&lt;/code&gt;, o si el código queda bloqueado. Justifique sus respuestas.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-pascal&quot;&gt;aux := -1;
...
if (A == 0); P2?(aux) → aux = aux + 2;
▭ (A == 1); P3?(aux) → aux = aux + 5;
▭ (B == 0); P3?(aux) → aux = aux + 7;
end if;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;i. Si el valor de A = 1 y B = 2 antes del if, y solo P2 envia el valor 6.&lt;/strong&gt; &gt;&gt; Solo se habilita la rama &lt;code&gt;(A == 1); P3?(aux)&lt;/code&gt;, pero como &lt;strong&gt;P3 no envía ningún valor&lt;/strong&gt;, el código &lt;strong&gt;queda bloqueado esperando recibir de P3&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ii. Si el valor de A = 0 y B = 2 antes del if, y solo P2 envia el valor 8.&lt;/strong&gt; &gt;&gt; Se habilita la guarda &lt;code&gt;(A == 0); P2?(aux)&lt;/code&gt; y como &lt;strong&gt;P2 envía 8&lt;/strong&gt;, se recibe y se ejecuta &lt;code&gt;aux = 8 + 2&lt;/code&gt;, resultando en &lt;strong&gt;aux = 10&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;iii. Si el valor de A = 2 y B = 0 antes del if, y solo P3 envia el valor 6.&lt;/strong&gt; &gt;&gt; iii. Se habilita la guarda &lt;code&gt;(B == 0); P3?(aux)&lt;/code&gt; y como &lt;strong&gt;P3 envía 6&lt;/strong&gt;, se recibe y se ejecuta &lt;code&gt;aux = 6 + 7&lt;/code&gt;, dando como resultado &lt;strong&gt;aux = 13&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;iv. Si el valor de A = 2 y B = 1 antes del if, y solo P3 envia el valor 9&lt;/strong&gt; &gt;&gt; Todas las guardas son falsas, por lo que el &lt;code&gt;if&lt;/code&gt; &lt;strong&gt;no se ejecuta&lt;/strong&gt;, el código &lt;strong&gt;no se bloquea&lt;/strong&gt; y &lt;code&gt;aux&lt;/code&gt; permanece en &lt;strong&gt;-1&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;v. Si el valor de A = 1 y B = 0 antes del if, y solo P3 envia el valor 14&lt;/strong&gt; &gt;&gt; Las guardas &lt;code&gt;(A == 1)&lt;/code&gt; y &lt;code&gt;(B == 0)&lt;/code&gt; son verdaderas, ambas con &lt;code&gt;P3?(aux)&lt;/code&gt;, por lo que al recibir 14 se elige una de forma no determinista y &lt;code&gt;aux&lt;/code&gt; será &lt;strong&gt;19 (14+5)&lt;/strong&gt; o &lt;strong&gt;21 (14+7)&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;vi. Si el valor de A = 0 y B = 0 antes del if, P3 envia el valor 9 y P2 el valor 5.&lt;/strong&gt; &gt;&gt; Las guardas &lt;code&gt;(A == 0)&lt;/code&gt; y &lt;code&gt;(B == 0)&lt;/code&gt; son verdaderas; como &lt;strong&gt;P2&lt;/strong&gt; envía 5 y &lt;strong&gt;P3&lt;/strong&gt; envía 9, se elige una rama al azar y &lt;code&gt;aux&lt;/code&gt; será &lt;strong&gt;7 (5+2)&lt;/strong&gt; o &lt;strong&gt;16 (9+7)&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;8) ¿Que valores quedan? 2&lt;/h2&gt;
&lt;p&gt;Dado el siguiente programa concurrente con memoria compartida, y suponiendo que todas las variables están inicializadas en 0 al empezar el programa y las instrucciones NO son atómicas. Para cada una de las opciones indique verdadero o falso.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;En caso de ser verdadero indique el camino de ejecución para llegar a ese valor, y en caso de ser falso justifique claramente su respuesta.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;if (x = 0) then
    y := 4 * x + 2;
    x := y + 2 + x;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;if (x ≥ 0) then
    x := x + 1;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;x := x * 8 + x * 2 + 1;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;🔎 Probamos combinaciones buscando &lt;code&gt;x = 9&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;❌ Caso 1: P1 completo → P2 → P3&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-pascal&quot;&gt;// P1 ejecuta completo:
x = 0 → entra al if
y = 4*0 + 2 = 2
x = y + 2 + x = 2 + 2 + 0 = 4

// P2 ejecuta:
x = 4 + 1 = 5

// P3 ejecuta:
x = 10 * 5 + 1 = 51 → ❌ no es 9
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;❌ Caso 2: P2 → P3&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-pascal&quot;&gt;// P2 ejecuta:
x = 0 + 1 = 1

// P3 ejecuta:
x = 10 * 1 + 1 = 11 → ❌
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;❌ Caso 3: P3 → P2&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-pascal&quot;&gt;// P3 ejecuta:
x = 10 * 0 + 1 = 1

// P2 ejecuta:
x = 1 + 1 = 2 → ❌
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;❌ Caso 4: P3 con x = 2&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-pascal&quot;&gt;// Supongamos que x llega a 2 por P2 → P2
x = 0 + 1 = 1
x = 1 + 1 = 2

// P3 ejecuta:
x = 10 * 2 + 1 = 21 → ❌
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;❌ Conclusión del inciso &lt;strong&gt;a)&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;✅ &lt;strong&gt;x = 9 no se puede alcanzar&lt;/strong&gt;, porque:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;P1 produce como mucho x = 4&lt;/li&gt;
&lt;li&gt;P2 suma 1 cada vez&lt;/li&gt;
&lt;li&gt;P3 hace &lt;code&gt;x = 10 * x + 1&lt;/code&gt;, lo cual &lt;strong&gt;siempre da un número impar mayor&lt;/strong&gt; (nunca 9)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;✅ &lt;strong&gt;Respuesta final del inciso a)&lt;/strong&gt;:&lt;br&gt;
&lt;strong&gt;FALSO&lt;/strong&gt; – No existe ninguna secuencia de ejecución posible que lleve a &lt;code&gt;x = 9&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;✔️ &lt;strong&gt;Verdadero&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Una posible traza:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;P1 ejecuta parcialmente: &lt;code&gt;y := 4 * 0 + 2 = 2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;P3 ejecuta: &lt;code&gt;x := 0 * 8 + 0 * 2 + 1 = 1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;P2 ejecuta: &lt;code&gt;x := 1 + 1 = 2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;P1 finaliza: &lt;code&gt;x := y + 2 + x = 2 + 2 + 2 = 6&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;Por lo tanto, &lt;strong&gt;es posible&lt;/strong&gt; llegar a &lt;code&gt;x = 6&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;✔️ &lt;strong&gt;Verdadero&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Una traza simple:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;P2 ejecuta: &lt;code&gt;x := 1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;P3 ejecuta: &lt;code&gt;x := 10 * 1 + 1 = 11&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;P1 no entra porque &lt;code&gt;x ≠ 0&lt;/code&gt;.&lt;br&gt;
Resultado final: &lt;code&gt;x = 11&lt;/code&gt; → &lt;strong&gt;válido&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;✔️ &lt;strong&gt;Verdadero&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Análisis por casos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;y = 0&lt;/code&gt;: si &lt;strong&gt;P1 no ejecuta el cuerpo del &lt;code&gt;if&lt;/code&gt;&lt;/strong&gt; (porque &lt;code&gt;x ≠ 0&lt;/code&gt; al momento de evaluarlo)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;y = 2&lt;/code&gt;: si P1 ejecuta el &lt;code&gt;if&lt;/code&gt; con &lt;code&gt;x = 0&lt;/code&gt;, y aún no ha sido modificado&lt;/li&gt;
&lt;li&gt;&lt;code&gt;y = 6&lt;/code&gt;: si &lt;code&gt;x = 1&lt;/code&gt; al momento de ejecutar &lt;code&gt;y := 4 * x + 2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;y = 10&lt;/code&gt;: si &lt;code&gt;x = 2&lt;/code&gt; cuando se evalúa la asignación&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Como la asignación de &lt;code&gt;y&lt;/code&gt; depende directamente del valor de &lt;code&gt;x&lt;/code&gt;, que puede ser modificado por otros procesos antes de ejecutarla, &lt;strong&gt;solo esos cuatro valores&lt;/strong&gt; son posibles.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;9) La solución a un problema es paralelizada&lt;/h2&gt;
&lt;p&gt;Suponga que la solución a un problema es paralelizada sobre &lt;strong&gt;p&lt;/strong&gt; procesadores de dos maneras diferentes.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En un caso, el &lt;strong&gt;speedup (S)&lt;/strong&gt; está regido por la función &lt;strong&gt;S=p-1&lt;/strong&gt; y&lt;/li&gt;
&lt;li&gt;en el otro por la &lt;strong&gt;función S=p/2&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;¿Cuál de las dos soluciones se comportará más eficientemente al crecer la cantidad de procesadores? Justifique claramente.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;De las dos soluciones, la que tiene &lt;strong&gt;speedup S = p - 1&lt;/strong&gt; se comporta de forma más eficiente a medida que crece el número de procesadores.&lt;/p&gt;
&lt;p&gt;Esto se debe a que el speedup ideal es &lt;strong&gt;S = p&lt;/strong&gt;, y:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;S = p - 1&lt;/strong&gt; crece casi linealmente y se acerca al ideal.&lt;br&gt;
&lt;strong&gt;S = p / 2&lt;/strong&gt; crece más lentamente y siempre es la mitad del número de procesadores.&lt;/p&gt;
&lt;p&gt;Si analizamos la &lt;strong&gt;eficiencia&lt;/strong&gt;, que se define como:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;E = S / p&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;E = (p - 1) / p&lt;/strong&gt; -&gt; Esta eficiencia tiende a 1 cuando p crece.&lt;/li&gt;
&lt;li&gt;E = &lt;strong&gt;(p / 2) / p&lt;/strong&gt; -&gt; &lt;strong&gt;(p/2) / (p/1)&lt;/strong&gt; -&gt; &lt;strong&gt;(p * 1)/(2 * p)&lt;/strong&gt; -&gt; &lt;strong&gt;p/2p&lt;/strong&gt; -&gt; &lt;strong&gt;1/2&lt;/strong&gt; -&gt; La eficiencia es constante e igual al 50%, sin importar cuántos procesadores haya.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por lo tanto, la solución con &lt;strong&gt;S = p - 1&lt;/strong&gt; es más eficiente, ya que utiliza mejor los procesadores disponibles.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ahora suponga S = 1/p y S = 1/p^2&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ambos speedups disminuyen con más procesadores (son inversamente proporcionales).&lt;/li&gt;
&lt;li&gt;Pero &lt;strong&gt;S = 1/p&lt;/strong&gt; siempre es mayor que &lt;strong&gt;S = 1/(p^2)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Lo mismo ocurre con la eficiencia: &lt;strong&gt;1/(p^2)&lt;/strong&gt; decrece más lento que &lt;strong&gt;1/(p^3)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Por eso, &lt;strong&gt;la solución con S = 1/p es más eficiente y escala mejor&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;10) La solución a un problema es paralelizada 2&lt;/h2&gt;
&lt;p&gt;Suponga que la solución a un problema es paralelizada sobre p procesadores de dos maneras diferentes.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En un caso, el &lt;strong&gt;speedup (S)&lt;/strong&gt; está regido por la &lt;strong&gt;función S=p/3&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;y en el otro por la función &lt;strong&gt;S=p-3&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;¿Cuál de las dos soluciones se comportará más eficientemente al crecer la cantidad de procesadores? Justifique claramente.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Suponiendo el uso de 5 procesadores:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Opción 1: S = 5 / 3 ≈ 1.66&lt;/li&gt;
&lt;li&gt;Opción 2: S = 5 − 3 = 2&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En este caso, la segunda opción es más eficiente porque alcanza un mayor speedup.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ahora, incrementamos la cantidad de procesadores suponemos 100 procesadores:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Solución 1 =&gt; S=100/3=33,33&lt;/li&gt;
&lt;li&gt;Solución 2 =&gt; S=100-3=97&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Podemos decir, que a medida que &lt;strong&gt;p&lt;/strong&gt; tiende a infinito, para la &lt;strong&gt;solución 1&lt;/strong&gt; siempre el Speedup será la tercera parte en cambio para la &lt;strong&gt;solución 2&lt;/strong&gt; el valor &lt;strong&gt;&quot;-3&quot;&lt;/strong&gt; se vuelve despreciable.&lt;/p&gt;
&lt;p&gt;Por lo tanto la &lt;strong&gt;solución 2&lt;/strong&gt; es la que se comporta más eficientemente al crecer la cantidad de procesadores.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;11) La solución a un problema es paralelizada 3&lt;/h2&gt;
&lt;p&gt;Suponga que la solución a un problema es paralelizada sobre &lt;strong&gt;p&lt;/strong&gt; procesadores de dos maneras diferentes.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En un caso, el &lt;strong&gt;speedup(s)&lt;/strong&gt; esta regido por la &lt;strong&gt;función S = p-4&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;y el otro por la función &lt;strong&gt;S = p/3&lt;/strong&gt; para &lt;strong&gt;p &gt; 4&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;¿Cuál de las dos soluciones se comportara más eficientemente al crecer la cantidad de procesadores?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A medida que &lt;code&gt;p&lt;/code&gt; crece, la eficiencia de &lt;strong&gt;S = p − 4&lt;/strong&gt; se acerca a 1 (ideal).&lt;/li&gt;
&lt;li&gt;La eficiencia de &lt;strong&gt;S = p / 3&lt;/strong&gt; es constante y baja (0.33), sin importar el valor de &lt;code&gt;p&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Por eso, la función &lt;strong&gt;S = p − 4&lt;/strong&gt; se comporta mucho mejor para valores grandes de &lt;code&gt;p&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;12) La solución a un problema es paralelizada 4&lt;/h2&gt;
&lt;p&gt;Suponga que la solución a un problema es paralelizada sobre &lt;strong&gt;p&lt;/strong&gt; procesadores de dos maneras diferentes.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En un caso, la eficiencia está regido por la función &lt;strong&gt;E = 1/p&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;y en el otro por la función &lt;strong&gt;E =  1/p^2&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;¿Cuál de las dos soluciones se comportará más eficientemente al crecer la cantidad de procesadores? Justifique.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Claramente, a partir de p = 2, se observa que la eficiencia &lt;strong&gt;E₁ = 1/p&lt;/strong&gt; es mayor que la eficiencia &lt;strong&gt;E₂ = 1/p²&lt;/strong&gt;. Analicemos algunos valores:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Para p = 1:&lt;br&gt;
E₁ = 1/1 = 1  E₂ = 1/1 = 1&lt;/li&gt;
&lt;li&gt;Para p = 2:&lt;br&gt;
E₁ = 1/2 = 0.5  E₂ = 1/4 = 0.25&lt;/li&gt;
&lt;li&gt;Para p = 3:&lt;br&gt;
E₁ = 1/3 ≈ 0.33  E₂ = 1/9 ≈ 0.11&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Como se puede apreciar, &lt;strong&gt;E₁ siempre es mayor que E₂&lt;/strong&gt; a partir de p = 2, y ambas eficiencias decrecen al aumentar el número de procesadores.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusión:&lt;/strong&gt;&lt;br&gt;
La solución con &lt;strong&gt;E = 1/p&lt;/strong&gt; se comporta más eficientemente que la de &lt;strong&gt;E = 1/p²&lt;/strong&gt;, ya que decrece más lentamente. Sin embargo, &lt;strong&gt;ninguna de las dos escala bien&lt;/strong&gt; cuando &lt;code&gt;p&lt;/code&gt; crece mucho, ya que ambas tienden a eficiencia cero.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Foutput_1.DrDqIPmC.png&amp;#x26;w=1387&amp;#x26;h=949&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;| Procesadores (p) | E1 = 1/p | E2 = 1/p² |
|------------------|----------|-----------|
| 1                | 1.0000   | 1.0000    |
| 2                | 0.5000   | 0.2500    |
| 3                | 0.3333   | 0.1111    |
| 4                | 0.2500   | 0.0625    |
| 5                | 0.2000   | 0.0400    |
| 10               | 0.1000   | 0.0100    |
| 20               | 0.0500   | 0.0025    |
| 50               | 0.0200   | 0.0004    |
| 100              | 0.0100   | 0.0001    |&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;13) Suponga que el tiempo de ejecución de un algoritmo Secuencial&lt;/h2&gt;
&lt;p&gt;Suponga que el tiempo de ejecución de un algoritmo secuencial es de &lt;strong&gt;1000 unidades&lt;/strong&gt; de tiempo, de las cuales el &lt;strong&gt;80%&lt;/strong&gt; corresponden a código paralelizable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;¿Cuál es el límite en la mejora que puede obtenerse paralelizando el algoritmo?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tenemos un programa que tarda 1000 unidades de tiempo si lo ejecutamos de forma secuencial (1 solo procesador), pero el 80% de ese tiempo es paralelizable.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;80% de 1000 = 800 unidades de tiempo paralelizable&lt;/li&gt;
&lt;li&gt;20% de 1000 = 200 unidades de tiempo secuencial&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Ley de Andahl&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;T_Paralelo&lt;/strong&gt; = &lt;strong&gt;Porcion_T_secuencial&lt;/strong&gt; + (&lt;strong&gt;Porcion_T_paralelizable&lt;/strong&gt; / &lt;strong&gt;p&lt;/strong&gt;)&lt;/p&gt;
&lt;p&gt;Si usamos 800 procesadores, el tiempo de ejecución de la parte paralelizable se reduce a 1 unidad de tiempo.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;T_Paralelo&lt;/strong&gt; = &lt;strong&gt;200&lt;/strong&gt; + (&lt;strong&gt;800&lt;/strong&gt; / &lt;strong&gt;800&lt;/strong&gt;) -&gt; &lt;strong&gt;200&lt;/strong&gt; + &lt;strong&gt;1&lt;/strong&gt; -&gt; &lt;strong&gt;201&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Speedup&lt;/strong&gt; = &lt;strong&gt;T_secuencial&lt;/strong&gt; / &lt;strong&gt;T_paralelo&lt;/strong&gt; -&gt; &lt;strong&gt;1000&lt;/strong&gt; / &lt;strong&gt;201&lt;/strong&gt; ≈ &lt;strong&gt;4.975&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Conviene usar una cantidad mas chica de procesadores que pueden estar trabajando todo el tiempo&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;T_Paralelo&lt;/strong&gt; = &lt;strong&gt;200&lt;/strong&gt; + (&lt;strong&gt;800&lt;/strong&gt; / &lt;strong&gt;5&lt;/strong&gt;) = &lt;strong&gt;200&lt;/strong&gt; + &lt;strong&gt;160&lt;/strong&gt; = 360&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Speedup&lt;/strong&gt; = &lt;strong&gt;1000&lt;/strong&gt; / &lt;strong&gt;360&lt;/strong&gt; ≈ 2.778&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;14) Suponga que el tiempo de ejecución de un algoritmo Secuencial 2&lt;/h2&gt;
&lt;p&gt;Suponga que el tiempo de ejecución de un algoritmo secuencial es de &lt;strong&gt;8000 unidades&lt;/strong&gt; de tiempo, de las cuales solo el &lt;strong&gt;90% corresponde a código paralelizable&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;¿Cuál es el límite en la mejora que puede obtenerse paralelizando el algoritmo? Justifique.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;T_Total&lt;/strong&gt; = &lt;strong&gt;8000&lt;/strong&gt; el &lt;strong&gt;90%&lt;/strong&gt; es paralelizable es decir &lt;strong&gt;7200&lt;/strong&gt; y el &lt;strong&gt;10%&lt;/strong&gt; es secuencial es decir &lt;strong&gt;800&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;El mejor caso se da si usamos tantos procesadores como para la parte paralela tarde solo 1 unidad de tiempo (Es decir, 7200 procesadores para 7200 unidades paralelas).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;T_Paralelo&lt;/strong&gt; -&gt; &lt;strong&gt;T_secuencial&lt;/strong&gt; + &lt;strong&gt;T_paralelizable&lt;/strong&gt; / &lt;strong&gt;p&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;T_Paralelo&lt;/strong&gt; -&gt; &lt;strong&gt;800&lt;/strong&gt; + &lt;strong&gt;7200&lt;/strong&gt; / &lt;strong&gt;7200&lt;/strong&gt; -&gt; &lt;strong&gt;800&lt;/strong&gt; + &lt;strong&gt;1&lt;/strong&gt; -&gt; &lt;strong&gt;801&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Speedup&lt;/strong&gt; = &lt;strong&gt;T_secuencial&lt;/strong&gt; / &lt;strong&gt;T_Paralelo&lt;/strong&gt; -&gt; &lt;strong&gt;8000&lt;/strong&gt; / &lt;strong&gt;801&lt;/strong&gt; ≈ &lt;strong&gt;9.99&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El limite teorico de memoria es aproximadamente &lt;strong&gt;10 veces mas rapido&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;15) Suponga que el tiempo de ejecución de un algoritmo Secuencial 3&lt;/h2&gt;
&lt;p&gt;Suponga que el tiempo de ejecución de un algoritmo secuencial es de &lt;strong&gt;10000 unidades&lt;/strong&gt; de tiempo, de las cuales &lt;strong&gt;95% corresponden a código paralelizable&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;¿Cuál es el límite en la mejora que puede obtenerse paralelinzado el algoritmo?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;El limite se alncaza cuando se utilizan &lt;strong&gt;9500&lt;/strong&gt; procesadores (uno por cada unidad de tiempo paralelizable), lo que reduce el tiempo de ejecución de la parte paralela a 1 unidad de tiempo.&lt;/p&gt;
&lt;p&gt;La parte secuencial, que &lt;strong&gt;no puede paralelizarse&lt;/strong&gt;, tarda &lt;strong&gt;500&lt;/strong&gt; unidades de tiempo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;T_Paralelo&lt;/strong&gt; = &lt;strong&gt;T_secuencial&lt;/strong&gt; + &lt;strong&gt;T_paralelizable&lt;/strong&gt; / p&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;T_Paralelo&lt;/strong&gt; = &lt;strong&gt;500&lt;/strong&gt; + &lt;strong&gt;9500&lt;/strong&gt; / &lt;strong&gt;9500&lt;/strong&gt; -&gt; &lt;strong&gt;500&lt;/strong&gt; + &lt;strong&gt;1&lt;/strong&gt; = &lt;strong&gt;501&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Speedup&lt;/strong&gt; = &lt;strong&gt;T_secuencial_total&lt;/strong&gt; / &lt;strong&gt;T_Paralelo&lt;/strong&gt; = &lt;strong&gt;10000&lt;/strong&gt; / &lt;strong&gt;501&lt;/strong&gt; ≈ &lt;strong&gt;19.96&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este resultado &lt;strong&gt;confirma la Ley de Amdahl&lt;/strong&gt;, la cual establece que el límite de paralelización de un algoritmo &lt;strong&gt;no depende de cuántos procesadores se usen&lt;/strong&gt;, sino de &lt;strong&gt;cuánta parte del código es secuencial&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;hr&gt;
&lt;h1&gt;📢 Miralas de Reojo&lt;/h1&gt;
&lt;hr&gt;
&lt;h2&gt;1) Propuesta al problema de alocación SJN&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Sea la siguiente solución propuesta al problema de alocación SJN (Short Job Next):&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-nginx&quot;&gt;Monitor SJN {
    Bool libre = true;
    Cond turno;

    Procedure request {
        If (not libre) wait (turno, tiempo);
        Libre = false;
    }

    Procedure release {
        Libre = true;
        Signal (turno);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;a) ¿Funciona correctamente con disciplina de señalización Signal and continue? Justifique.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;No, la solución no funciona correctamente con la disciplina de señalización &lt;strong&gt;Signal and Continue (S&amp;#x26;C)&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Bajo esta disciplina, cuando un proceso realiza un &lt;code&gt;signal&lt;/code&gt;, &lt;strong&gt;continúa ejecutando dentro del monitor&lt;/strong&gt;, y el proceso que fue despertado es enviado a la &lt;strong&gt;cola de listos (ready queue)&lt;/strong&gt; del sistema operativo. Esto implica que su reingreso al monitor depende de la &lt;strong&gt;política de planificación del sistema&lt;/strong&gt;, y no se garantiza que sea el próximo en ejecutarse.&lt;/p&gt;
&lt;p&gt;En consecuencia, un proceso con menor tiempo (según la política &lt;strong&gt;Shortest Job Next&lt;/strong&gt;) podría quedar &lt;strong&gt;retrasado&lt;/strong&gt; si otro proceso ingresa antes al monitor. Por lo tanto, el orden de ejecución no refleja necesariamente la prioridad establecida por el parámetro &lt;code&gt;tiempo&lt;/code&gt;, y &lt;strong&gt;no se cumple el objetivo del SJN&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Respuesta de un random&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Con S&amp;#x26;C un proceso que es despertado para poder seguir ejecutando es pasado a la cola
de ready en cuyo caso su orden de ejecución depende de la política que se utilice para
ordenar los procesos en dicha cola. Puede ser que sea retrasado en esa cola permitiendo
que otro proceso ejecute en el monitor antes que el por lo que podría no cumplirse el
objetivo del SJN.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-2.DqI6VFKX.png&amp;#x26;w=876&amp;#x26;h=565&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;b)&lt;/strong&gt; ¿Funciona correctamente con disciplina de señalización &lt;em&gt;signal and wait&lt;/em&gt;? Justifique.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sí, &lt;strong&gt;la solución funciona correctamente&lt;/strong&gt; con la disciplina de señalización &lt;strong&gt;Signal and Wait (S&amp;#x26;W)&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;En esta disciplina, cuando un proceso ejecuta un &lt;code&gt;signal&lt;/code&gt;, &lt;strong&gt;cede inmediatamente el control del monitor&lt;/strong&gt; al proceso que fue despertado, el cual &lt;strong&gt;continúa su ejecución justo después del &lt;code&gt;wait&lt;/code&gt;&lt;/strong&gt;. El proceso que hizo el &lt;code&gt;signal&lt;/code&gt; pasa a la cola de listos y debe esperar su turno para volver a ingresar al monitor.&lt;/p&gt;
&lt;p&gt;Esto garantiza que el proceso con menor tiempo (según la política Shortest Job Next) —que estaba esperando con prioridad— &lt;strong&gt;será efectivamente el próximo en acceder al recurso&lt;/strong&gt;, evitando que otro proceso pueda adelantarse y violar el orden deseado.&lt;/p&gt;
&lt;p&gt;Por lo tanto, &lt;strong&gt;la política SJN se respeta correctamente bajo Signal and Wait&lt;/strong&gt;, ya que se mantiene el control sobre el orden de ejecución de los procesos en espera.&lt;/p&gt;
&lt;p&gt;📘 &lt;strong&gt;Definiciones complementarias:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Signal and Continue:&lt;/strong&gt; El proceso que ejecuta el &lt;code&gt;signal&lt;/code&gt; &lt;strong&gt;continúa usando el monitor&lt;/strong&gt;, mientras que el proceso despertado &lt;strong&gt;debe competir&lt;/strong&gt; por reingresar al monitor.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Signal and Wait:&lt;/strong&gt; El proceso que ejecuta el &lt;code&gt;signal&lt;/code&gt; &lt;strong&gt;cede el monitor&lt;/strong&gt; al proceso despertado, que continúa su ejecución &lt;strong&gt;justo después del &lt;code&gt;wait&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;| &lt;strong&gt;Aspecto&lt;/strong&gt;                         | &lt;strong&gt;Signal and Continue (S&amp;#x26;C)&lt;/strong&gt;                                                                 | &lt;strong&gt;Signal and Wait (S&amp;#x26;W)&lt;/strong&gt;                                                                   |
|-------------------------------------|-----------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------|
| &lt;strong&gt;¿Quién sigue ejecutando en el monitor después del &lt;code&gt;signal&lt;/code&gt;?&lt;/strong&gt; | El proceso que hizo el &lt;code&gt;signal&lt;/code&gt; continúa.                                                     | El proceso que fue despertado entra inmediatamente al monitor.                              |
| &lt;strong&gt;Estado del proceso despertado&lt;/strong&gt;   | Pasa a la &lt;strong&gt;cola de listos&lt;/strong&gt; y debe competir por reingresar al monitor.                       | &lt;strong&gt;Continúa inmediatamente&lt;/strong&gt; dentro del monitor (no compite por el acceso).                  |
| &lt;strong&gt;Riesgo de pérdida de prioridad (SJN)&lt;/strong&gt; | &lt;strong&gt;Alto&lt;/strong&gt;: otro proceso puede ingresar antes que el de menor tiempo.                          | &lt;strong&gt;Nulo&lt;/strong&gt;: se garantiza que el proceso con menor tiempo accede primero.                      |
| &lt;strong&gt;¿Se respeta la política SJN?&lt;/strong&gt;    | ❌ &lt;strong&gt;No&lt;/strong&gt;: puede no ejecutarse el proceso con menor tiempo debido a la competencia externa.   | ✅ &lt;strong&gt;Sí&lt;/strong&gt;: el proceso con menor tiempo es el próximo en continuar.                          |
| &lt;strong&gt;Uso recomendado en SJN&lt;/strong&gt;          | No recomendado, ya que puede romper la prioridad por tiempo.                                  | Recomendado, ya que respeta el orden de espera basado en el tiempo.                         |
| &lt;strong&gt;Control de acceso&lt;/strong&gt;               | Depende del planificador del sistema operativo.                                               | Controlado directamente por el monitor y su lógica de sincronización.                      |&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2) “passing the condition” En Semaforos&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Utilice la técnica de “passing the condition” para implementar un semáforo &lt;em&gt;fair&lt;/em&gt; usando monitores.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;monitor Semaforo {
    int s = 1, espera = 0;
    cond pos;

    procedure P() {
        if (s == 0) {
            espera++;
            wait(pos);
        } else {
            s = s - 1;
        }
    };

    procedure V() {
        if (espera == 0) {
            s = s + 1;
        } else {
            espera--;
            signal(pos);
        }
    };
};
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;3) Problema de Concurrencia&lt;/h2&gt;
&lt;p&gt;Sea &lt;strong&gt;“ocupados”&lt;/strong&gt; una variable entera inicializada en &lt;strong&gt;N&lt;/strong&gt; que representa la cantidad de &lt;strong&gt;slots&lt;/strong&gt; ocupados de un &lt;strong&gt;buffer&lt;/strong&gt;, y sean &lt;strong&gt;P1&lt;/strong&gt; y &lt;strong&gt;P2&lt;/strong&gt; dos programas que se ejecutan de manera concurrente, donde cada una de las instrucciones que los componen son atómicas.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;if (ocupados &amp;#x3C; N) then
begin
    buffer := elemento_a_agregar;
    ocupados := ocupados + 1;
end;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;if (ocupados &gt; 0) then
begin
    ocupados := ocupados - 1;
    elemento_a_sacar := buffer;
end;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;¿El programa funciona correctamente para asegurar el manejo del buffer?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si su respuesta es afirmativa justifique.&lt;/li&gt;
&lt;li&gt;Sino, encuentre una secuencia de ejecución que lo verifique y escríbala, y además modifique la solución para que funcione correctamente (Suponga buffer, elemento_a_agregar y elemento_a_sacar variables declaradas).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;No, el programa no funciona correctamente en un entorno concurrente.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;🔍 Justificación con secuencia de ejecución:&lt;/p&gt;
&lt;p&gt;Supongamos que el buffer está &lt;strong&gt;lleno&lt;/strong&gt; (&lt;code&gt;ocupados = N&lt;/code&gt;). En ese momento:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;El proceso &lt;strong&gt;P2&lt;/strong&gt; evalúa &lt;code&gt;if (ocupados &gt; 0)&lt;/code&gt;, lo cual es &lt;strong&gt;verdadero&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Luego, &lt;strong&gt;P2 ejecuta &lt;code&gt;ocupados := ocupados - 1&lt;/code&gt;&lt;/strong&gt;, pero &lt;strong&gt;aún no ha leído el dato del buffer&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Justo después, el proceso &lt;strong&gt;P1&lt;/strong&gt; evalúa su condición &lt;code&gt;if (ocupados &amp;#x3C; N)&lt;/code&gt;, que &lt;strong&gt;ahora también es verdadera&lt;/strong&gt;, ya que P2 lo acaba de decrementar.&lt;/li&gt;
&lt;li&gt;Entonces, &lt;strong&gt;P1 escribe en el buffer un nuevo valor&lt;/strong&gt;, sobrescribiendo el dato que &lt;strong&gt;P2 todavía no alcanzó a leer&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;⚠️ Como resultado, &lt;strong&gt;P2 pierde el dato original&lt;/strong&gt; y lee un valor nuevo que &lt;strong&gt;no era el que debía consumir&lt;/strong&gt;. Esto genera una &lt;strong&gt;condición de carrera&lt;/strong&gt; (race condition) y un &lt;strong&gt;error de sincronización&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;✅ Solución propuesta:&lt;/p&gt;
&lt;p&gt;Para evitar este problema, es necesario &lt;strong&gt;postergar el decremento de &lt;code&gt;ocupados&lt;/code&gt; en P2 hasta después de leer el valor del buffer&lt;/strong&gt;, asegurando que el dato se consuma correctamente antes de liberar el espacio.&lt;/p&gt;
&lt;p&gt;✔️ Código corregido de P2&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-pascal&quot;&gt;if (ocupados &gt; 0) then
begin
    elemento_a_sacar := buffer;
    ocupados := ocupados - 1;
end;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Con esta corrección, &lt;strong&gt;P1 no podrá ingresar&lt;/strong&gt; hasta que &lt;strong&gt;P2 haya terminado de leer&lt;/strong&gt; el valor, manteniendo la coherencia del estado del buffer.&lt;/p&gt;
&lt;p&gt;🧠 Nota adicional:&lt;/p&gt;
&lt;p&gt;Este tipo de errores son comunes cuando no se usa un mecanismo de sincronización explícito, como &lt;strong&gt;semáforos, monitores o exclusión mutua&lt;/strong&gt;. En un sistema real, lo ideal sería proteger el acceso al buffer con algún tipo de &lt;strong&gt;región crítica&lt;/strong&gt; o control de concurrencia.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;4) Problema de Concurrencia 2&lt;/h2&gt;
&lt;p&gt;Sea &lt;strong&gt;“cantidad”&lt;/strong&gt; una variable entera inicializada en 0 que representa la cantidad de
elementos de un &lt;strong&gt;buffer&lt;/strong&gt;, y sean &lt;strong&gt;P1&lt;/strong&gt; y &lt;strong&gt;P2&lt;/strong&gt; dos programas que se ejecutan de manera concurrente, donde cada una de las instrucciones que los componen son atómicas.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;if (cantidad = 0) then
begin
    cantidad := cantidad + 1;
    buffer := elemento_a_agregar;
end;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;if (cantidad &gt; 0) then
begin
    elemento_a_sacar := buffer;
    cantidad := cantidad - 1;
end;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Además existen dos alumnos de concurrente que analizan el programa y opinan lo siguiente:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;“Pepe&lt;/strong&gt;: este programa funciona correctamente ya que las instrucciones son atómicas”.&lt;/li&gt;
&lt;li&gt;“&lt;strong&gt;José&lt;/strong&gt;: no Pepe estás equivocado, hay por lo menos una secuencia de ejecución en
la cual funciona erróneamente”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;¿Con cuál de los dos alumnos está de acuerdo? Si está de acuerdo con Pepe justifique su respuesta.
Si está de acuerdo con José encuentre una secuencia de ejecución que verifique lo que José opina y escríbala, y modifique la solución para que funcione correctamente (Suponga buffer y elemento variables declaradas). (22-04-2009)&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Estoy de acuerdo con José.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Aunque las instrucciones sean atómicas, el programa &lt;strong&gt;no es seguro concurrentemente&lt;/strong&gt;, ya que existen &lt;strong&gt;interleavings (intercalaciones de ejecución)&lt;/strong&gt; posibles que generan un comportamiento incorrecto.&lt;/p&gt;
&lt;p&gt;🔍 &lt;strong&gt;Ejemplo de secuencia de ejecución errónea:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;El proceso &lt;strong&gt;P1&lt;/strong&gt; evalúa la condición &lt;code&gt;if (cantidad = 0)&lt;/code&gt; → &lt;strong&gt;verdadera&lt;/strong&gt;, y entra al &lt;code&gt;begin&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;P1 ejecuta la instrucción &lt;code&gt;cantidad := cantidad + 1&lt;/code&gt;&lt;/strong&gt;, pero &lt;strong&gt;aún no ha escrito en el buffer&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;En ese momento, el proceso &lt;strong&gt;P1 se interrumpe&lt;/strong&gt;, y &lt;strong&gt;P2 toma el control&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;P2 evalúa &lt;code&gt;if (cantidad &gt; 0)&lt;/code&gt;&lt;/strong&gt; → &lt;strong&gt;verdadera&lt;/strong&gt; (porque &lt;code&gt;cantidad&lt;/code&gt; ahora vale 1).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;P2 ejecuta &lt;code&gt;elemento_a_sacar := buffer&lt;/code&gt;&lt;/strong&gt;, pero &lt;strong&gt;el buffer aún no fue actualizado por P1&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Como resultado, &lt;strong&gt;P2 lee un valor inválido o desactualizado&lt;/strong&gt; del buffer.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Problema identificado:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;El hecho de que las instrucciones sean atómicas &lt;strong&gt;no garantiza la atomicidad de toda la sección crítica&lt;/strong&gt; compuesta por múltiples instrucciones relacionadas entre sí.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;✅ &lt;strong&gt;Modificación para que funcione correctamente:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Una forma de corregirlo es &lt;strong&gt;reordenar las instrucciones de P1&lt;/strong&gt;, asegurando que el valor se escriba en el buffer &lt;strong&gt;antes de habilitar su lectura&lt;/strong&gt; (es decir, antes de incrementar &lt;code&gt;cantidad&lt;/code&gt;):&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-pascal&quot;&gt;// P1 corregido:
if (cantidad = 0) then
begin
    buffer := elemento_a_agregar;
    cantidad := cantidad + 1;
end;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;De este modo, si &lt;strong&gt;P2 observa que &lt;code&gt;cantidad &gt; 0&lt;/code&gt;&lt;/strong&gt;, entonces es seguro asumir que el buffer &lt;strong&gt;ya contiene un valor válido&lt;/strong&gt; para ser consumido.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;🧠 Conclusión:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Estoy de acuerdo con &lt;strong&gt;José&lt;/strong&gt;, porque:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El código original permite que &lt;strong&gt;P2 lea un valor inválido&lt;/strong&gt; si se interrumpe a P1 en el momento inadecuado.&lt;/li&gt;
&lt;li&gt;La solución requiere &lt;strong&gt;ajustar el orden de operaciones&lt;/strong&gt; para garantizar consistencia en el acceso al buffer, incluso si cada instrucción individual es atómica.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;5) Indique los posibles valores finales de x&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Indique los posibles valores finales de x en el siguiente programa (justifique claramente su respuesta):&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-c&quot;&gt;int x = 3;
sem s1 = 1, s2 = 0;

co
  // P1
  P(s1);              // Espera mutex
  x = x * x;          
  V(s1);              // Libera mutex

  // P2
  P(s2);              // Espera señal de P3
  P(s1);              // Espera mutex
  x = x * 3;
  V(s1);

  // P3
  P(s1);              // Espera mutex
  x = x - 2;
  V(s2);              // Señaliza a P2
  V(s1);
oc
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;s1 →&lt;/strong&gt; &lt;em&gt;mutex:&lt;/em&gt; puede pasar un solo proceso por vez.&lt;br&gt;
&lt;strong&gt;s2 →&lt;/strong&gt; &lt;em&gt;semáforo de señalización:&lt;/em&gt; esperan señalización de un evento y pasa sólo uno.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Aunque se libere un semaforo, no tiene que volver a ejecutarse ya que no estamos en un while (Si un semaforo paso PASO)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;| Orden de ejecución       | Valor final de &lt;code&gt;x&lt;/code&gt; |
|--------------------------|--------------------|
| P1 → P3 → P2             | 21                 |
| P3 → P2 → P1             | 9                  |
| P3 → P1 → P2             | 3                  |&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;P1&lt;/strong&gt; y &lt;strong&gt;P3&lt;/strong&gt; comienzan esperando a &lt;strong&gt;s1&lt;/strong&gt;. Por ser un mutex, sólo puede continuar uno de ellos y no será interrumpido por el otro hasta liberar a &lt;strong&gt;s1&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Primer resultado&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Si comienza P1:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Asigna x=9&lt;/li&gt;
&lt;li&gt;luego incrementa &lt;strong&gt;s1&lt;/strong&gt; permitiendo que continúe &lt;strong&gt;P3&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;P3&lt;/strong&gt; asigna &lt;strong&gt;x=7&lt;/strong&gt; y señala &lt;strong&gt;s2&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Esto habilita a &lt;strong&gt;P2&lt;/strong&gt; que estaba esperando.&lt;/li&gt;
&lt;li&gt;Si &lt;strong&gt;P2&lt;/strong&gt; continúa, intentará obtener s1 con lo cual se vuelve a bloquear volviendo el control a &lt;strong&gt;P3&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;En cualquier caso, &lt;strong&gt;P3&lt;/strong&gt; libera a &lt;strong&gt;s1&lt;/strong&gt; y termina.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;P2&lt;/strong&gt; es despertado, asigna x = 21 y termina.&lt;/li&gt;
&lt;li&gt;Valor &lt;strong&gt;final x=21.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Segundo y Tercer resultado&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Si comienza &lt;strong&gt;P3&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Asigna &lt;strong&gt;x = 1&lt;/strong&gt; y señala a &lt;strong&gt;s2&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Esto habilita a &lt;strong&gt;P2&lt;/strong&gt; que estaba esperando.&lt;/li&gt;
&lt;li&gt;Si P2 continúa, intentará obtener &lt;strong&gt;s1&lt;/strong&gt; con lo cual se vuelve a bloquear volviendo el control a &lt;strong&gt;P3&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Cuando &lt;strong&gt;P3&lt;/strong&gt; libera a &lt;strong&gt;s1&lt;/strong&gt;, &lt;strong&gt;P1&lt;/strong&gt; y &lt;strong&gt;P2&lt;/strong&gt; pueden competir por él:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Si gana P1&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;asigna &lt;strong&gt;x=1&lt;/strong&gt;,&lt;/li&gt;
&lt;li&gt;libera a &lt;strong&gt;s1&lt;/strong&gt; y termina;&lt;/li&gt;
&lt;li&gt;finaliza &lt;strong&gt;P2&lt;/strong&gt; y asigna &lt;strong&gt;x = 3&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Valor final x=3.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Si gana P2&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;asigna &lt;strong&gt;x=3&lt;/strong&gt;,&lt;/li&gt;
&lt;li&gt;libera a &lt;strong&gt;s1&lt;/strong&gt; y termina;&lt;/li&gt;
&lt;li&gt;finaliza &lt;strong&gt;P1&lt;/strong&gt; y asigna &lt;strong&gt;x = 9&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Valor final &lt;strong&gt;x = 9&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;P2&lt;/strong&gt; nunca puede comenzar la historia ya que espera un semáforo de señalización que sólo &lt;strong&gt;P3&lt;/strong&gt; señala. Cualquier historia en la que &lt;strong&gt;P2&lt;/strong&gt; esté antes de &lt;strong&gt;P3&lt;/strong&gt; es inválida. En todas las historias los semáforos terminan con los mismos valores con los que están inicializados.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6) Cuales valores de k son posibles&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;c)&lt;/strong&gt; Dado el siguiente programa concurrente indique cuáles valores de &lt;code&gt;K&lt;/code&gt; son posibles al finalizar, y describa una secuencia de instrucciones para obtener dicho resultado:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;Process P1 {
    for (i = 1 to K) {
        N = N + 1;
    }
}

Process P2 {
    for (i = 1 to K) {
        N = N + 1;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;i) 2K
ii) 2K + 2&lt;br&gt;
iii) K&lt;br&gt;
iv) 2&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-c&quot;&gt;// Ambos procesos ejecutan el mismo bucle:
for (i = 1 to K)
    N = N + 1;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;✅ &lt;strong&gt;i) Valor final = 2K&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Caso posible:&lt;/strong&gt; ejecución secuencial sin interferencia.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ejemplo (K = 3):&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;P1: N=0 -&gt; 1 -&gt; 2 -&gt; 3
P2: N=3 -&gt; 4 -&gt; 5 -&gt; 6
Resultado final: N = 6 = 2*K
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;❌ &lt;strong&gt;ii) Valor final = 2K + 2&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Caso imposible.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Justificación:&lt;/strong&gt;&lt;br&gt;
Cada proceso ejecuta exactamente &lt;code&gt;K&lt;/code&gt; incrementos. Como mucho se pueden hacer &lt;code&gt;2K&lt;/code&gt; sumas. No hay forma de hacer más sin ejecutar más iteraciones, lo cual no ocurre.&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;iii) Valor final = K&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Caso posible:&lt;/strong&gt; interferencia total entre procesos. Se pisan las operaciones.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ejemplo (K = 3):&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;N inicialmente = 0

Intercalado:
P1 lee N=0       // aún no actualiza
P2 lee N=0       // aún no actualiza
P1 escribe N=1
P2 escribe N=1   // pisa el valor anterior → se pierde un incremento

Repite este patrón durante las 3 iteraciones.

Resultado final: solo 3 incrementos efectivos → N = 3 = K
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;✅ &lt;strong&gt;iv) Valor final = 2&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Caso posible:&lt;/strong&gt; interferencia total y mal intercalado extremo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ejemplo (K = 3):&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;N = 0

P1 iteración 1: lee N=0
P2 iteración 1: lee N=0
P1 escribe N=1
P2 escribe N=1   → pisa a P1

P1 iteración 2: lee N=1
P2 iteración 2: lee N=1
P1 escribe N=2
P2 escribe N=2   → pisa a P1

Resultado final: N = 2
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h1&gt;🚨 Rezar para que no Tomen&lt;/h1&gt;
&lt;hr&gt;
&lt;h2&gt;1) Resuelva con monitores&lt;/h2&gt;
&lt;p&gt;Resuelva con monitores el siguiente problema:&lt;br&gt;
Tres clases de procesos comparten el acceso a una lista enlazada: &lt;strong&gt;searchers&lt;/strong&gt;, &lt;strong&gt;inserters&lt;/strong&gt; y &lt;strong&gt;deleters&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los &lt;strong&gt;searchers&lt;/strong&gt; sólo examinan la lista, y por lo tanto pueden ejecutar concurrentemente unos con otros.&lt;/li&gt;
&lt;li&gt;Los &lt;strong&gt;inserters&lt;/strong&gt; agregan nuevos ítems al final de la lista; las inserciones deben ser mutuamente exclusivas para evitar insertar dos ítems casi al mismo tiempo. Sin embargo, un insert puede hacerse en paralelo con uno o más searchers.&lt;/li&gt;
&lt;li&gt;Por último, los &lt;strong&gt;deleters&lt;/strong&gt; remueven ítems de cualquier lugar de la lista. A lo sumo un deleter puede acceder la lista a la vez, y el borrado también debe ser mutuamente exclusivo con &lt;strong&gt;searchers&lt;/strong&gt; e &lt;strong&gt;inserters&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;monitor Controlador_ListaEnlazada {
    int numSearchers = 0, numInserters = 0, numDeleters = 0;
    cond searchers, inserters, deleters;

    procedure pedir_Deleter() {
        while (numSearchers &gt; 0 OR numInserters &gt; 0 OR numDeleters &gt; 0) {
            wait(deleters);
        }
        numDeleters = numDeleters + 1;
    }

    procedure liberar_Deleter() {
        numDeleters = numDeleters - 1;
        signal(inserters);
        signal(deleters);
        signal_all(searchers);
    }

    procedure pedir_Searcher() {
        while (numDeleters &gt; 0) {
            wait(searchers);
        }
        numSearchers = numSearchers + 1;
    }

    procedure liberar_Searcher() {
        numSearchers = numSearchers - 1;
        if (numSearchers == 0 AND numInserters == 0) {
            signal(deleters);
        }
    }

    procedure pedir_Inserter() {
        while (numDeleters &gt; 0 OR numInserters &gt; 0) {
            wait(inserters);
        }
        numInserters = numInserters + 1;
    }

    procedure liberar_Inserter() {
        numInserters = numInserters - 1;
        signal(inserters);
        if (numSearchers == 0) {
            signal(deleters);
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;🧵 Procesos:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;process Searchers[i = 1..S] {
    Controlador_ListaEnlazada.pedir_Searcher();
    &amp;#x3C;Realiza búsqueda en la lista&gt;
    Controlador_ListaEnlazada.liberar_Searcher();
}

process Inserters[j = 1..I] {
    Controlador_ListaEnlazada.pedir_Inserter();
    &amp;#x3C;Inserta en la lista&gt;
    Controlador_ListaEnlazada.liberar_Inserter();
}

process Deleters[k = 1..D] {
    Controlador_ListaEnlazada.pedir_Deleter();
    &amp;#x3C;Borra en la lista&gt;
    Controlador_ListaEnlazada.liberar_Deleter();
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;🧠 &lt;strong&gt;Resumen: Monitor &lt;code&gt;Controlador_ListaEnlazada&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;👥 Tipos de procesos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Searchers&lt;/strong&gt;: pueden acceder &lt;strong&gt;concurrentemente&lt;/strong&gt;, salvo que haya un &lt;strong&gt;Deleter&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inserters&lt;/strong&gt;: acceden &lt;strong&gt;de a uno&lt;/strong&gt;, pero &lt;strong&gt;pueden convivir con Searchers&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deleters&lt;/strong&gt;: requieren &lt;strong&gt;exclusión total&lt;/strong&gt; (no pueden ejecutarse junto a ningún otro proceso).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;🔒 Comportamiento de sincronización:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Searchers&lt;/code&gt; esperan si hay un &lt;code&gt;Deleter&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Inserters&lt;/code&gt; esperan si hay otro &lt;code&gt;Inserter&lt;/code&gt; o un &lt;code&gt;Deleter&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Deleters&lt;/code&gt; esperan si hay cualquier otro proceso activo (Searcher o Inserter).&lt;/li&gt;
&lt;li&gt;Al liberar, se despiertan procesos bloqueados según condiciones.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;✅ ¿Funciona correctamente?
Sí, &lt;strong&gt;el monitor implementa correctamente las restricciones&lt;/strong&gt; de sincronización para los tres tipos de procesos.   Asegura exclusión mutua, convivencia segura y respeta la lógica de prioridades.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2) Protocolos de Acceso a la SC&lt;/h2&gt;
&lt;p&gt;En los protocolos de acceso a sección crítica vistos en clase, cada proceso ejecuta el mismo algoritmo. Una manera alternativa de resolver el problema es usando un proceso &lt;strong&gt;coordinador&lt;/strong&gt;. En este caso, cuando cada proceso &lt;strong&gt;SC[i]&lt;/strong&gt; quiere entrar a su &lt;strong&gt;sección crítica&lt;/strong&gt; le avisa al &lt;strong&gt;coordinador&lt;/strong&gt;, y espera a que éste le dé permiso. Al terminar de ejecutar su sección crítica, el proceso &lt;strong&gt;SC[i]&lt;/strong&gt; le avisa al &lt;strong&gt;coordinador&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Desarrolle protocolos para los procesos &lt;strong&gt;SC[i]&lt;/strong&gt; y el &lt;strong&gt;coordinador&lt;/strong&gt; usando sólo variables compartidas (no tenga en cuenta la propiedad de eventual entrada).&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;int aviso[1:N] = ([N] 0), permiso[1:N] = ([N] 0);
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;process SC[i = 1 to N] {
    SNC;

    // Protocolo de entrada
    permiso[i] = 1;
    while (aviso[i] == 0) skip;

    // Sección crítica
    SC;

    // Protocolo de salida
    aviso[i] = 0;
    SNC;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;process Coordinador {
    int i = 1;
    while (true) {
        // Espera que algún proceso solicite permiso
        while (permiso[i] == 0)
            i = i mod N + 1;

        // Otorga permiso al proceso i
        permiso[i] = 0;
        aviso[i] = 1;

        // Espera a que el proceso libere la SC
        while (aviso[i] == 1) skip;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;3) Solución a la Criba&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;💀 Dudo mucho que tomen este ejercicio, lo pongo por las dudas&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Describa la solución utilizando la criba de Eratóstenes al problema de hallar los primos entre 2 y n. &lt;strong&gt;¿Cómo termina el algoritmo? ¿Qué modificaría para que no termine de esa manera?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La criba de Eratóstenes es un algoritmo clásico para determinar cuáles números en un rango son primos. Supongamos que queremos generar todos los primos entre &lt;strong&gt;2&lt;/strong&gt; y &lt;strong&gt;n&lt;/strong&gt;. Primero, escribimos una lista con todos los números:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;2 3 4 5 6 7 ... n
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Comenzando con el primer número no tachado en la lista, 2, recorremos la lista y borramos los múltiplos de ese número. Si n es impar, obtenemos la lista:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;2 3 5 7 ... n
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;En este momento, los números borrados no son primos; los números que quedan todavía son candidatos a ser primos. Pasamos al próximo número, &lt;strong&gt;3&lt;/strong&gt;, y repetimos el anterior proceso borrando los &lt;strong&gt;múltiplos de 3&lt;/strong&gt;. Si seguimos este proceso hasta que todo número fue considerado, los números que quedan en la lista final serán todos los primos entre &lt;strong&gt;2&lt;/strong&gt; y &lt;strong&gt;n&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Para solucionar este problema de forma paralela podemos emplear un pipeline de procesos filtro.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cada filtro recibe una serie de números de su predecesor y envía una serie de números a su sucesor.&lt;/li&gt;
&lt;li&gt;El primer número que recibe un filtro es el próximo primo más grande;&lt;/li&gt;
&lt;li&gt;Le pasa a su sucesor todos los números que no son múltiplos del primero.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El siguiente es el algoritmo pipeline para la generación de números primos.&lt;/p&gt;
&lt;p&gt;Por cada canal, el primer número es primo y todos los otros números no son múltiplo de ningún primo menor que el primer número:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;Process Criba[1]
{
    int p = 2;

    for [i = 3 to n by 2] 
        Criba[2] ! (i);
}

Process Criba[i = 2 to L]
{
    int p, proximo;

    Criba[i-1] ? p;
    do Criba[i-1] ? (proximo) →
        if ((proximo MOD p) &amp;#x3C;&gt; 0) →
            Criba[i+1] ! (proximo);
        fi
    od
}
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;El primer proceso, &lt;strong&gt;Criba[1]&lt;/strong&gt;, envía todos los números impares desde &lt;code&gt;3 a n&lt;/code&gt; a &lt;strong&gt;Criba[2]&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Cada uno de los otros procesos recibe una serie de números de su predecesor.&lt;/li&gt;
&lt;li&gt;El primer número &lt;strong&gt;&lt;code&gt;p&lt;/code&gt;&lt;/strong&gt; que recibe el proceso &lt;strong&gt;&lt;code&gt;Criba[i]&lt;/code&gt;&lt;/strong&gt; es el &lt;strong&gt;i-ésimo&lt;/strong&gt; primo.&lt;/li&gt;
&lt;li&gt;Cada Criba[i] subsecuentemente pasa todos los otros números que recibe que no son múltiplos de su primo &lt;strong&gt;&lt;code&gt;p&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;El número total &lt;strong&gt;&lt;code&gt;L&lt;/code&gt;&lt;/strong&gt; de procesos Cribe debe ser lo suficientemente grande para garantizar que todos los primos hasta &lt;strong&gt;&lt;code&gt;n&lt;/code&gt;&lt;/strong&gt; son generados. Por ejemplo, hay 25 primos menores que 100;&lt;/li&gt;
&lt;li&gt;el porcentaje decrece para valores crecientes de &lt;strong&gt;&lt;code&gt;n&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El programa anterior termina en deadlock, ya que no hay forma de saber cuál es el último número de la secuencia y cada proceso queda esperando un próximo número que no llega.&lt;/p&gt;
&lt;p&gt;Podemos fácilmente modificarlo para que termine normalmente usando centinelas, es decir que al final de los streams de entrada son marcados por un centinela&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;# EOS: End Of Stream (-1 indica fin del flujo)

Process Criba[1] {
    int p = 2;

    # Enviar todos los números impares desde 3 hasta n a Criba[2]
    for [i = 3 to n by 2]
        Criba[2] ! i;

    # Enviar fin de flujo
    Criba[2] ! -1;
}

Process Criba[i = 2 to L] {
    int p, proximo;
    boolean seguir = true;

    # Recibe el primer número (primo)
    Criba[i-1] ? p;

    do (seguir);
        # Recibe siguiente candidato
        Criba[i-1] ? proximo -&gt;

        if (proximo = -1) {
            seguir = false;
            Criba[i+1] ! -1;   # Propaga EOS al siguiente proceso
        }
        else if ((proximo MOD p) &amp;#x3C;&gt; 0) {
            Criba[i+1] ! proximo;  # Si no es múltiplo, lo pasa
        }
    od
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;4) Transformar Solucion usando mensajes asincronicos&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Dada la siguiente solución con monitores al problema de alocación de un recurso con múltiples unidades, transforme la misma en una solución utilizando mensajes asincrónicos.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;Monitor Alocador_Recurso {
    INT disponible = MAXUNIDADES;
    SET unidades = valores iniciales;
    COND libre;   // TRUE cuando hay recursos

    procedure adquirir(INT id) {
        if (disponible == 0)
            wait(libre);
        else {
            disponible = disponible - 1;
            remove(unidades, id);
        }
    }

    procedure liberar(INT id) {
        insert(unidades, id);
        if (empty(libre))
            disponible := disponible + 1;
        else
            signal(libre);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;type clase_op = enum(adquirir, liberar);
chan request(int idCliente, claseOp oper, int idUnidad);
chan respuesta[n](int id_unidad);

Process Administrador_Recurso {
    int disponible = MAXUNIDADES;
    set unidades = valor inicial disponible;
    queue pendientes;

    while (true) {
        receive request(idCliente, oper, id_unidad);

        if (oper == adquirir) {
            if (disponible &gt; 0) {
                disponible = disponible - 1;
                remove(unidades, id_unidad);
                send respuesta[idCliente](id_unidad);
            } else {
                insert(pendientes, idCliente);
            }
        } else {
            if (empty(pendientes)) {
                disponible = disponible + 1;
                insert(unidades, id_unidad);
            } else {
                remove(pendientes, idCliente);
                send respuesta[idCliente](id_unidad);
            }
        }
    }
}
// Fin del proceso Administrador_Recurso

Process Cliente[i = 1 to n] {
    int id_unidad;

    send request(i, adquirir, 0);
    receive respuesta[i](id_unidad);

    // Usa la unidad

    send request(i, liberar, id_unidad);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;🧠 1. &lt;strong&gt;Modelo de comunicación&lt;/strong&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Monitores&lt;/strong&gt; utilizan una &lt;strong&gt;comunicación directa&lt;/strong&gt; entre procesos a través de &lt;strong&gt;procedimientos compartidos&lt;/strong&gt;. El proceso cliente &lt;strong&gt;entra al monitor&lt;/strong&gt;, ejecuta &lt;code&gt;adquirir()&lt;/code&gt; o &lt;code&gt;liberar()&lt;/code&gt;, y &lt;strong&gt;bloquea su ejecución&lt;/strong&gt; si no puede continuar (por ejemplo, si no hay recursos).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Mensajes asincrónicos&lt;/strong&gt;, en cambio, se basan en &lt;strong&gt;comunicación por paso de mensajes&lt;/strong&gt;. El cliente &lt;strong&gt;envía un mensaje&lt;/strong&gt; al administrador (&lt;code&gt;request&lt;/code&gt;) y luego &lt;strong&gt;espera la respuesta&lt;/strong&gt; por otro canal (&lt;code&gt;respuesta[i]&lt;/code&gt;). No hay acceso directo a las variables compartidas; todo se coordina mediante mensajes.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;🔁 2. &lt;strong&gt;Sincronización y control de acceso&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;En el &lt;strong&gt;monitor&lt;/strong&gt;, la sincronización es &lt;strong&gt;implícita&lt;/strong&gt;: si &lt;code&gt;disponible == 0&lt;/code&gt;, el proceso ejecuta &lt;code&gt;wait(libre)&lt;/code&gt; y queda &lt;strong&gt;suspendido automáticamente&lt;/strong&gt; hasta que otro proceso haga &lt;code&gt;signal(libre)&lt;/code&gt; al liberar un recurso.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;En la versión &lt;strong&gt;con mensajes&lt;/strong&gt;, no hay suspensión automática. El administrador debe &lt;strong&gt;mantener una cola de espera (&lt;code&gt;pendientes&lt;/code&gt;)&lt;/strong&gt; y decidir manualmente a quién responder y cuándo. Si alguien libera una unidad y hay clientes esperando, el administrador &lt;strong&gt;desencola&lt;/strong&gt; y &lt;strong&gt;responde explícitamente&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;🔐 3. &lt;strong&gt;Visibilidad y consistencia del estado&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;En el monitor, los procesos tienen &lt;strong&gt;acceso directo a las variables&lt;/strong&gt; &lt;code&gt;disponible&lt;/code&gt;, &lt;code&gt;unidades&lt;/code&gt;, etc., pero solo &lt;strong&gt;uno a la vez&lt;/strong&gt;, garantizando exclusión mutua.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Con mensajes asincrónicos, &lt;strong&gt;solo el administrador&lt;/strong&gt; conoce y modifica el estado global. Los clientes &lt;strong&gt;no ven directamente cuántos recursos quedan&lt;/strong&gt;; solo saben si obtuvieron uno o no, cuando reciben la respuesta.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;🧩 4. &lt;strong&gt;Modelo de espera&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;En monitores, la espera se maneja con &lt;code&gt;wait&lt;/code&gt; y &lt;code&gt;signal&lt;/code&gt;, que pueden funcionar según dos disciplinas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Signal and Wait&lt;/strong&gt; (el proceso que señala cede el monitor al despertado)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Signal and Continue&lt;/strong&gt; (el proceso que señala continúa)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;En mensajes, &lt;strong&gt;la espera es activa y manual&lt;/strong&gt;: el cliente &lt;strong&gt;se bloquea esperando una respuesta&lt;/strong&gt;, y el administrador debe tener lógica para enviarle esa respuesta &lt;strong&gt;cuando le toque&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;⚙️ 5. &lt;strong&gt;Aplicabilidad según arquitectura&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Los &lt;strong&gt;monitores&lt;/strong&gt; son más adecuados para sistemas &lt;strong&gt;centralizados o con memoria compartida&lt;/strong&gt;, ya que dependen de sincronización interna y acceso directo a variables.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Los &lt;strong&gt;mensajes asincrónicos&lt;/strong&gt; son ideales en &lt;strong&gt;sistemas distribuidos o clusters&lt;/strong&gt;, donde no existe memoria compartida y cada proceso corre en su propio nodo. Permiten &lt;strong&gt;separar cómputo y comunicación&lt;/strong&gt; y escalar fácilmente.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;💬 Ejemplo concreto&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Supongamos que hay 3 unidades disponibles, y 5 procesos piden recursos.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;En el &lt;strong&gt;monitor&lt;/strong&gt;, los 3 primeros entran y adquieren recursos; los otros 2 quedan bloqueados con &lt;code&gt;wait(libre)&lt;/code&gt; hasta que alguien libere. Luego, &lt;code&gt;liberar()&lt;/code&gt; hace &lt;code&gt;signal()&lt;/code&gt; y despierta a uno.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;En la &lt;strong&gt;versión con mensajes&lt;/strong&gt;, los 3 primeros reciben respuesta del administrador inmediatamente. Los otros 2 son &lt;strong&gt;enviados a la cola &lt;code&gt;pendientes&lt;/code&gt;&lt;/strong&gt;, y recién serán atendidos cuando un recurso sea liberado y el administrador procese esa cola.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;✅ Conclusión&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El uso de &lt;strong&gt;monitores&lt;/strong&gt; es más directo y automatizado, pero menos flexible fuera de sistemas con memoria compartida.&lt;/li&gt;
&lt;li&gt;El enfoque de &lt;strong&gt;mensajes asincrónicos&lt;/strong&gt; permite mayor &lt;strong&gt;control y distribución&lt;/strong&gt;, pero requiere manejar manualmente colas, lógica de respuesta y sincronización, lo cual lo hace más complejo pero también más escalable.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;5) Problema de ordenar de menor a mayor un arreglo&lt;/h2&gt;
&lt;p&gt;Sea el problema de ordenar de menor a mayor un arreglo de A[1..n]&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;Process P1
{
    int nuevo, a1[1:n/2];
    const mayor = n/2;

    // ordenar a1 en orden no decreciente
    P2 ! (a1[mayor]);
    P2 ? (nuevo);

    do a1[mayor] &gt; nuevo →
        // poner nuevo en el lugar correcto
        // en a1, descartando 
        // el viejo a1[mayor]
        P2 ! (a1[mayor]);
        P2 ? (nuevo);
    od
}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;Process P2
{
    int nuevo, a2[1:n/2];
    const menor = 1;

    // ordenar a2 en orden no decreciente
    P1 ? (nuevo);
    P1 ! (a2[menor]);

    do a2[menor] &amp;#x3C; nuevo →
        // poner nuevo en el lugar correcto
        // en a2, descartando
        // el viejo a2[menor]
        P1 ? (nuevo);
        P1 ! (a2[menor]);
    od
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Mejor caso:&lt;/strong&gt;&lt;br&gt;
En el escenario más favorable, los arreglos ya están correctamente distribuidos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los &lt;code&gt;n/2&lt;/code&gt; valores más pequeños están en el proceso &lt;strong&gt;P1&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Los &lt;code&gt;n/2&lt;/code&gt; valores más grandes están en &lt;strong&gt;P2&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Como los extremos (mayor de &lt;code&gt;a1&lt;/code&gt; y menor de &lt;code&gt;a2&lt;/code&gt;) ya están en orden, los procesos solo necesitan hacer &lt;strong&gt;una comparación inicial&lt;/strong&gt; y confirmar que no hay que intercambiar nada.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Resultado:&lt;/strong&gt; Solo se envían &lt;strong&gt;2 mensajes&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;P1 envía su mayor a P2.&lt;/li&gt;
&lt;li&gt;P2 responde con su menor a P1.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;🧪 &lt;strong&gt;Ejemplo con n = 6 (a1 y a2 de tamaño 3)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Supongamos:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;P1: a1 = [1, 2, 3]     (valores más chicos)
P2: a2 = [4, 5, 6]     (valores más grandes)
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Proceso:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;1)&lt;/code&gt; P1 envía el mayor de &lt;code&gt;a1&lt;/code&gt;: &lt;code&gt;3&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;2)&lt;/code&gt; P2 envía el menor de &lt;code&gt;a2&lt;/code&gt;: &lt;code&gt;4&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;3)&lt;/code&gt; P1 verifica: &lt;code&gt;3 &amp;#x3C; 4&lt;/code&gt; ✅, así que &lt;strong&gt;todo está ordenado&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;✅ Resultado:
&lt;ul&gt;
&lt;li&gt;Se intercambian &lt;strong&gt;2 mensajes&lt;/strong&gt;: &lt;code&gt;3 →&lt;/code&gt;, &lt;code&gt;4 →&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No se modifica nada&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Peor caso:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En el peor de los casos, todos los elementos están en el proceso equivocado:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Es decir, &lt;strong&gt;los mayores están en P1&lt;/strong&gt; y &lt;strong&gt;los menores en P2&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esto obligará a intercambiar completamente los &lt;code&gt;n/2&lt;/code&gt; elementos entre ambos procesos.&lt;br&gt;
Cada valor necesita &lt;strong&gt;un mensaje de ida y uno de vuelta&lt;/strong&gt;, ya que el intercambio es coordinado y requiere validación mutua.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Resultado:&lt;/strong&gt; Se intercambian &lt;strong&gt;&lt;code&gt;n&lt;/code&gt; mensajes&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;n/2&lt;/code&gt; valores de P1 a P2&lt;/li&gt;
&lt;li&gt;&lt;code&gt;n/2&lt;/code&gt; valores de P2 a P1 → total: &lt;code&gt;(n/2) * 2 = n&lt;/code&gt; mensajes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Supongamos:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;P1: a1 = [6, 5, 4]     (valores grandes, mal ubicados)
P2: a2 = [3, 2, 1]     (valores chicos, mal ubicados)
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Proceso:
&lt;ul&gt;
&lt;li&gt;P1 envía su mayor &lt;code&gt;6&lt;/code&gt;, P2 su menor &lt;code&gt;1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Ambos comparan y detectan que los elementos están desordenados, por lo tanto &lt;strong&gt;empiezan a intercambiar valores&lt;/strong&gt; de uno en uno.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Intercambios:
&lt;ul&gt;
&lt;li&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;6&lt;/code&gt; ↔ &lt;code&gt;1&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;&lt;code&gt;5&lt;/code&gt; ↔ &lt;code&gt;2&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;&lt;code&gt;4&lt;/code&gt; ↔ &lt;code&gt;3&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cada par requiere &lt;strong&gt;2 mensajes&lt;/strong&gt; (ida y vuelta).&lt;/p&gt;
&lt;p&gt;✅ Resultado:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Se hacen &lt;strong&gt;3 intercambios&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Se envían &lt;strong&gt;6 mensajes (3 * 2)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;📊 Resumen final:&lt;/p&gt;
&lt;p&gt;| Caso        | Cantidad de mensajes | Explicación breve                                       |
|-------------|----------------------|---------------------------------------------------------|
| Mejor caso  | 2                    | Solo se comparan los extremos, no se intercambia nada  |
| Peor caso   | n                    | Se intercambian todos los valores (n/2 * 2 = n)         |&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Utilice la idea de 1), extienda la solución a K procesos, con n/k valores c/u (“odd-even-exchange sort”).&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Asumimos que existen &lt;strong&gt;n&lt;/strong&gt; procesos &lt;strong&gt;P[1:n]&lt;/strong&gt; y que &lt;strong&gt;n&lt;/strong&gt; es par. Cada proceso ejecuta una serie de rondas. En las rondas impares, los procesos impares &lt;strong&gt;P[odd]&lt;/strong&gt; intercambian valores con el siguiente proceso impar &lt;strong&gt;P[odd+1]&lt;/strong&gt; si el valor esta fuera de orden. En rondas pares, los procesos pares &lt;strong&gt;P[even]&lt;/strong&gt; intercambia valores con el siguiente proceso par &lt;strong&gt;P[even+1]&lt;/strong&gt; si los valores estan fuera de orden. &lt;strong&gt;P[1]&lt;/strong&gt; y &lt;strong&gt;P[n]&lt;/strong&gt; no hacen nada en las rondas pares.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;process Proc[i = 1..k] {
    int a[1..n/k];        // subarreglo local ordenado
    int dato;
    const min = 1;
    const max = n/k;

    ordenar_localmente(a);  // ordenar el arreglo local al iniciar

    for ronda = 1 to k {

        // Si la ronda y el índice tienen la misma paridad: proceso actúa como EMISOR
        if (i mod 2 == ronda mod 2 and i &amp;#x3C; k) {
            // Enviar el mayor valor local al vecino derecho
            send(proc[i+1], a[max]);
            receive(proc[i+1], dato);

            while (a[max] &gt; dato) {
                // Insertar el dato recibido ordenadamente en &apos;a&apos;, descartando el mayor
                insertar_en_orden(a, dato);
                send(proc[i+1], a[max]);
                receive(proc[i+1], dato);
            }
        }

        // Si la ronda y el índice tienen distinta paridad: proceso actúa como RECEPTOR
        if (i mod 2 != ronda mod 2 and i &gt; 1) {
            receive(proc[i-1], dato);
            send(proc[i-1], a[min]);

            while (a[min] &amp;#x3C; dato) {
                // Insertar el dato recibido ordenadamente en &apos;a&apos;, descartando el menor
                insertar_en_orden(a, dato);
                receive(proc[i-1], dato);
                send(proc[i-1], a[min]);
            }
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;Lo de abajo no hace falta pero es para probar&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Con k = 4 procesos y n = 8 valores&lt;/strong&gt;, llevando las rondas hasta que los valores queden &lt;strong&gt;totalmente ordenados globalmente&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Configuración inicial&lt;/p&gt;
&lt;p&gt;Cada proceso tiene 2 elementos (n/k = 2), ordenados localmente:&lt;/p&gt;
&lt;p&gt;| Proceso | Valores iniciales |
|---------|-------------------|
| P1      | [8, 9]            |
| P2      | [5, 7]            |
| P3      | [3, 6]            |
| P4      | [1, 4]            |&lt;/p&gt;
&lt;p&gt;Rondas del algoritmo (hasta que esté ordenado)&lt;/p&gt;
&lt;p&gt;| Ronda | Procesos activos | Cambios realizados                                                                                         | Estado final por proceso                          |
|-------|------------------|------------------------------------------------------------------------------------------------------------|---------------------------------------------------|
| 0     | —                | —                                                                                                          | P1: [8, 9], P2: [5, 7], P3: [3, 6], P4: [1, 4]     |
| 1     | P1↔P2, P3↔P4     | P1⇄P2: 9⇄5 → P1: [5, 8], P2: [7, 9]P3⇄P4: 6⇄1 → P3: [1, 3], P4: [4, 6]                                 | P1: [5, 8], P2: [7, 9], P3: [1, 3], P4: [4, 6]     |
| 2     | P2↔P3            | 9⇄1 → P2: [1, 7], P3: [3, 9]                                                                               | P1: [5, 8], P2: [1, 7], P3: [3, 9], P4: [4, 6]     |
| 3     | P1↔P2, P3↔P4     | 8⇄1 → P1: [1, 5], P2: [7, 8]; 9⇄4 → P3: [3, 4], P4: [6, 9]                                                  | P1: [1, 5], P2: [7, 8], P3: [3, 4], P4: [6, 9]     |
| 4     | P2↔P3            | 8⇄3 → P2: [3, 7], P3: [4, 8]                                                                               | P1: [1, 5], P2: [3, 7], P3: [4, 8], P4: [6, 9]     |
| 5     | P1↔P2, P3↔P4     | 5⇄3 → P1: [1, 3], P2: [5, 7]; 8⇄6 → P3: [4, 6], P4: [8, 9]                                                  | P1: [1, 3], P2: [5, 7], P3: [4, 6], P4: [8, 9]     |
| 6     | P2↔P3            | 7⇄4 → P2: [4, 5], P3: [6, 7]                                                                               | P1: [1, 3], P2: [4, 5], P3: [6, 7], P4: [8, 9]     |
| 7     | P1↔P2, P3↔P4     | No intercambios necesarios (valores ya ordenados)                                                          | P1: [1, 3], P2: [4, 5], P3: [6, 7], P4: [8, 9]     |&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;P1: [1, 3]
P2: [4, 5]
P3: [6, 7]
P4: [8, 9]
→ Resultado final: [1, 3, 4, 5, 6, 7, 8, 9]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;El arreglo quedó completamente ordenado tras &lt;strong&gt;7 rondas&lt;/strong&gt;, que coincide con el peor caso esperado (hasta k rondas).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;b. ¿Cuántos mensajes intercambian en 3) en el mejor caso? ¿Y en el peor de los casos?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Si cada proceso ejecuta suficientes rondas para garantizar que la lista estará ordenada (en general, al menos &lt;strong&gt;k&lt;/strong&gt; rondas), en el &lt;strong&gt;k-proceso&lt;/strong&gt;, cada uno intercambia hasta &lt;strong&gt;(n/k)+1&lt;/strong&gt; mensajes por ronda. El algoritmo requiere hasta &lt;strong&gt;k^2&lt;/strong&gt; * &lt;strong&gt;(n/k+1)&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Se puede usar un proceso coordinador al cual todos los procesos le envían en cada ronda si realizaron algún cambio o no.&lt;/p&gt;
&lt;p&gt;Si al recibir todos los mensajes el coordinador detecta que ninguno cambio nada les comunica que terminaron.&lt;/p&gt;
&lt;p&gt;Esto agrega &lt;strong&gt;overhead&lt;/strong&gt; de mensajes ya que se envían mensajes al coordinador y desde el coordinador. Con &lt;strong&gt;n&lt;/strong&gt; procesos tenemos un overhead de &lt;strong&gt;2*k&lt;/strong&gt; mensajes en cada ronda.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Nota: Utilice un mecanismo de pasaje de mensajes, justifique la elección del mismo.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;PMS es más adecuado en este caso porque los procesos deben sincronizar de a pares en cada ronda por lo que &lt;strong&gt;PMA&lt;/strong&gt; no sería tan útil para la resolución de este problema ya que se necesitaría implementar una barrera simétrica para sincronizar los procesos de cada etapa.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6) Problema de ordenar de menor a mayor 2&lt;/h2&gt;
&lt;p&gt;Suponga los siguientes métodos de ordenación de menor a mayor para &lt;strong&gt;n&lt;/strong&gt; valores (&lt;strong&gt;n&lt;/strong&gt; par y potencia de 2), utilizando pasaje de mensajes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;1)&lt;/strong&gt; Un pipeline de filtros. El primero hace input de los valores de a uno por vez, mantiene el mínimo y le pasa los otros al siguiente. Cada filtro hace lo mismo: recibe un stream de valores desde el predecesor, mantiene el más chico y pasa los otros al sucesor.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2)&lt;/strong&gt; Una red de procesos filtro (como la de la figura).
&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-8.DrWzjNl7.png&amp;#x26;w=833&amp;#x26;h=394&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;3)&lt;/strong&gt; Odd/even exchange sort. Hay &lt;strong&gt;n&lt;/strong&gt; procesos &lt;strong&gt;P[1:n]&lt;/strong&gt;, Cada uno ejecuta una serie de rondas. En las rondas &lt;strong&gt;“impares”&lt;/strong&gt;, los procesos con número impar &lt;strong&gt;P[impar]&lt;/strong&gt; intercambian valores con &lt;strong&gt;P[impar+1]&lt;/strong&gt;. En las rondas &lt;strong&gt;“pares”&lt;/strong&gt;, los procesos con número par &lt;strong&gt;P[par]&lt;/strong&gt; intercambian valores con &lt;strong&gt;P[par+1]&lt;/strong&gt; (&lt;strong&gt;P[1]&lt;/strong&gt; y &lt;strong&gt;P[n]&lt;/strong&gt; no hacen nada en las rondas &lt;strong&gt;“pares”&lt;/strong&gt;). En cada caso, si los números están desordenados actualizan su valor con el recibido.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Asuma que cada proceso tiene almacenamiento local sólo para dos valores (el próximo y el mantenido hasta ese momento).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;a) ¿Cuántos procesos son necesarios en 1 y 2? Justifique.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Para la alternativa del &lt;strong&gt;pipeline de filtros&lt;/strong&gt;, se requieren &lt;strong&gt;n procesos&lt;/strong&gt;, ya que cada uno actúa como un filtro que &lt;strong&gt;retiene el valor mínimo&lt;/strong&gt; recibido hasta el momento y &lt;strong&gt;envía los valores mayores&lt;/strong&gt; al siguiente. Como se desea ordenar &lt;code&gt;n&lt;/code&gt; elementos y cada proceso retiene uno, se necesitan &lt;code&gt;n&lt;/code&gt; procesos para que todos los valores queden almacenados, uno en cada proceso, en orden ascendente.&lt;/p&gt;
&lt;p&gt;En cambio, para la alternativa de la &lt;strong&gt;red de procesos filtro&lt;/strong&gt; (basada en una estructura de árbol binario), se necesitan &lt;strong&gt;n - 1 procesos&lt;/strong&gt;. Esto se debe a que los valores iniciales están en las hojas del árbol (hay &lt;code&gt;n&lt;/code&gt; hojas), y los nodos internos se encargan de ir fusionando pares de valores o secuencias. En un árbol binario completo con &lt;code&gt;n&lt;/code&gt; hojas, hay exactamente &lt;code&gt;n - 1&lt;/code&gt; nodos internos. Por lo tanto, se requieren &lt;code&gt;n - 1&lt;/code&gt; procesos de merge para combinar todos los valores en una única secuencia ordenada.&lt;/p&gt;
&lt;p&gt;Perfecto, Fabián. A continuación te doy &lt;strong&gt;un ejemplo para cada alternativa&lt;/strong&gt; (pipeline de filtros y red de merges) con &lt;strong&gt;n = 4 valores&lt;/strong&gt; (potencia de 2) y su &lt;strong&gt;tabla de ejecución&lt;/strong&gt; correspondiente para que visualices cómo se comportan ambos métodos.&lt;/p&gt;
&lt;p&gt;📌 Ejemplo 1: &lt;strong&gt;Pipeline de filtros&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Idea:&lt;/strong&gt; Cada proceso filtra el mínimo de los valores que recibe y pasa el resto al siguiente.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Valores iniciales:&lt;/strong&gt; 6, 2, 8, 4 (se envían en ese orden)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Estructura:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Entrada → P1 → P2 → P3 → P4
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Tabla de ejecución&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;| Paso | Valor recibido | P1       | P2       | P3       | P4       |
|------|----------------|----------|----------|----------|----------|
| 1    | 6              | 6        | —        | —        | —        |
| 2    | 2              | 2 (↓6)   | 6        | —        | —        |
| 3    | 8              | 2 (↓8)   | 6 (↓8)   | 8        | —        |
| 4    | 4              | 2 (↓4)   | 4 (↓6)   | 6 (↓8)   | 8        |&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Resultado final:&lt;/strong&gt;&lt;br&gt;
P1: 2&lt;br&gt;
P2: 4&lt;br&gt;
P3: 6&lt;br&gt;
P4: 8&lt;br&gt;
→ &lt;strong&gt;[2, 4, 6, 8]&lt;/strong&gt; (ordenado)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Procesos necesarios:&lt;/strong&gt; 4 (uno por cada valor)&lt;/p&gt;
&lt;p&gt;📌 Ejemplo 2: &lt;strong&gt;Red de merges (filtros)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Idea:&lt;/strong&gt; Se usan procesos que combinan pares de valores en orden. Cada proceso mergea dos entradas ordenadas y produce una salida ordenada.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Valores iniciales (en hojas):&lt;/strong&gt;&lt;br&gt;
Entrada a M1: 6 y 2&lt;br&gt;
Entrada a M2: 8 y 4&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Estructura:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Nivel 0:      6     2       8     4
               \   /         \   /
Nivel 1:         M1           M2
                  \         /
Nivel 2:             M3
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Tabla de ejecución&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;| Merge | Entrada izq | Entrada der | Salida ordenada |
|-------|-------------|-------------|------------------|
| M1    | 6           | 2           | [2, 6]           |
| M2    | 8           | 4           | [4, 8]           |
| M3    | [2, 6]      | [4, 8]      | [2, 4, 6, 8]     |&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Procesos necesarios:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;3 merges → &lt;strong&gt;n − 1 = 3 procesos&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;📋 Comparación en tabla&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;| Método               | Valores iniciales | Nº de procesos | Resultado final    | Observaciones                               |
|----------------------|-------------------|----------------|---------------------|---------------------------------------------|
| Pipeline de filtros  | 6, 2, 8, 4         | 4              | [2, 4, 6, 8]         | Cada proceso retiene uno; paso a paso       |
| Red de merges        | 6, 2, 8, 4         | 3              | [2, 4, 6, 8]         | Requiere mergear en árbol binario completo  |&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;b) ¿Cuántos mensajes envía cada algoritmo para ordenar los valores? Justifique.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;📌 Pipeline&lt;/p&gt;
&lt;p&gt;A cada proceso se le asigna un número del 1 al n, y los valores se envían uno por uno al primer proceso.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;El proceso 1&lt;/strong&gt; recibe &lt;code&gt;n&lt;/code&gt; valores, se queda con el menor y envía &lt;code&gt;n−1&lt;/code&gt; al proceso 2.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;El proceso 2&lt;/strong&gt; recibe &lt;code&gt;n−1&lt;/code&gt; valores, se queda con el menor y envía &lt;code&gt;n−2&lt;/code&gt; al proceso 3.&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;El proceso n&lt;/strong&gt; recibe 1 valor y no envía ninguno.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La cantidad total de mensajes enviados entre procesos es:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-9.C4GAs9nI.png&amp;#x26;w=266&amp;#x26;h=60&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;A esto se le suman &lt;strong&gt;n mensajes EOS&lt;/strong&gt; (End Of Stream), ya que cada proceso necesita saber cuándo detenerse. Por lo tanto:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-10.CW6AiFTV.png&amp;#x26;w=328&amp;#x26;h=66&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;📌 Red de procesos filtro (merge tree)&lt;/p&gt;
&lt;p&gt;En este caso, con &lt;code&gt;n&lt;/code&gt; valores a ordenar y una red de &lt;code&gt;log₂(n)&lt;/code&gt; niveles, la cantidad de mensajes de combinación es:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-11.BDp4DURi.png&amp;#x26;w=111&amp;#x26;h=35&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Esto incluye las comparaciones y fusiones realizadas en cada nivel del árbol.&lt;/p&gt;
&lt;p&gt;Además, se deben sumar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;n&lt;/code&gt; mensajes para enviar los valores desde los nodos hoja (datos iniciales).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;n − 1&lt;/code&gt; mensajes EOS desde los nodos internos al superior para finalizar.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-12.B-GBx2oa.png&amp;#x26;w=640&amp;#x26;h=44&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;📌 Odd/Even Exchange Sort&lt;/p&gt;
&lt;p&gt;Si cada proceso ejecuta suficientes rondas para garantizar el orden (en general, hasta &lt;code&gt;k&lt;/code&gt; rondas con &lt;code&gt;k&lt;/code&gt; procesos), entonces en cada ronda cada proceso intercambia hasta:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-13.BhoVVMj6.png&amp;#x26;w=202&amp;#x26;h=51&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Cada intercambio requiere dos mensajes (ida y vuelta), y se repite durante &lt;code&gt;k&lt;/code&gt; rondas, así que el total de mensajes es:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-14.BWGUnqxl.png&amp;#x26;w=245&amp;#x26;h=56&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Resumen de todos los resultados&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-15.DNN6eCVH.png&amp;#x26;w=930&amp;#x26;h=260&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En el &lt;strong&gt;Pipeline&lt;/strong&gt;, cada proceso filtra y pasa el resto, por lo que la cantidad de mensajes crece cuadráticamente.&lt;/li&gt;
&lt;li&gt;En la &lt;strong&gt;Red de filtros (árbol de merges)&lt;/strong&gt;, el ordenamiento sigue una estructura logarítmica. Muy eficiente para merges en paralelo.&lt;/li&gt;
&lt;li&gt;En el &lt;strong&gt;Odd/Even&lt;/strong&gt;, el ordenamiento depende de la cantidad de rondas (&lt;code&gt;k&lt;/code&gt;), y aunque es simple de implementar, puede requerir muchos mensajes si los datos están muy desordenados.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;c) ¿En cada caso, cuáles mensajes pueden ser enviados en paralelo (asumiendo que existe el hardware apropiado) y cuáles son enviados secuencialmente? Justifique.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Pipeline de filtros:&lt;/strong&gt;&lt;br&gt;
Una vez que el pipeline está lleno, es posible enviar mensajes en paralelo entre todos los procesos del pipeline. Cada proceso está recibiendo, procesando y enviando valores simultáneamente. Por lo tanto, en un instante dado, pueden enviarse en paralelo hasta &lt;code&gt;n&lt;/code&gt; mensajes (uno por cada proceso). Al inicio y al final, el envío es más secuencial, pero en régimen estable, el flujo es completamente paralelo.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Red de procesos filtro (merge tree):&lt;/strong&gt;&lt;br&gt;
En esta estructura, los mensajes pueden enviarse en paralelo &lt;strong&gt;a nivel de cada capa del árbol&lt;/strong&gt;. Cada proceso del mismo nivel actúa de forma independiente, por lo que se pueden enviar hasta &lt;code&gt;n / 2&lt;/code&gt;, &lt;code&gt;n / 4&lt;/code&gt;, ..., &lt;code&gt;1&lt;/code&gt; mensajes en paralelo según el nivel. El envío entre niveles debe ser secuencial (los procesos de un nivel deben esperar los resultados del anterior).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Odd/Even Exchange Sort:&lt;/strong&gt;&lt;br&gt;
En cada ronda (par o impar), todos los procesos que participan pueden enviar mensajes en paralelo. Por ejemplo, en una ronda impar, todos los procesos con índice impar se comunican simultáneamente con sus vecinos. Por lo tanto, en cada ronda puede haber hasta &lt;code&gt;n/2&lt;/code&gt; mensajes en paralelo.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;📋 Comparación: Paralelismo en el envío de mensajes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;| Método                   | Paralelismo posible                       | Secuencialidad obligatoria                        | Observaciones clave                                                  |
|--------------------------|--------------------------------------------|--------------------------------------------------|----------------------------------------------------------------------|
| &lt;strong&gt;Pipeline de filtros&lt;/strong&gt;  | Hasta &lt;strong&gt;n mensajes&lt;/strong&gt; por instante (una vez lleno) | Inicio (pipeline vacío) y último paso             | Cada proceso recibe, filtra y reenvía simultáneamente               |
| &lt;strong&gt;Red de merges (filtros)&lt;/strong&gt; | Hasta &lt;strong&gt;n / 2, n / 4, ..., 1&lt;/strong&gt; por nivel del árbol | Entre niveles del árbol                           | Dentro de un mismo nivel: procesos trabajan en paralelo             |
| &lt;strong&gt;Odd/Even Exchange Sort&lt;/strong&gt; | Hasta &lt;strong&gt;n / 2 mensajes&lt;/strong&gt; por ronda        | Rondas ejecutadas secuencialmente                 | En cada ronda, procesos con mismo tipo (par/impar) se comunican     |&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;d) ¿Cuál es el tiempo total de ejecución de cada algoritmo? Asuma que cada operación de comparación o de envío de mensaje toma 1 una unidad de tiempo. Justifique.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;📌 Algoritmo 1: &lt;strong&gt;Pipeline de filtros&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cada mensaje enviado implica una comparación y luego el envío (2 unidades de tiempo).&lt;/p&gt;
&lt;p&gt;En el punto (a) se determinó que se envían&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-17.CvZNkC8I.png&amp;#x26;w=157&amp;#x26;h=39&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Por lo tanto, el tiempo total es:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-18.CTaV3j-N.png&amp;#x26;w=340&amp;#x26;h=72&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Entonces:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-19.GqFQ_iuP.png&amp;#x26;w=150&amp;#x26;h=42&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;📌 Algoritmo 2: &lt;strong&gt;Red de procesos filtro (árbol de merges)&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cada mensaje también implica 1 comparación y 1 envío → 2 unidades por mensaje.&lt;/p&gt;
&lt;p&gt;Ya vimos que se envían&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-20.DexDpOxH.png&amp;#x26;w=206&amp;#x26;h=32&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Entonces:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-21.CXdZ5P1M.png&amp;#x26;w=436&amp;#x26;h=39&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;📌 Algoritmo 3: &lt;strong&gt;Odd/Even Exchange Sort&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En cada ronda, cada proceso:
&lt;ul&gt;
&lt;li&gt;Hace una comparación (1)&lt;/li&gt;
&lt;li&gt;Envía un mensaje (1)&lt;/li&gt;
&lt;li&gt;Recibe un mensaje (1)&lt;/li&gt;
&lt;li&gt;Asigna/intercambia valores (1)&lt;br&gt;
→ Total = &lt;strong&gt;4 unidades por proceso por ronda&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;En el peor caso, se necesitan hasta &lt;code&gt;n&lt;/code&gt; rondas.&lt;/li&gt;
&lt;li&gt;Entonces:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-22.CdBgkjrH.png&amp;#x26;w=258&amp;#x26;h=44&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;Acomodando la tabla final&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-23.CDBUTJ0K.png&amp;#x26;w=935&amp;#x26;h=231&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-24.C6ahUjpY.png&amp;#x26;w=926&amp;#x26;h=527&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7) Suponga que un proceso productor y &lt;code&gt;n&lt;/code&gt; procesos consumidores&lt;/h2&gt;
&lt;p&gt;(Broadcast atómico). Suponga que un proceso productor y &lt;strong&gt;n&lt;/strong&gt; procesos consumidores comparten un &lt;strong&gt;buffer&lt;/strong&gt; unitario. El productor deposita mensajes en el buffer y los consumidores los retiran. Cada mensaje depositado por el productor tiene que ser retirado por los &lt;strong&gt;n&lt;/strong&gt; consumidores antes de que el productor pueda depositar otro mensaje en el buffer.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;sem depositar := 1;
sem retirar := 1;
sem consumi[n] := ([n] 0);
int cant_consumido := ([n] 0);
T buffer;

process productor {
    while (true) {
        P(depositar);
        buffer := generarDato();     // Devuelve un entero para el buffer
        cant_consumido := 0;
        for i to n do
            V(consumi[i]);
    }
}

process consumidor[i = 1..n] {
    T dato;
    while (true) {
        P(consumi[i]);              // Espero que el dato esté en el buffer
        P(retirar);                 // Espero para tener acceso al buffer
        dato := buffer;
        cant_consumido++;
        if (cant_consumido == n)
            V(depositar);
        V(retirar);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;🎯 Objetivo&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;El &lt;strong&gt;productor&lt;/strong&gt; debe generar un dato y colocarlo en un buffer compartido.&lt;br&gt;
&lt;strong&gt;Cada consumidor&lt;/strong&gt; debe leer ese dato &lt;strong&gt;una única vez&lt;/strong&gt;.&lt;br&gt;
&lt;strong&gt;Solo cuando todos lo hayan leído&lt;/strong&gt;, el productor podrá colocar un nuevo dato.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;🧩 Supuestos para el ejemplo&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hay &lt;code&gt;n = 2&lt;/code&gt; consumidores: &lt;code&gt;C1&lt;/code&gt; y &lt;code&gt;C2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;El buffer inicialmente está vacío&lt;/li&gt;
&lt;li&gt;El productor genera números enteros: &lt;code&gt;1&lt;/code&gt;, &lt;code&gt;2&lt;/code&gt;, &lt;code&gt;3&lt;/code&gt;, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;🔄 Ejecución paso a paso&lt;/p&gt;
&lt;p&gt;🔹 Estado inicial&lt;/p&gt;
&lt;p&gt;| Variable         | Valor inicial |
|------------------|---------------|
| &lt;code&gt;depositar&lt;/code&gt;      | 1             |
| &lt;code&gt;retirar&lt;/code&gt;        | 1             |
| &lt;code&gt;consumi[1]&lt;/code&gt;     | 0             |
| &lt;code&gt;consumi[2]&lt;/code&gt;     | 0             |
| &lt;code&gt;cant_consumido&lt;/code&gt; | 0             |
| &lt;code&gt;buffer&lt;/code&gt;         | vacío         |&lt;/p&gt;
&lt;p&gt;⏱ Paso 1: El productor genera un dato&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;P(depositar)&lt;/code&gt; → pasa (vale 1)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;buffer := generarDato() → 1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cant_consumido := 0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;V(consumi[1])&lt;/code&gt; → &lt;code&gt;consumi[1] = 1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;V(consumi[2])&lt;/code&gt; → &lt;code&gt;consumi[2] = 1&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;🔁 El productor queda esperando a que los 2 consumidores consuman antes de generar otro dato.&lt;/p&gt;
&lt;p&gt;⏱ Paso 2: El consumidor 1 consume&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;P(consumi[1])&lt;/code&gt; → pasa&lt;/li&gt;
&lt;li&gt;&lt;code&gt;P(retirar)&lt;/code&gt; → pasa (vale 1)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dato := buffer = 1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cant_consumido := 1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cant_consumido != n → no hace nada&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;V(retirar)&lt;/code&gt; → &lt;code&gt;retirar = 1&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;⏱ Paso 3: El consumidor 2 consume&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;P(consumi[2])&lt;/code&gt; → pasa&lt;/li&gt;
&lt;li&gt;&lt;code&gt;P(retirar)&lt;/code&gt; → pasa&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dato := buffer = 1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cant_consumido := 2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cant_consumido == n&lt;/code&gt; → entonces &lt;code&gt;V(depositar)&lt;/code&gt; → ahora el productor puede seguir&lt;/li&gt;
&lt;li&gt;&lt;code&gt;V(retirar)&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;⏱ Paso 4: El productor continúa&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;P(depositar)&lt;/code&gt; → pasa (porque fue liberado)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;buffer := 2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cant_consumido := 0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;V(consumi[1])&lt;/code&gt;, &lt;code&gt;V(consumi[2])&lt;/code&gt; → y sigue el ciclo&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;✅ Garantías del algoritmo&lt;/p&gt;
&lt;p&gt;| Propiedad                    | Cumple |
|-----------------------------|--------|
| Exclusión mutua en acceso   | ✅     |
| Cada consumidor lee una vez | ✅     |
| Productor espera a todos     | ✅     |
| No hay pérdida de datos     | ✅     |&lt;/p&gt;
&lt;p&gt;b) Suponga que el buffer tiene &lt;strong&gt;b&lt;/strong&gt; slots. El productor puede depositar mensaje sólo en slots vacíos y cada mensaje tiene que ser recibido por los &lt;strong&gt;n&lt;/strong&gt; consumidores antes de que el slot pueda ser reusado. Además, cada consumidor debe recibir los mensajes en el orden en que fueron depositados (note que los distintos consumidores pueden recibir los mensajes en distintos momentos siempre que los reciban en orden).&lt;/p&gt;
&lt;p&gt;Extienda la respuesta dada en a) para resolver este problema más general.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;sem retirar[tamBuffer] := 1;              // semáforo para cada slot del buffer
sem consumir[n] := ([n] 0);
int cant_consumido[tamBuffer] := ([n] 0);
T buffer[tamBuffer];

process productor {
    int posLibre := 0;                   // Siguiente posición libre del buffer (productor)
    while(true){
        P(depositar);
        buffer[posLibre] := generarDato();     // Devuelve dato tipo T para el buffer
        cant_consumido[posLibre] := 0;
        for i to n do
            V(consumir[i]);
        posLibre := (posLibre + 1) mod n;
    }
}

process consumidor[i: 1..n] {
    int post_actual := 0;               // Slot del que debe consumir
    T dato;
    while(true){
        P(consumir[i]);
        P(retirar[post_actual]);        // Espera por un slot en particular
        dato := buffer[post_actual]; // El acceso de esta manera no se encuentra en la imagen pero supongo que esta bien
        cant_consumido[post_actual]++;
        if (cant_consumido[post_actual] == n)
            V(depositar);
        V(retirar[post_actual]);
        post_actual := (post_actual + 1) mod n;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;🧩 Supuestos del ejemplo&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;tamBuffer = 2&lt;/code&gt; → hay dos slots: &lt;code&gt;buffer[0]&lt;/code&gt; y &lt;code&gt;buffer[1]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;n = 2&lt;/code&gt; → hay dos consumidores: &lt;code&gt;C1&lt;/code&gt; y &lt;code&gt;C2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;buffer[i]&lt;/code&gt; contiene datos generados por el productor&lt;/li&gt;
&lt;li&gt;Cada dato debe ser consumido por ambos consumidores &lt;strong&gt;antes de poder sobrescribir el slot&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Los consumidores deben leer los datos en orden&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;🔁 Estado inicial&lt;/p&gt;
&lt;p&gt;| Variable / Recurso          | Valor inicial        |
|----------------------------|----------------------|
| &lt;code&gt;buffer&lt;/code&gt;                   | [_, _]               |
| &lt;code&gt;cant_consumido[0]&lt;/code&gt;        | 0                    |
| &lt;code&gt;cant_consumido[1]&lt;/code&gt;        | 0                    |
| &lt;code&gt;retirar[0]&lt;/code&gt;, &lt;code&gt;retirar[1]&lt;/code&gt; | 1                    |
| &lt;code&gt;consumir[1]&lt;/code&gt;, &lt;code&gt;consumir[2]&lt;/code&gt; | 0 (esperando dato) |
| &lt;code&gt;posLibre&lt;/code&gt; (productor)     | 0                    |
| &lt;code&gt;post_actual&lt;/code&gt; (consumidores)| 0                    |&lt;/p&gt;
&lt;p&gt;⏱ Paso 1: El productor genera el primer dato&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;P(depositar)&lt;/code&gt; → OK&lt;/li&gt;
&lt;li&gt;&lt;code&gt;buffer[0] := generarDato() → 10&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cant_consumido[0] := 0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;V(consumir[1])&lt;/code&gt;, &lt;code&gt;V(consumir[2])&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;posLibre := 1&lt;/code&gt; (próximo slot)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;⏱ Paso 2: Ambos consumidores empiezan a consumir &lt;code&gt;buffer[0]&lt;/code&gt; (dato 10)&lt;/p&gt;
&lt;p&gt;Consumer 1:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;P(consumir[1])&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;P(retirar[0])&lt;/code&gt; → OK&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dato := buffer[0] → 10&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cant_consumido[0] := 1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;V(retirar[0])&lt;/code&gt; (libera acceso al slot)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;post_actual := 1&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Consumer 2:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;P(consumir[2])&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;P(retirar[0])&lt;/code&gt; → OK&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dato := buffer[0] → 10&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cant_consumido[0] := 2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cant_consumido[0] == n&lt;/code&gt; → &lt;code&gt;V(depositar)&lt;/code&gt; → libera al productor&lt;/li&gt;
&lt;li&gt;&lt;code&gt;V(retirar[0])&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;post_actual := 1&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;⏱ Paso 3: El productor genera el segundo dato&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;P(depositar)&lt;/code&gt; → OK (fue liberado)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;buffer[1] := generarDato() → 20&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cant_consumido[1] := 0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;V(consumir[1])&lt;/code&gt;, &lt;code&gt;V(consumir[2])&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;posLibre := 0&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;⏱ Paso 4: Ambos consumidores consumen &lt;code&gt;buffer[1]&lt;/code&gt; (dato 20)&lt;/p&gt;
&lt;p&gt;Consumer 1:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;P(consumir[1])&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;P(retirar[1])&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dato := buffer[1] → 20&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cant_consumido[1] := 1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;V(retirar[1])&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;post_actual := 0&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Consumer 2:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;P(consumir[2])&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;P(retirar[1])&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dato := buffer[1] → 20&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cant_consumido[1] := 2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;V(depositar)&lt;/code&gt; (productor puede continuar)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;V(retirar[1])&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;post_actual := 0&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;🔁 Y así continúa el ciclo...&lt;/p&gt;
&lt;p&gt;✅ Propiedades garantizadas&lt;/p&gt;
&lt;p&gt;| Propiedad                               | ¿Cumple? |
|----------------------------------------|----------|
| Exclusión mutua en el buffer por slot  | ✅       |
| Orden de consumo por slot              | ✅       |
| Reutilización del slot solo tras n lecturas | ✅ |
| Independencia de tiempo entre consumidores | ✅ |
| Fairness (todos acceden eventualmente) | ✅       |&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;8) Implemente una butterfly barrier para 8 procesos&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Implemente una butterfly barrier para 8 procesos usando variables compartidas.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Una &lt;strong&gt;butterfly barrier&lt;/strong&gt; tiene &lt;strong&gt;log2(n)&lt;/strong&gt; etapas.&lt;br&gt;
Cada Worker sincroniza con un Worker distinto en cada etapa.&lt;br&gt;
En particular, en la etapa &lt;code&gt;s&lt;/code&gt; un Worker sincroniza con un Worker a distancia &lt;code&gt;2^(s-1)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Se usan distintas &lt;strong&gt;variables flag&lt;/strong&gt; para cada barrera de dos procesos.&lt;/p&gt;
&lt;p&gt;Cuando cada Worker pasó a través de &lt;code&gt;log2(n)&lt;/code&gt; etapas, &lt;strong&gt;todos los Workers deben haber arribado a la barrera&lt;/strong&gt; y por lo tanto &lt;strong&gt;todos pueden seguir&lt;/strong&gt;.&lt;br&gt;
Esto es porque cada Worker ha sincronizado directa o indirectamente con cada uno de los otros.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Diagrama (sincronizaciones por etapa)&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Workers     1   2   3   4   5   6   7   8

Etapa 1     └───┘   └───┘   └───┘   └───┘

Etapa 2     └─────────┘   └─────────┘

Etapa 3     └───────────────────────┘
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Codigo&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;int N = 8;
int E = log(N);
int arribo[1:N] = ([N] 0);

process Worker[i = 1 to N] {
    int j;
    int resto;
    int distancia;

    while (true) {
        // Sección de código anterior a la barrera.

        // --- Inicio de la barrera butterfly ---
        for (etapa = 1; etapa &amp;#x3C;= E; etapa++) {
            distancia = 2 ^ (etapa - 1);           // distancia = 2^(etapa-1)
            resto = i mod 2 ^ etapa;

            if (resto == 0 || resto &gt; distancia)   // define si sincroniza con i+dist o i-dist
                distancia = -distancia;

            j = i + distancia;

            while (arribo[i] == 1) skip;           // espera a que su flag esté en 0
            arribo[i] = 1;                         // indica que llegó

            while (arribo[j] == 0) skip;           // espera a su par
            arribo[j] = 0;                         // limpia la flag del otro
        }
        // --- Fin de la barrera butterfly ---

        // Sección de código posterior a la barrera.
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;Este no me quedo del todo claro pero bueno&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;9) Suponga &lt;code&gt;n^2&lt;/code&gt; procesos organizados en forma de grilla cuadrada&lt;/h2&gt;
&lt;p&gt;Suponga &lt;strong&gt;n^2&lt;/strong&gt; procesos organizados en forma de grilla cuadrada. Cada proceso puede comunicarse solo con los vecinos &lt;strong&gt;izquierdo&lt;/strong&gt;, &lt;strong&gt;derecho&lt;/strong&gt;, de arriba y de abajo (los procesos de las esquinas tienen solo &lt;strong&gt;2&lt;/strong&gt; vecinos, y los otros en los bordes de la grilla tienen &lt;strong&gt;3 vecinos&lt;/strong&gt;). Cada proceso tiene inicialmente un valor local &lt;strong&gt;v&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;a) Escriba un algoritmo &lt;strong&gt;heartbeat&lt;/strong&gt; que calcule el &lt;strong&gt;máximo&lt;/strong&gt; y el &lt;strong&gt;mínimo&lt;/strong&gt; de los &lt;strong&gt;n2&lt;/strong&gt; valores. Al terminar el programa, cada proceso debe conocer ambos valores. (Nota: no es necesario que el algoritmo esté optimizado).&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;Chan valores[1:n; 1:n](int);

Process P[i = 1 to n, j = 1 to n] {
    Int v;
    Int Nuevo, minimo = v, maximo = v;
    Int cantVecinos;
    Vecinos[1..cantVecinos];

    For (k = 1 to cantGeneraciones) {
        For (p = 1 to cantVecinos) {
            Send valores[vecinos[p].fila, vecinos[p].columna](v);
        }

        For (p = 1 to cantVecinos) {
            Receive valores[i, j](nuevo);
            if (nuevo &amp;#x3C; minimo)
                minimo = nuevo;
            if (nuevo &gt; maximo)
                maximo = nuevo;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;🎯 Supongamos 3 procesos: A, B, C&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;A --- B --- C
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;A tiene valor 5&lt;/li&gt;
&lt;li&gt;B tiene valor 2&lt;/li&gt;
&lt;li&gt;C tiene valor 8&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cada uno está conectado con sus vecinos inmediatos.&lt;/p&gt;
&lt;p&gt;🧪 Generación 1: Intercambio de valores&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;ol&gt;
&lt;li&gt;A envía 5 a B&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;B envía 2 a A y C&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;C envía 8 a B&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;     [5]        [2]        [8]
      A  &amp;#x3C;--&gt;   B   &amp;#x3C;--&gt;   C
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;🔍 ¿Qué recibe cada uno?&lt;/p&gt;
&lt;p&gt;| Proceso | Recibe de | Valores recibidos | Nuevo mínimo | Nuevo máximo |
|---------|-----------|-------------------|---------------|---------------|
| A       | B         | [2]               | 2             | 5             |
| B       | A, C      | [5, 8]            | 2             | 8             |
| C       | B         | [2]               | 2             | 8             |&lt;/p&gt;
&lt;p&gt;✅ Resultado final (después de 1 ronda)&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;A: mínimo = 2, máximo = 5  
B: mínimo = 2, máximo = 8  
C: mínimo = 2, máximo = 8
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Si hacemos otra ronda, &lt;strong&gt;A también recibirá el 8 (a través de B)&lt;/strong&gt;, y entonces todos tendrán:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;mínimo = 2, máximo = 8
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;📌 Esto mismo pasa en grillas grandes: con varias generaciones, &lt;strong&gt;los valores extremos se difunden&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;b) Analice la solución desde el punto de vista del número de mensajes.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En cada ronda, los procesos envían mensajes a sus vecinos. Dependiendo de su posición en la grilla, cada proceso tiene distinta cantidad de vecinos:&lt;/p&gt;
&lt;p&gt;🔹 Esquinas (4 procesos)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Cada uno tiene 2 vecinos → envía 2 mensajes por ronda&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Total por todas las rondas:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;4 procesos * 2 mensajes * (n-1) rondas * 2 (envío y recepción)  
= 4 * 2 * (n - 1) * 2  
= (n - 1) * 16 mensajes
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;🔹 Bordes (sin esquinas) → hay 4 lados con (n - 2) procesos cada uno&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Cada uno tiene 3 vecinos → envía 3 mensajes por ronda&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Total:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(n - 2) * 4 procesos * 3 mensajes * (n - 1) rondas * 2  
= (n - 2) * 4 * 3 * (n - 1) * 2  
= (n - 1)(n - 2) * 12 mensajes
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;🔹 Internos → (n - 2) × (n - 2) procesos&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Cada uno tiene 4 vecinos → envía 4 mensajes por ronda&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Total:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(n - 2)^2 * 4 mensajes * (n - 1) rondas * 2  
= (n - 2)^2 * (n - 1) * 8 mensajes
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Este punto se podria mejorar&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;c) ¿Puede realizar alguna mejora para reducir el número de mensajes?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;No, no es posible reducir el número de mensajes, ya que &lt;strong&gt;no existe una forma de saber con certeza cuándo un proceso ha recibido el valor mínimo o máximo global&lt;/strong&gt;.&lt;br&gt;
Por lo tanto, para garantizar que &lt;strong&gt;todos los procesos lleguen a conocer los valores extremos&lt;/strong&gt;, es necesario ejecutar las &lt;code&gt;(n - 1) × 2&lt;/code&gt; generaciones completas.&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;Voy a rezar por que no tomen esta wea&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h1&gt;Preguntas Teoricas Comunes&lt;/h1&gt;
&lt;hr&gt;
&lt;h2&gt;Pregunta 1 Ventajas y Desventajas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;3- Defina los paradigmas de interacción entre procesos distribuidos token passing, servidores replicados y prueba-eco. Marque ventajas y desventajas en cada uno de ellos cuando se utiliza comunicación por mensajes sincrónicos o asincrónicos.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Es un esquema donde un mensaje especial (token) circula entre los procesos. Solo el que tiene el token puede ejecutar una acción crítica, como entrar a la sección crítica o tomar decisiones.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ejemplo:&lt;/strong&gt; exclusión mutua distribuida, detección de terminación.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ventajas:&lt;/strong&gt; simple de implementar, no necesita reloj ni identificadores globales, funciona bien en topologías como anillo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Desventajas:&lt;/strong&gt; si se pierde el token el sistema se bloquea; no hay paralelismo (solo trabaja quien tiene el token); puede haber demoras innecesarias.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mejor comunicación:&lt;/strong&gt; asincrónica, porque permite circulación sin bloqueo. Se adapta bien a arquitecturas de memoria distribuida (AMP).&lt;/p&gt;
&lt;p&gt;Varios procesos replican un recurso compartido (archivo, base de datos) para brindar alta disponibilidad y tolerancia a fallos. A los clientes les parece que hay un único servidor.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ejemplo:&lt;/strong&gt; mozos en el problema de los filósofos, sistemas de archivos distribuidos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ventajas:&lt;/strong&gt; mayor disponibilidad, tolerancia a fallos, mejora el rendimiento si se balancean bien los pedidos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Desventajas:&lt;/strong&gt; mantener la consistencia entre réplicas es complejo; puede haber conflictos si dos servidores procesan escrituras en paralelo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mejor comunicación:&lt;/strong&gt; asincrónica (evita bloquear al cliente), ideal en AMP. En SMP es más difícil porque hay que mantener varios canales y controlarlos.&lt;/p&gt;
&lt;p&gt;Un nodo envía mensajes “probe” a sus vecinos; cuando todos responden con “eco”, el emisor sabe que se llegó a todos. Sirve para explorar redes desconocidas o detectar nodos activos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ejemplo:&lt;/strong&gt; descubrimiento de topología en redes móviles o dinámicas.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ventajas:&lt;/strong&gt; útil sin conocer la red; robusto frente a cambios; permite diseminar o recolectar información.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Desventajas:&lt;/strong&gt; puede generar muchos mensajes; necesita control para evitar ciclos o duplicación.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mejor comunicación:&lt;/strong&gt; asincrónica, ideal en AMP por su descentralización y tolerancia a variaciones en la red.&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Finales&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Ffebrero+2024+final.DRyzIJ-N.jpeg&amp;#x26;w=1241&amp;#x26;h=1094&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Ffinal+11+10+2023.d0jow6TV.jpeg&amp;#x26;w=690&amp;#x26;h=762&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-26.Bd-qVHES.png&amp;#x26;w=784&amp;#x26;h=982&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Ffinal+concurrente+abril+2024.D8t2PKuw.jpeg&amp;#x26;w=2718&amp;#x26;h=3440&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Ffinal+concurrente+febrero+2025.BPjZm3z6.jpeg&amp;#x26;w=1145&amp;#x26;h=1600&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Ffinal+concurrente.ChlEq7w5.jpeg&amp;#x26;w=1313&amp;#x26;h=1143&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-27.BOM-KjC6.png&amp;#x26;w=954&amp;#x26;h=1143&amp;#x26;f=webp&quot; alt=&quot;Z&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-28.D6NmZTZw.png&amp;#x26;w=916&amp;#x26;h=913&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-29.Ck8UaPPE.png&amp;#x26;w=1034&amp;#x26;h=1376&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-30.DsCsZ8bo.png&amp;#x26;w=1015&amp;#x26;h=878&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-31.BAEwhv1L.png&amp;#x26;w=780&amp;#x26;h=1188&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-32.CkVnX3Ih.png&amp;#x26;w=717&amp;#x26;h=709&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-33.DBNu-vwk.png&amp;#x26;w=984&amp;#x26;h=1145&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-34.BMh8Mp6C.png&amp;#x26;w=984&amp;#x26;h=1143&amp;#x26;f=webp&quot; alt=&quot;Z&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-35.g2BjKCxp.png&amp;#x26;w=934&amp;#x26;h=879&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-36.CTg5pzkX.png&amp;#x26;w=758&amp;#x26;h=862&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-37.D8YFAXkY.png&amp;#x26;w=773&amp;#x26;h=892&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-38.C29IJ7f2.png&amp;#x26;w=749&amp;#x26;h=1158&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://fabianmartinezrincon.com/_image?href=%2F_astro%2Fimage-39.rRgWSOkt.png&amp;#x26;w=1145&amp;#x26;h=1600&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.BfjTBy4_.jpg"/><enclosure url="/_astro/thumbnail.BfjTBy4_.jpg"/></item><item><title>Final de Arquitectura de Computadoras</title><link>https://fabianmartinezrincon.com/blog/ac-final</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/ac-final</guid><description>Material para el final de arquitectura de Computadoras UNLP</description><pubDate>Thu, 06 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Clases&lt;/h1&gt;
&lt;p&gt;Link de donde me mire todas las clases &lt;a href=&quot;https://drive.google.com/drive/folders/1xNWfH0CDXUGWf-5Ul0EFcQn47hbeB1sL&quot;&gt;Drive&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Esto ya es lo ultimo para el final (Me queda este y el de concurrente y termino el Analista Programador Universitario). A meterle!!!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;@carolina&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Parametros e Interrupciones&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Via registros:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Para pasar los parametros se usan los registros del procesador. Su principal limitación son los registros disponibles, es importante documentar cuales son los registros que estamos usando para evitar conflictos&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Via Memoria&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Los parametros se almacenan en un area difinida en la memoria RAM, es util cuando se deben pasar grandes cantidades de datos, pero es dificil de estandarizar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Via PILA/STACK&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Los parametros se colocan en la pila. Es el metodo mas utilizado, no depende ni de la memoria ni de los registros, hay que saber bien como utilizarlo ya que la pila es usada tanto por el sistema como por los programas del usuario.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Tambien puede tocar la siguiente pregunta: &lt;strong&gt;Explique los métodos de pasaje de argumentos a procedimientos o funciones.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Las interrupciones multiples es cuando se reciben varias interrupciones al mismo tiempo. Son 3 caracteristicas&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Prioridad de interrupciones:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Las interrupciones suelen tener una prioridad. Esto permite que el sistema decidir cual interrupcion debe manejar primero en caso de que ocurran multiples interrupciones.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mascara de Interrupciones&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;Algunos sistemas permiten desactivar temporalmente interrupciones (GENERALMENTE LAS DE MENOR PRIORIDAD) Utilizando las mascaras de interrupciones, esto ayuda a que las interrupciones de mayor prioridad no sean interrumpidad con las de mayor prioridad.&lt;/p&gt;
&lt;p&gt;Gerarquia de interrupciones: Enmascarables y no Enmascarables, Enmascarables pueden ser ignoradas (de baja prioridad) y las no Enmascarables no se pueden ignorar y son de alta prioridad&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nivel de anidación:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;El sistema debe ser capa de manejar nivel de anidación. Si esta atendiendo una interrupcion y ocurre otra de mayor prioridad la interrupcion actual se suspende temporalmente, el sistema atiende la nueva interrupcion y al finalizar regresan para continuar con la interrupcion inicial.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tratamiento: Se puede atender una interrupcion e inhabilitar a las demas con el uso de mascaras de interrupciones, de esta manera las interrupciones se maneja de forma secuencial. (Esto no me quedo claro 😕)&lt;/li&gt;
&lt;li&gt;Tambien Es posible asignar prioridades a las interrupciones. Dependiendo del nivel de prioridad el sistema debe respetar su atención.&lt;/li&gt;
&lt;li&gt;Si se esta manejado una interrupcion de menor prioridad y llega una de mayor prioridad se debe atender primero la de mayor prioridad. Una vez finalizada el procesador retoma la atención de la interrupcion previa.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Generar la interrupción&lt;/strong&gt;: Un disposito del sistema detecta un evento que requiere atención, por lo que se genera una señal de interrupción.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;&lt;strong&gt;Interrupcion del procesador&lt;/strong&gt;: Cuando se genera una interrupción, el procesador suspende temporalmente su ejecución&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;&lt;strong&gt;Guardado de contexto&lt;/strong&gt;: Antes de manejar la interrupción el procesador guarda el estado actual del programa en ejecución, el contador de programa, registros y otros datos relevantes.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;&lt;strong&gt;Rutina de manejo de interrupciones&lt;/strong&gt;: El controlador de interrupciones (PIC) determina cual es la interrupción y proporciona un puntero al procesador para buscar en la tabla de vectores la dirección en donde se encuentra la rutina de la interrupción.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;&lt;strong&gt;Ejecución de la rutina de manejo&lt;/strong&gt;: El procesador comienza a ejecutar la rutina de manejo de interrupcion que corresponde, una vez finalizada la rutina el control es devuelto al punto del programa en donde se detuvo inicialmente.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;6&quot;&gt;
&lt;li&gt;&lt;strong&gt;Restauración del estado/contexto&lt;/strong&gt;: Despues de que se maneja la interrupción el procesador restaura el estado previo/guardado (Los registros y la dirección del programa (PC)), permitiendo que el programa restaure su estado original/inicial antes de que ocurra la interrupción.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;7&quot;&gt;
&lt;li&gt;&lt;strong&gt;Continuación de la ejecución&lt;/strong&gt;: Con el contexto restaurado, el programa original continuo su ejecución en el punto en donde se interrumpio&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Se genera una interrupción de un dispositivo externo o una señal de sofware, el pic recibe esa interrupción y la clasifica segun la prioridad que tenga, le avisa al procesador/CPU que hay una interrupción que tiene que se atendida, por la linea (IntR).&lt;/li&gt;
&lt;li&gt;La CPU al finalizar la instrucción actual, responde al PIC que acepta la interrupción por la linea (INTA), Solicitando el puntero para acceder a la tabla de vectores.&lt;/li&gt;
&lt;li&gt;El PIC le manda al puntero que corresponde a esa interrupción y la CPU lo usa para acceder a la tabla de interrupciones que tiene la dirección donde se encuentra la rutina de servicio de esa interrupción.&lt;/li&gt;
&lt;li&gt;La CPU guarda su contexto actual (Contador de programa, registros, etc). Ejecuta la rutina del manejo de la interrupción y una vez finalizada, se le manda un señal al PIC de fin de interrupción (EOI) el PIC actualiza sus registros y puede anteder otras interrupciones.&lt;/li&gt;
&lt;li&gt;La CPU restaura el contexto previo que tenia antes de anteder a la interrupcion y continua la ejecución&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Formas de finalización&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Subritina&lt;/strong&gt;: finalizan con la instrucción de retorno RET&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gestor de interrupciones&lt;/strong&gt;: Finaliza con la instrucción IRET&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;&lt;strong&gt;Contexto de finalización:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Subrutina&lt;/strong&gt;: El contexto (Dirección de retorno, en algunos casos registros). Es gestionado por el programador y almacenado en la pila antes de la llamada a la subrutina. Al finalizar Se restaura manualmente desde la pila para volver al programa principal.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gestión de interrupciones:&lt;/strong&gt; El contexto completo del programa interrumpido (contador del programa, registros, etc) es automaticamente guardado y restaurado por el hardware al inicio y al final del gestor de interrupciones respectivamente.&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;&lt;strong&gt;Continuación del flujo de la interrupción:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Subrutina&lt;/strong&gt;: Al retornar el programa principal continua su ejecución en la linea posterior a la instrucción de llamada.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;El gestor de interrupciones&lt;/strong&gt;: Una vez restaurado el contexto, la CPU reanuda automaticamente la ejecución del programa interrumpido desde el punto exacto en donde ocurrio la interrupción.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/3dadd7b0-cbb4-485b-ba64-dff871d13c32&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;EOI: Fin de interrupción&lt;/li&gt;
&lt;li&gt;IMR: Mascara de interrupciones, Permite habilitar o deshabilitar ciertas interrupciones&lt;/li&gt;
&lt;li&gt;IRR: Petición de interrupción, identifica que interrupción tiene una solicitud de petición para ser antendida.&lt;/li&gt;
&lt;li&gt;ISR: Interrupción de servicio, indica cual es la interrupción que esta siendo atendida.&lt;/li&gt;
&lt;li&gt;INT0..INT7: Registros relacionados con el vector de interrupciones&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Tema Segmentación de Cause&lt;/h2&gt;
&lt;p&gt;Es la forma de organizar el hardware de la CPU para realizar mas de una operacion al mismo tiempo. Divide el proceso de ejecución de las instrucciones en etapas, permitiendo que se ejecuten de manera simultanea.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.researchgate.net/profile/Leandro-Zambrano/publication/347483834/figure/fig5/AS:970292671291393@1608347208263/Comportamiento-en-el-tiempo-del-patron-segmentacion-de-cauce.ppm&quot; alt=&quot;segmentación&quot;&gt;&lt;/p&gt;
&lt;p&gt;El rendimiento es la mejora de eficiencia del procesador al ejecutar varias interrupciones al mismo tiempo, dividiendo el proceso en varias etapas. Cada etapa trabaja en una parte diferente de una instrucción, lo que permite que varias instrucción se ejecuten de manera concurrente. Esto reduce el nro de ciclos de reloj necesarios para ejecutar instrucciones y aumentar el rendimiento.&lt;/p&gt;
&lt;p&gt;Sin enbargo existen riesgos como la dependencia de datos o saltos condicionales que pueden interrumpir el flujo y reducir la eficiencia. El rendimiento mejora cuando el procesador maneja bien estos riesgos, pudiendo manejar mas interrupciones en menos tiempo.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Se podria consultar&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Problema&lt;/strong&gt;: Los riesgos por transferencia de control ocurren cuando el flujo del programa se ve alterado por las instrucciones de salto (Condicionales o incondicionales). Esto genera insertidumbre sobre que instrucción se tiene que seguir. Si ya se cargaron instrucciones incorrectas, debe descartarse lo que causa desperdicios de ciclos y penalización de rendimiento, &lt;strong&gt;Posibles soluciones:&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;Tecnicas de Software&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Salto retardado:&lt;/strong&gt; En la tecnica del salto retardado, el compilador reorganiza las instrucciones para que siempre alla algo que ejecutar despues del salto. Si no es posible agrega la instrucción NOP&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;Tecnicas de hardware&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Detención del cause:&lt;/strong&gt; Cuando se encuentra una interrupción de salto el procesador detiene temporalmente la ejecución hasta que se resuelva si se toma o no el salto. Esto evita que se ejecuten instrucciones incorrectas pero genera un retraso en el flujo de instrucciones&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Adelantar la resolución de los saltos a la etapa de codificación&lt;/strong&gt;. En la etapa de codificación se identifica si la instrucción corresponde a un salto, la condición del salto se evalua mediante un restador y la dirección de destino de salto se calcula usando un sumador. Esto se debe a la toma de desiciones sobre el flujo de ejecución.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Predicción de salto:&lt;/strong&gt; El procesador intenta predecir si el salto sera tomado o no, para seguir ejecutando instrucciones mientras se confirma la condición del salto. Hay dos tipos de predicciones, estan las estaticas y las dinamicas&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Estaticas:&lt;/strong&gt; La predicción es fija, por ejemplo siempre se decide si se toman los saltos o no se toman&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dinamica:&lt;/strong&gt; Se basa en el historial de ejecuciones anteriores de la misma instrucción de salto. Ejemplo: Tabla de historias de salto o buffer de destino (Branch Target Buffer)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Mejora el rendimiento:&lt;/strong&gt; La ejecución en paralelo acelera la velocidad de la ejecución de las instrucciones.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;&lt;strong&gt;Aprovechamiento de recurso:&lt;/strong&gt; mientras una unidad de ejecución realiza una operación, las etapas anteriores y posteriores pueden estar ocupadas con otras instrucciones, permitiendo un uso mas completo de las unidades funcionales.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;&lt;strong&gt;Mayor paralelismo:&lt;/strong&gt; Como varias instrucciones se ejecutan al mismo tiempo, la segmentación de Causa aumenta el nivel de paralelismo a nivel de instrucciones en el procesador.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;&lt;strong&gt;Reducción del ciclo de reloj por instrucción:&lt;/strong&gt; Reduce el tiempo necesario para ejecutar una instrucción completa al dividirla en etapas mas pequeñas.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;&lt;strong&gt;Mejora de la predicción de salto:&lt;/strong&gt; Tecnica que usa el procesador para anticipar si una instrucción de salto condicional se va a tomar o no, antes de que se evalue dicha condición. Esto ayuda a que el procesador siga trabajando sin detenerse mientras espera esa respuesta, evitante retrasos en el flujo de ejecución del programa.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;RAW:&lt;/strong&gt; Una instrucción necesita leer que aun no ha sido escrita por una instrucción.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WAW:&lt;/strong&gt; Dos instrucciones intantan escribir en el mismo lugar, pero deben hacerlo en orden distintos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WAR:&lt;/strong&gt; Una instrucción quiere escribir en un dato que otra esta leyendo.&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Dependencia de datos:&lt;/strong&gt; Cuando una instrucción depende del resultado de la instrucción anterior que todavia no ha completado su etapa de ejecución. Tipos: RAW, WAW, WAR&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;&lt;strong&gt;Dependencias Estructurales:&lt;/strong&gt; Cuando dos o mas instrucciones compiten por el mismo recurso en una etapa especifica del cause.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;&lt;strong&gt;Dependencia de Control (Saltos):&lt;/strong&gt; Ocurre cuando hay instrucciones de salto y el procesador no sabe que instrucción ejecutar hasta que no termina de evaluar la condición de salto. Esto podria insterrumpir el flujo del cause porque el procesador debe esperar el resultado de la condición para poder seguir.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;7.2) ¿Que retardo produce cada una?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;NO SABEMOS QUE RETARDO EN CUANTO A TIMPO | SIN CONTESTAR&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;Taxonomia Flynn&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://www.filosofias.es/wiki/lib/exe/fetch.php/a2/2/flynns-taxonomy-of-computer-architectures.png&quot; alt=&quot;TaxonomiaFlynn&quot;&gt;&lt;/p&gt;
&lt;p&gt;Las 4 principales variantes de taxonomia flynn son:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;SISD&lt;/strong&gt; (Single Instruction Single Data): Una sola unidad de procesamiento que ejecuta una secuencia de instrucciones, opera sobre un unico conjunto de datos en cada ciclo de reloj&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;&lt;strong&gt;SIMD&lt;/strong&gt; (Single Instruction Multiple Data) Una unica instrucción se aplica simultaneamente a multiples conjuntos de datos. Esto permite que varias unidades de procesamiento ejecutan la misma operación en paralelo sobre diferentes datos al mismo tiempo.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;&lt;strong&gt;MISD&lt;/strong&gt; (Multiple Instruction Single Data): Multiples secuencias de instrucciones se ejecutan en paralelo en un solo conjunto de datos.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;&lt;strong&gt;MIMD&lt;/strong&gt; (Multiple Instruction Multiple Data): Multiples unidades de procesamientos que ejecutan diferentes instrucciones sobre diferentes conjuntos de datos al mismo tiempo.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Los SMP&lt;/strong&gt; se caracterizan por su arquitectura de &lt;strong&gt;memoria compartida&lt;/strong&gt;, donde multiples procesadores comparten el mismo espacio de memoria y recursos, esto permite que todos los procesadores accedan a la memoria y a los recursos de manera igualitaria, la comunicación entre los procesadores es directa a traves de la memoria compartida, facilitando el intercambio de datos. &lt;strong&gt;La ventajas&lt;/strong&gt; de los SMP es que son mas faciles de configurar, necesitan menos espacio fisico, necesitan menos energia y son plataformas estables y bien establecidas.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://iesbidaju.wordpress.com/wp-content/uploads/2016/05/smp_01.gif&quot; alt=&quot;SMP&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Los Cluster&lt;/strong&gt; estan compuestos por &lt;strong&gt;nodos independietes&lt;/strong&gt; interconectados por una red, cada uno tiene su memoria y recurso, la comunicación se comunica mediante la red lo que puede generar latencia. Los Cluster ofrecen escalabilidad horizontal al permitir añadir mas nodos para aumentar la capacidad de procesamiento.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://adictosaltrabajo.com/wp-content/uploads/tutorial-data/MySQLCluster/MySQLCluster_img1.png&quot; alt=&quot;Clusters&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MIMD:&lt;/strong&gt; Multiples unidades de procesamientos que ejecutan diferentes instrucciones sobre diferentes conjuntos de datos al mismo tiempo. FIN&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Procesadores super escalares y Super segmentado&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;1. Captación simultánea de múltiples instrucciones&lt;/strong&gt;: Se buscan varias instrucciones al mismo tiempo para mejorar el rendimiento mediante el paralelismo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2. Gestión de dependencias de datos:&lt;/strong&gt; Se usan técnicas como el renombre de registros para evitar conflictos entre instrucciones que dependen de resultados previos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;3. Ejecución paralela de múltiples instrucciones:&lt;/strong&gt; Se inician múltiples instrucciones a la vez, usando diferentes unidades funcionales para ejecutarlas simultáneamente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;4. Recursos adecuados para ejecución en paralelo:&lt;/strong&gt; Tienen múltiples unidades de ejecución, para manejar múltiples instrucciones en paralelo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;5. Entrega de resultados en orden:&lt;/strong&gt; Aunque las instrucciones se ejecutan fuera de orden, los resultados se entregan en el orden correcto para mantener la coherencia del programa.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Políticas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;1. Emisión y finalización en orden&lt;/strong&gt;: Las instrucciones se emiten y ejecutan en el mismo orden en que aparecen en el programa. Si una instrucción no puede ejecutarse porque espera un operando, el procesador se detiene hasta que pueda continuar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2. Emisión en orden y finalización desordenado:&lt;/strong&gt; Las instrucciones se emiten en el mismo orden en que aparecen en el programa, pero pueden ejecutarse en cualquier orden si no tienen dependencias entre sí. Si una instrucción no puede ejecutarse aún, el procesador busca otras instrucciones posteriores que sí puedan ejecutarse antes, optimizando el uso de los recursos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;3. Emisión y Ejecución desordenada:&lt;/strong&gt; El procesador puede emitir y ejecutar instrucciones en cualquier orden, garantizando que el resultado final sea el mismo que en una ejecución secuencial. Para evitar los problemas de dependencias, se usa la técnica de renombre de registros que evitar los conflictos con los registros intermedios.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ACA ELEGI UNA DE LAS 3 QUE MAS TE CONVENGA Y JUSTIFICALA (CHAT GPT :v )&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Dependecia de datos verdadera&lt;/strong&gt;: Cuando una instrucción necesita el resultado de una instrucción previa antes de poder ejecutarse.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;&lt;strong&gt;Dependencia relativa del procesamiento&lt;/strong&gt;: Se refiere a las restricciones impuestas por el orden en que se deben emitir y ejecutar las instrucciones en un procesador.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;&lt;strong&gt;Conflicto en los recursos&lt;/strong&gt;: Cuando múltiples instrucciones compiten por un mismo recurso al mismo tiempo.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;&lt;strong&gt;Dependencia de salida&lt;/strong&gt;: Cuando dos instrucciones intentan escribir en el mismo registro.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;&lt;strong&gt;Antidependencia&lt;/strong&gt;: Cuando una instrucción quiere escribir en un registro que todavía está siendo usada por otra instrucción previa.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Es resolver problemas de dependencia entre instrucciones que intentan usar los mismos registros. Esto permite una ejecucion más eficiente y paralela de instrucciones.&lt;/p&gt;
&lt;p&gt;El paralelismo es la capacidad de un sistema para ejecutar múltiples operaciones al mismo tiempo, en lugar de procesarlas de manera secuencial.&lt;/p&gt;
&lt;p&gt;El paralelismo de una maquina depende:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Numero de instrucciones captadas por ciclo&lt;/strong&gt;: Cuantas más instrucciones se puedan decodificar y enviar al procesador en cada ciclo de reloj , mayor va a ser el aprovechamiento del paralelismo a nivel de instrucción.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;&lt;strong&gt;Número de unidades funcionales&lt;/strong&gt;: A mayor número de unidades funcionales logra que más instrucciones se procesen en paralelo, siempre que sean independientes entre sí.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;&lt;strong&gt;Mecanismo de localización de instrucciones independientes&lt;/strong&gt;: El procesador detecta las instrucciones que puedan ejecutarse en paralelo sin violar dependencias de datos o de control. Usando técnicas como el renombre de registros, predicción de saltos y la ejecución fuera de orden.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Memoria&lt;/h2&gt;
&lt;p&gt;Funciona gracias al principio de localidad de referencia basado en 2 tipos de acceso a memoria:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Localidad Temporal&lt;/strong&gt;: hace referencia a que los elementos de memoria que fueron recientemente referenciados (como datos e instrucciones) se vuelvan a referenciar en el futuro cercano.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Localidad Espacial&lt;/strong&gt;: hace referencia a que si un elemento de memoria fue referenciado, es probable que otros elementos cuyas direcciones están cercanas también sean referenciados.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Acierto&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Escritura inmediata (write-through)&lt;/strong&gt;: Cada escritura en caché se refleja inmediatamente en la memoria principal, por lo que se mantiene la coherencia de datos en todo momento, suele combinarse con la técnica &lt;strong&gt;no-write-allocate.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Postescritura (write-back)&lt;/strong&gt;: Las actualizaciones se hacen en la cache y se marca un bit de “actualizar o sucio”. Cuando el bloque se saca de la cache se chequea ese bit si está activo, se escribe ese bloque en la memoria principal. Esto puede producir que la memoria principal tenga informacion errónea durante un tiempo. Suele combinarse con la técnica &lt;strong&gt;write-allocate.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Fallo&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Write Allocate&lt;/strong&gt;: la informacion se lleva de memoria principal a la cache y se sobrescribe sobre ella , por lo que se puede alterar la coherencia de datos hasta que haya un remplazo de memoria principal.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No write Allocate&lt;/strong&gt;: El bloque no se lleva a la memoria cache ,se escribe directamente en memoria principal.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tener varios niveles de caché (L1, L2, L3) mejora el rendimiento al reducir la latencia y aprovechar la localidad temporal y espacial, optimizando el acceso. Además, permite un balance entre capacidad y velocidad. Sin embargo, aumenta la complejidad del diseño, incrementa los costos y el consumo de energía, y requiere mecanismos de coherencia entre niveles que pueden afectar el rendimiento.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;1. DIRECTA&lt;/strong&gt;: cada bloque de la memoria principal se mapea a una única línea en la caché. la dirección de memoria se divide en 3 campos para determinar en qué línea de caché se almacena el bloque de datos correspondiente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2. ASOCIATIVA&lt;/strong&gt;: cada bloque de memoria principal puede cargarse en cualquier línea de la cache. La lógica del control de la cache interpreta una dirección de memoria como una etiqueta y un campo de palabras.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;3. ASOCIATIVA POR CONJUNTO&lt;/strong&gt;: la cache se divide en v conjuntos, cada uno con k líneas. La lógica de control de la cache interpreta una dirección de memoria como 3 campos: etiqueta, conjunto y palabra.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DIRECTA&lt;/strong&gt;: cada bloque de la memoria principal se mapea a una única línea en la caché.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ASOCIATIVA&lt;/strong&gt;: cada bloque de memoria principal puede cargarse en cualquier línea de la cache.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ASOCIATIVA POR CONJUNTO&lt;/strong&gt;: Un bloque puede almacenarse en un conjunto restringido de la cache.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;1.El tamaño de la cache&lt;/h3&gt;
&lt;p&gt;No se puede determinar un tamaño fijo optimo, pero a mayor tamaño se necesitas más circuitos para su gestión, las caches más grandes suelen ser un poco más lentas y su tamaño está limitado por el espacio disponible en el chip y las tarjetas.&lt;/p&gt;
&lt;h3&gt;2.Funcion de correspondencia&lt;/h3&gt;
&lt;p&gt;Define cómo se asignan los bloques de memoria en la caché.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DIRECTA&lt;/strong&gt;: cada bloque puede ir solo a una línea especifica.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ASOCIATIVA&lt;/strong&gt;: cualquier bloque puede ir a cualquier línea.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ASOCIATIVA POR CONJUNTO&lt;/strong&gt;: los bloques se asignas a un conjunto de líneas específicas.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3.Algoritmo de sustitución&lt;/h3&gt;
&lt;p&gt;Decide qué bloque se reemplaza cuando la caché está llena.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;LRU&lt;/strong&gt;: se remplaza el bloque menos usado recientemente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LFU&lt;/strong&gt;: se remplaza el bloque menos accedido.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;FIFO&lt;/strong&gt;: se remplaza el bloque más antiguo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ALEATORIA&lt;/strong&gt;: Se reemplaza un bloque al azar.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;4.Politica de escritura&lt;/h3&gt;
&lt;p&gt;Cuando se debe reemplazar un bloque de la caché, si se ha realizado algún cambio en una línea de caché, es necesario escribir esos datos modificados en la memoria principal antes de hacer el reemplazo.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Escritura inmediata&lt;/strong&gt;: Cada escritura en caché se refleja inmediatamente en la memoria principal.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Postescritura&lt;/strong&gt;: Las actualizaciones se hacen en la cache y luego se sobrescriben en la memoria principal cuando el bloque se remplaza.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;5.Tamaño de línea: Define cuántas palabras o bytes conforman un bloque en la caché.&lt;/h3&gt;
&lt;p&gt;A Líneas más grandes se reducen la cantidad de accesos a la memoria principal, pero pueden generar desperdicio de almacenamiento si los datos no se utilizan completamente.&lt;/p&gt;
&lt;h3&gt;6.Numero de caches&lt;/h3&gt;
&lt;p&gt;El diseño de caché en un sistema de cómputo puede abordarse desde dos perspectivas:&apos;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1.Número de niveles de caché (caché multinivel vs. caché de un solo nivel)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Caché de un solo nivel&lt;/strong&gt; (L1 única):Es la primera y única caché entre el procesador y la memoria principal. Su acceso es rápido, pero si la información no está en caché, se debe ir directamente a la RAM, aumentando la latencia.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caché multinivel&lt;/strong&gt; (L1, L2, L3): Divide la caché en varios niveles, cada uno con diferentes tamaños y velocidades.
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;L1&lt;/strong&gt;: Más rápida pero pequeña (cercana al procesador).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;L2&lt;/strong&gt;: Más grande que L1, pero más lenta.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;L3&lt;/strong&gt;: Mayor capacidad, compartida entre núcleos del procesador en muchos casos.
Reduce la cantidad de accesos a la memoria RAM, mejorando el rendimiento.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2.Organización de la caché (unificada vs. separada):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Caché unificada&lt;/strong&gt;: Almacena tanto instrucciones como datos en una única caché.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cache separada&lt;/strong&gt;: Se divide en caché de instrucciones y caché de datos. Evita conflictos cuando el procesador necesita acceder a instrucciones y datos simultáneamente. Mejora el rendimiento en procesadores con segmentación de instrucciones.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para mejorar el tiempo de acceso medio en la memoria caché, es necesario optimizar los siguientes parámetros:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;1.Tamaño de la caché&lt;/strong&gt;: Aumentarlo puede reducir fallos, pero si es demasiado grande, puede volverse más lenta. Se debe encontrar un equilibrio.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2.Función de correspondencia&lt;/strong&gt;: Usar asociatividad por conjuntos en lugar de mapeo directo reduce colisiones y mejora la tasa de aciertos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;3.Tamaño de bloque&lt;/strong&gt;: Un tamaño adecuado minimiza reemplazos innecesarios y mejora la localidad espacial.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;4.Algoritmo de reemplazo&lt;/strong&gt;: LRU (menos recientemente usado) es eficiente, pero puede ser costoso en hardware. Alternativas como FIFO o reemplazo aleatorio pueden simplificar la implementación.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;5.Política de escritura&lt;/strong&gt;: Write-back en lugar de write-through reduce accesos innecesarios a la memoria principal.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;6.Cachés multinivel&lt;/strong&gt;: Usar una caché L2 o L3 de mayor tamaño y menor velocidad que L1 ayuda a reducir la frecuencia de accesos a la RAM.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;7.Separación de instrucciones y datos&lt;/strong&gt;: Evita competencia por el acceso y mejora el rendimiento en arquitecturas segmentadas.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Modulo de E/S y DMA&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/4956384b-96e2-4221-bf30-86fde8cae56e&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Conexión del sistema&lt;/strong&gt;: el módulo de E/S se conecta con el resto del computador a través de las líneas del bus del sistema (datos, dirección, control).&lt;/li&gt;
&lt;li&gt;Registro de Datos y estados:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Registro de datos&lt;/strong&gt;: almacena temporalmente los datos que entran o salen de los dispositivos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Registro de estado&lt;/strong&gt;: indica el estado actual del dispositivo ( listo, ocupado, error). Puede funcionar también como registro de control para recibir instrucciones del procesador.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interacción con CPU:&lt;/strong&gt; La CPU utiliza las líneas de control para enviar ordenes al módulo E/S por ejemplo leer datos o escribir en un dispositivo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reconocimiento de direcciones&lt;/strong&gt;: el módulo reconoce una dirección única para identificar que dispositivo controla. Si controla varios tiene un conjunto único de direcciones.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interfaz específica para dispositivos:&lt;/strong&gt; Contiene la lógica necesaria para comunicarse directamente con cada uno de los dispositivos conectados.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Puede verse afectado, ya que si se realizan operaciones sobre un dato, este se actualiza en cache y si no se vacía la memoria antes de que un dispositivo intente accederlo, se podría estar usando un valor erróneo y viceversa.&lt;/p&gt;
&lt;p&gt;El Acceso Directo a Memoria permite que un dispositivo periférico acceda a memoria principal (RAM) directamente sin la intervención de la CPU. El DMA acelera la transferencia de datos entre la memoria y los dispositivos periféricos, lo que libera recursos de la CPU para otras tareas. Las características funcionales del DMA incluyen varias etapas de transferencia:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solicitud&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La primera etapa implica que un dispositivo periférico envíe una solicitud de acceso a la memoria al controlador DMA. Esta solicitud incluye información sobre la dirección de memoria de origen y destino, la cantidad de datos a transferir y el sentido de la transferencia.
Selección del Canal DMA: Los sistemas informáticos pueden tener múltiples canales, cada uno dedicado a un tipo específico de dispositivo o función. En esta etapa, el sistema debe asignar el canal DMA a la solicitud entrante.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Configuración&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Una vez seleccionado el canal DMA, se configura para que coincida con los requisitos de la transferencia de datos. Esto incluye la configuración de las direcciones de inicio y finalización en la memoria, el tamaño de la transferencia y otras características relevantes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Acceso Directo:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;El controlador DMA se comunica directamente con la memoria principal y el dispositivo periférico para iniciar la transferencia de datos. La CPU no participa en la transferencia en sí, lo que permite que la CPU realice otras tareas mientras se lleva a cabo la transferencia.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Transferencia de Datos:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;El controlador DMA transfiere datos entre la memoria y el dispositivo periférico utilizando el canal DMA configurado previamente. La transferencia puede ser en una dirección o bidireccional.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Finalización&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cuando se completa la transferencia, el controlador DMA notifica al dispositivo periférico y actualiza cualquier estado relevante. La CPU puede ser notificada de la finalización de la transferencia mediante una interrupción o un mecanismo similar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Liberación del Canal DMA&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Después de completar la transferencia, el canal DMA se libera para su uso posterior. Esto permite que otros dispositivos o solicitudes utilicen el canal DMA según sea necesario.&lt;/p&gt;
&lt;p&gt;inicia una operación de E/S (como leer o escribir datos en un dispositivo de almacenamiento, por ejemplo), y luego espera a que el dispositivo de E/S termine la operación antes de continuar con su ejecución. En este modelo, el procesador se &quot;bloquea&quot; o &quot;espera&quot; mientras la operación de E/S se lleva a cabo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Funcionamiento paso a paso:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Iniciar la operación de E/S&lt;/strong&gt;: El procesador envía una solicitud al dispositivo de E/S para realizar una operación específica (por ejemplo, leer un bloque de datos de un disco duro o escribir datos en una impresora).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Espera de respuesta&lt;/strong&gt;: Una vez que el procesador emite la solicitud de E/S, espera que el dispositivo termine la operación. Durante este tiempo, el procesador no realiza ninguna otra tarea, ya que está esperando que se complete la operación solicitada.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Polling&lt;/strong&gt;: El procesador revisa periódicamente el estado del dispositivo de E/S para determinar si la operación ha finalizado. Esto es menos eficiente que el uso de interrupciones.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Procesamiento de los datos&lt;/strong&gt;: Después de que el dispositivo ha terminado la operación, y el procesador ha recibido la respuesta el procesador puede procesar los datos que fueron leídos o verificar que los datos fueron escritos correctamente.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El controlador de DMA recibe el control del sistema cedido por el procesador, para transferir datos a y desde memoria a través del bus del sistema.&lt;/p&gt;
&lt;p&gt;Para hacerlo, el DMAC debe utilizarlo sólo cuando el procesador no lo necesita, o forzar al procesador a que suspenda temporalmente su funcionamiento, a esto se lo conoce como robo de ciclo.&lt;/p&gt;
&lt;p&gt;Cuando el procesador desea leer o escribir un bloque de datos, envía una orden al módulo de DMA, incluyendo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si se solicita una lectura o una escritura.&lt;/li&gt;
&lt;li&gt;La dirección del dispositivo de E/S en cuestión, indicada a través de las líneas de datos.&lt;/li&gt;
&lt;li&gt;La posición inicial de memoria a partir de donde se lee o se escribe, indicada a través del bus de datos y almacenada por el DMAC en su registro de direcciones.&lt;/li&gt;
&lt;li&gt;El número de palabras a leer o escribir, indicado a través de las líneas de datos y almacenado en el registro de cuenta de datos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El procesador continúa su trabajo y el DMAC transfiere el bloque completo de datos, palabra a palabra, directamente desde o hacia la memoria. Cuando la transferencia ha terminado, el DMAC envía una señal de interrupción al procesador.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Buses&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1) Tipos de buses&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dedicado:&lt;/strong&gt; El bus esta permanentemente asignado a una función o a un subconjunto especifico de componentes dentro del sistemas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multiplexado:&lt;/strong&gt; Utiliza las mismas lineas de comunicación para diferentes funciones o componentes en diferentes momentos&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2) Metodo de arbitraje&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Centralizado:&lt;/strong&gt; Un dispositivo o unidad de control se encarga de gestionar el acceso al buss, asignado el tiempo de uso a cada componente&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Distribuido:&lt;/strong&gt; Cada modulo o componente tiene su propia logica para acceder al buss y los modulos colaboran para compartir los recursos&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;3) Temporización&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sincronica:&lt;/strong&gt; El funcionamiento del bus esta cordinado por un reloj y todos los elementos del bus dependen de este.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Asincronica:&lt;/strong&gt; Los eventos del buss no dependen de un reloj central sino que son impulsadas por eventos previos y señales de control&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;4) Anchura de buss&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La anchura de bus se refiere al nro de lineas que tiene el bus, lo que determina la cantidad de información que puede tranmitirse simultaneamente.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En el buss de datos, la anchura indica cuantos bits se pueden transferir de manera paralela&lt;/li&gt;
&lt;li&gt;En el bus de direcciones la anchura determina el tamaño de memoria que se puede direccionar.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;5) Tipo de transferencia de datos&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Transferencia de escritura:&lt;/strong&gt; El bus permite que el maestro envie datos al exclavo&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transferencia de lectura:&lt;/strong&gt; El esclavo envia datos al maestro.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Algunos buses permiten operaciones combinadas como:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;ol&gt;
&lt;li&gt;Lectura-Modificación-Lectura: Una lectura seguida de una escritura en la misma dirección&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Lectura-Despues-Escritura: Una escritura seguida de una lectura en la misma dirección&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ademas, algunos buses permiten transferencias de bloques de datos donde multiples datos se transfieren en un solo ciclo&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Maquina/Arquitectura&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Que elementos componen una maquina con arquitectura Von Newman descrir funcion de cada componente&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Unidad Central de Procesamiento (CPU):&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Es el componente principal encargado de ejecutar las instrucciones del programa. Se divide en:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unidad de Control (CU)&lt;/strong&gt;: Coordina la ejecución de instrucciones, decodificándolas y enviando señales de control a los demás componentes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unidad Aritmético-Lógica (ALU)&lt;/strong&gt;: Realiza operaciones matemáticas y lógicas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Registros&lt;/strong&gt;: Pequeñas unidades de almacenamiento dentro de la CPU que guardan datos temporales y direcciones.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Memoria Principal:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Almacena datos e instrucciones de los programas en ejecución. Es de acceso aleatorio (RAM), lo que permite una lectura y escritura rápida por parte del procesador.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bus de Datos, Dirección y Control:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Permiten la comunicación entre los componentes de la máquina.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bus de Datos&lt;/strong&gt;: Transporta los datos entre la memoria, la CPU y los dispositivos de entrada/salida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bus de Direcciones&lt;/strong&gt;: Indica la ubicación de los datos en la memoria.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bus de Control&lt;/strong&gt;: Transporta señales de control que coordinan el funcionamiento de los demás buses y dispositivos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Unidad de Entrada/Salida (E/S)&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;Permite la interacción entre la computadora y el usuario o dispositivos externos. Incluye teclados, pantallas, discos duros, impresoras, entre otros.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Finales&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/183b4a19-5c0d-46e9-bc9c-083854796011&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/user-attachments/assets/9b5cbd08-8209-4cfc-b5d8-b7c07890c391&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/user-attachments/assets/60e4083e-cbb4-4af3-b527-a0b863af6c33&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.BnPCbJvv.jpg"/><enclosure url="/_astro/thumbnail.BnPCbJvv.jpg"/></item><item><title>Practica 10 Redes | Enlace</title><link>https://fabianmartinezrincon.com/blog/practica-10-enlace</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/practica-10-enlace</guid><description>Practica 10 de Redes y Comunicaciones</description><pubDate>Tue, 07 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Indice&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-1&quot;&gt;Ejercicio 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-2&quot;&gt;Ejercicio 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-3&quot;&gt;Ejercicio 3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-4&quot;&gt;Ejercicio 4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-5&quot;&gt;Ejercicio 5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-6&quot;&gt;Ejercicio 6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-7&quot;&gt;Ejercicio 7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-8&quot;&gt;Ejercicio 8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-9&quot;&gt;Ejercicio 9&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-10&quot;&gt;Ejercicio 10&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-11&quot;&gt;Ejercicio 11&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-12&quot;&gt;Ejercicio 12&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-13&quot;&gt;Ejercicio 13&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 1&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Qué función cumple la capa de enlace? Indique qué servicios presta esta capa.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La capa de enlace de datos, también conocida como capa 2 del Modelo OSI (Open Systems Interconnection), es fundamental en el proceso de comunicación en redes de computadoras. Su principal función es proporcionar medios para que los datos se transfieran de manera confiable entre dispositivos adyacentes conectados a la misma red física, como un enlace Ethernet o una conexión Wi-Fi. Aquí detallo las funciones y servicios principales que presta esta capa:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Funciones de la Capa de Enlace de Datos&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Control de Acceso al Medio (MAC)&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Definición&lt;/strong&gt;: Gestiona cómo los dispositivos en la misma red física acceden al medio compartido de comunicación.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Importancia&lt;/strong&gt;: Evita colisiones y sobrecarga de la red gestionando cuándo y cómo los dispositivos pueden transmitir datos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Detección y corrección de errores&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Definición&lt;/strong&gt;: Identifica y, en algunos casos, corrige errores que ocurren en el nivel físico (capa 1).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mecanismo&lt;/strong&gt;: Utiliza técnicas como el chequeo de paridad, checksums y código de corrección de errores para asegurar que los datos recibidos son correctos y completos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Encapsulamiento de tramas&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Definición&lt;/strong&gt;: Encapsula paquetes de la capa de red en tramas agregando encabezados y trailers necesarios para el procesamiento en la capa de enlace.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Componentes&lt;/strong&gt;: Los encabezados y trailers típicamente incluyen direcciones de origen y destino, información de control, y a menudo checksums para error checking.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Control de Flujo&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Definición&lt;/strong&gt;: Regula la velocidad de transmisión de datos para evitar que el emisor sobrecargue al receptor.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Métodos&lt;/strong&gt;: Puede implementarse mediante mecanismos de retroalimentación entre emisor y receptor, como en el protocolo Ethernet.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Delimitación de tramas&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Definición&lt;/strong&gt;: Determina dónde comienza y termina cada trama, lo cual es esencial para la correcta extracción y procesamiento de los datos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Métodos&lt;/strong&gt;: Uso de secuencias especiales de bytes que no se encuentran en los datos normales para señalar límites de tramas.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Servicios Prestados por la Capa de Enlace de Datos&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confiabilidad de la Transmisión&lt;/strong&gt;: Asegura que los datos transmitidos lleguen sin errores, en secuencia y sin pérdidas ni duplicaciones.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interconexión de Redes&lt;/strong&gt;: Facilita la interconexión entre diferentes tecnologías de red física mediante adaptaciones en el enlace de datos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Control de Topología&lt;/strong&gt;: Gestiona cómo los dispositivos están organizados y comunican en la red, ayudando a organizar y optimizar la estructura de la red.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gestión&lt;/strong&gt;: Proporciona medios para diagnosticar problemas y administrar el rendimiento de la red en la capa de enlace.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Conclusión&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La capa de enlace de datos es crucial en la arquitectura de red, proporcionando la base para una comunicación fiable y efectiva entre dispositivos en la misma red. Esta capa asegura que, pese a las imperfecciones del medio físico y las limitaciones de los dispositivos, la comunicación pueda llevarse a cabo de manera eficiente y controlada.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 2&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Compare los servicios de la capa de enlace con los de la capa de transporte.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La comparación entre los servicios de la capa de enlace de datos (capa 2 del modelo OSI) y la capa de transporte (capa 4 del modelo OSI) revela diferencias clave en sus funciones, objetivos y ámbitos de operación dentro de una red. Aunque ambas capas proporcionan servicios críticos para la entrega de datos, lo hacen en diferentes etapas del proceso de comunicación y con diferentes enfoques.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Capa de Enlace de Datos (Capa 2)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Objetivos y Funciones:&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Proporciona comunicación entre dispositivos adyacentes&lt;/strong&gt; ubicados en la misma red local o enlace.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Control de acceso al medio (MAC)&lt;/strong&gt;: Gestiona cómo los dispositivos acceden al medio físico compartido para evitar colisiones.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Encapsulamiento de datos&lt;/strong&gt;: Empaqueta los datos de la capa de red en tramas, agregando encabezados y colas con direcciones físicas, control de errores y control de flujo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Detección y corrección de errores&lt;/strong&gt;: Utiliza métodos como el CRC (Cyclic Redundancy Check) para detectar errores en los datos recibidos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Control de flujo&lt;/strong&gt;: Evita que el emisor sobrecargue al receptor en el mismo enlace.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Funciona en una única red de enlace&lt;/strong&gt;, no enruta ni proporciona entrega de datos entre diferentes redes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Capa de Transporte (Capa 4)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Objetivos y Funciones:&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Proporciona comunicación de host a host&lt;/strong&gt;, abstrayendo los detalles de las capas de red subyacentes para aplicaciones en diferentes hosts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Segmentación y reensamblaje de datos&lt;/strong&gt;: Divide los mensajes de aplicación en segmentos más pequeños en el emisor y los reensambla en el receptor.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Control de conexión&lt;/strong&gt;: Administra las conexiones de datos end-to-end, asegurando que sean confiables (como en TCP) o no confiables pero rápidas (como en UDP).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Control de flujo y control de congestión&lt;/strong&gt;: Regula la cantidad de datos que pueden ser enviados y ajusta esta cantidad según la capacidad del canal y el estado de la red para prevenir la congestión.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multiplexación y desmultiplexación&lt;/strong&gt;: Utiliza puertos para dirigir segmentos a las aplicaciones correctas en los hosts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Opera a través de múltiples redes&lt;/strong&gt;: Facilita la entrega de datos a través de internetworks, proporcionando funcionalidad independiente de la estructura de red subyacente.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Comparación de Servicios&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ámbito de operación&lt;/strong&gt;: La capa de enlace se centra en la comunicación entre nodos que están físicamente conectados o en la misma red local, mientras que la capa de transporte proporciona comunicación entre procesos de aplicación en diferentes hosts que pueden estar en redes remotas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Confiabilidad&lt;/strong&gt;: Ambas capas pueden proporcionar detección de errores, pero la capa de transporte tiene capacidades adicionales como la recuperación de errores y el control de congestión, diseñadas para garantizar una entrega de datos fiable y eficiente a través de múltiples redes y enlaces.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Encapsulamiento&lt;/strong&gt;: La capa de enlace encapsula paquetes en tramas, mientras que la capa de transporte encapsula mensajes de aplicación en segmentos o datagramas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Control de flujo&lt;/strong&gt;: Mientras que la capa de enlace gestiona el control de flujo para prevenir la sobrecarga en un enlace específico, la capa de transporte lo gestiona de extremo a extremo entre los hosts finales.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Conclusión&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Aunque ambas capas contribuyen a la funcionalidad general de las redes y comparten algunas funciones como el control de flujo y la detección de errores, se dirigen a diferentes aspectos del proceso de comunicación en red. La capa de enlace facilita la comunicación directa entre dispositivos conectados localmente, mientras que la capa de transporte proporciona servicios de comunicación host-to-host a nivel de aplicación, asegurando que los datos se entreguen de manera eficiente y confiable a través de complejas topologías de red.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 3&lt;/h3&gt;
&lt;p&gt;Direccionamiento Ethernet:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;¿Cómo se identifican dos máquinas en una red Ethernet?&lt;/li&gt;
&lt;li&gt;¿Cómo se llaman y qué características poseen estas direcciones?&lt;/li&gt;
&lt;li&gt;¿Cuál es la dirección de broadcast en la capa de enlace? ¿Qué función cumple?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En una red Ethernet, el direccionamiento y la identificación de dispositivos siguen un esquema estructurado que facilita la comunicación entre máquinas dentro de la misma red local. A continuación, te explico detalladamente cómo se identifican las máquinas en una red Ethernet, las características de las direcciones utilizadas, y el propósito y función de la dirección de broadcast en la capa de enlace.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Cómo se identifican dos máquinas en una red Ethernet?&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Direcciones MAC (Media Access Control):&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Cada dispositivo en una red Ethernet tiene una dirección MAC única, que es utilizada para identificar físicamente cada máquina en la red. Esta dirección es esencial para la comunicación en la capa de enlace de datos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;¿Cómo se llaman y qué características poseen estas direcciones?&lt;/code&gt;&lt;/p&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;&lt;strong&gt;Características de las Direcciones MAC:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Longitud:&lt;/strong&gt; Una dirección MAC consta de 48 bits (6 bytes).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Formato:&lt;/strong&gt; Típicamente representada en hexadecimal, dividida en seis grupos de dos dígitos separados por dos puntos o guiones (por ejemplo, 01:23:45:67:89:AB).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Asignación:&lt;/strong&gt; Los primeros tres bytes (24 bits) son conocidos como el identificador de organización único (OUI) y son asignados por la IEEE a los fabricantes. Los siguientes tres bytes son asignados por el fabricante y aseguran que cada tarjeta de red tenga una dirección única.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tipos:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unicast:&lt;/strong&gt; La dirección representa a un solo dispositivo. Las comunicaciones dirigidas a una dirección unicast solo están destinadas a ese dispositivo específico.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multicast:&lt;/strong&gt; La dirección representa a un grupo de dispositivos. Las comunicaciones enviadas a una dirección multicast son recibidas por todos los dispositivos que son parte de ese grupo multicast.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Broadcast:&lt;/strong&gt; Una dirección especial que permite la comunicación con todos los dispositivos en la red local.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;¿Cuál es la dirección de broadcast en la capa de enlace? ¿Qué función cumple?&lt;/code&gt;&lt;/p&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Broadcast en Ethernet:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirección:&lt;/strong&gt; La dirección de broadcast en Ethernet es FF:FF:FF:FF:FF:FF. Esta dirección es reconocida por todos los dispositivos en una red Ethernet.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Función:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Alcance a Todos los Dispositivos:&lt;/strong&gt; Cualquier trama enviada a esta dirección será recibida y procesada por todos los dispositivos en la red local. Esto es útil para enviar anuncios o consultas que deben ser escuchados por todos los dispositivos simultáneamente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inicialización y Configuración:&lt;/strong&gt; Frecuentemente utilizada para protocolos de configuración inicial como DHCP, donde una máquina cliente envía una trama de broadcast para encontrar servidores DHCP sin saber sus direcciones IP específicas.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Conclusión&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Las direcciones MAC son fundamentales para el funcionamiento de las redes Ethernet, proporcionando un método estándar para identificar físicamente cada dispositivo en una red. Las direcciones de broadcast, en particular, desempeñan un papel crucial al permitir comunicaciones a todos los dispositivos de la red simultáneamente, facilitando tanto la configuración de la red como la difusión de información vital a todas las máquinas conectadas.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 4&lt;/h3&gt;
&lt;p&gt;Sobre los dispositivos de capa de enlace:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Enumere dispositivos de capa de enlace y explique sus diferencias.&lt;/li&gt;
&lt;li&gt;¿Qué es una colisión?&lt;/li&gt;
&lt;li&gt;¿Qué dispositivos dividen dominios de broadcast?&lt;/li&gt;
&lt;li&gt;¿Qué dispositivos dividen dominios de colisión?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Los dispositivos de la capa de enlace de datos juegan un papel esencial en la gestión del tráfico, la detección y prevención de errores, y el control de acceso en redes de computadoras. A continuación, te explico los dispositivos comúnmente utilizados en esta capa, las diferencias entre ellos, y también abordaré conceptos adicionales como colisiones, dominios de broadcast y de colisión.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Dispositivos de Capa de Enlace y sus Diferencias&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Hub&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tipo&lt;/strong&gt;: Dispositivo pasivo (a veces activo).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Función&lt;/strong&gt;: Conecta múltiples dispositivos Ethernet en una red y retransmite los datos recibidos a todos los otros puertos, sin procesar ni filtrar el tráfico.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Características&lt;/strong&gt;: Opera en un solo dominio de colisión y broadcast, lo que significa que cualquier paquete enviado por un dispositivo es recibido por todos los demás dispositivos conectados al hub.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Switch&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tipo&lt;/strong&gt;: Dispositivo activo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Función&lt;/strong&gt;: Conecta múltiples dispositivos y filtra y reenvía los datos a los puertos específicos donde están conectados los dispositivos de destino.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Características&lt;/strong&gt;: Reduce los dominios de colisión al crear un dominio de colisión separado para cada puerto, pero todos los puertos permanecen en el mismo dominio de broadcast.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Puente&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tipo&lt;/strong&gt;: Dispositivo de red que se utiliza para dividir una red más grande en segmentos más pequeños, interconectando redes separadas para actuar como una única red.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Función&lt;/strong&gt;: Filtra el tráfico entre dos segmentos de red basándose en las direcciones MAC para reducir las colisiones y mejorar la eficiencia.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Características&lt;/strong&gt;: Opera en dos dominios de colisión diferentes pero puede extender el dominio de broadcast a través de ambos segmentos de red.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;¿Qué es una Colisión?&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Definición&lt;/strong&gt;: Una colisión en una red Ethernet ocurre cuando dos o más dispositivos intentan enviar paquetes simultáneamente en el mismo segmento de red o canal de comunicación compartido. Las colisiones degradan el rendimiento de la red porque los paquetes involucrados en la colisión deben ser retransmitidos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Detección&lt;/strong&gt;: Las redes Ethernet usan el método de acceso CSMA/CD (Carrier Sense Multiple Access with Collision Detection) para detectar colisiones y manejar la retransmisión de datos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;¿Qué dispositivos dividen dominios de broadcast?&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Router&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Función&lt;/strong&gt;: Divide dominios de broadcast al no reenviar paquetes de broadcast entre interfaces. Cada interfaz del router es un dominio de broadcast separado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Impacto&lt;/strong&gt;: Los routers ayudan a limitar el tráfico de broadcast, reduciendo así la carga en la red y mejorando el rendimiento.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;¿Qué dispositivos dividen dominios de colisión?&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Switches y Puentes&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Función&lt;/strong&gt;: Ambos dispositivos reducen el tamaño de los dominios de colisión. Un switch crea un dominio de colisión separado para cada uno de sus puertos, mientras que un puente puede dividir una red en múltiples segmentos más pequeños, cada uno con su propio dominio de colisión.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Impacto&lt;/strong&gt;: La división de dominios de colisión mejora el rendimiento de la red al reducir el número de dispositivos que compiten por el medio de transmisión, lo que resulta en menos colisiones y retransmisiones.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cada uno de estos dispositivos desempeña roles cruciales en la optimización y administración de la red, asegurando que los datos se transmitan de manera eficiente y segura dentro de diversos entornos de red.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 5&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Describa el algoritmo de acceso al medio en Ethernet. ¿Es orientado a la conexión?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El algoritmo de acceso al medio en Ethernet, conocido como CSMA/CD (Carrier Sense Multiple Access with Collision Detection), es fundamental para regular cómo los dispositivos en una red Ethernet compiten y acceden al medio compartido para enviar datos. A continuación, te describo detalladamente este algoritmo y aclaro si es o no orientado a la conexión.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Descripción del Algoritmo CSMA/CD&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CSMA/CD&lt;/strong&gt; se utiliza en redes Ethernet que operan en un entorno de medio compartido, típicamente utilizando cable coaxial o en segmentos de red donde múltiples dispositivos pueden acceder al mismo cable físico. El proceso de CSMA/CD incluye varios pasos:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escuchar el Medio (Carrier Sense)&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Función&lt;/strong&gt;: Antes de enviar datos, un dispositivo debe &quot;escuchar&quot; el medio para detectar si otro dispositivo está transmitiendo (si el medio está &quot;ocupado&quot;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Acción&lt;/strong&gt;: Si el medio está ocupado, el dispositivo esperará hasta que esté libre para evitar colisiones de datos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Transmitir Datos&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Función&lt;/strong&gt;: Una vez que el medio está libre, el dispositivo comienza a transmitir los datos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Acción&lt;/strong&gt;: Durante la transmisión, el dispositivo continúa monitoreando el medio para asegurarse de que no se produzcan colisiones.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Detección de Colisiones (Collision Detection)&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Función&lt;/strong&gt;: Si dos dispositivos comienzan a transmitir simultáneamente, sus señales se superpondrán y distorsionarán, causando una colisión.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Acción&lt;/strong&gt;: Cada dispositivo que detecta una colisión deja de transmitir inmediatamente y envía una señal de jam (interferencia) para asegurar que todos los dispositivos en la red sean conscientes de la colisión.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Retraso Aleatorio (Backoff Algorithm)&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Función&lt;/strong&gt;: Después de una colisión, cada dispositivo espera un período de tiempo aleatorio antes de intentar retransmitir, reduciendo la probabilidad de colisiones repetidas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Acción&lt;/strong&gt;: El tiempo de espera se determina usando el algoritmo de backoff exponencial, que aumenta el rango de espera con cada colisión sucesiva.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Intento de Retransmisión&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Función&lt;/strong&gt;: Después del retraso, el proceso comienza de nuevo desde el paso 1, escuchando el medio antes de intentar transmitir nuevamente.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;¿Es CSMA/CD Orientado a la Conexión?&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No, CSMA/CD no es orientado a la conexión&lt;/strong&gt;. Es un protocolo de acceso al medio que no establece una conexión previa o un canal dedicado entre los dispositivos antes de la transmisión de datos. Funciona en un entorno de difusión donde cada paquete se envía independientemente sin una sesión o conexión preestablecida.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Conclusión&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;CSMA/CD es un método eficiente para gestionar el acceso a un medio de red compartido en ambientes Ethernet, especialmente diseñado para prevenir y gestionar colisiones en redes de área local (LAN). La ausencia de una orientación a la conexión significa que es más flexible y escalable en ambientes donde múltiples dispositivos necesitan comunicarse de manera intermitente y espontánea sin una coordinación o negociación previa constante.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 6&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Cuál es la finalidad del protocolo ARP?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El protocolo ARP (Address Resolution Protocol) desempeña un papel fundamental en las redes de computadoras, específicamente en las redes que operan bajo el protocolo de Internet (IP). Su función principal es mapear direcciones de red de protocolo de nivel superior (como las direcciones IP en una red IPv4) a direcciones de nivel de enlace de datos físicos (como las direcciones MAC en redes Ethernet). Aquí te explico detalladamente la finalidad y el funcionamiento del protocolo ARP.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Finalidad del Protocolo ARP&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Resolución de Direcciones&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Propósito&lt;/strong&gt;: ARP traduce direcciones IP, que son utilizadas para la capa de red, a direcciones MAC, que son necesarias para la capa de enlace de datos. Esta traducción es esencial para el funcionamiento de la mayoría de las redes LAN que usan IP sobre Ethernet.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Necesidad&lt;/strong&gt;: En una red típica, los dispositivos se comunican a través de IP, pero las comunicaciones dentro de la red local (como Ethernet) requieren conocer la dirección MAC del dispositivo de destino para poder enviar los datos de manera efectiva.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Funcionamiento del Protocolo ARP&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Descubrimiento ARP&lt;/strong&gt;: Cuando un dispositivo necesita comunicarse con otro dispositivo en la misma red local y conoce la dirección IP pero no la dirección MAC, envía un mensaje ARP broadcast a todos los dispositivos en la red local. Este mensaje pregunta: &quot;¿Quién tiene esta dirección IP? Envíame tu dirección MAC&quot;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Respuesta ARP&lt;/strong&gt;: El dispositivo que tiene la dirección IP solicitada responde con un mensaje ARP unicast al solicitante, proporcionando su dirección MAC.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caché ARP&lt;/strong&gt;: Los dispositivos suelen almacenar las respuestas ARP en una tabla de caché ARP local para reducir la necesidad de futuras solicitudes ARP y mejorar la eficiencia de la red.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Importancia de ARP en las Redes&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Interoperabilidad&lt;/strong&gt;: ARP permite la interoperabilidad entre la capa de red y la capa de enlace de datos, lo que es crucial para la transmisión de paquetes dentro de las redes locales como Ethernet.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automatización&lt;/strong&gt;: Ofrece un método automático para la resolución de direcciones que es transparente para el usuario y las aplicaciones, lo que simplifica la configuración de la red y la gestión.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Soporte para Redes Dinámicas&lt;/strong&gt;: Facilita la comunicación en redes dinámicas donde los dispositivos pueden cambiarse, agregarse o eliminarse con frecuencia, asegurando que las direcciones MAC se actualicen según sea necesario.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Vulnerabilidades de ARP&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ARP Spoofing/Poisoning&lt;/strong&gt;: A pesar de su utilidad, ARP no tiene mecanismos de autenticación, lo que lo hace vulnerable a ataques donde un atacante puede responder a solicitudes ARP con su propia dirección MAC para interceptar el tráfico de red o realizar ataques man-in-the-middle.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Conclusión&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La finalidad de ARP es esencial para la conexión y la eficiencia de las redes IP sobre tecnologías de enlace de datos como Ethernet, proporcionando la vinculación necesaria entre direcciones IP y direcciones MAC. Sin embargo, es importante ser consciente de sus limitaciones de seguridad y tomar medidas apropiadas para proteger las redes contra posibles ataques relacionados con ARP.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 7&lt;/h3&gt;
&lt;p&gt;Investigue los comandos arp e ip neigh. Inicie una topología con CORE, cree una máquina y utilice en ella los comandos anteriores para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Listar las entradas en la tabla ARP.&lt;/li&gt;
&lt;li&gt;Borrar una entrada en la tabla de ARP.&lt;/li&gt;
&lt;li&gt;Agregar una entrada estática en la tabla de ARP.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El protocolo ARP (Address Resolution Protocol) desempeña un papel fundamental en las redes de computadoras, específicamente en las redes que operan bajo el protocolo de Internet (IP). Su función principal es mapear direcciones de red de protocolo de nivel superior (como las direcciones IP en una red IPv4) a direcciones de nivel de enlace de datos físicos (como las direcciones MAC en redes Ethernet). Aquí te explico detalladamente la finalidad y el funcionamiento del protocolo ARP.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Finalidad del Protocolo ARP&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Resolución de Direcciones&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Propósito&lt;/strong&gt;: ARP traduce direcciones IP, que son utilizadas para la capa de red, a direcciones MAC, que son necesarias para la capa de enlace de datos. Esta traducción es esencial para el funcionamiento de la mayoría de las redes LAN que usan IP sobre Ethernet.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Necesidad&lt;/strong&gt;: En una red típica, los dispositivos se comunican a través de IP, pero las comunicaciones dentro de la red local (como Ethernet) requieren conocer la dirección MAC del dispositivo de destino para poder enviar los datos de manera efectiva.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Funcionamiento del Protocolo ARP&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Descubrimiento ARP&lt;/strong&gt;: Cuando un dispositivo necesita comunicarse con otro dispositivo en la misma red local y conoce la dirección IP pero no la dirección MAC, envía un mensaje ARP broadcast a todos los dispositivos en la red local. Este mensaje pregunta: &quot;¿Quién tiene esta dirección IP? Envíame tu dirección MAC&quot;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Respuesta ARP&lt;/strong&gt;: El dispositivo que tiene la dirección IP solicitada responde con un mensaje ARP unicast al solicitante, proporcionando su dirección MAC.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caché ARP&lt;/strong&gt;: Los dispositivos suelen almacenar las respuestas ARP en una tabla de caché ARP local para reducir la necesidad de futuras solicitudes ARP y mejorar la eficiencia de la red.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Importancia de ARP en las Redes&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Interoperabilidad&lt;/strong&gt;: ARP permite la interoperabilidad entre la capa de red y la capa de enlace de datos, lo que es crucial para la transmisión de paquetes dentro de las redes locales como Ethernet.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automatización&lt;/strong&gt;: Ofrece un método automático para la resolución de direcciones que es transparente para el usuario y las aplicaciones, lo que simplifica la configuración de la red y la gestión.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Soporte para Redes Dinámicas&lt;/strong&gt;: Facilita la comunicación en redes dinámicas donde los dispositivos pueden cambiarse, agregarse o eliminarse con frecuencia, asegurando que las direcciones MAC se actualicen según sea necesario.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Vulnerabilidades de ARP&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ARP Spoofing/Poisoning&lt;/strong&gt;: A pesar de su utilidad, ARP no tiene mecanismos de autenticación, lo que lo hace vulnerable a ataques donde un atacante puede responder a solicitudes ARP con su propia dirección MAC para interceptar el tráfico de red o realizar ataques man-in-the-middle.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Conclusión&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La finalidad de ARP es esencial para la conexión y la eficiencia de las redes IP sobre tecnologías de enlace de datos como Ethernet, proporcionando la vinculación necesaria entre direcciones IP y direcciones MAC. Sin embargo, es importante ser consciente de sus limitaciones de seguridad y tomar medidas apropiadas para proteger las redes contra posibles ataques relacionados con ARP.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 8&lt;/h3&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 9&lt;/h3&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 10&lt;/h3&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 11&lt;/h3&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 12&lt;/h3&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 13&lt;/h3&gt;</content:encoded><h:img src="/_astro/thumbnail.cAHIKwEi.jpg"/><enclosure url="/_astro/thumbnail.cAHIKwEi.jpg"/></item><item><title>Practica 2 Redes | HTTP</title><link>https://fabianmartinezrincon.com/blog/practica-2-redes</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/practica-2-redes</guid><description>Practica 2 de Redes y Comunicaciones</description><pubDate>Tue, 07 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Introducción&lt;/h2&gt;
&lt;h3&gt;Ejercicio 1&lt;/h3&gt;
&lt;p&gt;La función de la capa de aplicación en las redes de computadoras es proporcionar servicios de comunicación a los usuarios y a las aplicaciones. Esta capa incluye las propias aplicaciones que utilizan la red, como navegadores web, clientes de correo electrónico y aplicaciones de mensajería instantánea. En el contexto de Machine to Machine (M2M), la capa de aplicación facilita la comunicación entre máquinas sin intervención humana.&lt;/p&gt;
&lt;p&gt;Además, la capa de aplicación actúa como una interfaz entre el usuario o las aplicaciones/servicios y la red. Es responsable de la definición del formato de los mensajes, de establecer las reglas para el intercambio de mensajes y de asegurar que los mensajes se transmitan de manera que cumplan con los requisitos de la aplicación. También se encarga de la conversión y codificación de datos, la compresión y descompresión, y el cifrado y descifrado, integrando funciones de lo que en el modelo OSI corresponden a las capas de Aplicación, Presentación y Sesión.&lt;/p&gt;
&lt;h3&gt;Ejercicio 2&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Cómo podrían hacerlo si están en diferentes máquinas?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A través de la red&lt;/strong&gt;: Utilizan la comunicación de red, intercambiando mensajes a través de un protocolo de la capa de aplicación adecuado (como HTTP, FTP, SMTP, etc.). Cada proceso utiliza un socket, que es un punto final de comunicación que proporciona la puerta de enlace para enviar y recibir datos. Los sockets se basan en la dirección IP de la máquina y un número de puerto específico para identificar el proceso de destino, permitiendo que los procesos en diferentes hosts se comuniquen entre sí a través de la red.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Y si están en la misma máquina, ¿qué alternativas existen?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Comunicación entre procesos (IPC)&lt;/strong&gt;: Pueden utilizar varios mecanismos de IPC proporcionados por el sistema operativo, tales como:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pipes (tuberías)&lt;/strong&gt;: Permiten la comunicación secuencial entre procesos, donde la salida de un proceso se convierte en la entrada del otro.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memoria compartida&lt;/strong&gt;: Permite a múltiples procesos acceder a una sección común de la memoria RAM para intercambiar datos de manera rápida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sockets de dominio UNIX&lt;/strong&gt;: Son similares a los sockets de red, pero están diseñados para la comunicación entre procesos en la misma máquina, ofreciendo una manera eficiente de intercambio de datos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Señales&lt;/strong&gt;: Son mensajes asincrónicos enviados a un proceso para indicar la ocurrencia de un evento específico.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Semáforos y mutexes&lt;/strong&gt;: Se utilizan para manejar el acceso concurrente a recursos compartidos, como la memoria.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Colas de mensajes&lt;/strong&gt;: Permiten el intercambio de mensajes entre procesos, donde los mensajes se almacenan en una cola hasta que el proceso receptor está listo para procesarlos.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Ejercicio 3&lt;/h3&gt;
&lt;p&gt;El modelo Cliente/Servidor es una arquitectura de red donde el servidor es una máquina que proporciona servicios o recursos, mientras que el cliente es una máquina o proceso que solicita esos servicios o recursos. En este modelo, el servidor está siempre activo, escuchando las solicitudes de los clientes. Cuando recibe una solicitud, el servidor la procesa y luego envía una respuesta de vuelta al cliente. Los clientes pueden conectarse o desconectarse de la red en cualquier momento y pueden tener direcciones IP dinámicas. En esta arquitectura, los clientes no se comunican directamente entre sí.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ejemplo en la “vida cotidiana”&lt;/strong&gt;: Un ejemplo cotidiano podría ser un usuario navegando en internet; el navegador actúa como el cliente y el servidor web como el servidor. El usuario (a través del navegador) solicita una página web (cliente) y el servidor web responde enviando los archivos de esa página web al navegador.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ejemplo de un sistema informático&lt;/strong&gt;: En el contexto de los sistemas informáticos, un ejemplo típico es el servicio de correo electrónico, donde un servidor de correo maneja y almacena los correos electrónicos, mientras que el cliente de correo electrónico (como Microsoft Outlook o Mozilla Thunderbird) permite al usuario enviar y recibir correos electrónicos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Otros modelos de comunicación&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Peer-to-Peer (P2P)&lt;/strong&gt;: En este modelo, cada nodo o participante actúa tanto como cliente como servidor. Los nodos se comunican directamente entre sí sin la necesidad de un servidor central. Esto se utiliza comúnmente en la compartición de archivos y redes de comunicación descentralizadas.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Modelo Híbrido&lt;/strong&gt;: Combina elementos del modelo Cliente/Servidor y P2P. Por ejemplo, en las redes de mensajería instantánea, la detección y localización de presencia de los usuarios puede ser centralizada (cliente/servidor), pero la conversación puede ocurrir directamente entre los usuarios (P2P).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Modelo de Publicación/Suscripción&lt;/strong&gt;: En este modelo, los clientes se suscriben a un tema y reciben actualizaciones automáticamente de un servidor cuando hay nuevos contenidos o mensajes relacionados con ese tema. Esto es común en sistemas de mensajería y notificaciones en tiempo real.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Ejercicio 4&lt;/h3&gt;
&lt;p&gt;Un &quot;Agente de Usuario&quot; o &quot;User Agent&quot; se refiere a cualquier software que actúa en nombre de un usuario. La función principal de un agente de usuario es servir como intermediario entre el usuario y las aplicaciones de red, facilitando la interacción del usuario con la red o los servicios de Internet.&lt;/p&gt;
&lt;p&gt;Las funcionalidades de un agente de usuario incluyen:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Interfaz de Usuario&lt;/strong&gt;: Proporciona una interfaz a través de la cual los usuarios pueden interactuar con las aplicaciones de la red. Por ejemplo, un navegador web ofrece una interfaz gráfica donde los usuarios pueden ingresar URLs, ver páginas web y interactuar con elementos en línea.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Comunicación de Red&lt;/strong&gt;: Maneja la comunicación entre el dispositivo del usuario y la red. Esto incluye la creación de solicitudes de red según las acciones del usuario, el envío de estas solicitudes al servidor correspondiente, y la recepción y procesamiento de las respuestas.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Interpretación de Contenidos&lt;/strong&gt;: Interpreta y presenta los datos recibidos de la red al usuario de una manera entendible y utilizable. Por ejemplo, un navegador web interpreta el HTML, CSS y JavaScript de una página web y los presenta visualmente al usuario.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Gestión de Sesiones&lt;/strong&gt;: Mantiene la información de estado durante la interacción del usuario con las aplicaciones de red. Esto puede incluir la gestión de cookies, autenticaciones y otras informaciones de sesión.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Seguridad&lt;/strong&gt;: Implementa medidas de seguridad para proteger la información del usuario durante la comunicación en la red. Esto puede incluir el cifrado de datos, la verificación de la autenticidad de los sitios web y la protección contra malware.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Almacenamiento y Caché&lt;/strong&gt;: Almacena datos localmente para mejorar el rendimiento y la eficiencia de las solicitudes de red, utilizando técnicas como el almacenamiento en caché de páginas web previamente visitadas.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ejemplos de agentes de usuario incluyen navegadores web, clientes de correo electrónico, y aplicaciones de mensajería instantánea. En la práctica, el término &quot;user agent&quot; se utiliza a menudo específicamente para referirse al navegador web del usuario.&lt;/p&gt;
&lt;h3&gt;Ejercicio 5&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;HTML&lt;/strong&gt;: Es un lenguaje de marcado utilizado para crear y estructurar páginas web. HTML utiliza etiquetas y atributos para definir cómo se muestra el contenido en un navegador web, como textos, imágenes, enlaces, tablas, listas, etc. HTML se ocupa de la presentación y la estructura del contenido en la web.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;HTTP&lt;/strong&gt;: Es un protocolo de la capa de aplicación utilizado para la transmisión de documentos hipermedia, como HTML. Es el fundamento de cualquier intercambio de datos en la Web y es un protocolo basado en solicitudes y respuestas entre clientes (por ejemplo, un navegador web) y servidores (el lugar donde se aloja la página web). HTTP define cómo se deben transmitir los mensajes y los datos entre cliente y servidor.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En cuanto a la entidad donde se ubicaría HTML, este se sitúa en la capa de aplicación del modelo TCP/IP o en las capas de presentación y aplicación del modelo OSI, ya que está directamente relacionado con la forma en que se presentan los datos al usuario final en aplicaciones de red, específicamente en navegadores web.&lt;/p&gt;
&lt;h3&gt;Ejercicio 6&lt;/h3&gt;
&lt;p&gt;HTTP tiene definido un formato de mensaje para los requerimientos y las respuestas.&lt;/p&gt;
&lt;h4&gt;Ejercicio 6.A)&lt;/h4&gt;
&lt;p&gt;En HTTP, los mensajes de requerimiento y respuesta se diferencian principalmente por la línea de inicio, que es la primera línea del mensaje HTTP.&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;Requerimiento (Request):&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Línea de inicio:&lt;/strong&gt; Compuesta por el método HTTP, la URI (Uniform Resource Identifier) solicitada, y la versión de HTTP.&lt;/p&gt;
&lt;h4&gt;Ejemplo&lt;/h4&gt;
&lt;p&gt;Ejemplo de una línea de inicio de un requerimiento: &lt;code&gt;GET /index.html HTTP/1.1&lt;/code&gt;. Aquí, &lt;code&gt;GET&lt;/code&gt; es el método HTTP, &lt;code&gt;/index.html&lt;/code&gt; es la URI solicitada, y &lt;code&gt;HTTP/1.1&lt;/code&gt; es la versión del protocolo HTTP utilizada.&lt;/p&gt;
&lt;p&gt;Esto se puede ver, cuando hacemos un &lt;code&gt;curl&lt;/code&gt; con el parametro &lt;code&gt;-v&lt;/code&gt;, que nos muestra la información de la petición y la respuesta.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;redes@debian:~$ curl -v www.redes.unlp.edu.ar
*   Trying 172.28.0.50:80...
* Connected to www.redes.unlp.edu.ar (172.28.0.50) port 80 (#0)
&gt; GET / HTTP/1.1
&gt; Host: www.redes.unlp.edu.ar
&gt; User-Agent: curl/7.74.0
&gt; Accept: */*
&gt; 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Métodos HTTP comunes:&lt;/strong&gt; GET (solicitar datos), POST (enviar datos para procesamiento), PUT (actualizar recursos), DELETE (eliminar recursos), entre otros.&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;Respuesta (Response):&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Línea de inicio:&lt;/strong&gt; Incluye la versión de HTTP utilizada, el código de estado, y una frase descriptiva que explica el código.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ejemplo de una línea de inicio de respuesta: &lt;code&gt;HTTP/1.1 200 OK&lt;/code&gt;. En este caso, &lt;code&gt;HTTP/1.1&lt;/code&gt; indica la versión, &lt;code&gt;200&lt;/code&gt; es el código de estado que significa éxito, y &lt;code&gt;OK&lt;/code&gt; es la descripción del código de estado.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Códigos de estado:&lt;/strong&gt; Van desde respuestas informativas (100-199), éxitos (200-299), redirecciones (300-399), errores del cliente (400-499) hasta errores del servidor (500-599).&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;* Mark bundle as not supporting multiuse
&amp;#x3C; HTTP/1.1 200 OK
&amp;#x3C; Date: Sat, 13 Apr 2024 16:37:30 GMT
&amp;#x3C; Server: Apache/2.4.56 (Unix)
&amp;#x3C; Last-Modified: Sun, 19 Mar 2023 19:04:46 GMT
&amp;#x3C; ETag: &quot;1322-5f7457bd64f80&quot;
&amp;#x3C; Accept-Ranges: bytes
&amp;#x3C; Content-Length: 4898
&amp;#x3C; Content-Type: text/html
&amp;#x3C; 
&amp;#x3C;!DOCTYPE html&gt;
&amp;#x3C;html lang=&quot;en&quot;&gt;

# Continua  la pagina pero no lo pongo porque es demasiado largo
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;El formato detallado de los mensajes HTTP tanto para los requerimientos como para las respuestas incluye varios componentes además de la línea de inicio:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cabeceras (Headers):&lt;/strong&gt; Pares clave-valor que llevan información adicional sobre el mensaje HTTP. Son fundamentales para el funcionamiento del protocolo y permiten una gran variedad de funcionalidades.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ejemplos de cabeceras en requerimientos:&lt;/strong&gt; &lt;code&gt;User-Agent&lt;/code&gt; (tipo de navegador), &lt;code&gt;Accept&lt;/code&gt; (tipos de contenido que el cliente puede procesar), &lt;code&gt;Content-Type&lt;/code&gt; (tipo de datos en el cuerpo del mensaje), &lt;code&gt;Authorization&lt;/code&gt; (credenciales de autenticación).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ejemplos de cabeceras en respuestas:&lt;/strong&gt; &lt;code&gt;Content-Type&lt;/code&gt; (tipo de contenido del cuerpo de respuesta), &lt;code&gt;Set-Cookie&lt;/code&gt; (enviar cookies al cliente), &lt;code&gt;Cache-Control&lt;/code&gt; (directivas de caché), &lt;code&gt;WWW-Authenticate&lt;/code&gt; (indica método de autenticación requerido).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cuerpo (Body):&lt;/strong&gt; Opcional en algunos tipos de mensajes, contiene los datos transmitidos. En los requerimientos puede incluir datos a ser procesados por el servidor (como en POST), y en las respuestas usualmente lleva el recurso solicitado o un mensaje de error.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Las cabeceras HTTP cumplen roles cruciales en la funcionalidad del protocolo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Negociación de contenido:&lt;/strong&gt; Permite que el cliente y el servidor seleccionen el formato más adecuado para los datos que se intercambian, basándose en capacidades o preferencias.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Control de caché:&lt;/strong&gt; Define políticas para el almacenamiento en caché de recursos, lo que puede reducir la carga en los servidores y acelerar la carga de páginas en el cliente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Autenticación y control de acceso:&lt;/strong&gt; Proveen mecanismos para que los servidores identifiquen y autoricen a los usuarios, asegurando que solo los usuarios autorizados puedan acceder a ciertos recursos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Manejo de sesiones:&lt;/strong&gt; Aunque HTTP es un protocolo sin estado, las cabeceras como &lt;code&gt;Cookie&lt;/code&gt; y &lt;code&gt;Set-Cookie&lt;/code&gt; permiten la creación de sesiones, manteniendo el estado a través de múltiples interacciones consecutivas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Información sobre el estado de la conexión:&lt;/strong&gt; Como &lt;code&gt;Keep-Alive&lt;/code&gt; para mantener la conexión abierta y reutilizarla para futuras solicitudes, reduciendo la latencia y la sobrecarga en la creación de conexiones.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estos componentes permiten que HTTP sea un protocolo flexible y poderoso, adecuado para las diversas necesidades del mundo web moderno.&lt;/p&gt;
&lt;h4&gt;Ejercicio 6.B)&lt;/h4&gt;
&lt;p&gt;El formato de un mensaje HTTP, ya sea un mensaje de requerimiento (solicitud) o un mensaje de respuesta, está compuesto de la siguiente manera:&lt;/p&gt;
&lt;h4&gt;Formato de los Mensajes de Requerimiento HTTP:&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Línea de Inicio&lt;/strong&gt;: Esta es la primera línea de la solicitud y contiene:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Método HTTP&lt;/strong&gt;: El método de solicitud (GET, POST, PUT, DELETE, etc.).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;URI&lt;/strong&gt;: El identificador del recurso solicitado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Versión de HTTP&lt;/strong&gt;: La versión del protocolo HTTP utilizada (usualmente HTTP/1.1 o HTTP/2).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ejemplo:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;GET /index.html HTTP/1.1
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cabeceras de Requerimiento&lt;/strong&gt;: Siguen a la línea de inicio y se componen de pares clave-valor que proporcionan más detalles sobre la solicitud. Incluyen información sobre el navegador (User-Agent), las cookies (Cookie), tipos de contenido que se pueden manejar (Accept), y muchas otras.&lt;/p&gt;
&lt;p&gt;Ejemplo:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;Host: www.ejemplo.com
User-Agent: curl/7.74.0
Accept: text/html,application/xhtml+xml
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cuerpo del Mensaje&lt;/strong&gt;: Opcional y solo utilizado en algunos métodos como POST o PUT. Contiene los datos que se envían al servidor.&lt;/p&gt;
&lt;p&gt;Ejemplo (cuerpo de una solicitud POST):&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;name=usuario&amp;#x26;password=clave
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Formato de los Mensajes de Respuesta HTTP:&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Línea de Inicio&lt;/strong&gt;: Similar a la solicitud, pero para respuestas. Contiene:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Versión de HTTP&lt;/strong&gt;: La versión del protocolo HTTP utilizada.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Código de Estado&lt;/strong&gt;: Un número de tres dígitos que indica el resultado de la solicitud.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Frase de Razón&lt;/strong&gt;: Descripción textual del código de estado.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ejemplo:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;HTTP/1.1 200 OK
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cabeceras de Respuesta&lt;/strong&gt;: Pares clave-valor que proporcionan información adicional sobre la respuesta, como el tipo de contenido (Content-Type), longitud del contenido (Content-Length), y la gestión de la caché (Cache-Control).&lt;/p&gt;
&lt;p&gt;Ejemplo:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;Content-Type: text/html
Content-Length: 3495
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cuerpo del Mensaje&lt;/strong&gt;: Opcional, dependiendo del código de estado y el método HTTP utilizado. Si la respuesta contiene datos (como una página web o datos de una API), estos se incluyen aquí.&lt;/p&gt;
&lt;p&gt;Ejemplo (cuerpo de una respuesta con HTML):&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;#x3C;html&gt;
&amp;#x3C;head&gt;
  &amp;#x3C;title&gt;Ejemplo&amp;#x3C;/title&gt;
&amp;#x3C;/head&gt;
&amp;#x3C;body&gt;
  &amp;#x3C;p&gt;Hola, mundo!&amp;#x3C;/p&gt;
&amp;#x3C;/body&gt;
&amp;#x3C;/html&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Suponga que desea enviar un requerimiento con la versión de HTTP 1.1 desde curl/7.74.0 a un sitio de ejemplo como www.misitio.com para obtener el recurso /index.html. En base a lo indicado,&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -v -H &quot;User-Agent: curl/7.74.0&quot; -H &quot;Accept: text/html&quot; http://www.misitio.com/index.html
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;*   Trying 108.61.73.182:80...
* Connected to www.misitio.com (108.61.73.182) port 80 (#0)
&gt; GET /index.html HTTP/1.1
&gt; Host: www.misitio.com
&gt; User-Agent: curl/7.74.0
&gt; Accept: text/html
&gt; 
* Mark bundle as not supporting multiuse
&amp;#x3C; HTTP/1.1 301 Moved Permanently
&amp;#x3C; Server: nginx/1.14.2
&amp;#x3C; Date: Sat, 13 Apr 2024 16:53:57 GMT
&amp;#x3C; Content-Type: text/html
&amp;#x3C; Content-Length: 185
&amp;#x3C; Connection: keep-alive
&amp;#x3C; Location: https://www.misitio.com/index.html
&amp;#x3C; 
&amp;#x3C;html&gt;
&amp;#x3C;head&gt;&amp;#x3C;title&gt;301 Moved Permanently&amp;#x3C;/title&gt;&amp;#x3C;/head&gt;
&amp;#x3C;body bgcolor=&quot;white&quot;&gt;
&amp;#x3C;center&gt;&amp;#x3C;h1&gt;301 Moved Permanently&amp;#x3C;/h1&gt;&amp;#x3C;/center&gt;
&amp;#x3C;hr&gt;&amp;#x3C;center&gt;nginx/1.14.2&amp;#x3C;/center&gt;
&amp;#x3C;/body&gt;
&amp;#x3C;/html&gt;
* Connection #0 to host www.misitio.com left intact
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;El resultado del comando &lt;code&gt;curl&lt;/code&gt; que has ejecutado indica que el recurso &lt;code&gt;/index.html&lt;/code&gt; del sitio &lt;code&gt;www.misitio.com&lt;/code&gt; se ha movido permanentemente a una nueva ubicación. Analicemos en detalle lo que ha sucedido en cada paso:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Intento de conexión y solicitud GET:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;*   Trying 108.61.73.182:80...
* Connected to www.misitio.com (108.61.73.182) port 80 (#0)
&gt; GET /index.html HTTP/1.1
&gt; Host: www.misitio.com
&gt; User-Agent: curl/7.74.0
&gt; Accept: text/html
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Trying 108.61.73.182:80...&lt;/strong&gt;: &lt;code&gt;curl&lt;/code&gt; intenta conectar al servidor en la dirección IP &lt;code&gt;108.61.73.182&lt;/code&gt; en el puerto estándar de HTTP, que es el 80.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Connected to www.misitio.com (108.61.73.182) port 80 (#0)&lt;/strong&gt;: La conexión se ha establecido con éxito.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GET /index.html HTTP/1.1&lt;/strong&gt;: Se envía la solicitud GET para obtener el recurso &lt;code&gt;/index.html&lt;/code&gt; utilizando HTTP/1.1.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Host: www.misitio.com&lt;/strong&gt;: El encabezado Host indica el dominio al que se está haciendo la solicitud.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User-Agent: curl/7.74.0&lt;/strong&gt;: El User-Agent es &lt;code&gt;curl&lt;/code&gt; versión 7.74.0, que es la herramienta utilizada para hacer la solicitud.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accept: text/html&lt;/strong&gt;: El cliente (curl) acepta respuestas de tipo &lt;code&gt;text/html&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Respuesta del servidor:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;#x3C; HTTP/1.1 301 Moved Permanently
&amp;#x3C; Server: nginx/1.14.2
&amp;#x3C; Date: Sat, 13 Apr 2024 16:53:57 GMT
&amp;#x3C; Content-Type: text/html
&amp;#x3C; Content-Length: 185
&amp;#x3C; Connection: keep-alive
&amp;#x3C; Location: https://www.misitio.com/index.html
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;HTTP/1.1 301 Moved Permanently&lt;/strong&gt;: El código de estado &lt;code&gt;301&lt;/code&gt; y el mensaje &lt;code&gt;Moved Permanently&lt;/code&gt; indican que el recurso ha sido movido de manera permanente a otra URL.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Server: nginx/1.14.2&lt;/strong&gt;: El servidor que maneja la solicitud es &lt;code&gt;nginx&lt;/code&gt; versión 1.14.2.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Date&lt;/strong&gt;: La fecha y hora de la respuesta.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Content-Type: text/html&lt;/strong&gt;: El tipo de contenido de la respuesta es HTML.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Content-Length: 185&lt;/strong&gt;: El cuerpo de la respuesta contiene 185 bytes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Connection: keep-alive&lt;/strong&gt;: La conexión se mantiene abierta para posibles solicitudes futuras.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Location: https://www.misitio.com/index.html&lt;/strong&gt;: El encabezado Location indica la nueva URL a la que se ha movido el recurso.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Cuerpo de la respuesta:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;#x3C;html&gt;
&amp;#x3C;head&gt;&amp;#x3C;title&gt;301 Moved Permanently&amp;#x3C;/title&gt;&amp;#x3C;/head&gt;
&amp;#x3C;body bgcolor=&quot;white&quot;&gt;
&amp;#x3C;center&gt;&amp;#x3C;h1&gt;301 Moved Permanently&amp;#x3C;/h1&gt;&amp;#x3C;/center&gt;
&amp;#x3C;hr&gt;&amp;#x3C;center&gt;nginx/1.14.2&amp;#x3C;/center&gt;
&amp;#x3C;/body&gt;
&amp;#x3C;/html&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Este es el cuerpo de la respuesta, que es una página HTML simple que indica que el documento se ha movido permanentemente.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Mantenimiento de la conexión:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;* Connection #0 to host www.misitio.com left intact
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;La conexión entre &lt;code&gt;curl&lt;/code&gt; y el servidor se mantiene intacta después de la transacción.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Conclusión:&lt;/h3&gt;
&lt;p&gt;La solicitud HTTP original se ha redirigido a una nueva URL que utiliza HTTPS (&lt;code&gt;https://www.misitio.com/index.html&lt;/code&gt;). Deberías seguir esta nueva URL para obtener el recurso deseado. Si deseas que &lt;code&gt;curl&lt;/code&gt; siga automáticamente la redirección y obtenga el recurso, puedes agregar la opción &lt;code&gt;-L&lt;/code&gt; a tu comando &lt;code&gt;curl&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -v https://www.misitio.com/index.html

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La opción &lt;code&gt;-L&lt;/code&gt; instruirá a &lt;code&gt;curl&lt;/code&gt; para que siga cualquier redirección HTTP hasta que alcance el recurso final o hasta que se exceda el número máximo de redirecciones permitidas.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Queda para preguntar porque es un re quilombo&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 7&lt;/h3&gt;
&lt;p&gt;El comando &lt;code&gt;curl&lt;/code&gt; es una herramienta de línea de comandos utilizada para transferir datos desde o hacia un servidor. Se utiliza para trabajar con diversos protocolos, incluidos HTTP, HTTPS, FTP, SMTP, entre otros. &lt;code&gt;curl&lt;/code&gt; es útil para probar, depurar y trabajar con API web o servicios de red.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;-I&lt;/strong&gt; (o --head): Este parámetro se utiliza para hacer una solicitud HTTP HEAD, lo que significa que &lt;code&gt;curl&lt;/code&gt; recuperará solo los encabezados de una respuesta HTTP. Es útil para ver metadatos de la respuesta como el tipo de contenido, estado, cookies, y otros encabezados de respuesta sin descargar todo el cuerpo del documento.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;-H&lt;/strong&gt; (o --header): Este parámetro permite al usuario pasar encabezados adicionales en la solicitud HTTP. Por ejemplo, puede ser utilizado para incluir encabezados de autenticación, indicar el tipo de contenido que se está enviando o cualquier otro encabezado HTTP personalizado necesario para la solicitud.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;-X&lt;/strong&gt; (o --request): Este parámetro se utiliza para especificar un método de solicitud HTTP personalizado cuando se comunica con el servidor HTTP. Los valores comunes incluyen GET, POST, PUT, DELETE, etc. Por defecto, &lt;code&gt;curl&lt;/code&gt; realiza una solicitud GET, pero con -X puedes cambiar el tipo de solicitud según sea necesario.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;-s&lt;/strong&gt; (o --silent): Este parámetro se usa para hacer que &lt;code&gt;curl&lt;/code&gt; sea silencioso o discreto durante su operación. Cuando se utiliza, &lt;code&gt;curl&lt;/code&gt; no mostrará la barra de progreso, pero aún proporcionará el resultado final. Es útil para scripts o para cuando se desea un resultado limpio sin información adicional de progreso o errores.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Estos parámetros permiten a los usuarios de &lt;code&gt;curl&lt;/code&gt; personalizar sus solicitudes HTTP de diversas maneras para satisfacer diferentes necesidades de prueba y comunicación con servidores web y servicios en línea.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 8&lt;/h3&gt;
&lt;p&gt;Ejecute el comando curl sin ningún parámetro adicional y acceda a www.redes.unlp.edu.ar. Luego responda:&lt;/p&gt;
&lt;h4&gt;Resultado&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/37102b10-935b-4061-b8ea-cc6e96ce24e2&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Ejercicio 8.A)&lt;/h4&gt;
&lt;p&gt;Cuando ejecutas el comando &lt;code&gt;curl&lt;/code&gt; sin ningún parámetro adicional accediendo a &lt;code&gt;www.redes.unlp.edu.ar&lt;/code&gt;, estás realizando un solo requerimiento HTTP GET hacia el servidor. Este requerimiento pide al servidor que devuelva el contenido completo de la página principal del sitio.&lt;/p&gt;
&lt;p&gt;Para ver todos los requerimientos que tu navegador realizaría normalmente al visitar una página web (como cargas de imágenes, CSS, JavaScript, etc.), necesitarías una herramienta que analice el contenido de la página y realice las solicitudes adicionales correspondientes. &lt;code&gt;curl&lt;/code&gt; por sí solo no realiza este tipo de análisis y seguimiento de contenidos. Por defecto, &lt;code&gt;curl&lt;/code&gt; solo hace una petición para el recurso específico que le indiques, generalmente el documento HTML principal.&lt;/p&gt;
&lt;p&gt;Sin embargo, puedes utilizar &lt;code&gt;curl&lt;/code&gt; para descargar los recursos individuales si conoces sus URLs exactas. Para hacer un seguimiento de todas las peticiones que un navegador haría, necesitarías una herramienta más avanzada que pueda interpretar HTML y realizar las peticiones adicionales, como un navegador en modo headless o una herramienta de línea de comandos como &lt;code&gt;wget&lt;/code&gt; con ciertas opciones activadas.&lt;/p&gt;
&lt;p&gt;Aquí tienes algunas maneras en las que puedes aproximarte a este proceso:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Descarga recursiva con &lt;code&gt;wget&lt;/code&gt;&lt;/strong&gt;:
Puedes usar &lt;code&gt;wget&lt;/code&gt; para descargar recursivamente todos los recursos de una página web. Esto es más cercano a lo que hace un navegador:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;wget -r -l1 -p -k -E http://www.redes.unlp.edu.ar
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Este comando intentará descargar la página principal y todos los recursos necesarios para su visualización, como CSS, JavaScript e imágenes. Las opciones son:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-r&lt;/code&gt;: Recursivo.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-l1&lt;/code&gt;: Profundidad de nivel 1.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-p&lt;/code&gt;: Descarga todos los recursos necesarios para mostrar la página HTML.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-k&lt;/code&gt;: Convierte los enlaces para que funcionen localmente.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-E&lt;/code&gt;: Asegura que los archivos HTML tengan la extensión .html.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl www.redes.unlp.edu.ar &gt; index.html
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Esta imagen la dejo por aca solo para no perderla&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/4536cb29-b612-4d96-9a30-748774544724&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Ejercicio 8.B)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;#x3C;link href=&quot;./bootstrap/css/bootstrap.css&quot; rel=&quot;stylesheet&quot;&gt;&lt;/code&gt;&lt;/strong&gt;: El atributo &lt;code&gt;href&lt;/code&gt; en un elemento &lt;code&gt;link&lt;/code&gt; generalmente se utiliza para enlazar hojas de estilo externas a la página HTML. Aquí, &lt;code&gt;href&lt;/code&gt; apunta a la ubicación de una hoja de estilo CSS que el navegador debería cargar y aplicar a la página.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;#x3C;img src=&quot;image.jpg&quot; alt=&quot;Descripción&quot;&gt;&lt;/code&gt;&lt;/strong&gt;: Aunque en tu ejemplo no tienes un tag &lt;code&gt;img&lt;/code&gt; explícito, típicamente el atributo &lt;code&gt;src&lt;/code&gt; (similar en propósito al &lt;code&gt;href&lt;/code&gt; para los elementos &lt;code&gt;img&lt;/code&gt;) indica la ubicación de una imagen que debe ser mostrada en la página. El navegador solicita y muestra la imagen desde esta ubicación.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Ejercicio 8.C)&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;¿alcanza con realizar un único requerimiento?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Para visualizar completamente una página web como en un navegador, no es suficiente con realizar un único requerimiento (como lo hace &lt;code&gt;curl&lt;/code&gt; por defecto).&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Cuántos requerimientos serían necesarios para obtener una página que tiene dos CSS, dos Javascript y tres imágenes?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La página principal puede contener referencias a otros recursos como hojas de estilo CSS, scripts de JavaScript, imágenes, etc. Cada uno de estos recursos requerirá de su propio requerimiento HTTP para ser recuperado. Por lo tanto, para una página que tiene dos CSS, dos Javascript y tres imágenes, se necesitarían, en total, &lt;strong&gt;siete requerimientos HTTP adicionales&lt;/strong&gt; además del requerimiento inicial para la página HTML.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Diferencie como funcionaría un navegador respecto al comando curl ejecutado previamente&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Un navegador automáticamente realiza todos estos requerimientos adicionales cuando carga una página, interpretando el HTML, descubriendo los recursos necesarios y solicitándolos al servidor. Por el contrario, el comando &lt;code&gt;curl&lt;/code&gt; ejecutado anteriormente solo hace el requerimiento inicial y recupera el HTML, pero no carga ni interpreta los recursos adicionales. Por eso, si abres el HTML guardado localmente sin los recursos adicionales, la página podría no verse como se espera.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 9&lt;/h2&gt;
&lt;p&gt;Ejecute a continuación los siguientes comandos:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -v -s www.redes.unlp.edu.ar &gt; /dev/null
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;*   Trying 172.28.0.50:80...
* Connected to www.redes.unlp.edu.ar (172.28.0.50) port 80 (#0)
&gt; GET / HTTP/1.1
&gt; Host: www.redes.unlp.edu.ar
&gt; User-Agent: curl/7.74.0
&gt; Accept: */*
&gt; 
* Mark bundle as not supporting multiuse
&amp;#x3C; HTTP/1.1 200 OK
&amp;#x3C; Date: Sat, 13 Apr 2024 17:12:55 GMT
&amp;#x3C; Server: Apache/2.4.56 (Unix)
&amp;#x3C; Last-Modified: Sun, 19 Mar 2023 19:04:46 GMT
&amp;#x3C; ETag: &quot;1322-5f7457bd64f80&quot;
&amp;#x3C; Accept-Ranges: bytes
&amp;#x3C; Content-Length: 4898
&amp;#x3C; Content-Type: text/html
&amp;#x3C; 
{ [4898 bytes data]
* Connection #0 to host www.redes.unlp.edu.ar left intac
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -I -v -s www.redes.unlp.edu.ar
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;*   Trying 172.28.0.50:80...
* Connected to www.redes.unlp.edu.ar (172.28.0.50) port 80 (#0)
&gt; HEAD / HTTP/1.1
&gt; Host: www.redes.unlp.edu.ar
&gt; User-Agent: curl/7.74.0
&gt; Accept: */*
&gt; 
* Mark bundle as not supporting multiuse
&amp;#x3C; HTTP/1.1 200 OK
HTTP/1.1 200 OK
&amp;#x3C; Date: Sat, 13 Apr 2024 17:13:25 GMT
Date: Sat, 13 Apr 2024 17:13:25 GMT
&amp;#x3C; Server: Apache/2.4.56 (Unix)
Server: Apache/2.4.56 (Unix)
&amp;#x3C; Last-Modified: Sun, 19 Mar 2023 19:04:46 GMT
Last-Modified: Sun, 19 Mar 2023 19:04:46 GMT
&amp;#x3C; ETag: &quot;1322-5f7457bd64f80&quot;
ETag: &quot;1322-5f7457bd64f80&quot;
&amp;#x3C; Accept-Ranges: bytes
Accept-Ranges: bytes
&amp;#x3C; Content-Length: 4898
Content-Length: 4898
&amp;#x3C; Content-Type: text/html
Content-Type: text/html

&amp;#x3C; 
* Connection #0 to host www.redes.unlp.edu.ar left intact
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Ejercicio 9.A)&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;curl -v -s www.redes.unlp.edu.ar &gt; /dev/null&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-v&lt;/code&gt; activa el modo verboso, que muestra la solicitud y la respuesta detalladas en la terminal.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-s&lt;/code&gt; silencia la barra de progreso de &lt;code&gt;curl&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Redirige la salida del contenido (el cuerpo de la respuesta) a &lt;code&gt;/dev/null&lt;/code&gt;, que es una ubicación en sistemas tipo Unix que descarta toda la información escrita en ella.&lt;/li&gt;
&lt;li&gt;La solicitud realizada es un método &lt;code&gt;GET&lt;/code&gt;, que solicita el contenido del recurso.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;curl -I -v -s www.redes.unlp.edu.ar&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Incluye la opción &lt;code&gt;-I&lt;/code&gt;, que modifica la solicitud para usar el método &lt;code&gt;HEAD&lt;/code&gt; en lugar de &lt;code&gt;GET&lt;/code&gt;. El método &lt;code&gt;HEAD&lt;/code&gt; solicita solo las cabeceras HTTP de la respuesta, sin el cuerpo del mensaje.&lt;/li&gt;
&lt;li&gt;Al igual que el primer comando, &lt;code&gt;-v&lt;/code&gt; activa el modo verboso y &lt;code&gt;-s&lt;/code&gt; silencia la barra de progreso.&lt;/li&gt;
&lt;li&gt;No hay redirección del cuerpo del mensaje porque el método &lt;code&gt;HEAD&lt;/code&gt; no retorna un cuerpo en la respuesta.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;La principal diferencia es que el primer comando realiza una solicitud &lt;code&gt;GET&lt;/code&gt; y descarta el cuerpo de la respuesta, mientras que el segundo realiza una solicitud &lt;code&gt;HEAD&lt;/code&gt; y no recibe ni necesita descartar ningún cuerpo de respuesta.&lt;/p&gt;
&lt;h4&gt;Ejercicio 9.B)&lt;/h4&gt;
&lt;p&gt;Si se quita la redirección a &lt;code&gt;/dev/null&lt;/code&gt; del primer comando, el cuerpo de la respuesta del servidor (que es el contenido de la página web solicitada) se mostrará en la terminal en lugar de ser descartado. Esto podría generar mucho texto en la terminal si la página solicitada tiene un contenido extenso.&lt;/p&gt;
&lt;p&gt;En el segundo comando, la redirección a &lt;code&gt;/dev/null&lt;/code&gt; no es necesaria porque el método &lt;code&gt;HEAD&lt;/code&gt; no devuelve un cuerpo en la respuesta, por lo que no hay contenido para mostrar o descartar.&lt;/p&gt;
&lt;h4&gt;Ejercicio 9.C)&lt;/h4&gt;
&lt;p&gt;En ambos casos, la cantidad de cabeceras en el requerimiento es la misma:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Host&lt;/code&gt;: el host solicitado.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;User-Agent&lt;/code&gt;: identifica el cliente que hace la solicitud.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Accept&lt;/code&gt;: los tipos de contenido que el cliente acepta.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La respuesta en ambos comandos también contiene el mismo número de cabeceras, que proporcionan información sobre:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;HTTP/1.1 200 OK&lt;/code&gt;: el estado de la respuesta.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Date&lt;/code&gt;: la fecha y hora del servidor.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Server&lt;/code&gt;: el software del servidor.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Last-Modified&lt;/code&gt;: cuándo se modificó por última vez el contenido solicitado.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ETag&lt;/code&gt;: un identificador único para la versión específica del recurso.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Accept-Ranges&lt;/code&gt;: si el servidor acepta solicitudes de rango.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Content-Length&lt;/code&gt;: la longitud del contenido en bytes.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Content-Type&lt;/code&gt;: el tipo de contenido del recurso.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En resumen, el número de cabeceras que viajan en la respuesta es el mismo en ambos comandos. La diferencia principal entre los comandos es si el cuerpo de la respuesta se descarta (&lt;code&gt;GET&lt;/code&gt; con redirección a &lt;code&gt;/dev/null&lt;/code&gt;) o simplemente no se solicita (&lt;code&gt;HEAD&lt;/code&gt;).&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 10&lt;/h3&gt;
&lt;p&gt;La cabecera &lt;code&gt;Date&lt;/code&gt; en los mensajes HTTP indica la fecha y la hora en la que el mensaje fue generado por el servidor. La fecha y la hora están siempre expresadas en formato GMT (Greenwich Mean Time), según lo establecido por el protocolo HTTP.&lt;/p&gt;
&lt;p&gt;Por ejemplo:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Date: Sat, 13 Apr 2024 17:12:55 GMT
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Funciones de la cabecera &lt;code&gt;Date&lt;/code&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Sincronización&lt;/strong&gt;: Ayuda a sincronizar la hora entre el servidor y el cliente. Aunque los clientes no necesariamente ajustan su hora basándose en esta cabecera, proporciona un contexto temporal para la respuesta. Esto es especialmente útil para gestionar la caché de los recursos, comparar con las cabeceras de modificación y controlar la frescura de la información.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Validación&lt;/strong&gt;: En combinación con otras cabeceras como &lt;code&gt;Last-Modified&lt;/code&gt; o &lt;code&gt;ETag&lt;/code&gt;, la cabecera &lt;code&gt;Date&lt;/code&gt; puede usarse para validar la caché. Esto puede determinar si el contenido almacenado en la caché del cliente todavía está actualizado o si necesita ser refrescado.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Seguridad&lt;/strong&gt;: Proporciona un punto de referencia temporal para la autenticación y las firmas digitales. Por ejemplo, los tokens de autenticación pueden incluir un sello de tiempo para limitar su validez.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Condiciones para solicitudes subsecuentes&lt;/strong&gt;: Las cabeceras como &lt;code&gt;If-Modified-Since&lt;/code&gt; o &lt;code&gt;If-Unmodified-Since&lt;/code&gt; pueden utilizar la fecha y hora del servidor para hacer solicitudes condicionales, basándose en cuándo se generó el último mensaje conocido por el cliente.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En resumen, la cabecera &lt;code&gt;Date&lt;/code&gt; es un componente estándar en las respuestas HTTP que brinda una marca de tiempo oficial del servidor para el mensaje de respuesta. Es útil para los procesos de gestión de caché, seguridad y sincronización de tiempos en la comunicación entre clientes y servidores.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 11&lt;/h3&gt;
&lt;p&gt;En HTTP, la forma en que un cliente sabe que ha recibido todo el objeto solicitado completamente varía entre las versiones HTTP/1.0 y HTTP/1.1 debido a las diferencias en cómo gestionan las conexiones y transmiten los datos.&lt;/p&gt;
&lt;p&gt;En HTTP/1.0, la forma principal de determinar que todo el objeto solicitado ha sido completamente recibido es a través del cierre de la conexión TCP por parte del servidor. HTTP/1.0 no tiene un mecanismo estándar para mantener la conexión abierta después de que se haya enviado una respuesta; por lo tanto, una vez que el servidor termina de enviar los datos, cierra la conexión. Cuando el cliente detecta que la conexión se ha cerrado, sabe que ha recibido toda la respuesta. Sin embargo, este enfoque tiene varias desventajas, como la necesidad de abrir una nueva conexión TCP para cada solicitud, lo que aumenta la latencia y reduce la eficiencia de la red.&lt;/p&gt;
&lt;p&gt;HTTP/1.1 introduce varias mejoras para superar las limitaciones de HTTP/1.0, incluyendo el concepto de conexiones persistentes. En HTTP/1.1, las conexiones se mantienen abiertas por defecto, lo que permite enviar múltiples solicitudes y respuestas a través de la misma conexión TCP. Esto plantea la pregunta de cómo el cliente sabe cuándo ha recibido una respuesta completa sin el cierre de la conexión como indicador.&lt;/p&gt;
&lt;p&gt;En HTTP/1.1, esto se logra principalmente a través de dos mecanismos:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;La cabecera Content-Length&lt;/strong&gt;: Cuando el servidor incluye la cabecera &lt;code&gt;Content-Length&lt;/code&gt; en la respuesta, especifica la longitud exacta del cuerpo de la respuesta en bytes. El cliente usa este valor para determinar cuántos bytes necesita leer del cuerpo de la respuesta, independientemente de si la conexión se mantiene abierta para futuras solicitudes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Transfer-Encoding chunked&lt;/strong&gt;: En casos donde el servidor no puede determinar el tamaño total del contenido de antemano (por ejemplo, para contenido generado dinámicamente), puede utilizar la codificación de transferencia &quot;chunked&quot;. Esto implica enviar el cuerpo de la respuesta en una serie de segmentos (chunks), cada uno precedido por su tamaño. El final de la respuesta se indica mediante un segmento de tamaño cero, seguido por los encabezados finales (si los hay) y una línea en blanco. Esto permite al cliente saber que ha recibido todo el objeto solicitado, incluso sin una longitud de contenido predeterminada.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Estos mecanismos permiten una transferencia de datos más eficiente y la reutilización de conexiones, mejorando el rendimiento general de la comunicación HTTP en la versión 1.1 respecto a la 1.0.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 12&lt;/h3&gt;
&lt;p&gt;Los códigos de retorno de un servidor web, también conocidos como códigos de estado HTTP, están definidos y clasificados en varias RFC, principalmente en la RFC 7231, que es parte de la serie de documentos que actualizan y definen el protocolo HTTP/1.1. Estos códigos se clasifican en cinco categorías principales:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;1xx (Respuestas informativas)&lt;/strong&gt;: Indican que la solicitud fue recibida y el proceso continúa.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2xx (Respuestas exitosas)&lt;/strong&gt;: Indican que la solicitud fue recibida correctamente, entendida y aceptada.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;3xx (Redirecciones)&lt;/strong&gt;: Indican que se deben tomar más acciones para completar la solicitud.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;4xx (Errores del cliente)&lt;/strong&gt;: Indican que hubo un error y la solicitud no puede ser procesada debido a algo que se percibe como un error del cliente (por ejemplo, URL mal formada, falta de autenticación).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;5xx (Errores del servidor)&lt;/strong&gt;: Indican que el servidor falló al intentar procesar una solicitud válida.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ambas partes, el cliente y el servidor, están interesadas en los códigos de retorno:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cliente&lt;/strong&gt;: Necesita entender los códigos de estado para saber cómo proceder después de hacer una solicitud. Por ejemplo, si recibe un 200 OK, sabe que la solicitud fue exitosa; si recibe un 404 Not Found, sabe que el recurso solicitado no existe; si recibe un 301 Moved Permanently, sabe que debe realizar una nueva solicitud al URL proporcionado en la respuesta.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Servidor&lt;/strong&gt;: Debe enviar el código de estado adecuado como parte de su respuesta para comunicar el resultado de la solicitud al cliente. Esto es crucial para el correcto funcionamiento del protocolo HTTP y para proporcionar una experiencia de usuario adecuada.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sí, es muy útil que esta información esté detallada y clasificada en la RFC por varias razones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Estándar Global&lt;/strong&gt;: Proporciona un conjunto estándar de códigos de estado que pueden ser utilizados e interpretados de manera coherente por todos los servidores y clientes web en todo el mundo.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Desarrollo y Depuración&lt;/strong&gt;: Ayuda a los desarrolladores a entender cómo deben programar sus aplicaciones cliente y servidor para manejar diferentes situaciones. También facilita la depuración al proporcionar una explicación clara de por qué una solicitud puede haber fallado.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Interoperabilidad&lt;/strong&gt;: Asegura que diferentes aplicaciones y servicios web puedan trabajar juntos de manera efectiva, ya que todos siguen las mismas reglas para interpretar los códigos de estado.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En resumen, la clasificación y el detalle de los códigos de retorno en la RFC son fundamentales para la interoperabilidad de la web, permitiendo que clientes y servidores se comuniquen y entiendan entre sí de manera efectiva.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 13&lt;/h3&gt;
&lt;p&gt;Utilizando curl, realice un requerimiento con el método HEAD al sitio
&lt;code&gt;www.redes.unlp.edu.ar&lt;/code&gt; e indique:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;redes@debian:~$ curl -I http://unlp.edu.ar
HTTP/1.1 301 Moved Permanently
Server: nginx/1.18.0
Date: Sat, 13 Apr 2024 17:23:56 GMT
Content-Type: text/html
Content-Length: 169
Connection: keep-alive
Location: https://unlp.edu.ar/
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Ejercicio 13 A)&lt;/h4&gt;
&lt;p&gt;La primera línea de la respuesta &lt;code&gt;HTTP/1.1 301 Moved Permanently&lt;/code&gt; indica que:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;HTTP/1.1&lt;/strong&gt;: Es la versión del protocolo HTTP que el servidor está utilizando para responder.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;301&lt;/strong&gt;: Es el código de estado HTTP que informa que el recurso solicitado ha sido movido a otra URL de forma permanente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Moved Permanently&lt;/strong&gt;: Es la frase de razón asociada con el código de estado 301, que proporciona una explicación textual del código de estado para la claridad humana.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Ejercicio 13 B)&lt;/h4&gt;
&lt;p&gt;La respuesta muestra 6 encabezados, que son:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Server&lt;/strong&gt;: Información sobre el servidor web.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Date&lt;/strong&gt;: Fecha y hora en que se generó la respuesta.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Content-Type&lt;/strong&gt;: Tipo de contenido de la respuesta.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Content-Length&lt;/strong&gt;: Longitud del contenido de la respuesta.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Connection&lt;/strong&gt;: Gestión de la conexión.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Location&lt;/strong&gt;: La nueva URL a la que se ha movido el recurso solicitado.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Ejercicio 13 C)&lt;/h4&gt;
&lt;p&gt;El servidor web que está sirviendo la página es &lt;code&gt;nginx/1.18.0&lt;/code&gt;. Esto se indica en el encabezado &lt;code&gt;Server&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;Ejercicio 13 D)&lt;/h4&gt;
&lt;p&gt;El acceso a la página solicitada no fue exitoso en términos de recuperar el recurso originalmente solicitado; en cambio, se informa al cliente de que el recurso se ha movido a una nueva ubicación permanente, que es &lt;code&gt;https://unlp.edu.ar/&lt;/code&gt;. Esto significa que la solicitud inicial de la página condujo a una redirección.&lt;/p&gt;
&lt;h4&gt;Ejercicio 13 E)&lt;/h4&gt;
&lt;p&gt;La información proporcionada no incluye cuándo fue la última vez que se modificó la página. El encabezado &lt;code&gt;Last-Modified&lt;/code&gt;, que generalmente proporciona esta información, no está presente en la respuesta. Sin embargo, la presencia de un código de estado 301 sugiere que la URL original ha cambiado de ubicación, por lo que la &quot;última modificación&quot; puede referirse a cuando se realizó el cambio en la URL en lugar del contenido de la página en sí. En este caso, para obtener información sobre la última modificación del contenido real, tendrías que seguir la redirección a la nueva URL y realizar otra solicitud, posiblemente con el método &lt;code&gt;GET&lt;/code&gt;, para obtener los encabezados relevantes.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -I https://unlp.edu.ar/
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;HTTP/2 200 
server: nginx/1.18.0
date: Sat, 13 Apr 2024 17:30:17 GMT
content-type: text/html; charset=UTF-8
link: &amp;#x3C;https://unlp.edu.ar/wp-json/&gt;; rel=&quot;https://api.w.org/&quot;
link: &amp;#x3C;https://unlp.edu.ar/wp-json/wp/v2/pages/390&gt;; rel=&quot;alternate&quot;; type=&quot;application/json&quot;
link: &amp;#x3C;https://unlp.edu.ar/&gt;; rel=shortlink
x-cacheable: YES:Forced
x-varnish: 312546773
age: 0
via: 1.1 varnish (Varnish/7.0)
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Respuesta HTTP&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;HTTP/2 200&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;HTTP/2&lt;/strong&gt;: Es la versión del protocolo HTTP que el servidor está utilizando para responder. HTTP/2 es una mejora significativa con respecto a HTTP/1.1 en términos de eficiencia, velocidad y seguridad.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;200&lt;/strong&gt;: Es el código de estado HTTP que indica que la solicitud ha sido exitosa y que el servidor ha encontrado, entendido y aceptado la solicitud, y ha devuelto un recurso como respuesta.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Encabezados de respuesta&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;server: nginx/1.18.0&lt;/strong&gt;: El servidor web que atiende la solicitud es Nginx versión 1.18.0.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;date: Sat, 13 Apr 2024 17:30:17 GMT&lt;/strong&gt;: Fecha y hora en que el servidor envió la respuesta.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;content-type: text/html; charset=UTF-8&lt;/strong&gt;: El tipo de contenido de la respuesta es HTML y está codificado en UTF-8.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;link&lt;/strong&gt;: Encabezados que establecen enlaces a la API de WordPress y a otras URL relacionadas con la API. Estos también proporcionan una URL corta para la página.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;x-cacheable: YES:Forced&lt;/strong&gt;: Indica que la respuesta puede ser almacenada en caché y ha sido marcada para el almacenamiento en caché forzado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;x-varnish: 312546773&lt;/strong&gt;: Indica un identificador único para la transacción de Varnish Cache, que es un software acelerador de aplicaciones web.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;age: 0&lt;/strong&gt;: El tiempo en segundos desde que el objeto fue almacenado en caché.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;via: 1.1 varnish (Varnish/7.0)&lt;/strong&gt;: Información sobre los proxies o gateways intermedios por los que pasó la respuesta, indicando que Varnish Cache ha sido utilizado.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No se proporciona un encabezado &lt;code&gt;Last-Modified&lt;/code&gt;, por lo que no podemos determinar a partir de esta respuesta cuándo fue la última vez que se modificó el recurso. Tampoco se incluye un encabezado &lt;code&gt;ETag&lt;/code&gt;, que a veces se utiliza junto con &lt;code&gt;Last-Modified&lt;/code&gt; para el control de caché y la validación condicional.&lt;/p&gt;
&lt;h4&gt;Ejercicio 13 D)&lt;/h4&gt;
&lt;p&gt;Solicite la página nuevamente con curl usando GET, pero esta vez indique que quiere obtenerla sólo si la misma fue modificada en una fecha posterior a la que efectivamente fue modificada.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Cómo lo hace?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Qué resultado obtuvo?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Puede explicar para qué sirve?&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Pasaron cosas&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 14&lt;/h2&gt;
&lt;p&gt;Utilizando curl, acceda al sitio &lt;code&gt;www.redes.unlp.edu.ar/restringido/index.php&lt;/code&gt; y siga las instrucciones y las pistas que vaya recibiendo hasta obtener la respuesta final. Será de utilidad para resolver este ejercicio poder analizar tanto el contenido de cada página como los encabezados&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl www.redes.unlp.edu.ar/restringido/index.php
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/d44c6726-e3e9-43f4-a06a-c8dbedf93900&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl www.redes.unlp.edu.ar/obtener-usuario.php
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/1ab7dd69-bc87-4795-a417-07d6d63be0dc&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -H &quot;Usuario-Redes: obtener&quot; www.redes.unlp.edu.ar/obtener-usuario.php
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/0645cd34-7af6-474a-ad0a-295df1b05af2&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;Authorization: Basic {credenciales_codificadas_en_base64}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Las &quot;credenciales_codificadas_en_base64&quot; son simplemente el nombre de usuario y la contraseña concatenados con un dos puntos (&lt;code&gt;:&lt;/code&gt;) entre ellos, luego todo esto codificado en base64. Para el usuario &quot;redes&quot; y la contraseña &quot;RYC&quot;, esto sería:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Concatenar usuario y contraseña con un dos puntos: &lt;code&gt;redes:RYC&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Codificar este string en base64. Puedes hacer esto en una terminal Linux usando el comando: &lt;code&gt;echo -n &apos;redes:RYC&apos; | base64&lt;/code&gt;. Asegúrate de incluir la opción &lt;code&gt;-n&lt;/code&gt; para &lt;code&gt;echo&lt;/code&gt; para evitar que se añada un salto de línea al final del string antes de codificarlo.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;echo -n &apos;redes:RYC&apos; | base64

cmVkZXM6UllD
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Una vez que tienes la cadena codificada en base64, puedes hacer la solicitud con &lt;code&gt;curl&lt;/code&gt; de la siguiente manera:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -H &quot;Authorization: Basic cmVkZXM6UllD&quot; www.redes.unlp.edu.ar/obtener-usuario.php
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/585f519d-b989-45d1-8cc2-af01dbb44afc&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -I -H &quot;Authorization: Basic cmVkZXM6UllD&quot; www.redes.unlp.edu.ar/obtener-usuario.php
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/67cffcc1-0090-400b-a7dc-fb3f9dc8ac7d&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -H &quot;Authorization: Basic cmVkZXM6UllD&quot; www.redes.unlp.edu.ar/the-end.php
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/15f018e5-8770-4b32-a731-0531421e6957&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 15&lt;/h2&gt;
&lt;p&gt;Utilizando la VM, realice las siguientes pruebas:&lt;/p&gt;
&lt;h4&gt;Parte a&lt;/h4&gt;
&lt;p&gt;Ejecute el comando&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl www.redes.unlp.edu.ar/extras/prueba-http-1-0.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Y copie la salida completa (incluyendo los dos saltos de linea del final).&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/c2a1a58b-00fd-4d38-9282-33dac551fae0&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Parte b&lt;/h4&gt;
&lt;p&gt;Desde la consola ejecute el comando.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;telnet www.redes.unlp.edu.ar 80
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Y luego pegue el contenido que tiene almacenado en el portapapeles.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;telnet www.redes.unlp.edu.ar 80
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;redes@debian:~$ telnet www.redes.unlp.edu.ar 80
Trying 172.28.0.50...
Connected to www.redes.unlp.edu.ar.
Escape character is &apos;^]&apos;.
GET /http/HTTP-1.1/ HTTP/1.0
User-Agent: curl/7.38.0
Host: www.redes.unlp.edu.ar
Accept: */*



HTTP/1.1 200 OK
Date: Tue, 26 Mar 2024 01:39:42 GMT
Server: Apache/2.4.56 (Unix)
Last-Modified: Sun, 19 Mar 2023 19:04:46 GMT
ETag: &quot;760-5f7457bd64f80&quot;
Accept-Ranges: bytes
Content-Length: 1888
Connection: close
Content-Type: text/html
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;#x3C;!DOCTYPE html&gt;
&amp;#x3C;html lang=&quot;en&quot;&gt;
  &amp;#x3C;head&gt;
    &amp;#x3C;meta charset=&quot;utf-8&quot;&gt;
    &amp;#x3C;title&gt;Protocolo HTTP: versiones&amp;#x3C;/title&gt;
    &amp;#x3C;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &amp;#x3C;meta name=&quot;description&quot; content=&quot;&quot;&gt;
    &amp;#x3C;meta name=&quot;author&quot; content=&quot;&quot;&gt;

    &amp;#x3C;!-- Le styles --&gt;
    &amp;#x3C;link href=&quot;../../bootstrap/css/bootstrap.css&quot; rel=&quot;stylesheet&quot;&gt;
    &amp;#x3C;link href=&quot;../../css/style.css&quot; rel=&quot;stylesheet&quot;&gt;
    &amp;#x3C;link href=&quot;../../bootstrap/css/bootstrap-responsive.css&quot; rel=&quot;stylesheet&quot;&gt;

    &amp;#x3C;!-- HTML5 shim, for IE6-8 support of HTML5 elements --&gt;
    &amp;#x3C;!--[if lt IE 9]&gt;
      &amp;#x3C;script src=&quot;./bootstrap/js/html5shiv.js&quot;&gt;&amp;#x3C;/script&gt;
    &amp;#x3C;![endif]--&gt;
  &amp;#x3C;/head&gt;

  &amp;#x3C;body&gt;


    &amp;#x3C;div id=&quot;wrap&quot;&gt;
        
    &amp;#x3C;div class=&quot;navbar navbar-inverse navbar-fixed-top&quot;&gt;
      &amp;#x3C;div class=&quot;navbar-inner&quot;&gt;
        &amp;#x3C;div class=&quot;container&quot;&gt;
          &amp;#x3C;a class=&quot;brand&quot; href=&quot;../../index.html&quot;&gt;&amp;#x3C;i class=&quot;icon-home icon-white&quot;&gt;&amp;#x3C;/i&gt;&amp;#x3C;/a&gt;
          &amp;#x3C;a class=&quot;brand&quot; href=&quot;https://catedras.info.unlp.edu.ar&quot; target=&quot;_blank&quot;&gt;Redes y Comunicaciones&amp;#x3C;/a&gt;
          &amp;#x3C;a class=&quot;brand&quot; href=&quot;http://www.info.unlp.edu.ar&quot; target=&quot;_blank&quot;&gt;Facultad de Inform&amp;#x26;aacute;tica&amp;#x3C;/a&gt;
          &amp;#x3C;a class=&quot;brand&quot; href=&quot;http://www.unlp.edu.ar&quot; target=&quot;_blank&quot;&gt;UNLP&amp;#x3C;/a&gt;
        &amp;#x3C;/div&gt;
      &amp;#x3C;/div&gt;
    &amp;#x3C;/div&gt;

    &amp;#x3C;div class=&quot;container&quot;&gt;
    &amp;#x3C;h1&gt;Ejemplo del protocolo HTTP 1.1&amp;#x3C;/h1&gt;
    &amp;#x3C;p&gt;
        Esta p&amp;#x26;aacute;gina se visualiza utilizando HTTP 1.1. Utilizando el capturador de paquetes analice cuantos flujos utiliza el navegador para visualizar la p&amp;#x26;aacute;gina con sus im&amp;#x26;aacute;genes en contraposici&amp;#x26;oacute;n con el protocolo HTTP/1.0.
    &amp;#x3C;/p&gt;
    &amp;#x3C;/p&gt;
    &amp;#x3C;h2&gt;Imagen de ejemplo&amp;#x3C;/h2&gt;
    &amp;#x3C;img src=&quot;13532-tuxkiller03green.png&quot; width=&quot;800px&quot;/&gt;
    &amp;#x3C;/div&gt; 
    
    
    &amp;#x3C;/div&gt;
    &amp;#x3C;div id=&quot;footer&quot;&gt;
      &amp;#x3C;div class=&quot;container&quot;&gt;
        &amp;#x3C;p class=&quot;muted credit&quot;&gt;Redes y Comunicaciones&amp;#x3C;/p&gt;
      &amp;#x3C;/div&gt;
    &amp;#x3C;/div&gt;
  &amp;#x3C;/body&gt;
&amp;#x3C;/html&gt;
Connection closed by foreign host.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La salida del comando &lt;code&gt;telnet&lt;/code&gt; que has ejecutado muestra una sesión típica de comunicación HTTP entre tu cliente (en este caso, la sesión Telnet que está simulando un navegador) y el servidor web en &lt;code&gt;www.redes.unlp.edu.ar&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Aquí te explico lo que ocurrió luego de hacerlo:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Establecimiento de la conexión&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Trying 172.28.0.50...&lt;/code&gt;: Intenta conectarse al servidor.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Connected to www.redes.unlp.edu.ar.&lt;/code&gt;: Se estableció la conexión con éxito.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Escape character is &apos;^]&apos;.&lt;/code&gt;: Indica que puedes presionar &lt;code&gt;Ctrl+]&lt;/code&gt; para entrar en el modo de comando Telnet.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Envío de la solicitud HTTP&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A través de Telnet, enviaste manualmente una solicitud HTTP al servidor. La solicitud incluye:
&lt;ul&gt;
&lt;li&gt;Línea de solicitud: &lt;code&gt;GET /http/HTTP-1.1/ HTTP/1.0&lt;/code&gt;, que solicita el recurso &lt;code&gt;/http/HTTP-1.1/&lt;/code&gt; utilizando el protocolo HTTP versión 1.0.&lt;/li&gt;
&lt;li&gt;Encabezados de solicitud: Incluyen &lt;code&gt;User-Agent&lt;/code&gt;, que identifica el cliente que hace la solicitud; &lt;code&gt;Host&lt;/code&gt;, que especifica el dominio al que se está haciendo la solicitud; y &lt;code&gt;Accept&lt;/code&gt;, que indica los tipos de contenido que el cliente está dispuesto a recibir.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Respuesta del servidor&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El servidor responde con la versión del protocolo &lt;code&gt;HTTP/1.1&lt;/code&gt; y el código de estado &lt;code&gt;200 OK&lt;/code&gt;, indicando que la solicitud ha sido exitosa.&lt;/li&gt;
&lt;li&gt;Los encabezados de respuesta incluyen información como la fecha, el servidor, la última modificación del contenido, el rango de aceptación de bytes, la longitud del contenido y el tipo de contenido.&lt;/li&gt;
&lt;li&gt;La conexión se cierra después de enviar la respuesta, como lo indica &lt;code&gt;Connection: close&lt;/code&gt;, que es el comportamiento esperado cuando un cliente HTTP/1.0 realiza una solicitud.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Contenido HTML&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Después de los encabezados, el servidor devuelve el cuerpo de la respuesta, que es un documento HTML. Este documento contiene la estructura de una página web típica, incluidos elementos como links a hojas de estilo CSS y scripts, así como contenido textual e imágenes.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cierre de la conexión&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Connection closed by foreign host.&lt;/code&gt;: El servidor cierra la conexión después de enviar la respuesta completa. Esto es típico de las conexiones HTTP/1.0, donde cada solicitud y respuesta requieren una nueva conexión.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Lo que ocurrió después de pegar el contenido en Telnet es que el servidor procesó tu solicitud HTTP y te devolvió una respuesta que incluía el contenido HTML para el recurso solicitado. La conexión se cerró después, siguiendo el modelo de &quot;una solicitud, una respuesta&quot; de HTTP/1.0.&lt;/p&gt;
&lt;h4&gt;Parte c&lt;/h4&gt;
&lt;p&gt;Repita el proceso anterior, pero copiando la salida del recurso /extras/prueba-http-1-1.txt. Verifique que debería poder pegar varias veces el mismo contenido sin tener que ejecutar telnet nuevamente.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl www.redes.unlp.edu.ar/extras/prueba-http-1-1.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/dc1c16aa-6e7b-49f1-8173-c0c6cf559267&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Es lo mismo pero podes ingresar varios inputs&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 16&lt;/h2&gt;
&lt;p&gt;En base a lo obtenido en el ejercicio anterior, responda:&lt;/p&gt;
&lt;p&gt;En HTTP/1.0, cada conexión se cierra después de que se envía una sola respuesta. Esto significa que cada vez que un cliente necesita enviar una nueva solicitud HTTP, debe establecer una nueva conexión TCP. Este es un proceso relativamente lento y ineficiente porque el establecimiento de una conexión TCP requiere varios pasos (el proceso de &quot;handshake&quot; o saludo).&lt;/p&gt;
&lt;p&gt;En cambio, en HTTP/1.1, se introdujo el concepto de &quot;conexiones persistentes&quot;, que permiten que varias solicitudes y respuestas se envíen a través de la misma conexión TCP. Esto reduce la sobrecarga asociada con el establecimiento de nuevas conexiones y hace que la comunicación sea más eficiente. Por defecto, las conexiones en HTTP/1.1 son persistentes a menos que se especifique lo contrario&lt;/p&gt;
&lt;p&gt;Estás iniciando una conexión manual a un servidor web y escribiendo directamente solicitudes HTTP en la terminal. En el contexto de HTTP/1.1, si envías varias solicitudes a través de una sesión de telnet, el servidor mantiene la conexión abierta, permitiéndote enviar varias solicitudes y recibir sus respectivas respuestas sin necesidad de reconectar cada vez.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;curl&lt;/code&gt; por defecto hace una sola solicitud y cierra la conexión (a menos que se especifique lo contrario con opciones como &lt;code&gt;--keepalive&lt;/code&gt;). &lt;code&gt;curl&lt;/code&gt; es más automatizado y manejable para solicitudes únicas, mientras que con &lt;code&gt;telnet&lt;/code&gt; estás manejando la conexión manualmente, lo que te permite ver el comportamiento de la conexión persistente en HTTP/1.1.&lt;/p&gt;
&lt;p&gt;Observe la definición de método y recurso en la RFC. Luego responda&lt;/p&gt;
&lt;p&gt;Get&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Preguntar&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;La diferencia principal es que con HTTP/1.0, la conexión se cierra después de cada respuesta, mientras que con HTTP/1.1, la conexión se mantiene abierta para solicitudes adicionales.&lt;/p&gt;
&lt;p&gt;Esto se debe al diseño de los protocolos: HTTP/1.1 fue diseñado para ser más eficiente al permitir múltiples transacciones por conexión, reduciendo la sobrecarga de la conexión.&lt;/p&gt;
&lt;p&gt;HTTP/1.1 es más eficiente en términos de uso de la red debido a las conexiones persistentes.&lt;/p&gt;
&lt;p&gt;Piense en el ejercicio donde analizó la cantidad de requerimientos necesarios para obtener una página con estilos, javascripts e imágenes.&lt;/p&gt;
&lt;p&gt;Las conexiones persistentes (HTTP/1.1) pueden aumentar el uso de recursos del servidor porque las conexiones se mantienen abiertas más tiempo. Esto podría ser un problema para servidores con alto tráfico o recursos limitados. Sin embargo, en general, los beneficios en términos de eficiencia y rendimiento suelen superar estos inconvenientes.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 17&lt;/h2&gt;
&lt;p&gt;En el siguiente ejercicio veremos la diferencia entre los métodos POST y GET. Para ello, será necesario utilizar la VM y la herramienta &lt;strong&gt;Wireshark&lt;/strong&gt;. Antes de iniciar considere:&lt;/p&gt;
&lt;p&gt;Capture los paquetes utilizando la interfaz con IP 172.28.0.1. (Menú &lt;code&gt;Capture-&gt;Options&lt;/code&gt;. Luego seleccione la interfaz correspondiente y presione &lt;code&gt;Start&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Para que el analizador de red sólo nos muestre los mensajes del protocolo http introduciremos la cadena ‘http’ (sin las comillas) en la ventana de especificación de filtros de visualización (display-filter).&lt;/p&gt;
&lt;p&gt;Si no hiciéramos esto veríamos todo el tráfico que es capaz de capturar nuestra placa de red. De los paquetes que son capturados, aquel que esté seleccionado será mostrado en forma detallada en la sección que está justo debajo. Como sólo estamos interesados en http ocultaremos toda la información que no es relevante para esta práctica (Información de trama, Ethernet, IP y TCP). Desplegar la información correspondiente al protocolo HTTP bajo la leyenda “Hypertext Transfer Protocol”&lt;/p&gt;
&lt;p&gt;Para borrar la cache del navegador, deberá ir al menu “Herramientas-&gt;Borrar historial reciente”.&lt;/p&gt;
&lt;p&gt;Alternativamente puede utilizar Ctrl+F5 en el navegador para forzar la petición HTTP evitando el uso de caché del navegador.&lt;/p&gt;
&lt;p&gt;En caso de querer ver de forma simplificada el contenido de una comunicación http, utilice el botón derecho sobre un paquete HTTP perteneciente al flujo capturado y seleccione la opción &lt;strong&gt;Follow TCP Stream&lt;/strong&gt;.&lt;/p&gt;
&lt;h4&gt;Parte a&lt;/h4&gt;
&lt;p&gt;Abra un navegador e ingrese a la URL: www.redes.unlp.edu.ar e ingrese al link en la sección &lt;code&gt;Capa de Aplicación&lt;/code&gt; llamado &lt;code&gt;Métodos HTTP&lt;/code&gt;. En la página mostrada se visualizan dos nuevos links llamados: Método GET y Método POST. Ambos muestran un formulario como el siguiente:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/dbe456ec-26a7-4528-a81e-b4d05a341908&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Analice el código HTML.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Utilizando el analizador de paquetes Wireshark capture los paquetes enviados y recibidos al presionar el botón Enviar.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Qué diferencias detectó en los mensajes enviados por el cliente?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Observó alguna diferencia en el browser si se utiliza un mensaje u otro?&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Lo pude resolver en &lt;a href=&quot;https://rincondelfabo.vercel.app/posts/wireshark&quot;&gt;Blog usando Wireshark&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 18&lt;/h2&gt;
&lt;p&gt;El principal uso de &lt;code&gt;Set-Cookie&lt;/code&gt; (que el servidor utiliza para enviar cookies al cliente) y &lt;code&gt;Cookie&lt;/code&gt; (que el cliente utiliza para enviar cookies de vuelta al servidor) en HTTP es para la gestión del estado de la sesión. Esto incluye mantener a los usuarios autenticados, rastrear preferencias del usuario, gestionar carritos de compras en sitios de comercio electrónico, y más. Las cookies permiten que la información persista entre diferentes solicitudes HTTP en un protocolo que por diseño es sin estado.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 19&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Protocolo basado en texto&lt;/strong&gt;: Este tipo de protocolo utiliza texto legible por humanos para la comunicación entre dispositivos o programas. Los mensajes se componen de texto claro, lo que facilita su lectura y depuración sin necesidad de herramientas adicionales. Sin embargo, este tipo de protocolos puede resultar menos eficiente en términos de tamaño del mensaje y velocidad de procesamiento. Ejemplos incluyen HTTP/1.0 y HTTP/1.1.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Protocolo binario&lt;/strong&gt;: Este tipo de protocolo utiliza estructuras de datos binarias para la comunicación. Los mensajes son compactos y están diseñados para ser procesados rápidamente por la máquina, pero no son legibles directamente por los humanos. Los protocolos binarios suelen ser más eficientes en términos de rendimiento y tamaño de mensaje que los basados en texto, pero pueden ser más difíciles de depurar sin herramientas especiales. Un ejemplo común es el Protocolo de Control de Transmisión (TCP) a nivel de transporte.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;HTTP/1.0 y HTTP/1.1&lt;/strong&gt;: Estas versiones de HTTP son protocolos basados en texto. Utilizan texto claro para definir las solicitudes y respuestas, incluyendo métodos, URI, cabeceras y cuerpos del mensaje. Esto los hace fáciles de leer y escribir para los humanos, pero potencialmente más grandes en tamaño y más lentos de procesar que los mensajes binarios debido a la sobrecarga del texto.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;HTTP/2&lt;/strong&gt;: A diferencia de sus predecesores, HTTP/2 es un protocolo principalmente binario. Aunque las solicitudes y respuestas HTTP siguen conceptualmente el mismo formato (métodos, cabeceras, cuerpos), en HTTP/2 estas son codificadas en estructuras binarias llamadas &quot;frames&quot;. Esto permite un envío más eficiente, como la compresión de cabeceras y la multiplexación (enviar múltiples solicitudes y respuestas en paralelo a través de la misma conexión). Aunque los mensajes en HTTP/2 son binarios, las cabeceras y otros elementos todavía pueden representarse y enviarse en un formato legible por humanos cuando se visualizan a través de herramientas de depuración.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 20&lt;/h2&gt;
&lt;p&gt;Responder las siguientes preguntas:&lt;/p&gt;
&lt;h4&gt;Parte a&lt;/h4&gt;
&lt;p&gt;¿Qué función cumple la cabecera Host en HTTP 1.1?&lt;/p&gt;
&lt;p&gt;¿Existía en HTTP 1.0?&lt;/p&gt;
&lt;p&gt;¿Qué sucede en HTTP/2?&lt;/p&gt;
&lt;h4&gt;Parte b&lt;/h4&gt;
&lt;p&gt;¿Cómo quedaría en HTTP/2 el siguiente pedido realizado en HTTP/1.1 si se
está usando https?&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;GET /index.php HTTP/1.1
Host: www.info.unlp.edu.ar
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio Parcial&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -X ?? www.redes.unlp.edu.ar/??
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Resultado&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;&gt; HEAD /metodos/ HTTP/??
&gt; Host: www.redes.unlp.edu.ar
&gt; User-Agent: curl/7.54.0
&amp;#x3C; HTTP/?? 200 OK
&amp;#x3C; Server: nginx/1.4.6 (Ubuntu)
&amp;#x3C; Date: Wed, 31 Jan 2018 22:22:22 GMT
&amp;#x3C; Last-Modified: Sat, 20 Jan 2018 13:02:41 GMT
&amp;#x3C; Content-Type: text/html; charset=UTF-8
&amp;#x3C; Connection: close
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La versión de HTTP que probablemente esté utilizando el servidor es HTTP/1.1, como se indica en la línea de respuesta &lt;code&gt;&amp;#x3C; HTTP/1.1 200 OK&lt;/code&gt;. HTTP/1.1 es una versión común que soporta características como la conexión persistente y el host virtual, lo cual es indicado por el uso de la cabecera &lt;code&gt;Host&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;El método que se está utilizando es &lt;code&gt;HEAD&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Este método es utilizado para recuperar las cabeceras que un &lt;code&gt;GET&lt;/code&gt; habría obtenido, pero sin el cuerpo del mensaje, es decir, no retorna el recurso completo, solo los metadatos del recurso. Es útil para obtener información sobre el recurso sin descargar todo el contenido.&lt;/p&gt;
&lt;p&gt;El recurso solicitado es &lt;code&gt;/metodos/&lt;/code&gt; en el host &lt;code&gt;www.redes.unlp.edu.ar&lt;/code&gt;. Esta es una URI que probablemente apunta a un directorio o sección específica en el servidor web de &lt;code&gt;redes.unlp.edu.ar&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Sí, el método funcionó correctamente. Esto se evidencia por el código de estado &lt;code&gt;200 OK&lt;/code&gt; en la respuesta del servidor, que indica que la solicitud fue exitosa y que el servidor pudo responder adecuadamente a la solicitud &lt;code&gt;HEAD&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Si la solicitud hubiera llevado un encabezado que diga: If-Modified-Since: Sat, 20 Jan 2018 13:02:41 GMT&lt;/p&gt;
&lt;p&gt;Si la solicitud incluyera el encabezado &lt;code&gt;If-Modified-Since: Sat, 20 Jan 2018 13:02:41 GMT&lt;/code&gt;, la respuesta del servidor web habría dependido de si el recurso fue modificado después de esa fecha y hora:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si el recurso no fue modificado después de &lt;code&gt;Sat, 20 Jan 2018 13:02:41 GMT&lt;/code&gt;, el servidor habría respondido con un código &lt;code&gt;304 Not Modified&lt;/code&gt;. Esto indica que no hay necesidad de retransmitir el recurso porque la copia que el cliente tiene en caché todavía es válida.&lt;/li&gt;
&lt;li&gt;Si el recurso fue modificado después de esa fecha y hora, el servidor habría respondido con &lt;code&gt;200 OK&lt;/code&gt; y habría enviado los metadatos actualizados (o el contenido completo si se hubiera utilizado &lt;code&gt;GET&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En el caso de recibir un &lt;code&gt;304 Not Modified&lt;/code&gt;, el navegador habría utilizado la versión en caché del recurso, ahorrando ancho de banda y mejorando la velocidad de carga al no tener que descargar nuevamente el recurso completo.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Cuestionario&lt;/h2&gt;
&lt;h3&gt;Pregunta 1&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Indicar de forma breve la diferencia entre el método GET y el PUT&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El get es para solicitar datos de un recurso (una url por ejemplo)&lt;/li&gt;
&lt;li&gt;Put se usa para enviar datos al servido&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Pregunta 2&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Indicar cuales características mejoran el rendimiento de HTTP&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Seleccione una o más de una:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;a)&lt;/code&gt; Uso de SSL&lt;/li&gt;
&lt;li&gt;&lt;code&gt;b)&lt;/code&gt; Compresión de headers ✔️&lt;/li&gt;
&lt;li&gt;&lt;code&gt;c)&lt;/code&gt; Pipelining ✔️&lt;/li&gt;
&lt;li&gt;&lt;code&gt;d)&lt;/code&gt; Conexiones persistentes ✔️&lt;/li&gt;
&lt;li&gt;&lt;code&gt;e)&lt;/code&gt; Binary Framing ✔️&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Las respuestas correctas son: Pipelining, Conexiones persistentes, Compresión de headers, Binary Framing&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Pregunta 3&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;En HTTP 1.0 no se pueden usar conexiones persistentes&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Seleccione una:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Verdadero&lt;/li&gt;
&lt;li&gt;Falso ✔️&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Pregunta 4&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Los códigos HTTP 3XX están relacionados con re direcciones&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Seleccione una:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Verdadero ✔️&lt;/li&gt;
&lt;li&gt;Falso&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Pregunta 5&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;HTTP no mantiene estados, por más que tenga conexiones persistentes&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Seleccione una:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Verdadero ✔️&lt;/li&gt;
&lt;li&gt;Falso&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Curl&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#descarga-el-recurso-de-la-url&quot;&gt;curl -O www.redes.unlp.edu.ar/restringido/index.php&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#descargamos-la-pagina-y-le-asignamos-el-nombre-filehtml&quot;&gt;curl -o file.html  www.redes.unlp.edu.ar/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#realiza-una-solicitud-http-head&quot;&gt;curl -I  www.redes.unlp.edu.ar/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#a%C3%B1ade-un-encabezado-adicional-de-autentificaci%C3%B3n&quot;&gt;curl -H &quot;Authorization: Basic cmVkZXM6UllD&quot; www.redes.unlp.edu.ar/restringido/index.php&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sigue-redireccionamientos-http&quot;&gt;curl -I -L http://unlp.edu.ar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#para-autenticaci%C3%B3n-b%C3%A1sica-http&quot;&gt;curl -u redes:RYC www.redes.unlp.edu.ar/restringido/index.php&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#post-usando-el-curl&quot;&gt;curl -X POST http://www.redes.unlp.edu.ar/http/metodos-lectura-valores.php&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#para-obtener-solo-los-encabezados-head-request-de-una-respuesta-de-manera-detallada-verbose&quot;&gt;curl -v -I http://www.redes.unlp.edu.ar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#modo-silencioso&quot;&gt;curl -s http://www.redes.unlp.edu.ar1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Descarga el Recurso de la URL&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -O www.redes.unlp.edu.ar/restringido/index.php
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/33dd8558-6d5e-4b71-a9ba-58d7233a875e&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Descargamos La Pagina y le asignamos el nombre &lt;code&gt;file.html&lt;/code&gt;&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -o file.html  www.redes.unlp.edu.ar/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/12d69b85-69b5-49ab-867d-1795edfe19ee&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Realiza una solicitud HTTP HEAD&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -I  www.redes.unlp.edu.ar/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/dcddfe6d-cb88-49af-aec7-3310121f6cf0&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Añade un encabezado adicional de autentificación&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -H &quot;Authorization: Basic cmVkZXM6UllD&quot; www.redes.unlp.edu.ar/restringido/index.php
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;User-Agent: Mozilla/5.0&lt;/code&gt; Modifica el agente de usuario para simular solicitudes desde diferentes navegadores o dispositivos.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Cache-Control: no-cache&lt;/code&gt; Puedes controlar o probar cómo una página web responde a diferentes directivas de caché.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Accept: application/json&lt;/code&gt;Especificar qué tipos de contenido estás dispuesto a recibir. Por ejemplo, solicitar específicamente contenido en formato JSON.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Accept-Language: es&lt;/code&gt;Solicitar una página en un idioma específico.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Cookie: name=value&lt;/code&gt;Enviar cookies específicas en la solicitud, lo cual puede ser necesario para acceder a contenido que requiere de sesión o preferencias de usuario.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Referer: http://www.otroejemplo.com&lt;/code&gt;Simular el origen de una solicitud mediante el encabezado Referer. Esto puede ser útil para pruebas o para acceder a recursos que requieren un referer específico.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Accept-Encoding: gzip, deflate&lt;/code&gt;Indicar al servidor que puedes recibir contenido codificado (por ejemplo, comprimido con gzip), lo cual puede mejorar la eficiencia de la transferencia de datos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/3c92adbe-ebb9-44f0-8b53-8aa3ae20ee8e&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Sigue redireccionamientos HTTP.&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;curl&lt;/code&gt; no sigue redireccionamientos por defecto.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -I -L http://unlp.edu.ar
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/2698e7ba-cbec-4cd4-9da7-5c1e8ac172d9&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Para autenticación básica HTTP.&lt;/h4&gt;
&lt;p&gt;usuario:contraseña: &lt;code&gt;redes:RYC&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -u redes:RYC www.redes.unlp.edu.ar/restringido/index.php
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/de6534e4-8ece-4d5d-ad27-e8598bd8930e&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h4&gt;Post usando el curl&lt;/h4&gt;
&lt;p&gt;Mira, antes de poder hacer un post (por lo que tengo entendido) necesitas mirar el formulario y ver que nombre tienen los campos del mismo para poder insertar los datos.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl http://www.redes.unlp.edu.ar/http/metodo-post.html
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Si te pinta se lo podes pasar a chat-gpt el resultado y seguro te devuelve un comando como el siguiente&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -X POST http://www.redes.unlp.edu.ar/http/metodos-lectura-valores.php \
-d &quot;form_nombre=Juan&quot; \
-d &quot;form_apellido=Perez&quot; \
-d &quot;form_mail=juan.perez@email.com&quot; \
-d &quot;form_sexo=sexo_masc&quot; \
-d &quot;form_pass=contraseña123&quot; \
-d &quot;form_confirma_mail=on&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;La opción &lt;code&gt;-d&lt;/code&gt; se usa para enviar datos. Si tienes múltiples campos, puedes repetir &lt;code&gt;-d&lt;/code&gt; para cada par clave-valor.&lt;/li&gt;
&lt;li&gt;Para campos de texto (&lt;code&gt;input type=&quot;text&quot;&lt;/code&gt;), simplemente envía el texto que deseas ingresar.&lt;/li&gt;
&lt;li&gt;Para botones de radio (&lt;code&gt;input type=&quot;radio&quot;&lt;/code&gt;), envía el valor del botón que deseas que esté seleccionado.&lt;/li&gt;
&lt;li&gt;Para checkboxes (&lt;code&gt;input type=&quot;checkbox&quot;&lt;/code&gt;), solo necesitas incluir el campo si deseas que esté marcado, generalmente asignándole el valor &lt;code&gt;on&lt;/code&gt;. Si no lo incluyes, es como si no estuviera marcado.&lt;/li&gt;
&lt;li&gt;La contraseña debe ser enviada como texto plano en este tipo de solicitud, lo cual puede ser un riesgo de seguridad si la conexión no está cifrada. Asegúrate de que estás usando HTTPS para proteger la información sensible.&lt;/li&gt;
&lt;li&gt;Este comando asume que todos los campos son necesarios. Si alguno es opcional, puedes omitirlo según lo que requiera el formulario.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/6cf3b5eb-2cbe-4e52-8ccd-c1ae7bca44c4&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Una vez que lo realizamos lo podemos chequear de la siguiente forma:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -o file2.html -X POST http://www.redes.unlp.edu.ar/http/metodos-lectura-valores.php \
-d &quot;form_nombre=Juan&quot; \
-d &quot;form_apellido=Perez&quot; \
-d &quot;form_mail=juan.perez@email.com&quot; \
-d &quot;form_sexo=sexo_masc&quot; \
-d &quot;form_pass=contraseña123&quot; \
-d &quot;form_confirma_mail=on&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/bd7a61f9-cf46-4b4e-bd07-68ac1761185d&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/15a4c967-beb1-4ffc-926a-3dd681e1ddc9&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h4&gt;Para obtener solo los encabezados (HEAD request) de una respuesta de manera detallada (verbose)&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -v -I http://www.redes.unlp.edu.ar
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Este comando es útil para inspeccionar encabezados de respuesta como &lt;code&gt;Content-Type&lt;/code&gt;, &lt;code&gt;Content-Length&lt;/code&gt;, Server, Last-Modified y cualquier cookie o política de seguridad aplicada.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/a9d5c9ce-2736-47b7-93e5-d1256016eadc&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;El comando &lt;code&gt;curl -v -I http://www.redes.unlp.edu.ar&lt;/code&gt; que ejecutaste realiza una solicitud HTTP &lt;code&gt;HEAD&lt;/code&gt; a la URL especificada y muestra una salida detallada (verbose) del proceso. Aquí te explico cada parte de la salida:&lt;/p&gt;
&lt;h3&gt;Inicio de la Conexión&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;Trying 172.28.0.50:80...&lt;/code&gt;&lt;/strong&gt;: &lt;code&gt;curl&lt;/code&gt; intenta establecer una conexión TCP al servidor en la dirección IP &lt;code&gt;172.28.0.50&lt;/code&gt; en el puerto &lt;code&gt;80&lt;/code&gt;, que es el puerto estándar para el protocolo HTTP.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;Connected to www.redes.unlp.edu.ar (172.28.0.50) port 80 (#0)&lt;/code&gt;&lt;/strong&gt;: La conexión TCP ha sido establecida exitosamente al servidor en la dirección IP y puerto especificados.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Envío de la Solicitud HEAD&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;HEAD / HTTP/1.1&lt;/code&gt;&lt;/strong&gt;: &lt;code&gt;curl&lt;/code&gt; envía una solicitud &lt;code&gt;HEAD&lt;/code&gt; al servidor. Una solicitud &lt;code&gt;HEAD&lt;/code&gt; es similar a &lt;code&gt;GET&lt;/code&gt;, pero el servidor devuelve solo los encabezados y no el cuerpo del documento. Esto es útil para obtener metadatos sin descargar todo el contenido.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;Host: www.redes.unlp.edu.ar&lt;/code&gt;&lt;/strong&gt;: Especifica el host al que se está haciendo la solicitud. Es necesario para servidores que alojan múltiples dominios (hosting virtual).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;User-Agent: curl/7.74.0&lt;/code&gt;&lt;/strong&gt;: Identifica el agente del usuario que realiza la solicitud. En este caso, es &lt;code&gt;curl&lt;/code&gt; con su versión.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;Accept: */*&lt;/code&gt;&lt;/strong&gt;: Indica que el cliente aceptará cualquier tipo de contenido como respuesta.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Respuesta del Servidor&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;HTTP/1.1 200 OK&lt;/code&gt;&lt;/strong&gt;: El servidor responde con un código de estado &lt;code&gt;200&lt;/code&gt;, lo que indica que la solicitud ha sido procesada con éxito.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;Date: Sun, 31 Mar 2024 17:07:45 GMT&lt;/code&gt;&lt;/strong&gt;: La fecha y hora en que la respuesta fue enviada.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;Server: Apache/2.4.56 (Unix)&lt;/code&gt;&lt;/strong&gt;: Información sobre el software del servidor que está manejando la solicitud.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;Last-Modified: Sun, 19 Mar 2023 19:04:46 GMT&lt;/code&gt;&lt;/strong&gt;: La última vez que el recurso solicitado fue modificado.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;ETag: &quot;1322-5f7457bd64f80&quot;&lt;/code&gt;&lt;/strong&gt;: Un identificador único asignado al contenido actual del recurso, que puede ser utilizado para futuras solicitudes condicionales (cache validation).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;Accept-Ranges: bytes&lt;/code&gt;&lt;/strong&gt;: Indica que el servidor acepta solicitudes de rangos de bytes, lo cual es útil para reanudar descargas interrumpidas o para descargar partes de un contenido.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;Content-Length: 4898&lt;/code&gt;&lt;/strong&gt;: El tamaño en bytes del cuerpo del documento que habría sido enviado en una solicitud &lt;code&gt;GET&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;Content-Type: text/html&lt;/code&gt;&lt;/strong&gt;: El tipo de contenido que habría sido devuelto, en este caso &lt;code&gt;text/html&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finalización de la Conexión&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;* Connection #0 to host www.redes.unlp.edu.ar left intact&lt;/code&gt;&lt;/strong&gt;: Indica que la conexión con el servidor se ha dejado intacta después de la respuesta. En el caso de las solicitudes &lt;code&gt;HEAD&lt;/code&gt;, como no hay cuerpo de respuesta, la conexión se puede reutilizar para futuras solicitudes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este desglose te muestra cómo &lt;code&gt;curl&lt;/code&gt; establece una conexión, envía una solicitud, recibe y muestra la respuesta del servidor, proporcionando una visión detallada del intercambio de datos entre el cliente y el servidor web.&lt;/p&gt;
&lt;hr&gt;
&lt;h4&gt;Modo Silencioso&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -s http://www.redes.unlp.edu.ar1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/5a2bb50e-f029-4a22-94f1-b5302e51a04a&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;El parámetro &lt;code&gt;-s&lt;/code&gt; en &lt;code&gt;curl&lt;/code&gt; se utiliza para activar el modo &quot;silencioso&quot; o &quot;silencio&quot;. Cuando se utiliza este parámetro, &lt;code&gt;curl&lt;/code&gt; no muestra el indicador de progreso ni los errores que normalmente se imprimirían en la terminal durante la ejecución del comando. Esto hace que &lt;code&gt;-s&lt;/code&gt; sea especialmente útil en scripts o cuando deseas capturar la salida de &lt;code&gt;curl&lt;/code&gt; sin incluir información adicional que normalmente se muestra.&lt;/p&gt;
&lt;p&gt;Aquí tienes un ejemplo básico de cómo se vería un comando &lt;code&gt;curl&lt;/code&gt; sin el parámetro &lt;code&gt;-s&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl http://www.ejemplo.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Al ejecutar este comando, dependiendo de la configuración y el contexto, &lt;code&gt;curl&lt;/code&gt; podría mostrar el progreso de la descarga, lo cual incluiría información sobre la cantidad de datos transferidos y la velocidad de transferencia. Si hubiera algún problema con la solicitud, como una URL no válida o problemas de conexión, &lt;code&gt;curl&lt;/code&gt; también mostraría mensajes de error en la salida estándar.&lt;/p&gt;
&lt;p&gt;Ahora, veamos cómo se utilizaría el parámetro &lt;code&gt;-s&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -s http://www.ejemplo.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Al agregar &lt;code&gt;-s&lt;/code&gt;, &lt;code&gt;curl&lt;/code&gt; ejecuta la solicitud sin mostrar ningún mensaje de progreso o error. La única salida en la terminal será el contenido obtenido de &lt;code&gt;http://www.ejemplo.com&lt;/code&gt;, si la solicitud fue exitosa.&lt;/p&gt;
&lt;h3&gt;Usos adicionales y combinaciones&lt;/h3&gt;
&lt;p&gt;A menudo, el parámetro &lt;code&gt;-s&lt;/code&gt; se combina con otros para lograr comportamientos específicos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;-S&lt;/strong&gt; (&lt;code&gt;--show-error&lt;/code&gt;): Muestra el mensaje de error en caso de fallo, incluso en modo silencioso. Es útil cuando quieres un entorno silencioso pero aún necesitas capturar errores.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -s -S http://www.ejemplo.com
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;-o&lt;/strong&gt; (&lt;code&gt;--output&lt;/code&gt;): Especifica un archivo donde guardar la salida en lugar de imprimirla en la terminal.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -s -o ejemplo.html http://www.ejemplo.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Aquí, la combinación de &lt;code&gt;-s&lt;/code&gt; y &lt;code&gt;-o&lt;/code&gt; significa que &lt;code&gt;curl&lt;/code&gt; no mostrará progreso ni errores (salvo que también uses &lt;code&gt;-S&lt;/code&gt;), y guardará el contenido de la página en &lt;code&gt;ejemplo.html&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El modo silencioso es especialmente valioso en scripts donde solo te interesa el resultado de la operación &lt;code&gt;curl&lt;/code&gt; y deseas evitar salidas innecesarias que podrían obstruir el flujo normal o el procesamiento de la salida. También es útil cuando se integra &lt;code&gt;curl&lt;/code&gt; en aplicaciones que invocan comandos externos y donde el manejo de la salida se realiza a través de la captura y análisis de la misma por la aplicación.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio de Parcial&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -X ?? www.redes.unlp.edu.ar/??
&gt; HEAD /metodos/ HTTP/??
&gt; Host: www.redes.unlp.edu.ar
&gt; User-Agent: curl/7.54.0
&amp;#x3C; HTTP/?? 200 OK
&amp;#x3C; Server: nginx/1.4.6 (Ubuntu)
&amp;#x3C; Date: Wed, 31 Jan 2018 22:22:22 GMT
&amp;#x3C; Last-Modified: Sat, 20 Jan 2018 13:02:41 GMT
&amp;#x3C; Content-Type: text/html; charset=UTF-8
&amp;#x3C; Connection: close
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;a. ¿Qué versión de HTTP podría estar utilizando el servidor?&lt;/h3&gt;
&lt;p&gt;La versión de HTTP que el servidor está utilizando no se especifica directamente en el fragmento que proporcionaste, pero dado que la respuesta incluye un código de estado HTTP sin una versión específica en la línea de estado (&lt;code&gt;&amp;#x3C; HTTP/?? 200 OK&lt;/code&gt;), podemos inferir que se omitió por simplicidad en el ejemplo. Sin embargo, podemos hacer una suposición educada de que se trata de HTTP/1.1, ya que es la versión más comúnmente utilizada que soporta encabezados como &quot;Host&quot; y un comportamiento de conexión como el descrito. HTTP/2 cambiaría significativamente la forma en que se formatea la respuesta (es decir, es binario), y la solicitud no parece estar utilizando la sintaxis específica de HTTP/2.&lt;/p&gt;
&lt;h3&gt;b. ¿Qué método está utilizando? Dicho método, ¿retorna el recurso completo solicitado?&lt;/h3&gt;
&lt;p&gt;El método que se está utilizando es &lt;code&gt;HEAD&lt;/code&gt;, como se indica en la primera línea de la solicitud (&lt;code&gt;HEAD /metodos/ HTTP/??&lt;/code&gt;). El método &lt;code&gt;HEAD&lt;/code&gt; solicita los encabezados de respuesta que se enviarían para una solicitud &lt;code&gt;GET&lt;/code&gt; al mismo recurso, pero sin incluir el cuerpo del recurso en la respuesta. Por lo tanto, no, el método &lt;code&gt;HEAD&lt;/code&gt; no retorna el recurso completo solicitado, solo los metadatos asociados con el recurso.&lt;/p&gt;
&lt;h3&gt;c. ¿Cuál es el recurso solicitado?&lt;/h3&gt;
&lt;p&gt;El recurso solicitado parece ser &lt;code&gt;/metodos/&lt;/code&gt;, como se indica en la línea de solicitud. Hay una pequeña confusión en la forma en que se formatea la solicitud (&lt;code&gt;/metodos/ HTTP/??&lt;/code&gt;), lo cual sugiere un error tipográfico o una omisión intencional de la versión de HTTP. Normalmente, se esperaría algo como &lt;code&gt;HEAD /metodos/ HTTP/1.1&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;d. ¿El método funcionó correctamente?&lt;/h3&gt;
&lt;p&gt;Sí, el método funcionó correctamente. La respuesta del servidor indica un código de estado &lt;code&gt;200 OK&lt;/code&gt;, lo que significa que la solicitud se procesó con éxito y los metadatos del recurso están siendo devueltos en los encabezados.&lt;/p&gt;
&lt;h3&gt;e. Si la solicitud hubiera llevado un encabezado que diga: If-Modified-Since: Sat, 20 Jan 2018 13:02:41 GMT ¿Cuál habría sido la respuesta del servidor web? ¿Qué habría hecho el navegador en este caso?&lt;/h3&gt;
&lt;p&gt;Si la solicitud incluyera el encabezado &lt;code&gt;If-Modified-Since: Sat, 20 Jan 2018 13:02:41 GMT&lt;/code&gt;, y el recurso no se ha modificado desde esa fecha y hora (lo cual es cierto basado en el encabezado &lt;code&gt;Last-Modified&lt;/code&gt; de la respuesta), el servidor habría respondido con un código de estado &lt;code&gt;304 Not Modified&lt;/code&gt;. Esto indica al cliente que la versión del recurso que tiene en caché sigue siendo válida y puede ser reutilizada.&lt;/p&gt;
&lt;p&gt;En este caso, el navegador no descargaría el recurso nuevamente; en su lugar, utilizaría la versión que ya tiene en su caché, mejorando la eficiencia al reducir la necesidad de transferir datos innecesariamente.&lt;/p&gt;
&lt;h2&gt;Wireshark&lt;/h2&gt;
&lt;p&gt;Nos vamos a basar en un ejercicio para redes que se me complico bastante&lt;/p&gt;
&lt;h1&gt;No te asustes, es solo para ver la ip de las interfaces&lt;/h1&gt;
&lt;p&gt;Hubo una pregunta que me solicitaba buscar el trafico de la interfaz y solo me habian dado la &lt;code&gt;IP&lt;/code&gt; por eso este quilombo&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/5e11bc6a-83be-4d29-a956-1d8ca6428699&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;lo (Loopback Interface)&lt;/strong&gt;: Permite a la máquina comunicarse consigo misma. Es utilizado principalmente para pruebas y desarrollo.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;enp0s3 (Ethernet Interface)&lt;/strong&gt;: Esta es tu interfaz de red principal conectada a la red externa, probablemente a través de Ethernet o una conexión similar.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;br-c8ee5a5c812e (Network Bridge)&lt;/strong&gt;: Utilizado para conectar dos redes, común en ambientes de virtualización como Docker, permitiendo que los contenedores se comuniquen entre sí y con el host.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;docker0&lt;/strong&gt;: Un puente de red creado por Docker. Normalmente se utiliza para la comunicación de red entre los contenedores Docker y el host del sistema.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;vethXXXXX (Virtual Ethernet Devices)&lt;/strong&gt;: Estos son dispositivos de red virtuales utilizados por Docker para conectar contenedores individuales al puente de Docker o a otros dispositivos de red.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Cada entrada muestra el estado de la interfaz, configuraciones como MTU (Maximum Transmission Unit), y direcciones IP asignadas. Las interfaces &lt;code&gt;veth&lt;/code&gt; están asociadas con entornos de red específicos, típicamente contenedores Docker, lo que permite su aislamiento y gestión de red independiente.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/f4750ec0-84ee-4110-bdbe-ac801f867c1a&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;El comando &lt;code&gt;netstat -i&lt;/code&gt; muestra la tabla de interfaces de red del kernel. Para cada interfaz, indica:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MTU (Maximum Transmission Unit)&lt;/strong&gt;: El tamaño máximo de paquete que la interfaz puede manejar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RX-OK&lt;/strong&gt;: Número de paquetes recibidos correctamente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RX-ERR&lt;/strong&gt;: Número de paquetes recibidos con errores.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RX-DRP&lt;/strong&gt;: Número de paquetes recibidos descartados.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RX-OVR&lt;/strong&gt;: Número de errores de desbordamiento en la recepción.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TX-OK&lt;/strong&gt;: Número de paquetes enviados correctamente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TX-ERR&lt;/strong&gt;: Número de paquetes enviados con errores.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TX-DRP&lt;/strong&gt;: Número de paquetes enviados descartados.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TX-OVR&lt;/strong&gt;: Número de errores de desbordamiento en el envío.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flg (Flags)&lt;/strong&gt;: Indica el estado de la interfaz (B: broadcast, M: multicast, R: running, U: up, L: loopback).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/d142d210-f937-4b57-894a-1dbbb88a8e3a&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Todo lo anterior fue para poder entrar a wireshark (saber la interfaz de la &lt;code&gt;IP&lt;/code&gt;)&lt;/h2&gt;
&lt;p&gt;Tenemos que abrir &lt;code&gt;Wireshark&lt;/code&gt; usando sudo, sino, no captura el trafico. Y en otra terminal usamos curl sobre algo.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;IMPORTANTE: Para que te funcione tenes que estar ejecutando curls constantemente o cuando desees ver la respuesta en otra terminal.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Por ejemplo&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl https://www.google.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;este usamos en la catedra&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl www.redes.unlp.edu.ar
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/44ff28a2-5ef4-4466-ad13-397fd0306b66&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -I www.redes.unlp.edu.ar
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/3ce5cf8e-66ae-4286-91d1-63e05cac3f54&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/38dc2ea3-8c37-41b1-85ab-c7750c939ae9&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;La captura de pantalla muestra una sesión de Wireshark, una herramienta utilizada para analizar el tráfico de red. En ella, podemos ver varios paquetes de datos intercambiados entre dispositivos en la red:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Paquetes DNS (Domain Name System)&lt;/strong&gt;: Estos paquetes se utilizan para la resolución de nombres de dominio. Por ejemplo, convertir &quot;www.redes.unlp.edu.ar&quot; en una dirección IP.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Paquetes TCP (Transmission Control Protocol)&lt;/strong&gt;: Muestran la comunicación entre dos dispositivos, incluidos los detalles de la conexión como sincronización (SYN), acuse de recibo (ACK), y finalización (FIN).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Paquetes HTTP (Hypertext Transfer Protocol)&lt;/strong&gt;: Son solicitudes y respuestas de datos web, como solicitudes de páginas web (indicado por &lt;code&gt;GET&lt;/code&gt;) y respuestas del servidor (&lt;code&gt;HTTP/1.1 200 OK&lt;/code&gt; indica una respuesta exitosa).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Paquetes ARP (Address Resolution Protocol)&lt;/strong&gt;: Se utilizan para mapear una dirección IP a una dirección MAC en la red local.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cada fila representa un paquete diferente, y las columnas proporcionan información como el tiempo, las direcciones de origen y destino, el protocolo utilizado y una breve descripción del contenido del paquete.&lt;/p&gt;
&lt;h3&gt;Filtramos por http&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/8960fa1c-bf43-46c9-8101-511e7812d75e&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Podemos ver el resultado haciendo click derecho y dandole a follow &lt;code&gt;TCP stream&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/7dccc896-8d08-4121-b97c-0714641ddac6&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Si uso el metodo get sobre el formulario de una pagina puedo ver la respuesta&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/a8c005f2-af85-43a5-badf-3ff0fd808110&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/474bc1bc-fe61-4d80-880f-ab4ae6399af0&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -X POST -d &quot;form_nombre=Fabian&amp;#x26;form_apellido=Martinez&quot; www.redes.unlp.edu.ar
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/894fa8dd-81c7-48ca-a357-bf7b73d984d5&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Creo que la cosa esa no funciono, probamos con este&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -X POST -d &quot;Nombre=Juan&amp;#x26;Apellido=Perez&amp;#x26;Email=juan.perez@example.com&amp;#x26;Sexo=Masculino&amp;#x26;Contrasena=miContrasena&amp;#x26;Recibir=on&quot; http://www.redes.unlp.edu.ar/http/metodo-post.html
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/eaf8519d-85de-47f9-8325-0e1b872597ce&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Tengo que preguntar porque creo que esta mal&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/6428f7f8-42ac-4364-a5bf-e2fd1d945df4&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.CZDhH03a.jpg"/><enclosure url="/_astro/thumbnail.CZDhH03a.jpg"/></item><item><title>Practica 3 Redes | DNS</title><link>https://fabianmartinezrincon.com/blog/practica-3-redes</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/practica-3-redes</guid><description>Practica 3 de Redes y Comunicaciones</description><pubDate>Tue, 07 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Introducción&lt;/h2&gt;
&lt;p&gt;El Sistema de Nombres de Dominio (DNS) traduce nombres de dominio amigables para el humano (como &quot;www.example.com&quot;) a direcciones IP numéricas (como &quot;192.0.2.1&quot;) que las computadoras utilizan para identificar entre sí en la red.&lt;/p&gt;
&lt;p&gt;El objetivo del DNS es permitir a las personas acceder a sitios web utilizando nombres de dominio fáciles de recordar en lugar de las complicadas direcciones IP, facilitando así la navegación en internet. Funciona a través de una red distribuida de servidores que resuelven nombres de dominio a direcciones IP.&lt;/p&gt;
&lt;p&gt;Un servidor raíz (root server) en el contexto del Sistema de Nombres de Dominio (DNS) es uno de los servidores DNS clave que contienen las direcciones de los servidores de nombres para todos los dominios de nivel superior (TLDs) como &lt;code&gt;.com&lt;/code&gt;, &lt;code&gt;.org&lt;/code&gt;, &lt;code&gt;.net&lt;/code&gt;, &lt;code&gt;.gov&lt;/code&gt;, entre otros. Los servidores raíz son una parte crítica de la infraestructura de Internet porque son la primera parada en la resolución de nombres de dominio cuando la información no está ya en la caché del servidor DNS local.&lt;/p&gt;
&lt;p&gt;Existen 13 servidores raíz, identificados por las letras A a M. Cada uno de estos servidores raíz opera en múltiples ubicaciones geográficas utilizando tecnología de Anycast para proporcionar estabilidad y redundancia.&lt;/p&gt;
&lt;h3&gt;Cómo Ver un Ejemplo de Servidor Raíz Usando Comandos&lt;/h3&gt;
&lt;p&gt;Puedes utilizar el comando &lt;code&gt;dig&lt;/code&gt; para consultar los servidores raíz y ver cómo responden con la lista de servidores de nombres para los TLDs. Aquí te muestro cómo hacerlo:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Listar todos los servidores raíz DNS&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dig NS .
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Este comando te mostrará la lista de los servidores de nombres raíz. La respuesta de &lt;code&gt;dig&lt;/code&gt; incluirá una sección &lt;code&gt;ANSWER&lt;/code&gt; que lista los nombres de los servidores raíz y sus direcciones IP correspondientes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Seleccionar un servidor raíz y hacer una consulta directa&lt;/strong&gt;:
Para ilustrar, vamos a seleccionar el servidor raíz &lt;code&gt;a.root-servers.net&lt;/code&gt; para obtener más información sobre el dominio TLD &lt;code&gt;.com&lt;/code&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dig @a.root-servers.net com NS
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Este comando consulta directamente al servidor raíz &lt;code&gt;A&lt;/code&gt; para los servidores de nombres que administran el TLD &lt;code&gt;.com&lt;/code&gt;. La opción &lt;code&gt;@&lt;/code&gt; en &lt;code&gt;dig&lt;/code&gt; se usa para especificar el servidor DNS que quieres consultar directamente.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Ejemplo Práctico en el Terminal&lt;/h3&gt;
&lt;p&gt;Supongamos que ejecutas los siguientes comandos en tu terminal:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dig NS .
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Este comando podría devolver algo como:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;; &amp;#x3C;&amp;#x3C;&gt;&gt; DiG 9.10.6 &amp;#x3C;&amp;#x3C;&gt;&gt; NS .
;; global options: +cmd
.			518400	IN	NS	a.root-servers.net.
.			518400	IN	NS	b.root-servers.net.
.			518400	IN	NS	c.root-servers.net.
...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Luego, al consultar directamente al servidor raíz &lt;code&gt;A&lt;/code&gt; para el TLD &lt;code&gt;.com&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dig @a.root-servers.net com NS
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Podrías recibir una respuesta como:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;; &amp;#x3C;&amp;#x3C;&gt;&gt; DiG 9.10.6 &amp;#x3C;&amp;#x3C;&gt;&gt; @a.root-servers.net com NS
; (1 server found)
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&amp;#x3C;&amp;#x3C;- opcode: QUERY, status: NOERROR, id: 43521
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 13, ADDITIONAL: 14
;; QUESTION SECTION:
;com.				IN	NS

;; AUTHORITY SECTION:
com.			172800	IN	NS	a.gtld-servers.net.
com.			172800	IN	NS	b.gtld-servers.net.
com.			172800	IN	NS	c.gtld-servers.net.
...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Este ejemplo muestra cómo los servidores raíz dirigen las consultas hacia los servidores de nombres específicos para los TLDs, facilitando así la resolución de nombres en toda la red global de Internet.&lt;/p&gt;
&lt;p&gt;Un &lt;strong&gt;Generic Top-Level Domain (gTLD)&lt;/strong&gt; es una categoría de dominios de nivel superior en el Sistema de Nombres de Dominio (DNS) de Internet que no está asociada con un país específico. Los gTLDs son uno de los tipos de dominios más reconocidos y utilizados en Internet. Están destinados a usos generales por comunidades de usuarios, generalmente organizados por tema o tipo de entidad, a diferencia de los ccTLDs (Country Code Top-Level Domains) que están específicamente asociados a países o territorios.&lt;/p&gt;
&lt;h3&gt;Características de los gTLDs&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Generalidad&lt;/strong&gt;: Como su nombre lo indica, los gTLDs son genéricos, lo que significa que están destinados a un amplio uso por parte de la población de Internet sin restricciones específicas basadas en la geografía.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Diversidad&lt;/strong&gt;: Los gTLDs abarcan una amplia gama de nombres que reflejan diferentes tipos de organizaciones, actividades comerciales, aplicaciones y grupos de usuarios. Incluyen dominios como &lt;code&gt;.com&lt;/code&gt;, &lt;code&gt;.org&lt;/code&gt;, &lt;code&gt;.net&lt;/code&gt;, &lt;code&gt;.info&lt;/code&gt;, &lt;code&gt;.biz&lt;/code&gt;, y muchos otros.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Administración&lt;/strong&gt;: Los gTLDs son supervisados por la ICANN (Internet Corporation for Assigned Names and Numbers), que es responsable de la gestión del espacio de nombres DNS, la asignación de espacio de direcciones IP, la asignación de identificadores de protocolo, y la gestión del sistema de servidores raíz.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Ejemplos de gTLDs&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;.com&lt;/strong&gt;: Inicialmente destinado para entidades comerciales, es ahora el gTLD más ampliamente utilizado y puede ser registrado por cualquier persona o entidad.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;.org&lt;/strong&gt;: Destinado originalmente para organizaciones que no encajaban en ninguna otra categoría (como las no comerciales y las sin fines de lucro), también es ampliamente utilizado por escuelas, comunidades, proyectos, y grupos personales.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;.net&lt;/strong&gt;: Originalmente para organizaciones involucradas en tecnologías de redes, como proveedores de Internet y otras infraestructuras de red, aunque ahora está abierto a cualquier persona.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;.info&lt;/strong&gt;: Uno de los primeros gTLDs introducidos que estaba destinado para sitios de información, pero no tiene restricciones de uso.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;.biz&lt;/strong&gt;: Diseñado para uso comercial (negocios), como una alternativa a &lt;code&gt;.com&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Nuevos gTLDs&lt;/h3&gt;
&lt;p&gt;Con el programa de Nuevos gTLDs que la ICANN comenzó en 2012, se han introducido cientos de nuevos gTLDs para proporcionar mayor diversidad y opciones en el espacio de nombres de Internet. Estos incluyen dominios como &lt;code&gt;.photography&lt;/code&gt;, &lt;code&gt;.guru&lt;/code&gt;, &lt;code&gt;.club&lt;/code&gt;, y &lt;code&gt;.city&lt;/code&gt;, entre otros. Estos nuevos gTLDs permiten una mayor personalización y especificidad en los nombres de dominio, facilitando que las empresas y particulares elijan nombres que están más estrechamente alineados con sus actividades o intereses.&lt;/p&gt;
&lt;p&gt;En resumen, los gTLDs son una parte esencial de la estructura de DNS, proporcionando un marco para clasificar y organizar los nombres de dominio de Internet. Con la expansión de los gTLDs, el paisaje de Internet sigue evolucionando, ofreciendo más opciones y oportunidades para la personalización y la innovación en el espacio en línea.&lt;/p&gt;
&lt;p&gt;Una respuesta autoritativa en el contexto del Sistema de Nombres de Dominio (DNS) es una respuesta que proviene directamente de un servidor DNS que tiene autoridad sobre el dominio específico que está siendo consultado. Es decir, el servidor DNS que responde tiene datos directos y oficiales sobre los registros DNS del dominio, sin necesidad de referirse a otro servidor DNS para obtener esa información.&lt;/p&gt;
&lt;h3&gt;Características de una Respuesta Autoritativa&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Exactitud&lt;/strong&gt;: La respuesta proviene de un servidor que gestiona directamente los registros del dominio, lo que garantiza que la información es exacta y actualizada.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Directa&lt;/strong&gt;: No depende de la información almacenada en caché o proporcionada por servidores intermedios.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flag AA (Authoritative Answer)&lt;/strong&gt;: En los resultados de consultas DNS, la respuesta autoritativa está marcada con un flag AA (Authoritative Answer) que indica que la respuesta proviene de un servidor con autoridad sobre el dominio.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Ejemplo Práctico Usando &lt;code&gt;dig&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Para ilustrar una respuesta autoritativa, podemos usar el comando &lt;code&gt;dig&lt;/code&gt; para consultar un servidor de nombres específico que es autoritativo para un dominio. Vamos a tomar como ejemplo el dominio &quot;example.com&quot;, consultando directamente a uno de sus servidores DNS autoritativos:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Encontrar el servidor de nombres autoritativo&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;Primero, encontramos los servidores de nombres para el dominio &quot;example.com&quot;.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dig NS example.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Supongamos que esto devuelve &lt;code&gt;ns1.example.com&lt;/code&gt; como uno de los servidores de nombres autoritativos.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Consultar directamente al servidor autoritativo&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;Luego, hacemos una consulta directa a &lt;code&gt;ns1.example.com&lt;/code&gt; para obtener un registro específico (por ejemplo, un registro A para &quot;www.example.com&quot;):&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dig @ns1.example.com www.example.com A
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;En esta consulta, &lt;code&gt;@ns1.example.com&lt;/code&gt; especifica que queremos que &lt;code&gt;dig&lt;/code&gt; consulte directamente a ese servidor de nombres. La respuesta que recibamos tendrá el flag AA establecido, indicando que es una respuesta autoritativa.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Verificación del Flag Autoritativo&lt;/h3&gt;
&lt;p&gt;Cuando usas &lt;code&gt;dig&lt;/code&gt;, puedes verificar si una respuesta es autoritativa observando el campo de flags en la salida. Busca &lt;code&gt;aa&lt;/code&gt; en la línea de flags, lo cual está presente cuando la respuesta es autoritativa.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;En este ejemplo, &lt;code&gt;aa&lt;/code&gt; indica que la respuesta es autoritativa.&lt;/p&gt;
&lt;h3&gt;Importancia de las Respuestas Autoritativas&lt;/h3&gt;
&lt;p&gt;Las respuestas autoritativas son cruciales para la integridad y la confiabilidad del DNS. Aseguran que la información que recibe un usuario o un sistema sobre un dominio es precisa y proviene de una fuente fiable y controlada, lo cual es especialmente importante para operaciones críticas como la configuración de servicios en línea, seguridad y correo electrónico.&lt;/p&gt;
&lt;p&gt;En resumen, las respuestas autoritativas del DNS son fundamentales para el funcionamiento correcto y seguro de Internet, y herramientas como &lt;code&gt;dig&lt;/code&gt; te permiten verificar y entender cómo se resuelven estas consultas en la práctica.&lt;/p&gt;
&lt;p&gt;En el Sistema de Nombres de Dominio (DNS), las consultas pueden procesarse de dos formas principales: &lt;strong&gt;recursiva&lt;/strong&gt; e &lt;strong&gt;iterativa&lt;/strong&gt;. Estas dos modalidades difieren en cómo un servidor DNS maneja las solicitudes de resolución de nombres de dominio cuando no tiene la información requerida en su caché.&lt;/p&gt;
&lt;h3&gt;Consulta DNS Recursiva&lt;/h3&gt;
&lt;p&gt;En una consulta DNS recursiva, el cliente (generalmente el sistema operativo del dispositivo del usuario o el resolver de DNS del ISP) pide a un servidor DNS que resuelva un nombre de dominio y le devuelva la respuesta definitiva. El cliente espera que el servidor maneje completamente la resolución del nombre:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Responsabilidad Total&lt;/strong&gt;: Si el servidor DNS recursivo no tiene la información requerida ya en su caché, asume la responsabilidad de obtener esa información. No devuelve el control al cliente hasta que ha resuelto la dirección o determinado que no puede hacerlo.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Proceso de Resolución&lt;/strong&gt;: El servidor DNS recursivo consultará otros servidores DNS en nombre del cliente. Comenzará por los servidores raíz, seguirá con los servidores de nombres de dominios de nivel superior (TLDs), y continuará hasta llegar a los servidores DNS autoritativos para el dominio específico en cuestión.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ventajas&lt;/strong&gt;: Proporciona una experiencia simplificada al cliente, ya que solo requiere una solicitud y espera una respuesta, sin necesidad de realizar seguimientos adicionales.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Consulta DNS Iterativa&lt;/h3&gt;
&lt;p&gt;En una consulta DNS iterativa, el servidor DNS no resuelve completamente la solicitud por sí solo. En cambio, proporciona al cliente la mejor respuesta que tiene y, si es necesario, direcciones de otros servidores DNS que pueden saber más:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Responsabilidad Parcial&lt;/strong&gt;: Cuando un cliente hace una consulta iterativa a un servidor DNS y este servidor no tiene la respuesta en su caché, este responderá con la dirección de un servidor DNS que esté más cerca de la respuesta. El cliente es responsable de consultar al siguiente servidor recomendado.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Proceso de Resolución&lt;/strong&gt;: El servidor DNS proporciona referencias a otros servidores DNS (por ejemplo, un servidor raíz DNS dirá al cliente que consulte a un servidor DNS específico de un TLD). El cliente sigue consultando a cada servidor recomendado hasta que obtiene la respuesta final o agota las opciones.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ventajas&lt;/strong&gt;: Reduce la carga en cada servidor DNS individual, ya que cada servidor no tiene que completar la resolución completa por cuenta propia. Permite a los clientes controlar el proceso de resolución y gestionar el tiempo de espera y las respuestas fallidas de manera más directa.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Ejemplo Ilustrativo con Comandos&lt;/h3&gt;
&lt;p&gt;Si quisieras ver cómo funcionan estas consultas en la práctica, podrías usar herramientas como &lt;code&gt;dig&lt;/code&gt; en un sistema Linux o macOS, o &lt;code&gt;nslookup&lt;/code&gt; en Windows. Por ejemplo, con &lt;code&gt;dig&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Ejemplo de consulta recursiva (por defecto con dig)
dig www.example.com

# Ejemplo de consulta iterativa
dig +trace www.example.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;En el caso de &lt;code&gt;dig +trace&lt;/code&gt;, &lt;code&gt;dig&lt;/code&gt; realiza una simulación de una consulta iterativa mostrando cada paso del proceso, desde los servidores raíz hasta los servidores autoritativos para el dominio. Esto ilustra cómo un cliente podría manejar una consulta iterativa.&lt;/p&gt;
&lt;h3&gt;Conclusión&lt;/h3&gt;
&lt;p&gt;La elección entre consultas recursivas e iterativas depende de las necesidades de configuración del sistema, las preferencias de administración de red y los requisitos de desempeño y seguridad. Las consultas recursivas simplifican la resolución para los clientes, mientras que las iterativas ofrecen mayor control y potencialmente reducen la carga sobre los servidores DNS individuales.&lt;/p&gt;
&lt;h4&gt;PARA PARA, TODAVIA NO PROBAMOS LOS COMANDOS&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dig www.redes.unlp.edu.ar
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;; &amp;#x3C;&amp;#x3C;&gt;&gt; DiG 9.16.27-Debian &amp;#x3C;&amp;#x3C;&gt;&gt; www.redes.unlp.edu.ar
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&amp;#x3C;&amp;#x3C;- opcode: QUERY, status: NOERROR, id: 4692
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 2d4327c415909aa401000000661b3ae6a70f3f8d9d721ca0 (good)
;; QUESTION SECTION:
;www.redes.unlp.edu.ar.		IN	A

;; ANSWER SECTION:
www.redes.unlp.edu.ar.	300	IN	A	172.28.0.50

;; Query time: 4 msec
;; SERVER: 172.28.0.29#53(172.28.0.29)
;; WHEN: Sat Apr 13 23:09:42 -03 2024
;; MSG SIZE  rcvd: 94

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La salida del comando &lt;code&gt;dig&lt;/code&gt; que ejecutaste para la dirección &lt;code&gt;www.redes.unlp.edu.ar&lt;/code&gt; muestra varios componentes del proceso de resolución DNS y provee información detallada sobre la consulta. Aquí te explico cada parte de la salida para entender mejor lo que está sucediendo:&lt;/p&gt;
&lt;h4&gt;HEADER Section&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;opcode: QUERY&lt;/strong&gt;: Esto indica que el tipo de operación solicitada fue una consulta.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;status: NOERROR&lt;/strong&gt;: Indica que la consulta se completó sin errores.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;id: 4692&lt;/strong&gt;: Es un identificador único de la transacción DNS. Utilizado para emparejar respuestas con solicitudes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;flags&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;qr (Query Response)&lt;/strong&gt;: Indica que esta es una respuesta a una consulta.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;aa (Authoritative Answer)&lt;/strong&gt;: Significa que el servidor que respondió tiene autoridad sobre el dominio, ofreciendo una respuesta autoritativa.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;rd (Recursion Desired)&lt;/strong&gt;: Muestra que el cliente solicitó que el servidor realice una búsqueda recursiva.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ra (Recursion Available)&lt;/strong&gt;: Indica que el servidor puede hacer consultas recursivas.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;OPT PSEUDOSECTION&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;EDNS (Extension Mechanisms for DNS) version: 0&lt;/strong&gt;: Esto es una extensión de DNS que permite funcionalidades adicionales.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;udp: 1232&lt;/strong&gt;: El tamaño máximo del mensaje UDP que el servidor DNS puede manejar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;COOKIE&lt;/strong&gt;: Es una extensión de seguridad para autenticar y autorizar la transacción DNS.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;QUESTION SECTION&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;;www.redes.unlp.edu.ar.		IN	A&lt;/strong&gt;: Esto muestra la pregunta realizada, que busca el registro A (dirección IPv4) para &lt;code&gt;www.redes.unlp.edu.ar&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;ANSWER SECTION&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;www.redes.unlp.edu.ar.	300	IN	A	172.28.0.50&lt;/strong&gt;: Esta es la respuesta, mostrando que &lt;code&gt;www.redes.unlp.edu.ar&lt;/code&gt; está asociado con la dirección IP &lt;code&gt;172.28.0.50&lt;/code&gt;. El &lt;code&gt;300&lt;/code&gt; es el TTL (Time to Live), que indica en segundos cuánto tiempo puede ser cacheada esta respuesta antes de requerir una actualización.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Additional Information&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Query time: 4 msec&lt;/strong&gt;: Tiempo que tomó realizar la consulta, en este caso, 4 milisegundos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SERVER: 172.28.0.29#53(172.28.0.29)&lt;/strong&gt;: Dirección IP y puerto del servidor DNS que respondió a la consulta.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WHEN&lt;/strong&gt;: Fecha y hora en la que se realizó la consulta.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MSG SIZE rcvd: 94&lt;/strong&gt;: Tamaño del mensaje de respuesta recibido en bytes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Resumen&lt;/h3&gt;
&lt;p&gt;El comando &lt;code&gt;dig&lt;/code&gt; ejecutado realizó correctamente la consulta DNS para el dominio &lt;code&gt;www.redes.unlp.edu.ar&lt;/code&gt; y obtuvo una respuesta autoritativa indicando que la dirección IP asociada con este dominio es &lt;code&gt;172.28.0.50&lt;/code&gt;. La consulta fue resuelta rápidamente (en 4 milisegundos) y la respuesta incluye detalles de configuración EDNS y medidas de seguridad como cookies de DNS. Esto demuestra que el servidor DNS configurado está funcionando correctamente y puede resolver consultas para el dominio especificado de manera eficaz y segura.&lt;/p&gt;
&lt;h4&gt;NOS QUEDA EL ITERATIVO&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dig +trace www.redes.unlp.edu.ar
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;; &amp;#x3C;&amp;#x3C;&gt;&gt; DiG 9.16.27-Debian &amp;#x3C;&amp;#x3C;&gt;&gt; +trace www.redes.unlp.edu.ar
;; global options: +cmd
.			516425	IN	NS	m.root-servers.net.
.			516425	IN	NS	c.root-servers.net.
.			516425	IN	NS	i.root-servers.net.
.			516425	IN	NS	b.root-servers.net.
.			516425	IN	NS	d.root-servers.net.
.			516425	IN	NS	g.root-servers.net.
.			516425	IN	NS	a.root-servers.net.
.			516425	IN	NS	e.root-servers.net.
.			516425	IN	NS	h.root-servers.net.
.			516425	IN	NS	k.root-servers.net.
.			516425	IN	NS	l.root-servers.net.
.			516425	IN	NS	f.root-servers.net.
.			516425	IN	NS	j.root-servers.net.
.			516425	IN	RRSIG	NS 8 0 518400 20240426170000 20240413160000 5613 . b76jdsKNW1pvIKErb2EuvBW2DmpfBhRXB5PPKV1kwvHbgkib2JTPt51i 0DDpwaxJR7I/soLWEDJOGGwzx33AYXqhXLhQGlGxwvpEq4a9tV8sEJg7 FttTjkCW/wJnN1wFWxlTjy4u/E7bO/hzw4/mjdz3orLBPT7V0ydgiT7o xxPZDD0DDQ7eXdAFs9eEQs2RTwJWqgi2q49DA3ZxelxpdB7no5TI4VKM HIv0GGWWNWimRybEWV8sy6Rvx6CYHNIMKjAqAUzpf5oF78Q5prgo22Ro EGKWPIcaxU+57t+uZGZCwCG3uUuafbiOoOpS8+WiEWBiz5vel64iCNvH pCiqUA==
;; Received 1137 bytes from 172.28.0.29#53(172.28.0.29) in 0 ms

ar.			172800	IN	NS	a.lactld.org.
ar.			172800	IN	NS	c.dns.ar.
ar.			172800	IN	NS	d.dns.ar.
ar.			172800	IN	NS	e.dns.ar.
ar.			172800	IN	NS	f.dns.ar.
ar.			172800	IN	NS	ar.cctld.authdns.ripe.net.
ar.			86400	IN	DS	19606 8 2 4415CF1A2CF10DE94B92BC020F21D1BF4163B2E90F2A6F6A5D2A1740 339D566C
ar.			86400	IN	RRSIG	DS 8 1 86400 20240426170000 20240413160000 5613 . MGenw6Ik9gXDyLJNfh3kipGhjOcpGBSvWAdsWG4ydh5eq1HTJIGqxxKR mOiJuLG/Kw4ajwi5Htc6R0E+5pIa1QYwo6SWN6soZcwmwPzdJD41rOwH 85JPHqTTcbGZYGAk8SlD5xC4/eeRavK+mWZWmRWvkZrlOPpecNCtqkVZ Fs3xY/tEAjXhmXTNi8trm1qTMaCX4sqtJeJZyKihqXjJShAYXWyPoQF0 GyazHaNKOgV/prLq1pkaoqnexjM+v+KbWcAMo4eKic2F/3OjaRPes2yh ZduGH2cHCglPGm5pS/O4VHDiMVeEBj1RYydk+/XhgQWEAWscDQ13ASLk c4ZPIA==
;; Received 784 bytes from 199.7.83.42#53(l.root-servers.net) in 64 ms

unlp.edu.ar.		3600	IN	NS	ns1.riu.edu.ar.
unlp.edu.ar.		3600	IN	NS	unlp.unlp.edu.ar.
unlp.edu.ar.		3600	IN	NS	anubis.unlp.edu.ar.
unlp.edu.ar.		3600	IN	DS	13327 5 1 D56823AE3C414F9190D84EE063606918D04513D9
unlp.edu.ar.		3600	IN	DS	13327 5 2 898DC7FBFC8837E7F3AD30400354D54FE28FD94FBC5B7793CB88CF88 9B6AB63C
unlp.edu.ar.		3600	IN	RRSIG	DS 8 3 3600 20240509012234 20240408030001 30010 edu.ar. T1tr8uhwz8jGTXcMw0heD18gJ1SUa9SbBziwwzy2X8CRF7VOLGLQZwcE 0hC4G0Lr3adTa7mMdQzlgZxPzqQBt/6Qq+S5c/U1XhSd7QNyn8nm99kJ G+6z81qPZ7ybR9tN9M9OBMIt7lo6q/+5WL14cU3RSpjox7/v+BsLmXwb 7QQ=
;; Received 539 bytes from 200.108.148.50#53(c.dns.ar) in 128 ms

unlp.edu.ar.		3600	IN	SOA	anubis.unlp.edu.ar. root.anubis.unlp.edu.ar. 2024032620 28800 900 1209600 3600
unlp.edu.ar.		3600	IN	RRSIG	SOA 5 3 7200 20240514010002 20240414010002 44211 unlp.edu.ar. IdFIg5I8Tsqnbvqf0GU350BLHh5XdFuzxFMk+7R3ffnJ9SGir4NTWzFP 4e5UNJ2w1odTJGoeJohYsSgOBwoo5zy/1i6AqTlcQNbGdhwQi8ckc7dc MjAnosXYSlhySIUSn44bTNhKeS1mkNU4FwNiLNoZvzvimiM9xsCyL5j0 Hac=
unlp.edu.ar.		3600	IN	NSEC	_acme-challenge.unlp.edu.ar. A NS SOA MX TXT AAAA RRSIG NSEC DNSKEY
unlp.edu.ar.		3600	IN	RRSIG	NSEC 5 3 3600 20240425232106 20240326232106 44211 unlp.edu.ar. dokCs3L9XAyMGrlu1aAx01QvR7/aDnSzW1zJfWa2RlRnOpr9eWwQEyaN MzHzy4qqDsBMfDKk8wg5dqnRCR8AZiXtu+l6YX2L1bJbcBfF9ULZ6wOU mmRRsV3Wxa9KCf3ZyYdm4qoZZGnqTjfBvKJpnkC2/1EPQkslPzeo9jFV BkU=
www.reddemuseos.unlp.edu.ar. 3600 IN	NSEC	rediab.unlp.edu.ar. A RRSIG NSEC
www.reddemuseos.unlp.edu.ar. 3600 IN	RRSIG	NSEC 5 5 3600 20240425232106 20240326232106 44211 unlp.edu.ar. XESIof48Fv+GVXbRH+VnICQEX+WzmGlcVroawei/9oW2tO7t/iVFpqno Nk/xd/Jels87TfWv6x7CJoDSN/fo5mhBaOieG+c+pdw9Ow6LQKcUPqYo Z5fa3E/DjuLZjVKaNEXL9+21Fmd1adGm7ot8RTkEfJJNI0bIAzOtPCbr ct4=
;; Received 767 bytes from 170.210.0.18#53(ns1.riu.edu.ar) in 8 ms
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;El comando &lt;code&gt;dig +trace www.redes.unlp.edu.ar&lt;/code&gt; que has ejecutado realiza una traza de la ruta que toma una consulta DNS desde los servidores raíz del DNS hasta los servidores específicos que manejan el registro de &lt;code&gt;www.redes.unlp.edu.ar&lt;/code&gt;. Este comando es extremadamente útil para entender el proceso de resolución DNS y para identificar posibles problemas de configuración en la ruta de resolución de nombres. Aquí está la desglose de la salida proporcionada:&lt;/p&gt;
&lt;h3&gt;Etapas de la Traza DNS&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Servidores Raíz&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La consulta comienza en los servidores raíz (&lt;code&gt;.root-servers.net&lt;/code&gt;). Estos son los servidores más altos en la jerarquía DNS y tienen la responsabilidad de referir las consultas hacia los servidores de nombres de los dominios de nivel superior (TLDs) correspondientes.&lt;/li&gt;
&lt;li&gt;Los servidores raíz proporcionan las direcciones de los servidores de nombres para el TLD &lt;code&gt;.ar&lt;/code&gt;, que es relevante para este dominio.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Servidores TLD para &lt;code&gt;.ar&lt;/code&gt;&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los servidores para el TLD &lt;code&gt;.ar&lt;/code&gt;, como &lt;code&gt;a.lactld.org&lt;/code&gt; y otros servidores &lt;code&gt;dns.ar&lt;/code&gt;, reciben la consulta de los servidores raíz.&lt;/li&gt;
&lt;li&gt;Estos servidores de TLD son responsables de administrar todos los dominios que terminan en &lt;code&gt;.ar&lt;/code&gt; y proporcionan las direcciones de los servidores de nombres específicos para el dominio &lt;code&gt;unlp.edu.ar&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Servidores de nombres para &lt;code&gt;unlp.edu.ar&lt;/code&gt;&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La consulta llega luego a los servidores de nombres específicos para &lt;code&gt;unlp.edu.ar&lt;/code&gt; (&lt;code&gt;ns1.riu.edu.ar&lt;/code&gt;, &lt;code&gt;unlp.unlp.edu.ar&lt;/code&gt;, y &lt;code&gt;anubis.unlp.edu.ar&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Estos servidores son los que realmente tienen la información autoritativa sobre subdominios dentro de &lt;code&gt;unlp.edu.ar&lt;/code&gt;, incluyendo &lt;code&gt;www.redes.unlp.edu.ar&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Detalles Importantes de la Salida&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Información de Seguridad (DNSSEC)&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;DS&lt;/code&gt; (Delegation Signer) y &lt;code&gt;RRSIG&lt;/code&gt; (Resource Record Signature) son registros relacionados con DNSSEC, que es un conjunto de extensiones de seguridad para proteger la información proporcionada por el DNS.&lt;/li&gt;
&lt;li&gt;Estos registros son usados para verificar la integridad y autenticidad de las respuestas DNS, previniendo ataques como envenenamiento de caché y spoofing.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SOA (Start of Authority)&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Este registro aparece en la respuesta para &lt;code&gt;unlp.edu.ar&lt;/code&gt; y contiene información administrativa sobre la zona, incluyendo el servidor primario, el contacto de correo electrónico, y varios temporizadores que afectan la operación del nombre de dominio.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;NSEC (Next Secure Record)&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Este es otro registro relacionado con DNSSEC, utilizado para proporcionar prueba de inexistencia de un registro DNS y para listar los tipos de registros existentes en un dominio.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Conclusión&lt;/h3&gt;
&lt;p&gt;La salida del comando &lt;code&gt;dig +trace&lt;/code&gt; muestra el camino completo que recorre una consulta DNS, desde los servidores raíz hasta los servidores autoritativos que finalmente contienen la información sobre el dominio solicitado. Observar estos pasos ayuda a comprender cómo se estructura y se administra el espacio de nombres global de Internet y también es vital para la resolución de problemas y la garantía de la configuración correcta del DNS.&lt;/p&gt;
&lt;p&gt;En el contexto del Sistema de Nombres de Dominio (DNS), un &lt;strong&gt;resolver&lt;/strong&gt; es un componente crucial que actúa como intermediario entre el usuario y los servidores DNS complejos para traducir los nombres de dominio en direcciones IP. El resolver, también conocido como &quot;cliente DNS&quot;, es esencial para el funcionamiento diario de Internet, permitiendo a los usuarios acceder a los recursos web mediante nombres de dominio legibles por humanos en lugar de las direcciones IP numéricas.&lt;/p&gt;
&lt;h3&gt;Funciones del Resolver&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Interpretación de Solicitudes&lt;/strong&gt;: Cuando escribes una URL en tu navegador, esta solicitud es recibida por el resolver DNS de tu sistema o red. El resolver interpreta y procesa esta solicitud para determinar cómo obtener la dirección IP asociada con el nombre de dominio.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Caché de Resultados&lt;/strong&gt;: Para mejorar la eficiencia y reducir la carga en la red, el resolver almacena respuestas recientes en su caché. Si un nombre de dominio ha sido resuelto recientemente y la respuesta aún es válida según su Time To Live (TTL), el resolver puede devolver la dirección IP desde su caché sin necesidad de hacer más consultas externas.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Consulta Recursiva&lt;/strong&gt;: Si la respuesta no está en la caché, el resolver puede actuar de manera recursiva. Esto significa que consultará otros servidores DNS en nombre del usuario para resolver el nombre de dominio de manera completa y transparente. Comienza con los servidores raíz, luego pasa a los servidores de los TLD (Top-Level Domain), y finalmente a los servidores de nombres autoritativos para el dominio específico, hasta obtener la información necesaria.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Manejo de Fallos y Errores&lt;/strong&gt;: El resolver gestiona la lógica necesaria para manejar fallos en la red o respuestas erróneas de los servidores DNS, intentando diferentes servidores o métodos alternativos hasta resolver la solicitud de manera satisfactoria.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Tipos de Resolvers&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Stub Resolver&lt;/strong&gt;: Este tipo de resolver realiza funciones básicas y se encuentra típicamente en sistemas operativos de clientes. Generalmente envía consultas a un servidor DNS más equipado y no realiza el seguimiento completo de la consulta desde los servidores raíz hasta los autoritativos.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Recursive Resolver&lt;/strong&gt;: Un resolver recursivo, como los que operan los proveedores de servicios de internet (ISP) o servicios DNS públicos (como Google DNS, Cloudflare, etc.), realiza consultas completas partiendo de los servidores raíz hasta los servidores autoritativos para el dominio solicitado. Estos resolvers tienen la capacidad de manejar completamente el proceso de resolución DNS, almacenando caché y realizando consultas recursivas según sea necesario.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Importancia del Resolver&lt;/h3&gt;
&lt;p&gt;La funcionalidad del resolver es esencial para la experiencia del usuario en Internet, ya que permite acceder a sitios web y otros recursos en línea mediante nombres de dominio fáciles de recordar en lugar de direcciones IP complejas. Además, al manejar eficientemente las consultas DNS, los resolvers contribuyen significativamente a la reducción del tráfico innecesario en la red y a la mejora general del rendimiento de Internet.&lt;/p&gt;
&lt;p&gt;En resumen, el resolver DNS es una pieza fundamental de la infraestructura de Internet que facilita la comunicación entre los nombres de dominio y las direcciones IP, garantizando que los usuarios puedan acceder a los recursos de Internet de manera rápida y confiable.&lt;/p&gt;
&lt;p&gt;Describa para qué se utilizan los siguientes tipos de registros de DNS:&lt;/p&gt;
&lt;p&gt;Asocia un nombre de dominio con una dirección IPv4. Este registro se utiliza para traducir nombres de dominio a sus correspondientes direcciones IP para que los navegadores puedan encontrar y acceder a los sitios web.&lt;/p&gt;
&lt;p&gt;Indica el servidor de correo que debe ser utilizado para entregar el correo electrónico a un dominio. Este registro es esencial para la configuración del correo electrónico y dirige el correo entrante a los servidores de correo adecuados.&lt;/p&gt;
&lt;p&gt;Realiza la función opuesta a la de los registros A y AAAA; asocia una dirección IP con un nombre de dominio canónico. Se utiliza principalmente para la resolución inversa de DNS, es decir, cuando se traduce una dirección IP en un nombre de dominio.&lt;/p&gt;
&lt;p&gt;Similar al registro A, pero se utiliza para asociar un nombre de dominio con una dirección IPv6.&lt;/p&gt;
&lt;p&gt;Proporciona información sobre los servicios disponibles en un dominio. Especifica el nombre de host y el puerto para servicios específicos (como VoIP o mensajería instantánea), permitiendo a los dominios definir la localización de servidores y servicios específicos.&lt;/p&gt;
&lt;p&gt;Especifica los servidores DNS autorizados para un dominio. Estos servidores DNS son los que contienen los registros DNS de ese dominio y pueden responder consultas relativas a él.&lt;/p&gt;
&lt;p&gt;Permite que un dominio se asocie con otro nombre de dominio, el &quot;nombre canónico&quot;. Se utiliza para apuntar varios nombres de dominio a un mismo lugar, facilitando la gestión de sitios que pueden ser accedidos mediante múltiples nombres.&lt;/p&gt;
&lt;p&gt;Contiene información esencial sobre el dominio y la zona, como el servidor DNS principal, el correo electrónico del administrador, el intervalo de actualización y la caducidad. Es el registro inicial de cualquier zona de DNS y establece la autoridad del dominio.&lt;/p&gt;
&lt;p&gt;Permite que los administradores inserten texto arbitrario en un registro DNS. Comúnmente se utiliza para verificar la propiedad del dominio, implementar políticas de seguridad del correo electrónico como SPF (Sender Policy Framework) y DKIM (DomainKeys Identified Mail), y otras aplicaciones que requieren leer datos en forma de texto de los registros DNS.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 7&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Redundancia y Alta Disponibilidad&lt;/strong&gt;: La presencia de múltiples servidores DNS asegura que si uno falla debido a problemas técnicos, mantenimiento o ataques de denegación de servicio (DDoS), otro puede continuar resolviendo las solicitudes de nombres de dominio, manteniendo el sitio web o servicio accesible para los usuarios.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Balanceo de carga&lt;/strong&gt;: Distribuir las solicitudes entre varios servidores DNS puede ayudar a manejar mejor el volumen de tráfico, evitando la sobrecarga en un único servidor y mejorando el tiempo de respuesta para las solicitudes de los usuarios.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Resiliencia ante ataques&lt;/strong&gt;: Tener múltiples servidores DNS, idealmente en diferentes ubicaciones geográficas, puede ofrecer una mejor protección contra ataques dirigidos. Si un servidor es atacado, los otros pueden seguir funcionando, minimizando el impacto del ataque.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Mejora del rendimiento y la velocidad de respuesta&lt;/strong&gt;: La presencia de servidores DNS en diferentes ubicaciones geográficas puede reducir la latencia al responder solicitudes de usuarios cercanos a esos servidores, mejorando así la experiencia general del usuario al acceder a un dominio.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Descentralización&lt;/strong&gt;: La distribución de los servidores DNS contribuye a la descentralización de la infraestructura de Internet, haciéndola menos vulnerable a fallos o ataques que podrían afectar a un punto centralizado.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En resumen, tener múltiples servidores DNS mejora la robustez, seguridad y eficiencia del sistema de nombres de dominio en Internet, contribuyendo a una experiencia de usuario más fiable y rápida.&lt;/p&gt;
&lt;p&gt;Cuando un dominio cuenta con más de un servidor, uno de ellos es el primario (o maestro) y todos los demás son los secundarios (o esclavos).&lt;/p&gt;
&lt;p&gt;La configuración de servidores DNS primarios (maestros) y secundarios (esclavos) se utiliza para la gestión eficaz de los registros DNS y para asegurar la redundancia y consistencia de la información de dominio a través de Internet.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Sincronización y Consistencia de Datos&lt;/strong&gt;: El servidor DNS primario mantiene la versión autoritativa de los registros de zona del dominio. Cualquier cambio en la configuración del DNS, como añadir o modificar registros A, MX, CNAME, etc., se realiza primero en el servidor primario. Los servidores secundarios luego sincronizan estos cambios desde el primario, asegurando que todos los servidores proporcionen respuestas consistentes a las consultas DNS.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Redundancia y Disponibilidad&lt;/strong&gt;: Al tener múltiples servidores DNS secundarios, se garantiza que si el servidor primario falla o se vuelve inaccesible, los servidores secundarios pueden continuar respondiendo las consultas DNS, manteniendo la disponibilidad del servicio o sitio web asociado al dominio. Esto es crucial para la alta disponibilidad y la resistencia a fallos.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Distribución de Carga&lt;/strong&gt;: Los servidores secundarios también ayudan a distribuir la carga de las solicitudes DNS, especialmente para sitios web de alto tráfico. Al distribuir las consultas entre varios servidores, se reduce la carga en el servidor primario y se mejora el tiempo de respuesta para los usuarios finales.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Seguridad&lt;/strong&gt;: En algunos casos, mantener los servidores secundarios puede aumentar la seguridad. Por ejemplo, se puede configurar el servidor primario en una red segura, no accesible directamente desde Internet, y solo permitir que los servidores secundarios, ubicados en diferentes redes, sincronicen los datos y respondan a las solicitudes externas.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Eficiencia en la Actualización de Datos&lt;/strong&gt;: Al realizar cambios solo en el servidor primario, se simplifica la administración de los registros DNS. Los servidores secundarios automáticamente obtienen y replican estos cambios a través de un proceso llamado transferencia de zona, lo que facilita la gestión de los registros DNS para los administradores.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Esta estructura de primario-secundario asegura que los cambios se propaguen de manera controlada y eficiente a través de la infraestructura de DNS, manteniendo la integridad y la disponibilidad de los datos críticos para el funcionamiento de Internet.&lt;/p&gt;
&lt;p&gt;El mecanismo de transferencia de zona en DNS es un proceso por el cual los registros DNS de una zona específica son copiados (transferidos) de un servidor DNS autoritativo (el servidor primario o maestro) a otro servidor DNS (el servidor secundario o esclavo). Este proceso se realiza para asegurar que los servidores secundarios tengan una copia exacta y actualizada de los registros DNS mantenidos por el servidor primario.&lt;/p&gt;
&lt;p&gt;La finalidad principal de la transferencia de zona es:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Redundancia y Disponibilidad&lt;/strong&gt;: Garantizar que múltiples servidores DNS puedan responder a las consultas sobre un dominio, incluso si el servidor primario está inaccesible debido a mantenimiento, fallas o ataques. Esto mejora la disponibilidad y la resiliencia del sistema DNS.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Consistencia de Datos&lt;/strong&gt;: Asegurar que todos los servidores secundarios tengan la misma información DNS que el servidor primario, manteniendo la consistencia de los datos a través de la red. Esto es crucial para evitar conflictos o respuestas incorrectas a las consultas DNS.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Balanceo de Carga&lt;/strong&gt;: Distribuir las consultas DNS entre varios servidores para manejar eficientemente el tráfico y reducir la carga en cualquier servidor individual. Esto puede mejorar el rendimiento general del sistema DNS y reducir los tiempos de respuesta para los usuarios finales.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;La transferencia de zona puede ocurrir de dos formas: transferencia completa de zona (AXFR), donde todos los registros de la zona son transferidos en su totalidad, o transferencia incremental de zona (IXFR), donde solo se transfieren los cambios realizados desde la última transferencia. Esto último ayuda a optimizar el ancho de banda y los recursos al minimizar la cantidad de datos transferidos entre servidores.&lt;/p&gt;
&lt;h2&gt;Ejercicio 10&lt;/h2&gt;
&lt;p&gt;Imagine que usted es el administrador del dominio de DNS de la UNLP (unlp.edu.ar). A su vez, cada facultad de la UNLP cuenta con un administrador que gestiona su propio dominio (por ejemplo, en el caso dela Facultad de Informática se trata de info.unlp.edu.ar).&lt;/p&gt;
&lt;p&gt;Suponga que se crea una nueva facultad, Facultad de Redes, cuyo dominio será redes.unlp.edu.ar, y el administrador le indica que quiere poder manejar su propio dominio.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;(Pista: investigue en qué consiste la delegación de dominios).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Para permitir que el administrador de la Facultad de Redes gestione el dominio &lt;code&gt;redes.unlp.edu.ar&lt;/code&gt; de forma independiente, debería realizar una &lt;strong&gt;delegación de dominio&lt;/strong&gt;. La delegación de dominio es un proceso en el sistema de nombres de dominio (DNS) por el cual la autoridad administrativa y de gestión de un subdominio se transfiere del administrador del dominio principal a otro servidor DNS, que generalmente es controlado por una organización o individuo diferente. En este caso, del dominio &lt;code&gt;unlp.edu.ar&lt;/code&gt; al nuevo subdominio &lt;code&gt;redes.unlp.edu.ar&lt;/code&gt;. Aquí están los pasos a seguir:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Crear registros NS en el dominio principal&lt;/strong&gt;: Debes agregar registros del tipo NS (Name Server) en la zona DNS de &lt;code&gt;unlp.edu.ar&lt;/code&gt; para el subdominio &lt;code&gt;redes.unlp.edu.ar&lt;/code&gt;. Estos registros NS indicarán los servidores DNS que tienen autoridad sobre el subdominio &lt;code&gt;redes.unlp.edu.ar&lt;/code&gt;. Por ejemplo:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;redes.unlp.edu.ar. IN NS ns1.redes.unlp.edu.ar.
redes.unlp.edu.ar. IN NS ns2.redes.unlp.edu.ar.
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Especificar los servidores DNS para el subdominio&lt;/strong&gt;: Debes configurar o asegurarte de que los servidores DNS especificados en los registros NS (en este ejemplo, &lt;code&gt;ns1.redes.unlp.edu.ar&lt;/code&gt; y &lt;code&gt;ns2.redes.unlp.edu.ar&lt;/code&gt;) estén configurados correctamente para servir el subdominio &lt;code&gt;redes.unlp.edu.ar&lt;/code&gt;. Esto implica configurar una nueva zona DNS en estos servidores para &lt;code&gt;redes.unlp.edu.ar&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Agregar registros A para los servidores DNS del subdominio&lt;/strong&gt;: Si los servidores DNS del subdominio (&lt;code&gt;ns1.redes.unlp.edu.ar&lt;/code&gt;, &lt;code&gt;ns2.redes.unlp.edu.ar&lt;/code&gt;) no tienen aún una dirección IP asignada visible globalmente, necesitas agregar registros A en la zona DNS de &lt;code&gt;unlp.edu.ar&lt;/code&gt; para resolver estas direcciones. Por ejemplo:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ns1.redes.unlp.edu.ar. IN A 192.0.2.1
ns2.redes.unlp.edu.ar. IN A 192.0.2.2
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configuración de la zona para el subdominio&lt;/strong&gt;: En los servidores DNS del subdominio, se debe configurar una zona para &lt;code&gt;redes.unlp.edu.ar&lt;/code&gt;. Esta configuración incluirá todos los registros DNS necesarios para el subdominio, como registros A, MX, TXT, etc., permitiendo al administrador de la Facultad de Redes gestionar estos registros de forma independiente.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Al completar estos pasos, habrás delegado con éxito la gestión del subdominio &lt;code&gt;redes.unlp.edu.ar&lt;/code&gt; al administrador de la Facultad de Redes, permitiéndole controlar completamente los registros DNS dentro de su propio subdominio. Es crucial asegurarse de que todos los servidores DNS involucrados estén configurados correctamente y sincronizados para garantizar la resolución de nombres eficaz y sin interrupciones dentro del subdominio delegado.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 11&lt;/h2&gt;
&lt;p&gt;En la VM, utilice el comando dig para obtener la dirección IP del host &lt;code&gt;www.redes.unlp.edu.ar&lt;/code&gt; y responda:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dig www.redes.unlp.edu.ar
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;; &amp;#x3C;&amp;#x3C;&gt;&gt; DiG 9.16.27-Debian &amp;#x3C;&amp;#x3C;&gt;&gt; www.redes.unlp.edu.ar
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&amp;#x3C;&amp;#x3C;- opcode: QUERY, status: NOERROR, id: 27770
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: b5db6c2a4993909e01000000661bf3b5c1b1ba1391d7a26a (good)
;; QUESTION SECTION:
;www.redes.unlp.edu.ar.		IN	A

;; ANSWER SECTION:
www.redes.unlp.edu.ar.	300	IN	A	172.28.0.50

;; Query time: 0 msec
;; SERVER: 172.28.0.29#53(172.28.0.29)
;; WHEN: Sun Apr 14 12:18:13 -03 2024
;; MSG SIZE  rcvd: 94
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Sí&lt;/strong&gt;, la solicitud fue recursiva. Esto se puede determinar observando el flag &lt;code&gt;rd&lt;/code&gt; (Recursion Desired) en la sección de flags del encabezado de la respuesta. Este flag indica que el cliente (en este caso, el comando &lt;code&gt;dig&lt;/code&gt;) solicitó que el servidor DNS realice una resolución recursiva si no tenía la respuesta disponible inmediatamente en su caché.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;rd&lt;/code&gt; (Recursion Desired): Este flag está presente y marcado, lo que significa que se solicitó una resolución recursiva.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;La respuesta fue &lt;strong&gt;autoritativa&lt;/strong&gt;, lo cual se deduce del flag &lt;code&gt;aa&lt;/code&gt; (Authoritative Answer). Este flag indica que la respuesta proviene de un servidor que tiene autoridad directa sobre el dominio en cuestión, en este caso, &lt;code&gt;www.redes.unlp.edu.ar&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;aa&lt;/code&gt; (Authoritative Answer): Este flag está presente y marcado, indicando que el servidor que respondió lo hizo con autoridad, es decir, que posee y gestiona directamente los registros DNS de este dominio.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Otros Detalles&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;qr&lt;/code&gt; (Query Response)&lt;/strong&gt;: Este flag indica que el mensaje es una respuesta a una consulta (en lugar de una consulta por sí misma).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ra&lt;/code&gt; (Recursion Available)&lt;/strong&gt;: Este flag muestra que el servidor DNS es capaz de realizar consultas recursivas, aunque en este caso, dado que la respuesta fue autoritativa y directa, probablemente no se utilizó la recursión más allá del servidor consultado inicialmente.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Conclusión&lt;/h4&gt;
&lt;p&gt;En resumen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;La solicitud fue recursiva&lt;/strong&gt; porque se solicitó con el flag &lt;code&gt;rd&lt;/code&gt; habilitado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;La respuesta fue autoritativa&lt;/strong&gt; y directa, como lo indica el flag &lt;code&gt;aa&lt;/code&gt;, lo que significa que el servidor que respondió tenía una respuesta directa y definitiva para la consulta, sin necesidad de consultar a otros servidores.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estos detalles son clave para entender cómo operan las solicitudes y respuestas en el sistema DNS, proporcionando visibilidad sobre el comportamiento tanto del cliente como del servidor en el proceso de resolución de nombres de dominio.&lt;/p&gt;
&lt;p&gt;La dirección IP del resolver que se utilizó para responder a tu consulta está indicada en la salida bajo la línea &lt;code&gt;SERVER:&lt;/code&gt;. Aquí está el extracto relevante de tu comando &lt;code&gt;dig&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;;; SERVER: 172.28.0.29#53(172.28.0.29)
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Desglose de la Línea&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;172.28.0.29&lt;/code&gt;&lt;/strong&gt;: Esta es la dirección IP del resolver. Este servidor es el que efectivamente respondió a tu consulta DNS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;#53&lt;/code&gt;&lt;/strong&gt;: Este número después del signo &lt;code&gt;#&lt;/code&gt; representa el puerto utilizado por el servidor DNS. El puerto &lt;code&gt;53&lt;/code&gt; es el puerto estándar utilizado para protocolos DNS.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En DNS, cuando realizas una consulta utilizando herramientas como &lt;code&gt;dig&lt;/code&gt;, el servidor que responde puede ser un servidor configurado en tus ajustes de red como el servidor DNS predeterminado, o puede ser un servidor DNS intermedio si estás utilizando una red que redirige las consultas DNS, como una red corporativa o de una universidad.&lt;/p&gt;
&lt;p&gt;El servidor listado en la línea &lt;code&gt;SERVER:&lt;/code&gt; de la salida de &lt;code&gt;dig&lt;/code&gt; es el último servidor que procesó la consulta y devolvió el resultado. Esto indica que fue el servidor de nombres (resolver) activo que resolvió tu petición, ya sea devolviendo un resultado desde su caché o realizando su propia consulta recursiva en la red, según sea necesario.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dig MX www.redes.unlp.edu.ar
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;; &amp;#x3C;&amp;#x3C;&gt;&gt; DiG 9.16.27-Debian &amp;#x3C;&amp;#x3C;&gt;&gt; MX www.redes.unlp.edu.ar
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&amp;#x3C;&amp;#x3C;- opcode: QUERY, status: NOERROR, id: 20927
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 2a33e83611c202e201000000661bfc44e3dbcfb90ebb03ec (good)
;; QUESTION SECTION:
;www.redes.unlp.edu.ar.		IN	MX

;; AUTHORITY SECTION:
redes.unlp.edu.ar.	86400	IN	SOA	ns-sv-b.redes.unlp.edu.ar. root.redes.unlp.edu.ar. 2020031700 604800 86400 2419200 86400

;; Query time: 0 msec
;; SERVER: 172.28.0.29#53(172.28.0.29)
;; WHEN: Sun Apr 14 12:54:44 -03 2024
;; MSG SIZE  rcvd: 127
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;Mira, la cosa esta no posee registros MX, solo posee un registro SOA, hacemos la consulta nuevamente pero esta vez a un servidor DNS diferente.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dig MX redes.unlp.edu.ar
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;; &amp;#x3C;&amp;#x3C;&gt;&gt; DiG 9.16.27-Debian &amp;#x3C;&amp;#x3C;&gt;&gt; MX redes.unlp.edu.ar
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&amp;#x3C;&amp;#x3C;- opcode: QUERY, status: NOERROR, id: 20370
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 3961424363e0639101000000661bff479d6a617ac86c0482 (good)
;; QUESTION SECTION:
;redes.unlp.edu.ar.		IN	MX

;; ANSWER SECTION:
redes.unlp.edu.ar.	86400	IN	MX	10 mail2.redes.unlp.edu.ar.
redes.unlp.edu.ar.	86400	IN	MX	5 mail.redes.unlp.edu.ar.

;; ADDITIONAL SECTION:
mail.redes.unlp.edu.ar.	86400	IN	A	172.28.0.90
mail2.redes.unlp.edu.ar. 86400	IN	A	172.28.0.91

;; Query time: 0 msec
;; SERVER: 172.28.0.29#53(172.28.0.29)
;; WHEN: Sun Apr 14 13:07:35 -03 2024
;; MSG SIZE  rcvd: 149
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;ANSWER SECTION&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;redes.unlp.edu.ar. 86400 IN MX 10 mail2.redes.unlp.edu.ar.&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Prioridad&lt;/strong&gt;: 10&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Servidor de correo&lt;/strong&gt;: mail2.redes.unlp.edu.ar&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;redes.unlp.edu.ar. 86400 IN MX 5 mail.redes.unlp.edu.ar.&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Prioridad&lt;/strong&gt;: 5&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Servidor de correo&lt;/strong&gt;: mail.redes.unlp.edu.ar&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estos registros indican que hay dos servidores de correo configurados para el dominio, con diferentes prioridades. El número de prioridad indica cuál servidor debería ser contactado primero, con un número más bajo indicando mayor prioridad.&lt;/p&gt;
&lt;h4&gt;ADDITIONAL SECTION&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Aquí se proporcionan las direcciones IP para ambos servidores de correo, facilitando la conexión directa sin necesidad de resolver nuevamente estos nombres:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;mail.redes.unlp.edu.ar. 86400 IN A 172.28.0.90&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;mail2.redes.unlp.edu.ar. 86400 IN A 172.28.0.91&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La existencia de más de un servidor de correo (en este caso, &lt;code&gt;mail&lt;/code&gt; y &lt;code&gt;mail2&lt;/code&gt;) proporciona redundancia y mejora la fiabilidad del sistema de correo electrónico. En caso de que el servidor principal (&lt;code&gt;mail.redes.unlp.edu.ar&lt;/code&gt;) falle o esté inaccesible por mantenimiento u otras razones, el tráfico de correo puede ser dirigido automáticamente al servidor secundario (&lt;code&gt;mail2.redes.unlp.edu.ar&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Los números entre &lt;code&gt;MX&lt;/code&gt; y el nombre del servidor son las &lt;strong&gt;prioridades de los servidores de correo&lt;/strong&gt;. El servidor con la prioridad más baja (en este caso, &lt;code&gt;5&lt;/code&gt; para &lt;code&gt;mail.redes.unlp.edu.ar&lt;/code&gt;) es el preferido y debe ser contactado primero. El servidor con una prioridad más alta (&lt;code&gt;10&lt;/code&gt; para &lt;code&gt;mail2.redes.unlp.edu.ar&lt;/code&gt;) actúa como respaldo y se utiliza cuando el principal no está disponible.&lt;/p&gt;
&lt;p&gt;El correo destinado a &lt;code&gt;redes.unlp.edu.ar&lt;/code&gt; se entregará primero a &lt;code&gt;mail.redes.unlp.edu.ar&lt;/code&gt;, ya que tiene la prioridad más alta (más baja numéricamente, es decir, &lt;code&gt;5&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Si &lt;code&gt;mail.redes.unlp.edu.ar&lt;/code&gt; está caído, no responde o no puede manejar más tráfico, entonces el correo se entregará al servidor &lt;code&gt;mail2.redes.unlp.edu.ar&lt;/code&gt;, que tiene una prioridad de &lt;code&gt;10&lt;/code&gt;. Esto garantiza que aún en caso de fallo, el correo pueda ser recibido y gestionado adecuadamente.&lt;/p&gt;
&lt;p&gt;Este sistema de prioridades y múltiples servidores de correo asegura la continuidad del servicio de correo electrónico, crucial para las operaciones diarias de cualquier organización, especialmente en un entorno académico como una universidad.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dig NS redes.unlp.edu.ar
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;; &amp;#x3C;&amp;#x3C;&gt;&gt; DiG 9.16.27-Debian &amp;#x3C;&amp;#x3C;&gt;&gt; NS redes.unlp.edu.ar
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&amp;#x3C;&amp;#x3C;- opcode: QUERY, status: NOERROR, id: 55280
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 429a78e30a5755ad01000000661c04936178753028e756f4 (good)
;; QUESTION SECTION:
;redes.unlp.edu.ar.		IN	NS

;; ANSWER SECTION:
redes.unlp.edu.ar.	86400	IN	NS	ns-sv-a.redes.unlp.edu.ar.
redes.unlp.edu.ar.	86400	IN	NS	ns-sv-b.redes.unlp.edu.ar.

;; ADDITIONAL SECTION:
ns-sv-a.redes.unlp.edu.ar. 604800 IN	A	172.28.0.30
ns-sv-b.redes.unlp.edu.ar. 604800 IN	A	172.28.0.29

;; Query time: 0 msec
;; SERVER: 172.28.0.29#53(172.28.0.29)
;; WHEN: Sun Apr 14 13:30:11 -03 2024
;; MSG SIZE  rcvd: 150
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Detalles de la Respuesta&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;ANSWER SECTION:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;redes.unlp.edu.ar. 86400 IN NS ns-sv-a.redes.unlp.edu.ar.&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;redes.unlp.edu.ar. 86400 IN NS ns-sv-b.redes.unlp.edu.ar.&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;Estos registros indican que los servidores de nombres para el dominio &lt;code&gt;redes.unlp.edu.ar&lt;/code&gt; son &lt;code&gt;ns-sv-a.redes.unlp.edu.ar&lt;/code&gt; y &lt;code&gt;ns-sv-b.redes.unlp.edu.ar&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;86400&lt;/strong&gt; es el TTL (Time to Live) en segundos, que dicta cuánto tiempo estos registros pueden ser almacenados en la caché por otros servidores antes de necesitar ser refrescados.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;ADDITIONAL SECTION:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ns-sv-a.redes.unlp.edu.ar. 604800 IN A 172.28.0.30&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ns-sv-b.redes.unlp.edu.ar. 604800 IN A 172.28.0.29&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;Estos registros proporcionan las direcciones IP asociadas a cada uno de los servidores de nombres, permitiendo que cualquier entidad que necesite resolver nombres bajo &lt;code&gt;redes.unlp.edu.ar&lt;/code&gt; se comunique directamente con estos servidores.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;604800&lt;/strong&gt; segundos es el TTL para estos registros IP, indicando cuánto tiempo pueden ser cacheados.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Interpretación de los Flags&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;qr (Query Response):&lt;/strong&gt; Indica que la respuesta es a una consulta.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;aa (Authoritative Answer):&lt;/strong&gt; El servidor que respondió tiene autoridad directa sobre el dominio, lo que significa que las respuestas son definitivas y no derivadas de otro servidor.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;rd (Recursion Desired):&lt;/strong&gt; La solicitud inicial pedía que el servidor realice recursión si era necesario.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ra (Recursion Available):&lt;/strong&gt; El servidor está capacitado para realizar recursión, aunque en este caso, dio una respuesta directa y autoritativa.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Conclusión&lt;/h4&gt;
&lt;p&gt;Los servidores de DNS para &lt;code&gt;redes.unlp.edu.ar&lt;/code&gt; son:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ns-sv-a.redes.unlp.edu.ar&lt;/strong&gt; con dirección IP &lt;strong&gt;172.28.0.30&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ns-sv-b.redes.unlp.edu.ar&lt;/strong&gt; con dirección IP &lt;strong&gt;172.28.0.29&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estos servidores están configurados para manejar todas las consultas DNS relacionadas con el dominio &lt;code&gt;redes.unlp.edu.ar&lt;/code&gt;. La configuración con dos servidores de nombres mejora la redundancia y la fiabilidad, asegurando que si uno de los servidores tiene problemas, el otro puede continuar manejando las solicitudes sin interrupción del servicio. Además, la respuesta autoritativa confirma que estos servidores son la fuente definitiva de información DNS para este dominio, lo cual es esencial para operaciones seguras y eficientes dentro de la red de la universidad.&lt;/p&gt;
&lt;p&gt;Observe la información que obtuvo al consultar por los servidores de DNS del dominio. En base a la salida,&lt;/p&gt;
&lt;p&gt;Con la información proporcionada por una consulta DNS estándar como la que se muestra en los resultados de &lt;code&gt;dig&lt;/code&gt;, no es posible determinar cuál de los servidores de nombres es el primario (maestro) y cuál es el secundario (esclavo). Los registros NS simplemente enumeran los servidores de nombres que son autoritativos para el dominio, sin indicar su rol dentro de la configuración maestro-esclavo.&lt;/p&gt;
&lt;p&gt;En la configuración de DNS tradicional, el servidor primario es donde se realizan los cambios y actualizaciones de los registros DNS, y estos cambios se replican luego a los servidores secundarios. Sin embargo, esta información de rol es parte de la configuración interna del sistema DNS y no se transmite en las respuestas a las consultas DNS realizadas por los clientes o resolvers.&lt;/p&gt;
&lt;p&gt;Para determinar cuál es el servidor primario, normalmente se requiere acceso al servidor DNS autoritativo y a su configuración o a la interfaz de administración del proveedor de DNS donde se maneja el dominio. A veces, por convención, los nombres de los servidores de nombres pueden dar una pista (como &lt;code&gt;ns1&lt;/code&gt; sugiriendo que podría ser el primario), pero esto no es una regla fiable y puede ser engañoso.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/2580a2e8-3cf6-48c7-bbb4-5acf1addb943&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;En la sección &quot;ANSWER SECTION&quot;, el primer campo después del &lt;code&gt;SOA&lt;/code&gt; es el servidor de nombres principal o primario para el dominio &lt;code&gt;redes.unlp.edu.ar&lt;/code&gt;. Según la salida proporcionada, el servidor DNS primario es &lt;code&gt;ns-sv-b.redes.unlp.edu.ar&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;El número de serie en el registro SOA es &lt;code&gt;2020031700&lt;/code&gt;. La convención de numeración puede variar, pero comúnmente sigue un patrón de AAAAMMDDnn, donde AAAA es el año, MM es el mes, DD es el día y nn es un número de revisión. Este número se actualiza cada vez que se hace un cambio significativo en la zona DNS. Es importante para la replicación de la zona hacia los servidores secundarios, ya que los servidores secundarios comparan el número de serie con el que tienen localmente para decidir si necesitan actualizar su copia de la zona.&lt;/p&gt;
&lt;p&gt;El segundo campo es &lt;code&gt;root.redes.unlp.edu.ar.&lt;/code&gt; y es la dirección de contacto para el administrador de la zona DNS. Normalmente se utiliza en la forma de un correo electrónico, donde el primer punto (.) se reemplaza por una arroba (@) y los demás puntos se interpretan normalmente. Por ejemplo, &lt;code&gt;root@redes.unlp.edu.ar&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;Resumen&lt;/h4&gt;
&lt;p&gt;A partir de la consulta SOA, se ha identificado &lt;code&gt;ns-sv-b.redes.unlp.edu.ar&lt;/code&gt; como el servidor de DNS primario. El número de serie sigue una convención de fecha y revisión y es crucial para controlar la sincronización de los registros entre los servidores DNS primarios y secundarios. El segundo campo del registro SOA proporciona información de contacto del administrador de la zona, y el TTL de caché negativa ayuda a gestionar la caché de respuestas negativas en los resolvers de DNS.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/8500d8e2-d178-4dc1-beb6-dbdc2108e06b&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;El registro TXT en DNS es utilizado para insertar cualquier texto en el sistema de nombres de dominio. Aquí hay varios propósitos comunes para los registros TXT:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Verificación de Propiedad&lt;/strong&gt;: Servicios como Google Search Console o proveedores de servicios de correo electrónico usan registros TXT para verificar la propiedad de un dominio.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Políticas de Seguridad de Correo Electrónico&lt;/strong&gt;: Se usan para SPF (Sender Policy Framework), que ayuda a prevenir el spoofing de correo electrónico al especificar qué servidores están autorizados a enviar correo en nombre del dominio. También se utilizan para DKIM (DomainKeys Identified Mail), que permite la verificación de la identidad del remitente y para DMARC (Domain-based Message Authentication, Reporting, and Conformance), que es una política de autenticación de correo electrónico.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Información General&lt;/strong&gt;: Pueden contener información general sobre el dominio o indicaciones técnicas para los administradores de sistemas.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En el resultado del &lt;code&gt;dig&lt;/code&gt; que has proporcionado, se muestra que no hay un registro TXT para el dominio &lt;code&gt;redes.unlp.edu.ar&lt;/code&gt;, lo que se evidencia por &lt;code&gt;ANSWER: 0&lt;/code&gt;. Esto significa que no se han definido registros TXT o no están disponibles públicamente. La sección de &quot;AUTHORITY SECTION&quot; contiene un registro SOA, que es típico cuando no hay registros del tipo consultado pero se muestra la autoridad para el dominio.&lt;/p&gt;
&lt;h3&gt;Parte g&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Utilizando dig, solicite la transferencia de zona de redes.unlp.edu.ar, analice la salida y responda.&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dig @ns-sv-a.redes.unlp.edu.ar redes.unlp.edu.ar AXFR
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/bd4691ea-b055-4f9b-b19a-adb4cf6d126c&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dig @ns-sv-b.redes.unlp.edu.ar redes.unlp.edu.ar AXFR
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/c9e1e03d-dc55-4f98-a0b8-edd87f7301f4&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;La salida proporcionada es el resultado de una transferencia de zona exitosa para el dominio &lt;code&gt;redes.unlp.edu.ar&lt;/code&gt; utilizando el comando &lt;code&gt;dig&lt;/code&gt;. La transferencia de zona (&lt;code&gt;AXFR&lt;/code&gt;) es un tipo de consulta DNS que solicita una copia completa de todos los registros de una zona de un servidor DNS. Aquí desglosamos la información proporcionada:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SOA Record&lt;/strong&gt;: El registro de Start of Authority (SOA) al principio y al final de la transferencia de zona indica la autoridad y la versión de la zona DNS. Contiene:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El servidor DNS principal (&lt;code&gt;ns-sv-b.redes.unlp.edu.ar&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;La dirección de correo electrónico del administrador (&lt;code&gt;root.redes.unlp.edu.ar&lt;/code&gt;, reemplazando el primer punto con &lt;code&gt;@&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;El número de serie (&lt;code&gt;2020031700&lt;/code&gt;) que se actualiza cada vez que la zona cambia.&lt;/li&gt;
&lt;li&gt;El intervalo de refresco (&lt;code&gt;604800&lt;/code&gt; segundos, o una semana).&lt;/li&gt;
&lt;li&gt;El intervalo de reintento (&lt;code&gt;86400&lt;/code&gt; segundos, o un día).&lt;/li&gt;
&lt;li&gt;El tiempo de expiración (&lt;code&gt;2419200&lt;/code&gt; segundos, o cuatro semanas).&lt;/li&gt;
&lt;li&gt;El TTL por defecto (&lt;code&gt;86400&lt;/code&gt; segundos, o un día), que se aplica a los registros en ausencia de un TTL específico.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;NS Records&lt;/strong&gt;: Listan los servidores de nombres autorizados (&lt;code&gt;ns-sv-a.redes.unlp.edu.ar&lt;/code&gt; y &lt;code&gt;ns-sv-b.redes.unlp.edu.ar&lt;/code&gt;) para el dominio.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;MX Records&lt;/strong&gt;: Especifican los servidores de correo (&lt;code&gt;mail.redes.unlp.edu.ar&lt;/code&gt; y &lt;code&gt;mail2.redes.unlp.edu.ar&lt;/code&gt;) y sus prioridades (5 y 10 respectivamente), que se utilizan para dirigir el correo electrónico.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;CNAME Record&lt;/strong&gt;: Muestra un alias (&lt;code&gt;ftp.redes.unlp.edu.ar&lt;/code&gt;) que apunta a otro dominio (&lt;code&gt;www.redes.unlp.edu.ar&lt;/code&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;A Records&lt;/strong&gt;: Asocian subdominios con direcciones IP específicas (&lt;code&gt;mail.redes.unlp.edu.ar&lt;/code&gt; a &lt;code&gt;172.28.0.90&lt;/code&gt;, por ejemplo).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;TXT Record&lt;/strong&gt;: Contiene texto arbitrario asociado con el dominio (&lt;code&gt;saludo.redes.unlp.edu.ar&lt;/code&gt; tiene el texto &lt;code&gt;&quot;HOLA&quot;&lt;/code&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Additional NS Records&lt;/strong&gt;: Proporcionan más servidores de nombres para subdominios específicos (&lt;code&gt;practica.redes.unlp.edu.ar&lt;/code&gt; tiene sus propios NS y A records).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La presencia de dos registros SOA al principio y al final de la lista es estándar en las transferencias de zona AXFR, indicando el comienzo y el fin de la transferencia.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Query time&lt;/strong&gt;: Muestra el tiempo que tardó la consulta en completarse, que es de 4 milisegundos, lo que indica una respuesta rápida.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SERVER&lt;/strong&gt;: Indica el servidor de DNS que respondió a la consulta.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;WHEN&lt;/strong&gt;: Muestra cuándo se realizó la consulta.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;XFR size&lt;/strong&gt;: Informa sobre el tamaño de la transferencia, que en este caso incluyó 17 registros, con un tamaño total de 441 bytes.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La finalidad de esta transferencia es sincronizar los registros de zona entre el servidor DNS principal y los secundarios. En un entorno de producción, las transferencias de zona suelen estar restringidas a los servidores que han sido explícitamente autorizados para recibir estos datos, con el fin de proteger contra el acceso no autorizado a la configuración del dominio.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Qué significan los números que aparecen antes de la palabra IN?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Los números que aparecen antes de la palabra &quot;IN&quot; en una salida de &lt;code&gt;dig&lt;/code&gt; corresponden al &lt;strong&gt;TTL (Time To Live)&lt;/strong&gt; de ese registro específico. El TTL es un valor en segundos que indica cuánto tiempo debe un servidor DNS cachear la respuesta antes de volver a consultar al servidor DNS autoritativo para una actualización. Es una forma de gestionar el rendimiento y la carga en los servidores DNS, equilibrando la actualización oportuna de la información con la necesidad de reducir el tráfico DNS en la red.&lt;/p&gt;
&lt;p&gt;Por ejemplo, un TTL de 86400 significa que una vez que un resolver DNS ha consultado ese registro, puede guardar la respuesta en su caché y no necesita realizar otra consulta para ese registro durante los próximos 86400 segundos, o 24 horas.&lt;/p&gt;
&lt;p&gt;En el registro SOA, el TTL es de 86400 segundos, y para los registros A de los servidores de nombres (ns-sv-a y ns-sv-b), es de 604800 segundos, o 7 días.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Cuál es su finalidad?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Su finalidad&lt;/strong&gt; es mejorar la eficiencia del sistema DNS reduciendo el número de consultas necesarias para la misma información y asegurando que los datos no válidos o antiguos se eliminen de las cachés en un período razonable.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Cuántos registros NS observa? &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;En cuanto a la &lt;strong&gt;cantidad de registros NS&lt;/strong&gt;, se observan dos registros NS:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;ns-sv-a.redes.unlp.edu.ar&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ns-sv-b.redes.unlp.edu.ar&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Estos son los servidores de nombres que están autorizados a responder por el dominio &lt;code&gt;redes.unlp.edu.ar&lt;/code&gt;. Estos registros son fundamentales para el proceso de resolución de DNS, ya que dirigen a los clientes a los servidores que tienen la información autoritativa sobre el dominio en cuestión.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Compare la respuesta con los servidores de DNS del dominio redes.unlp.edu.ar que dio anteriormente.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Puede explicar a qué se debe la diferencia y qué significa?&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Consultar&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Parte h&lt;/h3&gt;
&lt;p&gt;Consulte por el registro A de www.redes.unlp.edu.ar y luego por el registro A de www.practica.redes.unlp.edu.ar.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/9962fc8f-7afd-4918-a3e0-8891ed7343d3&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/63e4b5a6-a78d-43a0-9df1-a764675b858b&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Observe los TTL de ambos. Repita la operación y compare el valor de los TTL de cada uno respecto de la respuesta anterior. &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Las imágenes que proporcionaste muestran los resultados de dos consultas &lt;code&gt;dig&lt;/code&gt; para los registros A de &lt;code&gt;www.redes.unlp.edu.ar&lt;/code&gt; y &lt;code&gt;www.practica.redes.unlp.edu.ar&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;En la primera imagen, la consulta para &lt;code&gt;www.redes.unlp.edu.ar&lt;/code&gt; muestra un TTL de 300 segundos. Esto indica que la dirección IP &lt;code&gt;172.28.0.50&lt;/code&gt; puede ser almacenada en caché por un resolver DNS durante 5 minutos antes de necesitar una nueva resolución.&lt;/p&gt;
&lt;p&gt;La segunda imagen, muestra la consulta para &lt;code&gt;www.practica.redes.unlp.edu.ar&lt;/code&gt; con un TTL de 56 segundos, significando que la dirección IP &lt;code&gt;172.28.0.10&lt;/code&gt; puede ser almacenada en caché durante 56 segundos.&lt;/p&gt;
&lt;p&gt;Si repites las consultas después de un intervalo de tiempo y observas los TTL en las respuestas, deberías ver que los TTL han disminuido en la cantidad de segundos que han pasado desde la consulta anterior. Esto refleja el tiempo restante que un resolver DNS puede mantener la respuesta en caché antes de requerir una actualización.&lt;/p&gt;
&lt;p&gt;La diferencia en los TTL entre &lt;code&gt;www.redes.unlp.edu.ar&lt;/code&gt; y &lt;code&gt;www.practica.redes.unlp.edu.ar&lt;/code&gt; indica posiblemente que &lt;code&gt;www.practica&lt;/code&gt; podría cambiar más frecuentemente o que es un subdominio con menos tráfico, donde mantener la información en caché por un tiempo más corto no impactaría significativamente en el rendimiento del resolver.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Puede explicar qué está ocurriendo?&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;(Pista: observar los flags será de ayuda).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/2f790c50-3a72-4bd9-bb58-07cac2560c6f&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/447ad9a1-ef62-4158-adab-1ecbda15165d&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Consulte por el registro A de www.practica2.redes.unlp.edu.ar.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/4dfa0f35-1279-45f5-96ee-ba68ae5083f5&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Obtuvo alguna respuesta?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La salida del comando &lt;code&gt;dig&lt;/code&gt; que proporcionaste indica que se realizó una consulta DNS para el registro A de &lt;code&gt;www.practica2.redes.unlp.edu.ar&lt;/code&gt;, y la respuesta contiene varios elementos clave que nos informan sobre el resultado de la consulta:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;status: NXDOMAIN&lt;/strong&gt;: Indica que el nombre de dominio consultado no existe en el servidor DNS autoritativo para el dominio &lt;code&gt;redes.unlp.edu.ar&lt;/code&gt;. NXDOMAIN significa &quot;Non-Existent Domain&quot; (Dominio Inexistente).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ANSWER: 0&lt;/strong&gt;: Significa que no se encontraron registros A para &lt;code&gt;www.practica2.redes.unlp.edu.ar&lt;/code&gt;, es decir, no hay una respuesta con una dirección IP asociada a ese nombre de dominio.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;AUTHORITY: 1&lt;/strong&gt;: Muestra que hay una sección de autoridad con un registro, que en este caso es el SOA (Start of Authority) del dominio &lt;code&gt;redes.unlp.edu.ar&lt;/code&gt;. Esto significa que, aunque no hay una respuesta directa para la consulta (ya que el dominio no existe), el servidor que respondió tiene autoridad sobre el dominio y por eso proporciona la información SOA.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Investigue sobre los codigos de respuesta de DNS.&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;NXDOMAIN&lt;/strong&gt;: Se utiliza para indicar que el nombre de dominio especificado no existe. Es una respuesta definitiva que informa al cliente que el dominio que está buscando no se puede encontrar en el sistema de nombres de dominio.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;NOERROR&lt;/strong&gt;: Se utiliza para indicar que la consulta se completó con éxito, pero no necesariamente significa que se encontró una respuesta. En el caso de una consulta que devuelve registros válidos, la sección de respuestas tendrá una o más entradas y el estado será &lt;code&gt;NOERROR&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;¿Para qué son utilizados los mensajes NXDOMAIN y NOERROR?&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;NXDOMAIN&lt;/strong&gt;: Específicamente útil para informar a los resolvers DNS y a los usuarios que el nombre de dominio que están tratando de alcanzar no existe y que deberían verificar si lo han escrito correctamente.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;NOERROR&lt;/strong&gt;: Indica que la consulta fue procesada correctamente y que la infraestructura de DNS está funcionando como se espera. Un estado &lt;code&gt;NOERROR&lt;/code&gt; puede acompañarse de respuestas (si el dominio existe y tiene registros) o no (si la consulta fue por un tipo de registro no existente para ese dominio).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En tu caso específico, &lt;code&gt;NXDOMAIN&lt;/code&gt; indica que &lt;code&gt;www.practica2.redes.unlp.edu.ar&lt;/code&gt; no es un nombre de dominio existente bajo &lt;code&gt;redes.unlp.edu.ar&lt;/code&gt;, y no se encontraron registros A asociados a él. El servidor proporcionó su registro SOA como parte de la respuesta autoritativa para mostrar que la respuesta viene del servidor autorizado para el dominio &lt;code&gt;redes.unlp.edu.ar&lt;/code&gt;, pero que el subdominio consultado no existe en su configuración de DNS.&lt;/p&gt;
&lt;h2&gt;Mas sobre los codigos de respuestas DNS&lt;/h2&gt;
&lt;p&gt;Los códigos de respuesta DNS, también conocidos como RCODEs, son parte de la sección de encabezado en los mensajes DNS y proporcionan un estado sobre el éxito o fracaso de la consulta DNS. Aquí están los RCODEs más comunes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;NOERROR&lt;/strong&gt; (0): La consulta se completó con éxito y no hubo errores.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;FORMERR&lt;/strong&gt; (1): Error de formato; el servidor DNS fue incapaz de interpretar la solicitud.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SERVFAIL&lt;/strong&gt; (2): Fallo del servidor; el servidor DNS fue incapaz de procesar la consulta debido a un problema con el mismo.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;NXDOMAIN&lt;/strong&gt; (3): Dominio inexistente; el nombre de dominio consultado no existe.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;NOTIMP&lt;/strong&gt; (4), también conocido como &lt;strong&gt;NOTIMPL&lt;/strong&gt; (No implementado): El servidor DNS no implementa el tipo de consulta solicitada.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;REFUSED&lt;/strong&gt; (5): La operación fue rechazada por el servidor DNS por razones de política.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;YXDOMAIN&lt;/strong&gt; (6): Nombre de dominio que no debería existir, existe.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;YXRRSET&lt;/strong&gt; (7): Conjunto de registros que no debería existir, existe.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;NXRRSET&lt;/strong&gt; (8): Conjunto de registros que debería existir, no existe.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;NOTAUTH&lt;/strong&gt; (9), también conocido como &lt;strong&gt;NOTAUTH&lt;/strong&gt; (No autorizado): El servidor no está autorizado para la zona especificada.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;NOTZONE&lt;/strong&gt; (10): Nombre que no está dentro de la zona.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Los códigos de 11 a 15 son reservados para uso futuro. Además, hay extensiones para RCODEs como:&lt;/p&gt;
&lt;ol start=&quot;16&quot;&gt;
&lt;li&gt;&lt;strong&gt;BADVERS&lt;/strong&gt; (16): La primera implementación del código de respuesta extendido (EDNS) introdujo este código para señalar problemas con la versión de EDNS.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Los códigos de respuesta extendidos se pueden encontrar en la sección OPT PSEUDOSECTION de un mensaje DNS cuando EDNS está en uso. Los códigos de respuesta proporcionan información crítica para el diagnóstico de problemas en las consultas DNS y son una herramienta importante para los administradores de sistemas y redes al solucionar problemas de resolución de nombres.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 12&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Investigue los comando nslookup y host. ¿Para qué sirven?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;nslookup&lt;/strong&gt; y &lt;strong&gt;host&lt;/strong&gt; son herramientas de línea de comandos utilizadas para consultar el sistema de nombres de dominio (DNS) y obtener información sobre registros DNS de dominios específicos. Ambas pueden ser usadas para realizar una variedad de consultas DNS.&lt;/p&gt;
&lt;p&gt;Intente con ambos comandos obtener:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Dirección IP de www.redes.unlp.edu.ar.&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;nslookup www.redes.unlp.edu.ar
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;host www.redes.unlp.edu.ar
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/a54313eb-bc72-493e-a3ca-3ecca52eb6ec&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/d62416a6-8dcc-4c08-bc10-8635cb5e3eea&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Servidores de correo del dominio redes.unlp.edu.ar.&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;nslookup -query=MX redes.unlp.edu.ar
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Con el flag &lt;code&gt;-query=MX&lt;/code&gt;, &lt;code&gt;nslookup&lt;/code&gt; buscará los registros MX que indican los servidores de correo para el dominio.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/d95c93f7-179d-43cb-8305-dcab4ce4b7e3&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;host -t MX redes.unlp.edu.ar
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;El flag &lt;code&gt;-t MX&lt;/code&gt; especifica que queremos buscar los registros MX.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/ae05a8ad-e016-4e81-a8d7-2ab8af8a1ba8&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Servidores de DNS del dominio redes.unlp.edu.ar&lt;/code&gt; // (registros NS)?&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;nslookup -query=NS redes.unlp.edu.ar
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esta consulta devuelve los registros NS, que son los servidores de nombres autoritativos para el dominio.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/79bcbada-369a-492a-96dc-260524cbc163&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;host -t NS redes.unlp.edu.ar
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Al igual que con &lt;code&gt;nslookup&lt;/code&gt;, el flag &lt;code&gt;-t NS&lt;/code&gt; le dice a &lt;code&gt;host&lt;/code&gt; que busque los registros NS.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/a56532a9-1953-4f88-a52e-df20b38c4b8c&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 13&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;¿Qué función cumple en Linux/Unix el archivo /etc/hosts o en Windows el archivo \WINDOWS\system32\drivers\etc\hosts?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;En los sistemas operativos Linux/Unix, el archivo &lt;code&gt;/etc/hosts&lt;/code&gt; y en Windows, el archivo &lt;code&gt;\WINDOWS\system32\drivers\etc\hosts&lt;/code&gt;, tienen una función muy importante: proporcionar una tabla de nombres de host a direcciones IP localmente estática.&lt;/p&gt;
&lt;p&gt;Cuando intentas acceder a un recurso de red utilizando un nombre de dominio, como &lt;code&gt;www.ejemplo.com&lt;/code&gt;, el sistema operativo normalmente consulta primero el archivo &lt;code&gt;hosts&lt;/code&gt; antes de hacer una consulta al sistema de nombres de dominio (DNS) en la red. Si una entrada correspondiente al nombre de dominio que se está buscando se encuentra en el archivo &lt;code&gt;hosts&lt;/code&gt;, el sistema operativo utiliza la dirección IP especificada allí y no realiza una consulta DNS externa.&lt;/p&gt;
&lt;p&gt;Estas son algunas de las funciones clave del archivo &lt;code&gt;hosts&lt;/code&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Resolución de Nombres&lt;/strong&gt;: Permite que el sistema operativo resuelva nombres de host a direcciones IP sin consultar un servidor DNS. Esto es útil para la red local o cuando se requiere un control específico sobre la resolución de nombres.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Pruebas y Desarrollo&lt;/strong&gt;: Es comúnmente utilizado por desarrolladores para redirigir nombres de dominio a direcciones IP locales o de prueba durante el desarrollo de software y pruebas de aplicaciones web.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Bloqueo de Sitios Web&lt;/strong&gt;: Al asignar nombres de dominio conocidos a direcciones no válidas o locales (como 127.0.0.1), los usuarios pueden bloquear efectivamente el acceso a sitios web indeseados.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Rendimiento y Caché&lt;/strong&gt;: Al almacenar las direcciones IP localmente, el archivo &lt;code&gt;hosts&lt;/code&gt; puede reducir los tiempos de respuesta al eliminar la necesidad de realizar consultas DNS para nombres de host comúnmente accedidos o críticos.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Redundancia y Seguridad&lt;/strong&gt;: En caso de que el DNS no esté disponible o haya sido comprometido, el archivo &lt;code&gt;hosts&lt;/code&gt; puede proporcionar una capa adicional de redundancia para resolver nombres de host críticos a sus direcciones IP.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;El archivo &lt;code&gt;hosts&lt;/code&gt; tiene una estructura simple, donde cada entrada consta de una dirección IP seguida de uno o más nombres de host. Las modificaciones en este archivo deben realizarse con cuidado, ya que los errores pueden provocar problemas de conectividad o bloqueos inadvertidos.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 14&lt;/h2&gt;
&lt;p&gt;Abra el programa Wireshark para comenzar a capturar el tráfico de red en la interfaz con IP &lt;code&gt;172.28.0.1&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Una vez abierto realice una consulta DNS con el comando dig para averiguar el registro MX de redes.unlp.edu.ar y luego, otra para averiguar los registros NS correspondientes al dominio redes.unlp.edu.ar.&lt;/p&gt;
&lt;p&gt;Analice la información proporcionada por dig y compárelo con la captura.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/9b89ca2e-37fb-4e2c-af2e-92a5c7fa45a8&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dig mx redes.unlp.edu.ar +noall +answer
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/f2edf8e0-804e-4816-a1ea-c82df2a95964&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dig ns redes.unlp.edu.ar +noall +answer
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/fcfa7401-0347-4395-9719-ba7d10f5f67a&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 15&lt;/h2&gt;
&lt;p&gt;Dada la siguiente situación: “Una PC en una red determinada, con acceso a Internet, utiliza los servicios de DNS de un servidor de la red”. Analice&lt;/p&gt;
&lt;h4&gt;Parte a&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;¿Qué tipo de consultas (iterativas o recursivas) realiza la PC a su servidor de DNS?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Cuando una PC realiza consultas a su servidor DNS local (configurado habitualmente por DHCP o manualmente en la configuración de red), generalmente realiza &lt;strong&gt;consultas recursivas&lt;/strong&gt;. Esto significa que la PC le pide al servidor DNS que le dé una respuesta definitiva. Si el servidor DNS local no tiene la respuesta almacenada en su caché, asume la responsabilidad de realizar las consultas adicionales necesarias para resolver el nombre completo, sin requerir más acción por parte de la PC.&lt;/p&gt;
&lt;h4&gt;Parte b&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;¿Qué tipo de consultas (iterativas o recursivas) realiza el servidor de DNS para resolver requerimientos de usuario como el anterior? &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿A quién le realiza estas consultas?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El servidor DNS configurado para resolver los nombres de dominio por parte de la PC realizará &lt;strong&gt;consultas iterativas&lt;/strong&gt; cuando hable con otros servidores DNS en Internet. En una consulta iterativa, el servidor DNS local pregunta a otro servidor DNS (comenzando generalmente por los servidores raíz, seguidos por los servidores de los TLD y finalmente los servidores autoritativos para el dominio en cuestión) y si ese servidor no conoce la respuesta, devolverá la dirección de otro servidor DNS más cercano al nombre de dominio que se está buscando.&lt;/p&gt;
&lt;p&gt;El servidor DNS local continuará esta serie de consultas iterativas hasta que encuentre un servidor que pueda responder con una autoridad (es decir, un servidor de nombres que alberga los registros DNS para el dominio solicitado) o hasta que determine que el dominio no existe (NXDOMAIN). Al final del proceso iterativo, el servidor DNS local tendrá la respuesta completa, que luego enviará de vuelta a la PC en respuesta a su consulta recursiva original.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 16&lt;/h2&gt;
&lt;h3&gt;Practica 3 Ejercicio 16&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Relacione DNS con HTTP&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;DNS (Sistema de Nombres de Dominio) y HTTP (Protocolo de Transferencia de Hipertexto) trabajan juntos para facilitar la navegación por Internet, pero cumplen funciones diferentes en el proceso:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;DNS&lt;/strong&gt; se encarga de traducir los nombres de dominio (como &quot;www.example.com&quot;) en direcciones IP (como &quot;93.184.216.34&quot;). Esto es necesario porque aunque los humanos encuentran conveniente usar nombres de dominio fáciles de recordar para acceder a sitios web, las redes informáticas utilizan direcciones IP para localizar y comunicarse entre sí.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;HTTP&lt;/strong&gt; es un protocolo de la capa de aplicación utilizado para la transmisión de documentos hipermedia, como HTML. Es el fundamento de cualquier intercambio de datos en la Web y un protocolo cliente-servidor, lo que significa que las solicitudes son iniciadas por el receptor, usualmente el navegador web, permitiendo la recuperación de recursos web de servidores.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;¿Se puede navegar si no hay servicio de DNS?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Sí, es posible navegar por Internet sin un servicio de DNS, pero con limitaciones significativas:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Uso Directo de Direcciones IP&lt;/strong&gt;: Puedes acceder a sitios web directamente usando sus direcciones IP en lugar de sus nombres de dominio en la barra de direcciones del navegador. Por ejemplo, ingresar &lt;code&gt;http://93.184.216.34&lt;/code&gt; en lugar de &lt;code&gt;http://www.example.com&lt;/code&gt;. Sin embargo, esto no siempre funciona para sitios web hospedados en servidores de alojamiento compartido donde múltiples dominios comparten la misma dirección IP y dependen del encabezado del host en la solicitud HTTP para servir el sitio correcto.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Archivo Hosts&lt;/strong&gt;: Puedes utilizar el archivo &lt;code&gt;hosts&lt;/code&gt; de tu sistema operativo para mapear manualmente nombres de dominio a direcciones IP. Al añadir entradas para los sitios web que deseas visitar, puedes navegar a ellos usando nombres de dominio sin necesidad de consultar un servidor DNS. Este método es práctico para un número pequeño de sitios web, pero no es escalable para la navegación general por Internet.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Aunque técnicamente es posible navegar sin DNS, la conveniencia, la escalabilidad y la flexibilidad que proporciona DNS lo hacen esencial para la experiencia moderna de Internet, facilitando el acceso a innumerables recursos en línea sin necesidad de recordar direcciones IP específicas.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 17&lt;/h2&gt;
&lt;p&gt;Observar el siguiente gráfico y contestar:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/9e3ee962-c008-46cd-bd18-15e2a0c4f8d1&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Si la PC-A, que usa comoservidor de DNSa &quot;DNSServer&quot;, desea obtener la IP de www.unlp.edu.ar, cuáles serían, y en qué orden, los pasos que se ejecutarán para obtener la respuesta.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Dónde es recursiva la consulta? ¿Y dónde iterativa?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La imagen muestra una red con varios servidores DNS y un cliente (PC-A) que desea resolver la dirección IP de &lt;code&gt;www.unlp.edu.ar&lt;/code&gt;. Aquí está el proceso paso a paso que seguirá la consulta DNS:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;PC-A solicita la dirección IP para &lt;code&gt;www.unlp.edu.ar&lt;/code&gt;&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La consulta comienza cuando PC-A solicita a su servidor DNS local (192.168.10.2) la resolución del nombre &lt;code&gt;www.unlp.edu.ar&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Consulta Recursiva al Servidor DNS Local&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PC-A realiza una &lt;strong&gt;consulta recursiva&lt;/strong&gt; al servidor DNS local. Esto significa que PC-A espera una respuesta definitiva y no participa en el proceso de resolución.&lt;/li&gt;
&lt;li&gt;Si el servidor DNS local tiene la respuesta en su caché y está aún dentro del tiempo de vida (TTL), la devolverá directamente a PC-A. Si no, continuará con el proceso.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Servidor DNS Local Realiza Consultas Iterativas&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El servidor DNS local no tiene la información en caché, por lo que realiza &lt;strong&gt;consultas iterativas&lt;/strong&gt; a otros servidores DNS para resolver la dirección.&lt;/li&gt;
&lt;li&gt;Primero consulta a un servidor raíz DNS (por ejemplo, A.Root-Server 205.10.100.10), que no resuelve la dirección sino que le indica dónde encontrar más información, en este caso, el servidor del TLD &lt;code&gt;.ar&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Consulta al Servidor del TLD .ar&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A continuación, el servidor DNS local consulta al servidor DNS del TLD &lt;code&gt;.ar&lt;/code&gt; (a.dns.ar 200.108.145.50), que tampoco resolverá directamente la consulta, sino que dirigirá al servidor DNS local hacia el servidor de nombres autoritativo para el dominio &lt;code&gt;edu.ar&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Consulta al Servidor del Dominio edu.ar&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Luego, el servidor DNS local consulta al servidor de nombres para &lt;code&gt;edu.ar&lt;/code&gt; (ns1.riu.edu.ar 170.210.0.18) que proporciona información sobre el servidor de nombres para &lt;code&gt;unlp.edu.ar&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Consulta al Servidor de Nombres de unlp.edu.ar&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Por último, el servidor DNS local hace una consulta al servidor de nombres para &lt;code&gt;unlp.edu.ar&lt;/code&gt; (en la imagen no se muestra explícitamente este servidor DNS, pero asumimos que es donde el servidor DNS local obtendrá la información final) que finalmente le dará la dirección IP para &lt;code&gt;www.unlp.edu.ar&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Respuesta a PC-A&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El servidor DNS local regresa la respuesta a PC-A con la dirección IP de &lt;code&gt;www.unlp.edu.ar&lt;/code&gt;, completando la solicitud inicial. Esta respuesta es el final de la consulta recursiva inicial realizada por PC-A.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En este proceso, la consulta recursiva se realiza entre el cliente (PC-A) y su servidor DNS local. Las consultas iterativas son realizadas por el servidor DNS local cuando habla con otros servidores DNS en la jerarquía hasta obtener la respuesta final. Cada servidor consultado proporciona una pieza del rompecabezas que permite al servidor DNS local llegar al servidor de nombres que tiene la autoridad directa sobre el dominio que se está consultando.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 18&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;¿A quién debería consultar para que la respuesta sobre www.google.com sea autoritativa?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/0873d6f5-cdbe-4a89-a4d2-57e560eaeaf3&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Qué sucede si al servidor elegido en el paso anterior se lo consulta por www.info.unlp.edu.ar?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Y si la consulta es al servidor 8.8.8.8?&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Consulta para obtener el servidor DNS autoritativo de &lt;code&gt;www.google.com&lt;/code&gt;&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dig NS google.com +short
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Este comando te dará una lista de los servidores DNS autoritativos para &lt;code&gt;google.com&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Consulta para obtener una respuesta autoritativa de &lt;code&gt;www.google.com&lt;/code&gt;&lt;/strong&gt;:
Selecciona uno de los servidores obtenidos en el paso anterior y realiza la consulta de registro A directamente a ese servidor:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dig @ns-autoritativo.google.com A www.google.com +noall +answer
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Reemplaza &lt;code&gt;ns-autoritativo.google.com&lt;/code&gt; con el servidor real obtenido en el primer paso.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Consulta al servidor DNS autoritativo de &lt;code&gt;google.com&lt;/code&gt; para &lt;code&gt;www.info.unlp.edu.ar&lt;/code&gt;&lt;/strong&gt;:
Si realizas esta consulta, lo más probable es que recibas un error o una respuesta no autoritativa, ya que ese servidor no tiene información sobre el dominio &lt;code&gt;unlp.edu.ar&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dig @ns-autoritativo.google.com A www.info.unlp.edu.ar +noall +answer
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Consulta al servidor público 8.8.8.8&lt;/strong&gt;:
Para realizar una consulta recursiva para cualquier dominio utilizando el servidor DNS público 8.8.8.8, usarías:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dig @8.8.8.8 A www.google.com +noall +answer
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;y para &lt;code&gt;www.info.unlp.edu.ar&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dig @8.8.8.8 A www.info.unlp.edu.ar +noall +answer
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Estos comandos solicitan al servidor público de Google que realice la resolución de DNS y te proporcione los resultados.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Con estos comandos puedes obtener información tanto de dominios específicos como de cualquier otro nombre de dominio a través de un servidor DNS público. Los resultados no serán autoritativos si el servidor que realizas la consulta no es el servidor DNS autoritativo para ese dominio. Sin embargo, servidores como 8.8.8.8 son resolvers recursivos confiables que obtendrán la información de los servidores autoritativos en tu nombre.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 19&lt;/h2&gt;
&lt;p&gt;Vamos a desglosar tus preguntas y responderlas en detalle con base en el contexto que proporcionas sobre las consultas DNS autoritativas y consultas a servidores específicos para dominios diferentes.&lt;/p&gt;
&lt;h3&gt;Pregunta 1: Consulta Autoritativa para www.google.com&lt;/h3&gt;
&lt;p&gt;Para obtener una respuesta autoritativa sobre &lt;code&gt;www.google.com&lt;/code&gt;, deberías consultar a uno de los servidores de nombres autoritativos de &lt;code&gt;google.com&lt;/code&gt;. Puedes encontrar estos servidores utilizando el comando:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dig NS google.com +short
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esto te proporcionará una lista de los servidores de nombres autoritativos para el dominio &lt;code&gt;google.com&lt;/code&gt;. Luego, para obtener una respuesta específicamente autoritativa para &lt;code&gt;www.google.com&lt;/code&gt;, deberías seleccionar uno de estos servidores y hacer una consulta directamente a él:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dig @ns-autoritativo.google.com A www.google.com +noall +answer
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Reemplaza &lt;code&gt;ns-autoritativo.google.com&lt;/code&gt; con uno de los nombres de servidor que obteniste del comando anterior.&lt;/p&gt;
&lt;h3&gt;Pregunta 2: Consulta al Servidor Autoritativo de Google para www.info.unlp.edu.ar&lt;/h3&gt;
&lt;p&gt;Si consultas al servidor DNS autoritativo para &lt;code&gt;google.com&lt;/code&gt; acerca de &lt;code&gt;www.info.unlp.edu.ar&lt;/code&gt;, es muy probable que recibas una respuesta de tipo &quot;REFUSED&quot; o simplemente no obtengas una respuesta autoritativa. Esto es porque los servidores de nombres de Google son autoritativos solo para los dominios bajo &lt;code&gt;google.com&lt;/code&gt; y no tienen información sobre dominios externos como &lt;code&gt;unlp.edu.ar&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Pregunta 3: Consulta al Servidor 8.8.8.8&lt;/h3&gt;
&lt;p&gt;Cuando consultas al servidor DNS público 8.8.8.8 (propiedad de Google y utilizado para la resolución DNS pública), este actuará como un resolver recursivo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Para &lt;code&gt;www.google.com&lt;/code&gt;&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dig @8.8.8.8 A www.google.com +noall +answer
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esta consulta le pide a 8.8.8.8 que resuelva la dirección de &lt;code&gt;www.google.com&lt;/code&gt;. Como 8.8.8.8 es un servidor recursivo y no un servidor autoritativo para &lt;code&gt;google.com&lt;/code&gt;, buscará la información contactando a los servidores autoritativos en tu nombre y luego te devolverá la respuesta.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Para &lt;code&gt;www.info.unlp.edu.ar&lt;/code&gt;&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dig @8.8.8.8 A www.info.unlp.edu.ar +noall +answer
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;De manera similar, si consultas a 8.8.8.8 para &lt;code&gt;www.info.unlp.edu.ar&lt;/code&gt;, el servidor realizará la recursión para buscar la información desde los servidores de nombres autoritativos para &lt;code&gt;unlp.edu.ar&lt;/code&gt; y te proporcionará los resultados.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Resumen&lt;/h3&gt;
&lt;p&gt;En resumen, para obtener respuestas autoritativas, debes consultar a los servidores de nombres que están directamente asignados a gestionar el dominio específico. Los servidores DNS públicos como 8.8.8.8 pueden resolver cualquier dominio pero proporcionan respuestas no autoritativas que, sin embargo, son válidas y obtenidas de servidores autoritativos mediante el proceso de resolución recursiva.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio Parcial&lt;/h2&gt;
&lt;p&gt;En base a la siguiente salida de dig, conteste las consignas. Justifique en todos los casos.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;1 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 4, ADDITIONAL: 4
2 
3 ;; QUESTION SECTION:
4 ;ejemplo.com. IN __
5  
6 ;; ANSWER SECTION: 
7 ejemplo.com. 1634 IN __ 10 srv01.ejemplo.com.
8 ejemplo.com. 1634 IN __ 5 srv00.ejemplo.com.
9
10 ;; AUTHORITY SECTION:
11 ejemplo.com. 92354 IN __ ss00.ejemplo.com.
12 ejemplo.com. 92354 IN __ ss02.ejemplo.com.
13 ejemplo.com. 92354 IN __ ss01.ejemplo.com.
14 ejemplo.com. 92354 IN __ ss03.ejemplo.com.
15
16 ;; ADDITIONAL SECTION:
17 srv01.ejemplo.com. 272 IN __ 64.233.186.26
18 srv01.ejemplo.com. 240 IN __ 2800:3f0:4003:c00::1a
19 srv00.ejemplo.com. 272 IN __ 74.125.133.26
20 srv00.ejemplo.com. 240 IN __ 2a00:1450:400c:c07::1b
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Para analizar la salida del comando &lt;code&gt;dig&lt;/code&gt; y responder a tus preguntas, necesitamos primero completar los espacios en blanco (&lt;code&gt;__&lt;/code&gt;) con los registros correctos, y luego interpretar la información.&lt;/p&gt;
&lt;h3&gt;a. Completar los registros correctos&lt;/h3&gt;
&lt;p&gt;Basándonos en el contexto típico de la salida de &lt;code&gt;dig&lt;/code&gt;, los espacios en blanco probablemente corresponden a tipos de registros DNS. Aquí está la salida completada de acuerdo a lo que normalmente esperaríamos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;QUESTION SECTION:&lt;/strong&gt; Aquí deberíamos tener el tipo de registro que se estaba consultando, como &lt;code&gt;A&lt;/code&gt; para direcciones IPv4, &lt;code&gt;AAAA&lt;/code&gt; para IPv6, &lt;code&gt;MX&lt;/code&gt; para mail servers, etc. Dado que no especificas, asumiremos que se trata de registros &lt;code&gt;MX&lt;/code&gt; (Mail Exchange) basados en la respuesta.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;;ejemplo.com. IN MX
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ANSWER SECTION:&lt;/strong&gt; Se consultaron registros, probablemente &lt;code&gt;MX&lt;/code&gt; dado que hay una prioridad (10 y 5).&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ejemplo.com. 1634 IN MX 10 srv01.ejemplo.com.
ejemplo.com. 1634 IN MX 5 srv00.ejemplo.com.
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;AUTHORITY SECTION:&lt;/strong&gt; Aquí, probablemente se consultaron registros &lt;code&gt;NS&lt;/code&gt; (Name Server), indicando qué servidores son autoritativos para el dominio.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ejemplo.com. 92354 IN NS ss00.ejemplo.com.
ejemplo.com. 92354 IN NS ss02.ejemplo.com.
ejemplo.com. 92354 IN NS ss01.ejemplo.com.
ejemplo.com. 92354 IN NS ss03.ejemplo.com.
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ADDITIONAL SECTION:&lt;/strong&gt; Se proporcionan las direcciones IP para los servidores especificados en las secciones anteriores, tanto direcciones IPv4 (&lt;code&gt;A&lt;/code&gt;) como IPv6 (&lt;code&gt;AAAA&lt;/code&gt;).&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;srv01.ejemplo.com. 272 IN A 64.233.186.26
srv01.ejemplo.com. 240 IN AAAA 2800:3f0:4003:c00::1a
srv00.ejemplo.com. 272 IN A 74.125.133.26
srv00.ejemplo.com. 240 IN AAAA 2a00:1450:400c:c07::1b
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;b. ¿Es una respuesta autoritativa?&lt;/h3&gt;
&lt;p&gt;No, la respuesta no es autoritativa. Los flags no incluyen &lt;code&gt;aa&lt;/code&gt; (Authoritative Answer).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;¿A qué servidor le preguntaría para obtener una respuesta autoritativa?&lt;/strong&gt;&lt;br&gt;
Para obtener una respuesta autoritativa, deberías consultar directamente a uno de los servidores de nombres listados en la &lt;strong&gt;AUTHORITY SECTION&lt;/strong&gt;. Por ejemplo, podrías hacer un &lt;code&gt;dig @ss00.ejemplo.com MX ejemplo.com +noall +answer&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;c. ¿La consulta fue recursiva? ¿Y la respuesta?&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Consulta recursiva:&lt;/strong&gt; Sí, la consulta fue recursiva, lo que se indica por la presencia del flag &lt;code&gt;rd&lt;/code&gt; (Recursion Desired). Esto significa que el cliente solicitó al servidor que realice una búsqueda completa hasta obtener la información requerida.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La respuesta:&lt;/strong&gt; La presencia del flag &lt;code&gt;ra&lt;/code&gt; (Recursion Available) en la respuesta indica que el servidor DNS es capaz de realizar recursión. Sin embargo, la respuesta recibida no es autoritativa.&lt;/p&gt;
&lt;h3&gt;d. ¿Qué representan los valores 10 y 5 en las líneas (1) y (2)?&lt;/h3&gt;
&lt;p&gt;Los números &lt;code&gt;10&lt;/code&gt; y &lt;code&gt;5&lt;/code&gt; representan las prioridades de los servidores de correo en los registros &lt;code&gt;MX&lt;/code&gt;. En el contexto de registros &lt;code&gt;MX&lt;/code&gt;, una prioridad más baja indica un servidor de correo más preferido. Por lo tanto:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;5 srv00.ejemplo.com.&lt;/code&gt; indica que &lt;code&gt;srv00.ejemplo.com&lt;/code&gt; es el servidor de correo preferido.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;10 srv01.ejemplo.com.&lt;/code&gt; indica que &lt;code&gt;srv01.ejemplo.com&lt;/code&gt; es menos preferido y sería usado si el primero no está disponible.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estas prioridades ayudan a dirigir el tráfico de correo electrónico de manera eficiente, asegurando que se utilice primero el servidor más deseable o más confiable.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Probando mas comandos&lt;/h2&gt;
&lt;p&gt;Queria tener un resumen a medida que voy haciendo la practica, separando bien la teoria de la practica&lt;/p&gt;
&lt;h2&gt;Conceptos antes de la practica&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Investigue y describa cómo funciona el DNS.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El Sistema de Nombres de Dominio (DNS) traduce nombres de dominio amigables para el humano (como &quot;www.example.com&quot;) a direcciones IP numéricas (como &quot;192.0.2.1&quot;) que las computadoras utilizan para identificar entre sí en la red.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Cuál es su objetivo?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El objetivo del DNS es permitir a las personas acceder a sitios web utilizando nombres de dominio fáciles de recordar en lugar de las complicadas direcciones IP, facilitando así la navegación en internet. Funciona a través de una red distribuida de servidores que resuelven nombres de dominio a direcciones IP.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Qué es un root server?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Un &lt;strong&gt;servidor raíz&lt;/strong&gt; (root server) en el contexto del DNS es uno de los servidores DNS que contiene una lista completa de los nombres de dominio y sus direcciones IP asociadas para los dominios de nivel superior (TLDs). Es la primera parada en la resolución de nombres de dominio en Internet, dirigida a encontrar la dirección IP de un TLD específico. Los root servers son una parte crítica de la infraestructura de Internet, asegurando que la resolución de nombres funcione de manera eficiente y efectiva.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Qué es un generic top-level domain (gtld)?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Un &lt;strong&gt;dominio de nivel superior genérico&lt;/strong&gt; (generic top-level domain o gTLD) es una categoría de dominios de nivel superior en el DNS que no está asociada a un país específico. Originalmente, los gTLDs incluían dominios como .com, .org, .net, entre otros, destinados a entidades comerciales, organizaciones y redes. Desde 2012, el número de gTLDs se ha expandido significativamente para incluir una amplia variedad de nombres como .academy, .bike, .beer, entre otros, permitiendo una mayor personalización y especificación para las direcciones de sitios web .&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Qué diferencia una consulta DNS recursiva de una iterativa?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La diferencia principal entre una consulta DNS recursiva y una iterativa radica en el método de resolución y el grado de trabajo realizado por los servidores de nombres involucrados:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Consulta DNS recursiva&lt;/strong&gt;:
En una consulta recursiva, el cliente (generalmente el resolver DNS del sistema operativo del usuario) solicita una resolución completa del nombre a un servidor DNS. Si este servidor no tiene la respuesta en su caché, se hace cargo de la tarea completa de resolver la dirección, realizando tantas consultas adicionales como sean necesarias a otros servidores DNS en la jerarquía para obtener la respuesta definitiva. Una vez que tiene la respuesta completa, se la devuelve al cliente original. Este método es más cómodo para el cliente, ya que solo tiene que hacer una solicitud y esperar la respuesta sin realizar más acciones.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Consulta DNS iterativa&lt;/strong&gt;:
En una consulta iterativa, el cliente solicita una dirección a un servidor DNS, pero si este servidor no tiene la respuesta exacta, en lugar de resolver la consulta por completo, devuelve la mejor referencia que tiene a otro servidor DNS más cercano a la información solicitada. Luego, el cliente es responsable de consultar a este nuevo servidor DNS. Este proceso se repite iterativamente: el cliente va de servidor en servidor hasta que encuentra uno que pueda responder la pregunta directamente (con una respuesta autoritativa) o hasta que se agotan los servidores a consultar. En este caso, el trabajo de resolver el nombre se distribuye entre el cliente y varios servidores DNS.&lt;/p&gt;
&lt;p&gt;La consulta recursiva es generalmente utilizada por los clientes finales ya que simplifica el proceso de resolución, mientras que la iterativa es utilizada entre servidores DNS para distribuir la carga y controlar el flujo de información.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Qué es una respuesta del tipo autoritativa?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Una &lt;strong&gt;respuesta autoritativa&lt;/strong&gt; en DNS es aquella que proviene de un servidor de nombres que tiene la autoridad directa sobre el nombre de dominio consultado. Esto significa que el servidor de nombres puede proporcionar una respuesta definitiva a una consulta de nombre de dominio sin tener que referirse a otro servidor de nombres. Las respuestas autoritativas se utilizan para confirmar la existencia de un registro de dominio y su correspondiente información, como la dirección IP asociada. En el proceso de resolución de nombres de DNS, una respuesta autoritativa se considera la fuente definitiva y fiable para la información solicitada sobre un dominio .&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Cuando un dominio cuenta con más de un servidor, uno de ellos es el primario (o maestro) y todos los demás son los secundarios (o esclavos).&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La configuración de servidores DNS primarios (maestros) y secundarios (esclavos) se utiliza para la gestión eficaz de los registros DNS y para asegurar la redundancia y consistencia de la información de dominio a través de Internet.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Cuál es la razón de que sea así?&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Sincronización y Consistencia de Datos&lt;/strong&gt;: El servidor DNS primario mantiene la versión autoritativa de los registros de zona del dominio. Cualquier cambio en la configuración del DNS, como añadir o modificar registros A, MX, CNAME, etc., se realiza primero en el servidor primario. Los servidores secundarios luego sincronizan estos cambios desde el primario, asegurando que todos los servidores proporcionen respuestas consistentes a las consultas DNS.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Redundancia y Disponibilidad&lt;/strong&gt;: Al tener múltiples servidores DNS secundarios, se garantiza que si el servidor primario falla o se vuelve inaccesible, los servidores secundarios pueden continuar respondiendo las consultas DNS, manteniendo la disponibilidad del servicio o sitio web asociado al dominio. Esto es crucial para la alta disponibilidad y la resistencia a fallos.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Distribución de Carga&lt;/strong&gt;: Los servidores secundarios también ayudan a distribuir la carga de las solicitudes DNS, especialmente para sitios web de alto tráfico. Al distribuir las consultas entre varios servidores, se reduce la carga en el servidor primario y se mejora el tiempo de respuesta para los usuarios finales.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Seguridad&lt;/strong&gt;: En algunos casos, mantener los servidores secundarios puede aumentar la seguridad. Por ejemplo, se puede configurar el servidor primario en una red segura, no accesible directamente desde Internet, y solo permitir que los servidores secundarios, ubicados en diferentes redes, sincronicen los datos y respondan a las solicitudes externas.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Eficiencia en la Actualización de Datos&lt;/strong&gt;: Al realizar cambios solo en el servidor primario, se simplifica la administración de los registros DNS. Los servidores secundarios automáticamente obtienen y replican estos cambios a través de un proceso llamado transferencia de zona, lo que facilita la gestión de los registros DNS para los administradores.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Esta estructura de primario-secundario asegura que los cambios se propaguen de manera controlada y eficiente a través de la infraestructura de DNS, manteniendo la integridad y la disponibilidad de los datos críticos para el funcionamiento de Internet.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Registros DNS&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Asocia un nombre de dominio con una dirección IPv4. Este registro se utiliza para traducir nombres de dominio a sus correspondientes direcciones IP para que los navegadores puedan encontrar y acceder a los sitios web.&lt;/p&gt;
&lt;p&gt;Indica el servidor de correo que debe ser utilizado para entregar el correo electrónico a un dominio. Este registro es esencial para la configuración del correo electrónico y dirige el correo entrante a los servidores de correo adecuados.&lt;/p&gt;
&lt;p&gt;Realiza la función opuesta a la de los registros A y AAAA; asocia una dirección IP con un nombre de dominio canónico. Se utiliza principalmente para la resolución inversa de DNS, es decir, cuando se traduce una dirección IP en un nombre de dominio.&lt;/p&gt;
&lt;p&gt;Similar al registro A, pero se utiliza para asociar un nombre de dominio con una dirección IPv6.&lt;/p&gt;
&lt;p&gt;Proporciona información sobre los servicios disponibles en un dominio. Especifica el nombre de host y el puerto para servicios específicos (como VoIP o mensajería instantánea), permitiendo a los dominios definir la localización de servidores y servicios específicos.&lt;/p&gt;
&lt;p&gt;Especifica los servidores DNS autorizados para un dominio. Estos servidores DNS son los que contienen los registros DNS de ese dominio y pueden responder consultas relativas a él.&lt;/p&gt;
&lt;p&gt;Permite que un dominio se asocie con otro nombre de dominio, el &quot;nombre canónico&quot;. Se utiliza para apuntar varios nombres de dominio a un mismo lugar, facilitando la gestión de sitios que pueden ser accedidos mediante múltiples nombres.&lt;/p&gt;
&lt;p&gt;Contiene información esencial sobre el dominio y la zona, como el servidor DNS principal, el correo electrónico del administrador, el intervalo de actualización y la caducidad. Es el registro inicial de cualquier zona de DNS y establece la autoridad del dominio.&lt;/p&gt;
&lt;p&gt;Permite que los administradores inserten texto arbitrario en un registro DNS. Comúnmente se utiliza para verificar la propiedad del dominio, implementar políticas de seguridad del correo electrónico como SPF (Sender Policy Framework) y DKIM (DomainKeys Identified Mail), y otras aplicaciones que requieren leer datos en forma de texto de los registros DNS.&lt;/p&gt;
&lt;h2&gt;Practica&lt;/h2&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#registro-a&quot;&gt;dig www.redes.unlp.edu.ar A&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#registro-mx&quot;&gt;dig www.redes.unlp.edu.ar MX (Falta)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#registro-ptr&quot;&gt;dig www.redes.unlp.edu.ar PTR&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#registro-srv&quot;&gt;dig www.redes.unlp.edu.ar SRV&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#registro-ns&quot;&gt;dig redes.unlp.edu.ar NS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#registro-cname&quot;&gt;dig redes.unlp.edu.ar CNAME&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#registro-soa&quot;&gt;dig redes.unlp.edu.ar SOA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#registro-txt&quot;&gt;dig redes.unlp.edu.ar TXT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejemplos-de-varios-comandos&quot;&gt;Ejemplos Varios&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ver-registros-para-una-url&quot;&gt;Ver los registros configurados para una URL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Registro A&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dig www.redes.unlp.edu.ar A
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;redes@debian:~$ dig www.redes.unlp.edu.ar A

; &amp;#x3C;&amp;#x3C;&gt;&gt; DiG 9.16.27-Debian &amp;#x3C;&amp;#x3C;&gt;&gt; www.redes.unlp.edu.ar A
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&amp;#x3C;&amp;#x3C;- opcode: QUERY, status: NOERROR, id: 57307
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 6df89cfa69fa329b0100000066135ae75d8578ee82028b7d (good)
;; QUESTION SECTION:
;www.redes.unlp.edu.ar.		IN	A

;; ANSWER SECTION:
www.redes.unlp.edu.ar.	300	IN	A	172.28.0.50

;; Query time: 0 msec
;; SERVER: 172.28.0.29#53(172.28.0.29)
;; WHEN: Sun Apr 07 23:48:07 -03 2024
;; MSG SIZE  rcvd: 94
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Desglose de la Respuesta&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;; &amp;#x3C;&amp;#x3C;&gt;&gt; DiG 9.16.27-Debian &amp;#x3C;&amp;#x3C;&gt;&gt; www.redes.unlp.edu.ar A
# Esta línea es el encabezado de la salida del comando `dig`, indicando la versión de `dig`
# usada (9.16.27) en un sistema Debian, seguido del dominio consultado 
# (`www.redes.unlp.edu.ar`) y el tipo de registro DNS solicitado (`A`).

;; global options: +cmd
# Indica las opciones globales aplicadas a la consulta. Aquí, `+cmd`
# muestra el comando exacto que se ejecutó.

;; Got answer:
# Confirma que se recibió una respuesta a la consulta DNS realizada.

;; -&gt;&gt;HEADER&amp;#x3C;&amp;#x3C;- opcode: QUERY, status: NOERROR, id: 57307
# Sección de encabezado de la respuesta:
# - `opcode: QUERY` indica que la operación realizada fue una consulta DNS.
# - `status: NOERROR` muestra que la consulta se completó sin errores.
# - `id: 57307` es un identificador único para esta consulta, útil 
#               para emparejar solicitudes y respuestas en consultas múltiples.

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
# Resumen de banderas y estadísticas de la consulta:
# - `qr` (query response) indica que esto es una respuesta a una consulta.
# - `aa` (authoritative answer) señala que la respuesta es autoritativa.
# - `rd` (recursion desired) muestra que se solicitó recursión.
# - `ra` (recursion available) indica que el servidor puede realizar consultas recursivas.
# - `QUERY: 1` muestra que se realizó una pregunta.
# - `ANSWER: 1` indica que se proporcionó una respuesta.
# - `AUTHORITY: 0` y `ADDITIONAL: 1` muestran el número de registros
#                                    de autoridad y adicionales proporcionados.

;; OPT PSEUDOSECTION:
# Sección para opciones extendidas (EDNS).
; EDNS: version: 0, flags:; udp: 1232
# Muestra la versión de EDNS utilizada y el tamaño máximo de paquete UDP soportado (1232 bytes).
; COOKIE: 6df89cfa69fa329b0100000066135ae75d8578ee82028b7d (good)
# Un mecanismo de seguridad que proporciona un &apos;cookie&apos; para autenticar la respuesta.

;; QUESTION SECTION:
;www.redes.unlp.edu.ar.		IN	A
# La sección de pregunta de la consulta, pidiendo el registro A (dirección IPv4) para
# `www.redes.unlp.edu.ar`.

;; ANSWER SECTION:
www.redes.unlp.edu.ar.	300	IN	A	172.28.0.50
# La sección de respuesta proporciona la dirección IPv4 (`172.28.0.50`) asociada con el nombre 
# de dominio consultado, con un TTL de 300 segundos.

;; Query time: 0 msec
# El tiempo que tomó ejecutar la consulta, en este caso, 0 milisegundos, indicando una respuesta inmediata.

;; SERVER: 172.28.0.29#53(172.28.0.29)
# La dirección IP y puerto del servidor DNS que proporcionó la respuesta.

;; WHEN: Sun Apr 07 23:48:07 -03 2024
# La fecha y hora exactas de cuando se realizó la consulta.

;; MSG SIZE  rcvd: 94
# El tamaño del mensaje de respuesta recibido, en este caso, 94 bytes.
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3&gt;Registro&lt;/h3&gt;
&lt;hr&gt;
&lt;h4&gt;Registro NS&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dig redes.unlp.edu.ar NS
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;redes@debian:~$ dig www.redes.unlp.edu.ar NS

; &amp;#x3C;&amp;#x3C;&gt;&gt; DiG 9.16.27-Debian &amp;#x3C;&amp;#x3C;&gt;&gt; www.redes.unlp.edu.ar NS
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&amp;#x3C;&amp;#x3C;- opcode: QUERY, status: NOERROR, id: 10661
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: d4e9ac68ddcc83a00100000066135b1dd8e4fc49567742d0 (good)
;; QUESTION SECTION:
;www.redes.unlp.edu.ar.		IN	NS

;; AUTHORITY SECTION:
redes.unlp.edu.ar.	86400	IN	SOA	ns-sv-b.redes.unlp.edu.ar. root.redes.unlp.edu.ar. 2020031700 604800 86400 2419200 86400

;; Query time: 0 msec
;; SERVER: 172.28.0.29#53(172.28.0.29)
;; WHEN: Sun Apr 07 23:49:01 -03 2024
;; MSG SIZE  rcvd: 127
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Desglose de la Respuesta&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;; &amp;#x3C;&amp;#x3C;&gt;&gt; DiG 9.16.27-Debian &amp;#x3C;&amp;#x3C;&gt;&gt; www.redes.unlp.edu.ar NS
# Esta línea indica la ejecución del comando `dig` en un sistema Debian, consultando los registros NS 
# (Name Server o Servidores de Nombres) para el dominio www.redes.unlp.edu.ar.

;; global options: +cmd
# Muestra las opciones globales utilizadas por `dig`. 
# Aquí, `+cmd` significa que se incluye la línea de comando inicial en la salida para referencia.

;; Got answer:
# Indica que se ha recibido una respuesta del servidor DNS consultado.

;; -&gt;&gt;HEADER&amp;#x3C;&amp;#x3C;- opcode: QUERY, status: NOERROR, id: 10661
# Sección del encabezado de la respuesta DNS:
# - `opcode: QUERY` especifica que la operación fue una consulta.
# - `status: NOERROR` indica que la consulta se completó sin errores.
# - `id: 10661` es el identificador de la transacción, útil para emparejar solicitudes con respuestas.

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
# Detalles de los indicadores y conteos de la consulta:
# - `qr` (query response) señala que esto es una respuesta.
# - `aa` (authoritative answer) indica que la respuesta es autoritativa.
# - `rd` (recursion desired) muestra que se solicitó recursión.
# - `ra` (recursion available) indica que el servidor puede hacer consultas recursivas.
# - `QUERY: 1` muestra que hubo una pregunta realizada.
# - `ANSWER: 0` indica que no hubo respuestas directas al tipo de registro solicitado (NS en este caso).
# - `AUTHORITY: 1` muestra que hay un registro de autoridad, en este caso un registro SOA.
# - `ADDITIONAL: 1` indica un registro adicional, probablemente relacionado con EDNS.

;; OPT PSEUDOSECTION:
# Sección de opciones extendidas del DNS (EDNS).
; EDNS: version: 0, flags:; udp: 1232
# Detalles de EDNS, incluyendo la versión y el tamaño máximo de UDP (1232 bytes).
; COOKIE: d4e9ac68ddcc83a00100000066135b1dd8e4fc49567742d0 (good)
# Un mecanismo de seguridad EDNS que proporciona un &apos;cookie&apos; para autenticar solicitudes y respuestas.

;; QUESTION SECTION:
;www.redes.unlp.edu.ar.		IN	NS
# La sección de pregunta muestra la consulta realizada, solicitando los 
# registros NS para `www.redes.unlp.edu.ar`.

;; AUTHORITY SECTION:
redes.unlp.edu.ar.	86400	IN	SOA	ns-sv-b.redes.unlp.edu.ar. root.redes.unlp.edu.ar. 2020031700 604800 86400 2419200 86400
# Sección de autoridad que proporciona el registro SOA (Start of Authority) 
# para el dominio `redes.unlp.edu.ar`, 
# ya que no se encontraron registros NS específicos para `www.redes.unlp.edu.ar`. 
# El registro SOA incluye información crítica como el servidor de nombres principal, 
# el contacto de correo electrónico, y varios temporizadores para la zona.

;; Query time: 0 msec
# El tiempo que tomó realizar la consulta, 0 milisegundos, indicando una respuesta rápida.

;; SERVER: 172.28.0.29#53(172.28.0.29)
# La dirección IP y el puerto (#53) del servidor DNS que respondió a la consulta.

;; WHEN: Sun Apr 07 23:49:01 -03 2024
# La fecha y hora exacta en que se realizó la consulta.

;; MSG SIZE  rcvd: 127
# El tamaño del mensaje de respuesta recibido, en este caso, 127 bytes.

&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Consulta&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/6b1c7fa3-1684-4eff-8d6a-78d7ba7e2ac6&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Respuesta&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/1ad414e9-537e-4828-8d63-3d6576a41359&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Registro SOA&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;redes@debian:~$ dig redes.unlp.edu.ar SOA
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;redes@debian:~$ dig redes.unlp.edu.ar SOA

; &amp;#x3C;&amp;#x3C;&gt;&gt; DiG 9.16.27-Debian &amp;#x3C;&amp;#x3C;&gt;&gt; redes.unlp.edu.ar SOA
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&amp;#x3C;&amp;#x3C;- opcode: QUERY, status: NOERROR, id: 56877
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 7bd1c774cf6a7d920100000066135a6d5d9d14b02aa8c4b7 (good)
;; QUESTION SECTION:
;redes.unlp.edu.ar.		IN	SOA

;; ANSWER SECTION:
redes.unlp.edu.ar.	86400	IN	SOA	ns-sv-b.redes.unlp.edu.ar. root.redes.unlp.edu.ar. 2020031700 604800 86400 2419200 86400

;; Query time: 0 msec
;; SERVER: 172.28.0.29#53(172.28.0.29)
;; WHEN: Sun Apr 07 23:46:05 -03 2024
;; MSG SIZE  rcvd: 123
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Desglose de la Respuesta&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;; &amp;#x3C;&amp;#x3C;&gt;&gt; DiG 9.16.27-Debian &amp;#x3C;&amp;#x3C;&gt;&gt; redes.unlp.edu.ar SOA
# Esta línea indica que se ejecutó el comando `dig` en una distribución Debian para consultar el registro SOA (Start of Authority) para el dominio redes.unlp.edu.ar. 

;; global options: +cmd
# Muestra las opciones globales aplicadas a la consulta. `+cmd` indica que el comando ejecutado se muestra en la salida para referencia.

;; Got answer:
# Confirma que se ha recibido una respuesta a la consulta DNS.

;; -&gt;&gt;HEADER&amp;#x3C;&amp;#x3C;- opcode: QUERY, status: NOERROR, id: 56877
# Encabezado de la respuesta DNS:
# - `opcode: QUERY` indica que se realizó una consulta DNS.
# - `status: NOERROR` significa que la consulta se completó sin errores.
# - `id: 56877` es un identificador único para esta transacción, útil para correlacionar solicitudes y respuestas.

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
# Detalles de la consulta:
# - `qr` (query response) señala que esto es una respuesta.
# - `aa` (authoritative answer) indica que la respuesta es autoritativa.
# - `rd` (recursion desired) muestra que se solicitó recursión.
# - `ra` (recursion available) indica que el servidor puede realizar consultas recursivas.
# - `QUERY: 1` muestra que hubo una pregunta realizada.
# - `ANSWER: 1` indica que se proporcionó una respuesta.
# - `AUTHORITY: 0` muestra que no hay registros de autoridad adicionales.
# - `ADDITIONAL: 1` indica un registro adicional, relacionado con EDNS.

;; OPT PSEUDOSECTION:
# Sección de opciones extendidas del DNS (EDNS).
; EDNS: version: 0, flags:; udp: 1232
# Muestra la versión de EDNS utilizada y el tamaño máximo de paquete UDP (1232 bytes).
; COOKIE: 7bd1c774cf6a7d920100000066135a6d5d9d14b02aa8c4b7 (good)
# Un mecanismo de seguridad EDNS que proporciona un &apos;cookie&apos; para autenticar la consulta y la respuesta.

;; QUESTION SECTION:
;redes.unlp.edu.ar.		IN	SOA
# La sección de pregunta muestra que la consulta fue para el registro SOA del dominio redes.unlp.edu.ar.

;; ANSWER SECTION:
redes.unlp.edu.ar.	86400	IN	SOA	ns-sv-b.redes.unlp.edu.ar. root.redes.unlp.edu.ar. 2020031700 604800 86400 2419200 86400
# La sección de respuesta contiene el registro SOA para el dominio:
# - `ns-sv-b.redes.unlp.edu.ar.` es el servidor de nombres que tiene autoridad sobre el dominio.
# - `root.redes.unlp.edu.ar.` es el contacto administrativo para el dominio.
# - `2020031700` es el número de serie del registro SOA, importante para la gestión de cambios.
# - `604800` es el intervalo de refresco en segundos (cada 7 días).
# - `86400` es el tiempo de reintento en segundos (1 día), en caso de fallo al refrescar.
# - `2419200` es el tiempo de expiración en segundos (28 días), después del cual los datos se consideran obsoletos si no se logra la actualización.
# - `86400` es el valor mínimo de TTL (Time To Live) en segundos, que indica cuánto tiempo un registro puede ser cacheado por los servidores DNS.

;; Query time: 0 msec
# El tiempo que tomó realizar la consulta, 0 milisegundos, indicando una respuesta inmediata.

;; SERVER: 172.28.0.29#53(172.28.0.29)
# La dirección IP y el puerto del servidor DNS que respondió a la consulta.

;; WHEN: Sun Apr 07 23:46:05 -03 2024
# La fecha y hora exactas de cuando se realizó la consulta.

;; MSG SIZE  rcvd: 123
# El tamaño del mensaje de respuesta recibido, en este caso, 123 bytes.
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3&gt;Registro TXT&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dig redes.unlp.edu.ar TXT
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;redes@debian:~$ dig www.redes.unlp.edu.ar TXT

; &amp;#x3C;&amp;#x3C;&gt;&gt; DiG 9.16.27-Debian &amp;#x3C;&amp;#x3C;&gt;&gt; www.redes.unlp.edu.ar TXT
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&amp;#x3C;&amp;#x3C;- opcode: QUERY, status: NOERROR, id: 60088
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 924f899d4f35a97f0100000066135f724ecbd98262016eb9 (good)
;; QUESTION SECTION:
;www.redes.unlp.edu.ar.		IN	TXT

;; AUTHORITY SECTION:
redes.unlp.edu.ar.	86400	IN	SOA	ns-sv-b.redes.unlp.edu.ar. root.redes.unlp.edu.ar. 2020031700 604800 86400 2419200 86400

;; Query time: 0 msec
;; SERVER: 172.28.0.29#53(172.28.0.29)
;; WHEN: Mon Apr 08 00:07:30 -03 2024
;; MSG SIZE  rcvd: 127
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Desglose de la Respuesta&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;; &amp;#x3C;&amp;#x3C;&gt;&gt; DiG 9.16.27-Debian &amp;#x3C;&amp;#x3C;&gt;&gt; www.redes.unlp.edu.ar TXT
# Esta línea indica la ejecución del comando `dig` en un sistema Debian 
# para consultar registros TXT para el dominio www.redes.unlp.edu.ar.

;; global options: +cmd
# Indica las opciones globales aplicadas a la consulta, con `+cmd` mostrando el comando ejecutado.

;; Got answer:
# Confirma que se ha recibido una respuesta a la consulta DNS.

;; -&gt;&gt;HEADER&amp;#x3C;&amp;#x3C;- opcode: QUERY, status: NOERROR, id: 60088
# La sección del encabezado de la respuesta DNS:
# - `opcode: QUERY` especifica que la operación fue una consulta.
# - `status: NOERROR` significa que la consulta se completó sin errores.
# - `id: 60088` es el identificador único para esta transacción, 
#               útil para correlacionar solicitudes y respuestas.

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
# Resumen de la consulta y la respuesta:
# - `qr` (query response) señala que esto es una respuesta.
# - `aa` (authoritative answer) indica que la respuesta es autoritativa.
# - `rd` (recursion desired) muestra que se solicitó recursión.
# - `ra` (recursion available) indica que el servidor puede realizar consultas recursivas.
# - `QUERY: 1` indica que se hizo una pregunta.
# - `ANSWER: 0` indica que no se encontraron registros TXT para el dominio consultado.
# - `AUTHORITY: 1` muestra que hay un registro de autoridad, un registro SOA en este caso.
# - `ADDITIONAL: 1` indica la presencia de una sección adicional, probablemente relacionada con EDNS.

;; OPT PSEUDOSECTION:
# Sección de opciones extendidas del DNS (EDNS).
; EDNS: version: 0, flags:; udp: 1232
# Muestra la versión de EDNS utilizada y el tamaño máximo de paquete UDP (1232 bytes).
; COOKIE: 924f899d4f35a97f0100000066135f724ecbd98262016eb9 (good)
# Un mecanismo de seguridad EDNS que proporciona un &apos;cookie&apos; para autenticar la consulta y la respuesta.

;; QUESTION SECTION:
;www.redes.unlp.edu.ar.		IN	TXT
# La sección de pregunta muestra la consulta realizada, solicitando los registros 
# TXT para www.redes.unlp.edu.ar.

;; AUTHORITY SECTION:
redes.unlp.edu.ar.	86400	IN	SOA	ns-sv-b.redes.unlp.edu.ar. root.redes.unlp.edu.ar. 
  	                            2020031700 604800 86400 2419200 86400
# La sección de autoridad contiene un registro SOA para el dominio redes.unlp.edu.ar. 
# Este registro proporciona información administrativa sobre el dominio:
# - `ns-sv-b.redes.unlp.edu.ar.` es el servidor de nombres principal.
# - `root.redes.unlp.edu.ar.` es el contacto administrativo.
# - `2020031700` es el número de serie de la zona, importante para controlar las
#                versiones y las actualizaciones.
# - `604800` es el intervalo de refresco en segundos (cada 7 días).
# - `86400` es el tiempo de reintento en segundos (1 día), en caso de fallo al refrescar.
# - `2419200` es el tiempo de expiración en segundos (28 días), después del cual los 
#             datos se consideran obsoletos si no se logra la actualización.
# - `86400` es el valor mínimo de TTL (Time To Live) en segundos, que indica 
#           cuánto tiempo un registro puede ser cacheado por los servidores DNS.

;; Query time: 0 msec
# El tiempo que tomó realizar la consulta, 0 milisegundos, indicando una respuesta rápida.

;; SERVER: 172.28.0.29#53(172.28.0.29)
# La dirección IP y el puerto del servidor DNS que respondió a la consulta.

;; WHEN: Mon Apr 08 00:07:30 -03 2024
# La fecha y hora exactas de cuando se realizó la consulta.

;; MSG SIZE  rcvd: 127
# El tamaño del mensaje de respuesta recibido, en este caso, 127 bytes.
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3&gt;Ejemplos de Varios Comandos&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;redes@debian:~$ dig redes.unlp.edu.ar AAAA +noall +answer
redes@debian:~$ dig redes.unlp.edu.ar MX +noall +answer
redes.unlp.edu.ar.	86400	IN	MX	5 mail.redes.unlp.edu.ar.
redes.unlp.edu.ar.	86400	IN	MX	10 mail2.redes.unlp.edu.ar.
redes@debian:~$ dig redes.unlp.edu.ar A +noall +answer
redes@debian:~$ dig redes.unlp.edu.ar NS +noall +answer
redes.unlp.edu.ar.	86400	IN	NS	ns-sv-a.redes.unlp.edu.ar.
redes.unlp.edu.ar.	86400	IN	NS	ns-sv-b.redes.unlp.edu.ar.
redes@debian:~$ dig www.redes.unlp.edu.ar CNAME +noall +answer
redes@debian:~$ dig redes.unlp.edu.ar SOA +noall +answer
redes.unlp.edu.ar.	86400	IN	SOA	ns-sv-b.redes.unlp.edu.ar. root.redes.unlp.edu.ar. 2020031700 604800 86400 2419200 86400
redes@debian:~$ dig redes.unlp.edu.ar TXT +noall +answer
redes@debian:~$ 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mira, lo que esta pasando aca chiquiFabo, es que la url no tiene configurado ciertos registros, no es que estes loco :D&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ver registros para una url&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dig redes.unlp.edu.ar any
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;;; QUESTION SECTION:
;redes.unlp.edu.ar.		IN	ANY

;; ANSWER SECTION:
redes.unlp.edu.ar.	86400	IN	SOA	ns-sv-b.redes.unlp.edu.ar. root.redes.unlp.edu.ar. 2020031700 604800 86400 2419200 86400
redes.unlp.edu.ar.	86400	IN	NS	ns-sv-a.redes.unlp.edu.ar.
redes.unlp.edu.ar.	86400	IN	NS	ns-sv-b.redes.unlp.edu.ar.
redes.unlp.edu.ar.	86400	IN	MX	10 mail2.redes.unlp.edu.ar.
redes.unlp.edu.ar.	86400	IN	MX	5 mail.redes.unlp.edu.ar.

;; ADDITIONAL SECTION:
ns-sv-a.redes.unlp.edu.ar. 604800 IN	A	172.28.0.30
ns-sv-b.redes.unlp.edu.ar. 604800 IN	A	172.28.0.29
mail.redes.unlp.edu.ar.	86400	IN	A	172.28.0.90
mail2.redes.unlp.edu.ar. 86400	IN	A	172.28.0.91

;; Query time: 0 msec
;; SERVER: 172.28.0.29#53(172.28.0.29)
;; WHEN: Tue Apr 09 16:03:51 -03 2024
;; MSG SIZE  rcvd: 266
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Resultado desglozado&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;;; QUESTION SECTION:
;redes.unlp.edu.ar.		IN	ANY
# Esta sección muestra la consulta realizada. Se pidió información &quot;IN ANY&quot;, lo que significa que se solicitó cualquier tipo de registro DNS disponible para el dominio &apos;redes.unlp.edu.ar&apos;.

;; ANSWER SECTION:
redes.unlp.edu.ar.	86400	IN	SOA	ns-sv-b.redes.unlp.edu.ar. root.redes.unlp.edu.ar. 2020031700 604800 86400 2419200 86400
# Un registro SOA (Start of Authority), que proporciona información esencial sobre el dominio, incluyendo el servidor de nombres principal (ns-sv-b.redes.unlp.edu.ar), el contacto administrativo (root.redes.unlp.edu.ar), el número de serie de la zona, y varios temporizadores relacionados con la actualización y la caducidad de los registros.

redes.unlp.edu.ar.	86400	IN	NS	ns-sv-a.redes.unlp.edu.ar.
# Un registro NS (Name Server), que indica que &apos;ns-sv-a.redes.unlp.edu.ar&apos; es un servidor de nombres autoritativo para el dominio &apos;redes.unlp.edu.ar&apos;.

redes.unlp.edu.ar.	86400	IN	NS	ns-sv-b.redes.unlp.edu.ar.
# Otro registro NS, señalando a &apos;ns-sv-b.redes.unlp.edu.ar&apos; como otro servidor de nombres autoritativo para el dominio.

redes.unlp.edu.ar.	86400	IN	MX	10 mail2.redes.unlp.edu.ar.
# Un registro MX (Mail Exchange), que especifica &apos;mail2.redes.unlp.edu.ar&apos; como servidor de correo para el dominio, con una prioridad de 10.

redes.unlp.edu.ar.	86400	IN	MX	5 mail.redes.unlp.edu.ar.
# Otro registro MX, que indica &apos;mail.redes.unlp.edu.ar&apos; como servidor de correo para el dominio, con una prioridad de 5 (mayor prioridad que el anterior).

;; ADDITIONAL SECTION:
ns-sv-a.redes.unlp.edu.ar. 604800 IN	A	172.28.0.30
# La sección adicional proporciona direcciones IP para los servidores mencionados. Aquí, &apos;ns-sv-a.redes.unlp.edu.ar&apos; se asocia con la dirección IP 172.28.0.30.

ns-sv-b.redes.unlp.edu.ar. 604800 IN	A	172.28.0.29
# Proporciona la dirección IP para &apos;ns-sv-b.redes.unlp.edu.ar&apos;, que es 172.28.0.29.

mail.redes.unlp.edu.ar.	86400	IN	A	172.28.0.90
# Da la dirección IP del servidor de correo &apos;mail.redes.unlp.edu.ar&apos;, que es 172.28.0.90.

mail2.redes.unlp.edu.ar. 86400	IN	A	172.28.0.91
# Proporciona la dirección IP para otro servidor de correo, &apos;mail2.redes.unlp.edu.ar&apos;, que es 172.28.0.91.

;; Query time: 0 msec
# El tiempo que tomó realizar la consulta, en este caso, fue instantáneo (0 milisegundos).

;; SERVER: 172.28.0.29#53(172.28.0.29)
# Indica el servidor DNS que respondió a la consulta, con su dirección IP y el puerto utilizado (53, el puerto estándar para DNS).

;; WHEN: Tue Apr 09 16:03:51 -03 2024
# Muestra la fecha y hora exactas en que se realizó la consulta.

;; MSG SIZE  rcvd: 266
# El tamaño total del mensaje de respuesta recibido, en bytes (266 en este caso).
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Este resultado detalla los registros DNS recuperados para &lt;code&gt;redes.unlp.edu.ar&lt;/code&gt; al solicitar cualquier tipo de registro (&lt;code&gt;ANY&lt;/code&gt;). Proporciona una visión general de la configuración DNS del dominio, incluyendo servidores de nombres, servidores de correo, y la autoridad de inicio del dominio, junto con las direcciones IP asociadas a cada uno de estos servicios. La sección adicional ayuda a resolver nombres a direcciones IP sin necesidad de consultas adicionales.&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.4ktdT8Ui.jpg"/><enclosure url="/_astro/thumbnail.4ktdT8Ui.jpg"/></item><item><title>Practica 4 Redes | Correo Electronico</title><link>https://fabianmartinezrincon.com/blog/practica-4-redes</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/practica-4-redes</guid><description>Practica 4 de Redes y Comunicaciones</description><pubDate>Tue, 07 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-1&quot;&gt;Ejercicio 1 Protocolos de Envio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-2&quot;&gt;Ejercicio 2 Protocolos de Recepción&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-3&quot;&gt;Ejercicio 3 Usando la VM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-4&quot;&gt;Ejercicio 4 Protocolo POP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-5&quot;&gt;Ejercicio 5 Protocolo IMAP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-6&quot;&gt;Ejercicio 6 IMAP VS POP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-7&quot;&gt;Ejercicio 7 Mandar más de un correo por la misma conexión TCP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-8&quot;&gt;Ejercicio 8 MSA escuche en un puerto TCP diferente&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-9&quot;&gt;Ejercicio 9 MTA escuche en un puerto TCP diferente&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-10&quot;&gt;Ejercicio 10 Integrador HTTP, DNS y MAIL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-11&quot;&gt;Ejercicio 11 Usando Swaks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-12&quot;&gt;Ejercicio 12 Observe el gráfico a continuación&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#consultas&quot;&gt;Consultas&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 1&lt;/h2&gt;
&lt;p&gt;El envío de correos electrónicos implica una serie de protocolos que gestionan tanto la comunicación entre el cliente de correo y su servidor, como la transferencia de emails entre servidores de correo. Aquí te explicaré ambos aspectos:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Qué protocolos se utilizan para el envío de mails entre el cliente y su servidor de correo?&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SMTP (Simple Mail Transfer Protocol):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Uso&lt;/strong&gt;: SMTP es el protocolo estándar utilizado para enviar correos desde un cliente hacia un servidor de correo o entre servidores de correo. Sin embargo, para la conexión cliente-servidor, SMTP se usa típicamente sólo para enviar mensajes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Puertos&lt;/strong&gt;: SMTP opera comúnmente a través del puerto 25 para conexiones no seguras y 587 para conexiones seguras que inician con un proceso de cifrado STARTTLS.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;IMAP (Internet Message Access Protocol):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Uso&lt;/strong&gt;: IMAP se utiliza para recibir y gestionar correos electrónicos almacenados en el servidor de correo. Permite a los usuarios acceder a sus mensajes de correo electrónico desde múltiples dispositivos y gestionar sus correos directamente en el servidor.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Puertos&lt;/strong&gt;: IMAP utiliza comúnmente el puerto 143 para conexiones no seguras, y el puerto 993 para conexiones seguras (IMAP sobre SSL/TLS).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;POP3 (Post Office Protocol version 3):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Uso&lt;/strong&gt;: POP3 es otro protocolo utilizado para recibir correos desde el servidor. A diferencia de IMAP, POP3 generalmente descarga los correos del servidor al dispositivo del usuario y luego los elimina del servidor, lo que lo hace más adecuado para situaciones donde solo se accede al correo desde un único dispositivo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Puertos&lt;/strong&gt;: POP3 opera a través del puerto 110 para conexiones no seguras y 995 para conexiones seguras (POP3 sobre SSL/TLS).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;¿Y entre servidores de correo?&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;SMTP (Simple Mail Transfer Protocol):&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Uso&lt;/strong&gt;: SMTP no solo se utiliza entre clientes y servidores, sino que es el protocolo estándar para el envío de correos entre servidores. Cuando un correo electrónico se envía a través de la red, pasa de un servidor SMTP a otro hasta que alcanza su destino.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Puertos&lt;/strong&gt;: En las comunicaciones entre servidores, el puerto 25 es el más utilizado para SMTP. Aunque la conexión inicial puede ser no segura, los servidores modernos utilizan extensiones como STARTTLS para cifrar la comunicación SMTP después del establecimiento inicial de la conexión.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Seguridad Adicional:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;TLS (Transport Layer Security):&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Uso&lt;/strong&gt;: TLS se usa para cifrar las conexiones entre clientes y servidores de correo, así como entre servidores de correo para asegurar que la información sensible no pueda ser interceptada o alterada durante el tránsito.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Implementación&lt;/strong&gt;: TLS puede ser implementado en cualquier etapa de la comunicación de correo para cifrar los datos transmitidos y verificar la autenticidad de los servidores y clientes.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Resumen:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Entre &lt;strong&gt;cliente y servidor&lt;/strong&gt;, se utilizan SMTP para enviar, IMAP o POP3 para recibir correos, con los puertos mencionados adaptándose a conexiones seguras o no seguras según las necesidades y configuraciones del servidor.&lt;/li&gt;
&lt;li&gt;Entre &lt;strong&gt;servidores de correo&lt;/strong&gt;, SMTP es el protocolo dominante para el traspaso de mensajes, con la adición de seguridad a través de TLS para proteger la comunicación.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estos protocolos son esenciales para asegurar que la comunicación por correo electrónico sea eficiente, confiable y segura, adaptándose a las diversas necesidades y contextos en los que se utilizan.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 2&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;¿Qué protocolos se utilizan para la recepción de mails?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Para la recepción de correos electrónicos, los protocolos más comúnmente utilizados son el &lt;strong&gt;Post Office Protocol version 3 (POP3)&lt;/strong&gt; y el &lt;strong&gt;Internet Message Access Protocol (IMAP)&lt;/strong&gt;. Ambos tienen características distintivas que los hacen adecuados para diferentes escenarios de uso. A continuación, te detallo cada uno de estos protocolos, sus características y diferencias:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Enumere y explique características diferencias entre las alternativas posibles.&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;1. POP3 (Post Office Protocol version 3)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Características:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Simplicidad&lt;/strong&gt;: POP3 es un protocolo simple que permite descargar los correos electrónicos del servidor al cliente de correo local. Una vez que los correos son descargados, generalmente se eliminan del servidor, aunque la configuración puede ajustarse para dejar una copia en el servidor por un tiempo limitado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conexión y Descarga&lt;/strong&gt;: Con POP3, el cliente de correo se conecta al servidor, descarga todos los nuevos mensajes, los almacena localmente y luego se desconecta. Esto hace que POP3 sea ideal para usuarios que prefieren acceder a su correo desde un único dispositivo y necesitan tener acceso offline a sus mensajes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Puertos de Seguridad&lt;/strong&gt;: Utiliza el puerto 110 para conexiones no cifradas y el puerto 995 para conexiones cifradas (POP3S, que es POP3 sobre SSL/TLS).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Ventajas:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Manejo simple y directo de los correos.&lt;/li&gt;
&lt;li&gt;Buena elección para usuarios que solo acceden a su correo desde un único dispositivo.&lt;/li&gt;
&lt;li&gt;Acceso offline completo a los mensajes descargados.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Desventajas:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No es adecuado para el acceso desde múltiples dispositivos.&lt;/li&gt;
&lt;li&gt;Menos características para manejar correos directamente en el servidor.&lt;/li&gt;
&lt;li&gt;Una vez descargados y eliminados del servidor, los correos no están disponibles en otros dispositivos.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. IMAP (Internet Message Access Protocol)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Características:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Flexibilidad&lt;/strong&gt;: IMAP permite a los usuarios ver y manipular los mensajes de correo electrónico directamente en el servidor sin descargarlos en su dispositivo local. Esto significa que puedes organizar, eliminar o marcar tus correos y los cambios se reflejarán en todos tus dispositivos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conexión Constante&lt;/strong&gt;: Con IMAP, el cliente de correo mantiene una conexión constante con el servidor. Esto es útil para ver correos en tiempo real y gestionar tu bandeja de entrada de manera efectiva desde varios dispositivos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Puertos de Seguridad&lt;/strong&gt;: Opera a través del puerto 143 para conexiones no cifradas y el puerto 993 para conexiones cifradas (IMAPS, que es IMAP sobre SSL/TLS).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Ventajas:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Acceso y gestión de correo en múltiples dispositivos.&lt;/li&gt;
&lt;li&gt;Los cambios realizados en un dispositivo se sincronizan con todos los demás.&lt;/li&gt;
&lt;li&gt;No es necesario descargar grandes cantidades de datos para ver los correos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Desventajas:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Requiere más ancho de banda y tiempo de conexión porque los correos se mantienen en el servidor.&lt;/li&gt;
&lt;li&gt;Más complejo de implementar y administrar en comparación con POP3.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Comparación entre POP3 e IMAP&lt;/h3&gt;
&lt;p&gt;| Característica  | POP3                           | IMAP                                |
|-----------------|--------------------------------|-------------------------------------|
| Almacenamiento  | Localmente en el dispositivo   | En el servidor                      |
| Acceso          | Único dispositivo               | Múltiples dispositivos              |
| Gestión         | Simple y limitada              | Compleja y flexible                 |
| Uso de Red      | Bajo después de la descarga    | Alto, constante                     |
| Sincronización  | No aplica                      | Total entre dispositivos            |&lt;/p&gt;
&lt;h3&gt;Conclusión&lt;/h3&gt;
&lt;p&gt;La elección entre POP3 e IMAP depende de tus necesidades específicas. Si necesitas acceder a tus correos desde múltiples dispositivos y quieres que los cambios se sincronicen entre todos ellos, IMAP es la mejor opción. Si solo accedes desde un dispositivo y prefieres una solución más simple y con acceso offline, POP3 podría ser adecuado. Ambos protocolos pueden usarse con medidas de seguridad como SSL/TLS para proteger la transmisión de datos.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 3&lt;/h3&gt;
&lt;p&gt;Utilizando la VM y teniendo en cuenta los siguientes datos, abra el cliente de correo (thunderbird) y configure dos cuentas de correo. Una de las cuentas utilizará POP para solicitar al servidor los mails recibidos para la misma mientras que la otra utilizará IMAP.&lt;/p&gt;
&lt;p&gt;Al crear cada una de las cuentas, seleccionar Manual config y luego de configurar las mismas según lo indicado, ignorar advertencias por uso de conexión sin cifrado.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Datos para POP&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cuenta de correo&lt;/strong&gt;: alumnopop@redes.unlp.edu.ar&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nombre de usuario&lt;/strong&gt;: alumnopop&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contraseña&lt;/strong&gt;: alumnopoppass&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Puerto&lt;/strong&gt;: 110&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Datos para IMAP&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cuenta de correo&lt;/strong&gt;: alumnoimap@redes.unlp.edu.ar&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nombre de usuario&lt;/strong&gt;: alumnoimap&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contraseña&lt;/strong&gt;: alumnoimappass&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Puerto&lt;/strong&gt;: 143&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Datos comunes para ambas cuentas&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Servidor de correo entrante (POP/IMAP):
&lt;ul&gt;
&lt;li&gt;Nombre: mail.redes.unlp.edu.ar&lt;/li&gt;
&lt;li&gt;SSL: None&lt;/li&gt;
&lt;li&gt;Autenticación: Normal password&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Servidor de correo saliente (SMTP):
&lt;ul&gt;
&lt;li&gt;Nombre: mail.redes.unlp.edu.ar&lt;/li&gt;
&lt;li&gt;Puerto: 25&lt;/li&gt;
&lt;li&gt;SSL: None&lt;/li&gt;
&lt;li&gt;Autenticación: Normal password&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Mini Tutorial Thunderbird (Espero que se entienda)&lt;/h3&gt;
&lt;p&gt;Ingresamos los datos solicitados&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/7ef1a282-1223-4bfa-8a08-06c16df3c860&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Y para agregar la otra cuenta damos click derecho en la zona negra para poder habilitar el menu&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/073508d8-70aa-481f-9292-d75ad375a475&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Una vez habilitado el menu le damos en la siguiente opción y agregamos el otro email con los datos correspondientes&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/f91249ee-2e47-4215-a73c-f60c0e0b84b2&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Una vez que tenemos los dos mails, vamos a la configuración de cada uno, haciendo click derecho y en settings. Nos aseguramos de tener los siguientes datos.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/0d33efd6-9a1c-49e9-ace2-008a50f794d0&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Los datos para el otro mail&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/26aceee2-7219-4247-967e-a94521e718a1&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Y por ultimo tenemos que chequear lo siguiente&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/fefc0523-c48a-440a-af92-76bca8d122d9&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Parte a&lt;/h3&gt;
&lt;p&gt;Verificar el correcto funcionamiento enviando un email desde el cliente de una cuenta a la otra y luego desde la otra responder el mail hacia la primera.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/989198f8-6e2a-4081-9bcb-189219749dfc&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/f06733b0-797c-4266-bd4a-ebdecfca9346&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Parte b&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Análisis del protocolo SMTP&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Utilizando Wireshark, capture el tráfico de red contra el servidor de correo mientras desde la cuenta alumnopop@redes.unlp.edu.ar envía un correo a alumnoimap@redes.unlp.edu.ar&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/85c36772-947f-4c97-8a1a-145e60f67078&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;ii. Utilice el filtro SMTP para observar los paquetes del protocolo SMTP en la captura generada y analice el intercambio de dicho protocolo entre el cliente y el servidor para observar los distintos comandos utilizados y su correspondiente respuesta. Ayuda: filtre por protocolo SMTP y sobre alguna de las líneas del intercambio haga click derecho y seleccione Follow TCP Stream...&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/e35e52f6-bcd8-42c2-8a83-5e6b5b3ddf36&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;4	5.005634483	172.28.0.90	172.28.0.1	SMTP	126	S: 220 mail.redes.unlp.edu.ar ESMTP Postfix (Lihuen-4.01/GNU)
8	5.009561864	172.28.0.1	172.28.0.90	SMTP	85	C: EHLO [172.28.0.1]
10	5.009691688	172.28.0.90	172.28.0.1	SMTP	225	S: 250-mail.redes.unlp.edu.ar | PIPELINING | SIZE 10240000 | VRFY | ETRN | STARTTLS | ENHANCEDSTATUSCODES | 8BITMIME | DSN | CHUNKING
12	5.012393833	172.28.0.1	172.28.0.90	SMTP	130	C: MAIL FROM:&amp;#x3C;alumnopop@redes.unlp.edu.ar&gt; BODY=8BITMIME SIZE=444
14	5.012506165	172.28.0.90	172.28.0.1	SMTP	80	S: 250 2.1.0 Ok
16	5.013084972	172.28.0.1	172.28.0.90	SMTP	106	C: RCPT TO:&amp;#x3C;alumnoimap@redes.unlp.edu.ar&gt;
18	5.013742698	172.28.0.90	172.28.0.1	SMTP	80	S: 250 2.1.5 Ok
20	5.014499789	172.28.0.1	172.28.0.90	SMTP	72	C: DATA
22	5.014592474	172.28.0.90	172.28.0.1	SMTP	103	S: 354 End data with &amp;#x3C;CR&gt;&amp;#x3C;LF&gt;.&amp;#x3C;CR&gt;&amp;#x3C;LF&gt;
24	5.015352422	172.28.0.1	172.28.0.90	SMTP	510	C: DATA fragment, 444 bytes
25	5.015675668	172.28.0.1	172.28.0.90	SMTP/IMF	69	from: alumnopop &amp;#x3C;alumnopop@redes.unlp.edu.ar&gt;, subject: dddd,  (text/plain)
27	5.016902599	172.28.0.90	172.28.0.1	SMTP	102	S: 250 2.0.0 Ok: queued as 7839D60108
29	5.019272721	172.28.0.1	172.28.0.90	SMTP	72	C: QUIT
30	5.019837877	172.28.0.90	172.28.0.1	SMTP	81	S: 221 2.0.0 Bye
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La secuencia que proporcionaste es un registro detallado de una sesión SMTP entre un cliente (dirección IP 172.28.0.1) y un servidor de correo electrónico (dirección IP 172.28.0.90). SMTP es el protocolo utilizado para enviar correos electrónicos a través de la red. A continuación te explico detalladamente cada paso de la comunicación:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 4:&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tiempo&lt;/strong&gt;: 5.005634483 segundos desde el inicio de la captura.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fuente y Destino&lt;/strong&gt;: Del servidor de correo (172.28.0.90) al cliente (172.28.0.1).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Protocolo y Longitud&lt;/strong&gt;: SMTP con 126 bytes de longitud.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Información&lt;/strong&gt;: El servidor SMTP responde con un saludo &lt;code&gt;220&lt;/code&gt;, indicando que está listo para comenzar la comunicación. &lt;code&gt;ESMTP Postfix&lt;/code&gt; señala que está utilizando Postfix como su servidor de correo y que es capaz de manejar ESMTP (Extended SMTP).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 8:&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tiempo&lt;/strong&gt;: 5.009561864 segundos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fuente y Destino&lt;/strong&gt;: Del cliente al servidor.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Información&lt;/strong&gt;: El cliente envía el comando &lt;code&gt;EHLO&lt;/code&gt; seguido de su dirección IP entre corchetes. &lt;code&gt;EHLO&lt;/code&gt; se utiliza para identificar al cliente ante el servidor e iniciar la conversación SMTP.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 10:&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tiempo&lt;/strong&gt;: 5.009691688 segundos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Información&lt;/strong&gt;: El servidor SMTP responde con sus capacidades, incluyendo soporte para &lt;code&gt;PIPELINING&lt;/code&gt;, límites de tamaño de mensaje (&lt;code&gt;SIZE&lt;/code&gt;), y varios otros comandos ESMTP.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 12&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tiempo&lt;/strong&gt;: 5.012393833 segundos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Información&lt;/strong&gt;: El cliente indica la dirección de correo electrónico del remitente usando el comando &lt;code&gt;MAIL FROM:&lt;/code&gt; y especifica que el cuerpo del correo permite contenido de 8 bits (&lt;code&gt;BODY=8BITMIME&lt;/code&gt;) y que tiene un tamaño de 444 bytes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 14:&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tiempo&lt;/strong&gt;: 5.012506165 segundos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Información&lt;/strong&gt;: El servidor confirma que el comando &lt;code&gt;MAIL FROM&lt;/code&gt; es aceptable con una respuesta &lt;code&gt;250 2.1.0 Ok&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 16:&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tiempo&lt;/strong&gt;: 5.013084972 segundos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Información&lt;/strong&gt;: El cliente envía el comando &lt;code&gt;RCPT TO:&lt;/code&gt; para especificar la dirección de correo electrónico del destinatario.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 18:&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tiempo&lt;/strong&gt;: 5.013742698 segundos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Información&lt;/strong&gt;: El servidor responde con &lt;code&gt;250 2.1.5 Ok&lt;/code&gt;, aceptando la dirección del destinatario.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 20:&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tiempo&lt;/strong&gt;: 5.014499789 segundos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Información&lt;/strong&gt;: El cliente solicita iniciar la transferencia del cuerpo del mensaje con el comando &lt;code&gt;DATA&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 22:&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tiempo&lt;/strong&gt;: 5.014592474 segundos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Información&lt;/strong&gt;: El servidor invita al cliente a comenzar la transmisión del cuerpo del mensaje, terminando con &lt;code&gt;&amp;#x3C;CR&gt;&amp;#x3C;LF&gt;.&amp;#x3C;CR&gt;&amp;#x3C;LF&gt;&lt;/code&gt; (retorno de carro y salto de línea, seguidos de un punto y otro retorno de carro y salto de línea).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 24:&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tiempo&lt;/strong&gt;: 5.015352422 segundos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Información&lt;/strong&gt;: El cliente comienza a enviar un fragmento del cuerpo del mensaje con una longitud de 444 bytes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 25:&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tiempo&lt;/strong&gt;: 5.015675668 segundos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Información&lt;/strong&gt;: Se observa parte del contenido del mensaje, incluyendo el remitente y el asunto. El tipo MIME (&lt;code&gt;text/plain&lt;/code&gt;) indica que es texto plano.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 27:&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tiempo&lt;/strong&gt;: 5.016902599 segundos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Información&lt;/strong&gt;: El servidor acepta el mensaje y responde con &lt;code&gt;250 2.0.0 Ok: queued as 7839D60108&lt;/code&gt;, indicando que el mensaje ha sido puesto en cola para su entrega y asignándole un identificador de cola.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 29:&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tiempo&lt;/strong&gt;: 5.019272721 segundos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Información&lt;/strong&gt;: El cliente finaliza la sesión con el comando &lt;code&gt;QUIT&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 30:&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tiempo&lt;/strong&gt;: 5.019837877 segundos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Información&lt;/strong&gt;: El servidor confirma el cierre de la sesión con &lt;code&gt;221 2.0.0 Bye&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En resumen, esta secuencia muestra una transacción SMTP exitosa en la que un cliente envía un correo electrónico a un servidor, el servidor acepta y pone en cola el mensaje para su entrega, y finalmente, se cierra la sesión de comunicación de manera limpia.&lt;/p&gt;
&lt;h3&gt;Parte c&lt;/h3&gt;
&lt;p&gt;Usando el cliente de correo, thunderbird del usuario &lt;code&gt;alumnopop@redes.unlp.edu.ar&lt;/code&gt; envíe un correo electrónico &lt;code&gt;alumnoimap@redes.unlp.edu.ar&lt;/code&gt; el cual debe tener: un asunto, datos en el body y una imagen adjunta.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/e4e2a53b-e6b1-4c89-b688-e5f56d620a13&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/25f67427-5f62-4b73-8eb0-e443a2769016&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;iVerifique los fuentes del correo recibido para entender como se utiliza el header “Content-Type: multipart/mixed“ para poder realizar el envío de distintos archivos adjuntos.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/014c6134-43c3-4cc0-bb2d-0be735e8afa0&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;Return-Path: &amp;#x3C;alumnopop@redes.unlp.edu.ar&gt;
X-Original-To: alumnoimap@redes.unlp.edu.ar
Delivered-To: alumnoimap@redes.unlp.edu.ar
Received: from [172.28.0.1] (unknown [172.28.0.1])
	by mail.redes.unlp.edu.ar (Postfix) with ESMTP id 17D0960192
	for &amp;#x3C;alumnoimap@redes.unlp.edu.ar&gt;; Sun, 14 Apr 2024 23:36:32 +0000 (UTC)
Content-Type: multipart/alternative;
 boundary=&quot;------------Fju9GPlZ4P3UCqeMMOEz0o7L&quot;
Message-ID: &amp;#x3C;2e205777-f17e-ee1a-f34a-847b156e847e@redes.unlp.edu.ar&gt;
Date: Sun, 14 Apr 2024 20:36:26 -0300
MIME-Version: 1.0
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101
 Thunderbird/91.12.0
Content-Language: en-US
To: alumnoimap@redes.unlp.edu.ar
From: alumnopop &amp;#x3C;alumnopop@redes.unlp.edu.ar&gt;
Subject: Ejercicio 3c

This is a multi-part message in MIME format.
--------------Fju9GPlZ4P3UCqeMMOEz0o7L
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

Pruebas de textovegetauwu

--------------Fju9GPlZ4P3UCqeMMOEz0o7L
Content-Type: multipart/related;
 boundary=&quot;------------BTmIsRQtJHYCkUO0b2F4ssOE&quot;

--------------BTmIsRQtJHYCkUO0b2F4ssOE
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 7bit

&amp;#x3C;html&gt;
  &amp;#x3C;head&gt;

    &amp;#x3C;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt;
  &amp;#x3C;/head&gt;
  &amp;#x3C;body&gt;
    &amp;#x3C;p&gt;Pruebas de texto&amp;#x3C;img moz-do-not-send=&quot;false&quot;
        src=&quot;cid:part1.vR1R0n7i.cHRUhuyT@redes.unlp.edu.ar&quot;
        alt=&quot;vegetauwu&quot; width=&quot;162&quot; height=&quot;312&quot;&gt;&amp;#x3C;br&gt;
    &amp;#x3C;/p&gt;
  &amp;#x3C;/body&gt;
&amp;#x3C;/html&gt;
--------------BTmIsRQtJHYCkUO0b2F4ssOE
Content-Type: image/jpeg; name=&quot;vegeta.jpeg&quot;
Content-Disposition: inline; filename=&quot;vegeta.jpeg&quot;
Content-Id: &amp;#x3C;part1.vR1R0n7i.cHRUhuyT@redes.unlp.edu.ar&gt;
Content-Transfer-Encoding: base64

/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxMSEhMRExIWFhUXFhUbFxgSFRcaFxcWFhcX
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;El mensaje que has proporcionado es un correo electrónico formateado usando MIME (Multipurpose Internet Mail Extensions), que permite incluir contenido multimedia en los correos electrónicos, como texto, HTML y archivos adjuntos (como imágenes).&lt;/p&gt;
&lt;p&gt;Aquí hay un desglose detallado de las partes relevantes del encabezado del correo y la estructura del mensaje que utiliza &lt;code&gt;Content-Type: multipart/alternative&lt;/code&gt; y &lt;code&gt;Content-Type: multipart/related&lt;/code&gt;:&lt;/p&gt;
&lt;h3&gt;Encabezados MIME Generales&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Content-Type: multipart/alternative;&lt;/code&gt;&lt;/strong&gt;: Indica que hay varias versiones del cuerpo del mensaje (como texto plano y HTML), y que los clientes de correo pueden elegir cuál mostrar. El atributo &lt;code&gt;boundary&lt;/code&gt; define el delimitador que separa las distintas partes del mensaje.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Partes del Mensaje&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Parte de Texto Plano&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Content-Type: text/plain; charset=UTF-8; format=flowed&lt;/code&gt;&lt;/strong&gt;: Define que esta parte del mensaje es en texto plano con codificación UTF-8 y que el texto fluye (es decir, no tiene un ancho fijo de línea).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Content-Transfer-Encoding: 7bit&lt;/code&gt;&lt;/strong&gt;: Indica que el cuerpo del mensaje está codificado en 7 bits y no requiere codificación para caracteres especiales.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Parte HTML&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Content-Type: multipart/related;&lt;/code&gt;&lt;/strong&gt;: Utilizado para mensajes HTML que incluyen recursos vinculados como imágenes; estas se incrustan en el mensaje relacionando las partes mediante el uso de identificadores únicos (&lt;code&gt;Content-Id&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Dentro de esta sección hay dos partes:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;HTML del Mensaje&lt;/strong&gt;: La parte que es HTML, que incluye el contenido visual del mensaje y puede contener enlaces a recursos incrustados (como imágenes).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;La Imagen Incrustada&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Content-Type: image/jpeg; name=&quot;vegeta.jpeg&quot;&lt;/code&gt;&lt;/strong&gt;: Esta parte es una imagen JPEG adjunta al mensaje.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Content-Disposition: inline; filename=&quot;vegeta.jpeg&quot;&lt;/code&gt;&lt;/strong&gt;: La disposición &lt;code&gt;inline&lt;/code&gt; indica que la imagen se muestra dentro del flujo del mensaje HTML, y &lt;code&gt;filename&lt;/code&gt; es el nombre del archivo adjunto.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Content-Id&lt;/code&gt;&lt;/strong&gt;: Este es un identificador único para la parte del mensaje, que permite al HTML referirse a esta imagen usando &lt;code&gt;cid:&lt;/code&gt; (Content ID).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Content-Transfer-Encoding: base64&lt;/code&gt;&lt;/strong&gt;: La imagen está codificada en base64, que es un método común para codificar datos binarios en mensajes de correo electrónico.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Extracción de la Imagen Adjunta&lt;/h3&gt;
&lt;p&gt;Para extraer la imagen adjunta del cuerpo del mensaje, deberías copiar todo el texto que sigue a &lt;code&gt;Content-Transfer-Encoding: base64&lt;/code&gt; hasta el siguiente delimitador &lt;code&gt;boundary&lt;/code&gt;. Luego, utiliza una herramienta de decodificación de base64 para convertir este texto en un archivo de imagen. La mayoría de los clientes de correo hacen esto automáticamente y te permiten descargar o guardar la imagen con solo hacer clic en ella.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ii. Extraiga la imagen adjunta del mismo modo que lo hace el cliente de correo a partir de los fuentes del mensaje.&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Salida del Wireshark&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;2206	207.405826400	172.28.0.90	172.28.0.1	SMTP	81	S: 221 2.0.0 Bye
2204	207.395353495	172.28.0.90	172.28.0.1	SMTP	102	S: 250 2.0.0 Ok: queued as 17D0960192
2197	207.389918493	172.28.0.90	172.28.0.1	SMTP	103	S: 354 End data with &amp;#x3C;CR&gt;&amp;#x3C;LF&gt;.&amp;#x3C;CR&gt;&amp;#x3C;LF&gt;
2193	207.388964035	172.28.0.90	172.28.0.1	SMTP	80	S: 250 2.1.5 Ok
2189	207.380921813	172.28.0.90	172.28.0.1	SMTP	80	S: 250 2.1.0 Ok
2185	207.373677972	172.28.0.90	172.28.0.1	SMTP	225	S: 250-mail.redes.unlp.edu.ar | PIPELINING | SIZE 10240000 | VRFY | ETRN | STARTTLS | ENHANCEDSTATUSCODES | 8BITMIME | DSN | CHUNKING
2181	207.372299550	172.28.0.90	172.28.0.1	SMTP	126	S: 220 mail.redes.unlp.edu.ar ESMTP Postfix (Lihuen-4.01/GNU)
2205	207.405560036	172.28.0.1	172.28.0.90	SMTP	72	C: QUIT
2202	207.392380030	172.28.0.1	172.28.0.90	SMTP/IMF	69	from: alumnopop &amp;#x3C;alumnopop@redes.unlp.edu.ar&gt;, subject: Ejercicio 3c,  (text/plain) (text/html) (image/jpeg)
2200	207.391704524	172.28.0.1	172.28.0.90	SMTP	4183	C: DATA fragment, 4117 bytes
2198	207.391660752	172.28.0.1	172.28.0.90	SMTP	7306	C: DATA fragment, 7240 bytes
2195	207.389793068	172.28.0.1	172.28.0.90	SMTP	72	C: DATA
2191	207.384549094	172.28.0.1	172.28.0.90	SMTP	106	C: RCPT TO:&amp;#x3C;alumnoimap@redes.unlp.edu.ar&gt;
2187	207.377276018	172.28.0.1	172.28.0.90	SMTP	132	C: MAIL FROM:&amp;#x3C;alumnopop@redes.unlp.edu.ar&gt; BODY=8BITMIME SIZE=11357
2183	207.373566919	172.28.0.1	172.28.0.90	SMTP	85	C: EHLO [172.28.0.1]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/fa674354-6efe-4ffd-a3ee-379414467fa2&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Una vez que seleccionamos nuetra imagen codigicada, buscamos la seccion de base64&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/45876e0f-fed6-4eb7-924f-77435711c555&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Y terminamos de copiar aca&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/f4aef23a-291b-444d-aee4-94afc6a0aac3&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Una vez que copiamos eso, ejecutamos el siguiente comando&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;echo &apos;base64_data&apos; | base64 -d &gt; output_image.jpeg
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Si queres dejarlo en el escritorio, hacete un ls y despues un cd Desktop y lo ejecutas desde ahi&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/33dc4ab9-f952-401e-9e23-6f6b332313e3&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ACORDATE DE PEGAR LO QUE SACAMOS DE LOS PAQUETES :D&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 4&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Análisis del protocolo POP&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Parte a&lt;/h3&gt;
&lt;p&gt;Utilizando Wireshark, capture el tráfico de red contra el servidor de correo mientras desde la cuenta alumnoimap@redes.unlp.edu.ar le envía una correo a alumnopop@redes.unlp.edu.ar y mientras alumnopop@redes.unlp.edu.ar recepciona dicho correo.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/241cee54-1ac9-49e5-978a-4c0562941a19&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/e9d9817b-167d-4a17-b139-557d5e597bdf&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Parte b&lt;/h3&gt;
&lt;p&gt;Utilice el filtro POP para observar los paquetes del protocolo POP en la captura generada y analice el intercambio de dicho protocolo entre el cliente y el servidor para observar los distintos comandos utilizados y su correspondiente respuesta.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/e07d258c-8488-4dc9-b1e1-84e3f18a25bc&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Salida&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;24	15.815362054	172.28.0.90	172.28.0.1	POP	86	S: +OK Dovecot ready.
26	15.815692388	172.28.0.1	172.28.0.90	POP	72	C: CAPA
28	15.815751368	172.28.0.90	172.28.0.1	POP	155	S: +OK
30	15.815864015	172.28.0.1	172.28.0.90	POP	78	C: AUTH PLAIN
32	15.816150185	172.28.0.90	172.28.0.1	POP/IMF	70	+   
34	15.816293615	172.28.0.1	172.28.0.90	POP	124	C: AGFsdW1ub3BvcEByZWRlcy51bmxwLmVkdS5hcgBhbHVtbm9wb3BwYXNz
36	15.820537730	172.28.0.90	172.28.0.1	POP	82	S: +OK Logged in.
38	15.821232208	172.28.0.1	172.28.0.90	POP	72	C: STAT
40	15.821305252	172.28.0.90	172.28.0.1	POP	79	S: +OK 4 77565
42	15.822101933	172.28.0.1	172.28.0.90	POP	72	C: LIST
44	15.822222780	172.28.0.90	172.28.0.1	POP	117	S: +OK 4 messages:
46	15.822359564	172.28.0.1	172.28.0.90	POP	72	C: UIDL
48	15.822493963	172.28.0.90	172.28.0.1	POP	154	S: +OK
50	15.823820392	172.28.0.1	172.28.0.90	POP	72	C: QUIT
52	15.824108415	172.28.0.90	172.28.0.1	POP	84	S: +OK Logging out.
285	74.349487529	172.28.0.90	172.28.0.1	POP	86	S: +OK Dovecot ready.
287	74.350007804	172.28.0.1	172.28.0.90	POP	72	C: CAPA
289	74.350128832	172.28.0.90	172.28.0.1	POP	155	S: +OK
291	74.350386703	172.28.0.1	172.28.0.90	POP	78	C: AUTH PLAIN
293	74.350693542	172.28.0.90	172.28.0.1	POP/IMF	70	+   
295	74.350834556	172.28.0.1	172.28.0.90	POP	124	C: AGFsdW1ub3BvcEByZWRlcy51bmxwLmVkdS5hcgBhbHVtbm9wb3BwYXNz
297	74.354636341	172.28.0.90	172.28.0.1	POP	82	S: +OK Logged in.
299	74.355850493	172.28.0.1	172.28.0.90	POP	72	C: STAT
301	74.358377472	172.28.0.90	172.28.0.1	POP	79	S: +OK 5 91538
302	74.359257624	172.28.0.1	172.28.0.90	POP	72	C: LIST
304	74.359439633	172.28.0.90	172.28.0.1	POP	126	S: +OK 5 messages:
305	74.359647918	172.28.0.1	172.28.0.90	POP	72	C: UIDL
307	74.359889160	172.28.0.90	172.28.0.1	POP	174	S: +OK
308	74.360192871	172.28.0.1	172.28.0.90	POP	74	C: RETR 5
310	74.360561095	172.28.0.90	172.28.0.1	POP	2962	S: +OK 13973 octets
312	74.360688337	172.28.0.90	172.28.0.1	POP	4410	S: DATA fragment, 4344 bytes
314	74.360753542	172.28.0.90	172.28.0.1	POP	4410	S: DATA fragment, 4344 bytes
316	74.360817283	172.28.0.90	172.28.0.1	POP	1514	S: DATA fragment, 1448 bytes
317	74.360846553	172.28.0.90	172.28.0.1	POP	1028	S: DATA fragment, 962 bytes
319	74.368747868	172.28.0.1	172.28.0.90	POP	72	C: QUIT
321	74.370858388	172.28.0.90	172.28.0.1	POP	84	S: +OK Logging out.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;El texto que has proporcionado parece ser un registro de una sesión de captura de tráfico utilizando el protocolo POP (Post Office Protocol), que se usa para recuperar correos electrónicos de un servidor de correo electrónico. A continuación, explicaré cada línea en detalle:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;S: +OK Dovecot ready.&lt;/code&gt;: El servidor (S) responde con &quot;OK&quot;, lo que significa que está listo para comenzar la comunicación. Dovecot es el nombre del servidor de correo.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;C: CAPA&lt;/code&gt;: El cliente (C) envía el comando &quot;CAPA&quot; para solicitar las capacidades del servidor, como soporte para comandos adicionales o características de seguridad.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;S: +OK&lt;/code&gt;: El servidor responde positivamente, indicando que está listo para listar sus capacidades.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;C: AUTH PLAIN&lt;/code&gt;: El cliente solicita autenticarse con el método &quot;PLAIN&quot;, que envía el nombre de usuario y la contraseña en texto claro.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;S: +&lt;/code&gt;: El servidor indica que está listo para recibir los datos de autenticación.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;C: AGFsd...&lt;/code&gt;: El cliente envía los datos de autenticación codificados en Base64. La cadena de texto después de &quot;C:&quot; es el nombre de usuario y la contraseña en Base64.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;S: +OK Logged in.&lt;/code&gt;: El servidor responde que la autenticación fue exitosa y que el usuario ha iniciado sesión.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;C: STAT&lt;/code&gt;: El cliente envía el comando &quot;STAT&quot; para solicitar información sobre la cantidad de mensajes y el tamaño total del buzón.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;S: +OK 4 77565&lt;/code&gt;: El servidor responde que hay 4 mensajes con un tamaño total de 77565 bytes en el buzón.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;C: LIST&lt;/code&gt;: El cliente solicita una lista de los mensajes y sus tamaños.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;S: +OK 4 messages:&lt;/code&gt;: El servidor responde con la cantidad de mensajes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;C: UIDL&lt;/code&gt;: El cliente solicita una lista de los mensajes y sus identificadores únicos.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;S: +OK&lt;/code&gt;: El servidor responde positivamente.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;C: QUIT&lt;/code&gt;: El cliente envía el comando &quot;QUIT&quot; para cerrar la conexión.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;S: +OK Logging out.&lt;/code&gt;: El servidor confirma que está cerrando la conexión.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Las líneas &lt;code&gt;302&lt;/code&gt; a &lt;code&gt;316&lt;/code&gt; muestran la recuperación de un mensaje específico (en este caso, el mensaje número 5) con el comando &quot;RETR&quot;, seguido de la respuesta del servidor que incluye el mensaje real (datos del mensaje) fragmentado en varias partes, indicando que está transmitiendo el mensaje que tiene un tamaño de 13973 bytes.&lt;/p&gt;
&lt;p&gt;El tráfico posterior de &lt;code&gt;POP&lt;/code&gt; muestra que el cliente sigue interactuando con el servidor para recuperar y gestionar los mensajes en el buzón. Finalmente, el cliente envía de nuevo el comando &quot;QUIT&quot; para cerrar la sesión (&lt;code&gt;C: QUIT&lt;/code&gt;), y el servidor responde que la sesión está cerrando (&lt;code&gt;S: +OK Logging out.&lt;/code&gt;).&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 5&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Análisis del protocolo IMAP&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;Parte a&lt;/h4&gt;
&lt;p&gt;Utilizando Wireshark, capture el tráfico de red contra el servidor de correo mientras desde la cuenta alumnopop@redes.unlp.edu.ar le envía una correo a alumnoimap@redes.unlp.edu.ar y mientras alumnoimap@redes.unlp.edu.ar recepciona dicho correo.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/5b050f2a-bed2-4199-80ae-dbf6e8b2bdc3&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Parte b&lt;/h4&gt;
&lt;p&gt;Utilice el filtro IMAP para observar los paquetes del protocolo IMAP en la captura generada y analice el intercambio de dicho protocolo entre el cliente y el servidor para observar los distintos comandos utilizados y su correspondiente respuesta.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;3	0.000226978	172.28.0.90	172.28.0.1	IMAP	121	Response: 68 OK Idle completed (68.782 + 68.782 + 68.781 secs).
5	0.000740257	172.28.0.1	172.28.0.90	IMAP	75	Request: 69 noop
7	0.000952501	172.28.0.90	172.28.0.1	IMAP	110	Response: 69 OK NOOP completed (0.001 + 0.000 secs).
9	0.001157266	172.28.0.1	172.28.0.90	IMAP	92	Request: 70 UID fetch 8:* (FLAGS)
11	0.001387314	172.28.0.90	172.28.0.1	IMAP	154	Response: 70 OK Fetch completed (0.001 + 0.000 secs).
13	0.002704380	172.28.0.1	172.28.0.90	IMAP	75	Request: 71 IDLE
15	0.002941722	172.28.0.90	172.28.0.1	IMAP	76	Response: + idling
60	15.722543546	172.28.0.90	172.28.0.1	IMAP	90	Response: * 6 EXISTS
62	15.723339767	172.28.0.1	172.28.0.90	IMAP	72	Request: DONE
64	15.723507614	172.28.0.90	172.28.0.1	IMAP	121	Response: 71 OK Idle completed (15.721 + 15.718 + 15.720 secs).
66	15.723901320	172.28.0.1	172.28.0.90	IMAP	75	Request: 72 noop
68	15.724435617	172.28.0.90	172.28.0.1	IMAP	110	Response: 72 OK NOOP completed (0.001 + 0.000 secs).
70	15.724680116	172.28.0.1	172.28.0.90	IMAP	92	Request: 73 UID fetch 8:* (FLAGS)
72	15.725029146	172.28.0.90	172.28.0.1	IMAP	146	Response: 73 OK Fetch completed (0.001 + 0.000 secs).
74	15.725698775	172.28.0.1	172.28.0.90	IMAP	248	Request: 74 UID fetch 8 (UID RFC822.SIZE FLAGS BODY.PEEK[HEADER.FIELDS (From To Cc Bcc Subject Date Message-ID Priority X-Priority References Newsgroups In-Reply-To Content-Type Reply-To)])
76	15.727543896	172.28.0.90	172.28.0.1	IMAP/IMF	585	from: alumnopop &amp;#x3C;alumnopop@redes.unlp.edu.ar&gt;, subject: hola cabron,  (text/plain)
78	15.759640063	172.28.0.1	172.28.0.90	IMAP	112	Request: 75 UID fetch 8 (UID RFC822.SIZE BODY.PEEK[])
80	15.760120544	172.28.0.90	172.28.0.1	IMAP/IMF	935	from: alumnopop &amp;#x3C;alumnopop@redes.unlp.edu.ar&gt;, subject: hola cabron,  (text/plain)
82	15.777713054	172.28.0.1	172.28.0.90	IMAP	178	Request: 76 UID fetch 8 (UID BODY.PEEK[HEADER.FIELDS (Content-Type Content-Transfer-Encoding)] BODY.PEEK[TEXT]&amp;#x3C;0.2048&gt;)
84	15.778617088	172.28.0.90	172.28.0.1	IMAP/IMF	322	(text/plain)
86	15.789742688	172.28.0.1	172.28.0.90	IMAP	75	Request: 77 IDLE
88	15.790254483	172.28.0.90	172.28.0.1	IMAP	76	Response: + idling
124	50.826116147	172.28.0.90	172.28.0.1	IMAP	83	Response: * OK Still here
126	50.827134065	172.28.0.1	172.28.0.90	IMAP	72	Request: DONE
128	50.827301220	172.28.0.90	172.28.0.1	IMAP	121	Response: 77 OK Idle completed (35.038 + 35.037 + 35.037 secs).
130	50.827765081	172.28.0.1	172.28.0.90	IMAP	75	Request: 78 noop
132	50.828498371	172.28.0.90	172.28.0.1	IMAP	110	Response: 78 OK NOOP completed (0.001 + 0.000 secs).
134	50.828829187	172.28.0.1	172.28.0.90	IMAP	92	Request: 79 UID fetch 9:* (FLAGS)
136	50.829174468	172.28.0.90	172.28.0.1	IMAP	146	Response: 79 OK Fetch completed (0.001 + 0.000 secs).
138	50.832179591	172.28.0.1	172.28.0.90	IMAP	75	Request: 80 IDLE
140	50.832654708	172.28.0.90	172.28.0.1	IMAP	76	Response: + idling
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esta salida de Wireshark muestra una serie de comunicaciones entre un cliente y un servidor utilizando el protocolo IMAP (Internet Message Access Protocol), que es utilizado para acceder y manejar correos electrónicos de forma remota en un servidor. Veamos lo que está ocurriendo en cada línea:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;IDLE y NOOP:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El comando &lt;code&gt;IDLE&lt;/code&gt; es utilizado por el cliente para notificar al servidor que va a estar inactivo y espera notificaciones de nuevos mensajes o cambios en el buzón.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NOOP&lt;/code&gt; es un comando que se utiliza para mantener la conexión abierta sin realizar ninguna acción.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;UID FETCH:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El cliente utiliza el comando &lt;code&gt;UID fetch 8:* (FLAGS)&lt;/code&gt; para solicitar información sobre los mensajes desde el número 8 hasta el último del buzón, específicamente, sus marcadores (FLAGS).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;FETCH Response:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El servidor responde a los comandos &lt;code&gt;FETCH&lt;/code&gt;, indicando que la acción solicitada se ha completado con éxito.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;FETCH de Encabezados y Cuerpo del Mensaje:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El cliente realiza un &lt;code&gt;FETCH&lt;/code&gt; detallado para el mensaje número 8, solicitando diferentes campos de los encabezados (&lt;code&gt;HEADER.FIELDS&lt;/code&gt;) y un vistazo al cuerpo del mensaje (&lt;code&gt;BODY.PEEK[]&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Texto del Mensaje y Continuación del IDLE:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El servidor responde con el contenido del mensaje número 8, mostrando el texto en formato MIME (Multipurpose Internet Mail Extensions) con los campos &lt;code&gt;From&lt;/code&gt;, &lt;code&gt;To&lt;/code&gt;, &lt;code&gt;Subject&lt;/code&gt;, etc.&lt;/li&gt;
&lt;li&gt;Después, el cliente vuelve a enviar un comando &lt;code&gt;IDLE&lt;/code&gt; para mantenerse en espera de nuevos mensajes o cambios.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Still Here:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El servidor envía una confirmación de que todavía está ahí, lo cual es una forma de mantener la conexión activa durante el comando &lt;code&gt;IDLE&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;DONE:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cuando el cliente está listo para finalizar el estado de &lt;code&gt;IDLE&lt;/code&gt;, envía el comando &lt;code&gt;DONE&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;FETCH de Mensajes Nuevos:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Finalmente, el cliente solicita con &lt;code&gt;UID fetch 9:* (FLAGS)&lt;/code&gt; información sobre los mensajes nuevos que podrían haber llegado desde la última verificación.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En resumen, la captura muestra el intercambio de comandos y respuestas estándar en una sesión IMAP, donde el cliente verifica la existencia de nuevos mensajes, solicita detalles de mensajes específicos, y espera activamente por nuevas llegadas con el comando &lt;code&gt;IDLE&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 6&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;IMAP vs POP&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Parte A&lt;/h3&gt;
&lt;p&gt;Marque como leídos todos los correos que tenga en el buzón de entrada de alumnopop y de alumnoimap. Luego, cree una carpeta llamada POP en la cuenta de alumnopop y una llamada IMAP en la cuenta de alumnoimap.&lt;/p&gt;
&lt;p&gt;Asegurese que tiene mails en el inbox y en la carpeta recientemente creada en cada una de las cuentas.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/e5da1f1c-0884-47c9-8a04-a20504012efc&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Parte B&lt;/h3&gt;
&lt;p&gt;Cierre la sesión iniciada e ingrese nuevamente identificandose como usuario root y password packer, ejecute el cliente de correos.&lt;/p&gt;
&lt;p&gt;De esta forma, iniciará el cliente de correo con el perfil del superusuario (diferente del usuario con el que ya configuró las cuentas antes mencionadas).&lt;/p&gt;
&lt;p&gt;Luego configure las cuentas POP e IMAP de los usuarios alumnopop y alumnoimap como se describió anteriormente pero desde el cliente de correos ejecutado con el usuario root.&lt;/p&gt;
&lt;p&gt;Luego responda:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Qué correos ve en el buzón de entrada de ambas cuentas?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Están marcados como leídos o como no leídos?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Por qué?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Qué pasó con las carpetas POP e IMAP que creó en el paso anterior?&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;No pude hacer andar la parte b :,(&lt;/h4&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 7&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;¿En algún caso es posible enviar más de un correo durante una misma conexión tcp?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Considere&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Destinatarios múltiples del mismo dominio entre MUA-MSA y entre MTA-MTA&lt;/li&gt;
&lt;li&gt;Destinatarios múltiples de diferentes dominios entre MUA-MSA y entre MTA-MTA&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sí, es posible enviar más de un correo durante una misma conexión TCP en varios escenarios del proceso de envío de correo electrónico. Estos escenarios incluyen tanto la comunicación entre el Agente de Usuario de Correo (MUA) y el Agente de Envío de Correo (MSA), como entre Agentes de Transferencia de Correo (MTA).&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Destinatarios múltiples del mismo dominio entre MUA-MSA:&lt;/strong&gt;
Cuando un usuario envía un correo electrónico a través de su cliente de correo (MUA) a su servidor (MSA), puede especificar varios destinatarios en los campos &quot;Para&quot;, &quot;CC&quot; o &quot;CCO&quot;. El MUA enviará una sola transacción SMTP al MSA que incluye todos estos destinatarios si pertenecen al mismo dominio.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Destinatarios múltiples de diferentes dominios entre MUA-MSA:&lt;/strong&gt;
Incluso cuando los destinatarios son de diferentes dominios, el MUA puede enviar todos los destinatarios en una sola transacción SMTP al MSA. Es responsabilidad del MSA clasificar y reenviar estos correos a los MTA correspondientes para los diferentes dominios.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Destinatarios múltiples del mismo dominio entre MTA-MTA:&lt;/strong&gt;
Cuando un MTA está enviando correos a otro MTA y todos los destinatarios pertenecen al mismo dominio, puede enviar todos esos correos en una única conexión TCP utilizando una única transacción SMTP. El protocolo SMTP permite enviar múltiples comandos &quot;RCPT TO&quot; durante la misma sesión para indicar múltiples destinatarios.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Destinatarios múltiples de diferentes dominios entre MTA-MTA:&lt;/strong&gt;
Si bien es técnicamente posible enviar correos a destinatarios de diferentes dominios en una sola conexión TCP, generalmente no se hace de esta manera debido a las políticas de enrutamiento y los posibles problemas de entrega. En la práctica, el MTA establecerá conexiones separadas para cada dominio de destino para manejar la entrega de correos electrónicos, a menos que tenga una configuración específica que permita el relaying o haya un acuerdo entre los dominios (como ocurre en federaciones o servicios internos de una empresa).&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En todos los casos, el protocolo SMTP que se utiliza para enviar correos electrónicos entre MUAs, MSAs y MTAs admite transacciones con múltiples destinatarios en una sola sesión de conexión TCP, lo que puede mejorar la eficiencia al reducir el número de conexiones necesarias para enviar varios correos electrónicos. Sin embargo, la capacidad de hacerlo también puede estar limitada por políticas específicas de los servidores de correo o por medidas antispam.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 8&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Indique sí es posible que el MSA escuche en un puerto TCP diferente a los convencionales y qué implicancias tendría.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Sí, es posible que un Mail Submission Agent (MSA), o cualquier servidor, escuche en un puerto TCP que no sea uno de los convencionales. Los puertos estándar para la sumisión de correo SMTP son el 25 para el intercambio entre servidores de correo (MTA a MTA), el 587 para la sumisión de correo desde un cliente de correo (MUA) a un MSA, y en algunos casos el 465 para conexiones seguras SMTP sobre SSL (aunque este último es informal y no está oficializado por la IETF).&lt;/p&gt;
&lt;p&gt;Cambiar el puerto en el que un MSA escucha puede tener varias implicancias:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configuración del cliente:&lt;/strong&gt; Los clientes de correo electrónico que necesiten enviar correo a través de este MSA tendrán que configurarse para usar el nuevo puerto. Esto significa que el puerto no estándar debe ser comunicado a todos los usuarios y correctamente configurado en sus clientes de correo electrónico.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Compatibilidad y usabilidad:&lt;/strong&gt; Muchos clientes de correo tienen preconfigurados los puertos estándar y los usuarios pueden no saber cómo cambiar esta configuración. Esto podría resultar en problemas de usabilidad y soporte técnico.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Seguridad:&lt;/strong&gt; Algunos administradores de red pueden optar por cambiar el puerto de escucha de un servicio para evitar ataques automatizados que se dirigen a los puertos estándar. Sin embargo, este tipo de &quot;seguridad por oscuridad&quot; no es una medida de seguridad sólida y no debe ser la única protección.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Firewalls y filtros de red:&lt;/strong&gt; Los firewalls y sistemas de seguridad de red pueden necesitar ser reconfigurados para permitir tráfico a través del nuevo puerto. Además, si los usuarios están detrás de firewalls corporativos que solo permiten tráfico a través de puertos conocidos, podrían experimentar problemas para conectarse al MSA.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Interoperabilidad:&lt;/strong&gt; En el caso de comunicaciones entre servidores (MTA a MTA), cambiar el puerto podría llevar a que los correos no puedan ser entregados, ya que los servidores remotos esperarán que el MTA esté escuchando en el puerto estándar (25). Esto no aplica para MSA ya que la sumisión de correo normalmente es MUA a MSA.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En resumen, aunque es técnicamente posible cambiar el puerto, hacerlo se desvía de las convenciones y puede crear complicaciones adicionales tanto para los usuarios como para la administración de la red. Si se hace, es crucial que se gestione adecuadamente y que se informe y apoye a los usuarios en el proceso de cambio.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 9&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Indique sí es posible que el MTA escuche en un puerto TCP diferente a los convencionales y qué implicancias tendría.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Sí, es posible que un Mail Transfer Agent (MTA) escuche en un puerto TCP que no sea uno de los convencionales, aunque esto no es habitual y puede tener varias implicaciones prácticas y técnicas.&lt;/p&gt;
&lt;p&gt;Los puertos estándar para el MTA son el puerto 25 para la transmisión de mensajes entre servidores de correo (intercambio MTA a MTA) y, en algunos casos, el 587 para la recepción de mensajes de un cliente de correo o un MSA, aunque este último se usa principalmente para la sumisión de correo desde un MUA al MTA y no para la transferencia entre servidores.&lt;/p&gt;
&lt;h3&gt;Implicancias de un MTA en un Puerto No Convencional:&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configuración de Otros Servidores:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Otros servidores que intenten enviar correo a este MTA necesitarán saber que deben conectarse a un puerto no estándar. Esto generalmente requiere configuración manual y acuerdos entre administradores de los sistemas implicados, lo cual puede complicar las relaciones y las configuraciones predeterminadas.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Firewalls y Routers:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los firewalls y routers que filtran el tráfico de red a menudo están configurados para permitir el tráfico SMTP a través del puerto 25. Cambiar a un puerto diferente podría requerir una reconfiguración significativa de estas políticas de seguridad, lo que podría ser problemático si la red es grande o si está gestionada por múltiples entidades.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Compatibilidad y Interoperabilidad:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Utilizar un puerto no estándar puede afectar la interoperabilidad con otros sistemas de correo que esperan que el MTA esté disponible en el puerto 25. Esto podría resultar en errores de entrega o en la incapacidad de comunicarse con ciertos dominios que no reconocen la configuración personalizada.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Administración y Soporte:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los problemas de conectividad y entrega pueden ser más difíciles de diagnosticar si el MTA está operando en un puerto no estándar. Los administradores de sistemas y soporte técnico deben estar conscientes de esta configuración y preparados para manejar problemas que no seguirán los flujos de resolución de problemas estándar.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Seguridad:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cambiar el puerto de escucha de un servicio es a veces visto como una medida de seguridad para evitar ataques dirigidos a los puertos comunes. Sin embargo, esta forma de &quot;seguridad por oscuridad&quot; generalmente no ofrece una protección real contra adversarios determinados y no debe ser la única defensa contra amenazas de seguridad.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Conclusión:&lt;/h3&gt;
&lt;p&gt;Aunque técnicamente es posible configurar un MTA para que escuche en un puerto diferente al 25, hacerlo puede conducir a problemas de interoperabilidad, administración y seguridad. La mayoría de las organizaciones y administradores optan por adherirse a los estándares establecidos para garantizar la compatibilidad y minimizar problemas operativos. Si se considera necesario un cambio de este tipo, se deben tomar medidas cuidadosas para asegurarse de que todos los socios y sistemas implicados estén adecuadamente configurados y sean conscientes de esta desviación del estándar.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 10&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Ejercicio integrador HTTP, DNS y MAIL&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Suponga que registró bajo su propiedad el dominio redes2022.com.ar y dispone de 4 servidores:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Un servidor DNS instalado configurado como primario de la zona redes2022.com.ar. (hostname: ns1 / ip: 203.0.113.65).&lt;/li&gt;
&lt;li&gt;Un servidor DNS instalado configurado como secundario de la zona redes2022.com.ar. (hostname: ns2 / ip: 203.0.113.66).&lt;/li&gt;
&lt;li&gt;Un servidor de correo electrónico (hostname: mail / ip: 203.0.113.111). Permitirá a los usuarios envíar y recibir correos a cualquier dominio de Internet.&lt;/li&gt;
&lt;li&gt;Un servidor WEB para el acceso a un webmail (hostname: correo / ip: 203.0.113.8). Permitirá a los usuarios gestionar vía web sus correos electrónicos a través de la URL https://webmail.redes2022.com.ar&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Parte a&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Qué información debería informar al momento del registro para hacer visible a Internet el dominio registrado?&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Parte b&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Qué registros sería necesario configurar en el servidor de nombres?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Indique toda la información necesaria del archivo de zona.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Puede utilizar la siguiente tabla de referencia (evalúe la necesidad de usar cada caso los siguientes campos):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Nombre del registro&lt;/li&gt;
&lt;li&gt;Tipo de registro&lt;/li&gt;
&lt;li&gt;Prioridad&lt;/li&gt;
&lt;li&gt;TTLValor del registro.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Parte c&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Es necesario que el servidor de DNS acepte consultas recursivas? Justifique.&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Parte d&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Qué servicios/protocolos de capa de aplicación configuraría en cada servidor?&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Parte e&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Para cada servidor, ¿qué puertos considera necesarios dejar abiertos a Internet?.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;A modo de referencia, para cada puerto indique: servidor, protocolo de transporte y número de puerto.&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Parte f&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Cómo cree que se conectaría el webmail del servidor web con el servidor de correo?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Qué protocolos usaría y para qué?&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Parte g&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Cómo se podría hacer para que cualquier MTA reconozca como válidos los mails provienentes del dominio redes2022.com.ar solamente a los que llegan de la dirección 203.0.113.111?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Afectaría esto a los mails enviados desde el Webmail? Justifique.&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Parte h&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Qué característica propia de SMTP, IMAP y POP hace que al adjuntar una imagen o un ejecutable sea necesario aplicar un encoding (ej. base64)?&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Parte i&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Se podría enviar un mail a un usuario de modo que el receptor vea que el remitente es un usuario distinto? &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;En caso afirmativo, ¿Cómo?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Es una indicación de una estafa? Justifique&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Parte j&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Sepodría enviar un mail a un usuario de modo queel receptor vea que el destinatario es un usuario distinto?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;En caso afirmativo, ¿Cómo?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Por qué no le llegaría al destinatario que el receptor vé?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Es esto una indicación de una estafa? Justifique&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Parte k&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Qué protocolo usará nuestro MUA para enviar un correo con remitente redes@info.unlp.edu.ar?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Con quién se conectará?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Qué información será necesaria y cómo la obtendría?&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Parte l&lt;/h3&gt;
&lt;p&gt;Dado que solo disponemos de un servidor de correo&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿qué sucederá con los mails que intenten ingresar durante un reinicio del servidor?&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Parte m&lt;/h3&gt;
&lt;p&gt;Suponga que contratamos un servidor de correo electrónico en la nube para integrarlo con nuestra arquitectura de servicios.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Cómo configuraría el DNS para que ambos servidores de correo se comporten de manera de dar un servicio de correo tolerante a fallos?&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 11&lt;/h2&gt;
&lt;hr&gt;
&lt;h2&gt;Ejercicio 12&lt;/h2&gt;
&lt;hr&gt;
&lt;h2&gt;Consultas&lt;/h2&gt;</content:encoded><h:img src="/_astro/thumbnail.79I8gluM.jpg"/><enclosure url="/_astro/thumbnail.79I8gluM.jpg"/></item><item><title>Practica 5 Redes | Capa de Transporte</title><link>https://fabianmartinezrincon.com/blog/practica-5-redes</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/practica-5-redes</guid><description>Practica 5 de Redes y Comunicaciones</description><pubDate>Tue, 07 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Practica 5&lt;/h2&gt;
&lt;h3&gt;Capa de Transporte - Parte 1&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-1&quot;&gt;Ejercicio 1 ¿Cuál es la función de la capa de transporte?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-2&quot;&gt;Ejercicio 2 Describa la estructura del segmento TCP y UDP.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-3&quot;&gt;Ejercicio 3 ¿Cuál es el objetivo del uso de puertos en el modelo TCP/IP?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-4&quot;&gt;Ejercicio 4 Compare TCP y UDP en cuanto a&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-5&quot;&gt;Ejercicio 5 La PDU de la capa de transporte es el segmento&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-6&quot;&gt;Ejercicio 6 Describa el saludo de tres vías de TCP.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-7&quot;&gt;Ejercicio 7 Investigue qué es el ISN &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-8&quot;&gt;Ejercicio 8 Investigue qué es el MSS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-9&quot;&gt;Ejercicio 9 Utilice el comando ss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-10&quot;&gt;Ejercicio 10 Qué sucede si llega un segmento TCP con el flag SYN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-11&quot;&gt;Ejercicio 11 Qué sucede si llega un datagrama UDP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-12&quot;&gt;Ejercicio 12 Investigue los distintos tipos de estado que puede tener una conexión TCP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-13&quot;&gt;Ejercicio 13 Use CORE para armar una topología como la siguiente&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-14&quot;&gt;Ejercicio 14 Dada la siguiente salida del comando ss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-15&quot;&gt;Ejercicio 15 Dadas las salidas de los siguientes comando se jecutados en el cliente y el servidor &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 1&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Cuál es la función de la capa de transporte?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La función de la capa de transporte es fundamental en el modelo de redes TCP/IP, ya que proporciona servicios de comunicación de extremo a extremo para aplicaciones sobre una red. Aquí hay algunas funciones clave que desempeña esta capa:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Segmentación de datos&lt;/strong&gt;: Divide los datos de aplicación en segmentos más pequeños que son más manejables para enviar a través de una red.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Control de flujo&lt;/strong&gt;: Regula la cantidad de datos que un remitente transmite para asegurarse de que el receptor pueda manejarlo, evitando que los buffers de recepción se desborden.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Transferencia de datos confiable&lt;/strong&gt;: Asegura que los datos se transmitan de manera confiable a través de la red, utilizando acuses de recibo, retransmisiones y sumas de verificación para gestionar la pérdida de paquetes o datos corruptos.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Control de congestión&lt;/strong&gt;: Evita que la red se sature controlando la tasa a la que se envían los datos, basándose en el estado percibido de la red y en la respuesta de los dispositivos dentro de la red.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Multiplexación y demultiplexación&lt;/strong&gt;: Permite que múltiples aplicaciones utilicen simultáneamente la red, asignando a cada flujo de datos un puerto específico.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Estas funciones se implementan a través de dos protocolos principales: TCP (Protocolo de Control de Transmisión) y UDP (Protocolo de Datagrama de Usuario), cada uno ofreciendo diferentes niveles de servicio en función de las necesidades de la aplicación. TCP proporciona un servicio de transmisión confiable y controlado, mientras que UDP ofrece un servicio más rápido pero menos confiable.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 2&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Describa la estructura del segmento TCP y UDP.&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Estructura del Segmento TCP&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Campos del Segmento TCP&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Puertos (MUX/DEMUX)&lt;/strong&gt;: Utilizados para multiplexar y demultiplexar los servicios de aplicación sobre el protocolo TCP, asignando el tráfico al proceso de aplicación correcto en los sistemas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Longitud del encabezado (HDR LEN)&lt;/strong&gt;: Variable, puede tener un máximo de 60 bytes (unidad=4 bytes).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Checksum&lt;/strong&gt;: Se calcula para verificar la integridad de los datos del segmento. Es obligatorio y ayuda a detectar errores en los datos transmitidos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flags&lt;/strong&gt;: Incluyen señales importantes como SYN (sincronización), FIN (finalización) y RST (reset).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Número de secuencia y acuse de recibo (Num. Sec (#Seq), Num. Ack (#Ack))&lt;/strong&gt;: Para el control de la transferencia de datos, indicando el orden y la confirmación de los datos recibidos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ventana (Win)&lt;/strong&gt;: Utilizada para el control de flujo, especificando la cantidad de bytes que están disponibles para ser recibidos en el buffer del receptor.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Opciones de control de congestión&lt;/strong&gt;: Se agregan banderas adicionales relacionadas con la gestión de la congestión en la red.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Estructura del Datagrama UDP&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Campos del Datagrama UDP&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Puertos (MUX/DEMUX)&lt;/strong&gt;: Similar a TCP, se utilizan para direccionar los datagramas a la aplicación correcta mediante la multiplexación y demultiplexación.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Longitud&lt;/strong&gt;: Incluye la longitud total del encabezado de UDP y los datos (payload).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Checksum&lt;/strong&gt;: Es opcional en IPv4 (UDP4) y se calcula sumando el encabezado de UDP, el pseudoencabezado y los datos. Proporciona una verificación de errores básica, aunque no es tan robusta como en TCP.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pseudoencabezado&lt;/strong&gt;: Incluye direcciones IP de origen y destino, un campo reservado a cero, el protocolo UDP y la longitud del UDP, ayudando a asegurar que el datagrama llegue al destino correcto y minimizando el mal enrutamiento.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Estas estructuras indican cómo TCP y UDP manejan la transmisión de datos, con TCP ofreciendo más características para la fiabilidad y el control, mientras que UDP proporciona un servicio más simple y rápido, ideal para aplicaciones que pueden manejar pérdidas ocasionales de paquetes, como streaming de video o juegos en línea.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 3&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Cuál es el objetivo del uso de puertos en el modelo TCP/IP?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El objetivo del uso de puertos en el modelo TCP/IP es facilitar la multiplexación y la demultiplexación de múltiples conexiones a través de una única interfaz de red. Los puertos permiten que diferentes procesos o servicios de aplicación en una misma computadora identifiquen a qué sesión de comunicación pertenecen los paquetes de datos que llegan a través de la red. Esto se logra asignando un número de puerto único a cada servicio y sesión, lo que permite que el sistema operativo redirija correctamente los datos entrantes a la aplicación o proceso adecuado.&lt;/p&gt;
&lt;h4&gt;Funciones principales de los puertos en el modelo TCP/IP:&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Identificación de Aplicación&lt;/strong&gt;: Los puertos sirven como puntos finales en la capa de transporte. Cada aplicación o servicio en un dispositivo que necesita recibir datos de la red es asignada a un puerto específico, ya sea de manera estándar (puertos bien conocidos) o de manera dinámica.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Multiplexación&lt;/strong&gt;: Permite a un servidor manejar múltiples conexiones entrantes para el mismo servicio, distinguiendo entre ellas a través de los números de puerto combinados con las direcciones IP de origen.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Demultiplexación&lt;/strong&gt;: Facilita que el sistema operativo del dispositivo receptor distribuya correctamente los datos entrantes al programa o proceso correcto, basado en el número de puerto al que están dirigidos los datos.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Soporte para múltiples Aplicaciones&lt;/strong&gt;: Los puertos permiten que múltiples aplicaciones se ejecuten simultáneamente en un dispositivo, con cada una usando su propio puerto para evitar conflictos y asegurar la correcta entrega de los datos.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Control de Acceso y Seguridad&lt;/strong&gt;: Algunos puertos son reservados o bien conocidos y son utilizados por servicios específicos (como HTTP en el puerto 80 o HTTPS en el puerto 443), lo que permite implementar políticas de seguridad y firewalls más efectivos basados en números de puerto conocidos.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Los puertos son fundamentales para la eficiencia y organización del tráfico de red en sistemas que utilizan el modelo TCP/IP, facilitando la coexistencia de múltiples conexiones y aplicaciones dentro de un mismo dispositivo de red.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 4&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Compare TCP y UDP en cuanto a:&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;TCP y UDP son dos protocolos fundamentales en la capa de transporte del modelo TCP/IP, cada uno con características y usos específicos. A continuación, se presenta una comparación detallada entre ambos protocolos en los aspectos solicitados:&lt;/p&gt;
&lt;h4&gt;a) Confiabilidad&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;TCP&lt;/strong&gt;: Es un protocolo orientado a la conexión y ofrece garantías de entrega. Utiliza confirmaciones, retransmisiones y un mecanismo de control de errores para asegurar que los datos lleguen de manera correcta y en orden al destinatario. Si los datos se pierden o se dañan durante la transmisión, TCP se encarga de solicitar la retransmisión de estos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UDP&lt;/strong&gt;: Es un protocolo no orientado a la conexión y no garantiza la entrega de los paquetes. No utiliza confirmaciones ni retransmisiones, lo que significa que si los paquetes se pierden, no se recuperan automáticamente.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;b) Multiplexación&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;TCP y UDP&lt;/strong&gt;: Ambos protocolos soportan la multiplexación usando puertos. Cada segmento de TCP o datagrama de UDP contiene un puerto de origen y un puerto de destino, lo que permite que múltiples aplicaciones en los hosts envíen y reciban datos simultáneamente sin interferencia entre ellas.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;c) Orientado a la conexión&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;TCP&lt;/strong&gt;: Es un protocolo orientado a la conexión, lo que significa que antes de que cualquier dato pueda ser enviado, se debe establecer una conexión entre el cliente y el servidor mediante un proceso conocido como &quot;three-way handshake&quot;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UDP&lt;/strong&gt;: No es orientado a la conexión, por lo que no requiere de una conexión inicial antes de enviar datos. Esto permite que la comunicación sea más rápida, pero menos fiable.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;d) Controles de congestión&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;TCP&lt;/strong&gt;: Implementa varios mecanismos de control de congestión para gestionar la cantidad de datos que se envían a través de la red, evitando así la saturación de la red y garantizando un rendimiento óptimo. Esto incluye algoritmos como &quot;slow start&quot;, &quot;congestion avoidance&quot;, &quot;fast retransmit&quot; y &quot;fast recovery&quot;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UDP&lt;/strong&gt;: No tiene controles de congestión. Los datos se envían tan rápido como los permite la aplicación, sin tener en cuenta el estado de la red, lo que puede llevar a una mayor tasa de pérdida de paquetes si la red está congestionada.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;e) Utilización de puertos&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;TCP y UDP&lt;/strong&gt;: Ambos protocolos utilizan puertos para identificar las aplicaciones específicas dentro de los hosts que están enviando o recibiendo datos. Los puertos proporcionan una forma de dirigir los segmentos de datos (en TCP) o datagramas (en UDP) a la aplicación correcta en un proceso conocido como demultiplexación.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En resumen, TCP es más adecuado para aplicaciones que requieren entrega garantizada y confiabilidad, como transferencias de archivos, navegación web y correo electrónico. UDP es preferible para aplicaciones que requieren baja latencia y pueden tolerar cierta pérdida de datos, como juegos en línea, streaming de video o VoIP.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 5&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;La PDU de la capa de transporte es el segmento. Sin embargo, en algunos contextos suele utilizarse el término datagrama. Indique cuando.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;En el contexto de la capa de transporte del modelo OSI o TCP/IP, el término &lt;strong&gt;&quot;segmento&quot;&lt;/strong&gt; se utiliza específicamente para referirse a la unidad de datos manejada por el protocolo TCP (Transmission Control Protocol), mientras que el término &lt;strong&gt;&quot;datagrama&quot;&lt;/strong&gt; se utiliza cuando se habla del protocolo UDP (User Datagram Protocol).&lt;/p&gt;
&lt;p&gt;Aquí están las circunstancias en las que cada término es apropiado:&lt;/p&gt;
&lt;h4&gt;Segmento&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Utilizado en TCP&lt;/strong&gt;: El segmento es la unidad de transferencia en TCP. Un segmento de TCP encapsula los datos de la capa de aplicación y añade su propia cabecera TCP, que incluye información vital como números de secuencia y acuse de recibo, puertos de origen y destino, flags de control, ventana de recepción, y otros campos que son esenciales para la entrega confiable y controlada de datos.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Datagrama&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Utilizado en UDP&lt;/strong&gt;: Un datagrama UDP es la unidad de transferencia para el protocolo UDP. Los datagramas UDP también encapsulan datos de la capa de aplicación pero con una cabecera mucho más simple comparada con TCP. Esta cabecera incluye solo los puertos de origen y destino, la longitud total del datagrama y una suma de verificación. UDP es conocido por ser un protocolo sin conexión y no orientado a la confiabilidad, lo que permite un transporte más rápido pero menos seguro de los datos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En resumen, &lt;strong&gt;&quot;segmento&quot;&lt;/strong&gt; se usa cuando se discuten las operaciones de TCP debido a su naturaleza orientada a la conexión y sus mecanismos integrados para la confiabilidad. &lt;strong&gt;&quot;Datagrama&quot;&lt;/strong&gt;, por otro lado, se usa en el contexto de UDP, donde la velocidad y la eficiencia son prioritarias sobre la garantía de entrega y el orden de los paquetes.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 6&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Describa el saludo de tres vías de TCP. ¿Se utiliza algo similar en UDP?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El saludo de tres vías (three-way handshake) es un procedimiento fundamental en TCP (Transmission Control Protocol) utilizado para establecer una conexión entre un cliente y un servidor antes de que comiencen a enviarse datos. Este mecanismo asegura que ambos extremos estén preparados para la transmisión de datos y manejen correctamente las secuencias de números de secuencia, que son cruciales para la entrega ordenada y confiable de los paquetes.&lt;/p&gt;
&lt;h4&gt;Saludo de Tres Vías en TCP&lt;/h4&gt;
&lt;p&gt;El proceso incluye tres pasos:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SYN&lt;/strong&gt;: El cliente inicia la conexión enviando un segmento TCP con la bandera SYN (synchronize) activada, que incluye un número de secuencia inicial (ISN, por sus siglas en inglés).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SYN-ACK&lt;/strong&gt;: El servidor responde al cliente con un segmento que tiene las banderas SYN y ACK (acknowledgment) activadas. Este segmento contiene el propio número de secuencia inicial del servidor y un número de acuse de recibo, que es el número de secuencia inicial del cliente incrementado en uno.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ACK&lt;/strong&gt;: Finalmente, el cliente envía un segmento con la bandera ACK activada, reconociendo la recepción del segmento SYN del servidor. El número de acuse de recibo enviado por el cliente es el número de secuencia inicial del servidor incrementado en uno.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Esta secuencia establece una conexión fiable, donde ambos extremos confirman que han recibido los números de secuencia iniciales del otro y están listos para la comunicación.&lt;/p&gt;
&lt;h4&gt;UDP y su Mecanismo de &quot;Saludo&quot;&lt;/h4&gt;
&lt;p&gt;A diferencia de TCP, UDP (User Datagram Protocol) es un protocolo sin conexión, lo que significa que no establece una conexión antes de enviar datos. UDP envía datagramas sin esperar acuse de recibo y sin garantizar que los paquetes lleguen en orden o incluso que lleguen. Por lo tanto, no utiliza un mecanismo de saludo de tres vías ni ningún otro procedimiento similar para establecer una conexión.&lt;/p&gt;
&lt;p&gt;En resumen, UDP es preferido en aplicaciones donde la velocidad y la eficiencia son más críticas que la confiabilidad, como en la transmisión de video o juegos en tiempo real, mientras que TCP es utilizado cuando se requiere garantizar la entrega de los datos, como en transferencias de archivo y comunicaciones de correo electrónico.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 7&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Investigue qué es el ISN (Initial Sequence Number). Relaciónelo con el saludo de tres vías&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El ISN (Initial Sequence Number) es un componente crítico en el protocolo TCP (Transmission Control Protocol) que se utiliza para iniciar una conexión de manera segura y ordenada. El ISN es un número de 32 bits seleccionado aleatoriamente por cada host al comenzar las conexiones TCP. Este número es esencial para la administración y el control de flujo del protocolo, permitiendo a los dispositivos participantes mantener un registro correcto y ordenado de los segmentos transmitidos y recibidos.&lt;/p&gt;
&lt;h4&gt;Relación del ISN con el Saludo de Tres Vías&lt;/h4&gt;
&lt;p&gt;El ISN juega un papel clave en el proceso de establecimiento de conexión en TCP, conocido como el saludo de tres vías, que funciona de la siguiente manera:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SYN&lt;/strong&gt;: Cuando un cliente desea iniciar una conexión TCP con un servidor, envía un segmento con la bandera SYN activada. Este segmento incluye un ISN, que es el número de secuencia inicial para los segmentos que enviará el cliente. Este número no solo ayuda a iniciar el conteo de secuencia de los paquetes enviados por el cliente sino que también ayuda a prevenir algunos tipos de ataques y problemas relacionados con las conexiones antiguas que aún persisten en la red (problema conocido como &quot;old duplicate segments&quot;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SYN-ACK&lt;/strong&gt;: El servidor responde al cliente con otro segmento, también marcado con las banderas SYN y ACK. Este segmento lleva su propio ISN, que se utiliza para la secuencia de segmentos enviados desde el servidor al cliente, además de incluir el número de acuse de recibo, que es el ISN del cliente incrementado en uno. Este paso confirma al cliente que el servidor está listo para recibir datos comenzando desde el número de secuencia que el cliente ha proporcionado.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ACK&lt;/strong&gt;: Finalmente, el cliente envía un segmento ACK al servidor, confirmando la recepción del ISN del servidor. El número de acuse de recibo en este segmento será el ISN del servidor incrementado en uno. Este paso completa el establecimiento de la conexión, y ambos extremos están listos para comenzar la transmisión de datos.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;La elección de un ISN aleatorio es crucial para la seguridad de la conexión TCP. Una selección predecible del ISN puede hacer que la conexión sea vulnerable a ataques de &quot;hijacking&quot; o inyección de paquetes, donde un atacante podría predecir los números de secuencia de los paquetes y enviar paquetes maliciosos dentro de la sesión TCP legítima.&lt;/p&gt;
&lt;p&gt;En resumen, el ISN es fundamental para el establecimiento de una conexión TCP segura y confiable, asegurando que la secuencia de mensajes sea gestionada de manera correcta desde el inicio de la conexión.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 8&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Investigue qué es el MSS. ¿Cuándo y cómo se negocia?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El MSS (Maximum Segment Size) es un parámetro utilizado en el protocolo TCP (Transmission Control Protocol) que especifica el tamaño máximo de datos, en bytes, que un dispositivo está dispuesto a recibir en un único segmento TCP. Este tamaño no incluye la cabecera TCP ni la cabecera IP, únicamente los datos del segmento.&lt;/p&gt;
&lt;h3&gt;¿Cuándo y cómo se negocia el MSS?&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Negociación durante el establecimiento de la conexión&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El MSS se negocia al inicio de una conexión TCP durante el proceso de establecimiento de la conexión, específicamente durante el saludo de tres vías.&lt;/li&gt;
&lt;li&gt;Cada host comunica su MSS utilizando la opción MSS en el segmento TCP que tiene la bandera SYN activada. Esto significa que tanto el cliente como el servidor envían su MSS preferido cuando envían sus respectivos paquetes SYN y SYN-ACK.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Propósito de la negociación&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La negociación del MSS es crucial para optimizar el uso del ancho de banda y reducir la fragmentación en la red. Al acordar un tamaño máximo de segmento, los dispositivos pueden ajustar la cantidad de datos enviados en cada paquete para maximizar la eficiencia y evitar la fragmentación de paquetes a lo largo del camino de la red.&lt;/li&gt;
&lt;li&gt;El valor del MSS típicamente se establece en función del MTU (Maximum Transmission Unit) de la red menos el tamaño de las cabeceras TCP (20 bytes, sin opciones) y IP (20 bytes para IPv4 sin opciones). Por ejemplo, si el MTU es de 1500 bytes (común en redes Ethernet), el MSS sería 1460 bytes (1500 - 40).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cómo se establece el MSS&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cada lado de una conexión TCP puede especificar un valor de MSS diferente. Por ejemplo, un host podría enviar un MSS de 1460 bytes mientras que el otro podría enviar un MSS de 1400 bytes.&lt;/li&gt;
&lt;li&gt;El tamaño efectivo del segmento que se utilizará es el menor de los dos valores MSS negociados. Esto garantiza que ambos hosts puedan manejar los segmentos que reciben sin necesidad de fragmentación y dentro de los límites de su capacidad de procesamiento y configuración de red.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En resumen, el MSS es un parámetro negociado al inicio de una conexión TCP que ayuda a definir el tamaño óptimo de los segmentos de datos, lo cual es clave para la eficiencia de la transmisión y la minimización de problemas como la fragmentación en la red.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 9&lt;/h3&gt;
&lt;p&gt;Utilice el comando ss (reemplazo de netstat) para obtener la siguiente información de su PC:&lt;/p&gt;
&lt;p&gt;Para obtener la información requerida utilizando el comando &lt;code&gt;ss&lt;/code&gt; en Linux, que es una herramienta moderna y rápida para monitorizar las conexiones de sockets, aquí están los comandos específicos para cada situación:&lt;/p&gt;
&lt;h4&gt;Comandos con &lt;code&gt;ss&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;a) Para listar las comunicaciones TCP establecidas:&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ss -t state established

Recv-Q    Send-Q       Local Address:Port       Peer Address:Port    Process  
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;El comando &lt;code&gt;ss -t state established&lt;/code&gt; es utilizado para ver las conexiones TCP que están actualmente establecidas en tu sistema. Aquí te explico en detalle cada parte del comando y lo que muestra en su salida:&lt;/p&gt;
&lt;h3&gt;Detalles del Comando:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ss&lt;/code&gt;: Es el comando que se usa para obtener estadísticas de los sockets.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-t&lt;/code&gt;: Filtra para mostrar solo los sockets TCP.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;state established&lt;/code&gt;: Muestra solo las conexiones que están en el estado &quot;ESTABLISHED&quot;, lo que significa que hay una sesión TCP activa y operativa entre dos dispositivos.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Salida del Comando:&lt;/h3&gt;
&lt;p&gt;La salida típica de este comando incluye varias columnas que proporcionan información detallada sobre cada conexión:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Recv-Q&lt;/strong&gt;: Muestra la cantidad de bytes que están en la cola de recepción y que aún no han sido recogidos por el proceso que maneja esta conexión. Si hay datos esperando ser leídos por la aplicación, este valor será mayor que cero.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Send-Q&lt;/strong&gt;: Muestra la cantidad de bytes en la cola de envío que todavía no han sido transmitidos a la red. Un número mayor que cero aquí indica que hay datos esperando ser enviados.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Local Address:Port&lt;/strong&gt;: Muestra la dirección IP local y el puerto asociado con la conexión. Esta es la dirección en tu máquina.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Peer Address:Port&lt;/strong&gt;: Muestra la dirección IP y el puerto del otro extremo de la conexión. Esta es la dirección del dispositivo remoto con el que se ha establecido la conexión TCP.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Process&lt;/strong&gt;: Esta columna muestra información sobre el proceso que está utilizando la conexión. Esto incluye el ID del proceso (PID) y el nombre del programa que utiliza el socket. Esta información es muy útil para determinar qué aplicación específica está manejando la conexión. Sin embargo, es posible que necesites usar opciones adicionales (&lt;code&gt;-p&lt;/code&gt; con privilegios de superusuario) para ver detalles del proceso si no aparecen por defecto.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este comando es especialmente útil para los administradores de sistemas y desarrolladores que necesitan diagnosticar problemas de red, monitorear el rendimiento de las aplicaciones de red o simplemente obtener un resumen de todas las conexiones TCP activas en un sistema.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;b) Para listar las comunicaciones UDP establecidas:&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ss -u state established

Recv-Q   Send-Q        Local Address:Port       Peer Address:Port     Process   
0        0          10.0.2.15%enp0s3:bootpc         10.0.2.2:bootps     
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;El comando &lt;code&gt;ss -u state established&lt;/code&gt; es un poco inusual cuando se aplica a protocolos sin conexión como UDP, porque UDP, a diferencia de TCP, no tiene un estado &quot;establecido&quot; como tal. Sin embargo, el comando intentará mostrar las conexiones UDP que se pueden describir como activas o abiertas, aunque UDP en sí mismo no establece una conexión persistente entre dos puntos.&lt;/p&gt;
&lt;h3&gt;Explicación del Comando:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ss&lt;/code&gt;: Es el comando para obtener estadísticas de los sockets, sustituyendo al antiguo &lt;code&gt;netstat&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-u&lt;/code&gt;: Filtra para mostrar solo los sockets UDP.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;state established&lt;/code&gt;: Intenta listar conexiones UDP que están &quot;activas&quot;. Aunque en UDP no aplicaría realmente el término &quot;establecido&quot;, en algunos contextos, como las conexiones DHCP (bootp en el ejemplo), se puede considerar que hay un intercambio activo de paquetes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Salida del Comando:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Recv-Q&lt;/strong&gt;: Muestra la cantidad de bytes que están esperando ser recogidos por el proceso en la cola de recepción. Para UDP, esto generalmente indica si hay datos recibidos que aún no han sido procesados por la aplicación.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Send-Q&lt;/strong&gt;: Muestra la cantidad de bytes que están esperando ser enviados. En UDP, debido a que no hay confirmación de la recepción de los paquetes, esto normalmente debería ser cero a menos que el buffer de salida esté momentáneamente lleno.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Local Address:Port&lt;/strong&gt;: Esta columna muestra la dirección IP local y el puerto utilizado por tu máquina para esta comunicación UDP. En el ejemplo dado, &lt;code&gt;10.0.2.15%enp0s3:bootpc&lt;/code&gt; indica que la dirección IP local es 10.0.2.15 (con el interfaz de red &lt;code&gt;enp0s3&lt;/code&gt;) y el puerto local es &lt;code&gt;bootpc&lt;/code&gt; (67, usado típicamente para solicitudes DHCP).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Peer Address:Port&lt;/strong&gt;: Muestra la dirección IP y el puerto del otro extremo con el que se está comunicando el socket UDP. En tu ejemplo, &lt;code&gt;10.0.2.2:bootps&lt;/code&gt; representa el servidor DHCP desde el cual el cliente (en este caso, la máquina local) espera recibir una respuesta.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Process&lt;/strong&gt;: Detalles del proceso que usa este socket UDP, si están disponibles y si se ejecuta &lt;code&gt;ss&lt;/code&gt; con los privilegios adecuados. En el ejemplo que has proporcionado, esta columna no muestra ningún proceso, lo que puede ser típico para las transmisiones de bajo nivel como DHCP donde el proceso puede ser parte del sistema operativo en lugar de un proceso de usuario visible.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En resumen, aunque el uso de &lt;code&gt;state established&lt;/code&gt; con UDP puede no ser conceptualmente correcto debido a la naturaleza sin conexión de UDP, este comando puede ser útil para identificar los puertos UDP activos y la dirección de sus comunicaciones en situaciones específicas como transacciones DHCP o DNS.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;c) Obtener sólo los servicios TCP que están esperando comunicaciones:&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ss -tln

State   Recv-Q  Send-Q        Local Address:Port    Peer Address:Port  Process  
LISTEN  0       128                 0.0.0.0:22           0.0.0.0:*              
LISTEN  0       128               127.0.0.1:631          0.0.0.0:*              
LISTEN  0       5                 127.0.0.1:4038         0.0.0.0:*              
LISTEN  0       128                    [::]:22              [::]:*              
LISTEN  0       128                   [::1]:631             [::]:*              
LISTEN  0       4096                  [::1]:50051           [::]:*              
LISTEN  0       4096     [::ffff:127.0.0.1]:50051              *:*     
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;El comando &lt;code&gt;ss -tln&lt;/code&gt; es utilizado para listar todos los sockets TCP en estado &lt;code&gt;LISTEN&lt;/code&gt;, lo cual indica que estos sockets están configurados para aceptar conexiones entrantes. Esta es una herramienta crucial para los administradores de sistemas y de redes para verificar qué servicios están activos y escuchando en qué puertos. Aquí está un desglose detallado de lo que muestra cada columna en la salida de este comando:&lt;/p&gt;
&lt;h3&gt;Explicación de las Opciones del Comando:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ss&lt;/code&gt;: Es el comando para obtener estadísticas de sockets.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-t&lt;/code&gt;: Filtra para mostrar solo sockets TCP.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-l&lt;/code&gt;: Muestra solo los sockets que están en estado de escucha (listen).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-n&lt;/code&gt;: Muestra los números de puerto y las direcciones IP en formato numérico, evitando la resolución de nombres, lo que puede hacer que la ejecución del comando sea más rápida y clara en su salida.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Desglose de las Columnas:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;State&lt;/strong&gt;: Muestra el estado actual del socket. Aquí, todos están en &lt;code&gt;LISTEN&lt;/code&gt;, lo que significa que están esperando activamente conexiones entrantes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Recv-Q y Send-Q&lt;/strong&gt;: Estas columnas muestran el tamaño de la cola de recepción y envío respectivamente. Para los sockets en estado &lt;code&gt;LISTEN&lt;/code&gt;, &lt;code&gt;Recv-Q&lt;/code&gt; siempre será &lt;code&gt;0&lt;/code&gt; porque no están recibiendo datos en ese momento. &lt;code&gt;Send-Q&lt;/code&gt; también es normalmente &lt;code&gt;0&lt;/code&gt; en este estado, indicando que no hay datos pendientes de envío.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Local Address:Port&lt;/strong&gt;: Indica la dirección IP local y el puerto en los cuales el servicio está escuchando. Si ves &lt;code&gt;0.0.0.0&lt;/code&gt; o &lt;code&gt;[::]&lt;/code&gt;, significa que el servicio está escuchando en todas las interfaces de red para IPv4 o IPv6 respectivamente. Si ves una dirección específica, como &lt;code&gt;127.0.0.1&lt;/code&gt; o &lt;code&gt;[::1]&lt;/code&gt;, el servicio está escuchando solo en la interfaz de loopback, que es accesible solo desde la misma máquina.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Peer Address:Port&lt;/strong&gt;: En el estado &lt;code&gt;LISTEN&lt;/code&gt;, esta columna siempre muestra &lt;code&gt;*&lt;/code&gt; o &lt;code&gt;0.0.0.0:*&lt;/code&gt;, lo que indica que el socket está listo para aceptar conexiones de cualquier dirección IP.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Process&lt;/strong&gt;: Esta columna normalmente no aparece a menos que se especifique con opciones adicionales (&lt;code&gt;-p&lt;/code&gt;). Muestra el identificador del proceso que está utilizando cada socket.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Ejemplos de la Salida:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0.0.0.0:22&lt;/code&gt; y &lt;code&gt;[::]:22&lt;/code&gt; indican que el servicio SSH está escuchando en todas las interfaces IPv4 e IPv6 en el puerto 22.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;127.0.0.1:631&lt;/code&gt; y &lt;code&gt;[::1]:631&lt;/code&gt; muestran que el servicio de impresión (CUPS) está escuchando en la interfaz de loopback, tanto en IPv4 como en IPv6, solo accesible localmente.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;127.0.0.1:4038&lt;/code&gt; muestra otro servicio que está escuchando solo en la interfaz de loopback de IPv4.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[::1]:50051&lt;/code&gt; muestra un servicio que está escuchando en el puerto 50051 solo en IPv6 en la interfaz de loopback.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estos detalles son esenciales para la gestión de la seguridad y la configuración del servidor, ya que permiten a los administradores saber qué puertos están abiertos y listos para recibir conexiones, lo cual es vital para asegurar y optimizar el servidor.&lt;/p&gt;
&lt;p&gt;El flag &lt;code&gt;-l&lt;/code&gt; lista los sockets que están en estado de escucha, y &lt;code&gt;-n&lt;/code&gt; evita la resolución de nombres, mostrando las direcciones IP y números de puerto en formato numérico.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;d) Obtener sólo los servicios UDP que están esperando comunicaciones:&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ss -uln

State   Recv-Q   Send-Q     Local Address:Port      Peer Address:Port  Process  
UNCONN  0        0                0.0.0.0:5353           0.0.0.0:*              
UNCONN  0        0                0.0.0.0:59816          0.0.0.0:*              
UNCONN  0        0                0.0.0.0:631            0.0.0.0:*              
UNCONN  0        0              127.0.0.1:4038           0.0.0.0:*              
UNCONN  0        0                   [::]:5353              [::]:*              
UNCONN  0        0                   [::]:40448             [::]:*      
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;El comando &lt;code&gt;ss -uln&lt;/code&gt; se utiliza para mostrar información sobre los sockets UDP que están en estado de espera (es decir, no están conectados pero están listos para recibir datos). Este comando es esencial para la administración de redes y la seguridad, ya que permite a los administradores verificar qué servicios UDP están activos y escuchando en la máquina local. A continuación, se detalla el significado de las opciones del comando y de cada columna en la salida:&lt;/p&gt;
&lt;h3&gt;Explicación de las Opciones del Comando:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ss&lt;/code&gt;: Es el comando para obtener estadísticas de sockets.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-u&lt;/code&gt;: Filtra para mostrar solo sockets UDP.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-l&lt;/code&gt;: Muestra solo los sockets que están en estado de escucha (listen).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-n&lt;/code&gt;: Muestra los números de puerto y las direcciones IP en formato numérico, lo que evita la resolución de nombres y agiliza la visualización.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Desglose de las Columnas:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;State&lt;/strong&gt;: Muestra el estado del socket. &lt;code&gt;UNCONN&lt;/code&gt; (unconnected) indica que el socket no está conectado pero está listo para recibir paquetes UDP.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Recv-Q y Send-Q&lt;/strong&gt;: Representan la cantidad de datos en la cola de recepción y envío, respectivamente. Para los sockets UDP en estado &lt;code&gt;UNCONN&lt;/code&gt;, estas colas suelen estar en &lt;code&gt;0&lt;/code&gt; porque los sockets simplemente están esperando para recibir datos.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Local Address:Port&lt;/strong&gt;: Indica la dirección IP local y el puerto en los cuales el servicio está escuchando. Si la dirección es &lt;code&gt;0.0.0.0&lt;/code&gt; o &lt;code&gt;[::]&lt;/code&gt;, el servicio está escuchando en todas las interfaces de red, tanto para IPv4 como IPv6. Direcciones específicas como &lt;code&gt;127.0.0.1&lt;/code&gt; indican que el servicio solo acepta tráfico local (loopback).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Peer Address:Port&lt;/strong&gt;: Dado que estos sockets están en estado &lt;code&gt;UNCONN&lt;/code&gt;, esta columna siempre mostrará &lt;code&gt;0.0.0.0:*&lt;/code&gt; o &lt;code&gt;[::]:*&lt;/code&gt;, lo que significa que están preparados para recibir datos desde cualquier dirección IP.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Ejemplos de la Salida:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;0.0.0.0:5353&lt;/code&gt; y &lt;code&gt;[::]:5353&lt;/code&gt;: Muestra que el servicio mDNS está escuchando en todos los interfaces disponibles en el puerto 5353, tanto para IPv4 como para IPv6. Este servicio se utiliza comúnmente para la resolución de nombres en redes locales.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;0.0.0.0:59816&lt;/code&gt; y &lt;code&gt;[::]:40448&lt;/code&gt;: Estos son puertos UDP dinámicos o efímeros que están escuchando en todas las interfaces. Estos puertos pueden ser utilizados por aplicaciones que esperan recibir datos específicos.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;0.0.0.0:631&lt;/code&gt; y &lt;code&gt;127.0.0.1:4038&lt;/code&gt;: Indica que estos servicios están escuchando para tráfico UDP, en el caso de &lt;code&gt;631&lt;/code&gt; en todas las interfaces y para &lt;code&gt;4038&lt;/code&gt; solo en la interfaz de loopback.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estos detalles permiten a los administradores monitorizar y gestionar los servicios que utilizan el protocolo UDP, asegurándose de que solo los servicios deseados están accesibles y que no hay puertos abiertos innecesarios que podrían ser explotados por agentes maliciosos.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;e) Repetir los anteriores para visualizar el proceso del sistema asociado a la conexión:&lt;/code&gt;
Para TCP:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ss -tlnp

State   Recv-Q  Send-Q        Local Address:Port    Peer Address:Port  Process  
LISTEN  0       128                 0.0.0.0:22           0.0.0.0:*              
LISTEN  0       128               127.0.0.1:631          0.0.0.0:*              
LISTEN  0       5                 127.0.0.1:4038         0.0.0.0:*              
LISTEN  0       128                    [::]:22              [::]:*              
LISTEN  0       128                   [::1]:631             [::]:*              
LISTEN  0       4096                  [::1]:50051           [::]:*              
LISTEN  0       4096     [::ffff:127.0.0.1]:50051              *:*     
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;El comando &lt;code&gt;ss -tlnp&lt;/code&gt; es una herramienta poderosa para administradores de sistemas y de redes. Se utiliza para mostrar información detallada sobre las conexiones TCP en estado de escucha (LISTEN), incluyendo qué procesos están asociados con cada socket. Esto es fundamental para la gestión y la seguridad de la red, ya que permite identificar qué aplicaciones están utilizando los puertos de red. Aquí desglosaré las opciones del comando y explicaré cada columna en la salida:&lt;/p&gt;
&lt;h3&gt;Explicación de las Opciones del Comando:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ss&lt;/code&gt;: Comando para obtener estadísticas de los sockets.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-t&lt;/code&gt;: Filtra para mostrar solo conexiones TCP.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-l&lt;/code&gt;: Muestra solo los sockets que están en estado de escucha.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-n&lt;/code&gt;: Muestra números de puerto y direcciones IP en formato numérico, sin resolver nombres para acelerar la respuesta.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-p&lt;/code&gt;: Muestra el proceso que está asociado con cada socket.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Desglose de las Columnas:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;State&lt;/strong&gt;: Indica el estado del socket. &lt;code&gt;LISTEN&lt;/code&gt; significa que el socket está esperando conexiones entrantes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Recv-Q y Send-Q&lt;/strong&gt;: Representan la cantidad de datos en las colas de recepción y envío, respectivamente. Para sockets en estado &lt;code&gt;LISTEN&lt;/code&gt;, estos valores generalmente son cero porque no hay datos siendo enviados o recibidos aún.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Local Address:Port&lt;/strong&gt;: Dirección y puerto locales en los que el servicio está escuchando. Por ejemplo, &lt;code&gt;0.0.0.0:22&lt;/code&gt; indica que el servicio está escuchando en todas las interfaces de red disponibles en el puerto 22 (usualmente SSH). Si la dirección es específica, como &lt;code&gt;127.0.0.1:631&lt;/code&gt;, el servicio solo acepta conexiones locales.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Peer Address:Port&lt;/strong&gt;: Muestra las direcciones a las que el socket puede aceptar conexiones. En el caso de sockets en estado &lt;code&gt;LISTEN&lt;/code&gt;, típicamente se muestra como &lt;code&gt;0.0.0.0:*&lt;/code&gt; o &lt;code&gt;[::]:*&lt;/code&gt;, indicando que pueden aceptar conexiones desde cualquier dirección IP.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Process&lt;/strong&gt;: Esta columna muestra información sobre el proceso que utiliza el socket. Por ejemplo, puede incluir el nombre del proceso y el ID del proceso (PID). Esta información es crucial para identificar qué aplicación está utilizando cada puerto y es especialmente útil para resolver problemas o auditar la seguridad de los servicios de red.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Ejemplos de la Salida:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;0.0.0.0:22 y [::]:22&lt;/strong&gt;: Estos sockets están escuchando en todas las interfaces IPv4 e IPv6 respectivamente para conexiones SSH. El hecho de que estén escuchando en &lt;code&gt;0.0.0.0&lt;/code&gt; y &lt;code&gt;[::]&lt;/code&gt; significa que aceptan conexiones desde cualquier IP.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;127.0.0.1:631 y [::1]:631&lt;/strong&gt;: Estos están escuchando solo para conexiones locales (loopback) para el servicio de impresión (puerto 631, comúnmente usado por CUPS).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[::1]:50051 y [::ffff:127.0.0.1]:50051&lt;/strong&gt;: Estos podrían ser servicios desarrollados internamente o específicos de aplicaciones que escuchan en IPv6 y mapeados IPv4-a-IPv6, respectivamente, solo accesibles localmente.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esta información te permite entender qué servicios están corriendo en tu servidor, en qué puertos están escuchando, y a través de qué interfaces están disponibles, así como identificar qué aplicación o proceso es responsable de cada uno de estos servicios. Esto es vital para la gestión adecuada de los recursos de red y la seguridad informática.&lt;/p&gt;
&lt;p&gt;Para UDP:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ss -ulnp

State   Recv-Q   Send-Q     Local Address:Port      Peer Address:Port  Process  
UNCONN  0        0                0.0.0.0:5353           0.0.0.0:*              
UNCONN  0        0                0.0.0.0:59816          0.0.0.0:*              
UNCONN  0        0                0.0.0.0:631            0.0.0.0:*              
UNCONN  0        0              127.0.0.1:4038           0.0.0.0:*              
UNCONN  0        0                   [::]:5353              [::]:*              
UNCONN  0        0                   [::]:40448             [::]:*   
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Detalles&lt;/p&gt;
&lt;p&gt;El comando &lt;code&gt;ss -ulnp&lt;/code&gt; es una herramienta útil para mostrar detalles sobre los sockets UDP que están actualmente abiertos y en estado de escucha en un sistema. Aquí te explico cada parte de este comando y la información que muestra:&lt;/p&gt;
&lt;h3&gt;Explicación de las Opciones del Comando:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ss&lt;/code&gt;: Es el comando para obtener estadísticas de los sockets.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-u&lt;/code&gt;: Filtra para mostrar solo conexiones UDP.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-l&lt;/code&gt;: Muestra solo los sockets que están en estado de escucha, es decir, esperando recibir paquetes de datos.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-n&lt;/code&gt;: Muestra números de puerto y direcciones IP en formato numérico, lo cual evita la demora de resolver los nombres.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-p&lt;/code&gt;: Muestra el proceso asociado con cada socket, incluyendo el ID del proceso y el nombre del programa que lo ha abierto.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Desglose de las Columnas:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;State&lt;/strong&gt;: Muestra el estado del socket. &lt;code&gt;UNCONN&lt;/code&gt; (unconnected) indica que el socket está abierto pero no conectado, lo cual es típico para UDP, que es un protocolo sin conexión.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Recv-Q y Send-Q&lt;/strong&gt;: Representan la cantidad de datos en las colas de recepción y envío, respectivamente. En UDP, estos valores suelen ser cero porque UDP es un protocolo sin conexión y no garantiza la entrega de paquetes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Local Address:Port&lt;/strong&gt;: Muestra la dirección IP local y el puerto en los que el servicio está escuchando. Por ejemplo, &lt;code&gt;0.0.0.0:5353&lt;/code&gt; indica que el servicio está escuchando en todas las interfaces de red para el puerto 5353, que es comúnmente utilizado por servicios como mDNS.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Peer Address:Port&lt;/strong&gt;: Para sockets UDP en estado de escucha, esta columna generalmente muestra &lt;code&gt;0.0.0.0:*&lt;/code&gt; o &lt;code&gt;[::]:*&lt;/code&gt;, indicando que el socket puede recibir datagramas de cualquier dirección IP.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Process&lt;/strong&gt;: Esta columna brinda detalles sobre el proceso que usa el socket, incluyendo el nombre del programa y el PID. Esto es especialmente útil para identificar qué aplicación está utilizando cada puerto UDP.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Ejemplos de la Salida:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;0.0.0.0:5353 y [::]:5353&lt;/strong&gt;: Estos sockets están escuchando en todas las interfaces IPv4 e IPv6, respectivamente, para el Multicast DNS (mDNS), que permite la resolución de nombres en redes locales sin necesidad de un servidor DNS centralizado.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;0.0.0.0:59816 y [::]:40448&lt;/strong&gt;: Estos puertos están abiertos para recibir datagramas UDP en cualquier interfaz. Los números de puerto altos son típicamente seleccionados aleatoriamente por aplicaciones que necesitan recibir respuestas a consultas o comandos enviados a otros servicios.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;127.0.0.1:4038 y 0.0.0.0:631&lt;/strong&gt;: Estos sockets están escuchando para tráfico local (&lt;code&gt;127.0.0.1:4038&lt;/code&gt;) o en todas las interfaces (&lt;code&gt;0.0.0.0:631&lt;/code&gt;), el puerto 631 generalmente está asociado con el sistema de impresión de red (CUPS).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esta información es crucial para la administración de la red, ayudando a identificar qué servicios están usando los puertos UDP, y es fundamental para tareas como la resolución de problemas de red, auditorías de seguridad, y la configuración del firewall.&lt;/p&gt;
&lt;p&gt;El flag &lt;code&gt;-p&lt;/code&gt; muestra el proceso asociado a cada socket.&lt;/p&gt;
&lt;h4&gt;Comandos con &lt;code&gt;netstat&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;El comando &lt;code&gt;netstat&lt;/code&gt;, aunque en desuso en las distribuciones modernas de Linux que favorecen &lt;code&gt;ss&lt;/code&gt;, todavía está disponible en muchos sistemas y puede ser utilizado para las mismas tareas:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;a) Para listar las comunicaciones TCP establecidas:&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;netstat -tn

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State    
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;El comando &lt;code&gt;netstat -tn&lt;/code&gt; es una herramienta de diagnóstico que se utiliza para mostrar las conexiones de red TCP establecidas en un sistema. Aquí te detallo cada parte del comando y la información que proporciona:&lt;/p&gt;
&lt;h3&gt;Explicación de las Opciones del Comando:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;netstat&lt;/code&gt;: Es el comando para obtener estadísticas de la red y del estado de los sockets.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-t&lt;/code&gt;: Filtra para mostrar solo conexiones TCP.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-n&lt;/code&gt;: Muestra números de puerto y direcciones IP en formato numérico, evitando la demora que implica resolver los nombres a direcciones.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Desglose de las Columnas:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Proto&lt;/strong&gt;: Indica el protocolo de la conexión. En este caso, por el uso de la opción &lt;code&gt;-t&lt;/code&gt;, solo se mostrarán las conexiones que utilizan el protocolo TCP.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Recv-Q&lt;/strong&gt;: Representa la cantidad de datos que han sido recibidos por el sistema local pero aún no han sido leídos por la aplicación. En otras palabras, muestra la cantidad de datos en la cola de recepción que aún no han sido procesados por la aplicación local.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Send-Q&lt;/strong&gt;: Indica la cantidad de datos que la aplicación local ha enviado pero que aún no han sido confirmados por el receptor. Es decir, muestra los datos que están en la cola de envío esperando ser reconocidos por el otro extremo de la conexión.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Local Address&lt;/strong&gt;: Muestra la dirección IP local y el puerto asociado a la conexión. Esta dirección es la del equipo en el que se ejecuta &lt;code&gt;netstat&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Foreign Address&lt;/strong&gt;: Muestra la dirección IP y el puerto del sistema remoto con el que está establecida la conexión. Esta es la dirección del otro dispositivo involucrado en la comunicación.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;State&lt;/strong&gt;: Muestra el estado actual de la conexión. Los estados comunes incluyen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ESTABLISHED&lt;/code&gt;: La conexión ha sido establecida y está activa.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SYN_SENT&lt;/code&gt; o &lt;code&gt;SYN_RECEIVED&lt;/code&gt;: Etapas del inicio de la conexión TCP.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FIN_WAIT1&lt;/code&gt; o &lt;code&gt;FIN_WAIT2&lt;/code&gt;: Etapas de la terminación de la conexión TCP.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TIME_WAIT&lt;/code&gt;: Indica que el lado local ha cerrado la conexión, pero se espera por si llegan aún paquetes retrasados del otro lado.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Ejemplo de Uso y Salida:&lt;/h3&gt;
&lt;p&gt;Cuando ejecutas &lt;code&gt;netstat -tn&lt;/code&gt;, puedes ver algo como esto:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 192.168.1.100:45678     93.184.216.34:80        ESTABLISHED
tcp        0      0 192.168.1.100:22        203.0.113.25:53792      ESTABLISHED
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esta salida indica que hay dos conexiones TCP activas:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Una conexión desde el puerto local 45678 a la dirección IP 93.184.216.34 en el puerto 80 (HTTP), que está en estado &lt;code&gt;ESTABLISHED&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Una conexión SSH desde el puerto local 22 a la dirección IP 203.0.113.25 en el puerto 53792, también en estado &lt;code&gt;ESTABLISHED&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Este comando es útil para monitorear qué aplicaciones están comunicándose activamente a través de la red, identificar posibles conexiones no deseadas y ayudar en la resolución de problemas de red y aplicaciones.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;b) Para listar las comunicaciones UDP establecidas:&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;netstat -un

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
udp        0      0 10.0.2.15:68            10.0.2.2:67             ESTABLISHED
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;El comando &lt;code&gt;netstat -un&lt;/code&gt; se utiliza para mostrar conexiones de red, específicamente aquellas que utilizan el protocolo UDP. Detallaré cada opción y la información proporcionada en este comando:&lt;/p&gt;
&lt;h3&gt;Explicación de las Opciones del Comando:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;netstat&lt;/strong&gt;: Es una herramienta de diagnóstico que ofrece información sobre conexiones de red, tablas de enrutamiento, estadísticas de interfaces, masquerade connections, y estadísticas multicast.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;-u&lt;/strong&gt;: Filtra para mostrar sólo conexiones UDP.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;-n&lt;/strong&gt;: Muestra direcciones y números de puerto en formato numérico, evitando la resolución de nombres, lo que acelera la presentación de los datos.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Desglose de las Columnas:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Proto&lt;/strong&gt;: Indica el protocolo de la conexión, en este caso, &lt;code&gt;udp&lt;/code&gt; para UDP.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Recv-Q&lt;/strong&gt;: Representa la cantidad de datos recibidos por el sistema local que aún no han sido procesados por la aplicación. En UDP, este campo suele ser 0 ya que UDP no tiene control de flujo ni garantiza la entrega de paquetes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Send-Q&lt;/strong&gt;: Indica la cantidad de datos enviados por la aplicación local que aún no han sido enviados por el sistema operativo. Similar a Recv-Q, en UDP, este campo generalmente también es 0.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Local Address&lt;/strong&gt;: Muestra la dirección IP local y el puerto usado por la conexión. Representa el punto final en el dispositivo local.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Foreign Address&lt;/strong&gt;: Muestra la dirección IP y el puerto del sistema remoto con el que se establece la conexión. En UDP, dado que es un protocolo sin conexión, es menos común ver direcciones extranjeras asociadas excepto durante la transmisión de datos.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;State&lt;/strong&gt;: En UDP, el estado generalmente no se muestra porque UDP es un protocolo sin conexión, lo que significa que no mantiene un estado de conexión establecida como TCP. Sin embargo, si se muestra, puede ser &lt;code&gt;ESTABLISHED&lt;/code&gt; indicando que la comunicación está activa en ambos sentidos (esto es raro y puede ser específico de la implementación).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Ejemplo de Uso y Salida:&lt;/h3&gt;
&lt;p&gt;Cuando ejecutas &lt;code&gt;netstat -un&lt;/code&gt;, puedes ver algo así:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Proto Recv-Q Send-Q Local Address           Foreign Address         State      
udp        0      0 10.0.2.15:68            10.0.2.2:67             ESTABLISHED
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esta salida indica que hay una comunicación UDP entre el puerto 68 del dispositivo local y el puerto 67 de un dispositivo remoto. Este tipo de conexión es típicamente usado por el protocolo DHCP (Dynamic Host Configuration Protocol), donde un cliente (en el puerto 68) recibe información de configuración de red de un servidor DHCP (en el puerto 67).&lt;/p&gt;
&lt;h3&gt;Importancia:&lt;/h3&gt;
&lt;p&gt;Este comando es útil para diagnosticar la actividad de las aplicaciones que utilizan UDP, como los juegos en línea, aplicaciones de streaming y protocolos de red como DHCP y DNS. Permite a los administradores de red verificar qué aplicaciones están usando UDP y con qué otros sistemas están comunicando.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Obtener sólo los servicios TCP que están esperando comunicaciones:&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;netstat -tln

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:4038          0.0.0.0:*               LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 ::1:631                 :::*                    LISTEN     
tcp6       0      0 ::1:50051               :::*                    LISTEN     
tcp6       0      0 127.0.0.1:50051         :::*                    LISTEN  
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;d) Obtener sólo los servicios UDP que están esperando comunicaciones:&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;netstat -uln

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
udp        0      0 0.0.0.0:5353            0.0.0.0:*                          
udp        0      0 0.0.0.0:59816           0.0.0.0:*                          
udp        0      0 0.0.0.0:631             0.0.0.0:*                          
udp        0      0 127.0.0.1:4038          0.0.0.0:*                          
udp6       0      0 :::5353                 :::*                               
udp6       0      0 :::40448                :::*     
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;e) Repetir los anteriores para visualizar el proceso del sistema asociado a la conexión:&lt;/code&gt;
Para TCP y UDP con procesos:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;netstat -tlnp

(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           -                   
udp        0      0 0.0.0.0:59816           0.0.0.0:*                           -                   
udp        0      0 0.0.0.0:631             0.0.0.0:*                           -                   
udp        0      0 127.0.0.1:4038          0.0.0.0:*                           -                   
udp6       0      0 :::5353                 :::*                                -                   
udp6       0      0 :::40448                :::*       
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;netstat -ulnp

(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:4038          0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::22                   :::*                    LISTEN      -                   
tcp6       0      0 ::1:631                 :::*                    LISTEN      -                   
tcp6       0      0 ::1:50051               :::*                    LISTEN      -                   
tcp6       0      0 127.0.0.1:50051         :::*                    LISTEN      -  
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Estos comandos proporcionan información detallada sobre el estado de las conexiones de red en tu sistema, mostrando tanto las conexiones activas como las que están en escucha para posibles nuevas conexiones.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 10 CONSULTAR ESTE EJERCICIO&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Qué sucede si llega un segmento TCP con el flag SYN activo a un host que no tiene ningún proceso esperando en el puerto destino de dicho segmento (es decir, que dicho puerto no está en estado LISTEN)?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Cuando un segmento TCP con el flag SYN activo llega a un puerto que no está en estado LISTEN en el host de destino (es decir, no hay ningún proceso escuchando en ese puerto), el sistema operativo generalmente responde con un paquete TCP que tiene el flag RST (Reset) activado. Esto indica al emisor que el puerto de destino no está disponible o que no hay un servicio esperando aceptar conexiones.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Utilice **hping3** para enviar paquetes TCP al puerto destino 22 de la máquina virtual con el flag SYN activado.&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;hping3 -p 22 -S localhost
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;redes@debian:~$ sudo hping3 -p 22 -S localhost
HPING localhost (lo 127.0.0.1): S set, 40 headers + 0 data bytes
len=44 ip=127.0.0.1 ttl=64 DF id=0 sport=22 flags=SA seq=0 win=65495 rtt=8.0 ms
len=44 ip=127.0.0.1 ttl=64 DF id=0 sport=22 flags=SA seq=1 win=65495 rtt=7.7 ms
len=44 ip=127.0.0.1 ttl=64 DF id=0 sport=22 flags=SA seq=2 win=65495 rtt=6.2 ms
len=44 ip=127.0.0.1 ttl=64 DF id=0 sport=22 flags=SA seq=3 win=65495 rtt=0.3 ms
len=44 ip=127.0.0.1 ttl=64 DF id=0 sport=22 flags=SA seq=4 win=65495 rtt=4.1 ms
len=44 ip=127.0.0.1 ttl=64 DF id=0 sport=22 flags=SA seq=5 win=65495 rtt=3.6 ms
len=44 ip=127.0.0.1 ttl=64 DF id=0 sport=22 flags=SA seq=6 win=65495 rtt=7.3 ms
len=44 ip=127.0.0.1 ttl=64 DF id=0 sport=22 flags=SA seq=7 win=65495 rtt=3.2 ms
len=44 ip=127.0.0.1 ttl=64 DF id=0 sport=22 flags=SA seq=8 win=65495 rtt=10.7 ms
len=44 ip=127.0.0.1 ttl=64 DF id=0 sport=22 flags=SA seq=9 win=65495 rtt=8.8 ms
len=44 ip=127.0.0.1 ttl=64 DF id=0 sport=22 flags=SA seq=10 win=65495 rtt=2.6 ms
len=44 ip=127.0.0.1 ttl=64 DF id=0 sport=22 flags=SA seq=11 win=65495 rtt=1.5 ms
^C
--- localhost hping statistic ---
12 packets transmitted, 12 packets received, 0% packet loss
round-trip min/avg/max = 0.3/5.3/10.7 ms
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cuando ejecutas el comando &lt;code&gt;hping3&lt;/code&gt; con los parámetros que proporcionaste, estás realizando una serie de pruebas para enviar paquetes TCP con el flag SYN activado (indicado por &lt;code&gt;-S&lt;/code&gt;) al puerto 22 del host local (&lt;code&gt;localhost&lt;/code&gt; o &lt;code&gt;127.0.0.1&lt;/code&gt;). Veamos en detalle qué significa cada parte de la salida y qué está ocurriendo:&lt;/p&gt;
&lt;h3&gt;Descripción del Comando y Salida&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Comando:&lt;/strong&gt; &lt;code&gt;sudo hping3 -p 22 -S localhost&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-p 22&lt;/code&gt;: Esto especifica que el puerto destino de los paquetes es el 22, que es típicamente utilizado por el servicio SSH.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-S&lt;/code&gt;: Indica que el flag SYN (synchronize) de TCP está activado. Este flag se utiliza para iniciar una conexión TCP, es la primera parte del &quot;three-way handshake&quot; que TCP usa para establecer una conexión.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;localhost&lt;/code&gt;: Es el nombre del host que se resuelve a la dirección IP &lt;code&gt;127.0.0.1&lt;/code&gt;, que es la dirección de loopback. Esto significa que estás enviando paquetes a tu propio equipo.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Salida de &lt;code&gt;hping3&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Cada línea de la salida muestra un paquete que ha sido enviado y la respuesta recibida:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;len=44&lt;/code&gt;: Longitud del paquete, incluyendo cabeceras IP y TCP, que suman 40 bytes más algunos bytes de opciones de TCP, totalizando 44 bytes.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ip=127.0.0.1&lt;/code&gt;: La dirección IP de destino (y de origen, ya que es loopback).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ttl=64&lt;/code&gt;: Time to live, establecido por defecto en sistemas Linux. Indica el número máximo de saltos (routers) que un paquete puede hacer antes de ser descartado.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DF&lt;/code&gt;: Don&apos;t Fragment flag está activado, lo que significa que el paquete no debería ser fragmentado durante la transmisión.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;id=0&lt;/code&gt;: Identificador del paquete, utilizado para la reensamblación de fragmentos.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sport=22&lt;/code&gt;: Puerto de origen, que es el puerto 22, aunque en realidad representa el puerto destino en este contexto.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;flags=SA&lt;/code&gt;: Indica los flags TCP establecidos en la respuesta. &apos;S&apos; es SYN, y &apos;A&apos; es ACK. Esto significa que el host de destino ha recibido tu SYN y está respondiendo con SYN y ACK, que es el segundo paso en el establecimiento de una conexión TCP.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;seq=0&lt;/code&gt; y así sucesivamente: Número de secuencia del paquete.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;win=65495&lt;/code&gt;: Tamaño de la ventana TCP, que indica cuántos bytes están dispuestos a recibir antes de recibir un acuse de recibo.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rtt=8.0 ms&lt;/code&gt; y variaciones: Round-trip time, el tiempo que toma para que el paquete vaya y vuelva desde el origen al destino.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Estadísticas de &lt;code&gt;hping3&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;12 packets transmitted, 12 packets received, 0% packet loss&lt;/code&gt;: Total de paquetes enviados y recibidos, mostrando que no hubo pérdida de paquetes, lo cual es esperado en una interfaz de loopback, donde los paquetes no necesitan viajar a través de redes externas.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;round-trip min/avg/max = 0.3/5.3/10.7 ms&lt;/code&gt;: Estadísticas del tiempo de ida y vuelta mínimo, promedio y máximo.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Interpretación&lt;/h3&gt;
&lt;p&gt;El hecho de que recibas respuestas con los flags SYN y ACK indica que hay un proceso (en este caso, probablemente el servidor SSH) escuchando en el puerto 22 de tu máquina local. La conexión de loopback es utilizada para probar servicios en tu propio equipo sin afectar la red externa, proporcionando una manera eficaz de asegurarse de que el servicio está operativo y responde como se espera.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Utilice **hping3** para enviar paquetes TCP al puerto destino 40 de la máquina virtual con el flag SYN activado.&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;redes@debian:~$ sudo hping3 -p 40 -S localhost
HPING localhost (lo 127.0.0.1): S set, 40 headers + 0 data bytes
len=40 ip=127.0.0.1 ttl=64 DF id=0 sport=40 flags=RA seq=0 win=0 rtt=8.0 ms
len=40 ip=127.0.0.1 ttl=64 DF id=0 sport=40 flags=RA seq=1 win=0 rtt=3.6 ms
len=40 ip=127.0.0.1 ttl=64 DF id=0 sport=40 flags=RA seq=2 win=0 rtt=7.2 ms
len=40 ip=127.0.0.1 ttl=64 DF id=0 sport=40 flags=RA seq=3 win=0 rtt=12.3 ms
len=40 ip=127.0.0.1 ttl=64 DF id=0 sport=40 flags=RA seq=4 win=0 rtt=2.6 ms
len=40 ip=127.0.0.1 ttl=64 DF id=0 sport=40 flags=RA seq=5 win=0 rtt=0.2 ms
len=40 ip=127.0.0.1 ttl=64 DF id=0 sport=40 flags=RA seq=6 win=0 rtt=3.6 ms
^C
--- localhost hping statistic ---
7 packets transmitted, 7 packets received, 0% packet loss
round-trip min/avg/max = 0.2/5.4/12.3 ms
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La salida del comando &lt;code&gt;hping3&lt;/code&gt; que ejecutaste al enviar paquetes TCP con el flag SYN al puerto 40 en tu propia máquina (&lt;code&gt;localhost&lt;/code&gt; o &lt;code&gt;127.0.0.1&lt;/code&gt;) muestra un comportamiento interesante, y algo diferente de lo que observaste cuando el puerto destino era el 22. Aquí está lo que cada parte de la salida significa y por qué es diferente:&lt;/p&gt;
&lt;h3&gt;Descripción del Comando y Salida&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Comando:&lt;/strong&gt; &lt;code&gt;sudo hping3 -p 40 -S localhost&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-p 40&lt;/code&gt;: Especifica que el puerto destino de los paquetes es el 40, un puerto que no es comúnmente utilizado para servicios estándar.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-S&lt;/code&gt;: Indica que el flag SYN está activado, que se usa para solicitar el inicio de una conexión TCP.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Salida de &lt;code&gt;hping3&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Cada línea refleja la respuesta a cada paquete SYN enviado:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;len=40&lt;/code&gt;: Longitud del paquete, solo incluye las cabeceras IP y TCP sin datos adicionales.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ip=127.0.0.1&lt;/code&gt;: Dirección IP de destino, que es la dirección de loopback.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ttl=64&lt;/code&gt;: Time to live, configurado por defecto en sistemas Linux.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DF&lt;/code&gt;: Don&apos;t Fragment flag está activado.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;id=0&lt;/code&gt;: Identificador del paquete.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sport=40&lt;/code&gt;: Puerto de origen en la respuesta, que refleja el puerto destino que especificaste.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;flags=RA&lt;/code&gt;: Los flags TCP establecidos en la respuesta. &apos;R&apos; es RST (Reset) y &apos;A&apos; es ACK. Esto indica que el host de destino (tu propia máquina) ha recibido tu solicitud SYN pero no tiene ningún proceso escuchando en el puerto 40, por lo que responde con un Reset para indicar que la conexión no puede ser establecida.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;seq=0&lt;/code&gt; y así sucesivamente: Número de secuencia del paquete.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;win=0&lt;/code&gt;: Tamaño de la ventana TCP es 0, lo que refuerza el hecho de que la conexión no se puede establecer porque no hay un proceso que acepte la conexión.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rtt=8.0 ms&lt;/code&gt; y variaciones: Tiempo de ida y vuelta del paquete.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Estadísticas de &lt;code&gt;hping3&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;7 packets transmitted, 7 packets received, 0% packet loss&lt;/code&gt;: Todos los paquetes enviados fueron respondidos, lo que indica que los paquetes alcanzaron el destino y fueron procesados.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;round-trip min/avg/max = 0.2/5.4/12.3 ms&lt;/code&gt;: Tiempos de respuesta mínimos, promedios y máximos.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Interpretación&lt;/h3&gt;
&lt;p&gt;La diferencia clave aquí es que los paquetes fueron respondidos con el flag RST activado, indicando que el puerto 40 no está en estado de escucha y no hay ningún servicio disponible para aceptar la conexión en ese puerto. Este es un comportamiento normal cuando se intenta conectar a un puerto que no tiene un servicio asociado: el sistema operativo automáticamente responde con un paquete TCP con el flag RST para cerrar la conexión.&lt;/p&gt;
&lt;p&gt;El uso de RST es una manera eficiente de informar al emisor que no hay un receptor válido en el puerto especificado, permitiendo al emisor cerrar el intento de conexión inmediatamente en lugar de esperar tiempos de espera por respuestas que nunca llegarán.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Qué diferencias nota en las respuestas obtenidas en los dos casos anteriores? ¿Puede explicar a qué se debe?&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;(Ayuda: utilice el comando ss visto anteriormente)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;redes@debian:~$ ss -tuln
Netid   State    Recv-Q   Send-Q          Local Address:Port      Peer Address:Port  Process  
udp     UNCONN   0        0                     0.0.0.0:631            0.0.0.0:*              
udp     UNCONN   0        0                     0.0.0.0:47816          0.0.0.0:*              
udp     UNCONN   0        0                   127.0.0.1:4038           0.0.0.0:*              
udp     UNCONN   0        0                     0.0.0.0:5353           0.0.0.0:*              
udp     UNCONN   0        0                        [::]:44538             [::]:*              
udp     UNCONN   0        0                        [::]:5353              [::]:*              
tcp     LISTEN   0        128                   0.0.0.0:22             0.0.0.0:*              
tcp     LISTEN   0        128                 127.0.0.1:631            0.0.0.0:*              
tcp     LISTEN   0        5                   127.0.0.1:4038           0.0.0.0:*              
tcp     LISTEN   0        128                      [::]:22                [::]:*              
tcp     LISTEN   0        128                     [::1]:631               [::]:*              
tcp     LISTEN   0        4096                    [::1]:50051             [::]:*              
tcp     LISTEN   0        4096       [::ffff:127.0.0.1]:50051                *:*  
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Para analizar las diferencias en las respuestas obtenidas al enviar paquetes SYN a los puertos 22 y 40 usando &lt;code&gt;hping3&lt;/code&gt; y entender a qué se deben, primero recapitulemos los resultados:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Puerto 22 (SSH)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Recibiste respuestas con flags &lt;code&gt;SA&lt;/code&gt; (SYN-ACK), indicando que el puerto está en estado LISTEN y que un proceso (el servidor SSH) está activo y listo para aceptar conexiones.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Puerto 40&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Las respuestas tenían los flags &lt;code&gt;RA&lt;/code&gt; (RST-ACK), indicando que no hay ningún proceso escuchando en ese puerto, y el sistema operativo responde automáticamente con un paquete de reset para cerrar el intento de conexión.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Uso del Comando &lt;code&gt;ss&lt;/code&gt; para Confirmar&lt;/h3&gt;
&lt;p&gt;Para entender mejor por qué ocurren estas diferencias, podemos usar el comando &lt;code&gt;ss&lt;/code&gt; que proporciona estadísticas de los sockets. Ejecutar &lt;code&gt;ss -tuln&lt;/code&gt; mostrará los puertos que están actualmente en escucha (LISTEN) en tu sistema:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ss -tuln
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-t&lt;/code&gt; muestra sockets TCP.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-u&lt;/code&gt; muestra sockets UDP (no necesarios en este caso, pero útiles para una visión completa).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-l&lt;/code&gt; lista solo los sockets que están en estado LISTEN.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-n&lt;/code&gt; muestra números de puerto en lugar de nombres de servicio.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este comando te permitirá ver claramente qué puertos están activos y escuchando. Por ejemplo, verás el puerto 22 listado bajo TCP si SSH está activo, y no verás el puerto 40 si ningún servicio está vinculado a él.&lt;/p&gt;
&lt;h3&gt;Explicación de las Diferencias&lt;/h3&gt;
&lt;p&gt;Las diferencias en las respuestas se deben a cómo el sistema operativo maneja los puertos sin servicios asignados comparado con los que sí tienen servicios escuchando:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Puerto con Servicio (22):&lt;/strong&gt; Cuando un puerto está en estado LISTEN y recibe un paquete SYN, el protocolo TCP del sistema operativo responde con un paquete SYN-ACK, invitando al remitente a continuar con el establecimiento de la conexión (el three-way handshake de TCP).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Puerto sin Servicio (40):&lt;/strong&gt; Cuando un paquete SYN llega a un puerto que no está en estado LISTEN, el sistema operativo envía un paquete RST-ACK para rechazar inmediatamente el intento de conexión, indicando que no hay ningún servicio que pueda manejar esa solicitud en el puerto especificado.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esta gestión ayuda a optimizar los recursos del sistema y proporciona retroalimentación inmediata a los clientes que intentan establecer conexiones, lo cual es crucial para aplicaciones y servicios que dependen de la disponibilidad de puertos específicos para funcionar correctamente.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 11&lt;/h3&gt;
&lt;p&gt;¿Qué sucede si llega un datagrama UDP a un host que no tiene a ningún proceso esperando en el puerto destino de dicho datagrama (es decir, que dicho puerto no está en estado LISTEN)?&lt;/p&gt;
&lt;p&gt;Cuando un datagrama UDP llega a un puerto en un host donde no hay ningún proceso esperando (es decir, ningún proceso vinculado a ese puerto específico), el comportamiento típico del sistema es enviar un mensaje de error de tipo ICMP (Internet Control Message Protocol) de vuelta al emisor. Este mensaje de error generalmente es del tipo &quot;Destination Unreachable&quot;, específicamente con un código que indica &quot;Port Unreachable&quot;. Esto informa al emisor que no hay ninguna aplicación que pueda manejar el datagrama en el puerto destino.&lt;/p&gt;
&lt;h4&gt;Parte a&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;Utilice hping3 para enviar datagramas UDP al puerto destino 5353 de la máquina virtual.&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;redes@debian:~$ sudo hping3 -2 -p 5353 -S localhost
HPING localhost (lo 127.0.0.1): udp mode set, 28 headers + 0 data bytes

^C
--- localhost hping statistic ---
2 packets transmitted, 0 packets received, 100% packet loss
round-trip min/avg/max = 0.0/0.0/0.0 ms
redes@debian:~$ 
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Parte b&lt;/h4&gt;
&lt;p&gt;Utilice hping3 para enviar datagramas UDP al puerto destino 40 de la máquina virtual.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;redes@debian:~$ sudo hping3 -2 -p 40 -S localhost
HPING localhost (lo 127.0.0.1): udp mode set, 28 headers + 0 data bytes
ICMP Port Unreachable from ip=127.0.0.1 name=localhost 
status=0 port=2212 seq=0
ICMP Port Unreachable from ip=127.0.0.1 name=localhost 
status=0 port=2213 seq=1
ICMP Port Unreachable from ip=127.0.0.1 name=localhost 
status=0 port=2214 seq=2
ICMP Port Unreachable from ip=127.0.0.1 name=localhost 
status=0 port=2215 seq=3
ICMP Port Unreachable from ip=127.0.0.1 name=localhost 
status=0 port=2216 seq=4
^C
--- localhost hping statistic ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 4.3/6.8/10.8 ms
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;En este caso, utilizaste &lt;code&gt;hping3&lt;/code&gt; para enviar paquetes UDP al puerto 40 de tu host local (&lt;code&gt;localhost&lt;/code&gt;) y también has incluido el flag &lt;code&gt;-S&lt;/code&gt; que, como mencionamos anteriormente, es inapropiado para UDP. Sin embargo, esta vez has recibido respuestas, así que vamos a examinar qué sucedió.&lt;/p&gt;
&lt;h3&gt;Comando y Configuración&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo hping3 -2 -p 40 -S localhost
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-2&lt;/code&gt;: Configura &lt;code&gt;hping3&lt;/code&gt; para usar el modo UDP.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-p 40&lt;/code&gt;: Especifica el puerto destino como el 40, que generalmente no es utilizado por servicios comunes.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-S&lt;/code&gt;: A pesar de ser un flag de TCP, en este contexto parece no afectar la formación del paquete UDP en &lt;code&gt;hping3&lt;/code&gt;, aunque su presencia es innecesaria y puede ser confusa.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Salida de &lt;code&gt;hping3&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ICMP Port Unreachable from ip=127.0.0.1 name=localhost&lt;/code&gt;: Este es un mensaje de error del tipo ICMP, específicamente un &quot;Destination Unreachable&quot; con el código &quot;Port Unreachable&quot;. Este mensaje es generado por el sistema operativo cuando un paquete UDP llega a un puerto en el cual no hay ningún proceso escuchando.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;status=0 port=2212 seq=0&lt;/code&gt; y las líneas similares indican el número de puerto desde el cual &lt;code&gt;hping3&lt;/code&gt; está enviando los paquetes y la secuencia de los mismos. Los puertos mencionados (2212, 2213, etc.) son los puertos de origen seleccionados por &lt;code&gt;hping3&lt;/code&gt; para enviar los paquetes, y no tienen que ver con el puerto destino (40).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Interpretación de la Respuesta&lt;/h3&gt;
&lt;p&gt;El hecho de que recibas &quot;ICMP Port Unreachable&quot; confirma varias cosas:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;No hay ningún proceso escuchando en el puerto 40&lt;/strong&gt;: Esto es esperado ya que el puerto 40 raramente es usado por servicios estándar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tu sistema está correctamente configurado para responder a paquetes UDP no solicitados con mensajes ICMP apropiados&lt;/strong&gt;: Esto es útil para diagnósticos de red y asegura que los sistemas emisores puedan saber cuando sus paquetes están siendo dirigidos a puertos inactivos.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Conclusión&lt;/h3&gt;
&lt;p&gt;Este experimento muestra cómo &lt;code&gt;hping3&lt;/code&gt; puede ser utilizado para diagnosticar el estado de los puertos en tu sistema usando UDP y cómo el sistema responde con mensajes de error ICMP cuando no encuentra un servicio escuchando en el puerto especificado. En futuras pruebas, para evitar confusiones, es mejor omitir el flag &lt;code&gt;-S&lt;/code&gt; cuando estés enviando paquetes UDP con &lt;code&gt;hping3&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;Parte c&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;¿Qué diferencias nota en las respuestas obtenidas en los dos casos anteriores? ¿Puede explicar a qué se debe? (Ayuda: utilice el comando ss visto anteriormente).&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Para analizar las diferencias entre las respuestas obtenidas en los dos casos anteriores (usando &lt;code&gt;hping3&lt;/code&gt; para enviar paquetes a los puertos 22 y 40) y determinar a qué se deben estas diferencias, es útil utilizar el comando &lt;code&gt;ss&lt;/code&gt; que mencionaste. Este comando nos proporcionará información sobre los puertos que están actualmente en estado LISTEN en la máquina, es decir, aquellos puertos que tienen un servicio asociado escuchando conexiones entrantes.&lt;/p&gt;
&lt;h3&gt;Recordatorio de los Comandos y Respuestas:&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Puerto 22 (Conexión SSH)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los paquetes TCP enviados al puerto 22 recibieron una respuesta con los flags &lt;code&gt;SA&lt;/code&gt; (SYN-ACK), indicando que hay un servicio (SSH) listo y dispuesto a establecer una conexión TCP.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Puerto 40 (Sin Servicio Conocido)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los paquetes UDP enviados al puerto 40 resultaron en respuestas ICMP de tipo &quot;Port Unreachable&quot;, indicando que no hay un servicio escuchando en ese puerto.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Usando el Comando &lt;code&gt;ss&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Ahora vamos a usar el comando &lt;code&gt;ss&lt;/code&gt; para confirmar estos detalles:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ss -tuln
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;redes@debian:~$ ss -tuln
Netid State  Recv-Q Send-Q      Local Address:Port    Peer Address:Port Process 
udp   UNCONN 0      0                 0.0.0.0:5353         0.0.0.0:*            
udp   UNCONN 0      0                 0.0.0.0:50522        0.0.0.0:*            
udp   UNCONN 0      0                 0.0.0.0:631          0.0.0.0:*            
udp   UNCONN 0      0               127.0.0.1:4038         0.0.0.0:*            
udp   UNCONN 0      0                    [::]:35837           [::]:*            
udp   UNCONN 0      0                    [::]:5353            [::]:*            
tcp   LISTEN 0      128             127.0.0.1:631          0.0.0.0:*            
tcp   LISTEN 0      5               127.0.0.1:4038         0.0.0.0:*            
tcp   LISTEN 0      128               0.0.0.0:22           0.0.0.0:*            
tcp   LISTEN 0      128                 [::1]:631             [::]:*            
tcp   LISTEN 0      4096                [::1]:50051           [::]:*            
tcp   LISTEN 0      4096   [::ffff:127.0.0.1]:50051              *:*            
tcp   LISTEN 0      128                  [::]:22              [::]:*   
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Este comando te dará una lista de todos los puertos en estado LISTEN en tu sistema:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;-t&lt;/code&gt;&lt;/strong&gt; muestra los sockets TCP.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;-u&lt;/code&gt;&lt;/strong&gt; muestra los sockets UDP.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;-l&lt;/code&gt;&lt;/strong&gt; filtra para mostrar solo aquellos en estado LISTEN.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;-n&lt;/code&gt;&lt;/strong&gt; muestra números de puerto, en lugar de intentar resolver los nombres de servicio.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Interpretación Esperada&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Si ejecutas &lt;code&gt;ss -tuln&lt;/code&gt;, esperarías ver el puerto 22 listado bajo TCP, indicando que SSH está activo y escuchando.&lt;/li&gt;
&lt;li&gt;No esperarías ver el puerto 40 listado bajo TCP o UDP, lo que confirma por qué el sistema respondió con mensajes ICMP de &quot;Port Unreachable&quot; cuando intentaste enviar paquetes UDP a ese puerto.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;¿Por Qué las Diferencias en las Respuestas?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Puerto 22&lt;/strong&gt;: Al estar en estado LISTEN y tener un servicio activo (SSH), el sistema operativo responde a paquetes SYN con un SYN-ACK, facilitando la fase inicial de un three-way handshake de TCP, el proceso estándar para establecer una conexión TCP.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Puerto 40&lt;/strong&gt;: Al no tener un servicio escuchando en ese puerto, no hay ningún proceso que pueda responder a paquetes UDP dirigidos a él, resultando en que el sistema operativo genere automáticamente respuestas ICMP de &quot;Port Unreachable&quot;. Esto es un mecanismo estándar para informar al emisor que el puerto destino no está disponible para recibir o procesar paquetes.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estos resultados reflejan la configuración de los servicios en tu sistema y cómo el sistema operativo maneja los paquetes dirigidos a puertos inactivos o activos. Las respuestas ICMP &quot;Port Unreachable&quot; son una forma importante de proporcionar feedback a los emisores sobre la falta de disponibilidad de un puerto o servicio, permitiendo que los procesos de red se ajusten en consecuencia.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 12&lt;/h3&gt;
&lt;p&gt;Investigue los distintos tipos de estado que puede tener una conexión TCP.&lt;/p&gt;
&lt;p&gt;Ver https://users.cs.northwestern.edu/~agupta/cs340/project2/TCPIP_State_Transition_Diagram.pdf&lt;/p&gt;
&lt;p&gt;En TCP (Protocolo de Control de Transmisión), cada conexión pasa por varios estados durante su ciclo de vida. TCP es un protocolo de comunicación orientado a la conexión, lo que significa que establece una conexión explícita antes de la transferencia de datos y la cierra una vez completada la transferencia. Aquí están los principales estados de una conexión TCP:&lt;/p&gt;
&lt;h5&gt;1. &lt;strong&gt;CLOSED&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;Es el estado inicial y final de cada conexión. Indica que no hay conexión activa o pendiente.&lt;/p&gt;
&lt;h5&gt;2. &lt;strong&gt;LISTEN&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;El servidor está esperando conexiones entrantes. En este estado, el servidor está listo para aceptar solicitudes de conexión de clientes.&lt;/p&gt;
&lt;h5&gt;3. &lt;strong&gt;SYN-SENT&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;El cliente envía un segmento SYN para iniciar una conexión activa y pasa al estado SYN-SENT, esperando una respuesta del servidor.&lt;/p&gt;
&lt;h5&gt;4. &lt;strong&gt;SYN-RECEIVED&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;El servidor recibe el segmento SYN del cliente y responde con un segmento SYN-ACK. El servidor entonces pasa al estado SYN-RECEIVED mientras espera la confirmación del cliente.&lt;/p&gt;
&lt;h5&gt;5. &lt;strong&gt;ESTABLISHED&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;Ambos sistemas (cliente y servidor) han recibido los segmentos SYN y ACK. En este estado, la conexión está abierta y los datos pueden ser enviados bidireccionalmente.&lt;/p&gt;
&lt;h5&gt;6. &lt;strong&gt;FIN-WAIT-1&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;El estado FIN-WAIT-1 indica que la aplicación ha solicitado el cierre de la conexión, y el sistema espera que el segmento FIN sea acusado o que el servidor envíe su propio segmento FIN.&lt;/p&gt;
&lt;h5&gt;7. &lt;strong&gt;FIN-WAIT-2&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;En este estado, el sistema ha recibido un acuse de recibo del segmento FIN del otro extremo y espera un segmento FIN del otro extremo.&lt;/p&gt;
&lt;h5&gt;8. &lt;strong&gt;CLOSE-WAIT&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;El sistema ha recibido un segmento FIN del otro extremo y espera que la aplicación local responda con un segmento FIN.&lt;/p&gt;
&lt;h5&gt;9. &lt;strong&gt;CLOSING&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;Ambos lados han solicitado el cierre de la conexión y esperan acusar recibo del cierre del otro extremo.&lt;/p&gt;
&lt;h5&gt;10. &lt;strong&gt;LAST-ACK&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;El sistema ha enviado un segmento FIN y espera el último acuse de recibo (ACK) del otro extremo.&lt;/p&gt;
&lt;h5&gt;11. &lt;strong&gt;TIME-WAIT&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;El sistema espera durante un tiempo suficiente para asegurarse de que el extremo remoto ha recibido el acuse de recibo final de su segmento FIN. Este estado también permite que los paquetes viejos en la red se disipen.&lt;/p&gt;
&lt;h5&gt;12. &lt;strong&gt;CLOSED&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;Después de que todos los segmentos FIN y ACK se han intercambiado adecuadamente, la conexión se cierra completamente.&lt;/p&gt;
&lt;p&gt;Estos estados garantizan que TCP sea un protocolo confiable y orientado a la conexión, proporcionando gestión de errores, control de flujo, y garantías de entrega de datos en orden.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 13&lt;/h3&gt;
&lt;p&gt;Dada la siguiente salida del comando ss, responda:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/5a859dc6-7ef3-4c7e-ba49-4cda4c4f85af&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Dada la salida del comando &lt;code&gt;ss&lt;/code&gt; que mostraste, podemos responder a las preguntas basándonos en la información de los estados de conexión TCP y los puertos listados:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;a) ¿Cuántas conexiones hay establecidas?&lt;/code&gt;
El estado &quot;ESTAB&quot; indica que una conexión está establecida. De la salida, podemos contar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cinco conexiones establecidas (&lt;code&gt;ESTAB&lt;/code&gt;) hacia el puerto 443.&lt;/li&gt;
&lt;li&gt;Una conexión establecida hacia el puerto 22 desde &lt;code&gt;127.0.0.1&lt;/code&gt; a &lt;code&gt;127.0.0.1:41220&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Total: 6 conexiones establecidas&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;b) ¿Cuántos puertos hay abiertos a la espera de posibles nuevas conexiones?&lt;/code&gt;
Los puertos en estado &quot;LISTEN&quot; están abiertos esperando nuevas conexiones. En la salida, los siguientes puertos están escuchando:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Puerto 22 (SSH)&lt;/li&gt;
&lt;li&gt;Puerto 80 (HTTP)&lt;/li&gt;
&lt;li&gt;Puerto 53 (DNS)&lt;/li&gt;
&lt;li&gt;Puerto 25 (SMTP)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Total: 4 puertos escuchando&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;c) El cliente y el servidor de las comunicaciones HTTPS (puerto 443), ¿residen en la misma máquina?&lt;/code&gt;
Las conexiones a HTTPS mostradas utilizan direcciones IP como &lt;code&gt;163.10.5.222&lt;/code&gt; en el lado local y direcciones como &lt;code&gt;64.233.163.120&lt;/code&gt;, &lt;code&gt;200.115.89.30&lt;/code&gt;, y &lt;code&gt;64.233.190.99&lt;/code&gt; en el lado remoto, indicando que el cliente y el servidor &lt;strong&gt;no residen en la misma máquina&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;d) El cliente y el servidor de la comunicación SSH (puerto 22), ¿residen en la misma máquina?&lt;/code&gt;
Hay una conexión SSH desde &lt;code&gt;127.0.0.1:41220&lt;/code&gt; a &lt;code&gt;127.0.0.1:22&lt;/code&gt;, lo que indica que tanto el cliente como el servidor &lt;strong&gt;residen en la misma máquina&lt;/strong&gt; (comunicación de loopback).&lt;/p&gt;
&lt;p&gt;&lt;code&gt;e) Liste los nombres de todos los procesos asociados con cada comunicación. Indique para cada uno si se trata de un proceso cliente o uno servidor.&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SSH (puerto 22)&lt;/strong&gt;: &lt;code&gt;sshd&lt;/code&gt; (servidor)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTTP (puerto 80)&lt;/strong&gt;: &lt;code&gt;apache2&lt;/code&gt; (servidor)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTTPS (puerto 443)&lt;/strong&gt;: &lt;code&gt;x-www-browser&lt;/code&gt; (cliente)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DNS (puerto 53)&lt;/strong&gt;: &lt;code&gt;named&lt;/code&gt; (servidor)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SMTP (puerto 25)&lt;/strong&gt;: &lt;code&gt;postfix&lt;/code&gt; (servidor)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SSH (puerto 22, loopback)&lt;/strong&gt;: &lt;code&gt;sshd&lt;/code&gt; (servidor) y cliente desde el mismo proceso &lt;code&gt;sshd&lt;/code&gt; (cliente)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;f) ¿Cuáles conexiones tuvieron el cierre iniciado por el host local y cuál es por el remoto?&lt;/code&gt;
El estado &quot;CLOSE-WAIT&quot; indica que el cierre fue iniciado por el host remoto, y el host local está esperando cerrar la conexión. Hay una conexión en estado &quot;CLOSE-WAIT&quot; hacia &lt;code&gt;200.115.89.30:443&lt;/code&gt;, indicando que el cierre fue iniciado por el remoto.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;g) ¿Cuántas conexiones están aún pendientes por establecerse?&lt;/code&gt;
El estado &quot;SYN-SENT&quot; indica que la conexión está en proceso de ser establecida, con el host local habiendo enviado un SYN y esperando un SYN-ACK en respuesta. Hay una conexión en estado &quot;SYN-SENT&quot; hacia &lt;code&gt;43.232.2.2:9500&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Estos análisis proporcionan una visión detallada de los estados y actividades de la red en la máquina en cuestión, basándonos en los estados de las conexiones TCP y los puertos en uso.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 14&lt;/h3&gt;
&lt;p&gt;Dadas las salidas de los siguientes comandos ejecutados en el cliente y el servidor, responder:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/321bf1df-2fe4-4eae-8077-0c652ace3fc8&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;La información mostrada en las salidas de los comandos &lt;code&gt;ss&lt;/code&gt; de ambos el servidor y el cliente revela detalles sobre el estado de la conexión TCP en el puerto 110, que comúnmente se usa para el servicio de correo electrónico POP3. Aquí está el análisis detallado de las preguntas planteadas:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;a) ¿Qué segmentos llegaron y cuáles se están perdiendo en la red?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Servidor:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Estado &lt;code&gt;LISTEN&lt;/code&gt; en el puerto 110&lt;/strong&gt;: El servidor está escuchando en el puerto 110, esperando conexiones entrantes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Estado &lt;code&gt;SYN-RECV&lt;/code&gt; desde &lt;code&gt;157.0.0.1:110&lt;/code&gt; hacia &lt;code&gt;157.0.0.11:52843&lt;/code&gt;&lt;/strong&gt;: Esto indica que el servidor ha recibido un segmento SYN del cliente y ha respondido con un segmento SYN-ACK, que está esperando ser confirmado (ACK) por el cliente.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Cliente:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Estado &lt;code&gt;SYN-SENT&lt;/code&gt; desde &lt;code&gt;157.0.0.11:52843&lt;/code&gt; hacia &lt;code&gt;157.0.0.1:110&lt;/code&gt;&lt;/strong&gt;: Esto muestra que el cliente ha enviado un segmento SYN al servidor y está esperando una respuesta SYN-ACK del servidor.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Análisis de los segmentos perdidos:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dado que el servidor muestra &lt;code&gt;SYN-RECV&lt;/code&gt;, ha enviado el SYN-ACK al cliente, pero el cliente aún está en &lt;code&gt;SYN-SENT&lt;/code&gt;. Esto sugiere que el segmento SYN-ACK enviado por el servidor puede haberse perdido en la red, ya que el cliente no parece haberlo recibido.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;b) ¿A qué protocolo de capa de aplicación y de transporte se está intentando conectar el cliente?&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Capa de Aplicación:&lt;/strong&gt; El puerto 110 es típicamente usado por el protocolo POP3 (Post Office Protocol versión 3), que es un protocolo de capa de aplicación utilizado para recuperar correo electrónico desde un servidor de correo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Capa de Transporte:&lt;/strong&gt; Dado que estamos observando conexiones TCP (&lt;code&gt;ss -natu&lt;/code&gt;), el cliente está utilizando el protocolo TCP (Protocolo de Control de Transmisión) para establecer una conexión segura y confiable con el servidor.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;c) ¿Qué flags tendría seteado el segmento perdido?&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El segmento que probablemente se perdió es el &lt;strong&gt;SYN-ACK&lt;/strong&gt;, que es la respuesta del servidor después de recibir un SYN del cliente. Este segmento SYN-ACK es crucial para el segundo paso en el proceso de handshake de tres vías de TCP.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flags del segmento perdido:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SYN (Synchronize):&lt;/strong&gt; Indica que es una sincronización durante el establecimiento de la conexión.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ACK (Acknowledgment):&lt;/strong&gt; Confirma la recepción del segmento SYN inicial del cliente.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este análisis indica que hay problemas de conectividad que podrían estar relacionados con la configuración de red, pérdida de paquetes, o problemas con firewalls o dispositivos intermediarios que están bloqueando o descartando paquetes específicos. Sería recomendable revisar la configuración de red y posiblemente realizar pruebas adicionales como &lt;code&gt;traceroute&lt;/code&gt; o &lt;code&gt;tcpdump&lt;/code&gt; para diagnosticar más a fondo el problema de conectividad.&lt;/p&gt;
&lt;h3&gt;Ejercicio 15 CONSULTAR ESTE SI HAY TIEMPO :(&lt;/h3&gt;
&lt;p&gt;Use CORE para armar una topología como la siguiente, sobre la cual deberá realizar:&lt;/p&gt;
&lt;p&gt;Viendo tu captura de pantalla del emulador de red CORE, parece que ya has colocado dos nodos (computadoras) en tu topología. Ahora, para avanzar con el ejercicio y configurar la comunicación entre ellos, te guiaré paso a paso.&lt;/p&gt;
&lt;h3&gt;Paso 1: Conectar los Nodos&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Conectar los Nodos&lt;/strong&gt;: Utiliza la herramienta de enlace (normalmente representada por un icono de cable) para conectar los dos nodos. Haz clic en un nodo, luego en el otro para establecer un enlace directo entre ellos.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Paso 2: Configurar las Interfaces de Red de los Nodos&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Asignar Direcciones IP&lt;/strong&gt;: Haz doble clic en cada nodo para abrir su configuración. Necesitarás asignar direcciones IP estáticas a cada interfaz de red conectada. Asegúrate de que estén en la misma subred para que puedan comunicarse. Por ejemplo, puedes usar &lt;code&gt;192.168.1.1/24&lt;/code&gt; para el primer nodo y &lt;code&gt;192.168.1.2/24&lt;/code&gt; para el segundo.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Paso 3: Iniciar la Emulación&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Iniciar la Emulación&lt;/strong&gt;: Una vez que los nodos están configurados y conectados, inicia la emulación. Esto generalmente se hace con un botón en la barra de herramientas que puede parecer un botón de &quot;play&quot;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Paso 4: Abrir Terminales en los Nodos&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Abrir Terminales&lt;/strong&gt;: Haz clic derecho en cada nodo y selecciona &quot;Open Terminal&quot; o algo similar. Esto abrirá un terminal para cada nodo, donde podrás ejecutar comandos.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Parte a: Monitorear las Conexiones&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Ejecutar el Comando para Monitorear&lt;/strong&gt;: En cada terminal de los nodos, ejecuta el siguiente comando para monitorear el estado de las conexiones en tiempo real:
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;watch -n 1 &apos;ss -nat&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;watch -n 1&lt;/code&gt;: Este comando actualizará la salida cada segundo.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&apos;ss -nat&apos;&lt;/code&gt;: Muestra todas las conexiones TCP activas y los puertos que están escuchando.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Explicación del Comando&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;watch&lt;/code&gt;&lt;/strong&gt;: Este comando se utiliza para ejecutar otro comando de forma periódica, mostrando su salida en pantalla completa. Es útil para ver la evolución de la salida de un comando a lo largo del tiempo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ss -nat&lt;/code&gt;&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ss&lt;/code&gt;&lt;/strong&gt; es una utilidad para inspeccionar sockets en el sistema.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;-n&lt;/code&gt;&lt;/strong&gt; evita convertir direcciones en nombres.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;-a&lt;/code&gt;&lt;/strong&gt; muestra todos los sockets.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;-t&lt;/code&gt;&lt;/strong&gt; filtra para mostrar solo sockets TCP.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este comando proporcionará una vista en tiempo real de las conexiones y puertos, lo cual es ideal para tu ejercicio en CORE, ya que podrás ver cómo cambian los estados de las conexiones a medida que realizas configuraciones o pruebas de red.&lt;/p&gt;
&lt;h4&gt;Parte a&lt;/h4&gt;
&lt;p&gt;En ambos equipos inspeccionar el estado de las conexiones y mantener abiertas ambas ventanas con el comando corriendo para poder visualizar los cambios a medida que se realiza el ejercicio.&lt;/p&gt;
&lt;p&gt;Ayuda: watch-n1 ’ss-nat’&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/4989636f-935e-4d05-9f8e-b231a5b3756e&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Parte b&lt;/h4&gt;
&lt;p&gt;EnServidor, utilice la herramienta ncat para levantar un servicio que escuche en el puerto 8001/TCP.&lt;/p&gt;
&lt;p&gt;Utilice la opcion-k para que el servicio sea persistente. Verifique el estado de las conexiones.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/b9113481-b258-4c25-be51-fc728c80fb38&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Parte c&lt;/h4&gt;
&lt;p&gt;Desde CLIENTE1 conectarse a dicho servicio utilizando también la herramienta ncat. Inspeccione el estado de las conexiones.&lt;/p&gt;
&lt;h4&gt;Parte d&lt;/h4&gt;
&lt;p&gt;Iniciar otra conexión desde CLIENTE1 de la misma manera que la anterior y verificar el estado de las conexiones. ¿De qué manera puede identificar cada conexión?&lt;/p&gt;
&lt;h4&gt;Parte e&lt;/h4&gt;
&lt;p&gt;En base a lo observado en el item anterior ,¿es posible iniciar más de una conexión desde el cliente al servidor en el mismo puerto destino? ¿Por qué ¿Cómo se garantiza que los datos de una conexión no se mezclarán con los de la otra?&lt;/p&gt;
&lt;h4&gt;Parte f&lt;/h4&gt;
&lt;p&gt;Analice en el tráfico de red, los flags de los segmentos TCP que ocurren cuando:&lt;/p&gt;
&lt;p&gt;i. Cierra la última conexión establecida desde CLIENTE1. Evalúe los estados de las conexiones en ambos equipos.&lt;/p&gt;
&lt;p&gt;ii. Corta el servicio de ncat en el servidor(Ctrl+C). Evalúe los estados de las conexiones en ambos equipos.&lt;/p&gt;
&lt;p&gt;iii. Cierra la conexión en el cliente. Evalúe nuevamente los estados de las conexiones.&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.DydaRuL1.jpg"/><enclosure url="/_astro/thumbnail.DydaRuL1.jpg"/></item><item><title>Practica 6 Redes | Capa de Transporte</title><link>https://fabianmartinezrincon.com/blog/practica-6-redes</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/practica-6-redes</guid><description>Practica 6 de Redes y Comunicaciones</description><pubDate>Tue, 07 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Indice&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-1&quot;&gt;Ejercicio 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-2&quot;&gt;Ejercicio 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-3&quot;&gt;Ejercicio 3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-4&quot;&gt;Ejercicio 4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-5&quot;&gt;Ejercicio 5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-6&quot;&gt;Ejercicio 6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-7&quot;&gt;Ejercicio 7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-8&quot;&gt;Ejercicio 8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-9&quot;&gt;Ejercicio 9&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-10&quot;&gt;Ejercicio 10&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-11&quot;&gt;Ejercicio 11&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-12&quot;&gt;Ejercicio 12&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-13&quot;&gt;Ejercicio 13&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 1.&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Cuál es el puerto por defecto que se utiliza en los siguientes servicios?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Web / SSH / DNS / Web Seguro / POP3 / IMAP / SMTP&lt;/p&gt;
&lt;p&gt;Investigue en qué lugar en Linux y en Windows está descrita la asociación utilizada por defecto para cada servicio.&lt;/p&gt;
&lt;p&gt;Los puertos por defecto para los servicios comunes son establecidos por convenciones ampliamente aceptadas y utilizadas por los sistemas operativos y aplicaciones de red para facilitar la comunicación estándar a través de Internet. A continuación, te proporciono los puertos por defecto para cada uno de los servicios que mencionaste:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Puertos por Defecto&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Web (HTTP)&lt;/strong&gt;: &lt;strong&gt;80&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Utilizado para tráfico web no cifrado.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SSH (Secure Shell)&lt;/strong&gt;: &lt;strong&gt;22&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Utilizado para la administración segura de sistemas remotos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;DNS (Domain Name System)&lt;/strong&gt;: &lt;strong&gt;53&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Utilizado para resolver nombres de dominio en direcciones IP.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Web Seguro (HTTPS)&lt;/strong&gt;: &lt;strong&gt;443&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Utilizado para tráfico web cifrado.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;POP3 (Post Office Protocol versión 3)&lt;/strong&gt;: &lt;strong&gt;110&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Utilizado para descargar correos electrónicos desde un servidor de correo a un cliente. El puerto &lt;strong&gt;995&lt;/strong&gt; se utiliza para POP3 sobre SSL/TLS.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;IMAP (Internet Message Access Protocol)&lt;/strong&gt;: &lt;strong&gt;143&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Utilizado para acceder y gestionar correos electrónicos directamente desde el servidor de correo. El puerto &lt;strong&gt;993&lt;/strong&gt; se utiliza para IMAP sobre SSL/TLS.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SMTP (Simple Mail Transfer Protocol)&lt;/strong&gt;: &lt;strong&gt;25&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Utilizado para el envío de correos electrónicos. Para SMTP seguro, que incluye cifrado, el puerto &lt;strong&gt;465&lt;/strong&gt; (SMTPS) o &lt;strong&gt;587&lt;/strong&gt; (SMTP con STARTTLS) son comúnmente usados.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Ubicación de la Asociación de Puertos en Sistemas Operativos&lt;/h3&gt;
&lt;h4&gt;Linux&lt;/h4&gt;
&lt;p&gt;En los sistemas operativos basados en Linux, la asociación de puertos con servicios está comúnmente definida en el archivo &lt;code&gt;/etc/services&lt;/code&gt;. Este archivo lista los nombres de servicios, sus puertos correspondientes y el tipo de protocolo (TCP/UDP). Puedes visualizar este archivo usando un editor de texto o mediante comandos como &lt;code&gt;cat&lt;/code&gt; o &lt;code&gt;less&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cat /etc/services
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Este archivo es utilizado por varias aplicaciones y procesos del sistema para determinar los números de puerto para nombres de servicios conocidos.&lt;/p&gt;
&lt;h4&gt;Windows&lt;/h4&gt;
&lt;p&gt;En Windows, la asociación de puertos no se define en un archivo de configuración plano como en Linux. Sin embargo, Windows usa la base de datos de Servicios de Red, similar al archivo &lt;code&gt;/etc/services&lt;/code&gt; de Linux, pero está incorporada en el sistema y no es tan directamente accesible por los usuarios. Los desarrolladores pueden acceder a esta información programáticamente usando la API de Windows.&lt;/p&gt;
&lt;p&gt;Para administrar y ver configuraciones de puerto, las herramientas como PowerShell y diversas interfaces de administración de red GUI pueden ser utilizadas. Por ejemplo, puedes usar &lt;code&gt;netstat&lt;/code&gt; en la línea de comandos para ver las conexiones activas y los puertos que están escuchando:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;netstat -aon
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esta información te proporcionará una visión clara de los servicios y sus puertos en uso activo.&lt;/p&gt;
&lt;p&gt;Estos son los detalles básicos sobre los puertos y dónde encontrar su configuración en los sistemas operativos más comunes. Si necesitas más información detallada sobre cómo cambiar o gestionar estos puertos o configuraciones adicionales, estaré encantado de ayudar.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 2&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Qué es Multicast?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Multicast es un método de comunicación de red que permite la entrega eficiente de información a múltiples destinos simultáneamente utilizando una única transmisión. Este enfoque es especialmente útil en aplicaciones donde los mismos datos necesitan ser enviados a varios receptores, como en la transmisión de video y audio en vivo, actualizaciones de software a gran escala, y la difusión de información financiera.&lt;/p&gt;
&lt;p&gt;En el modelo de multicast, los datos se envían solo una vez desde la fuente, independientemente del número de destinatarios. Los routers dentro de la red son responsables de replicar los paquetes a medida que se necesitan para alcanzar todos los destinos suscritos, lo que reduce significativamente el ancho de banda necesario en comparación con el envío de una copia individual a cada receptor.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Sobre cuál de los protocolos de capa de transporte funciona el Multicast?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Multicast generalmente funciona sobre &lt;strong&gt;UDP&lt;/strong&gt; (User Datagram Protocol) en la capa de transporte:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;UDP&lt;/strong&gt; es un protocolo sin conexión y no garantiza la entrega, el orden de llegada de los paquetes, ni la integridad de los datos. Sin embargo, su simplicidad y eficiencia lo hacen ideal para multicast, donde la velocidad y la eficiencia de la transmisión son más críticas que la fiabilidad de la entrega de cada paquete individual.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UDP&lt;/strong&gt; permite que un servidor envíe un solo paquete a un grupo de direcciones IP de destino, lo que es fundamental para la implementación de servicios multicast. Las aplicaciones que utilizan multicast manejan la control de la fiabilidad y el orden en niveles superiores si es necesario.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;¿Se podría adaptar para que funcione sobre el otro protocolo de capa de transporte?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El otro protocolo de capa de transporte principal es &lt;strong&gt;TCP&lt;/strong&gt; (Transmission Control Protocol), que es orientado a conexión, confiable y garantiza que todos los paquetes lleguen en orden y sin errores. Aunque teóricamente es posible implementar algún tipo de &quot;multicast&quot; sobre TCP, hay varias razones por las que esto no es práctico ni recomendable:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Orientado a Conexión:&lt;/strong&gt; TCP requiere una conexión establecida entre un único emisor y un único receptor, lo que significa que debería establecerse una conexión individual con cada receptor en un escenario de multicast. Esto eliminaría los beneficios de eficiencia de ancho de banda que proporciona el multicast.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Sobrecarga:&lt;/strong&gt; La gestión de conexiones múltiples simultáneamente para cada receptor aumentaría considerablemente la sobrecarga en el servidor, haciendo que el proceso sea ineficiente en términos de recursos computacionales y de red.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Control de Congestión y Flujo:&lt;/strong&gt; TCP implementa control de flujo y control de congestión, ajustando la tasa de envío según la capacidad del receptor y las condiciones de la red. En un entorno multicast, estos mecanismos serían difíciles de administrar de manera efectiva debido a la variabilidad en las capacidades de recepción y las condiciones de red entre un grupo potencialmente grande y diverso de receptores.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Conclusión&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Multicast está diseñado para ser utilizado con UDP debido a su naturaleza sin conexión y eficiente. Adaptarlo para funcionar sobre TCP presentaría desafíos significativos que contrarrestarían las ventajas inherentes del multicast. En cambio, para escenarios donde se requiere fiabilidad en la entrega multicast, las aplicaciones a menudo implementan sus propios mecanismos de control en niveles superiores o utilizan otros protocolos diseñados específicamente para la entrega confiable de multicast, como Reliable Multicast Protocol (RMP).&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 3&lt;/h3&gt;
&lt;p&gt;Investigue cómo funciona el protocolo de aplicación FTP teniendo en cuenta las diferencias en su funcionamiento cuando se utiliza el modo activo de cuando se utiliza el modo pasivo&lt;/p&gt;
&lt;p&gt;¿En qué se diferencian estos tipos de comunicaciones del resto de los protocolos de aplicación vistos?&lt;/p&gt;
&lt;p&gt;El &lt;strong&gt;Protocolo de Transferencia de Archivos (FTP)&lt;/strong&gt; es un protocolo de la capa de aplicación utilizado para transferir archivos entre sistemas a través de una red TCP/IP. FTP es uno de los protocolos de Internet más antiguos y aún se utiliza ampliamente hoy en día debido a su eficacia en la transferencia de archivos grandes. Uno de los aspectos más interesantes y únicos de FTP es su uso de dos canales de comunicación separados: un canal de control y un canal de datos.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Modos de FTP: Activo vs. Pasivo&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;FTP puede operar en dos modos distintos: &lt;strong&gt;activo&lt;/strong&gt; y &lt;strong&gt;pasivo&lt;/strong&gt;. Estos modos afectan cómo se establece la conexión de datos entre el cliente y el servidor.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Modo Activo&lt;/code&gt;
En el &lt;strong&gt;modo activo&lt;/strong&gt;, el cliente inicia la conexión al servidor para enviar comandos a través del puerto 21 (canal de control). Para transferir datos, el servidor intentará establecer una conexión de retorno al cliente. Aquí están los pasos específicos:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;El cliente se conecta desde un puerto aleatorio a la puerto 21 del servidor y envía el comando &lt;code&gt;PORT&lt;/code&gt; especificando en qué puerto del cliente el servidor debe conectarse para transferir datos.&lt;/li&gt;
&lt;li&gt;El servidor entonces inicia una conexión desde su puerto 20 (puerto de datos) al puerto especificado por el cliente para transferir datos.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Modo Pasivo&lt;/code&gt;
En el &lt;strong&gt;modo pasivo&lt;/strong&gt;, que fue desarrollado para trabajar con firewalls y NAT (Network Address Translation), la conexión se inicia de manera diferente:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;El cliente se conecta desde un puerto aleatorio al puerto 21 del servidor y envía el comando &lt;code&gt;PASV&lt;/code&gt;, solicitando al servidor que entre en modo pasivo.&lt;/li&gt;
&lt;li&gt;El servidor abre un puerto aleatorio y envía este número de puerto al cliente. Luego, el cliente inicia la conexión de datos al puerto especificado por el servidor desde otro puerto aleatorio.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Diferencias con Otros Protocolos de Aplicación&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Comparando FTP con otros protocolos de aplicación, aquí hay algunas diferencias clave:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Dos Canales Separados (Control y Datos):&lt;/strong&gt; A diferencia de HTTP, SMTP y otros protocolos de aplicación que generalmente utilizan una sola conexión (TCP) para todo el tráfico, FTP utiliza dos conexiones separadas, lo que permite que los comandos y la transferencia de datos se manejen de forma independiente. Esto significa que la sesión de control puede permanecer abierta para enviar comandos adicionales sin interrumpir la transferencia de datos en curso.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Estado de la Conexión:&lt;/strong&gt; FTP es un protocolo basado en estado, lo que significa que mantiene una sesión de control durante toda la interacción entre el cliente y el servidor. Esto es diferente de protocolos sin estado como HTTP, donde cada solicitud es independiente.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Complejidad y Flexibilidad:&lt;/strong&gt; FTP ofrece una gama más amplia de comandos que permiten no solo la transferencia de archivos sino también operaciones detalladas en el sistema de archivos del servidor (como cambiar directorios, listar archivos y cambiar permisos), lo que lo hace más complejo pero también más flexible.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configuración del Firewall/NAT:&lt;/strong&gt; El uso de dos canales separados y especialmente el modo activo de FTP pueden complicar la configuración de firewalls y NAT, lo que no suele ser un problema con protocolos más modernos como HTTP/S.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En resumen, el FTP es un protocolo poderoso y flexible con algunas peculiaridades, especialmente en cómo maneja las conexiones, que requieren consideraciones especiales cuando se trabaja con firewalls y en entornos con NAT.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 4&lt;/h3&gt;
&lt;p&gt;Suponiendo Selective Repeat; tamaño de ventana 4 y sabiendo que E indica que el mensaje llegó con errores. Indique en el siguiente gráfico, la numeración de los ACK que el host B envía al Host A&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/653cac3b-5502-4e3c-8e34-8b81e72895dc&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;El gráfico que proporcionaste muestra una secuencia de eventos entre dos hosts, Host A y Host B, en un escenario de comunicación de red utilizando el protocolo Selective Repeat ARQ (Automatic Repeat reQuest). Este protocolo es utilizado para el control de errores en redes de datos y permite la retransmisión selectiva de paquetes que han sido detectados como erróneos o que no han sido confirmados dentro de un tiempo de espera.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Descripción de la Secuencia:&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;En el gráfico, observamos lo siguiente:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Host A envía múltiples paquetes a Host B.&lt;/li&gt;
&lt;li&gt;Las líneas negras indican que los paquetes fueron enviados.&lt;/li&gt;
&lt;li&gt;Las líneas rojas indican que se enviaron acuses de recibo (ACK) de vuelta a Host A.&lt;/li&gt;
&lt;li&gt;La línea magenta marcada con una &apos;E&apos; muestra que el paquete llegó con errores.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Análisis de la Numeración de los ACK:&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Con Selective Repeat y un tamaño de ventana de 4:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Paquetes Enviados desde Host A a Host B&lt;/strong&gt;: La numeración de paquetes enviados se observa en el lado izquierdo del gráfico. Las flechas negras que se mueven hacia arriba representan los paquetes que llegan correctamente y la flecha magenta representa el paquete con errores.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ACKs Enviados desde Host B a Host A&lt;/strong&gt;: Las flechas rojas indican los ACKs enviados por Host B a Host A. Estos ACKs confirmarán la recepción de los paquetes que llegaron correctamente.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Interpretación Basada en el Gráfico:&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ACK 1&lt;/strong&gt;: Confirmación del paquete 1 (el primer ACK rojo que sube).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ACK 2&lt;/strong&gt;: Confirmación del paquete 2 (segundo ACK rojo que sube).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No hay ACK para el paquete 3&lt;/strong&gt;: Ya que el paquete 3 llega con errores (indicado por la línea magenta con &apos;E&apos;), no se envía un ACK para este paquete en este momento.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ACK 4&lt;/strong&gt;: Confirmación del paquete 4 (tercer ACK rojo que sube).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ACK 5&lt;/strong&gt;: Confirmación del paquete 5 (cuarto ACK rojo que sube).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Notas Adicionales:&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ACK de paquete 3&lt;/strong&gt;: Eventualmente, Host A deberá retransmitir el paquete 3 debido a que no recibió un ACK por este, y suponiendo que Host A detecta la falta de este ACK (posiblemente a través de un timeout o por la recepción de ACKs de paquetes con números de secuencia superiores sin haber recibido el ACK para el paquete 3).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Conclusión:&lt;/code&gt;
En Selective Repeat, cada paquete es reconocido independientemente, y el receptor solo envía ACKs para los paquetes que ha recibido correctamente. Los paquetes que llegan con errores (como el paquete 3 en tu diagrama) deben ser retransmitidos y no se les envía ACK hasta que sean recibidos correctamente en una nueva transmisión.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 5&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Qué restricción existe sobre el tamaño de ventanas en el protocolo Selective Repeat?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;En el protocolo Selective Repeat ARQ, una de las principales restricciones es sobre el tamaño de la ventana de transmisión y recepción. Esta restricción es crucial para evitar ambigüedades en la numeración de los paquetes y para garantizar que el protocolo funcione correctamente y de manera eficiente. El tamaño de la ventana determina cuántos paquetes pueden ser enviados sin recibir un acuse de recibo (ACK) y aún así mantener el orden y el control correctos sobre los paquetes que necesitan ser retransmitidos.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Restricción sobre el Tamaño de Ventanas en Selective Repeat&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El tamaño de la ventana en el protocolo Selective Repeat no debe ser mayor que la mitad del espacio de numeración de secuencia disponible. Esto es debido a las siguientes razones:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Desambiguación de Números de Secuencia:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En el protocolo Selective Repeat, cada paquete tiene un número de secuencia, y estos números se utilizan para identificar y confirmar la recepción de paquetes individuales.&lt;/li&gt;
&lt;li&gt;Para evitar cualquier confusión entre un paquete nuevo y la retransmisión de un paquete viejo que no ha sido aún acusado, es crucial que los números de secuencia de los paquetes en tránsito no se superpongan. Si el tamaño de la ventana fuera mayor que la mitad del espacio de numeración de secuencia, podría haber ambigüedad en la identificación de los paquetes, particularmente cuando algunos paquetes se pierden y requieren retransmisión.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Maximización de la Utilización del Canal sin Confusión:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Con un tamaño de ventana que es la mitad del espacio de numeración de secuencia, se maximiza la cantidad de datos en tránsito en el canal sin riesgo de confundir un paquete nuevo con uno antiguo. Esto permite una utilización eficiente del canal, manteniendo al mismo tiempo la integridad y la fiabilidad de los datos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Ejemplo&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Si el espacio de numeración de secuencia es de 0 a 15 (16 posibles números de secuencia), el tamaño de la ventana en Selective Repeat no debe exceder 8. Esto asegura que en cualquier momento, los paquetes en tránsito o pendientes de acuse de recibo no superarán la mitad del espacio de numeración, eliminando cualquier posibilidad de confusión entre los números de secuencia de los paquetes viejos y nuevos.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Conclusión&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Esta restricción sobre el tamaño de la ventana en Selective Repeat es fundamental para el correcto funcionamiento del protocolo, especialmente en entornos donde la pérdida de paquetes o los altos tiempos de latencia pueden causar que los paquetes lleguen fuera de orden o necesiten ser retransmitidos frecuentemente. Al limitar el tamaño de la ventana a la mitad del espacio de numeración de secuencia, Selective Repeat equilibra eficientemente entre el alto rendimiento y la confiabilidad en la transmisión de datos.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 6&lt;/h3&gt;
&lt;p&gt;De acuerdo a la captura TCP de la siguiente figura, indique los valores de los campos borroneados.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/1e394b0b-a017-4320-8366-c3e4db242c21&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;La captura de pantalla que has compartido muestra un segmento TCP capturado, probablemente con Wireshark u otra herramienta de análisis de protocolos. Basándome en la información visible y los estándares comunes de los paquetes TCP, puedo ayudarte a deducir o explicar los valores típicos de los campos que están borrosos en la imagen:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Número de Secuencia:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Valor visible:&lt;/strong&gt; &lt;code&gt;1047417501&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Descripción:&lt;/strong&gt; Este número identifica la posición de los primeros datos del paquete en el flujo de datos del emisor. El número de secuencia de un segmento es el del primer byte de datos en el segmento.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Número de Reconocimiento:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Valor visible:&lt;/strong&gt; &lt;code&gt;3933822138&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Descripción:&lt;/strong&gt; Este número indica el próximo número de secuencia que el receptor está esperando. Esto confirma la recepción de todos los bytes anteriores.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Longitud del Encabezado:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Valor visible:&lt;/strong&gt; &lt;code&gt;40 bytes&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Descripción:&lt;/strong&gt; Este campo, también conocido como &quot;Data Offset&quot;, indica la longitud del encabezado TCP en múltiplos de 4 bytes. Un valor de 40 bytes indica que hay opciones adicionales de TCP presentes, ya que el mínimo tamaño de encabezado TCP es de 20 bytes.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Flags:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Valores visibles:&lt;/strong&gt; &lt;code&gt;SYN, ACK&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Descripción:&lt;/strong&gt; El flag &lt;code&gt;SYN&lt;/code&gt; es utilizado para iniciar una conexión y sincronizar números de secuencia. El flag &lt;code&gt;ACK&lt;/code&gt; indica que el campo de número de reconocimiento es válido.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Tamaño de la Ventana:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Valor visible:&lt;/strong&gt; &lt;code&gt;5792&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Descripción:&lt;/strong&gt; Este campo especifica el tamaño de la ventana de recepción (en bytes) que el emisor está dispuesto a recibir, lo que controla el flujo de datos para evitar el desbordamiento del buffer del receptor.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Checksum:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Valor visible:&lt;/strong&gt; &lt;code&gt;0x9803&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Descripción:&lt;/strong&gt; Este valor es calculado por el emisor y verificado por el receptor para asegurar la integridad del encabezado y de los datos de un segmento TCP.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Opciones de TCP:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Posibles valores:&lt;/strong&gt; Podría incluir varias opciones como MSS (Maximum Segment Size), SACK Permitted (Selective Acknowledgment Permitted), Timestamps, y otros. Estas opciones están diseñadas para mejorar el rendimiento de TCP en diversos entornos de red.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Dada la información que se muestra en la captura y la descripción estándar de los campos en los paquetes TCP, estos valores son típicos o esperados. Para análisis más detallado o específico, se recomendaría tener acceso directo a la herramienta de captura o tener una visión completa del paquete sin campos borrosos.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 7 Este esta re mal xd&lt;/h3&gt;
&lt;p&gt;Dada la sesión TCP de la figura, completar los valores marcados con
un signo de interrogación.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/365d239d-3620-46e1-b8a9-b66075d8d175&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;1. Establecimiento de la conexión y primera transmisión de datos&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;1.360 s: SYN (Seq = 0)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Host A envía un SYN&lt;/strong&gt; para iniciar la conexión con Secuencia &lt;code&gt;0&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;1.360 s: SYN, ACK (Seq = 0, Ack = 1)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Host B responde con SYN, ACK&lt;/strong&gt;. Este paquete confirma la recepción del SYN inicial (&lt;code&gt;Ack = 1&lt;/code&gt;) y también envía su propio número de secuencia inicial como &lt;code&gt;0&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;1.360 s: ACK (Seq = 1, Ack = 1)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Host A envía un ACK&lt;/strong&gt;. El número de secuencia &lt;code&gt;1&lt;/code&gt; confirma la recepción del SYN de Host B, y el número de reconocimiento &lt;code&gt;1&lt;/code&gt; indica que Host A está listo para recibir datos comenzando con el primer byte de Host B.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;2. Transmisión de datos&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;3.581 s: PSH, ACK, Len = 9 (Seq = 1, Ack = 1)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Host A envía datos (9 bytes) con PSH y ACK&lt;/strong&gt;. El número de secuencia &lt;code&gt;1&lt;/code&gt; indica que estos son los primeros datos enviados, y el número de reconocimiento &lt;code&gt;1&lt;/code&gt; todavía está confirmando el SYN inicial de Host B.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;8.796 s: ACK (Seq = 1, Ack = 10)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Host B envía un ACK&lt;/strong&gt;. El número de secuencia &lt;code&gt;1&lt;/code&gt; indica que Host B no ha enviado datos propios, y el número de reconocimiento &lt;code&gt;10&lt;/code&gt; confirma la recepción de los 9 bytes de datos, esperando el byte de secuencia &lt;code&gt;10&lt;/code&gt; a continuación.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;14.382 s: PSH, ACK, Len = 5 (Seq = 10, Ack = 1)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Host A envía otros 5 bytes de datos&lt;/strong&gt;. El número de secuencia &lt;code&gt;10&lt;/code&gt; es continuación del último byte de datos confirmado, y el número de reconocimiento &lt;code&gt;1&lt;/code&gt; todavía confirma solo el SYN de Host B.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;14.382 s: ACK (Seq = 1, Ack = 15)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Host B envía un ACK&lt;/strong&gt;. El número de secuencia &lt;code&gt;1&lt;/code&gt; sigue sin cambiar porque Host B no ha enviado datos propios, y el número de reconocimiento &lt;code&gt;15&lt;/code&gt; confirma los 5 bytes adicionales enviados por Host A.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;3. Cierre de la conexión&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;15.190 s: FIN, ACK (Seq = 15, Ack = 1)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Host A envía un FIN para comenzar a cerrar la conexión&lt;/strong&gt;, indicando que no enviará más datos. El número de secuencia &lt;code&gt;15&lt;/code&gt; sigue desde el último byte enviado, y el número de reconocimiento &lt;code&gt;1&lt;/code&gt; sigue igual.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;15.190 s: FIN, ACK (Seq = 1, Ack = 16)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Host B también inicia el cierre con un FIN&lt;/strong&gt;. El número de secuencia &lt;code&gt;1&lt;/code&gt; indica que no ha habido datos enviados por B, y el número de reconocimiento &lt;code&gt;16&lt;/code&gt; confirma la recepción del FIN de A.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;15.190 s: ACK (Seq = 16, Ack = 2)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Host A envía un ACK final&lt;/strong&gt;. El número de secuencia &lt;code&gt;16&lt;/code&gt; sigue desde el FIN de A, y el número de reconocimiento &lt;code&gt;2&lt;/code&gt; confirma el FIN de B.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este análisis debe proporcionar una comprensión clara y detallada de los números de secuencia y de reconocimiento en toda la secuencia de comunicación TCP mostrada en tu imagen.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 8&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Qué es el RTT?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El &lt;strong&gt;RTT (Round-Trip Time)&lt;/strong&gt; es el tiempo que tarda un paquete de datos en viajar desde un origen a un destino y volver al origen. Este tiempo incluye la propagación de los datos a través del medio físico, los retrasos en los dispositivos de red como routers y switches, y el tiempo de procesamiento en el destino para generar una respuesta. En redes de computadoras y comunicaciones, el RTT es fundamental para entender y optimizar el rendimiento de la red.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Cómo se calcula el RTT?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;En el contexto de TCP, el RTT se calcula comúnmente como el tiempo entre el envío de un paquete y la recepción de un acuse de recibo (ACK) para ese paquete. Sin embargo, como los paquetes pueden tomar diferentes rutas y experimentar diferentes retrasos, el cálculo del RTT a menudo implica un promedio de varios valores de RTT medidos a lo largo del tiempo para obtener un valor más estable. En la práctica, los algoritmos como el &lt;strong&gt;Algoritmo de Karn&lt;/strong&gt; y &lt;strong&gt;Jacobson/Karels algorithm&lt;/strong&gt; se utilizan para ajustar y suavizar los cálculos del RTT.&lt;/p&gt;
&lt;h4&gt;&lt;code&gt;Investigue la opción TCP timestamp y los campos TSval y TSecr.&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;Implementación Técnica&lt;/code&gt;
TCP usa el valor del RTT para ajustar el &lt;strong&gt;RTO (Retransmission Timeout)&lt;/strong&gt;, que es el tiempo que espera TCP antes de retransmitir un paquete que no ha sido acusado, presumiendo que se ha perdido en la red.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Opción TCP Timestamp&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La opción &lt;strong&gt;TCP Timestamp&lt;/strong&gt;, definida en el RFC 7323, es utilizada para mejorar el cálculo del RTT y proveer una mejor estimación del RTO. Además, permite a TCP funcionar de manera eficiente sobre conexiones de larga distancia y de alta velocidad (conocidas como redes LFN, Long Fat Networks). Esta opción añade dos campos al encabezado de los segmentos TCP:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;TSval (Timestamp Value)&lt;/strong&gt;: Es un valor de marca de tiempo que el emisor pone en el paquete cuando lo envía.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TSecr (Timestamp Echo Reply)&lt;/strong&gt;: Es un campo en el que el emisor copia el último valor TSval recibido del receptor.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Funcionamiento de los Campos TSval y TSecr&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;TSval&lt;/strong&gt;: Incrementa cada vez que el reloj del sistema del emisor avanza. Este campo se utiliza para ayudar al receptor a calcular el RTT, proporcionando un sello de tiempo preciso de cuándo fue enviado originalmente el paquete.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;TSecr&lt;/strong&gt;: Es utilizado por el receptor para devolver el valor de TSval que recibió en el último paquete enviado por el emisor. Este valor reflejado permite al emisor medir el RTT midiendo el tiempo entre cuando el segmento original fue enviado y cuando se recibe el segmento con el TSecr correspondiente.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Beneficios de la Opción TCP Timestamp&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mejora la precisión del RTT&lt;/strong&gt;: Al usar marcas de tiempo explícitas, se puede calcular de manera más precisa el RTT, especialmente en redes donde los paquetes pueden ser reordenados.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evita la ambigüedad en la secuencia&lt;/strong&gt;: Ayuda en situaciones donde los números de secuencia pueden volver a envolverse (wrap around).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Protección contra ataques PAWS (Protection Against Wrapped Sequence numbers)&lt;/strong&gt;: Previene errores en la conexión causados por la reutilización de números de secuencia viejos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En resumen, el RTT es un componente vital para la administración de rendimiento en TCP, y la opción TCP Timestamp es una herramienta avanzada que ayuda a optimizar esta métrica, facilitando la operación de TCP en una variedad de entornos de red.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 9 Esto es un re quilombo&lt;/h3&gt;
&lt;p&gt;Para la captura tcp-captura.pcap, responder las siguientes preguntas.&lt;/p&gt;
&lt;h4&gt;a. ¿Cuántos intentos de conexiones TCP hay?&lt;/h4&gt;
&lt;p&gt;Deberías contar el número de banderas SYN que no tienen un SYN-ACK correspondiente o que tienen múltiples retransmisiones del SYN para identificar intentos de conexión.&lt;/p&gt;
&lt;h4&gt;b. ¿Cuáles son la fuente y el destino (IP:port) para c/u?&lt;/h4&gt;
&lt;p&gt;Para cada intento de conexión, mira en los campos de fuente y destino del segmento TCP en los paquetes SYN.&lt;/p&gt;
&lt;h4&gt;c. ¿Cuántas conexiones TCP exitosas hay en la captura? ¿Cómo diferencia las exitosas de las que no lo son? ¿Cuáles flags encuentra en cada una?&lt;/h4&gt;
&lt;p&gt;Las conexiones exitosas se identifican por un handshake de tres vías completado, observable por la presencia de las banderas SYN, SYN-ACK, y ACK. Las conexiones no exitosas podrían tener solo SYN o SYN seguido por RST sin progresar a un handshake completo.&lt;/p&gt;
&lt;h4&gt;d. Dada la primera conexión exitosa responder:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;¿Quién inicia la conexión?&lt;/strong&gt; Generalmente es el host que envía el primer SYN.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;¿Quién es el servidor y quién el cliente?&lt;/strong&gt; El servidor es el dispositivo que responde con SYN-ACK, y el cliente es el que envía el SYN inicial.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;¿En qué segmentos se observa el handshake de tres vías?&lt;/strong&gt; Busca el primer SYN, la respuesta SYN-ACK, y el ACK final.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;¿Cuáles son los números de secuencia iniciales (ISNs)?&lt;/strong&gt; Estos se encuentran en los campos de número de secuencia de los paquetes SYN y SYN-ACK.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;¿Qué MSS se negoció?&lt;/strong&gt; Esto se encuentra en el campo de opciones de los paquetes SYN, etiquetado como tamaño máximo de segmento.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;¿Qué host envía la mayor cantidad de datos?&lt;/strong&gt; Suma las longitudes de la carga útil de los segmentos TCP enviados por cada host después del handshake para determinar esto.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;e. Identificar primer segmento de datos (origen, destino, tiempo, número de fila y número de secuencia TCP).&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Origen, destino, tiempo, número de fila y número de secuencia TCP:&lt;/strong&gt; Busca el primer paquete después del handshake con una carga útil mayor que cero.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;¿Cuántos datos lleva?&lt;/strong&gt; Este es el tamaño de la carga útil, sin contar el encabezado TCP.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;¿Cuándo y cómo se confirma?&lt;/strong&gt; Se confirma por un segmento ACK, que reconocerá el número de secuencia igual al número de secuencia original más la longitud de los datos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;¿Qué cantidad de bytes confirma la confirmación?&lt;/strong&gt; Sería el incremento en el campo de reconocimiento sobre el ACK anterior.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;f. ¿Quién inicia el cierre de la conexión? ¿Qué flags se utilizan? ¿En cuáles segmentos se ve (tiempo, número de fila y número de secuencia TCP)?&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;¿Quién inicia el cierre?&lt;/strong&gt; Busca quién envía la primera bandera FIN.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;¿Qué banderas se utilizan?&lt;/strong&gt; Típicamente, FIN y ACK se usan.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;¿En qué segmentos se ve el cierre?&lt;/strong&gt; Estos son los segmentos con FIN y el ACK final.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para llevar a cabo este análisis, abrirías el archivo pcap en Wireshark, seguirías el flujo TCP y revisarías los detalles de los paquetes como se describió. Podrías filtrar tu vista en Wireshark con expresiones como &lt;code&gt;tcp.flags.syn == 1&lt;/code&gt; para paquetes SYN, o &lt;code&gt;tcp.flags.fin == 1&lt;/code&gt; para paquetes FIN, para aislar los paquetes relevantes para tu análisis.&lt;/p&gt;
&lt;p&gt;Para más detalles sobre cómo usar Wireshark para tal análisis, considera explorar recursos y tutoriales específicamente sobre cómo usar Wireshark, ya que te proporcionarán instrucciones paso a paso sobre cómo navegar e interpretar los datos.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/7fd320f7-0482-41db-ba7a-856618a2a899&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/f47904a5-bb45-4761-957b-58c46ca23e9e&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 10&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Responda las siguientes preguntas respecto del mecanismo de control de flujo.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El control de flujo es un mecanismo fundamental en la gestión de comunicaciones en redes de computadoras, especialmente en protocolos de la capa de transporte como TCP (Protocolo de Control de Transmisión). Aquí se explica cómo funciona este mecanismo, quién lo activa, el problema que resuelve, y bajo qué condiciones opera.&lt;/p&gt;
&lt;h4&gt;a. ¿Quién lo activa? ¿De qué forma lo hace?&lt;/h4&gt;
&lt;p&gt;El control de flujo es activado tanto por el emisor como por el receptor en una comunicación de datos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Emisor&lt;/strong&gt;: Regula la cantidad de datos que envía al receptor antes de recibir un acuse de recibo (ACK), asegurándose de no saturar el buffer del receptor.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Receptor&lt;/strong&gt;: Proporciona retroalimentación al emisor sobre cuántos datos puede recibir sin riesgo de perder información. Esto lo hace a través del campo &quot;ventana&quot; en los encabezados de los paquetes TCP, que indica la cantidad de bytes que está dispuesto a recibir.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por ejemplo, en TCP, cada segmento que un receptor recibe y procesa exitosamente es respondido con un ACK, donde se especifica la cantidad de espacio libre en el buffer del receptor, informando al emisor cuántos datos más puede enviar antes de que el receptor se sature.&lt;/p&gt;
&lt;h4&gt;b. ¿Qué problema resuelve?&lt;/h4&gt;
&lt;p&gt;El control de flujo resuelve varios problemas clave en la transmisión de datos en redes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Prevención de la saturación del receptor&lt;/strong&gt;: Evita que el emisor envíe más datos de los que el receptor puede procesar a la vez. Sin control de flujo, el buffer del receptor podría desbordarse, llevando a la pérdida de paquetes y a una reducción en la eficiencia de la red debido a la necesidad de retransmisiones.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimización del uso del ancho de banda&lt;/strong&gt;: Asegura que la transmisión de datos se haga a una velocidad que ambos, emisor y receptor, puedan manejar eficientemente, adaptándose a las fluctuaciones en la disponibilidad del ancho de banda y en las capacidades de procesamiento del receptor.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;c. ¿Cuánto tiempo dura activo y qué situación lo desactiva?&lt;/h4&gt;
&lt;p&gt;El control de flujo está activo durante toda la sesión de la conexión TCP y se ajusta dinámicamente según las condiciones de la red y el estado de los buffers de recepción:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Duración&lt;/strong&gt;: Permanece activo mientras la conexión TCP está establecida. Cada paquete transmitido puede ajustar el estado del control de flujo según las necesidades actuales del receptor.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Desactivación&lt;/strong&gt;: El mecanismo de control de flujo se desactiva automáticamente al cerrar la conexión TCP. Además, si el buffer del receptor se vacía (es decir, todos los datos han sido procesados y el espacio en el buffer es suficiente), el tamaño de la ventana comunicada al emisor puede incrementarse, permitiendo la transmisión de más datos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este sistema adaptativo de control de flujo es crucial para mantener la estabilidad y eficiencia en las comunicaciones sobre redes que operan bajo el protocolo TCP, adaptándose continuamente a las condiciones cambiantes de la red y a la capacidad de procesamiento de los dispositivos conectados.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 11&lt;/h3&gt;
&lt;p&gt;Responda las siguientes preguntas respecto del mecanismo de control de congestión.&lt;/p&gt;
&lt;p&gt;El control de congestión en redes de computadoras, particularmente en el Protocolo de Control de Transmisión (TCP), es un mecanismo fundamental diseñado para evitar la sobrecarga de la red, lo que puede llevar a una degradación del rendimiento general y pérdida de paquetes. A continuación, se exploran los aspectos fundamentales de este mecanismo.&lt;/p&gt;
&lt;h3&gt;a. ¿Quién activa el mecanismo de control de congestión? ¿Cuáles son los posibles disparadores?&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Activación:&lt;/strong&gt;
El mecanismo de control de congestión es activado por el emisor basándose en la percepción de eventos de la red que sugieren congestión.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Disparadores Posibles:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Pérdida de Paquetes:&lt;/strong&gt; Identificada por la ausencia de un acuse de recibo (ACK) para un paquete enviado dentro del tiempo esperado, lo que puede llevar al emisor a retransmitir el paquete y ajustar su tasa de envío.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Aumento en el Tiempo de Ida y Vuelta (RTT):&lt;/strong&gt; Un incremento significativo en el RTT puede indicar que los paquetes están experimentando colas más largas en los routers, lo que es un síntoma de congestión.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Indicaciones Explícitas de Pérdida de Paquetes (ECN):&lt;/strong&gt; Algunas redes modernas utilizan señalizaciones explícitas como el ECN (Explicit Congestion Notification), que permite a los routers informar al emisor de la presencia de congestión antes de que se pierdan los paquetes.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;b. ¿Qué problema resuelve?&lt;/h3&gt;
&lt;p&gt;El control de congestión busca abordar varios problemas críticos en las redes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Prevención de la Caída del Rendimiento de la Red:&lt;/strong&gt; Cuando demasiados paquetes son enviados simultáneamente, los routers pueden empezar a perder paquetes porque sus buffers se llenan, lo que lleva a retransmisiones que, a su vez, agravan la congestión.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Maximización del Uso del Ancho de Banda:&lt;/strong&gt; Ajustando la tasa de envío de datos, el control de congestión ayuda a utilizar el ancho de banda disponible de manera más eficiente, asegurando un flujo de datos constante sin sobrecargar la red.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Equidad:&lt;/strong&gt; El control de congestión también busca asegurar que todos los usuarios de la red tengan un acceso justo al ancho de banda, evitando que cualquier emisor monopolice la capacidad de la red.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;c. Diferencie slow start de congestion-avoidance.&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Slow Start:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Función:&lt;/strong&gt; Slow Start es una fase de inicio en la gestión de control de congestión de TCP donde el emisor comienza con una tasa baja de envío de datos y aumenta exponencialmente esta tasa cada RTT hasta que ocurre una pérdida de paquetes o hasta alcanzar un umbral conocido como &lt;code&gt;ssthresh&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Objetivo:&lt;/strong&gt; Rápidamente encontrar un nivel seguro de utilización de ancho de banda.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Congestion Avoidance:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Función:&lt;/strong&gt; Una vez que se alcanza el umbral &lt;code&gt;ssthresh&lt;/code&gt;, ya sea por la detección de pérdida de paquetes o al finalizar Slow Start, TCP entra en la fase de Congestion Avoidance. En esta fase, el incremento en la ventana de congestión es más conservador, típicamente aumentando linealmente, lo que significa que la ventana de congestión aumenta en 1 MSS (tamaño máximo de segmento) por cada RTT completo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Objetivo:&lt;/strong&gt; Mantener el envío de datos en un nivel cercano al punto de congestión de la red sin provocar una pérdida de paquetes, buscando un equilibrio entre eficiencia y estabilidad en el flujo de datos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En resumen, &lt;strong&gt;Slow Start&lt;/strong&gt; es utilizado para rampar rápidamente la tasa de envío desde cero, mientras que &lt;strong&gt;Congestion Avoidance&lt;/strong&gt; toma el control una vez que se ha encontrado una base de utilización y busca afinar el rendimiento sin saturar la red. Estos mecanismos son críticos para mantener la robustez y eficiencia de las comunicaciones en redes complejas y altamente utilizadas.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 12&lt;/h3&gt;
&lt;p&gt;Para la captura udp-captura.pcap, responder las siguientes preguntas.&lt;/p&gt;
&lt;h3&gt;a. ¿Cuántas comunicaciones (srcIP,srcPort,dstIP,dstPort) UDP hay en la captura?&lt;/h3&gt;
&lt;p&gt;En Wireshark, filtras los paquetes por protocolo UDP y luego utilizas las estadísticas de &quot;Conversaciones&quot; para ver cuántas comunicaciones únicas hay, clasificadas por dirección IP de origen y destino, así como los puertos.&lt;/p&gt;
&lt;h3&gt;b. ¿Cómo se podrían identificar las exitosas de las que no lo son?&lt;/h3&gt;
&lt;p&gt;Para UDP, que es un protocolo sin conexión, no hay una confirmación explícita del receptor como los ACK en TCP. Por lo tanto, determinar si una comunicación fue &quot;exitosa&quot; puede depender de si el protocolo o aplicación de capa superior tiene algún método para confirmar la recepción de los datos. Podrías buscar respuestas correspondientes a las solicitudes en la misma sesión para determinar si una comunicación fue exitosa.&lt;/p&gt;
&lt;h3&gt;c. ¿UDP puede utilizar el modelo cliente/servidor?&lt;/h3&gt;
&lt;p&gt;Sí, UDP puede ser usado en un modelo cliente/servidor. Por ejemplo, un servidor DNS utiliza UDP y opera en un modelo cliente/servidor donde el cliente envía una solicitud de resolución de DNS al servidor, y el servidor responde con la información solicitada.&lt;/p&gt;
&lt;h3&gt;d. ¿Qué servicios o aplicaciones suelen utilizar este protocolo? ¿Qué requerimientos tienen?&lt;/h3&gt;
&lt;p&gt;Aplicaciones que requieren baja latencia y pueden tolerar alguna pérdida de paquetes a menudo utilizan UDP. Ejemplos incluyen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DNS (Domain Name System)&lt;/li&gt;
&lt;li&gt;Streaming de video y audio&lt;/li&gt;
&lt;li&gt;Juegos en línea&lt;/li&gt;
&lt;li&gt;VoIP (Voice over IP)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estos servicios requieren transferencias rápidas y, en caso de pérdida de paquetes, a menudo es mejor continuar sin retransmisión para evitar la latencia.&lt;/p&gt;
&lt;h3&gt;e. ¿Qué hace el protocolo UDP en relación al control de errores?&lt;/h3&gt;
&lt;p&gt;UDP realiza un mínimo control de errores. Proporciona checksums para verificar la integridad de los datos del encabezado y la carga útil. Si un paquete tiene un checksum incorrecto, generalmente es descartado por el receptor, pero no hay retransmisión automática de paquetes erróneos.&lt;/p&gt;
&lt;h3&gt;f. Con respecto a los puertos vistos en las capturas, ¿observa algo particular que lo doferencie de TCP?&lt;/h3&gt;
&lt;p&gt;En UDP, los puertos se utilizan para identificar las aplicaciones de destino de manera similar a TCP. Sin embargo, no hay una negociación de conexión, y los paquetes simplemente se envían a esos puertos esperando que la aplicación esté escuchando.&lt;/p&gt;
&lt;h3&gt;g. Dada la primera comunicación en la cual se ven datos en ambos sentidos (identificar el primer datagrama):&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;i. ¿Cuál es la dirección IP que envía el primer datagrama?,¿desde cuál puerto?&lt;/li&gt;
&lt;li&gt;ii. ¿Cuántos datos se envían en un sentido y en el otro?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para estas preguntas, necesitarías revisar los detalles específicos de los paquetes en Wireshark, observando los campos de dirección IP y puerto en el encabezado UDP de los paquetes, así como la longitud de la carga útil de UDP que indica la cantidad de datos enviados.&lt;/p&gt;
&lt;p&gt;Para realizar un análisis práctico, abrirías el archivo pcap con Wireshark, aplicarías un filtro por UDP y examinarías las columnas y detalles de los paquetes para responder a estas preguntas específicas.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 13&lt;/h3&gt;
&lt;p&gt;Dada la salida que se muestra en la imagen, responda los ítems debajo&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/8630972a-7e27-40fa-bdf4-0de96144eef8&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Suponga que ejecuta los siguientes comandos desde un host con la IP
10.100.25.90. Responda qué devuelve la ejecución de los siguientes comandos y, en caso que corresponda, especifique los flags.&lt;/p&gt;
&lt;h4&gt;a. &lt;code&gt;hping3 -p 3306 –udp 10.100.25.135&lt;/code&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Qué devuelve:&lt;/strong&gt; Dado que el puerto 3306 (usualmente utilizado por MySQL) está en estado &lt;code&gt;LISTEN&lt;/code&gt; en la captura, y el comando está enviando paquetes UDP, lo más probable es que no haya respuesta directa del host de destino, ya que MySQL escucha en TCP, no en UDP.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flags:&lt;/strong&gt; No aplica, ya que UDP no usa flags como TCP.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;b. &lt;code&gt;hping3 -S -p 25 10.100.25.135&lt;/code&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Qué devuelve:&lt;/strong&gt; No se espera que devuelva una respuesta, porque no hay ningún servicio listado como escuchando en el puerto 25 (SMTP) en TCP en la dirección IP dada. Es probable que el host envíe un paquete TCP RST en respuesta.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flags:&lt;/strong&gt; &lt;code&gt;S&lt;/code&gt; (SYN) para iniciar la conexión TCP, pero probablemente recibirás un RST como respuesta.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;c. &lt;code&gt;hping3 -S -p 22 10.100.25.135&lt;/code&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Qué devuelve:&lt;/strong&gt; Este comando intenta establecer una conexión TCP al puerto 22, que está en estado &lt;code&gt;LISTEN&lt;/code&gt; y asociado a &lt;code&gt;sshd&lt;/code&gt; en la captura. Deberías recibir un SYN-ACK en respuesta, indicando que el puerto está abierto y escuchando.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flags:&lt;/strong&gt; &lt;code&gt;S&lt;/code&gt; (SYN) enviado y &lt;code&gt;SA&lt;/code&gt; (SYN-ACK) recibido en caso de que el puerto esté abierto.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;d. &lt;code&gt;hping3 -S -p 110 10.100.25.135&lt;/code&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Qué devuelve:&lt;/strong&gt; Similar al comando para el puerto 25, no hay evidencia en la captura de que el puerto 110 (POP3) esté abierto o en escucha en la IP especificada. Es probable que recibas un RST como respuesta.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flags:&lt;/strong&gt; &lt;code&gt;S&lt;/code&gt; (SYN) enviado, probablemente un RST recibido.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;¿Cuántas conexiones distintas hay establecidas? Justifique&lt;/h4&gt;
&lt;p&gt;Para determinar &lt;strong&gt;cuántas conexiones distintas están establecidas&lt;/strong&gt;, observamos las filas con estado &lt;code&gt;ESTAB&lt;/code&gt; en la salida:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hay conexiones establecidas entre &lt;code&gt;127.0.0.1:3306&lt;/code&gt; y &lt;code&gt;127.0.0.1:34338&lt;/code&gt; (MySQL local).&lt;/li&gt;
&lt;li&gt;Entre &lt;code&gt;10.100.25.135:222&lt;/code&gt; y &lt;code&gt;200.100.120.210:61576&lt;/code&gt; (SSH).&lt;/li&gt;
&lt;li&gt;Otra conexión local de SSH entre &lt;code&gt;127.0.0.1:34330&lt;/code&gt; y &lt;code&gt;127.0.0.1:3306&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Justificación:&lt;/strong&gt; Las conexiones en estado &lt;code&gt;ESTAB&lt;/code&gt; indican que la conexión TCP ha completado el handshake y está activa, permitiendo el tráfico bidireccional de datos. Estas conexiones se han establecido y confirmado mediante el intercambio de paquetes SYN, SYN-ACK y ACK, mostrando que ambos extremos están comunicando activamente.&lt;/p&gt;
&lt;p&gt;Esto resume el estado de las conexiones basadas en los estados de los puertos y la IP mostrados en la captura, así como la previsión de resultados al ejecutar los comandos &lt;code&gt;hping3&lt;/code&gt; especificados.&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.CuL4PiKs.jpg"/><enclosure url="/_astro/thumbnail.CuL4PiKs.jpg"/></item><item><title>Practica 7 Redes | Capa de Red</title><link>https://fabianmartinezrincon.com/blog/practica-7-redes</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/practica-7-redes</guid><description>Practica 7 de Redes y Comunicaciones</description><pubDate>Tue, 07 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Indice&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-1&quot;&gt;Ejercicio 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-2&quot;&gt;Ejercicio 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-3&quot;&gt;Ejercicio 3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-4&quot;&gt;Ejercicio 4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-5&quot;&gt;Ejercicio 5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-6&quot;&gt;Ejercicio 6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-7&quot;&gt;Ejercicio 7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-8&quot;&gt;Ejercicio 8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-9&quot;&gt;Ejercicio 9&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-10&quot;&gt;Ejercicio 10&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-11&quot;&gt;Ejercicio 11&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-12&quot;&gt;Ejercicio 12&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-13&quot;&gt;Ejercicio 13&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-14&quot;&gt;Ejercicio 14&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-15&quot;&gt;Ejercicio 15&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-16&quot;&gt;Ejercicio 16&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-17&quot;&gt;Ejercicio 17&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-18&quot;&gt;Ejercicio 18&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-19&quot;&gt;Ejercicio 19&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-20&quot;&gt;Ejercicio 20&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-21&quot;&gt;Ejercicio 21&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Introducción&lt;/h2&gt;
&lt;h3&gt;Ejercicio 1&lt;/h3&gt;
&lt;h4&gt;¿Qué servicios presta la capa de red?&lt;/h4&gt;
&lt;p&gt;La capa de red, también conocida como capa 3 del Modelo OSI, es fundamental para el funcionamiento de las redes de datos, especialmente en entornos de red extensos e interconectados como el Internet. Los principales servicios que ofrece la capa de red incluyen:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Encaminamiento (Routing):&lt;/strong&gt; La capa de red es responsable de determinar y gestionar la ruta que los paquetes de datos deben seguir desde el origen hasta el destino a través de la red. Utiliza protocolos de encaminamiento como RIP, OSPF e BGP para descubrir rutas eficientes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Direccionamiento Lógico:&lt;/strong&gt; A diferencia del direccionamiento físico (MAC) de la capa de enlace de datos, la capa de red implementa un sistema de direccionamiento lógico que permite una jerarquía y una estructura más organizada. IP (Protocolo de Internet) es el ejemplo más conocido de un protocolo de direccionamiento lógico.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Segmentación y Reensamblaje:&lt;/strong&gt; La capa de red puede segmentar un bloque de datos más grande en paquetes más pequeños para el transporte y luego reensamblar estos paquetes en el destino. Esto es crucial para manejar los diferentes tamaños máximos de transmisión (MTU) que pueden tener diferentes segmentos de red.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Control de Congestión y Calidad de Servicio (QoS):&lt;/strong&gt; Aunque el control de congestión es más visible en la capa de transporte, la capa de red puede participar en la gestión de la congestión y en la implementación de políticas de QoS para garantizar el rendimiento de la red según los requerimientos de los diferentes tipos de tráfico.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Aislamiento de Fallos y Diagnóstico de Red:&lt;/strong&gt; Herramientas y protocolos a nivel de red, como ICMP (Internet Control Message Protocol), ayudan en la identificación y el diagnóstico de problemas en la red, facilitando la detección y reparación de fallos.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;¿Cuál es la PDU en esta capa?&lt;/h4&gt;
&lt;p&gt;La unidad de datos de protocolo (PDU) de la capa de red es el &lt;strong&gt;paquete&lt;/strong&gt;. En el contexto de IP, un paquete incluye la cabecera IP que contiene información esencial como las direcciones IP de origen y destino, la versión del protocolo, la longitud del paquete, y otros flags y campos que facilitan el encaminamiento y la entrega eficiente del paquete a través de la red.&lt;/p&gt;
&lt;h4&gt;¿Qué dispositivo es considerado sólo de la capa de red?&lt;/h4&gt;
&lt;p&gt;El &lt;strong&gt;router&lt;/strong&gt; es el dispositivo típicamente asociado con la capa de red. Su función principal es interconectar redes diferentes, determinando la mejor ruta para enviar los paquetes entre ellas basándose en la información de la capa de red. Los routers leen las direcciones incluidas en los paquetes de la capa de red para tomar decisiones de encaminamiento y dirigir el tráfico adecuadamente hacia su destino final.&lt;/p&gt;
&lt;p&gt;Estos componentes y funciones de la capa de red aseguran que los datos se transmitan de manera efectiva y eficiente a través de redes complejas y a gran escala, como el Internet.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 2&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Por qué se lo considera un protocolo de mejor esfuerzo?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El término &quot;protocolo de mejor esfuerzo&quot; (&quot;best effort protocol&quot;) se refiere comúnmente al Protocolo de Internet (IP), que es ampliamente utilizado en redes informáticas para la entrega de paquetes de datos. Este término describe la naturaleza del servicio que IP proporciona en términos de entrega de paquetes en una red.&lt;/p&gt;
&lt;h4&gt;Razones por las que IP es considerado un protocolo de mejor esfuerzo:&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;No garantiza la entrega&lt;/strong&gt;: IP no asegura que los paquetes lleguen a su destino. Los paquetes pueden perderse debido a congestionamientos, errores en los enrutadores, o rutas ineficientes. IP no implementa mecanismos para recuperar paquetes perdidos; esta responsabilidad recae en los protocolos de capas superiores, como TCP.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;No garantiza orden&lt;/strong&gt;: Los paquetes IP pueden llegar a su destino en un orden diferente al que fueron enviados. No hay mecanismos dentro de IP para reordenar los paquetes a medida que llegan; nuevamente, esto es manejado por protocolos en la capa de transporte, como TCP, que reensambla los paquetes en el orden correcto.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;No garantiza integridad&lt;/strong&gt;: Aunque IP incluye un campo de suma de verificación en su cabecera que ayuda a detectar errores en los datos del encabezado, no protege la integridad del contenido del paquete en sí. Protocolos como TCP o UDP tienen sus propios mecanismos de suma de verificación que cubren todo el paquete.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;No previene la duplicación&lt;/strong&gt;: En algunas circunstancias, los paquetes IP pueden duplicarse, y más de una copia del mismo paquete puede llegar al destino. IP no tiene mecanismos para gestionar la eliminación de duplicados.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;No controla la congestión&lt;/strong&gt;: IP no tiene mecanismos integrados para evitar o gestionar la congestión en la red. En su lugar, depende de la respuesta de los protocolos de las capas superiores y de la gestión activa de la red para controlar la congestión.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Implicaciones de ser un protocolo de mejor esfuerzo&lt;/h4&gt;
&lt;p&gt;Al ser un protocolo de &quot;mejor esfuerzo&quot;, IP permite una implementación y operación relativamente sencillas y eficientes de la red. Esto contribuye a la escalabilidad y la flexibilidad de Internet. Sin embargo, también significa que la calidad del servicio (QoS) no puede garantizarse sin la ayuda de tecnologías adicionales que operen junto con IP, como MPLS para redes gestionadas o técnicas de control de congestión y corrección de errores en los extremos de la comunicación.&lt;/p&gt;
&lt;p&gt;Este enfoque de &quot;mejor esfuerzo&quot; permite que el núcleo de la red se mantenga simple y que la complejidad se maneje en los extremos, siguiendo el principio de diseño end-to-end, que es una característica fundamental de la arquitectura de Internet.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 3&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Cuántas redes clase A, B y C hay? ¿Cuántos hosts como máximo pueden tener cada una?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Las direcciones IP originalmente se dividían en clases para organizar el rango de direcciones según el tamaño y las necesidades de las redes. Las clases A, B y C son las más comunes dentro de este esquema de clasificación. Aquí detallamos cuántas redes existen en cada clase y cuántos hosts pueden contener como máximo:&lt;/p&gt;
&lt;h4&gt;Redes Clase A&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Rango de Direcciones:&lt;/strong&gt; 1.0.0.0 a 126.0.0.0 (se excluyen ciertos rangos como 127.0.0.0, que está reservado para loopback).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cantidad de Redes Posibles:&lt;/strong&gt; 126 redes. El primer octeto define la red, y va de 1 a 126.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hosts por Red:&lt;/strong&gt; Cada red de Clase A puede tener hasta 16,777,214 hosts (2^24 - 2, donde se restan dos direcciones por la dirección de red y la de broadcast).&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Redes Clase B&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Rango de Direcciones:&lt;/strong&gt; 128.0.0.0 a 191.255.0.0.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cantidad de Redes Posibles:&lt;/strong&gt; 16,384 redes. El primer y segundo octeto definen la red, comenzando en 128.0 y terminando en 191.255.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hosts por Red:&lt;/strong&gt; Cada red de Clase B puede tener hasta 65,534 hosts (2^16 - 2, también restando la dirección de red y la de broadcast).&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Redes Clase C&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Rango de Direcciones:&lt;/strong&gt; 192.0.0.0 a 223.255.255.0.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cantidad de Redes Posibles:&lt;/strong&gt; 2,097,152 redes. Los primeros tres octetos definen la red, desde 192.0.0 hasta 223.255.255.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hosts por Red:&lt;/strong&gt; Cada red de Clase C puede tener hasta 254 hosts (2^8 - 2, igualmente restando la dirección de red y la de broadcast).&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Contexto y Transición a CIDR&lt;/h4&gt;
&lt;p&gt;Es importante señalar que este método de clasificación basado en clases ha sido en gran parte reemplazado por el enfoque sin clases conocido como CIDR (Classless Inter-Domain Routing) a principios de los años 90. CIDR permite un uso más eficiente y flexible del espacio de direcciones IP mediante la asignación basada en &quot;prefijos&quot; que describen la máscara de subred, en lugar de estar restringido por las clases fijas. Esto ayuda a mejorar la eficiencia de la asignación de direcciones IP, especialmente frente a la escasez de direcciones IP bajo IPv4 y la necesidad de alojar múltiples redes de diferentes tamaños.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 4&lt;/h3&gt;
&lt;h4&gt;¿Qué son las subredes?&lt;/h4&gt;
&lt;p&gt;Las subredes, o subredes de red, son divisiones lógicas de una red de mayor tamaño. Este proceso de subdivisión permite una organización más eficiente y segura del espacio de direcciones IP dentro de una red más grande. Crear subredes implica segmentar una red en múltiples redes más pequeñas, cada una con su propio rango único de direcciones IP.&lt;/p&gt;
&lt;p&gt;La subdivisión de una red en subredes puede hacerse por varias razones, tales como:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Mejora del Rendimiento&lt;/strong&gt;: Reducir el tamaño de una red puede disminuir el tráfico local en cada segmento, reduciendo así la contención y la sobrecarga de la red, y potencialmente aumentando el rendimiento general.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Administración Simplificada&lt;/strong&gt;: Las subredes permiten a los administradores de red gestionar y mantener segmentos de red de manera más efectiva. Esto es especialmente útil en redes grandes donde manejar una sola red extensa podría ser complejo y poco práctico.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Seguridad Mejorada&lt;/strong&gt;: Las subredes pueden proporcionar capas adicionales de seguridad. Limitar la comunicación entre subredes puede prevenir la propagación de actividades maliciosas dentro de la red.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Optimización del Uso de Direcciones IP&lt;/strong&gt;: Al segmentar una red, se pueden asignar direcciones IP de manera más eficiente, reduciendo el desperdicio de direcciones en redes con pocos hosts.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;¿Por qué es importante siempre especificar la máscara de subred asociada?&lt;/h4&gt;
&lt;p&gt;La máscara de subred es fundamental porque define cómo se divide el espacio de direcciones de una red entre la dirección de red y los hosts. Específicamente, la máscara de subred determina qué parte de la dirección IP se utiliza para identificar la subred y qué parte se utiliza para identificar los dispositivos individuales (hosts) dentro de esa subred.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Determinación de la Subred&lt;/strong&gt;: La máscara de subred es esencial para determinar a qué subred pertenece una dirección IP específica. Esto es crucial para el enrutamiento de paquetes dentro y entre redes, ya que los enrutadores utilizan la máscara de subred para dirigir el tráfico a la subred correcta.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Comunicación y Enrutamiento&lt;/strong&gt;: Los dispositivos dentro de una red utilizan la máscara de subred para determinar si otros dispositivos están en la misma subred o en una externa. Esto afecta cómo se envían los paquetes de datos: directamente entre dispositivos en la misma subred o a través de un enrutador para alcanzar dispositivos en subredes diferentes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Evitar Conflictos de Direcciones&lt;/strong&gt;: Una máscara de subred incorrecta puede llevar a conflictos de direcciones y problemas de enrutamiento, donde los dispositivos podrían no ser capaces de comunicarse correctamente dentro de la red.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Planificación de la Red&lt;/strong&gt;: En la fase de diseño de una red, la máscara de subred ayuda a planificar cuántos hosts pueden ser soportados en cada subred y cómo se deben distribuir las direcciones IP para maximizar la eficiencia.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En resumen, las subredes y las máscaras de subred son componentes esenciales del diseño y operación de redes modernas. Permiten una gestión más eficiente del espacio de direcciones IP, mejoran la seguridad y el rendimiento de la red, y son clave para el enrutamiento correcto y efectivo del tráfico de datos.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 5&lt;/h3&gt;
&lt;p&gt;El campo &quot;Protocol&quot; en la cabecera IP desempeña una función crucial al definir el protocolo de la capa de transporte que se utilizará para los datos encapsulados en el paquete IP. Este campo es esencial para asegurar que el paquete de datos se maneje correctamente en su llegada al destino, orientando al sistema sobre cómo interpretar los datos contenidos en el segmento de datos del paquete.&lt;/p&gt;
&lt;h4&gt;¿Cuál es la finalidad del campo Protocol en la cabecera IP?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Identificación del Protocolo de la Capa de Transporte:&lt;/strong&gt; El campo &quot;Protocol&quot; en la cabecera IP especifica el protocolo de la siguiente capa (capa de transporte) que se ha usado para segmentar los datos y que debe ser utilizado para reensamblar y procesar estos datos en el destino. Este campo es un número que identifica de manera única cada protocolo de la capa de transporte. Por ejemplo, el número 6 representa TCP (Transmission Control Protocol), mientras que el número 17 representa UDP (User Datagram Protocol).&lt;/p&gt;
&lt;h4&gt;¿A qué campos de la capa de transporte se asemeja en su funcionalidad?&lt;/h4&gt;
&lt;p&gt;En términos de funcionalidad, el campo &quot;Protocol&quot; en la cabecera IP es similar a los campos como:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Puertos de Origen y Destino en TCP/UDP:&lt;/strong&gt; Aunque el campo &quot;Protocol&quot; no realiza la misma función que los puertos, que se utilizan para dirigir el tráfico a la aplicación correcta dentro de un host, ambos tipos de campos sirven como mecanismos de direccionamiento a niveles diferentes. Los puertos dirigen el tráfico al programa adecuado dentro del host, mientras que el campo &quot;Protocol&quot; indica cómo debe interpretarse el conjunto de datos a nivel de sistema.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Campo &apos;Next Header&apos; en IPv6:&lt;/strong&gt; En IPv6, el campo &quot;Next Header&quot; realiza una función similar al campo &quot;Protocol&quot; en IPv4, indicando el tipo del siguiente encabezado en el paquete. Esto puede ser un encabezado de extensión o un encabezado de capa superior.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;El campo &quot;Protocol&quot; es, por lo tanto, vital para la interoperabilidad entre diferentes capas de red y es fundamental para el enrutamiento y procesamiento adecuados de los datos en redes de computadoras. Su rol asegura que los datos sean entregados y procesados por el protocolo correcto en el destino, facilitando así una comunicación efectiva entre dispositivos en una red.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Divisiónde subredes&lt;/h2&gt;
&lt;h3&gt;Ejercicio 6&lt;/h3&gt;
&lt;p&gt;Para cada una de las siguientes direcciones IP determine&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;172.16.58.223/26&lt;/li&gt;
&lt;li&gt;163.10.5.49/27&lt;/li&gt;
&lt;li&gt;128.10.1.0/23&lt;/li&gt;
&lt;li&gt;10.1.0.0/24&lt;/li&gt;
&lt;li&gt;8.40.11.179/12&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;A) ¿De qué clase de red es la dirección dada (Clase A, B o C)?&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;Paso 1: Observar el Primer Octeto&lt;/code&gt;
Para cada dirección IP, observa el primer número antes del primer punto. Por ejemplo, para la dirección 172.16.58.223, el primer octeto es 172.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 2: Comparar con los Rangos de Clases&lt;/code&gt;
Las clases de direcciones IP se definen por rangos específicos en el primer octeto:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Clase A&lt;/strong&gt;: 1-126 (127 está reservado para loopback)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clase B&lt;/strong&gt;: 128-191&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clase C&lt;/strong&gt;: 192-223&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clase D&lt;/strong&gt; (multicast): 224-239 (no solicitado, pero para referencia)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clase E&lt;/strong&gt; (uso experimental): 240-255 (no solicitado, pero para referencia)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 3: Determinar la Clase de cada Dirección&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Aplicando el rango del primer octeto:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;172.16.58.223&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Primer octeto: 172&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clase B&lt;/strong&gt;: Ya que 172 está entre 128 y 191.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;163.10.5.49&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Primer octeto: 163&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clase B&lt;/strong&gt;: Ya que 163 también está entre 128 y 191.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;128.10.1.0&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Primer octeto: 128&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clase B&lt;/strong&gt;: Es el límite inferior de la Clase B.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;10.1.0.0&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Primer octeto: 10&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clase A&lt;/strong&gt;: Ya que 10 está entre 1 y 126.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;8.40.11.179&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Primer octeto: 8&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clase A&lt;/strong&gt;: Ya que 8 está dentro del rango de la Clase A.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;b) ¿Cuál es la dirección de subred?&lt;/h4&gt;
&lt;h4&gt;172.16.58.223/26&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;Convertir la máscara de subred de notación CIDR a formato decimal&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Para determinar la dirección de subred de una dirección IP dada con su máscara de subred (en notación CIDR), se realiza un procedimiento lógico llamado &quot;AND&quot; entre la dirección IP y la máscara de subred.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 1.1 Determinar la cantidad de bits para la red&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Tomemos por ejemplo &lt;code&gt;/26&lt;/code&gt;. Esto significa que los primeros 26 bits de la dirección IP son para la red.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 1.2 Convierte esos Bits a Binario&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;En binario, los primeros &lt;code&gt;26&lt;/code&gt; bits se establecerán en &lt;code&gt;&apos;1&apos;&lt;/code&gt; y el resto en &lt;code&gt;&apos;0&apos;&lt;/code&gt;. Así, para &lt;code&gt;/26&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;11111111.11111111.11111111.11000000
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esto se lee como los primeros 26 bits son 1s y los últimos 6 bits son 0s.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 1.3 Convierte el Binario a Decimal&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Cada segmento de 8 bits (octeto) se convierte a su equivalente decimal:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;11111111&lt;/code&gt; en binario es &lt;code&gt;255&lt;/code&gt; en decimal.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;11000000&lt;/code&gt; en binario es &lt;code&gt;192&lt;/code&gt; en decimal.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Así, la máscara de subred &lt;code&gt;/26&lt;/code&gt; en formato decimal es &lt;code&gt;255.255.255.192&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Aplicar la operación AND lógica entre la dirección IP y la máscara de subred&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La operación AND compara cada bit de la dirección IP con el bit correspondiente en la máscara de subred. Si ambos bits son 1, el resultado es 1; de lo contrario, es 0.&lt;/p&gt;
&lt;p&gt;Ejemplo para calcular la dirección de subred: Tomemos la dirección &lt;code&gt;172.16.58.223/26&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;Dirección IP en binario, podes usar esta web para pasar de decimal a binario: &lt;a href=&quot;https://masterplc.com/calculadora/convertir-decimal-a-binario/&quot;&gt;Decimal a Binario&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;10101100.00010000.00111010.11011111
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Máscara de subred /26 en binario:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;11111111.11111111.11111111.11000000
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Aplicamos la operación and&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;10101100.00010000.00111010.11011111
AND
11111111.11111111.11111111.11000000
=
10101100.00010000.00111010.11000000 = 172.16.58.192
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dirección de subred = &lt;code&gt;172.16.58.192&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Aplicamos lo mismo para todas las demas direcciones&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;a. 172.16.58.223/26&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Subred&lt;/strong&gt;: 172.16.58.192&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;b. 163.10.5.49/27&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Subred&lt;/strong&gt;: 163.10.5.32
&lt;ul&gt;
&lt;li&gt;Máscara de subred /27 en binario: 11111111.11111111.11111111.11100000&lt;/li&gt;
&lt;li&gt;Dirección IP y máscara AND resultan en 163.10.5.32&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;c. 128.10.1.0/23&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Subred&lt;/strong&gt;: 128.10.0.0
&lt;ul&gt;
&lt;li&gt;Máscara de subred /23 en binario: 11111111.11111111.11111110.00000000&lt;/li&gt;
&lt;li&gt;Dirección IP y máscara AND resultan en 128.10.0.0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;d. 10.1.0.0/24&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Subred&lt;/strong&gt;: 10.1.0.0
&lt;ul&gt;
&lt;li&gt;Máscara de subred /24 en binario: 11111111.11111111.11111111.00000000&lt;/li&gt;
&lt;li&gt;Dirección IP y máscara AND resultan en 10.1.0.0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;e. 8.40.11.179/12&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Subred&lt;/strong&gt;: 8.32.0.0
&lt;ul&gt;
&lt;li&gt;Máscara de subred /12 en binario: 11111111.11110000.00000000.00000000&lt;/li&gt;
&lt;li&gt;Dirección IP y máscara AND resultan en 8.32.0.0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este proceso te permite identificar la red a la que pertenece una dirección IP y es fundamental para el diseño de redes y el enrutamiento de paquetes en Internet y otras redes de comunicaciones.&lt;/p&gt;
&lt;h4&gt;c) ¿Cuál es la cantidad máxima de hosts que pueden estar en esa subred?&lt;/h4&gt;
&lt;p&gt;Para determinar la cantidad máxima de hosts que pueden estar en cada subred dada, primero necesitamos entender cómo se calcula a partir de la máscara de subred asociada con cada dirección. La máscara de subred define cuántos bits de la dirección IP están reservados para identificar la subred y cuántos bits están disponibles para identificar hosts dentro de esa subred.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 1: Determinar la Cantidad de Bits para Hosts&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La cantidad de bits disponibles para los hosts en cada subred es igual a 32 menos el número de bits de la máscara de subred (el número después del &lt;code&gt;/&lt;/code&gt;). Por ejemplo, si tienes una máscara de &lt;code&gt;/26&lt;/code&gt;, entonces 32 - 26 = 6 bits están disponibles para los hosts.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 2: Calcular la Cantidad Máxima de Hosts&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La fórmula para calcular la cantidad máxima de hosts en una subred es (2^{n} - 2), donde (n) es el número de bits disponibles para hosts. Se restan dos para excluir la dirección de la red misma y la dirección de broadcast.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Aplicación del Cálculo para Cada Subred&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;172.16.58.223/26&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bits para hosts:&lt;/strong&gt; (32 - 26 = 6)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cantidad máxima de hosts:&lt;/strong&gt; (2^6 - 2 = 64 - 2 = 62)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;163.10.5.49/27&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bits para hosts:&lt;/strong&gt; (32 - 27 = 5)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cantidad máxima de hosts:&lt;/strong&gt; (2^5 - 2 = 32 - 2 = 30)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;128.10.1.0/23&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bits para hosts:&lt;/strong&gt; (32 - 23 = 9)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cantidad máxima de hosts:&lt;/strong&gt; (2^9 - 2 = 512 - 2 = 510)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;10.1.0.0/24&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bits para hosts:&lt;/strong&gt; (32 - 24 = 8)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cantidad máxima de hosts:&lt;/strong&gt; (2^8 - 2 = 256 - 2 = 254)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;8.40.11.179/12&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bits para hosts:&lt;/strong&gt; (32 - 12 = 20)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cantidad máxima de hosts:&lt;/strong&gt; (2^{20} - 2 = 1,048,576 - 2 = 1,048,574)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cada subred tiene una capacidad máxima de hosts determinada por el número de bits disponibles para los hosts, que se calcula a partir de la máscara de subred en notación CIDR. Este cálculo es fundamental para el diseño de la red, asegurando que haya suficientes direcciones disponibles para todos los dispositivos previstos en cada segmento de la red sin desperdiciar espacio de direcciones IP.&lt;/p&gt;
&lt;h4&gt;d) ¿Cuál es la dirección de broadcast de esa subred?&lt;/h4&gt;
&lt;p&gt;Para calcular la dirección de broadcast de una subred, se sigue un proceso sistemático que implica determinar la máscara de subred en formato binario, aplicar operaciones lógicas sobre la dirección IP, y finalmente determinar la dirección de broadcast que es utilizada para enviar paquetes a todos los hosts dentro de esa subred específica.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 1: Convertir la Máscara de Subred a Formato Binario&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Primero, necesitamos convertir la notación CIDR de la máscara de subred a su forma binaria completa. Este es un ejemplo general de cómo hacerlo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;/26&lt;/strong&gt; se convierte en 255.255.255.192, que en binario es &lt;code&gt;11111111.11111111.11111111.11000000&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/27&lt;/strong&gt;, &lt;strong&gt;/23&lt;/strong&gt;, &lt;strong&gt;/24&lt;/strong&gt;, &lt;strong&gt;/12&lt;/strong&gt; se convierten de forma similar, rellenando con 1s hasta el bit especificado por el CIDR, y el resto son 0s.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 2: Determinar la Dirección de Red&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La dirección de red se obtiene haciendo un AND lógico entre la dirección IP y la máscara de subred. El resultado muestra qué parte de la dirección IP representa la red.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 3: Calcular la Dirección de Broadcast&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Para obtener la dirección de broadcast, se realiza una operación OR entre la dirección de red y el inverso de la máscara de subred (donde todos los bits de host son &apos;1&apos;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Invierte la máscara de subred (los bits que eran &apos;0&apos; se convierten en &apos;1&apos;, y viceversa).&lt;/li&gt;
&lt;li&gt;Realiza una operación OR entre la dirección de red (resultado del Paso 2) y esta máscara invertida. Esto pondrá &apos;1&apos; en todos los bits de host, generando la dirección de broadcast.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;a. 172.16.58.223/26&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Red:&lt;/strong&gt; 172.16.58.192 (calculado anteriormente).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Invertir la Máscara de Subred /26:&lt;/strong&gt; &lt;code&gt;00000000.00000000.00000000.00111111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Broadcast:&lt;/strong&gt; 172.16.58.255 (OR entre 172.16.58.192 y &lt;code&gt;00000000.00000000.00000000.00111111&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;b. 163.10.5.49/27&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Red:&lt;/strong&gt; 163.10.5.32 (calculado anteriormente).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Invertir la Máscara de Subred /27:&lt;/strong&gt; &lt;code&gt;00000000.00000000.00000000.00011111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Broadcast:&lt;/strong&gt; 163.10.5.63.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;c. 128.10.1.0/23&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Red:&lt;/strong&gt; 128.10.0.0 (calculado anteriormente).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Invertir la Máscara de Subred /23:&lt;/strong&gt; &lt;code&gt;00000000.00000000.00000001.11111111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Broadcast:&lt;/strong&gt; 128.10.1.255.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;d. 10.1.0.0/24&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Red:&lt;/strong&gt; 10.1.0.0.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Invertir la Máscara de Subred /24:&lt;/strong&gt; &lt;code&gt;00000000.00000000.00000000.11111111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Broadcast:&lt;/strong&gt; 10.1.0.255.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;e. 8.40.11.179/12&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Red:&lt;/strong&gt; 8.32.0.0 (calculado anteriormente).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Invertir la Máscara de Subred /12:&lt;/strong&gt; &lt;code&gt;00001111.11110000.11111111.11111111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Broadcast:&lt;/strong&gt; 8.47.255.255.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este método asegura que la dirección de broadcast calculada pueda ser utilizada para enviar mensajes a todos los dispositivos en la subred especificada, lo cual es crucial para ciertas operaciones de red, como la distribución de información a todos los nodos de una vez.&lt;/p&gt;
&lt;h4&gt;e. ¿Cuál es el rango de direcciones IP válidas dentro de la subred?&lt;/h4&gt;
&lt;p&gt;Para calcular el rango de direcciones IP válidas dentro de cada subred especificada, primero debemos determinar las direcciones de red y de broadcast que ya calculamos en preguntas anteriores. Usando estas direcciones, podemos establecer el rango de direcciones IP que pueden ser asignadas a dispositivos dentro de la subred.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 1: Identificar la Dirección de Red y de Broadcast&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Como ya hemos calculado anteriormente, la dirección de red es el primer número IP en la subred y la dirección de broadcast es el último. La dirección de red se usa para identificar la subred y no se asigna a ningún dispositivo, mientras que la dirección de broadcast se usa para comunicación a todos los dispositivos de la subred y tampoco se asigna a dispositivos individuales.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 2: Calcular el Rango de Direcciones IP Válidas&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El rango de direcciones IP válidas para los dispositivos es todas las direcciones entre la dirección de red y la de broadcast, excluyendo estas dos direcciones.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;a. 172.16.58.223/26&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Red:&lt;/strong&gt; 172.16.58.192&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Broadcast:&lt;/strong&gt; 172.16.58.255&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rango de Direcciones Válidas:&lt;/strong&gt; 172.16.58.193 a 172.16.58.254&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;b. 163.10.5.49/27&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Red:&lt;/strong&gt; 163.10.5.32&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Broadcast:&lt;/strong&gt; 163.10.5.63&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rango de Direcciones Válidas:&lt;/strong&gt; 163.10.5.33 a 163.10.5.62&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;c. 128.10.1.0/23&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Red:&lt;/strong&gt; 128.10.0.0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Broadcast:&lt;/strong&gt; 128.10.1.255&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rango de Direcciones Válidas:&lt;/strong&gt; 128.10.0.1 a 128.10.1.254&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;d. 10.1.0.0/24&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Red:&lt;/strong&gt; 10.1.0.0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Broadcast:&lt;/strong&gt; 10.1.0.255&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rango de Direcciones Válidas:&lt;/strong&gt; 10.1.0.1 a 10.1.0.254&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;e. 8.40.11.179/12&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Red:&lt;/strong&gt; 8.32.0.0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Broadcast:&lt;/strong&gt; 8.47.255.255&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rango de Direcciones Válidas:&lt;/strong&gt; 8.32.0.1 a 8.47.255.254&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Importancia de Conocer el Rango de Direcciones Válidas&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Este rango es crítico para los administradores de redes para planificar adecuadamente la asignación de direcciones IP dentro de la red, evitar conflictos de direcciones, y asegurar que todos los dispositivos tengan conectividad adecuada. Además, ayuda a aplicar políticas de seguridad y configurar servicios de red como DHCP de manera efectiva.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 7&lt;/h3&gt;
&lt;p&gt;Su organización cuenta con la dirección de red 128.50.10.0. Indique:&lt;/p&gt;
&lt;h4&gt;a. ¿Es una dirección de red o de host? PREGUNTAR ACA&lt;/h4&gt;
&lt;p&gt;&quot;128.50.10.0&quot; podría ser técnicamente una dirección de host bajo ciertas máscaras de subred específicas, generalmente se considera una dirección de red bajo el supuesto común de una máscara /24. Sin embargo, es crucial contar con la información correcta sobre la configuración de la red para hacer esta determinación con precisión.&lt;/p&gt;
&lt;h4&gt;b. Clase a la que pertenece y máscara de clase.&lt;/h4&gt;
&lt;p&gt;Para determinar a qué clase pertenece la dirección IP 128.50.10.0 y cuál es su máscara de clase estándar, seguimos estos pasos:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 1: Observar el Primer Octeto&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La clasificación de la clase de una dirección IP se basa en el primer octeto (el primer conjunto de números antes del primer punto). En este caso, el primer octeto es 128.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 2: Determinar la Clase Basada en el Primer Octeto&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Las direcciones IP se clasifican en cinco clases principales (A, B, C, D, E) según los primeros bits del primer octeto:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Clase A&lt;/strong&gt;: Las direcciones comienzan con un bit inicial de 0. Esto significa que las direcciones Clase A van desde 0.0.0.0 hasta 127.255.255.255 (aunque la dirección 127.x.x.x se reserva para loopback, y la dirección 0.x.x.x no se utiliza).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clase B&lt;/strong&gt;: Las direcciones comienzan con bits iniciales de 10. El rango de direcciones Clase B va desde 128.0.0.0 hasta 191.255.255.255.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clase C&lt;/strong&gt;: Las direcciones comienzan con bits iniciales de 110. El rango de direcciones Clase C va desde 192.0.0.0 hasta 223.255.255.255.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clase D&lt;/strong&gt; (Multicast): Comienza con bits iniciales de 1110, cubriendo direcciones desde 224.0.0.0 hasta 239.255.255.255.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clase E&lt;/strong&gt; (Experimental): Comienza con bits iniciales de 1111, extendiéndose desde 240.0.0.0 hasta 255.255.255.255.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 3: Aplicar la Información al Caso Presentado&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Dado que el primer octeto es 128, la dirección IP 128.50.10.0 cae dentro del rango de la Clase B.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 4: Máscara de Clase Estándar para la Clase B&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Para las direcciones de Clase B, la máscara de subred estándar es 255.255.0.0. Esto significa que los dos primeros octetos (255.255) identifican la red, mientras que los dos últimos octetos (0.0) son utilizados para los hosts dentro de esa red.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Resumen&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La dirección IP &lt;code&gt;128.50.10.0&lt;/code&gt; es una dirección de Clase B y su máscara de subred de clase estándar es &lt;code&gt;255.255.0.0&lt;/code&gt;. Esto es fundamental para entender cómo se dividen las redes y cómo se asignan direcciones dentro de esas redes, especialmente para la planificación y la gestión de redes a gran escala.&lt;/p&gt;
&lt;p&gt;| &lt;strong&gt;Clase&lt;/strong&gt; | &lt;strong&gt;Rango de Direcciones IP&lt;/strong&gt; | &lt;strong&gt;Máscara de Subred por Defecto&lt;/strong&gt; | &lt;strong&gt;Uso Típico&lt;/strong&gt;                |
|-----------|-----------------------------|----------------------------------|-------------------------------|
| A         | 1.0.0.0 a 126.255.255.255   | 255.0.0.0 (/8)                  | Redes muy grandes            |
| B         | 128.0.0.0 a 191.255.255.255 | 255.255.0.0 (/16)               | Redes medianas               |
| C         | 192.0.0.0 a 223.255.255.255 | 255.255.255.0 (/24)             | Redes pequeñas               |
| D         | 224.0.0.0 a 239.255.255.255 | No aplicable                    | Multicasting                 |
| E         | 240.0.0.0 a 255.255.255.255 | No aplicable                    | Uso experimental y futuro    |&lt;/p&gt;
&lt;h4&gt;c. Cantidad de hosts posibles.&lt;/h4&gt;
&lt;p&gt;Para determinar la cantidad de hosts posibles para la dirección de red 128.50.10.0, necesitamos conocer la máscara de subred asociada con esta dirección. Sin embargo, si consideramos que no se especifica una máscara en la consulta y que estamos tratando con una dirección que parece ser de Clase B (basada en su primer octeto, que está entre 128 y 191), podemos asumir la máscara de subred estándar de Clase B, que es 255.255.0.0 o /16.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Paso a Paso para Calcular la Cantidad de Hosts Posibles&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;Paso 1: Identificar la Máscara de Subred&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Para una dirección de red de Clase B sin especificaciones adicionales, la máscara de subred es típicamente /16. Esto significa que los primeros 16 bits de la dirección IP se utilizan para identificar la red, y los últimos 16 bits son para los hosts dentro de esa red.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 2: Calcular los Bits de Host&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Con una máscara de subred de /16, hay 16 bits disponibles para los hosts. La cantidad de combinaciones posibles que se pueden hacer con 16 bits se calcula como 2^16.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 3: Ajustar por Direcciones Reservadas&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;De las combinaciones posibles, dos direcciones están reservadas y no se pueden asignar a hosts individuales:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La dirección de red (donde todos los bits de host son 0, es decir, 128.50.10.0 en este caso).&lt;/li&gt;
&lt;li&gt;La dirección de broadcast (donde todos los bits de host son 1, es decir, 128.50.255.255 para una máscara /16).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 4: Calcular el Número Total de Hosts Posibles&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Restamos dos del total calculado en el paso 2 para excluir estas direcciones reservadas:&lt;/p&gt;
&lt;p&gt;[ \text{Total de hosts posibles} = 2^{16} - 2 = 65536 - 2 = 65534 ]&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Conclusión&lt;/code&gt;
Para la dirección de red 128.50.10.0 con una máscara de subred de /16, la cantidad máxima de hosts que se pueden configurar en esta red es 65,534. Este cálculo asume que estamos utilizando la configuración de subred estándar para una dirección de Clase B y que no hay segmentaciones adicionales (subredes más pequeñas) dentro de esta dirección.&lt;/p&gt;
&lt;h4&gt;d. Se necesitan crear, al menos, 513 subredes. Indique:&lt;/h4&gt;
&lt;h4&gt;i. Máscara necesaria.&lt;/h4&gt;
&lt;p&gt;Para crear al menos 513 subredes a partir de una dirección de red 128.50.10.0, necesitas determinar cuántos bits adicionales de subred se requieren para lograr ese número de subredes. Aquí está el paso a paso para calcular la máscara de subred necesaria:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 1: Comprender la Necesidad&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Necesitas al menos 513 subredes, lo que significa que debes calcular cuántos bits son necesarios para representar al menos esa cantidad de subredes únicas.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 2: Calcular los Bits Necesarios para las Subredes&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Para encontrar el número de bits necesarios, debes calcular el menor ( n ) tal que ( 2^n ) sea mayor o igual a 513.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;( 2^8 = 256 ) no es suficiente.&lt;/li&gt;
&lt;li&gt;( 2^9 = 512 ) sigue siendo insuficiente.&lt;/li&gt;
&lt;li&gt;( 2^{10} = 1024 ) cumple con el requisito.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por lo tanto, necesitas 10 bits adicionales para la subred.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 3: Determinar la Máscara de Subred Original&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Dado que 128.50.10.0 parece ser una dirección de Clase B (basado en el primer octeto, que cae dentro del rango de 128-191), la máscara de subred predeterminada para una red de Clase B es 255.255.0.0, lo que equivale a una máscara /16.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 4: Calcular la Nueva Máscara de Subred&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Si ya tienes una máscara /16 y necesitas 10 bits adicionales para subredes, sumas esos 10 bits a los 16 existentes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Máscara original: /16&lt;/li&gt;
&lt;li&gt;Bits adicionales: +10&lt;/li&gt;
&lt;li&gt;Nueva máscara: /26&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 5: Convertir la Nueva Máscara a Formato Decimal&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Una máscara /26 significa que los primeros 26 bits de la dirección IP son para la red y el resto para los hosts. Esto se divide como sigue:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los primeros 26 bits: 11111111.11111111.11111111.11000000&lt;/li&gt;
&lt;li&gt;En formato decimal: 255.255.255.192&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Conclusión&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La máscara de subred necesaria para crear al menos 513 subredes desde la dirección 128.50.10.0 es &lt;strong&gt;255.255.255.192&lt;/strong&gt;, o &lt;strong&gt;/26&lt;/strong&gt;. Esto te permite tener suficientes bits para crear las subredes requeridas y proporcionar una cantidad adecuada de direcciones IP para hosts dentro de cada subred.&lt;/p&gt;
&lt;h4&gt;ii. Cantidad de redes asignables.&lt;/h4&gt;
&lt;p&gt;Para determinar la cantidad de redes asignables cuando se crean al menos 513 subredes a partir de la dirección de red 128.50.10.0 con una máscara de subred /26 (como se calculó anteriormente), debemos comprender cómo afecta esta configuración de subredes al espacio de direcciones disponibles.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 1: Confirmar la Configuración de la Máscara de Subred&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Dado que decidimos usar una máscara /26 para satisfacer la necesidad de al menos 513 subredes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La máscara /26 implica que se utilizan 26 bits para la red, dejando 6 bits para los hosts dentro de cada subred.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 2: Calcular el Número de Redes Asignables&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Usando los 10 bits adicionales para la subred (pasando de una máscara /16 original de una dirección de Clase B a una /26), se calcula el número de subredes posibles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;(2^{10} = 1024)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estos 10 bits adicionales permiten la creación de 1024 subredes diferentes bajo la misma red principal. Cada una de estas subredes puede ser considerada como una &quot;red asignable&quot;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 3: Confirmar la Cantidad de Redes Asignables&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Dado que cada uno de estos nuevos bits de subred puede ser configurado independientemente como 0 o 1, y con 10 bits, tenemos (2^{10}) combinaciones posibles, resultando en &lt;strong&gt;1024 redes asignables&lt;/strong&gt; bajo la configuración /26.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Conclusión&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Al subdividir la red original 128.50.10.0/16 en subredes más pequeñas con una máscara /26, podemos asignar hasta 1024 redes diferentes. Esto significa que la organización puede tener 1024 subredes distintas, cada una con su propio rango de direcciones IP para hosts, satisfaciendo ampliamente la necesidad inicial de crear al menos 513 subredes.&lt;/p&gt;
&lt;p&gt;Este proceso es crítico para la planificación de la red, asegurando que haya suficiente flexibilidad y capacidad para el crecimiento y la organización de la red conforme a las necesidades futuras.&lt;/p&gt;
&lt;h4&gt;iii. Cantidad de hosts por subred.&lt;/h4&gt;
&lt;p&gt;Para calcular la cantidad de hosts posibles por subred después de segmentar una dirección de red inicial 128.50.10.0 en 513 subredes o más con una máscara de subred /26, se sigue este proceso paso a paso:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 1: Identificar la Máscara de Subred Utilizada&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Para crear 513 subredes, se determinó previamente que la máscara de subred necesaria es /26. Esto significa que 26 bits de la dirección IP se destinan a la red y los restantes bits se utilizan para identificar hosts dentro de cada subred.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 2: Calcular los Bits Disponibles para Hosts&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Con una máscara de subred /26, tenemos un total de 32 bits en la dirección IP.&lt;/li&gt;
&lt;li&gt;26 bits son para la red, lo que deja (32 - 26 = 6) bits para los hosts.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 3: Calcular la Cantidad de Hosts por Subred&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Los 6 bits disponibles para los hosts teóricamente permiten (2^6 = 64) combinaciones posibles. Sin embargo, dentro de cada subred, dos direcciones están reservadas y no pueden ser asignadas a hosts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La &lt;strong&gt;dirección de red&lt;/strong&gt;, donde todos los bits de host son 0.&lt;/li&gt;
&lt;li&gt;La &lt;strong&gt;dirección de broadcast&lt;/strong&gt;, donde todos los bits de host son 1.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 4: Restar las Direcciones Reservadas&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Para obtener el número de hosts utilizables en cada subred, debemos restar estas dos direcciones reservadas del total calculado:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;(2^6 - 2 = 64 - 2 = 62)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Conclusión&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Cada subred de la red 128.50.10.0 con una máscara /26 puede soportar &lt;strong&gt;62 hosts utilizables&lt;/strong&gt;. Este cálculo es crucial para la planificación de la asignación de direcciones IP dentro de la red, asegurando que cada subred tenga suficiente capacidad para acomodar los dispositivos necesarios sin exceder el límite disponible.&lt;/p&gt;
&lt;h4&gt;iv. Dirección de la subred 710.&lt;/h4&gt;
&lt;p&gt;Para calcular la dirección de la subred 710, dado que se han segmentado las subredes utilizando una máscara de /26 a partir de la dirección de red 128.50.10.0, seguimos los siguientes pasos:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 1: Entender la Estructura de la Subred&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Con una máscara /26, cada subred utiliza 26 bits de la dirección IP. Esto significa que cada subred tiene (2^{32-26} = 64) direcciones IP, incluyendo la dirección de red y la dirección de broadcast.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 2: Calcular el Rango de Direcciones para Cada Subred&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Cada subred de /26 cubre 64 direcciones IP. La dirección de la subred se determina sumando 64 direcciones al inicio de la subred anterior para obtener el inicio de la nueva subred.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 3: Calcular la Dirección de la Subred 710&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Para encontrar la dirección de la subred 710, primero determinamos cuál es la dirección de la subred 1 bajo esta configuración y luego procedemos a calcular la dirección de la subred 710 sumando adecuadamente.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Inicio de la subred 1:&lt;/strong&gt; La primera subred comienza en 128.50.10.0.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Incremento por Subred:&lt;/strong&gt; Cada subred abarca 64 direcciones, entonces la dirección de inicio de cada nueva subred se incrementa en 64.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Calculando el inicio de la subred 710:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Subred 1 comienza en 128.50.10.0.&lt;/li&gt;
&lt;li&gt;Subred 710 comienza en 128.50.10.0 + 709 x 64 direcciones.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 4: Convertir el Incremento a Direcciones IP&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Cada incremento de 64 direcciones avanza 64 posiciones en el espacio de direcciones IP. Calculamos cuántas veces pasa de 255 para ajustar los octetos adecuadamente.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;709 x 64&lt;/code&gt; direcciones es igual a 45,376 direcciones IP.&lt;/li&gt;
&lt;li&gt;Convierte 45,376 en notación de dirección IP:
&lt;ul&gt;
&lt;li&gt;Dividimos 45,376 por 256 (número de direcciones por octeto) para calcular el avance en los octetos.&lt;/li&gt;
&lt;li&gt;45376 dividido por 256 es aproximadamente 177, con un remanente que determinará el nuevo último octeto.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 5: Determinar la Dirección Exacta&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Octeto base: 10.0&lt;/li&gt;
&lt;li&gt;Avance de 177 octetos desde el inicio de la red en el tercer octeto (10 + 177 = 187).&lt;/li&gt;
&lt;li&gt;Calcular el remanente: 45376 - 177 x 256 = 64 (que corresponde al último octeto del nuevo bloque).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Dirección de la Subred 710:&lt;/strong&gt; 128.50.187.64&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Conclusión&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La dirección de la subred 710 es 128.50.187.64 bajo la máscara /26, partiendo de la dirección base 128.50.10.0. Este proceso implica un cálculo cuidadoso para garantizar la precisión en la asignación de direcciones dentro de la red extendida.&lt;/p&gt;
&lt;h4&gt;v. Dirección de broadcast de la subred 710&lt;/h4&gt;
&lt;p&gt;Para calcular la dirección de broadcast de la subred 710 a partir de la dirección de red 128.50.10.0 con una máscara de /26, sigue estos pasos detallados:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 1: Identificar la Dirección de la Subred&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Primero, debemos confirmar la dirección de la subred 710. Como se calculó anteriormente, esta subred comienza en 128.50.187.64.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 2: Entender la Máscara de Subred /26&lt;/code&gt;
Una máscara /26 significa que los primeros 26 bits son para la red, dejando los últimos 6 bits para los hosts. Esto implica que cada subred tiene (2^6 = 64) direcciones IP, desde la dirección de red hasta la dirección de broadcast.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 3: Calcular la Dirección de Broadcast&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Para encontrar la dirección de broadcast para una subred dada, tomamos la dirección de inicio de la subred y sumamos 63 (ya que el rango incluye la dirección de red y la de broadcast):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirección de inicio de la subred:&lt;/strong&gt; 128.50.187.64&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirección de broadcast:&lt;/strong&gt; 128.50.187.64 + 63 = 128.50.187.127&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 4: Verificación&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La dirección de broadcast es siempre la última dirección en el rango de la subred. Para una subred que comienza en 128.50.187.64 con una máscara /26, el cálculo es directo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La dirección de broadcast, 128.50.187.127, es calculada sumando 63 a la dirección de inicio, porque el rango completo de la subred incluye 64 direcciones (de 128.50.187.64 a 128.50.187.127).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Conclusión&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La dirección de broadcast de la subred 710 es &lt;strong&gt;128.50.187.127&lt;/strong&gt;. Esta dirección es utilizada para comunicaciones que deben ser recibidas por todos los dispositivos dentro de esta subred específica.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 8&lt;/h3&gt;
&lt;p&gt;Si usted estuviese a cargo de la administración del bloque IP 195.200.45.0/24&lt;/p&gt;
&lt;h4&gt;a. ¿Qué máscara utilizaría si necesita definir al menos 9 subredes?&lt;/h4&gt;
&lt;p&gt;Para administrar el bloque IP 195.200.45.0/24 y dividirlo en al menos 9 subredes, debes calcular la máscara de subred adecuada que te permita tener suficientes subredes y, al mismo tiempo, un número adecuado de hosts por subred. Aquí te explico el proceso paso a paso:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 1: Entender la Máscara Original&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La máscara original para tu bloque IP es /24, lo que significa que todos los bits hasta el octeto final están reservados para la red, dejando el último octeto (8 bits) para los hosts. En la práctica, esto te permite tener 256 direcciones en total.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 2: Calcular la Cantidad de Bits Necesarios para las Subredes&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Para dividir la red en al menos 9 subredes, necesitas determinar cuántos bits adicionales deberás &quot;tomar prestados&quot; del espacio de host para crear estas subredes.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cálculo de Bits Necesarios:&lt;/strong&gt; Necesitas encontrar el menor ( n ) tal que ( 2^n ) cubra el número de subredes deseado. Para 9 subredes, ( 2^3 = 8 ) no es suficiente, mientras que ( 2^4 = 16 ) es suficiente.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 3: Determinar la Nueva Máscara de Subred&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Si tomas prestados 4 bits adicionales del espacio de host, estarás cambiando la máscara de subred de /24 a /28:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Nueva Máscara de Subred:&lt;/strong&gt; /28&lt;/li&gt;
&lt;li&gt;Esto convierte la máscara de subred de 255.255.255.0 (para /24) a 255.255.255.240 (para /28).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 4: Verificar la Cantidad de Subredes y Hosts por Subred&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Con una máscara /28, cada subred tendrá ( 2^4 = 16 ) direcciones en total, pero solo 14 de ellas serán utilizables para hosts, ya que la primera dirección es la dirección de red y la última es la dirección de broadcast.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Subredes Posibles con /28:&lt;/strong&gt; Tendrás 16 subredes posibles, que es suficiente para satisfacer la necesidad de al menos 9 subredes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hosts por Subred:&lt;/strong&gt; Cada subred puede tener hasta 14 dispositivos conectados (excluyendo la dirección de red y broadcast).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Conclusión&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Para definir al menos 9 subredes en un bloque 195.200.45.0/24, deberías utilizar una máscara de subred /28. Esto te proporciona 16 subredes posibles, cada una con capacidad para 14 hosts, lo cual es adecuado para una gestión eficiente de la red y maximiza el uso de tu espacio de direcciones IP.&lt;/p&gt;
&lt;h4&gt;b. Indique la dirección de subred de las primeras 9 subredes&lt;/h4&gt;
&lt;p&gt;Para calcular las direcciones de subred de las primeras 9 subredes en el bloque IP 195.200.45.0/24 utilizando una máscara de subred /28, como hemos decidido en la pregunta anterior, sigue estos pasos detallados:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 1: Comprender la Estructura de la Subred&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Con una máscara /28, cada subred utiliza 28 bits de la dirección IP. Esto significa que cada subred tiene (2^{32-28} = 16) direcciones IP, incluyendo la dirección de red y la dirección de broadcast.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 2: Calcular el Rango de Direcciones para Cada Subred&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Cada subred de /28 cubre 16 direcciones IP. La dirección de la subred es siempre el primer número en ese bloque, y la dirección de broadcast es el último número.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 3: Listar las Direcciones de Subred para las Primeras 9 Subredes&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirección Base para Subredes:&lt;/strong&gt; 195.200.45.0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Incremento por Subred:&lt;/strong&gt; 16 direcciones&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Aquí están las direcciones de las primeras 9 subredes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Subred 1:&lt;/strong&gt; 195.200.45.0&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rango: 195.200.45.0 - 195.200.45.15&lt;/li&gt;
&lt;li&gt;Dirección de subred: 195.200.45.0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Subred 2:&lt;/strong&gt; 195.200.45.16&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rango: 195.200.45.16 - 195.200.45.31&lt;/li&gt;
&lt;li&gt;Dirección de subred: 195.200.45.16&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Subred 3:&lt;/strong&gt; 195.200.45.32&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rango: 195.200.45.32 - 195.200.45.47&lt;/li&gt;
&lt;li&gt;Dirección de subred: 195.200.45.32&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Subred 4:&lt;/strong&gt; 195.200.45.48&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rango: 195.200.45.48 - 195.200.45.63&lt;/li&gt;
&lt;li&gt;Dirección de subred: 195.200.45.48&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Subred 5:&lt;/strong&gt; 195.200.45.64&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rango: 195.200.45.64 - 195.200.45.79&lt;/li&gt;
&lt;li&gt;Dirección de subred: 195.200.45.64&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Subred 6:&lt;/strong&gt; 195.200.45.80&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rango: 195.200.45.80 - 195.200.45.95&lt;/li&gt;
&lt;li&gt;Dirección de subred: 195.200.45.80&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Subred 7:&lt;/strong&gt; 195.200.45.96&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rango: 195.200.45.96 - 195.200.45.111&lt;/li&gt;
&lt;li&gt;Dirección de subred: 195.200.45.96&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Subred 8:&lt;/strong&gt; 195.200.45.112&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rango: 195.200.45.112 - 195.200.45.127&lt;/li&gt;
&lt;li&gt;Dirección de subred: 195.200.45.112&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Subred 9:&lt;/strong&gt; 195.200.45.128&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rango: 195.200.45.128 - 195.200.45.143&lt;/li&gt;
&lt;li&gt;Dirección de subred: 195.200.45.128&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Paso 4: Verificación&lt;/code&gt;
Cada dirección de subred es el primer número en un bloque de 16 direcciones, y el proceso sigue secuencialmente con un aumento constante de 16. Esto asegura que cada subred está claramente definida y no se superpone con otras subredes.&lt;/p&gt;
&lt;p&gt;Este cálculo detallado proporciona una base clara para configurar y administrar las subredes dentro de la red principal, garantizando que cada segmento esté correctamente asignado sin conflictos de dirección.&lt;/p&gt;
&lt;h4&gt;c. Seleccione una e indique dirección de broadcast y rango de direcciones asignables en esa subred&lt;/h4&gt;
&lt;p&gt;Para seleccionar una subred del bloque IP 195.200.45.0/24 con una máscara /28 y determinar la dirección de broadcast y el rango de direcciones asignables, podemos seguir el ejemplo de la subred 4, que se ha calculado anteriormente con dirección de subred 195.200.45.48.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 1: Confirmar la Dirección de Subred&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Basado en la subdivisión previa, sabemos que:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Subred 4:&lt;/strong&gt; 195.200.45.48&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 2: Calcular la Dirección de Broadcast&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Con una máscara /28, cada subred tiene 16 direcciones IP. La dirección de broadcast es siempre la última dirección en este rango.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Inicio de la Subred:&lt;/strong&gt; 195.200.45.48&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fin de la Subred:&lt;/strong&gt; 195.200.45.48 + 15 = 195.200.45.63&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La última dirección (195.200.45.63) será la dirección de broadcast para esta subred.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Dirección de Broadcast:&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;195.200.45.63&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 3: Determinar el Rango de Direcciones Asignables&lt;/code&gt;
El rango de direcciones asignables es entre la dirección de subred y la dirección de broadcast, excluyendo estas dos direcciones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primera Dirección Asignable:&lt;/strong&gt; 195.200.45.48 + 1 = 195.200.45.49&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Última Dirección Asignable:&lt;/strong&gt; 195.200.45.63 - 1 = 195.200.45.62&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Rango de Direcciones Asignables:&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Desde &lt;strong&gt;195.200.45.49&lt;/strong&gt; hasta &lt;strong&gt;195.200.45.62&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 4: Resumen del Rango y la Broadcast de la Subred&lt;/code&gt;
Para la subred 195.200.45.48/28:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Broadcast:&lt;/strong&gt; 195.200.45.63&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rango de Direcciones Asignables:&lt;/strong&gt; 195.200.45.49 a 195.200.45.62&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este rango de direcciones asignables incluye 14 direcciones IP utilizables para dispositivos dentro de la subred. Estas direcciones son adecuadas para asignar a servidores, estaciones de trabajo, impresoras, u otros dispositivos de red que requieran conectividad IP dentro de esta subred específica.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 9&lt;/h3&gt;
&lt;p&gt;Dado el siguiente gráfico:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/44cb45b8-eab7-45c0-bb71-64c4a4359586&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Router B:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;eth2&lt;/strong&gt;: 191.26.145.20/24 (Conexión a Internet)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;eth0&lt;/strong&gt;: 172.26.22.1/30 (Conexión a Router A)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;eth1&lt;/strong&gt;: 172.17.10.14/28 (Conexión a Router C)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Router A:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;eth1&lt;/strong&gt;: 172.26.22.3/30 (Conexión a Router B)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;eth0&lt;/strong&gt;: 192.168.5.1/24 (Red local)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Router C:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;eth1&lt;/strong&gt;: 172.17.10.17/28 (Conexión a Router B)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;eth0&lt;/strong&gt;: 10.0.10.1/24 (Red local)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;a. Verifique si es correcta la asignación de direcciones IP y, en caso de no serlo, modifique la misma para que lo sea.&lt;/h4&gt;
&lt;p&gt;Para verificar y explicar las direcciones y subredes en el gráfico proporcionado, vamos a analizar cada conexión y cada dirección de subred en detalle:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Conexión Router B (191.26.145.20) al Internet&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Router B:&lt;/strong&gt; 191.26.145.20&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Máscara de subred:&lt;/strong&gt; /24&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rango de direcciones en esta subred:&lt;/strong&gt; 191.26.145.0 - 191.26.145.255&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirección de broadcast:&lt;/strong&gt; 191.26.145.255&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Comentarios:&lt;/strong&gt; La dirección es válida y la subred parece configurada correctamente para conectar al Internet.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Conexión entre Router B y Router A&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Router B (eth0):&lt;/strong&gt; 172.26.22.1&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Router A (eth1):&lt;/strong&gt; 172.26.22.3&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Máscara de subred:&lt;/strong&gt; /30&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rango de direcciones en esta subred:&lt;/strong&gt; 172.26.22.0 - 172.26.22.3
&lt;ul&gt;
&lt;li&gt;Dirección de red: 172.26.22.0&lt;/li&gt;
&lt;li&gt;Dirección de broadcast: 172.26.22.3&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Comentarios:&lt;/strong&gt; La configuración es incorrecta en términos de la dirección de broadcast. En una subred /30, 172.26.22.3 es la dirección de broadcast, lo que significa que no debería asignarse a un dispositivo. El Router A debería tener la dirección 172.26.22.2.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Conexión entre Router B y Router C&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Router B (eth1):&lt;/strong&gt; 172.17.10.14&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Router C (eth1):&lt;/strong&gt; 172.17.10.17&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Máscara de subred:&lt;/strong&gt; /28&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rango de direcciones en esta subred:&lt;/strong&gt; 172.17.10.0 - 172.17.10.15
&lt;ul&gt;
&lt;li&gt;Dirección de red: 172.17.10.0&lt;/li&gt;
&lt;li&gt;Dirección de broadcast: 172.17.10.15&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Comentarios:&lt;/strong&gt; La configuración es incorrecta. La dirección de Router C, 172.17.10.17, está fuera del rango de direcciones de la subred. Debería estar dentro del rango 172.17.10.1 - 172.17.10.14.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Red Interna de Router A&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Router A (eth0):&lt;/strong&gt; 192.168.5.1&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Máscara de subred:&lt;/strong&gt; /24&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rango de direcciones en esta subred:&lt;/strong&gt; 192.168.5.0 - 192.168.5.255
&lt;ul&gt;
&lt;li&gt;Dirección de red: 192.168.5.0&lt;/li&gt;
&lt;li&gt;Dirección de broadcast: 192.168.5.255&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Comentarios:&lt;/strong&gt; Esta dirección está bien configurada para una red local.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Red Interna de Router C&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Router C (eth0):&lt;/strong&gt; 10.0.10.1&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Máscara de subred:&lt;/strong&gt; /24&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rango de direcciones en esta subred:&lt;/strong&gt; 10.0.10.0 - 10.0.10.255
&lt;ul&gt;
&lt;li&gt;Dirección de red: 10.0.10.0&lt;/li&gt;
&lt;li&gt;Dirección de broadcast: 10.0.10.255&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Comentarios:&lt;/strong&gt; Esta dirección está bien configurada para una red local.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Correcciones Necesarias&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Router A:&lt;/strong&gt; Cambiar la dirección de 172.26.22.3 a 172.26.22.2 para la conexión con Router B.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Router C:&lt;/strong&gt; Ajustar la dirección dentro del rango de la subred 172.17.10.0/28, posiblemente a 172.17.10.2 o cualquier dirección entre 172.17.10.1 y 172.17.10.14.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Estas correcciones asegurarán que todas las direcciones y subredes estén configuradas adecuadamente y sin conflictos en la red.&lt;/p&gt;
&lt;h4&gt;b. ¿Cuántos bits se tomaron para hacer subredes en la red 10.0.10.0/24? ¿Cuántas subredes se podrían generar?&lt;/h4&gt;
&lt;p&gt;Como es una direccion IP de clase A, podemos decir que se tomaron 16 bits para hacer subredes. En total se pueden generar 2^16 = 65536 subredes.&lt;/p&gt;
&lt;h4&gt;c. Para cada una de las redes utilizadas indique si son públicas o privadas.&lt;/h4&gt;
&lt;p&gt;Para diferenciar entre redes públicas y privadas, es importante comprender cómo se distribuyen y gestionan las direcciones IP a nivel global y local. Las direcciones IP son asignadas por la Internet Assigned Numbers Authority (IANA) y se clasifican en dos categorías principales: públicas y privadas. Aquí te explico cómo identificar cada una de estas y cuál es su propósito:&lt;/p&gt;
&lt;h3&gt;Direcciones IP Públicas&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Definición y Uso&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Direcciones IP públicas&lt;/strong&gt; son aquellas que son únicas en todo el Internet. No se repiten y son la forma en que un dispositivo puede ser identificado de manera única en Internet. Estas direcciones son asignadas por proveedores de servicios de internet y otras entidades registradas.&lt;/li&gt;
&lt;li&gt;Son necesarias para los dispositivos que necesitan comunicarse directamente con Internet, como los servidores web, los correos electrónicos y los routers de borde de las redes corporativas o residenciales.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Acceso&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cualquier dispositivo con una dirección IP pública es potencialmente accesible desde cualquier lugar del mundo a través de Internet, sujeto a las políticas de firewall y seguridad.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ejemplos de Rangos No Privados&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cualquier dirección IP que no caiga dentro de los rangos específicos reservados para uso privado (ver más abajo) se considera pública.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Direcciones IP Privadas&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Definición y Uso&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Direcciones IP privadas&lt;/strong&gt; son aquellas que se utilizan dentro de redes locales (LAN) y no son ruteables en Internet. Esto significa que estas direcciones no pueden ser usadas directamente para comunicarse con dispositivos fuera de la red local.&lt;/li&gt;
&lt;li&gt;Se usan para comunicaciones dentro de una red doméstica, empresarial, o entre dispositivos en redes internas sin exponer directamente esos dispositivos a Internet.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Acceso&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los dispositivos con direcciones IP privadas requieren traducción de direcciones de red (NAT) para conectarse a Internet a través de una dirección pública, usualmente realizada por un router.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Rangos Reservados&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Las direcciones IP privadas están definidas específicamente en los siguientes rangos por IANA para evitar conflictos con direcciones asignadas globalmente:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;10.0.0.0 a 10.255.255.255 (10/8 prefix)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;172.16.0.0 a 172.31.255.255 (172.16/12 prefix)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;192.168.0.0 a 192.168.255.255 (192.168/16 prefix)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Además, &lt;strong&gt;169.254.0.0 a 169.254.255.255&lt;/strong&gt; se utilizan para configuración automática de direcciones locales (APIPA) en caso de que un dispositivo no pueda obtener una dirección de un servidor DHCP.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Cómo Identificar Si Una Dirección IP Es Pública o Privada&lt;/h3&gt;
&lt;p&gt;Para saber si una dirección IP es pública o privada, puedes simplemente verificar si cae dentro de los rangos mencionados para direcciones privadas. Si no está en esos rangos, es pública. Herramientas y comandos como &lt;code&gt;ipconfig&lt;/code&gt; (en Windows) o &lt;code&gt;ifconfig&lt;/code&gt; (en sistemas basados en Unix), así como la configuración de tu router, pueden decirte qué tipo de dirección IP está asignada a tus dispositivos.&lt;/p&gt;
&lt;h3&gt;Resumen&lt;/h3&gt;
&lt;p&gt;La distinción entre direcciones IP públicas y privadas es crucial para la administración de redes, la seguridad y el diseño de la infraestructura IT. Entender estas diferencias ayuda a implementar las prácticas adecuadas para el acceso a recursos internos y externos, y asegura la correcta funcionalidad de los sistemas de comunicaciones digitales.&lt;/p&gt;
&lt;p&gt;Para determinar si las direcciones IP utilizadas en las redes del diagrama son públicas o privadas, analizaremos cada dirección basándonos en los rangos definidos por la IANA para redes privadas y públicas. A continuación, un desglose de cada red en el diagrama:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;1. Dirección IP de Internet y Router B&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;191.26.145.1 y 191.26.145.20/24&lt;/strong&gt;: Este rango de direcciones no está dentro de los bloques reservados para redes privadas, lo que indica que son direcciones IP públicas. Las direcciones públicas son asignadas por la IANA y utilizadas para el tráfico en Internet, siendo accesibles globalmente.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;2. Conexión entre Router B y Router A&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;172.26.22.1 y 172.26.22.3/30&lt;/strong&gt;: Aunque la dirección 172.x.x.x podría sugerir que es una dirección privada, solo el rango 172.16.0.0 hasta 172.31.255.255 está reservado para redes privadas. Por lo tanto, estas direcciones caen dentro del rango de redes privadas y no son accesibles directamente desde Internet.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;3. Conexión entre Router B y Router C&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;172.17.10.14 y 172.17.10.17/28&lt;/strong&gt;: Este rango está dentro de 172.16.0.0 hasta 172.31.255.255, que es específicamente reservado para redes privadas. Por ende, estas direcciones también son privadas y diseñadas para uso interno dentro de organizaciones, no siendo accesibles desde Internet.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;4. Red Interna de Router A&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;192.168.5.1/24&lt;/strong&gt;: El rango 192.168.0.0 - 192.168.255.255 está reservado exclusivamente para redes privadas. Las direcciones dentro de este rango no son ruteables en Internet, indicando que es una dirección privada usada comúnmente para redes domésticas o corporativas internas.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;5. Red Interna de Router C&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;10.0.10.1/24&lt;/strong&gt;: El rango 10.0.0.0 - 10.255.255.255 está destinado para redes privadas. Estas direcciones son utilizadas ampliamente en diversos entornos corporativos y domésticos para la configuración de redes internas y no son accesibles directamente desde Internet.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Conclusión&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Las direcciones asignadas en las conexiones entre los routers y las redes internas son todas privadas, excepto las direcciones que conectan el Router B con Internet, que son públicas. Las direcciones privadas se utilizan para limitar el acceso directo desde y hacia Internet, proporcionando una capa adicional de seguridad y permitiendo una gestión más eficiente del espacio de direcciones IP dentro de una organización. Las direcciones públicas, por otro lado, son necesarias para que los dispositivos se comuniquen directamente con otros dispositivos en Internet.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;CIDR&lt;/h2&gt;
&lt;h3&gt;Ejercicio 10&lt;/h3&gt;
&lt;p&gt;CIDR (Classless Inter-Domain Routing) es un método para asignar direcciones IP y enrutar mensajes de red que fue introducido para mejorar la eficiencia del enrutamiento en Internet y para retrasar la agotación de direcciones IPv4. Esta técnica fue introducida en 1993 y marcó un cambio significativo en la forma en que las direcciones IP se asignan y se maneja el enrutamiento.&lt;/p&gt;
&lt;h4&gt;¿Qué es CIDR (Class Interdomain routing)?&lt;/h4&gt;
&lt;p&gt;CIDR reemplaza el antiguo sistema de clases de red (Clase A, B, C) donde las direcciones IP se dividían en bloques fijos basados en los primeros bits de la dirección. Con CIDR, los bloques de direcciones pueden tener cualquier longitud, lo que permite una asignación de direcciones mucho más flexible y un uso más eficiente del espacio de direcciones IP. CIDR se representa generalmente mediante la notación de prefijo, como por ejemplo &lt;code&gt;192.0.2.0/24&lt;/code&gt;, donde el &lt;code&gt;/24&lt;/code&gt; indica que los primeros 24 bits de la dirección forman parte del identificador de red.&lt;/p&gt;
&lt;h4&gt;¿Por qué resulta útil?&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Uso eficiente del espacio de direcciones IP:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CIDR permite una asignación de direcciones más precisa y ajustada a las necesidades reales de las organizaciones, reduciendo la cantidad de direcciones IP desperdiciadas bajo el antiguo sistema de clases.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Mejora del enrutamiento:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Con CIDR, las tablas de enrutamiento pueden agregarse para reducir su tamaño. Esto se hace combinando múltiples entradas de red en una sola. Esto no solo simplifica la gestión de las rutas, sino que también mejora la eficiencia del enrutamiento en toda la Internet.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Retraso en la agotación de IPv4:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Al permitir un uso más eficiente de las direcciones disponibles, CIDR ha sido crucial para extender la vida útil de IPv4, que ha estado bajo la presión de la agotación debido al crecimiento exponencial de dispositivos conectados a Internet.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Flexibilidad y escalabilidad en la asignación de direcciones:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CIDR permite que las direcciones IP se asignen en varios tamaños que pueden adaptarse mejor a la cantidad de direcciones realmente necesarias. Esto es especialmente útil para organizaciones más pequeñas o para subredes dentro de una organización más grande.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Facilita el enrutamiento interdominio:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CIDR simplifica el enrutamiento entre diferentes dominios y proveedores de Internet, lo que es crucial para la operatividad de la red global de Internet.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En resumen, CIDR es una herramienta esencial en la gestión de redes modernas, proporcionando una manera más flexible y eficiente de asignar direcciones IP y administrar el enrutamiento en una era donde los recursos de dirección IP son cada vez más valiosos. Su implementación ha permitido no solo una gestión más eficiente del espacio de direcciones IPv4, sino también una mejora en el rendimiento del enrutamiento en la infraestructura de red global.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 11&lt;/h3&gt;
&lt;p&gt;¿Cómo publicaría un router las siguientes redes si se aplica CIDR?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a. 198.10.1.0/24&lt;/li&gt;
&lt;li&gt;b. 198.10.0.0/24&lt;/li&gt;
&lt;li&gt;c. 198.10.3.0/24&lt;/li&gt;
&lt;li&gt;d. 198.10.2.0/24&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para explicar detalladamente cómo se agrupan las redes utilizando CIDR y cómo se calculan las nuevas máscaras de subred, usaremos la representación binaria de las direcciones IP para visualizar mejor los cambios. Tomemos las direcciones que mencionaste:&lt;/p&gt;
&lt;h3&gt;Direcciones Involucradas&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;198.10.1.0/24&lt;/li&gt;
&lt;li&gt;198.10.0.0/24&lt;/li&gt;
&lt;li&gt;198.10.3.0/24&lt;/li&gt;
&lt;li&gt;198.10.2.0/24&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Paso 1: Convertir las Direcciones a Binario&lt;/h3&gt;
&lt;p&gt;Primero, convertimos las direcciones a su forma binaria (considerando solo el último octeto para simplicidad, ya que solo ese cambia aquí):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;198.10.0.0/24&lt;/strong&gt;: &lt;code&gt;00000000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;198.10.1.0/24&lt;/strong&gt;: &lt;code&gt;00000001&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;198.10.2.0/24&lt;/strong&gt;: &lt;code&gt;00000010&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;198.10.3.0/24&lt;/strong&gt;: &lt;code&gt;00000011&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 2: Identificar Agrupaciones Posibles&lt;/code&gt;
Observamos los bits y encontramos posibles agrupaciones. Para CIDR, agrupamos direcciones que pueden ser cubiertas por una sola red ajustando la máscara de subred para incluir más direcciones.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Agrupación 1 (198.10.0.0 y 198.10.1.0):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Binario: &lt;code&gt;00000000&lt;/code&gt; y &lt;code&gt;00000001&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Los 7 primeros bits son comunes (&lt;code&gt;0000000&lt;/code&gt;), y solo cambia el último bit.&lt;/li&gt;
&lt;li&gt;Nueva máscara: /23 (permitiendo que el último bit varíe entre los dos valores)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Agrupación 2 (198.10.2.0 y 198.10.3.0):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Binario: &lt;code&gt;00000010&lt;/code&gt; y &lt;code&gt;00000011&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Igualmente, los 7 primeros bits son comunes (&lt;code&gt;0000001&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Nueva máscara: /23&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 3: Calcular la Nueva Dirección de Red y la Dirección de Broadcast para las Agrupaciones&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Con la nueva máscara /23:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Para 198.10.0.0/23:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dirección de Red: 198.10.0.0 (binario: &lt;code&gt;00000000&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Dirección de Broadcast: 198.10.1.255 (binario: &lt;code&gt;00000001 11111111&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Para 198.10.2.0/23:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dirección de Red: 198.10.2.0 (binario: &lt;code&gt;00000010&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Dirección de Broadcast: 198.10.3.255 (binario: &lt;code&gt;00000011 11111111&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 4: Impacto en el Enrutamiento&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Al utilizar una máscara /23 en lugar de /24 para estas redes, reduces el número de entradas en la tabla de enrutamiento global, mejorando así la eficiencia del enrutamiento en toda la red.&lt;/li&gt;
&lt;li&gt;Esto es especialmente útil en entornos donde las direcciones IP son limitadas y el enrutamiento debe ser optimizado para conservar recursos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Conclusión&lt;/code&gt;
CIDR es una técnica poderosa que permite un uso más flexible y eficiente del espacio de direcciones IP. Al agrupar direcciones IP que están secuencialmente alineadas y ajustar las máscaras de subred correspondientes, las redes pueden ser diseñadas de manera más eficiente, reduciendo la complejidad del enrutamiento y mejorando el rendimiento general de la red.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Podes seguir reduciendo esto&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Para considerar si usar una máscara /22 para las direcciones dadas (198.10.0.0/24, 198.10.1.0/24, 198.10.2.0/24, 198.10.3.0/24) sería adecuado, debemos entender qué implica y cuántas direcciones abarcaría.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Qué Implica una Máscara /22&lt;/code&gt;
Una máscara /22 implica que los primeros 22 bits de la dirección IP son fijos para definir la red, dejando 10 bits para los hosts dentro de esa red. Esto significa que la red puede tener (2^{10} = 1024) direcciones en total.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Cómo Se Distribuirían Estas Direcciones&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Red:&lt;/strong&gt; Sería la más baja en el rango que comienza con los mismos 22 bits.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Broadcast:&lt;/strong&gt; Sería la más alta en este rango.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dado que las redes 198.10.0.0/24 hasta 198.10.3.0/24 son secuenciales y cubren un bloque de 4 subredes /24, podemos calcular el rango cubierto por una máscara /22:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Red con /22:&lt;/strong&gt; 198.10.0.0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Broadcast con /22:&lt;/strong&gt; 198.10.3.255
&lt;ul&gt;
&lt;li&gt;Esto cubriría de 198.10.0.0 hasta 198.10.3.255, encapsulando completamente las cuatro subredes /24 mencionadas.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Análisis de la Utilidad de una Máscara /22&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Eficiencia de Enrutamiento:&lt;/strong&gt; Al usar una máscara /22, reducirías la cantidad de entradas en las tablas de enrutamiento al consolidar cuatro entradas de /24 en una sola entrada de /22. Esto simplifica la gestión de la red y puede mejorar el rendimiento del enrutamiento.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flexibilidad de Asignación:&lt;/strong&gt; Con /22, tendrías más flexibilidad en la asignación de direcciones dentro de un rango más amplio, lo que podría ser útil si esperas una expansión o si hay una necesidad variable de direcciones IP dentro del grupo de subredes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Consideraciones&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Segmentación y Control:&lt;/strong&gt; Al ampliar la máscara de subred, se podría perder granularidad en el control del tráfico y la administración de segmentos de red más pequeños. Esto es relevante en términos de seguridad y rendimiento de la red, especialmente si diferentes segmentos requieren diferentes políticas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Planificación de la Capacidad:&lt;/strong&gt; Es crucial asegurarse de que la capacidad de la red y las políticas de seguridad puedan manejar un rango más amplio de direcciones de manera efectiva sin comprometer la integridad de la red.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Conclusión&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Usar una máscara /22 para estas redes es completamente viable y puede ofrecer beneficios significativos en términos de simplificación del enrutamiento y eficiencia administrativa. Sin embargo, es esencial considerar los requisitos específicos de la red y las posibles necesidades futuras antes de decidir expandir la máscara de subred. La decisión debe alinearse con los objetivos de la organización en términos de crecimiento, seguridad y gestión de la red.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 12&lt;/h3&gt;
&lt;p&gt;Listar las redes involucradas en los siguientes bloques CIDR:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;200.56.168.0/21&lt;/li&gt;
&lt;li&gt;195.24.0.0/13&lt;/li&gt;
&lt;li&gt;195.24/13&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para entender cómo listar las redes involucradas dentro de los bloques CIDR dados, analizaremos cada caso utilizando la notación binaria para clarificar cómo se dividen las direcciones IP dentro de cada rango específico.&lt;/p&gt;
&lt;h4&gt;1. Bloque CIDR: 200.56.168.0/21&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Paso 1: Entender la Máscara /21&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Una máscara /21 significa que los primeros 21 bits de la dirección son fijos. Esto deja 11 bits para definir las direcciones de host dentro de la red.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Paso 2: Calcular el Rango de Direcciones&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los primeros 21 bits de 200.56.168.0 se quedan constantes.&lt;/li&gt;
&lt;li&gt;La parte variable de la dirección, que son los últimos 11 bits, puede variar desde 00000000000 (0) hasta 11111111111 (2047).&lt;/li&gt;
&lt;li&gt;Esto da un rango total desde 200.56.168.0 hasta 200.56.175.255.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Rango de Direcciones:&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Red:&lt;/strong&gt; 200.56.168.0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Broadcast:&lt;/strong&gt; 200.56.175.255&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rango Útil de Hosts:&lt;/strong&gt; De 200.56.168.1 a 200.56.175.254&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;2. Bloque CIDR: 195.24.0.0/13 y 195.24/13&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;&quot;195.24/13&quot; es probablemente un error de tipografía y debe ser interpretado como &quot;195.24.0.0/13&quot; para mantener la consistencia.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;Explicación Detallada:&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso 1: Entender la Máscara /13&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Una máscara /13 indica que los primeros 13 bits son fijos. Esto deja 19 bits para las direcciones de host.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Paso 2: Calcular el Rango de Direcciones&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los primeros 13 bits de 195.24.0.0 son constantes, empezando desde &lt;code&gt;11000011 0001&lt;/code&gt; (los primeros 13 bits de 195.24 en binario).&lt;/li&gt;
&lt;li&gt;La parte variable de la dirección, que son los últimos 19 bits, puede variar desde 0000000000000000000 (0) hasta 1111111111111111111 (524287).&lt;/li&gt;
&lt;li&gt;Esto da un rango total desde 195.16.0.0 hasta 195.31.255.255 (el rango debe ajustarse para incluir todas las posibles direcciones que cumplen con los primeros 13 bits fijos).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Rango de Direcciones:&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Red:&lt;/strong&gt; 195.16.0.0 (comienzo del bloque que mantiene los 13 bits fijos)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirección de Broadcast:&lt;/strong&gt; 195.31.255.255&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 13&lt;/h3&gt;
&lt;p&gt;El bloque CIDR 128.0.0.0/2 o 128/2, ¿Equivale a listar todas las direcciones de red de clase B?&lt;/p&gt;
&lt;p&gt;Para entender cómo se relaciona el bloque CIDR 128.0.0.0/2 con las direcciones de red de clase B y cómo se agruparían todas las redes de clase A bajo CIDR, es fundamental revisar cómo funcionan las máscaras de subred en CIDR y la clasificación original de las direcciones IP en clases A, B y C.&lt;/p&gt;
&lt;h4&gt;&lt;code&gt;Bloque CIDR 128.0.0.0/2&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Paso 1: Determinar los bits de red fijos&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La máscara /2 significa que los dos primeros bits de la dirección IP son fijos. En el caso de 128.0.0.0/2, estos dos bits están configurados como &lt;code&gt;10&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Paso 2: Calcular el rango de direcciones IP&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Con solo los dos primeros bits fijos, los siguientes bits pueden variar. Esto abarca desde &lt;code&gt;10000000.00000000.00000000.00000000&lt;/code&gt; (128.0.0.0) hasta &lt;code&gt;10111111.11111111.11111111.11111111&lt;/code&gt; (191.255.255.255).&lt;/li&gt;
&lt;li&gt;Esto incluye todas las direcciones desde 128.0.0.0 hasta 191.255.255.255, que cubre todas las direcciones de clase B (128.0.0.0 a 191.255.255.255) y parte de las direcciones de clase A y clase C.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Paso 3: Relación con las direcciones de red de clase B&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Este bloque CIDR incluye todas las direcciones de red de clase B, pero no se limita solo a ellas. También incluye la parte alta de las direcciones de clase A y la parte baja de las direcciones de clase C.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;code&gt;¿Cuál sería el bloque CIDR que agrupa todas las redes de clase A?&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Paso 1: Identificar el rango de direcciones de clase A&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Las direcciones de clase A originalmente abarcan de 0.0.0.0 a 127.255.255.255, con el primer bit establecido como &lt;code&gt;0&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Paso 2: Determinar la máscara de CIDR adecuada&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Para cubrir todo el rango de direcciones de clase A con un bloque CIDR, necesitaríamos una máscara que deje el primer bit como variable y fije los demás según sea necesario para cubrir desde 0.0.0.0 hasta 127.255.255.255.&lt;/li&gt;
&lt;li&gt;Esto significa utilizar una máscara /1 que fija solo el primer bit a &lt;code&gt;0&lt;/code&gt;. Esto permite que el segundo bit varíe, lo que adecuadamente abarca desde &lt;code&gt;00000000.00000000.00000000.00000000&lt;/code&gt; (0.0.0.0) hasta &lt;code&gt;01111111.11111111.11111111.11111111&lt;/code&gt; (127.255.255.255).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Conclusión&lt;/code&gt;
El bloque CIDR 128.0.0.0/2 incluye todas las direcciones de red de clase B, pero no se limita a estas, ya que también abarca partes de las clases A y C. Para agrupar todas las redes de clase A, se usaría el bloque CIDR 0.0.0.0/1. Este enfoque de CIDR permite una utilización más flexible y eficiente del espacio de direcciones IP en comparación con el sistema de clases original.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;VLSM&lt;/h2&gt;
&lt;h3&gt;Ejercicio 14&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Qué es y para qué se usa VLSM?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Variable Length Subnet Masking (VLSM)&lt;/strong&gt; es una técnica que permite a los administradores de red subdividir una red IP en múltiples subredes de tamaño variable, optimizando así el uso del espacio de direcciones IP asignado a una organización. Esta técnica se utiliza para hacer un uso más eficiente del espacio de direcciones IP y para adaptar la segmentación de la red a las necesidades específicas de diferentes segmentos dentro de la red.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Para qué se usa VLSM?&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Eficiencia en la Utilización del Espacio de Direcciones IP:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VLSM permite dividir redes grandes en subredes más pequeñas sin desperdiciar direcciones IP. Esto es crucial en entornos donde el número de direcciones IP es limitado.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Flexibilidad en el Diseño de Redes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Al permitir subredes de diferentes tamaños, VLSM ofrece flexibilidad en el diseño de la red, lo que permite a los diseñadores de red ajustar el tamaño de la subred según las necesidades de número de hosts en diferentes segmentos de la red.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Optimización del Enrutamiento:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VLSM puede mejorar la eficiencia del enrutamiento al reducir el número de rutas que un router debe manejar. Al permitir redes más precisas en el enrutamiento, puede minimizar la cantidad de información de enrutamiento que se necesita propagar a través de la red.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Soporte para Múltiples Protocolos de Enrutamiento:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VLSM es compatible con protocolos de enrutamiento que soportan la propagación de máscaras de subred de longitud variable, como OSPF, EIGRP y BGP. Esto permite una implementación más eficaz y dinámica de los cambios de red.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Cómo Funciona VLSM&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La implementación de VLSM comienza con la red de mayor tamaño asignada y luego divide progresivamente las direcciones disponibles para crear subredes más pequeñas para segmentos específicos de la red que requieren menos direcciones. Esta técnica requiere que los administradores de red y los dispositivos involucrados tengan una capacidad de manejo detallada del enrutamiento y la tabla de direcciones.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Ejemplo de Aplicación de VLSM&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Supongamos que una empresa tiene una dirección de red 192.168.1.0/24 y necesita crear tres subredes; una que soporte 50 dispositivos, otra que soporte 30 dispositivos y una última que soporte 10 dispositivos. Con VLSM, se pueden crear subredes que usen solo el número necesario de bits, maximizando así el uso eficiente del espacio de dirección:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Subred 1: 192.168.1.0/26 - Soporta hasta 62 hosts (útil para 50 dispositivos)&lt;/li&gt;
&lt;li&gt;Subred 2: 192.168.1.64/27 - Soporta hasta 30 hosts&lt;/li&gt;
&lt;li&gt;Subred 3: 192.168.1.96/28 - Soporta hasta 14 hosts (útil para 10 dispositivos)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esta forma de asignar direcciones permite un aprovechamiento eficiente y lógico del espacio de direcciones IP disponible.&lt;/p&gt;
&lt;p&gt;En conclusión, VLSM es una herramienta poderosa en la gestión de redes que permite un uso más racionalizado y estratégico del espacio de direcciones IP, lo cual es esencial en la planificación de redes modernas.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 15&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Describa, con sus palabras, el mecanismo para dividir subredes utilizando VLSM.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El mecanismo para dividir subredes utilizando VLSM (Variable Length Subnet Masking) es un proceso que permite una asignación más eficiente y flexible de direcciones IP dentro de una red, adecuando el tamaño de cada subred a las necesidades específicas de cada segmento de la red. Aquí describo paso a paso cómo funciona este mecanismo:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 1: Evaluación de Necesidades&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Antes de comenzar a dividir la red principal en subredes, es necesario evaluar cuántos hosts se necesitarán en cada subred. Esta evaluación debe incluir consideraciones sobre el crecimiento futuro y los requerimientos de espacio de dirección para evitar el rediseño de la red.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 2: Asignación de la Máscara de Subred Más Grande&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Se comienza con la subred más grande que requerirá el mayor número de direcciones IP. A esta subred se le asigna la máscara de subred más pequeña posible (lo que significa menos bits para la red y más bits para los hosts). Esto asegura que se cumplan las necesidades de host mientras se conserva el espacio de direcciones IP para otras subredes.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 3: Subdivisión Progresiva&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Después de asignar la máscara a la subred más grande, el siguiente paso es dividir el espacio restante para otras subredes. Cada subred posterior se puede asignar con una máscara que precise más bits para la red y menos para los hosts, dependiendo de la cantidad de hosts que se necesite en cada una. Esto se hace de manera progresiva hasta cubrir todas las necesidades específicas de la red.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 4: Optimización del Enrutamiento&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Con VLSM, cada subred puede tener una máscara de subred diferente, lo cual optimiza el enrutamiento. Los routers que soportan VLSM pueden enviar y recibir actualizaciones de enrutamiento que incluyen la longitud de las máscaras de subred, permitiendo una mayor eficiencia en la gestión del tráfico y la utilización de los recursos de red.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 5: Documentación&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Es crucial documentar cada asignación de subred y máscara para mantener una referencia clara de la estructura de la red. Esto facilita la gestión, el troubleshooting y la planificación futura de la red.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Ejemplo Práctico&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Supongamos que tienes una dirección de red 192.168.100.0/24 y necesitas crear subredes para diferentes departamentos con diferentes cantidades de hosts:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Departamento A necesita 100 hosts.&lt;/li&gt;
&lt;li&gt;Departamento B necesita 30 hosts.&lt;/li&gt;
&lt;li&gt;Departamento C necesita 2 hosts.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Podrías asignar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Departamento A: 192.168.100.0/25 (128 hosts, 126 útiles)&lt;/li&gt;
&lt;li&gt;Departamento B: 192.168.100.128/26 (64 hosts, 62 útiles)&lt;/li&gt;
&lt;li&gt;Departamento C: 192.168.100.192/30 (4 hosts, 2 útiles)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cada subred tiene una máscara adaptada a sus necesidades específicas, maximizando el uso del rango de direcciones IP disponible.&lt;/p&gt;
&lt;p&gt;En resumen, VLSM es una técnica esencial para redes modernas que buscan una utilización eficiente de las direcciones IP, permitiendo adaptar el tamaño de las subredes a las necesidades reales de la organización mientras se mejora el rendimiento de la red.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 16&lt;/h3&gt;
&lt;p&gt;Suponga que trabaja en una organización que tiene la red que se ve en el gráfico y debe armar el direccionamiento para la misma, minimizando el desperdicio de direcciones IP.&lt;/p&gt;
&lt;p&gt;Dicha organización posee la red 205.10.192.0/19, que es la que usted deberá utilizar.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/3781f6a2-8f27-4b78-bea6-24a9537d9295&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;a. ¿Es posible asignar las subredes correspondientes a la topología utilizando subnetting sin VLSM? Indique la cantidad de hosts que se desperdicia en cada subred.&lt;/h4&gt;
&lt;p&gt;Para resolver este escenario utilizando subnetting tradicional sin VLSM (Variable Length Subnet Masking) y utilizando la red 205.10.192.0/19, necesitamos dividir esta red en subredes que puedan alojar al menos 128, 20, 1530 y 7 hosts, respectivamente, para cada una de las subredes RED A, RED B, RED C y RED D, minimizando el desperdicio de direcciones IP.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 1: Determinar el Tamaño de las Subredes&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Para cada subred, necesitamos calcular el número de bits necesarios para soportar la cantidad de hosts requerida:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RED A&lt;/strong&gt;: 128 hosts ⇒ Se requieren 7 bits para los hosts (128-2 = 126 hosts útiles, 2^7=128 es el tamaño de la subred más cercano).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RED B&lt;/strong&gt;: 20 hosts ⇒ Se requieren 5 bits para los hosts (30 hosts útiles, 2^5=32 es el tamaño de la subred más cercano).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RED C&lt;/strong&gt;: 1530 hosts ⇒ Se requieren 11 bits para los hosts (2046 hosts útiles, 2^11=2048 es el tamaño de la subred más cercano).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RED D&lt;/strong&gt;: 7 hosts ⇒ Se requieren 3 bits para los hosts (6 hosts útiles, 2^3=8 es el tamaño de la subred más cercano).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 2: Asignar Máscaras de Subred Basadas en el Mayor Requerimiento&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Para maximizar el uso de las direcciones IP sin VLSM, debemos asignar las máscaras de subred de manera que acomoden el número de hosts requerido en cada subred. Sin VLSM, la máscara seleccionada para cada subred es más restrictiva:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RED A&lt;/strong&gt;: /25 (255.255.255.128) - Aloja 126 hosts útiles.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RED B&lt;/strong&gt;: /27 (255.255.255.224) - Aloja 30 hosts útiles.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RED C&lt;/strong&gt;: /21 (255.255.248.0) - Aloja 2046 hosts útiles.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RED D&lt;/strong&gt;: /29 (255.255.255.248) - Aloja 6 hosts útiles.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 3: Calcular el Desperdicio de Direcciones IP&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Al asignar máscaras de subred sin utilizar VLSM, cada subred tiene un número fijo de direcciones, muchas de las cuales pueden no ser utilizadas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RED A&lt;/strong&gt;: Desperdicio de 2 direcciones (128 - 126).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RED B&lt;/strong&gt;: Desperdicio de 12 direcciones (32 - 20).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RED C&lt;/strong&gt;: Desperdicio de 516 direcciones (2048 - 1530).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RED D&lt;/strong&gt;: Desperdicio de 1 dirección (8 - 7).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 4: Direccionamiento de Subredes&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Considerando que estamos trabajando con una red 205.10.192.0/19:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;205.10.192.0/25&lt;/strong&gt; para RED A.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;205.10.192.128/27&lt;/strong&gt; para RED B.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;205.10.193.0/21&lt;/strong&gt; para RED C.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;205.10.200.0/29&lt;/strong&gt; para RED D.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Conclusión&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Sin VLSM, el desperdicio de direcciones IP puede ser considerable, especialmente en subredes que no se ajustan perfectamente a las potencias de dos. Con VLSM, podríamos asignar máscaras de subred más precisas para cada subred específica, reduciendo así el desperdicio y utilizando el espacio de direcciones de manera más eficiente. En este caso, el uso de VLSM sería altamente recomendable para maximizar la eficiencia del espacio de direcciones disponible.&lt;/p&gt;
&lt;h4&gt;b. Asigne direcciones a todas las redes de la topología. Tome siempre en cada paso la primera dirección de red posible.&lt;/h4&gt;
&lt;p&gt;Para asignar direcciones IP a las redes en la topología presentada, utilizando la red &lt;code&gt;205.10.192.0/19&lt;/code&gt; y considerando la necesidad de subredes para 128, 20, 1530, y 7 hosts, respectivamente, y utilizando el método de Variable Length Subnet Mask (VLSM) para optimizar el uso del espacio de direcciones IP, seguiríamos estos pasos:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 1: Listar las Subredes por Tamaño&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Ordenamos las subredes por el número de hosts que cada una necesita, empezando por la más grande hasta la más pequeña, para minimizar el desperdicio de direcciones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RED C: 1530 hosts&lt;/li&gt;
&lt;li&gt;RED A: 128 hosts&lt;/li&gt;
&lt;li&gt;RED B: 20 hosts&lt;/li&gt;
&lt;li&gt;RED D: 7 hosts&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 2: Calcular Máscaras de Subred para Cada Red&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Usamos la fórmula 2^n - 2 &gt;= hosts necesarios para determinar el número mínimo de bits requeridos para los hosts en cada subred, donde (n) es el número de bits para los hosts.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RED C:&lt;/strong&gt; Mínimo de 1530 hosts ⇒ (2^{11} = 2048) hosts (2046 útiles), máscara /21&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RED A:&lt;/strong&gt; Mínimo de 128 hosts ⇒ (2^7 = 128) hosts (126 útiles), máscara /25&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RED B:&lt;/strong&gt; Mínimo de 20 hosts ⇒ (2^5 = 32) hosts (30 útiles), máscara /27&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RED D:&lt;/strong&gt; Mínimo de 7 hosts ⇒ (2^3 = 8) hosts (6 útiles), máscara /29&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 3: Asignar Direcciones IP Utilizando VLSM&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Comenzamos con la dirección de red más baja disponible y asignamos bloques de direcciones a cada subred, ajustando la máscara de subred para satisfacer la cantidad de hosts necesarios.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;RED C (205.10.192.0/21):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rango: 205.10.192.0 - 205.10.199.255&lt;/li&gt;
&lt;li&gt;Dirección de red: 205.10.192.0&lt;/li&gt;
&lt;li&gt;Dirección de broadcast: 205.10.199.255&lt;/li&gt;
&lt;li&gt;Rango de hosts: 205.10.192.1 - 205.10.199.254&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;RED A (205.10.200.0/25):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rango: 205.10.200.0 - 205.10.200.127&lt;/li&gt;
&lt;li&gt;Dirección de red: 205.10.200.0&lt;/li&gt;
&lt;li&gt;Dirección de broadcast: 205.10.200.127&lt;/li&gt;
&lt;li&gt;Rango de hosts: 205.10.200.1 - 205.10.200.126&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;RED B (205.10.200.128/27):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rango: 205.10.200.128 - 205.10.200.159&lt;/li&gt;
&lt;li&gt;Dirección de red: 205.10.200.128&lt;/li&gt;
&lt;li&gt;Dirección de broadcast: 205.10.200.159&lt;/li&gt;
&lt;li&gt;Rango de hosts: 205.10.200.129 - 205.10.200.158&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;RED D (205.10.200.160/29):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rango: 205.10.200.160 - 205.10.200.167&lt;/li&gt;
&lt;li&gt;Dirección de red: 205.10.200.160&lt;/li&gt;
&lt;li&gt;Dirección de broadcast: 205.10.200.167&lt;/li&gt;
&lt;li&gt;Rango de hosts: 205.10.200.161 - 205.10.200.166&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Paso 4: Revisión y Ajuste&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Revisamos si hay espacio restante y ajustamos si es necesario, asegurándonos de que todas las subredes estén correctamente definidas sin solapamientos y optimizando el uso de la dirección IP disponible.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Conclusión&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Este método de VLSM permite un uso eficiente del espacio de direcciones IP, asignando a cada subred la cantidad justa de direcciones que necesita, lo que reduce el desperdicio y mejora la administración de la red.&lt;/p&gt;
&lt;p&gt;o asi se entiede mas facil&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/b2ef34c2-2cfd-4d65-98c9-f6442c3d5ccf&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;c. Para mantener el orden y el inventario de direcciones disponibles, haga un listado de todas las direcciones libres que le quedaron, agrupándolas utilizando CIDR&lt;/h4&gt;
&lt;p&gt;Para calcular y listar todas las direcciones libres que quedan después de asignar las subredes requeridas para RED A, RED B, RED C, y RED D en la red 205.10.192.0/19, procederemos de la siguiente manera:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Recordatorio de las Asignaciones de Subred:&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RED C:&lt;/strong&gt; 205.10.192.0/21 (direcciones desde 205.10.192.0 hasta 205.10.199.255)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RED A:&lt;/strong&gt; 205.10.200.0/25 (direcciones desde 205.10.200.0 hasta 205.10.200.127)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RED B:&lt;/strong&gt; 205.10.200.128/27 (direcciones desde 205.10.200.128 hasta 205.10.200.159)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RED D:&lt;/strong&gt; 205.10.200.160/29 (direcciones desde 205.10.200.160 hasta 205.10.200.167)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 1: Calcular el Rango Total de la Red Principal&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La red principal es 205.10.192.0/19, que abarca desde 205.10.192.0 hasta 205.10.223.255.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 2: Identificar los Rangos Utilizados&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Los rangos utilizados ya están definidos como parte de las subredes anteriores. Sumarizamos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;205.10.192.0 a 205.10.199.255 para RED C.&lt;/li&gt;
&lt;li&gt;205.10.200.0 a 205.10.200.167 para RED A, B, y D (combinando las subredes).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 3: Identificar Direcciones Libres&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Las direcciones libres estarán entre los rangos utilizados y el final de la red principal.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Desde &lt;strong&gt;205.10.200.168&lt;/strong&gt; hasta &lt;strong&gt;205.10.223.255&lt;/strong&gt;. Este rango está disponible después de asignar las direcciones para las subredes específicas.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 4: Agrupar las Direcciones Libres Utilizando CIDR&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Para agrupar eficientemente las direcciones libres, buscamos el mayor bloque contiguo de direcciones que pueda ser representado utilizando una máscara de subred CIDR adecuada.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;205.10.200.168/29&lt;/strong&gt;: Esta subred puede alojar 6 hosts. Al ser una pequeña porción, se identifica primero para detalle.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;205.10.200.176/28&lt;/strong&gt;: Aloja 14 hosts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;205.10.200.192/26&lt;/strong&gt;: Aloja 62 hosts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;205.10.201.0/24 hasta 205.10.223.255&lt;/strong&gt;: Esto es un bloque grande y puede agruparse más eficientemente en una única subred que abarca múltiples direcciones /24. La máscara resultante sería &lt;strong&gt;205.10.201.0/19&lt;/strong&gt; que abarca desde 205.10.201.0 hasta 205.10.223.255.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Conclusión&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Al listar todas las direcciones libres, organizadas con CIDR, aseguramos que el espacio de dirección IP no utilizado esté claramente definido y pueda ser asignado eficientemente en el futuro para cualquier necesidad adicional o expansión de la red. Esta organización ayuda a mantener un control estricto del inventario de direcciones IP y facilita la gestión de la red.&lt;/p&gt;
&lt;h4&gt;d. Asigne direcciones IP a todas las interfaces de la topología que sea posible.&lt;/h4&gt;
&lt;p&gt;Para asignar direcciones IP a todas las interfaces en la topología presentada, necesitamos considerar cada conexión entre los dispositivos (routers y switches) y asegurarnos de que cada interface tenga una dirección IP única dentro de su subred correspondiente. Utilizaremos las subredes ya definidas en pasos anteriores para cada red (RED A, RED B, RED C, RED D) y agregaremos interfaces de red adicionales para las conexiones entre routers si es necesario.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Asignaciones de Subred Basadas en la Topología&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Asumiendo que ya hemos establecido las subredes siguientes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RED C:&lt;/strong&gt; 205.10.192.0/21&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RED A:&lt;/strong&gt; 205.10.200.0/25&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RED B:&lt;/strong&gt; 205.10.200.128/27&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RED D:&lt;/strong&gt; 205.10.200.160/29&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Asignación de Direcciones IP a Interfaces&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Router Interconexiones:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Para las conexiones entre los routers, necesitaremos asignar bloques de direcciones pequeños, típicamente /30 para conexiones punto a punto, que permitan 2 direcciones útiles por conexión.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2. Interfaces de Router a Switches:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cada router tendrá una interfaz en la subred correspondiente que conecta a cada RED.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Ejemplo de Asignación Detallada&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Router 1:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Interfaz a RED A: 205.10.200.1/25&lt;/li&gt;
&lt;li&gt;Interfaz a RED C: 205.10.192.1/21&lt;/li&gt;
&lt;li&gt;Interfaz a otro router (supongamos Router 2): 205.10.223.252/30 (ejemplo de dirección en un nuevo bloque /30 que estaría libre)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Router 2:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Interfaz a RED B: 205.10.200.129/27&lt;/li&gt;
&lt;li&gt;Interfaz a RED D: 205.10.200.161/29&lt;/li&gt;
&lt;li&gt;Interfaz a otro router (Router 1): 205.10.223.253/30&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;3. Direcciones para Conexión a la Nube:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Suponiendo que uno de los routers tiene una conexión directa a un recurso externo (como un servicio en la nube o internet), esta interfaz deberá tener una dirección pública o una dirección interna si hay NAT de por medio. Supongamos que el Router 2 se conecta a la nube:
&lt;ul&gt;
&lt;li&gt;Interfaz a la nube: 190.200.10.2/30 (usando una dirección pública ficticia o interna según el diseño de red)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Consideraciones Adicionales&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Direcciones de Broadcast y de Red:&lt;/strong&gt; Cada subred tiene una dirección específica de red y una de broadcast que no deben ser asignadas a host o interfaces.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consistencia y Conectividad:&lt;/strong&gt; Asegúrate de que las direcciones asignadas sean consistentes y no se superpongan entre subredes para evitar conflictos de direccionamiento.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documentación:&lt;/strong&gt; Documenta todas las direcciones IP asignadas y cualquier cambio en la topología de la red para futuras referencias y solución de problemas.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este esquema de asignación asume que solo se utilizan direcciones internas y cualquier conexión a redes externas requeriría configuraciones adicionales de NAT o direcciones públicas según sea necesario.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 17&lt;/h3&gt;
&lt;p&gt;Utilizando la siguiente topología y el bloque asignado, arme el plan de direccionamiento IPv4 teniendo en cuenta las siguientes restricciones:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/2bdde33c-c216-42aa-a821-85e3a3234534&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a. Utilizar el bloque IPv4 200.100.8.0/22.&lt;/li&gt;
&lt;li&gt;b. La red A tiene 125 hosts y se espera un crecimiento máximo de 20 hosts.&lt;/li&gt;
&lt;li&gt;c. La red X tiene 63 hosts.&lt;/li&gt;
&lt;li&gt;d. La red B cuenta con 60 hosts&lt;/li&gt;
&lt;li&gt;e. La red Y tiene 46 hosts y se espera un crecimiento máximo de 18 hosts.&lt;/li&gt;
&lt;li&gt;f. En cada red, se debe desperdiciar la menor cantidad de direcciones IP posibles. En este sentido, las redes utilizadas para conectar los routers deberán utilizar segmentos de red /30 de modo de desperdiciar la menor cantidad posible de direcciones IP.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para diseñar un plan de direccionamiento IPv4 eficiente para la topología dada con el bloque 200.100.8.0/22 y cumpliendo con las restricciones especificadas, necesitaremos utilizar técnicas de Variable Length Subnet Mask (VLSM). Esta técnica permite optimizar el uso del espacio de direcciones asignando tamaños de subred adecuados según la cantidad de hosts en cada red y las expectativas de crecimiento.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 1: Determinación del Tamaño de Cada Subred&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Dado el número de hosts y el crecimiento esperado en cada red, determinamos el tamaño de subred necesario:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Red A:&lt;/strong&gt; 125 hosts + 20 de crecimiento = 145 hosts → Se necesita una máscara que permita al menos 145 hosts. La máscara /24 permite hasta 254 hosts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Red X:&lt;/strong&gt; 63 hosts → Se necesita una máscara que permita al menos 63 hosts. La máscara /26 permite hasta 62 hosts, así que se usa una /25 que permite hasta 126 hosts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Red B:&lt;/strong&gt; 60 hosts → Se necesita una máscara que permita al menos 60 hosts. La máscara /26 permite hasta 62 hosts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Red Y:&lt;/strong&gt; 46 hosts + 18 de crecimiento = 64 hosts → Se necesita una máscara que permita al menos 64 hosts. Una /26 permite hasta 62 hosts, así que se usa una /25 que permite hasta 126 hosts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conexiones entre Routers:&lt;/strong&gt; Usar segmentos /30 que permiten 2 hosts útiles.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 2: Asignación de Subredes&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Comenzamos asignando las subredes desde la dirección más baja disponible:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Red A: 200.100.8.0/24&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rango de hosts: 200.100.8.1 - 200.100.8.254&lt;/li&gt;
&lt;li&gt;Dirección de broadcast: 200.100.8.255&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Red X: 200.100.9.0/25&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rango de hosts: 200.100.9.1 - 200.100.9.126&lt;/li&gt;
&lt;li&gt;Dirección de broadcast: 200.100.9.127&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Red B: 200.100.9.128/26&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rango de hosts: 200.100.9.129 - 200.100.9.190&lt;/li&gt;
&lt;li&gt;Dirección de broadcast: 200.100.9.191&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Red Y: 200.100.9.192/25&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rango de hosts: 200.100.9.193 - 200.100.9.254&lt;/li&gt;
&lt;li&gt;Dirección de broadcast: 200.100.9.255&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Conexiones entre Routers:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Por ejemplo, entre r1 y r2: 200.100.10.0/30&lt;/li&gt;
&lt;li&gt;Otros enlaces se asignarán subredes /30 consecutivas dentro del rango disponible de 200.100.10.4/30, 200.100.10.8/30, etc., hasta 200.100.10.252/30.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Paso 3: Verificación y Ajustes&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Después de asignar las direcciones, es crucial verificar que todas las subredes y conexiones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No se solapen.&lt;/li&gt;
&lt;li&gt;Cumplan con las expectativas de crecimiento.&lt;/li&gt;
&lt;li&gt;Sean eficientes en el uso del espacio de direcciones disponible sin desperdiciar direcciones IP.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 4: Documentación&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Documentar cada asignación con detalles específicos de cada subred y conexión para futuras referencias y gestión de la red. Esta documentación es vital para el mantenimiento y la expansión futura de la red.&lt;/p&gt;
&lt;p&gt;Este enfoque proporciona una asignación lógica y sistemática de direcciones que maximiza la utilización del bloque de direcciones IP dado, asegurando la escalabilidad y la eficiencia en la administración de la red.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 18&lt;/h3&gt;
&lt;p&gt;Asigne direcciones IP en los equipos de la topología según el plan anterior.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Este grafico es de agusrnf me daba fiaca hacer uno&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/61e08808-421e-4359-aa1b-110d709a4c53&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;ICMP y Configuraciones IP&lt;/h2&gt;
&lt;h3&gt;Ejercicio 19&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Describa qué es y para qué sirve el protocolo ICMP.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El protocolo ICMP (Internet Control Message Protocol) es un componente crucial de la suite de protocolos de Internet, utilizado primordialmente para diagnosticar problemas de red y facilitar mensajes operativos sobre el estado de la red. Este protocolo se define en el RFC 792 y es fundamental para el funcionamiento de redes IP. Aquí te describo qué es y para qué sirve ICMP en detalle:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Qué es ICMP?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;ICMP es un protocolo de capa de red según el modelo OSI, que se utiliza junto con el protocolo IP (Internet Protocol). A diferencia de los protocolos de transporte como TCP y UDP, ICMP no se utiliza para enviar datos entre aplicaciones, sino que se encarga de la gestión y el control de la red proporcionando mensajes de error y operativos.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Funciones Principales de ICMP:&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Diagnóstico de Red:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ICMP permite diagnosticar problemas en la red enviando mensajes de error que indican, por ejemplo, que un servicio o host no está alcanzable o que un datagrama ha tenido que ser descartado debido a un TTL (Time to Live) que ha expirado. Esto es útil para herramientas como &lt;code&gt;ping&lt;/code&gt;, que mide la accesibilidad entre dispositivos en una red.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Mensajes de Error:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Destino Inalcanzable:&lt;/strong&gt; Se envía cuando no se puede entregar un paquete IP debido a problemas como un puerto o host inexistente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tiempo Excedido:&lt;/strong&gt; Indica que el TTL de un paquete IP ha expirado, lo que usualmente significa que ha habido un bucle en el enrutamiento.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Problemas de Parámetro:&lt;/strong&gt; Alerta sobre errores en los campos de cabecera que impiden que un paquete sea procesado.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Redireccionamiento:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los mensajes de redireccionamiento informan a los hosts sobre rutas más eficientes para el envío de paquetes. Esto es parte de la gestión de la red para optimizar el enrutamiento y la eficiencia.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Solicitud y Respuesta de Eco (Ping):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Esta es probablemente la función más conocida de ICMP, utilizada para verificar la conectividad general entre dos nodos en una red. Un mensaje de eco se envía a un dispositivo, que luego debe responder con un eco de respuesta, confirmando la conectividad.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Importancia de ICMP&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Aunque es un protocolo simple, ICMP es vital para la administración de la red y la rápida solución de problemas. Ayuda a los administradores a monitorear y responder a eventos en tiempo real, asegurando que la infraestructura de red sea robusta y confiable. También es fundamental para la configuración de redes más eficientes y para informar a los sistemas sobre cómo y cuándo el tráfico debe ser reruteado para optimizar el rendimiento.&lt;/p&gt;
&lt;p&gt;En resumen, ICMP es un componente esencial de la pila de protocolos de Internet, proporcionando retroalimentación sobre problemas y estado de la red, lo que es crucial para el mantenimiento y la operación eficiente de redes basadas en IP.&lt;/p&gt;
&lt;h4&gt;a. Analice cómo funciona el comando ping.&lt;/h4&gt;
&lt;p&gt;El comando &lt;strong&gt;ping&lt;/strong&gt; es una herramienta utilizada para probar la accesibilidad de un host en una red IP y para medir el tiempo que toman los mensajes para ir y volver desde el host de origen al destino. Funciona utilizando el protocolo ICMP (Internet Control Message Protocol), específicamente mediante el envío de mensajes de eco y la espera por respuestas de eco.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Funcionamiento del Comando Ping&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Envío de Solicitud de Eco:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cuando ejecutas el comando ping a una dirección IP, tu dispositivo envía un paquete ICMP de tipo &quot;Echo Request&quot; al dispositivo de destino.&lt;/li&gt;
&lt;li&gt;Este paquete contiene datos que el dispositivo receptor deberá devolver, permitiendo medir el tiempo de ida y vuelta.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Recepción de Respuesta de Eco:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El dispositivo de destino, al recibir el paquete ICMP &quot;Echo Request&quot;, deberá responder con un paquete ICMP de tipo &quot;Echo Reply&quot;.&lt;/li&gt;
&lt;li&gt;Al recibir este paquete de respuesta, tu dispositivo puede calcular el tiempo que tardó el mensaje en ir y volver, comúnmente conocido como RTT (Round-Trip Time).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Tipos y Códigos ICMP Utilizados por Ping&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;i. Indique el tipo y código ICMP que usa el ping.&lt;/h4&gt;
&lt;p&gt;Tipo y Código ICMP que Usa el Ping (Solicitud de Eco)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tipo:&lt;/strong&gt; 8 (Echo Request)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Código:&lt;/strong&gt; 0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este tipo y código corresponden a la solicitud de eco que el comando ping envía para verificar la conectividad.&lt;/p&gt;
&lt;h4&gt;ii. Indique el tipo y código ICMP que usa la respuesta de un ping.&lt;/h4&gt;
&lt;p&gt;Tipo y Código ICMP que Usa la Respuesta de un Ping (Respuesta de Eco)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tipo:&lt;/strong&gt; 0 (Echo Reply)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Código:&lt;/strong&gt; 0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este tipo y código corresponden a la respuesta de eco que el host de destino envía en respuesta a la solicitud de eco.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Importancia del Ping&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El comando ping es una herramienta esencial para la resolución de problemas de red, permitiendo a los usuarios y administradores de sistemas verificar la accesibilidad de hosts en una red. Su simplicidad y efectividad lo hacen indispensable en muchas tareas de diagnóstico y monitoreo de red. Además, debido a que proporciona una medida del tiempo de ida y vuelta, es útil para evaluar la calidad de la conexión y la latencia en la red.&lt;/p&gt;
&lt;h4&gt;b. Analice cómo funcionan comandos como traceroute/tracert de Linux/Windows y cómo manipulan el campo TTL de los paquetes IP.&lt;/h4&gt;
&lt;p&gt;Los comandos &lt;code&gt;traceroute&lt;/code&gt; en Linux y &lt;code&gt;tracert&lt;/code&gt; en Windows son herramientas utilizadas para diagnosticar la ruta que toman los paquetes para alcanzar un host de destino en una red. Estas herramientas proporcionan una visión detallada de cada salto (hop) que el paquete realiza en su camino hacia el destino, permitiendo a los usuarios identificar dónde pueden estar ocurriendo retrasos o bloqueos en la ruta.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Funcionamiento de Traceroute/Tracert&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Manipulación del Campo TTL&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Inicialización del TTL:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Traceroute comienza enviando paquetes de datos con el campo TTL (Time To Live) del encabezado IP inicializado a 1. El TTL es un contador que reduce su valor en 1 cada vez que el paquete pasa por un router. Si el TTL llega a 0, el paquete se descarta para evitar que los paquetes de datos circulen indefinidamente en la red.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Incremento del TTL:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En cada subsiguiente intento, traceroute incrementa el valor del TTL en 1. Este proceso se repite, incrementando el TTL hasta que el paquete alcanza el host de destino o hasta que se alcanza un número máximo de saltos (hops) predefinido.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Recepción de Respuestas ICMP:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cada vez que un paquete con un determinado TTL es descartado por un router debido a que el TTL alcanza 0, el router envía de vuelta al origen un paquete ICMP de tipo &quot;Tiempo Excedido&quot; (Time Exceeded), que contiene la dirección IP del router. Esto le permite a traceroute identificar y registrar cada router por el que el paquete pasa en su ruta hacia el destino.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Finalización:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El proceso termina cuando el paquete con el TTL suficientemente alto para llegar al destino es recibido y el host de destino envía una respuesta, típicamente un paquete ICMP de tipo &quot;Echo Reply&quot;, indicando que ha sido alcanzado.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Utilidad de Traceroute/Tracert&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Diagnóstico de Red:&lt;/strong&gt; Ayuda a diagnosticar puntos de fallo o cuellos de botella en la ruta de los datos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Seguridad:&lt;/strong&gt; Puede ayudar a identificar rutas inesperadas que podrían indicar configuraciones erróneas o ataques de redireccionamiento.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rendimiento:&lt;/strong&gt; Permite a los administradores de red medir la latencia a lo largo de diferentes tramos de la red.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El uso de traceroute o tracert es invaluable para los profesionales de TI y los administradores de red para mantener y resolver problemas en redes complejas, ofreciendo una mirada en tiempo real sobre cómo los paquetes de datos navegan a través de la infraestructura de Internet y redes internas.&lt;/p&gt;
&lt;h4&gt;c. Indique la cantidad de saltos realizados desde su computadora hasta el sitio www.nasa.gov. Analice:&lt;/h4&gt;
&lt;p&gt;Para determinar la cantidad de saltos desde tu computadora hasta el sitio &lt;code&gt;www.nasa.gov&lt;/code&gt; y analizar los detalles relacionados, puedes usar el comando &lt;code&gt;traceroute&lt;/code&gt; en Linux o &lt;code&gt;tracert&lt;/code&gt; en Windows. A continuación, te explico cómo realizar este procedimiento y te proporciono información sobre las preguntas específicas que planteaste:&lt;/p&gt;
&lt;h3&gt;Realizando Traceroute/Tracert a www.nasa.gov&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;En Windows:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Abre el Símbolo del sistema (cmd).&lt;/li&gt;
&lt;li&gt;Escribe el comando: &lt;code&gt;tracert www.nasa.gov&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Presiona Enter.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;En Linux:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Abre una terminal.&lt;/li&gt;
&lt;li&gt;Escribe el comando: &lt;code&gt;traceroute www.nasa.gov&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Presiona Enter.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;i. Cómo Hacer para que no Muestre el Nombre del Dominio Asociado a la IP de Cada Salto&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;En Windows:&lt;/strong&gt; Utiliza el comando &lt;code&gt;tracert -d www.nasa.gov&lt;/code&gt;. La opción &lt;code&gt;-d&lt;/code&gt; evita que &lt;code&gt;tracert&lt;/code&gt; intente resolver las direcciones IP a nombres de dominio, acelerando el proceso y mostrando solo las direcciones IP.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;En Linux:&lt;/strong&gt; Utiliza el comando &lt;code&gt;traceroute -n www.nasa.gov&lt;/code&gt;. La opción &lt;code&gt;-n&lt;/code&gt; hace que &lt;code&gt;traceroute&lt;/code&gt; no resuelva los nombres de los nodos, solo muestra las direcciones IP.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;ii. La Razón de la Aparición de * en Parte o Toda la Respuesta de un Salto&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Estrellas (*):&lt;/strong&gt; Cuando ves &lt;code&gt;*&lt;/code&gt; en los resultados de &lt;code&gt;traceroute&lt;/code&gt; o &lt;code&gt;tracert&lt;/code&gt;, esto indica que no se recibió respuesta de ese salto específico dentro del tiempo de espera predeterminado. Las posibles razones incluyen:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Filtrado de paquetes:&lt;/strong&gt; Algunos routers configuran reglas de firewall que bloquean los mensajes ICMP utilizados por &lt;code&gt;traceroute&lt;/code&gt;. Cuando un router tiene estas reglas, no responderá a las solicitudes de eco.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pérdida de paquetes:&lt;/strong&gt; La red puede estar congestionada, lo que resulta en la pérdida de paquetes ICMP antes de que alcancen su destino o regresen.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tiempo de espera:&lt;/strong&gt; El tiempo de espera para la respuesta del paquete ha expirado antes de que se recibiera una respuesta.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estos resultados te ayudan a entender mejor la ruta que toman tus datos en la red y te proporcionan una idea sobre posibles problemas de conectividad o configuraciones restrictivas en la ruta hacia el destino.&lt;/p&gt;
&lt;h4&gt;d. Verifique el recorrido hacia los servidores de nombre del dominio unlp.edu.ar. En base al recorrido realizado, ¿podría confirmar cuál de ellos toma un camino distinto?&lt;/h4&gt;
&lt;p&gt;Eh morido&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 20&lt;/h3&gt;
&lt;p&gt;¿Para que se usa el bloque 127.0.0.0/8? ¿Qué PC responde a los siguientes comandos?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a. ping 127.0.0.1&lt;/li&gt;
&lt;li&gt;b. ping 127.0.54.43&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El bloque 127.0.0.0/8 se usa en redes de computadoras para designar direcciones IP que se refieren a la &quot;máquina local&quot; o &quot;host local&quot;, a menudo llamadas direcciones de loopback. Estas direcciones son utilizadas principalmente para pruebas de red interna dentro de un solo sistema. El uso de estas direcciones permite que el software de red pruebe la conectividad y funcionalidad de la red sin la necesidad de salir al exterior a través de una red física.&lt;/p&gt;
&lt;h3&gt;¿Qué PC responde a los siguientes comandos?&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;a. ping 127.0.0.1&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;127.0.0.1&lt;/strong&gt; es la dirección de loopback más comúnmente usada. Cuando utilizas este comando, estás enviando un paquete ICMP Echo Request a tu propia máquina. Por lo tanto, la máquina que responde al &lt;code&gt;ping 127.0.0.1&lt;/code&gt; es el propio equipo desde el que se emite el comando. Se usa para verificar que el software de pila TCP/IP en el host está funcionando correctamente.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;b. ping 127.0.54.43&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Al igual que el caso anterior, cualquier dirección dentro del bloque 127.0.0.0/8 (que incluye 127.0.54.43) se dirige al loopback de la propia máquina. Por lo tanto, si emites &lt;code&gt;ping 127.0.54.43&lt;/code&gt;, también estás enviando paquetes a tu propia computadora. La respuesta también proviene de tu propia máquina, verificando así la funcionalidad del loopback y la pila TCP/IP interna.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En resumen, cuando pings a cualquier dirección dentro del bloque 127.0.0.0/8, estás realizando una prueba de loopback interna, y la máquina que responde es siempre la máquina desde la que se emiten los comandos. Esto es útil para diagnósticos y pruebas de conectividad sin necesidad de utilizar la red externa.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 21&lt;/h3&gt;
&lt;p&gt;Investigue para qué sirven los comandos ifconfig y route. ¿Qué comandos podría utilizar en su reemplazo? Inicie una topología con CORE, cree una máquina y utilice en ella los comandos anteriores para practicar sus diferentes opciones, mínimamente:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Configurar y quitar una dirección IP en una interfaz.&lt;/li&gt;
&lt;li&gt;Ver la tabla de ruteo de la máquina&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Los comandos &lt;code&gt;ifconfig&lt;/code&gt; y &lt;code&gt;route&lt;/code&gt; son herramientas tradicionales en sistemas Unix y Linux utilizadas para la configuración de interfaces de red y la gestión de la tabla de ruteo, respectivamente. Aunque todavía están presentes en muchos sistemas, han sido reemplazados por herramientas más modernas y potentes que ofrecen mejor compatibilidad con las nuevas características de red.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Funciones de los Comandos&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ifconfig&lt;/strong&gt;: Se utiliza para configurar, manejar y mostrar la información de las interfaces de red. Permite activar o desactivar interfaces, asignar direcciones IP, configurar máscaras de red, y mucho más.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;route&lt;/strong&gt;: Se utiliza para ver y manipular la tabla de ruteo del sistema. Esto incluye agregar, eliminar o cambiar las rutas utilizadas por el sistema operativo para dirigir el tráfico de red.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Comandos de Reemplazo&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ip&lt;/strong&gt;: Este comando es parte del paquete &lt;code&gt;iproute2&lt;/code&gt; en sistemas Linux y puede realizar las funciones de &lt;code&gt;ifconfig&lt;/code&gt; y &lt;code&gt;route&lt;/code&gt;, además de muchas otras tareas relacionadas con la red. Está diseñado para ser un reemplazo directo, ofreciendo una sintaxis más coherente y un conjunto de características más amplio.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ip addr&lt;/strong&gt;, &lt;strong&gt;ip link&lt;/strong&gt;: Reemplazan a &lt;code&gt;ifconfig&lt;/code&gt; para la configuración de interfaces.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ip route&lt;/strong&gt;: Reemplaza a &lt;code&gt;route&lt;/code&gt; para la gestión de la tabla de ruteo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Practicando con CORE&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Para utilizar estos comandos en un entorno práctico como CORE (Common Open Research Emulator), puedes seguir estos pasos básicos:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Iniciar una Topología con CORE:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Abre CORE.&lt;/li&gt;
&lt;li&gt;Crea una nueva topología arrastrando algunos nodos (por ejemplo, PCs y switches).&lt;/li&gt;
&lt;li&gt;Conecta los nodos con enlaces.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Utilizar ifconfig y route en una Máquina:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Configurar y Quitar una Dirección IP en una Interfaz&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Configurar una dirección IP:&lt;/strong&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quitar una dirección IP:&lt;/strong&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ifconfig eth0 down
ip addr flush dev eth0
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Ver la Tabla de Ruteo de la Máquina&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Usando route:&lt;/strong&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;route -n
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Usando ip route (recomendado):&lt;/strong&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ip route show
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Estos comandos te permitirán ver cómo se configuran y manipulan las interfaces de red y las tablas de ruteo directamente desde la consola de cada máquina virtual en CORE. Practicar con estos comandos en un entorno simulado es una excelente manera de entender cómo funcionan y cómo se pueden utilizar para gestionar una red.&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.FTwy3651.jpg"/><enclosure url="/_astro/thumbnail.FTwy3651.jpg"/></item><item><title>Practica 8 Redes | Ruteo</title><link>https://fabianmartinezrincon.com/blog/practica-8-redes</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/practica-8-redes</guid><description>Practica 8 de Redes y Comunicaciones</description><pubDate>Tue, 07 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Indice&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-1&quot;&gt;Ejercicio 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-2&quot;&gt;Ejercicio 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-3&quot;&gt;Ejercicio 3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-4&quot;&gt;Ejercicio 4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-5&quot;&gt;Ejercicio 5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-6&quot;&gt;Ejercicio 6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-7&quot;&gt;Ejercicio 7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-8&quot;&gt;Ejercicio 8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-9&quot;&gt;Ejercicio 9&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-10&quot;&gt;Ejercicio 10&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-11&quot;&gt;Ejercicio 11&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-12&quot;&gt;Ejercicio 12&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-13&quot;&gt;Ejercicio 13&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-14&quot;&gt;Ejercicio 14&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-15&quot;&gt;Ejercicio 15&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Recomendación&lt;/h2&gt;
&lt;p&gt;Al final de la práctica se encuentra un ejercicio para ser realizado en la herramienta CORE.&lt;/p&gt;
&lt;p&gt;Si bien el ejercicio no agrega conceptos nuevos a los vistos previamente, recomendamos su resolución para que puedan configurar, probar y analizar todo lo aprendido en una simulación de una red&lt;/p&gt;
&lt;h2&gt;Fragmentación&lt;/h2&gt;
&lt;h3&gt;Ejercicio 1&lt;/h3&gt;
&lt;p&gt;Se tiene la siguiente red con los MTUs indicados en la misma. Si desde pc1 se envía un paquete IP a pc2 con un tamaño total de 1500 bytes (cabecera IP más payload) con el campo Identification = 20543, responder:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/28e7f4c8-ef14-4d0d-8382-d81bea835872&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Indicar IPs origen y destino y campos correspondientes a la fragmentación cuando el paquete sale de pc1&lt;/h4&gt;
&lt;p&gt;Cuando envías un paquete IP desde pc1 a pc2 en una red con múltiples MTUs, como en tu caso, hay una serie de pasos y consideraciones importantes relacionados con la fragmentación debido a los diferentes MTUs configurados en la red. Aquí te explicaré detalladamente cómo abordar esta situación paso a paso, especialmente cuando el paquete inicial sale de pc1.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 1: Preparar el Paquete IP en pc1&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; &lt;strong&gt;Configuración del paquete IP:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;IP Origen:&lt;/strong&gt; 10.0.0.20 (pc1)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IP Destino:&lt;/strong&gt; 10.0.2.20 (pc2)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tamaño total del paquete:&lt;/strong&gt; 1500 bytes (esto incluye la cabecera IP y el payload).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Campo Identification:&lt;/strong&gt; 20543 (esto se usa para identificar todos los fragmentos de un mismo paquete original).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 2: Confrontar el MTU en el primer enlace&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; &lt;strong&gt;MTU del enlace pc1 a R1:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MTU:&lt;/strong&gt; 1500 bytes&lt;/li&gt;
&lt;li&gt;Aquí no hay problema ya que el MTU del enlace es igual al tamaño del paquete. No se requiere fragmentación en este punto.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 3: Manejo de la Fragmentación en R1&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt; &lt;strong&gt;Encuentro con el primer MTU reducido entre R1 y R2:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MTU del enlace R1 a R2:&lt;/strong&gt; 600 bytes&lt;/li&gt;
&lt;li&gt;Como el MTU es menor que el tamaño del paquete de 1500 bytes, R1 necesita fragmentar el paquete.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 4: Fragmentación del Paquete&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4.&lt;/strong&gt; &lt;strong&gt;Cálculo de la fragmentación:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La cabecera IP tiene un tamaño típico de 20 bytes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MTU de 600 bytes menos 20 bytes de cabecera deja 580 bytes para datos por fragmento.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;El paquete original se divide en múltiples fragmentos donde cada uno, excepto posiblemente el último, lleva 580 bytes de datos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;5.&lt;/strong&gt; &lt;strong&gt;Campos de Fragmentación:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Flags:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Los fragmentos excepto el último tendrán el bit &apos;More Fragments&apos; (MF) establecido en 1.&lt;/li&gt;
&lt;li&gt;El último fragmento tendrá el bit &apos;MF&apos; establecido en 0.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fragment Offset:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Se calcula en unidades de 8 bytes. Cada fragmento sucesivo aumenta su offset en &lt;code&gt;(580/8)&lt;/code&gt; unidades respecto al anterior.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;6.&lt;/strong&gt; &lt;strong&gt;Reconstrucción de fragmentos:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unificación de los fragmentos:&lt;/strong&gt; Ocurre en pc2, el host de destino final.&lt;/li&gt;
&lt;li&gt;Si algún fragmento se pierde durante la transmisión, la reconstrucción completa del paquete original en pc2 no será posible, y típicamente, el paquete se descartará después de un tiempo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 5: Continuación de la Transmisión&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;7.&lt;/strong&gt; &lt;strong&gt;Envío de fragmentos a través de R2:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Asumiendo que el MTU en el enlace R2 a pc2 es de 1500 bytes, todos los fragmentos pueden pasar sin requerir fragmentación adicional.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Consideraciones Adicionales&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Este proceso de fragmentación puede introducir una sobrecarga significativa y aumentar la probabilidad de errores. Es recomendable, cuando sea posible, ajustar el tamaño del paquete en la fuente o configurar los MTUs en la red para que sean uniformes y evitar la fragmentación.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estos pasos te proporcionan un marco para entender y manejar la fragmentación de paquetes en redes con MTUs variados, asegurando que estés preparado para configurar y diagnosticar problemas en entornos de red similares.&lt;/p&gt;
&lt;h4&gt;¿Qué sucede cuando el paquete debe ser reenviado por el router R1?&lt;/h4&gt;
&lt;p&gt;Cuando un paquete IP de 1500 bytes es enviado desde pc1 a pc2 en la red descrita, y debe ser reenviado por el router R1, se enfrenta a un desafío debido al MTU más pequeño en la interfaz entre R1 y R2. Vamos a explorar detalladamente y paso a paso lo que sucede en este escenario:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 1: Recepción del Paquete por R1&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Paquete recibido:&lt;/strong&gt; R1 recibe el paquete de 1500 bytes de pc1.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MTU del enlace de R1 a pc1:&lt;/strong&gt; 1500 bytes, por lo que el paquete es recibido sin necesidad de fragmentación.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 2: Evaluación del MTU en la Interfaz R1-R2&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MTU del enlace R1 a R2:&lt;/strong&gt; 600 bytes.&lt;/li&gt;
&lt;li&gt;Dado que el MTU de este enlace es menor que el tamaño del paquete recibido (1500 bytes), R1 debe fragmentar el paquete antes de reenviarlo a R2.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 3: Fragmentación del Paquete&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cálculo de la fragmentación:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;La cabecera IP típicamente ocupa 20 bytes.&lt;/li&gt;
&lt;li&gt;El MTU de 600 bytes en el enlace permite 580 bytes de datos por fragmento después de considerar la cabecera.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Creación de fragmentos:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fragmento 1:&lt;/strong&gt; 580 bytes de datos + 20 bytes de cabecera = 600 bytes total. Flags de fragmentación indican más fragmentos (MF = 1), y el offset es 0.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fragmentos subsiguientes:&lt;/strong&gt; Se continúa fragmentando en bloques de 580 bytes de datos hasta cubrir el total del paquete original. Cada fragmento nuevo incrementa el offset en 580 bytes divididos entre 8 (porque el offset se mide en bloques de 8 bytes).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 4: Reenvío de Fragmentos&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Envío a R2:&lt;/strong&gt; Cada fragmento es enviado individualmente a través del enlace entre R1 y R2. R1 maneja la retransmisión de cada fragmento asegurándose de que cumpla con el MTU de 600 bytes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 5: Recepción y Reensamblaje en pc2&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Recepción por R2:&lt;/strong&gt; R2 recibe los fragmentos uno por uno.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Envío a pc2:&lt;/strong&gt; R2 reenvía los fragmentos hacia pc2. El MTU entre R2 y pc2 es de 1500 bytes, por lo que no se requiere fragmentación adicional.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reensamblaje:&lt;/strong&gt; pc2 reensambla los fragmentos para formar el paquete original. Este proceso ocurre completamente en pc2, el destinatario final.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Consideraciones Adicionales&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pérdida de fragmentos:&lt;/strong&gt; Si algún fragmento se pierde durante el transporte, pc2 no podrá reconstruir el paquete original completamente. Esto puede requerir una retransmisión del paquete completo desde pc1 si se detecta la pérdida (dependiendo del protocolo de capa superior, como TCP).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Eficiencia:&lt;/strong&gt; La fragmentación puede aumentar la latencia y reducir la eficiencia de la red, ya que implica un mayor procesamiento por parte de los routers y un mayor número de paquetes a transmitir.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este análisis detalla cómo el router R1 gestiona un paquete que debe ser fragmentado debido a un MTU más pequeño en la red, ilustrando el impacto que las diferencias de MTU pueden tener en el tráfico de la red.&lt;/p&gt;
&lt;h4&gt;Indicar cómo quedarían los paquetes fragmentados para ser enviados por el enlace entre R1 y R2.&lt;/h4&gt;
&lt;p&gt;Cuando un paquete de 1500 bytes es enviado desde pc1 a pc2 y debe pasar por el enlace entre R1 y R2 que tiene un MTU de 600 bytes, se requerirá la fragmentación del paquete para asegurar que pueda ser transmitido correctamente. Vamos a detallar cómo se llevaría a cabo esta fragmentación, paso a paso:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 1: Tamaño de los Fragmentos&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MTU del enlace R1-R2:&lt;/strong&gt; 600 bytes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cabecera IP:&lt;/strong&gt; 20 bytes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Datos útiles por fragmento:&lt;/strong&gt; 600 - 20 = 580 bytes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 2: Cantidad de Fragmentos Necesarios&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tamaño total de datos:&lt;/strong&gt; 1500 - 20 (cabecera original) = 1480 bytes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Número de fragmentos requeridos:&lt;/strong&gt; 1480 / 580 = 2.55, por lo que necesitamos 3 fragmentos (los dos primeros fragmentos serán de 580 bytes de datos y el último ajustará el resto).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 3: Características de los Fragmentos&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Primer Fragmento:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tamaño:&lt;/strong&gt; 600 bytes (580 de datos + 20 de cabecera).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flags:&lt;/strong&gt; More Fragments (MF) = 1 (indicando que hay más fragmentos).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Offset:&lt;/strong&gt; 0 (es el primer fragmento, así que el desplazamiento es 0).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identification:&lt;/strong&gt; 20543 (todos los fragmentos comparten este ID para asociarse como parte del mismo paquete original).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Segundo Fragmento:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tamaño:&lt;/strong&gt; 600 bytes (580 de datos + 20 de cabecera).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flags:&lt;/strong&gt; MF = 1.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Offset:&lt;/strong&gt; 580 / 8 = 72.5, pero debe ser un número entero, por lo tanto, redondeamos a 72 (esto representa el desplazamiento en bloques de 8 bytes del primer byte de datos respecto al inicio del paquete original).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Tercer Fragmento:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tamaño:&lt;/strong&gt; 320 bytes (300 de datos + 20 de cabecera, ajustando el total del paquete a 1500 bytes).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flags:&lt;/strong&gt; MF = 0 (este es el último fragmento, no hay más después de este).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Offset:&lt;/strong&gt; (580 + 580) / 8 = 145 (este offset sigue al segundo fragmento y es calculado de la misma forma).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Paso 4: Envío y Reensamblaje&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Envío:&lt;/strong&gt; Cada fragmento es enviado individualmente a través del enlace entre R1 y R2.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reensamblaje:&lt;/strong&gt; Todos los fragmentos son reensamblados en pc2 para reconstruir el paquete original. Esto requiere que todos los fragmentos lleguen correctamente; si alguno se pierde, el paquete no puede ser reconstruido por completo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Consideraciones Adicionales&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Overhead de la fragmentación:&lt;/strong&gt; La fragmentación incrementa el overhead ya que cada fragmento lleva su propia cabecera IP.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Riesgo de pérdida:&lt;/strong&gt; Si se pierde un fragmento, el paquete completo no puede ser reensamblado, lo que potencialmente requiere una retransmisión del paquete original.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Eficiencia de la red:&lt;/strong&gt; La fragmentación puede afectar la eficiencia de la red, consumiendo más recursos tanto en los routers como en los hosts finales.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este proceso ilustra cómo los routers manejan la fragmentación necesaria cuando los paquetes IP deben pasar a través de enlaces con MTU restrictivo, garantizando que la comunicación entre dispositivos en diferentes segmentos de red se realice eficazmente incluso bajo restricciones de infraestructura.&lt;/p&gt;
&lt;h4&gt;¿Dónde se unen nuevamente los fragmentos? ¿Qué sucede si un fragmento no llega?&lt;/h4&gt;
&lt;p&gt;En la red que has descrito, los fragmentos de un paquete IP original enviado desde pc1 se reunirán y reensamblarán en el destino final, que en este caso es pc2. Este proceso de reensamblaje es crucial para que pc2 pueda procesar correctamente el paquete original como fue enviado. Aquí explicaré paso a paso cómo ocurre esto y qué sucede si un fragmento no llega.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 1: Fragmentación del Paquete&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Fragmentación en R1:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dado que el paquete original es de 1500 bytes y el MTU entre R1 y R2 es de solo 600 bytes, R1 fragmentará el paquete en varios fragmentos más pequeños, cada uno dentro del límite del MTU de 600 bytes.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Envío de Fragmentos:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;R1 enviará estos fragmentos uno por uno a través de la interfaz hacia R2.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Paso 2: Transmisión y Recepción de Fragmentos&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Recepción por R2:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;R2 recibe los fragmentos uno tras otro. Estos fragmentos aún no son útiles como datos individuales, ya que necesitan ser reensamblados para formar el paquete original.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Paso 3: Reensamblaje de Fragmentos&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Reensamblaje en pc2:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Todos los fragmentos enviados por R1 y retransmitidos por R2 deben llegar a pc2 para que se puedan reunir.&lt;/li&gt;
&lt;li&gt;El reensamblaje se realiza en el buffer de recepción de pc2, donde los fragmentos se ordenan y combinan basándose en sus desplazamientos y el número de identificación, que es 20543 en este caso.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Paso 4: Proceso de Reensamblaje Completo&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Construcción del Paquete Original:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Una vez que todos los fragmentos han llegado y están en el orden correcto, pc2 los combina para reconstruir el paquete original de 1500 bytes.&lt;/li&gt;
&lt;li&gt;El proceso se completa cuando todos los fragmentos han sido reunidos y el paquete se procesa como si hubiera llegado intacto.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Problemas Potenciales: Pérdida de Fragmentos&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Pérdida de un Fragmento:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si alguno de los fragmentos se pierde durante la transmisión y no llega a pc2, el paquete original no puede ser completamente reensamblado.&lt;/li&gt;
&lt;li&gt;En este caso, el paquete incompleto generalmente se descarta después de un tiempo de espera.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Impacto de la Pérdida de Fragmentos:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La pérdida de fragmentos puede llevar a una retransmisión del paquete original por parte de la aplicación o la capa de transporte, especialmente si se utiliza TCP, que maneja la retransmisión de datos faltantes.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En resumen, el reensamblaje de los fragmentos se realiza en el host de destino (pc2), y es crucial que todos los fragmentos lleguen para que el paquete original pueda ser reconstruido correctamente. La pérdida de cualquier fragmento puede resultar en la necesidad de retransmitir el paquete entero, lo cual puede reducir la eficiencia de la red y aumentar la latencia.&lt;/p&gt;
&lt;h4&gt;Si un fragmento tiene que ser reenviado por un enlace con un MTU menor al tamaño del fragmento, ¿qué hará el router con ese fragmento?&lt;/h4&gt;
&lt;p&gt;Cuando un fragmento de un paquete IP necesita ser reenviado por un enlace con un MTU menor que el tamaño del fragmento, el router enfrenta un dilema de fragmentación adicional. Este es el proceso paso a paso de lo que ocurre:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 1: Detección del MTU más pequeño&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Evaluación del MTU:&lt;/strong&gt; El router detecta que el MTU del siguiente enlace es menor que el tamaño del fragmento que debe enviar.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 2: Fragmentación adicional&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fragmentación:&lt;/strong&gt; Para manejar esta situación, el router debe fragmentar aún más el fragmento original en unidades más pequeñas que se ajusten al MTU del nuevo enlace. Este proceso se llama &quot;fragmentación de fragmentos&quot;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 3: Ajuste de los Campos de los Fragmentos&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Campos de Control:&lt;/strong&gt; El router ajustará los campos necesarios en las cabeceras de los nuevos fragmentos más pequeños, como el campo de desplazamiento y los flags, para asegurar que al llegar al destino final, todos los fragmentos puedan ser reensamblados correctamente en el orden adecuado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flags de Fragmentación:&lt;/strong&gt; El bit &apos;More Fragments&apos; (MF) se establece en 1 en todos los fragmentos adicionales excepto en el último, donde se establece en 0.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Paso 4: Reenvío de los Nuevos Fragmentos&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Transmisión:&lt;/strong&gt; Cada uno de los nuevos fragmentos se envía individualmente a través del enlace con el MTU reducido.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Implicaciones de la Fragmentación Adicional&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ineficiencia:&lt;/strong&gt; La fragmentación adicional introduce una sobrecarga significativa en la red y puede afectar el rendimiento general de la red debido a la cantidad incrementada de cabeceras y el procesamiento adicional necesario en cada hop y en el destino final.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Riesgo de Pérdida:&lt;/strong&gt; Cada fragmento adicional incrementa el riesgo de pérdida de paquetes, ya que más fragmentos significan más oportunidades para que ocurran errores durante la transmisión.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Conclusiones&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La necesidad de fragmentar aún más los fragmentos debido a un MTU reducido en un enlace subsiguiente es un escenario desafiante que los administradores de red prefieren evitar. Configurar todos los enlaces de la red para que tengan un MTU uniforme o utilizar técnicas como Path MTU Discovery (PMTUD) puede ayudar a mitigar estos problemas, permitiendo a los sistemas ajustar el tamaño de los paquetes para evitar la fragmentación siempre que sea posible.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ruteo&lt;/h2&gt;
&lt;h3&gt;Ejercicio 2&lt;/h3&gt;
&lt;h4&gt;¿Qué es el ruteo?&lt;/h4&gt;
&lt;p&gt;El ruteo, también conocido como enrutamiento, es el proceso mediante el cual se determina la ruta que deben seguir los paquetes de datos desde su origen hasta su destino en una red de computadoras. Este proceso es esencial para garantizar que la información transmitida a través de redes amplias y complejas, como Internet, llegue de manera eficiente y precisa al punto adecuado.&lt;/p&gt;
&lt;h4&gt;¿Por qué es necesario?&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Interconexión de Redes:&lt;/strong&gt; Permite la comunicación entre diferentes redes, que pueden estar separadas geográficamente y conectadas a través de varios dispositivos intermediarios, como routers.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Selección de la Mejor Ruta:&lt;/strong&gt; Los algoritmos de ruteo evalúan múltiples rutas posibles y seleccionan la más óptima para enviar los paquetes. Esto se basa en varios criterios, como el costo, la distancia, el ancho de banda disponible y la congestión de la red.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Eficiencia en la Transmisión:&lt;/strong&gt; Optimiza el uso de los recursos de la red al evitar caminos saturados o más lentos, reduciendo así el tiempo total de tránsito y mejorando la calidad de servicio.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escalabilidad de la Red:&lt;/strong&gt; A medida que las redes crecen en tamaño y complejidad, el ruteo se vuelve crucial para manejar la creciente cantidad de tráfico y para asegurar que la red pueda escalar de manera eficiente sin degradar el rendimiento.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Recuperación ante Fallas:&lt;/strong&gt; Los protocolos de ruteo pueden adaptarse dinámicamente a los cambios en la topología de la red, como fallas en los enlaces o routers. Esto asegura la robustez y la confiabilidad de la red, redirigiendo el tráfico según sea necesario para evitar los puntos de falla.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;El ruteo es un componente crítico de la infraestructura de TI que soporta no solo Internet, sino también redes corporativas, redes de proveedores de servicios, y más. Es fundamental para la operación diaria de innumerables aplicaciones y servicios que dependen de la transmisión eficaz de datos a través de redes digitales.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 3&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;En las redes IP el ruteo puede configurarse en forma estática o en forma dinámica. Indique ventajas y desventajas de cada método&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El ruteo estático es un método donde las rutas a través de una red se configuran manualmente en los routers por los administradores de red. Las rutas permanecen constantes hasta que se cambian manualmente, lo que hace que este método sea simple y predecible. No utiliza recursos de red adicionales para el intercambio de información de rutas, lo que lo hace más seguro y menos propenso a fallos automáticos, pero requiere una gestión cuidadosa y puede ser impracticable en redes grandes o en rápido cambio.&lt;/p&gt;
&lt;p&gt;El ruteo dinámico utiliza protocolos de ruteo para permitir que los routers comuniquen entre sí la información sobre las rutas de manera automática. Los protocolos más comunes incluyen RIP, OSPF y BGP. Este método permite que la red se adapte automáticamente a los cambios, como fallas en los enlaces o cambios en la topología de la red, sin intervención manual. Aunque es más complejo de configurar inicialmente y utiliza más recursos del sistema, el ruteo dinámico escala eficazmente para redes grandes y cambiantes.&lt;/p&gt;
&lt;p&gt;En las redes IP, la configuración del ruteo puede realizarse de manera estática o dinámica, cada uno con sus propias ventajas y desventajas. Aquí se detallan las características principales de cada método:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Ruteo Estático&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ventajas:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Simplicidad:&lt;/strong&gt; La configuración estática es más simple y fácil de implementar en redes pequeñas donde las rutas no cambian frecuentemente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Control:&lt;/strong&gt; Ofrece un control total sobre las rutas que los paquetes deben seguir, permitiendo a los administradores de red definir explícitamente el camino más óptimo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Seguridad:&lt;/strong&gt; Al no utilizar intercambios de información de ruteo con otros routers, reduce la posibilidad de problemas de seguridad relacionados con protocolos de ruteo.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Desventajas:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Escalabilidad:&lt;/strong&gt; No es adecuado para redes grandes y dinámicas donde los cambios son frecuentes, ya que cualquier cambio requiere una reconfiguración manual.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Falta de Flexibilidad:&lt;/strong&gt; No puede responder automáticamente a cambios en la red, como fallas de enlaces o cambios en la topología.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mantenimiento:&lt;/strong&gt; Requiere una administración manual intensiva, lo que puede ser propenso a errores y consume tiempo.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Ruteo Dinámico&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ventajas:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Adaptabilidad:&lt;/strong&gt; Capaz de ajustarse automáticamente a cambios en la red, como la adición de rutas nuevas o fallas en los enlaces.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Menor Carga Administrativa:&lt;/strong&gt; Una vez configurados, los protocolos de ruteo dinámico mantienen las tablas de ruteo actualizadas sin intervención manual.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Escalabilidad:&lt;/strong&gt; Ideal para redes grandes y en constante cambio debido a su capacidad para manejar complejidades y cambios sin intervención humana directa.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Desventajas:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Complejidad:&lt;/strong&gt; Los protocolos de ruteo dinámico son más complejos de configurar y requieren un entendimiento profundo de cómo funcionan para optimizar su rendimiento.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Recursos:&lt;/strong&gt; Utilizan más recursos del sistema, como CPU y memoria, debido al procesamiento de algoritmos de ruteo y al intercambio de información de ruteo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Seguridad:&lt;/strong&gt; Más susceptibles a ataques de seguridad, como falsificación de rutas o inundación de la red con rutas inútiles.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Conclusión&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La elección entre ruteo estático y dinámico depende de las necesidades específicas de la red, la experiencia del administrador de la red, y los recursos disponibles. En redes pequeñas y estáticas, el ruteo estático puede ser más eficiente y fácil de manejar. En cambio, en redes grandes y complejas, el ruteo dinámico ofrece la flexibilidad y escalabilidad necesarias para mantener la red operando eficientemente ante cualquier cambio.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 4&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Una máquina conectada a una red pero no a Internet, ¿tiene tabla de ruteo?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Sí, una máquina conectada a una red pero no a Internet todavía tiene una tabla de ruteo. Esta tabla es fundamental para el funcionamiento de la red, incluso si la red es local y no tiene acceso a Internet. Aquí te explico por qué:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Función de la Tabla de Ruteo&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Enrutamiento de Tráfico Local:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La tabla de ruteo en una máquina controla cómo se envían los paquetes de datos desde esa máquina a otras direcciones dentro de la misma red. Incluso en una red cerrada (sin acceso a Internet), los dispositivos necesitan saber cómo llegar a otros dispositivos dentro de la misma red.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Gestión de Subredes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si la red local consta de múltiples subredes, la tabla de ruteo ayudará a dirigir el tráfico entre estas subredes de manera efectiva.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Interfaz de Loopback y Direcciones Locales:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Las tablas de ruteo también gestionan el tráfico destinado a la interfaz de loopback de la propia máquina (usualmente 127.0.0.1, que es utilizada para pruebas y procesos internos del sistema).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Rutas Predeterminadas:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Incluso sin acceso a Internet, una tabla de ruteo puede contener una ruta predeterminada (gateway) que se utilizaría para intentar enviar tráfico a direcciones fuera de la red local conocida.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Ejemplo de Tabla de Ruteo&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;En una máquina con Windows o Linux, la tabla de ruteo puede incluir entradas como:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rutas a la subred local, que dirigen el tráfico a direcciones dentro de la misma subred.&lt;/li&gt;
&lt;li&gt;Una ruta de loopback, que maneja el tráfico destinado a la propia máquina.&lt;/li&gt;
&lt;li&gt;Opcionalmente, una ruta predeterminada que apuntaría a un router o gateway, aunque no lleve a Internet.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Cómo Verificar la Tabla de Ruteo&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Puedes verificar la tabla de ruteo de una máquina usando comandos en el terminal:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En Windows: &lt;code&gt;route print&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;En Linux: &lt;code&gt;ip route show&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estos comandos mostrarán todas las rutas activas y cómo la máquina maneja el tráfico de red, independientemente de si tiene acceso a Internet o no. Esto demuestra que la tabla de ruteo es una parte integral de la configuración de red de cualquier dispositivo conectado a una red, ayudando a manejar el tráfico eficientemente dentro de los límites de esa red.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 5&lt;/h3&gt;
&lt;p&gt;Observando el siguiente gráfico y la tabla de ruteo del router D, responder:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/b22342d1-d4d4-4b47-a5f3-0b321aa25ca1&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;a. ¿Está correcta esa tabla de ruteo?&lt;/h4&gt;
&lt;p&gt;No&lt;/p&gt;
&lt;h4&gt;En caso de no estarlo, indicar el o los errores encontrados.&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;Detalle de Entradas de la Tabla de Ruteo de Router-D&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Red Destino: 153.10.20.128/27&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Iface:&lt;/strong&gt; eth1&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Error:&lt;/strong&gt; No hay error evidente; esta red está correctamente señalada como directamente conectada a través de eth1.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Red Destino: 10.0.0.4/30&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Iface:&lt;/strong&gt; eth0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Error:&lt;/strong&gt; Esta ruta aparece sin un next-hop definido. Debería especificar a través de qué router o interfaz específica se debe encaminar el tráfico para llegar a esta red. Además, no parece haber una conexión directa en la topología proporcionada que justifique esta configuración.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Red Destino: 10.0.0.0/30&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Iface:&lt;/strong&gt; eth5&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Error:&lt;/strong&gt; Esta entrada indica que la red está directamente conectada a eth5, lo cual es incorrecto según la topología. No hay conexión directa que justifique esta configuración.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Red Destino: 10.0.0.12/30&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Next-Hop:&lt;/strong&gt; 10.0.0.5/30&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Iface:&lt;/strong&gt; eth0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Error:&lt;/strong&gt; El formato del next-hop está incorrectamente expresado con una máscara (/30) que no debería aparecer en un campo de next-hop. Además, según la topología, no parece haber una justificación para que esta ruta utilice eth0, y la conexión parece no existir.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Red Destino: 10.0.0.16/30&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Next-Hop:&lt;/strong&gt; 10.0.0.10&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Iface:&lt;/strong&gt; eth3&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Error:&lt;/strong&gt; Aunque el next-hop y la interfaz parecen razonables, la topología no muestra claramente esta conexión. Se necesita verificar si este enlace realmente existe.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Red Destino: 10.0.0.8/30&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Next-Hop:&lt;/strong&gt; 10.0.0.9&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Iface:&lt;/strong&gt; eth5&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Error:&lt;/strong&gt; Esta configuración parece correcta si asumimos que Router-D se conecta directamente a través de eth5 hacia Router-B, lo cual es coherente con la topología.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Red Destino: 205.10.0.128/25&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Next-Hop:&lt;/strong&gt; 10.0.0.2&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Iface:&lt;/strong&gt; eth5&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Error:&lt;/strong&gt; Parece haber un error en la asignación del next-hop. Este no es visible en la topología proporcionada y debe ser revisado para asegurar que la ruta es factible.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Red Destino: 205.20.0.192/26&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Next-Hop:&lt;/strong&gt; 10.0.0.1&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Iface:&lt;/strong&gt; eth5&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Error:&lt;/strong&gt; Similar al anterior, el next-hop listado no es claro según la topología, y la interfaz parece ser incorrectamente asignada o la conexión no está bien documentada en el diagrama.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Red Destino: 163.10.5.64/27&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Next-Hop:&lt;/strong&gt; 10.0.0.10&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Iface:&lt;/strong&gt; eth3&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Error:&lt;/strong&gt; Aunque parece que el next-hop podría ser correcto, no hay evidencia clara en la topología de que esta conexión a través de eth3 sea la adecuada.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Recomendaciones:&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Revisión de la Topología:&lt;/strong&gt; Es fundamental revisar la documentación de la red y confirmar las conexiones físicas y lógicas entre los routers y las redes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Corrección de Next-Hops y Interfaces:&lt;/strong&gt; Asegurarse de que cada entrada de la tabla de ruteo tenga el next-hop y la interfaz correctos conforme a la topología real y las conexiones disponibles.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validación de Conectividad:&lt;/strong&gt; Comprobar mediante herramientas de diagnóstico como ping o traceroute que las rutas configuradas son efectivamente alcanzables y funcionales.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estos pasos ayudarán a asegurar que la red funcione de manera óptima y que el tráfico sea encaminado eficientemente a través de las rutas disponibles.&lt;/p&gt;
&lt;h4&gt;Escribir la tabla correctamente (no es necesario agregar las redes que conectan contra los ISPs)&lt;/h4&gt;
&lt;p&gt;| Red Destino       | Máscara | Next-Hop    | Interfaz |
|-------------------|---------|-------------|----------|
| 153.10.20.128     | /27     | -           | eth1     |
| 10.0.0.4          | /30     | -           | eth5     |
| 10.0.0.0          | /30     | 10.0.0.5    | eth5     |
| 10.0.0.12         | /30     | 10.0.0.5    | eth0     |
| 10.0.0.16         | /30     | 10.0.0.10   | eth3     |
| 205.10.128.0      | /25     | 10.0.0.2    | eth5     |
| 205.20.192.0      | /26     | 10.0.0.1    | eth5     |
| 205.20.128.0      | /26     | 10.0.0.5    | eth0     |
| 163.10.5.64       | /27     | 10.0.0.10   | eth3     |&lt;/p&gt;
&lt;p&gt;Para corregir la tabla de ruteo del Router-D, debemos asegurarnos de que cada entrada refleje correctamente las conexiones físicas y lógicas mostradas en la topología de la red proporcionada. Vamos a revisar y ajustar la tabla de ruteo basándonos en la información correcta, incluyendo la configuración adecuada de las interfaces y los next-hops.&lt;/p&gt;
&lt;h3&gt;Tabla de Ruteo Corregida para Router-D:&lt;/h3&gt;
&lt;p&gt;| Red Destino      | Máscara | Next-Hop    | Iface  |
|------------------|---------|-------------|--------|
| 153.10.20.128/27 | /27     | -           | eth1   |
| 10.0.0.0/30      | /30     | 10.0.0.9    | eth5   |
| 10.0.0.4/30      | /30     | 10.0.0.1    | eth5   |
| 10.0.0.8/30      | /30     | 10.0.0.5    | eth3   |
| 10.0.0.12/30     | /30     | 10.0.0.13   | eth3   |
| 10.0.0.16/30     | /30     | 10.0.0.17   | eth0   |
| 205.20.0.192/26  | /26     | 10.0.0.2    | eth5   |
| 205.10.0.128/25  | /25     | 10.0.0.2    | eth5   |
| 163.10.5.64/27   | /27     | 10.0.0.10   | eth3   |&lt;/p&gt;
&lt;h3&gt;Explicación de los Cambios:&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;153.10.20.128/27&lt;/strong&gt;: No se necesita cambiar; está directamente conectado a &lt;code&gt;eth1&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;10.0.0.0/30 hasta 10.0.0.16/30&lt;/strong&gt;: Se ajustaron los next-hops para reflejar las conexiones entre los routers según la topología:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;10.0.0.0/30&lt;/strong&gt;: Cambiado a &lt;code&gt;10.0.0.9&lt;/code&gt; via &lt;code&gt;eth5&lt;/code&gt;, ya que en la topología parece que este segmento se comunica a través de Router-C.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;10.0.0.4/30&lt;/strong&gt;: Ajustado a &lt;code&gt;10.0.0.1&lt;/code&gt; via &lt;code&gt;eth5&lt;/code&gt;, conectando a través de otro router intermedio que no se muestra detalladamente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;10.0.0.8/30&lt;/strong&gt;: Ajustado a &lt;code&gt;10.0.0.5&lt;/code&gt; via &lt;code&gt;eth3&lt;/code&gt;, que es la interfaz de conexión entre Router-D y Router-C.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;10.0.0.12/30&lt;/strong&gt;: Ajustado a &lt;code&gt;10.0.0.13&lt;/code&gt; via &lt;code&gt;eth3&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;10.0.0.16/30&lt;/strong&gt;: Cambiado a &lt;code&gt;10.0.0.17&lt;/code&gt; via &lt;code&gt;eth0&lt;/code&gt;, indicando que es directamente conectado.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;205.20.0.192/26 y 205.10.0.128/25&lt;/strong&gt;: Ajustado para mostrar el next-hop correcto a &lt;code&gt;10.0.0.2&lt;/code&gt; vía &lt;code&gt;eth5&lt;/code&gt;, indicando la ruta hacia estas redes a través de un router específico que maneja esa dirección.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;163.10.5.64/27&lt;/strong&gt;: No se necesita cambio; se confirma que la ruta es &lt;code&gt;10.0.0.10&lt;/code&gt; via &lt;code&gt;eth3&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Esta tabla ajustada proporciona un mejor reflejo de la topología física y las conexiones entre dispositivos en la red, asegurando que el tráfico se enrute eficientemente entre las subredes y los routers mostrados en el diagrama.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;TENGO QUE PREGUNTAR UN MONTON DE COSAS&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;b. Con la tabla de ruteo del punto anterior, Red D, ¿tiene salida a Internet? ¿Por qué?&lt;/h4&gt;
&lt;h4&gt;¿Cómo lo solucionaría? Suponga que los demás routers están correctamente configurados, con salida a Internet y que Rtr-D debe salir a Internet por Rtr-C&lt;/h4&gt;
&lt;p&gt;Según la tabla de ruteo proporcionada y la topología, el router D (Rtr-D) &lt;strong&gt;no tiene una ruta directa configurada para acceder a Internet&lt;/strong&gt;. Esto se debe a que en la tabla de ruteo no se observa ninguna entrada que dirija el tráfico hacia las direcciones IP de los ISP o una ruta predeterminada (default gateway) que permitiría al tráfico destinado a redes desconocidas ser dirigido hacia el ISP.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Solución:&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Para permitir que el Rtr-D tenga acceso a Internet a través de Rtr-C, necesitarías añadir una ruta predeterminada (default route) en la configuración de Rtr-D. Esto dirige todo el tráfico destinado a redes no especificadas directamente en la tabla de ruteo hacia un next-hop específico, que en este caso sería Rtr-C.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Agregar una ruta predeterminada:&lt;/strong&gt; Deberías configurar una ruta predeterminada en Rtr-D que apunte a la dirección IP de Rtr-C que está directamente conectada a Rtr-D o accesible a través de un next-hop que sea alcanzable. Basándonos en la topología y suponiendo que las conexiones están configuradas correctamente entre los routers, un ejemplo de comando para configurar esto en el router D podría ser (este ejemplo podría variar según el hardware y software del router):&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ip route add default via [IP de Rtr-C conectada a Rtr-D]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Donde &lt;code&gt;[IP de Rtr-C conectada a Rtr-D]&lt;/code&gt; debería ser reemplazado por la dirección IP de la interfaz de Rtr-C que Rtr-D puede alcanzar.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Confirmación:&lt;/strong&gt; Después de agregar la ruta predeterminada, asegúrate de que el tráfico pueda pasar efectivamente a través de Rtr-C hacia el ISP. Esto puede implicar configurar o verificar las rutas en Rtr-C para asegurar que el tráfico proveniente de Rtr-D pueda llegar a Internet y viceversa.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Agregar esta ruta asegura que cualquier solicitud de Rtr-D hacia Internet que no coincida con las redes más específicas en la tabla de ruteo local sea enviada a Rtr-C, y desde allí hacia el ISP correspondiente.&lt;/p&gt;
&lt;h4&gt;c. Teniendo en cuenta lo aplicado en el punto anterior, si Rtr-C tuviese la siguiente entrada en su tabla de ruteo, ¿qué sucedería si desde una PC en Red D se quiere acceder un servidor con IP 163.10.5.15?&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;Red Destino Mask Next-Hop Iface
163.10.5.0 /24 10.0.0.9 eth1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Si desde una PC en Red D se intenta acceder a un servidor con IP 163.10.5.15 y Rtr-C tiene la siguiente entrada en su tabla de ruteo:&lt;/p&gt;
&lt;p&gt;| Red Destino  | Mask  | Next-Hop | Iface |
|--------------|-------|----------|-------|
| 163.10.5.0   | /24   | 10.0.0.9 | eth1  |&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Análisis de la situación:&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Dirección de Destino&lt;/strong&gt;: La IP 163.10.5.15 cae dentro del rango de la red 163.10.5.0/24, que está explícitamente mencionada en la tabla de ruteo de Rtr-C.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configuración de la Ruta&lt;/strong&gt;: La ruta indica que el tráfico destinado a la red 163.10.5.0/24 debería ser dirigido al next-hop 10.0.0.9 a través de la interfaz eth1.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Verificación del Next-Hop&lt;/strong&gt;: El next-hop 10.0.0.9 necesita ser una dirección IP válida y alcanzable desde Rtr-C. Si esta dirección IP no es alcanzable (es decir, si no hay una ruta válida hacia 10.0.0.9 desde Rtr-C o si esta IP no existe en la configuración de red actual), el tráfico destinado al servidor 163.10.5.15 no podrá ser entregado correctamente.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Posibles Problemas&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Inaccesibilidad del Next-Hop&lt;/strong&gt;: Si el next-hop 10.0.0.9 no es accesible desde Rtr-C, cualquier intento de conexión desde Red D hacia la dirección 163.10.5.15 fallaría.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configuración de Red Incorrecta&lt;/strong&gt;: Si hay un error en la topología o configuración de la red que impide el acceso al next-hop especificado, se producirá un fallo en el enrutamiento.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Posibles Soluciones:&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Verificar y Corregir la Ruta en Rtr-C&lt;/strong&gt;: Asegurarse de que la dirección IP de next-hop 10.0.0.9 es correcta y accesible. Si es incorrecta o inaccesible, ajustar la entrada de ruteo para reflejar una dirección de next-hop válida y alcanzable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diagnóstico de Red&lt;/strong&gt;: Utilizar herramientas como &lt;code&gt;ping&lt;/code&gt; o &lt;code&gt;traceroute&lt;/code&gt; desde Rtr-C hacia 10.0.0.9 para verificar la conectividad y determinar si el next-hop está efectivamente en la ruta de transmisión del tráfico.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si se resuelven estos problemas y se asegura que el next-hop es correcto y accesible, el tráfico desde una PC en Red D debería poder alcanzar el servidor en la dirección 163.10.5.15 sin problemas.&lt;/p&gt;
&lt;h4&gt;d. ¿Es posible aplicar sumarización en la tabla del router Rtr-D? ¿Por qué? ¿Qué debería suceder para poder aplicarla?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Sumarización de Rutas&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La sumarización de rutas en redes es una técnica utilizada para reducir el número de rutas que un router necesita almacenar en su tabla de ruteo. Esto se logra mediante la combinación de varias redes más pequeñas en una única entrada de ruteo más grande y más general que abarca todas las redes individuales. La sumarización es útil porque:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Reduce el tamaño de la tabla de ruteo&lt;/strong&gt;: Menos entradas en la tabla de ruteo implican menos uso de memoria y procesamiento.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mejora la eficiencia del enrutamiento&lt;/strong&gt;: Menos entradas simplifican el proceso de toma de decisiones de enrutamiento.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Disminuye la propagación de cambios de ruteo&lt;/strong&gt;: Menos entradas reducen la cantidad de actualizaciones de rutas necesarias cuando ocurren cambios en la red.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Aplicación de la Sumarización en Rtr-D&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Para determinar si es posible aplicar la sumarización en la tabla de ruteo del router Rtr-D, consideramos las redes que Rtr-D conoce y cómo están distribuidas. Observando las redes conectadas y las direcciones de los enlaces:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Redes Directamente Conectadas&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;10.0.0.4/30&lt;/li&gt;
&lt;li&gt;10.0.0.8/30&lt;/li&gt;
&lt;li&gt;10.0.0.12/30&lt;/li&gt;
&lt;li&gt;10.0.0.16/30&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Redes a través de Next-Hops&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;205.10.128.0/25&lt;/li&gt;
&lt;li&gt;205.20.192.0/26&lt;/li&gt;
&lt;li&gt;163.10.5.64/27&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Pasos para Evaluar la Sumarización:&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Examinar Direcciones IP&lt;/strong&gt;: Verificar si las redes están en bloques contiguos que puedan ser representados por una única dirección de red con una máscara de subred más amplia. Por ejemplo, las redes 10.0.0.4/30, 10.0.0.8/30, 10.0.0.12/30 y 10.0.0.16/30 son contiguas y podrían sumarizarse en una red más grande si sus direcciones base se ajustan a una sola red con una máscara que cubra todos esos rangos.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ajustar la Máscara de Subred&lt;/strong&gt;: Determinar la nueva máscara de subred que pueda englobar todas las redes relevantes. En el caso de las redes 10.0.0.4/30 a 10.0.0.16/30, podrían sumarizarse bajo una máscara /29 si cubre desde 10.0.0.4 hasta 10.0.0.19.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Modificar las Tablas de Ruteo&lt;/strong&gt;: Cambiar las entradas individuales por la entrada sumarizada en la tabla de ruteo del Rtr-D y asegurarse de que los next-hops sean coherentes y correctos para la nueva ruta sumarizada.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Consideraciones:&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Consistencia&lt;/strong&gt;: Todas las rutas que se sumarizarán deben tener el mismo next-hop. Si las rutas sumarizadas van a diferentes next-hops, no pueden ser sumarizadas eficientemente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alcance de la Sumarización&lt;/strong&gt;: La sumarización debe hacerse de manera que no se superpongan con otras redes no relacionadas y debe reflejar correctamente la topología de la red.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para aplicar la sumarización, se necesita que las redes a sumarizar tengan una secuencia y contigüidad lógica, y que no se interpongan configuraciones de otros routers que podrían requerir conocimiento de las redes individuales para procesos específicos de enrutamiento o políticas de seguridad. Si estas condiciones se cumplen, se puede aplicar la sumarización para simplificar la gestión de la red en Rtr-D.&lt;/p&gt;
&lt;h4&gt;e. La sumarización aplicada en el punto anterior, ¿se podría aplicar en Rtr-B? ¿Por qué?&lt;/h4&gt;
&lt;p&gt;La posibilidad de aplicar sumarización en Rtr-B, al igual que en cualquier otro router, depende de cómo estén organizadas las redes conectadas y cómo estén distribuidas las direcciones IP en la tabla de ruteo. Vamos a analizar los elementos específicos en Rtr-B para determinar si la sumarización es viable:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Consideraciones para Sumarización en Rtr-B&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Redes Directamente Conectadas&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rtr-B conecta directamente con la Red B y Red E, además de enlaces punto a punto con otros routers.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Distribución de Direcciones IP&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Red B: 205.20.0.192/26&lt;/li&gt;
&lt;li&gt;Red E: 205.20.0.128/26&lt;/li&gt;
&lt;li&gt;Enlaces punto a punto, como por ejemplo 10.0.0.12/30, 10.0.0.4/30, entre otros.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Análisis para Sumarización:&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Contigüidad de Redes&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Las direcciones de Red B y Red E son contiguas y parte del mismo bloque /24, pero las máscaras de subred y la distribución de las redes hacen que una sumarización directa no sea completamente eficiente, ya que no todas las direcciones de la subred más grande están utilizadas.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Requerimientos de Ruteo&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Las redes de Rtr-B podrían necesitar acceso directo y explícito a ciertas direcciones IP específicas, lo cual podría complicar una sumarización que generalize demasiado las rutas.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Efecto en el Enrutamiento&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sumarizar en Rtr-B podría simplificar la tabla de ruteo local, pero es esencial asegurarse de que todos los caminos críticos y las políticas de acceso están adecuadamente representados en la nueva tabla de ruteo sumarizada. Además, la sumarización incorrecta podría ocultar rutas necesarias para otros routers y hosts en la red.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Conclusión:&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La sumarización en Rtr-B es técnicamente posible, especialmente para las redes internas (Red B y Red E), pero debe manejarse con cuidado para asegurarse de que no se pierda acceso detallado necesario para el control de tráfico y las políticas de seguridad de la red. También es crucial considerar cómo esta sumarización afectaría el enrutamiento hacia y desde otros routers y redes externas.&lt;/p&gt;
&lt;p&gt;En resumen, mientras que Rtr-D tiene un escenario más favorable para la sumarización debido a la concentración de redes internas similares y conexiones punto a punto, Rtr-B puede enfrentar más desafíos debido a la necesidad de mantener accesibilidad precisa a múltiples subredes menores y enlaces externos.&lt;/p&gt;
&lt;h4&gt;f. Escriba la tabla de ruteo de Rtr-B teniendo en cuenta lo siguiente:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Debe llegarse a todas las redes del gráfico&lt;/li&gt;
&lt;li&gt;Debe salir a Internet por Rtr-A&lt;/li&gt;
&lt;li&gt;Debe pasar por Rtr-D para llegar a Red D&lt;/li&gt;
&lt;li&gt;Sumarizar si es posible&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;| Red Destino     | Máscara | Next-Hop    | Iface  |
|-----------------|---------|-------------|--------|
| 0.0.0.0/0       | /0      | 10.0.0.1    | eth1   |  # Default route hacia Internet via Rtr-A
| 153.10.20.128/27| /27     | 10.0.0.5    | eth0   |  # Red D via Rtr-D
| 163.10.5.64/27  | /27     | 10.0.0.9    | eth0   |  # Red C via Rtr-C
| 205.10.0.128/25 | /25     | 10.0.0.1    | eth1   |  # Red A via Rtr-A
| 205.20.0.192/26 | /26     | -           | eth0   |  # Red B directamente conectada
| 205.20.0.128/26 | /26     | 10.0.0.5    | eth0   |  # Red E via Rtr-D&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Explicación de la tabla de ruteo:&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;0.0.0.0/0&lt;/strong&gt;: La ruta por defecto (default route) redirige todo el tráfico destinado a Internet a través de Rtr-A, que está configurado para ser el gateway de salida a Internet.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;153.10.20.128/27&lt;/strong&gt;: Las direcciones IP dentro de esta subred se alcanzan a través de Rtr-D. Esta ruta es específica para alcanzar la Red D y está encaminada a través de la interfaz que conecta con Rtr-D.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;163.10.5.64/27&lt;/strong&gt;: Similarmente, esta ruta permite el acceso a la Red C, encaminando el tráfico a través de Rtr-C, que es el router que conecta directamente con esa subred.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;205.10.0.128/25&lt;/strong&gt;: Esta es la ruta hacia la Red A, que se alcanza a través de Rtr-A, indicando que cualquier paquete destinado a esa red debe ser enviado a través de la interfaz que se conecta con Rtr-A.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;205.20.0.192/26&lt;/strong&gt;: Esta entrada indica que la Red B está directamente conectada al Rtr-B y por lo tanto no requiere un next-hop porque los dispositivos están en la misma red local.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;205.20.0.128/26&lt;/strong&gt;: La Red E también se alcanza a través de Rtr-D, utilizando la misma interfaz que se usa para alcanzar la Red D.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Esta configuración asegura que el tráfico fluya correctamente hacia todas las redes internas y hacia Internet, siguiendo las rutas más directas o especificadas según la topología dada.&lt;/p&gt;
&lt;h4&gt;g. Si Rtr-C pierde conectividad contra ISP-2, ¿es posible restablecer el acceso a Internet sin esperar a que vuelva la conectividad entre esos dispositivos?&lt;/h4&gt;
&lt;p&gt;Para restablecer el acceso a Internet en Rtr-C después de perder conectividad con ISP-2, se podría considerar una ruta alternativa a través de otro ISP o router disponible en la red, si existe alguno. En el caso de esta topología, aquí están los pasos para redirigir el tráfico a través de ISP-1 utilizando Rtr-A:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configuración de Rtr-C&lt;/strong&gt;: Rtr-C necesitaría una ruta de respaldo configurada que apunte hacia Rtr-A para acceder a Internet a través de ISP-1. Esto implicaría ajustar la tabla de ruteo de Rtr-C para incluir una nueva entrada de ruta por defecto (0.0.0.0/0) con Rtr-A como next-hop si aún no existe.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configuración de Rtr-A&lt;/strong&gt;: Asegurarse de que Rtr-A tiene capacidad para manejar el tráfico adicional y que sus tablas de ruteo están configuradas para permitir el tráfico de Rtr-C hacia ISP-1.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configuración del protocolo de enrutamiento&lt;/strong&gt;: Si se utilizan protocolos de enrutamiento dinámico (como OSPF, EIGRP, BGP), se deberían hacer los ajustes necesarios para propagar la nueva ruta a través de la red.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Validación y pruebas&lt;/strong&gt;: Realizar pruebas para asegurar que el tráfico está siendo enrutado correctamente a través de Rtr-A hacia ISP-1 y que los servicios de Internet se restauran sin problemas.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Monitorización&lt;/strong&gt;: Monitorear la red para cualquier problema de rendimiento o cuellos de botella que puedan surgir debido al cambio de ruta, especialmente si Rtr-A no estaba previamente dimensionado para manejar todo el tráfico de Internet de Rtr-C.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Implementar una solución de redundancia de este tipo mejora la resiliencia de la red y minimiza el tiempo de inactividad ante fallos en uno de los enlaces de salida a Internet.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 6&lt;/h3&gt;
&lt;p&gt;Evalúe para cada caso si el mensaje llegará a destino, saltos que tomará y tipo de respuesta recibida en el emisor&lt;/p&gt;
&lt;h4&gt;Router 1 route -n&lt;/h4&gt;
&lt;p&gt;| Destination | Gateway  | Genmask        | Iface |
|-------------|----------|----------------|-------|
| 10.0.0.0    | 0.0.0.0  | 255.255.255.0  | eth0  |
| 10.0.3.0    | 0.0.0.0  | 255.255.255.0  | eth1  |
| 10.0.4.0    | 0.0.0.0  | 255.255.255.0  | eth2  |
| 10.0.0.0    | 10.0.3.1 | 255.255.0.0    | eth1  |
| 0.0.0.0     | 10.0.0.2 | 0.0.0.0        | eth0  |&lt;/p&gt;
&lt;h4&gt;Router 2 route -n&lt;/h4&gt;
&lt;p&gt;| Destination | Gateway  | Genmask          | Iface |
|-------------|----------|------------------|-------|
| 10.0.0.0    | 0.0.0.0  | 255.255.255.0    | eth0  |
| 10.0.1.0    | 0.0.0.0  | 255.255.255.0    | eth1  |
| 10.0.5.0    | 0.0.0.0  | 255.255.255.0    | eth2  |
| 0.0.0.0     | 10.0.0.1 | 0.0.0.0          | eth0  |&lt;/p&gt;
&lt;h4&gt;Router 3 route -n&lt;/h4&gt;
&lt;p&gt;| Destination | Gateway   | Genmask        | Iface |
|-------------|-----------|----------------|-------|
| 10.0.2.0    | 0.0.0.0   | 255.255.255.0  | eth0  |
| 10.0.3.0    | 0.0.0.0   | 255.255.255.0  | eth1  |
| 10.0.7.0    | 0.0.0.0   | 255.255.255.0  | eth2  |
| 0.0.0.0     | 10.0.2.1  | 0.0.0.0        | eth0  |&lt;/p&gt;
&lt;h4&gt;Router 4 route -n&lt;/h4&gt;
&lt;p&gt;| Destination | Gateway   | Genmask        | Iface |
|-------------|-----------|----------------|-------|
| 10.0.1.0    | 0.0.0.0   | 255.255.255.0  | eth0  |
| 10.0.2.0    | 0.0.0.0   | 255.255.255.0  | eth1  |
| 10.0.6.0    | 0.0.0.0   | 255.255.255.0  | eth2  |
| 0.0.0.0     | 10.0.1.1  | 255.0.0.0      | eth0  |&lt;/p&gt;
&lt;p&gt;Evalúe para cada caso si el mensaje llegará a destino, saltos que tomará y tipo de respuesta recibida en el emisor.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/9e98fc68-0ac8-4a14-956c-33ac657237fa&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Un mensaje ICMP enviado por PC-B a PC-C.&lt;/li&gt;
&lt;li&gt;Un mensaje ICMP enviado por PC-C a PC-B.&lt;/li&gt;
&lt;li&gt;Un mensaje ICMP enviado por PC-C a 8.8.8.8.&lt;/li&gt;
&lt;li&gt;Un mensaje ICMP enviado por PC-B a 8.8.8.8.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Gracias por el gráfico más claro. Ahora, con esta información y las correcciones indicadas anteriormente, vamos a revisar y responder tus consultas sobre el tráfico entre PC-B y PC-C, y sus conexiones a Internet.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Un mensaje ICMP enviado por PC-B a PC-C:&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Ruta del mensaje&lt;/strong&gt;: PC-B -&gt; Router2 -&gt; Router4 -&gt; PC-C.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tipo de respuesta en el emisor&lt;/strong&gt;: PC-B recibirá una respuesta de eco ICMP si la configuración de las redes permite la comunicación directa y no hay reglas de firewall que lo impidan.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Un mensaje ICMP enviado por PC-C a PC-B:&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Ruta del mensaje&lt;/strong&gt;: PC-C -&gt; Router4 -&gt; Router2 -&gt; PC-B.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tipo de respuesta en el emisor&lt;/strong&gt;: PC-C recibirá una respuesta de eco ICMP de manera similar, asumiendo que no existen bloqueos en la ruta.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Un mensaje ICMP enviado por PC-C a 8.8.8.8:&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Ruta del mensaje&lt;/strong&gt;: PC-C -&gt; Router4 -&gt; Router2 -&gt; Router1 -&gt; Internet.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tipo de respuesta en el emisor&lt;/strong&gt;: Si la red está correctamente configurada para salida a Internet y las rutas están correctamente establecidas hacia ISP-1 o ISP-2, PC-C debería poder recibir una respuesta de eco ICMP de 8.8.8.8, suponiendo que no haya bloqueos en la ruta.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Un mensaje ICMP enviado por PC-B a 8.8.8.8:&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Ruta del mensaje&lt;/strong&gt;: PC-B -&gt; Router2 -&gt; Router1 -&gt; Internet.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tipo de respuesta en el emisor&lt;/strong&gt;: De manera similar a PC-C, PC-B debería recibir una respuesta siempre que las rutas estén correctamente configuradas y no existan bloqueos.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Es crucial que las tablas de enrutamiento en cada router estén configuradas correctamente para asegurar que todos los tráficos fluyan adecuadamente y se enrutencen hacia los destinos correctos. La configuración de las tablas de enrutamiento que proporcioné anteriormente y cualquier ajuste necesario basado en la nueva información del gráfico deberían ayudar a garantizar la conectividad deseada.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;DHCP y NAT&lt;/h2&gt;
&lt;h3&gt;Ejercicio 7&lt;/h3&gt;
&lt;p&gt;Con la máquina virtual con acceso a Internet realice las siguientes observacionesrespecto de la autoconfiguración IP vía DHCP:&lt;/p&gt;
&lt;h4&gt;a. Inicie una captura de tráfico Wireshark utilizando el filtro bootp para visualizar únicamente tráfico de DHCP.&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;redes@debian:~$ sudo dhclient -r
redes@debian:~$ sudo dhclient -v
Internet Systems Consortium DHCP Client 4.4.1
Copyright 2004-2018 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/veth4976b9c/36:ad:a6:94:34:78
Sending on   LPF/veth4976b9c/36:ad:a6:94:34:78
Listening on LPF/vethbcd283a/8a:11:86:ee:91:f4
Sending on   LPF/vethbcd283a/8a:11:86:ee:91:f4
Listening on LPF/veth399a010/56:5f:67:57:11:a0
Sending on   LPF/veth399a010/56:5f:67:57:11:a0
Listening on LPF/veth5d6224c/92:17:59:53:d1:6b
Sending on   LPF/veth5d6224c/92:17:59:53:d1:6b
Listening on LPF/docker0/02:42:a7:c8:88:ce
Sending on   LPF/docker0/02:42:a7:c8:88:ce
Listening on LPF/br-c8ee5a5c812e/02:42:e3:95:9b:6c
Sending on   LPF/br-c8ee5a5c812e/02:42:e3:95:9b:6c
Listening on LPF/enp0s3/08:00:27:4e:7c:74
Sending on   LPF/enp0s3/08:00:27:4e:7c:74
Sending on   Socket/fallback
DHCPDISCOVER on veth4976b9c to 255.255.255.255 port 67 interval 4
DHCPDISCOVER on vethbcd283a to 255.255.255.255 port 67 interval 6
DHCPDISCOVER on veth399a010 to 255.255.255.255 port 67 interval 8
DHCPDISCOVER on veth5d6224c to 255.255.255.255 port 67 interval 4
DHCPDISCOVER on docker0 to 255.255.255.255 port 67 interval 4
DHCPDISCOVER on br-c8ee5a5c812e to 255.255.255.255 port 67 interval 5
DHCPDISCOVER on enp0s3 to 255.255.255.255 port 67 interval 4
DHCPOFFER of 10.0.2.15 from 10.0.2.2
DHCPREQUEST for 10.0.2.15 on enp0s3 to 255.255.255.255 port 67
DHCPACK of 10.0.2.15 from 10.0.2.2
RTNETLINK answers: File exists
bound to 10.0.2.15 -- renewal in 40680 seconds.
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;b. En una terminal de root, ejecute el comando | ESTE NO ME FUNCIONA&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ sudo /sbin/dhclient eth0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;y analice el intercambio de paquetes capturado&lt;/p&gt;
&lt;h4&gt;c. Analice la información registrada en el archivo /var/lib/dhcp/dhclient.leases, ¿cuál parece su función?&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;redes@debian:~$ cat /var/lib/dhcp/dhclient.leases
lease {
  interface &quot;enp0s3&quot;;
  fixed-address 10.0.2.15;
  filename &quot;Redes y Comunicaciones v22.2.pxe&quot;;
  option subnet-mask 255.255.255.0;
  option routers 10.0.2.2;
  option dhcp-lease-time 86400;
  option dhcp-message-type 5;
  option domain-name-servers 186.130.128.250,186.130.129.250;
  option dhcp-server-identifier 10.0.2.2;
  renew 1 2024/06/24 07:27:38;
  rebind 1 2024/06/24 17:09:38;
  expire 1 2024/06/24 20:09:38;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;El archivo &lt;code&gt;/var/lib/dhcp/dhclient.leases&lt;/code&gt; almacena los detalles de las concesiones (leases) de DHCP que ha recibido el cliente DHCP del sistema para sus interfaces de red. Cada concesión en este archivo representa un conjunto de parámetros de configuración de red asignados por un servidor DHCP. La función principal de este archivo es permitir que el cliente DHCP mantenga un registro de las concesiones activas y pasadas, y gestione la renovación, la nueva vinculación y la expiración de estas concesiones. Vamos a analizar la información mostrada en el archivo:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Estructura de una Concesión DHCP&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Interface&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Indica la interfaz de red (&lt;code&gt;&quot;enp0s3&quot;&lt;/code&gt;) para la cual se obtuvo la concesión DHCP.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Fixed-address&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;fixed-address 10.0.2.15&lt;/code&gt; especifica la dirección IP que el servidor DHCP ha asignado a la interfaz.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Filename&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El archivo &lt;code&gt;&quot;Redes y Comunicaciones v22.2.pxe&quot;&lt;/code&gt; podría ser un archivo de configuración o un archivo de arranque que el servidor DHCP proporciona para procesos de arranque en red, como PXE (Preboot eXecution Environment).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Options&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Subnet Mask&lt;/strong&gt;: &lt;code&gt;255.255.255.0&lt;/code&gt; define la máscara de subred para la red de la IP asignada.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Routers&lt;/strong&gt;: &lt;code&gt;10.0.2.2&lt;/code&gt; es la dirección del router o gateway predeterminado para salir a otras redes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DHCP Lease Time&lt;/strong&gt;: &lt;code&gt;86400&lt;/code&gt; segundos (24 horas) es el tiempo de validez de la concesión antes de que deba renovarse.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DHCP Message Type&lt;/strong&gt;: &lt;code&gt;5&lt;/code&gt; indica que este mensaje es una confirmación (ACK) de la concesión.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Domain Name Servers&lt;/strong&gt;: Lista los servidores DNS (&lt;code&gt;186.130.128.250, 186.130.129.250&lt;/code&gt;) proporcionados para la resolución de nombres de dominio.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Timing&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Renew&lt;/strong&gt;: &lt;code&gt;1 2024/06/24 07:27:38&lt;/code&gt; indica cuándo el cliente intentará renovar esta concesión (antes de que expire).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rebind&lt;/strong&gt;: &lt;code&gt;1 2024/06/24 17:09:38&lt;/code&gt; indica cuándo el cliente intentará contactar cualquier servidor DHCP para renovar la concesión si no ha conseguido renovarla con el servidor original.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Expire&lt;/strong&gt;: &lt;code&gt;1 2024/06/24 20:09:38&lt;/code&gt; indica cuándo la concesión expirará y la dirección IP deberá ser liberada si no se ha renovado.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Función del Archivo&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El archivo &lt;code&gt;dhclient.leases&lt;/code&gt; sirve para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mantener la Configuración de Red&lt;/strong&gt;: Asegura que el cliente puede mantener su configuración de red entre reinicios o cuando el servidor DHCP no está disponible temporalmente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Renovación Automática&lt;/strong&gt;: Facilita la automatización del proceso de renovación de la IP para mantener la conectividad de red sin intervención manual.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Registro de Actividad&lt;/strong&gt;: Proporciona un registro histórico de las asignaciones de IP y configuraciones de red recibidas y utilizadas por el cliente.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este archivo es crucial para la gestión dinámica de la configuración de red en entornos donde las direcciones IP y otros parámetros de red pueden cambiar con frecuencia.&lt;/p&gt;
&lt;h4&gt;d. Ejecute el siguiente comando para eliminar información temporal asignada por el servidor DHCP.&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;$ rm /var/lib/dhcp/dhclient.leases
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;El comando &lt;code&gt;rm /var/lib/dhcp/dhclient.leases&lt;/code&gt; se utiliza para eliminar el archivo &lt;code&gt;dhclient.leases&lt;/code&gt;, que contiene las asignaciones de arrendamiento DHCP actuales y pasadas obtenidas por el cliente DHCP en el sistema. Este archivo almacena detalles críticos como la dirección IP asignada, la máscara de subred, la puerta de enlace predeterminada, los servidores DNS, y los tiempos de renovación y expiración del arrendamiento.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Función del comando:&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Eliminar información de arrendamiento&lt;/strong&gt;: Al eliminar este archivo, se borra toda la información sobre los arrendamientos DHCP anteriores y actuales. Esto significa que el cliente DHCP no tiene registro de las asignaciones anteriores.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Reinicio de configuración DHCP&lt;/strong&gt;: La eliminación de este archivo puede ser útil si se están experimentando problemas con la configuración de red actual que se sospecha son causados por un arrendamiento DHCP corrupto o inadecuado. Al borrar este archivo y reiniciar el servicio de red o reiniciar el cliente DHCP, se fuerza al cliente a solicitar un nuevo arrendamiento, posiblemente resolviendo problemas de configuración.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Renovación de configuración de red&lt;/strong&gt;: Es especialmente útil en escenarios donde la dirección IP o la configuración del servidor DHCP han cambiado. Al eliminar el archivo y reiniciar el servicio DHCP, se garantiza que el cliente solicite y reciba la configuración más actualizada basada en el estado actual del servidor DHCP.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Consideraciones:&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Riesgo de Conectividad&lt;/strong&gt;: Eliminar este archivo mientras el sistema está en uso podría resultar en una pérdida temporal de conectividad de red hasta que el cliente DHCP adquiera un nuevo arrendamiento.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Necesidad de reinicio&lt;/strong&gt;: Después de eliminar el archivo, es recomendable reiniciar el servicio de red o el cliente DHCP para que inmediatamente intente obtener un nuevo arrendamiento DHCP.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Permisos&lt;/strong&gt;: Este comando debe ejecutarse con privilegios de superusuario (sudo), ya que los archivos en &lt;code&gt;/var/lib/dhcp/&lt;/code&gt; generalmente están protegidos y solo accesibles para el usuario root.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este procedimiento es una forma común de diagnosticar y resolver problemas de red relacionados con configuraciones DHCP obsoletas o incorrectas.&lt;/p&gt;
&lt;h4&gt;e. En una terminal de root, vuelva a ejecutar el comando $ sudo /sbin/dhclient eth0 y analice el intercambio de paquetes capturado nuevamente ¿a que se debió la diferencia con lo observado en el punto “b”?&lt;/h4&gt;
&lt;p&gt;Cuando se ejecuta el comando &lt;code&gt;sudo /sbin/dhclient eth0&lt;/code&gt; después de haber eliminado el archivo de arrendamientos DHCP, el cliente DHCP comienza un nuevo proceso para obtener un arrendamiento de dirección IP desde el servidor DHCP. Dado que se ha eliminado el archivo de arrendamientos, el cliente actúa como si fuera la primera vez que solicita una dirección IP, sin ningún conocimiento de arrendamientos anteriores.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Análisis del intercambio de paquetes capturado:&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;DHCPDISCOVER&lt;/strong&gt;: El cliente envía un mensaje DHCPDISCOVER en el que busca servidores DHCP disponibles en la red.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DHCPOFFER&lt;/strong&gt;: Los servidores DHCP que reciben el DHCPDISCOVER responden con un DHCPOFFER, ofreciendo una dirección IP al cliente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DHCPREQUEST&lt;/strong&gt;: El cliente responde al servidor DHCP con un DHCPREQUEST, solicitando la dirección IP que se le ofreció.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DHCPACK&lt;/strong&gt;: El servidor finaliza el proceso enviando un DHCPACK al cliente, confirmando que la dirección IP ha sido asignada al cliente.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;La diferencia principal en este proceso, en comparación con el observado antes de eliminar el archivo &lt;code&gt;dhclient.leases&lt;/code&gt;, es que todo el proceso de negociación DHCP se realiza desde cero, sin ningún contexto o estado anterior que pudiera influir en el proceso de asignación de IP.&lt;/p&gt;
&lt;h4&gt;f. Tanto en “b” como en “e”, ¿qué información es brindada al host que realiza la petición DHCP, además de la dirección IP que tiene que utilizar?&lt;/h4&gt;
&lt;p&gt;En ambas situaciones, es decir, en los intercambios iniciales y después de reiniciar el proceso DHCP, la información proporcionada al host incluye:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirección IP&lt;/strong&gt;: La dirección IP que el host debe usar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Máscara de subred&lt;/strong&gt;: La máscara de red asociada a la dirección IP asignada.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Puerta de enlace predeterminada (routers)&lt;/strong&gt;: La dirección IP del router o gateway a través del cual el host puede alcanzar otras redes, incluida Internet.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Servidores DNS&lt;/strong&gt;: Direcciones IP de los servidores de nombres de dominio (DNS) que el host debe usar para la resolución de nombres de dominio.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tiempo de arrendamiento&lt;/strong&gt;: La duración del arrendamiento de la dirección IP; después de este período, el cliente debe renovar el arrendamiento.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Otras opciones&lt;/strong&gt;: Dependiendo de la configuración del servidor DHCP, pueden incluirse opciones adicionales como el servidor de tiempo (NTP), el servidor WINS, el nombre de dominio, entre otros.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este conjunto de información permite al host configurarse adecuadamente para la comunicación en la red y asegurar la conectividad y la resolución de nombres necesarias para operar eficazmente dentro de la red y en Internet.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 8&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Qué es NAT y para qué sirve? De un ejemplo de su uso y analice cómo funcionaría en ese entorno.&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ayuda: analizar el servicio de Internet hogareño en el cual varios dispositivos usan Internet simultáneamente&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;¿Qué es NAT?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;NAT&lt;/strong&gt; (Network Address Translation) es una técnica utilizada para remapear una dirección IP en una red interna a una dirección IP diferente en una red externa. El propósito principal de NAT es permitir que múltiples dispositivos en una red privada accedan a internet o a otra red utilizando una única dirección IP pública.&lt;/p&gt;
&lt;h4&gt;¿Para qué sirve NAT?&lt;/h4&gt;
&lt;p&gt;NAT sirve principalmente para dos propósitos:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Conservación de direcciones IP&lt;/strong&gt;: Debido a la escasez de direcciones IPv4, NAT permite que múltiples dispositivos compartan una única dirección IP pública, lo que reduce la necesidad de direcciones IP únicas para cada dispositivo en la red.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Seguridad&lt;/strong&gt;: Al ocultar las direcciones IP internas de una red y permitiendo solo conexiones iniciadas internamente, NAT proporciona una capa de seguridad que protege a los dispositivos dentro de una red privada de accesos directos desde internet.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Ejemplo de uso de NAT&lt;/h4&gt;
&lt;p&gt;Un ejemplo común del uso de NAT es en un servicio de Internet hogareño. Consideremos un hogar donde varios dispositivos, como smartphones, tablets, y computadoras, necesitan acceder a internet simultáneamente. La mayoría de los hogares solo tienen una dirección IP pública asignada por su proveedor de servicios de Internet (ISP).&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Configuración&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Router&lt;/strong&gt;: Tiene una interfaz conectada a internet con una dirección IP pública (ej. 203.0.113.1) y otra interfaz que maneja la red local con una dirección privada (ej. 192.168.1.1).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dispositivos&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;PC: 192.168.1.100&lt;/li&gt;
&lt;li&gt;Smartphone: 192.168.1.101&lt;/li&gt;
&lt;li&gt;Tablet: 192.168.1.102&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Funcionamiento de NAT en este entorno&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Inicio de una conexión&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Supongamos que la PC desea acceder a un sitio web. Envía un paquete IP donde la dirección de origen es 192.168.1.100 y la dirección de destino es la del servidor web.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Traducción en el router&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Cuando el paquete llega al router, NAT traduce la dirección IP origen interna (192.168.1.100) a la dirección IP pública del router (203.0.113.1). Además, el router cambia el número de puerto origen a un número único para mantener el seguimiento de la sesión (por ejemplo, de puerto 12345 a puerto 40001).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Envío a internet&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;El paquete modificado, con la dirección origen como 203.0.113.1:40001, es enviado a internet hacia el servidor web.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Respuesta del servidor web&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;El servidor web responde al paquete enviando la respuesta a la dirección IP pública del router (203.0.113.1) al puerto 40001.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reversión de la traducción en el router&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Cuando el router recibe la respuesta, consulta la tabla NAT para determinar a qué dirección IP y puerto internos debe dirigir la respuesta. Reconoce que el puerto 40001 corresponde al dispositivo con IP 192.168.1.100.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Envío al dispositivo interno&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;El router envía la respuesta al dispositivo original (PC) en la dirección 192.168.1.100, restableciendo los parámetros originales del paquete.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Este proceso permite que múltiples dispositivos utilicen simultáneamente la misma dirección IP pública sin conflictos, cada uno manteniendo sus propias sesiones únicas con servidores en internet, gracias a la traducción de direcciones y puertos realizada por NAT.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 9&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Qué especifica la RFC 1918 y cómo se relaciona con NAT?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;RFC 1918: Address Allocation for Private Internets&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La &lt;strong&gt;RFC 1918&lt;/strong&gt;, titulada &quot;Address Allocation for Private Internets&quot;, es un documento de la Internet Engineering Task Force (IETF) que especifica rangos de direcciones IP que están designados para uso privado dentro de redes corporativas, hogares y organizaciones, sin que estas direcciones sean enrutable en la internet pública global. Esta especificación fue publicada en febrero de 1996 para abordar y aliviar la escasez de direcciones IPv4, permitiendo a múltiples entidades usar la misma dirección IP sin conflicto en redes separadas.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Rangos de Direcciones en RFC 1918&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La RFC 1918 define los siguientes rangos de direcciones IP que pueden ser utilizados en redes privadas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;10.0.0.0 - 10.255.255.255&lt;/strong&gt; (10/8 prefix)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Este rango permite casi 16.7 millones de direcciones IP y es comúnmente utilizado en redes de gran escala.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;172.16.0.0 - 172.31.255.255&lt;/strong&gt; (172.16/12 prefix)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Este rango ofrece 1,048,576 direcciones IP, adecuado para uso en redes de tamaño medio a grande.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;192.168.0.0 - 192.168.255.255&lt;/strong&gt; (192.168/16 prefix)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Con 65,536 direcciones disponibles, este rango es el más utilizado en redes domésticas y pequeñas oficinas.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Relación de la RFC 1918 con NAT&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La relación entre la RFC 1918 y NAT (Network Address Translation) es intrínseca y vital por varias razones:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Uso Compartido de Direcciones Públicas&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dado que las direcciones definidas en la RFC 1918 no son enrutables en Internet, NAT es necesario para permitir que dispositivos con estas direcciones privadas accedan a recursos en Internet. NAT traduce estas direcciones privadas a direcciones IP públicas válidas durante la comunicación a través de Internet, y viceversa.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Conservación de Direcciones IP&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NAT, junto con los rangos de la RFC 1918, permite que múltiples dispositivos compartan una única dirección IP pública. Esto es críticamente importante dada la limitación de direcciones IPv4 disponibles globalmente.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Seguridad y Aislamiento&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Las direcciones de la RFC 1918 son inherentemente más seguras desde el punto de vista de que no son accesibles directamente desde Internet. NAT proporciona un nivel adicional de seguridad al no exponer las direcciones IP internas al mundo exterior, actuando como un componente de una configuración de firewall.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Flexibilidad en la Administración de Redes&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Organizaciones y hogares pueden usar internamente cualquier estructura de direccionamiento IP de la RFC 1918 que deseen sin preocuparse por conflictos de direcciones con otras redes en Internet. Esto facilita la gestión de redes locales y la planificación de la expansión sin tener que solicitar más direcciones IP públicas.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Uso Práctico&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;En la práctica, casi cualquier red que accede a Internet usa NAT en combinación con direcciones IP de la RFC 1918 para optimizar el uso de las direcciones IP públicas disponibles, mantener la seguridad de la red y simplificar la administración de la red interna. Esto se implementa típicamente en routers residenciales, firewalls empresariales y en muchos otros dispositivos de red.&lt;/p&gt;
&lt;p&gt;En resumen, la RFC 1918 y NAT son fundamentales para el funcionamiento eficiente y seguro de redes privadas en el contexto de una infraestructura global de Internet limitada en términos de direcciones IP disponibles.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 10&lt;/h3&gt;
&lt;h4&gt;En la red de su casa o trabajo verifique la dirección IP de su computadora y luego acceda a www.cualesmiip.com. ¿Qué observa? ¿Puede explicar qué sucede?&lt;/h4&gt;
&lt;p&gt;Cuando verificas la dirección IP de tu computadora en la red de tu casa o trabajo, y luego comparas esa dirección con la que ves en un sitio como www.cualesmiip.com, es probable que observes dos direcciones IP diferentes. Aquí explicaré por qué sucede esto y qué significa:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Verificación de la Dirección IP Local&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;En Windows&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Puedes abrir el Símbolo del sistema (CMD) y escribir &lt;code&gt;ipconfig&lt;/code&gt;. Esto mostrará la configuración de IP de todas las interfaces de red de tu computadora. La dirección IP que ves bajo &quot;IPv4 Address&quot; para tu conexión activa (por ejemplo, Ethernet o Wi-Fi) es la dirección IP privada asignada a tu computadora dentro de tu red local.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;En macOS&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Abre Terminal y escribe &lt;code&gt;ifconfig&lt;/code&gt;. Busca la interfaz activa (como en0 o en1 para Wi-Fi o Ethernet) y mira la entrada &lt;code&gt;inet&lt;/code&gt;, que te dará la dirección IP privada de tu dispositivo.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Comparación con www.cualesmiip.com&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Cuando visitas www.cualesmiip.com, el sitio muestra la dirección IP pública desde la cual tu tráfico de Internet parece estar originándose. Esta dirección es diferente de la dirección IP privada de tu computadora porque lo que estás viendo es la dirección IP que tu proveedor de Internet (ISP) asigna a tu conexión a Internet.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Por Qué Son Diferentes?&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;NAT (Network Address Translation)&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;En la mayoría de los hogares y pequeñas empresas, múltiples dispositivos (como tu computadora, teléfono y tablet) se conectan a Internet a través de un router que usa NAT.&lt;/li&gt;
&lt;li&gt;NAT permite que todos los dispositivos en tu red local compartan una única dirección IP pública para acceder a Internet, mientras que cada dispositivo tiene su propia dirección IP privada dentro de la red local.&lt;/li&gt;
&lt;li&gt;Cuando accedes a un sitio como www.cualesmiip.com, el sitio no ve la dirección IP privada de tu computadora; en cambio, ve la dirección IP pública que tu ISP ha asignado a tu router.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Ejemplo Práctico&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Supongamos que la dirección IP local de tu computadora es &lt;code&gt;192.168.1.10&lt;/code&gt; y la dirección IP pública mostrada en www.cualesmiip.com es &lt;code&gt;203.0.113.45&lt;/code&gt;. Aquí está lo que sucede:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dentro de tu red&lt;/strong&gt;: Tu computadora usa &lt;code&gt;192.168.1.10&lt;/code&gt; para comunicarse con otros dispositivos dentro de tu hogar o empresa, incluido tu router.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;En Internet&lt;/strong&gt;: Tu router usa la dirección IP pública &lt;code&gt;203.0.113.45&lt;/code&gt; para comunicarse con todos los sitios web y servicios en línea. Así que, cuando tu computadora envía una solicitud a Internet, el router traduce tu dirección IP privada a la dirección IP pública usando NAT, y esa es la dirección que ven los sitios web.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Conclusión&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Este proceso ilustra cómo NAT facilita una gestión eficiente de las direcciones IP, permitiendo que múltiples dispositivos compartan una única dirección IP pública. Además, NAT ayuda a proteger tus dispositivos al ocultar las direcciones IP privadas de la exposición directa a Internet. Esto es especialmente importante en el contexto actual donde las direcciones IPv4 son limitadas y la seguridad de la red es crucial.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 11&lt;/h3&gt;
&lt;p&gt;Resuelva las consignas que se dan a continuación.&lt;/p&gt;
&lt;h4&gt;a. En base a la siguiente topología y a las tablas que se muestran, complete los datos que faltan.&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/6bc539e2-37d7-43d8-95cf-26adf2ae2918&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;PC-A (ss)
Local Address:Port Peer Address:Port
192.168.1.2:49273 _________________
_________________ 190.50.10.63:25
192.168.1.2:_____ 190.50.10.81:8080
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;PC-B (ss)
Local Address:Port Peer Address:Port
192.168.1.3:52734 _________________
192.168.1.3:39275 _________________
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;SRV-A (ss)
Local Address:Port Peer Address:Port
190.50.10.63:80 205.20.0.29:25192
190.50.10.63:25 205.20.0.29:41823
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;SRV-B (ss)
Local Address:Port Peer Address:Port
190.50.10.81:8080 205.20.0.29:16345
190.50.10.81:8081 205.20.0.29:51091
190.50.10.81:8080 205.20.0.29:9123
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;RTR-1 (Tabla de NAT)
Lado LAN Lado WAN
192.168.1.2:49273 205.20.0.29:25192
192.168.1.2:51238 _________________
192.168.1.3:52734 205.20.0.29:51091
192.168.1.2:37484 205.20.0.29:41823
192.168.1.3:39275 205.20.0.29:9123
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;PC-A&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Primera fila&lt;/strong&gt;: Sabemos que el puerto local 49273 está siendo traducido a 25192 en el WAN. Buscamos una conexión que coincida con el puerto 25192 en el servidor.
&lt;ul&gt;
&lt;li&gt;Desde &lt;code&gt;SRV-A&lt;/code&gt;:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;190.50.10.63:80 205.20.0.29:25192&lt;/code&gt; corresponde a la dirección de destino para 49273. Entonces, completamos:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;192.168.1.2:49273 190.50.10.63:80
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;La segunda fila está relacionada con una conexión hacia &lt;code&gt;190.50.10.63:25&lt;/code&gt;. Buscamos la entrada de NAT que muestra un puerto WAN que se conecta a este servicio.
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;190.50.10.63:25 205.20.0.29:41823&lt;/code&gt; indica que el puerto 37484 en PC-A está conectado a este puerto.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;192.168.1.2:37484 190.50.10.63:25
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;La tercera fila muestra una conexión a &lt;code&gt;190.50.10.81:8080&lt;/code&gt;. Sabemos por la tabla de SRV-B que existen tres conexiones WAN posibles. Debemos encontrar el puerto LAN correspondiente en PC-A que aún no se ha listado:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;192.168.1.2:51238&lt;/code&gt; aún no está asignado y no hay otros detalles que nos ayuden a determinar la conexión exacta, así que se queda como desconocido por ahora.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;192.168.1.2:51238 190.50.10.81:8080
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;PC-B&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Ambas filas&lt;/strong&gt; necesitan la dirección de destino:
&lt;ul&gt;
&lt;li&gt;La conexión &lt;code&gt;192.168.1.3:52734&lt;/code&gt; tiene su traducción WAN en &lt;code&gt;205.20.0.29:51091&lt;/code&gt;, que se conecta a &lt;code&gt;190.50.10.81:8081&lt;/code&gt; en SRV-B.
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;192.168.1.3:52734 190.50.10.81:8081
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;La conexión &lt;code&gt;192.168.1.3:39275&lt;/code&gt; se traduce a &lt;code&gt;205.20.0.29:9123&lt;/code&gt;, que se conecta a &lt;code&gt;190.50.10.81:8080&lt;/code&gt; en SRV-B.
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;192.168.1.3:39275 190.50.10.81:8080
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;RTR-1 (Tabla de NAT)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Para la entrada faltante de &lt;code&gt;192.168.1.2:51238&lt;/code&gt;, se necesita el puerto WAN correspondiente que aún no hemos determinado con precisión. Puede ser un puerto como &lt;code&gt;205.20.0.29:16345&lt;/code&gt; que se muestra conectando a &lt;code&gt;190.50.10.81:8080&lt;/code&gt; en SRV-B, haciendo una suposición lógica:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;192.168.1.2:51238 205.20.0.29:16345
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Estas son las inferencias basadas en la información disponible. Cualquier suposición incorrecta se debe a la falta de información explícita en las tablas proporcionadas.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;PC-A (ss)
Local Address:Port Peer Address:Port
192.168.1.2:49273 190.50.10.63:80
192.168.1.2:37484 190.50.10.63:25
192.168.1.2:51238  190.50.10.81:8080
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;PC-B (ss)
Local Address:Port Peer Address:Port
192.168.1.3:52734 190.50.10.81:8081
192.168.1.3:39275 190.50.10.81:8080
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;SRV-A (ss)
Local Address:Port Peer Address:Port
190.50.10.63:80 205.20.0.29:25192
190.50.10.63:25 205.20.0.29:41823
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;SRV-B (ss)
Local Address:Port Peer Address:Port
190.50.10.81:8080 205.20.0.29:16345
190.50.10.81:8081 205.20.0.29:51091
190.50.10.81:8080 205.20.0.29:9123
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;RTR-1 (Tabla de NAT)
Lado LAN Lado WAN
192.168.1.2:49273 205.20.0.29:25192
192.168.1.2:51238 205.20.0.29:16345
192.168.1.3:52734 205.20.0.29:51091
192.168.1.2:37484 205.20.0.29:41823
192.168.1.3:39275 205.20.0.29:9123
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;b. En base a lo anterior, responda:&lt;/h4&gt;
&lt;h4&gt;i. ¿Cuántas conexiones establecidas hay y entre qué dispositivos?&lt;/h4&gt;
&lt;p&gt;Para analizar cuántas conexiones establecidas hay y entre qué dispositivos, revisamos la información de las conexiones activas (&lt;code&gt;ss&lt;/code&gt;) en los dispositivos PC-A, PC-B, y los servidores SRV-A y SRV-B, así como la tabla de NAT en el router RTR-1.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso a Paso del Análisis de Conexiones&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Examinar conexiones en PC-A:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Conexión 1:&lt;/strong&gt; &lt;code&gt;192.168.1.2:49273&lt;/code&gt; conecta con &lt;code&gt;190.50.10.63:80&lt;/code&gt; - Esta es una conexión de PC-A hacia SRV-A usando HTTP.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conexión 2:&lt;/strong&gt; &lt;code&gt;192.168.1.2:37484&lt;/code&gt; conecta con &lt;code&gt;190.50.10.63:25&lt;/code&gt; - Esta es una conexión de PC-A hacia SRV-A usando SMTP para enviar correo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conexión 3:&lt;/strong&gt; &lt;code&gt;192.168.1.2:(algún puerto)&lt;/code&gt; conecta con &lt;code&gt;190.50.10.81:8080&lt;/code&gt; - Esta es una conexión de PC-A hacia SRV-B usando HTTP en un puerto no especificado localmente.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Examinar conexiones en PC-B:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Conexión 4:&lt;/strong&gt; &lt;code&gt;192.168.1.3:52734&lt;/code&gt; conecta con un destino no especificado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conexión 5:&lt;/strong&gt; &lt;code&gt;192.168.1.3:39275&lt;/code&gt; conecta con un destino no especificado.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dado que los destinos específicos no se mencionan, necesitamos confirmar qué servicios están siendo utilizados revisando las conexiones entrantes en los servidores y la correspondencia en la tabla NAT.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Revisar conexiones en SRV-A (ss):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Recibe Conexión 1&lt;/strong&gt; de &lt;code&gt;205.20.0.29:25192&lt;/code&gt; que corresponde a la traducción NAT de PC-A &lt;code&gt;192.168.1.2:49273&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Recibe Conexión 2&lt;/strong&gt; de &lt;code&gt;205.20.0.29:41823&lt;/code&gt; que corresponde a la traducción NAT de PC-A &lt;code&gt;192.168.1.2:37484&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Revisar conexiones en SRV-B (ss):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Recibe Conexión 3&lt;/strong&gt; desde &lt;code&gt;205.20.0.29:16345&lt;/code&gt; que debe ser la traducción NAT de PC-A en un puerto no especificado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Recibe Conexión 4&lt;/strong&gt; desde &lt;code&gt;205.20.0.29:51091&lt;/code&gt; que corresponde a la traducción NAT de PC-B &lt;code&gt;192.168.1.3:52734&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Recibe Conexión 5&lt;/strong&gt; desde &lt;code&gt;205.20.0.29:9123&lt;/code&gt; que corresponde a la traducción NAT de PC-B &lt;code&gt;192.168.1.3:39275&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Tabla de NAT en RTR-1:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Confirma que las conexiones de PC-A y PC-B se están traduciendo correctamente a través del router usando direcciones externas.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Resumen de Conexiones Establecidas:&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;En total, hay &lt;strong&gt;cinco conexiones establecidas&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tres conexiones desde PC-A a SRV-A y SRV-B&lt;/strong&gt;: Dos hacia SRV-A (HTTP y SMTP) y una hacia SRV-B (HTTP).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dos conexiones desde PC-B a SRV-B&lt;/strong&gt;: Ambas conexiones son HTTP a diferentes servicios.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estas conexiones reflejan las interacciones entre las computadoras personales y los servidores en diferentes puertos, facilitadas por el router RTR-1 a través de la traducción de direcciones de red (NAT).&lt;/p&gt;
&lt;h4&gt;ii. ¿Quién inició cada una de las conexiones? ¿Podrían haberse iniciado en sentido inverso? ¿Por qué? Investigue qué es port forwarding y si serviría como solución en este caso.&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;¿Quién inició cada una de las conexiones?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Las conexiones en redes TCP/IP generalmente se inician por el dispositivo que envía el primer paquete de sincronización (SYN) para establecer la conexión. Basándonos en los registros de la tabla de NAT y las capturas de las sesiones (&lt;code&gt;ss&lt;/code&gt;), podemos determinar quién inició cada conexión:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Conexiones desde PC-A hacia SRV-A y SRV-B:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PC-A inició todas las conexiones hacia los servidores (SRV-A y SRV-B), como se evidencia por las direcciones IP y los puertos locales en la tabla de NAT y las conexiones &lt;code&gt;ss&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Conexiones desde PC-B hacia SRV-B:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PC-B inició las conexiones hacia SRV-B, lo cual se refleja en la tabla de NAT donde PC-B usa puertos locales para conectarse a servicios en SRV-B.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;¿Podrían haberse iniciado las conexiones en sentido inverso?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;En general, los servidores están configurados para escuchar en puertos específicos y esperar conexiones de los clientes. Los clientes (como PC-A y PC-B) son quienes típicamente inician las conexiones hacia estos puertos conocidos en los servidores (por ejemplo, HTTP en el puerto 80 o SMTP en el puerto 25).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Servidores hacia PCs:&lt;/strong&gt; Los servidores no suelen iniciar conexiones hacia las PC en una red, excepto en situaciones específicas como respuestas a solicitudes de los clientes o en arquitecturas push donde el servidor debe iniciar la comunicación (poco común en los contextos mencionados).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;¿Qué es port forwarding y cómo podría aplicarse?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Port forwarding&lt;/strong&gt; (reenvío de puertos) es una técnica utilizada en NAT para dirigir la comunicación externa a un puerto específico hacia un dispositivo dentro de la red local. Es especialmente útil en situaciones donde necesitas que servicios dentro de una red privada sean accesibles desde el exterior.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Aplicación de Port Forwarding en este escenario:&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si un servicio en PC-A o PC-B necesita ser accesible desde el exterior, port forwarding podría configurarse en RTR-1 para reenviar las solicitudes entrantes en puertos específicos a las direcciones IP internas correspondientes de PC-A o PC-B.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Viabilidad de iniciar conexiones desde servidores:&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sin port forwarding, no es factible que SRV-A o SRV-B inicien conexiones directamente a las PCs debido a la naturaleza de la NAT, que por defecto solo maneja conexiones iniciadas internamente. Sin embargo, si se configura port forwarding apropiadamente, los servidores externos podrían, en teoría, &quot;iniciar&quot; conexiones a servicios específicos dentro de la red que han sido expuestos explícitamente.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Conclusión:&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;En este caso, port forwarding serviría para permitir que servicios específicos en PCs sean accesibles desde el exterior, pero no alteraría el hecho de que las conexiones entre PCs y servidores generalmente se inician desde las PCs hacia servidores que están escuchando pasivamente.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Las siguientes eran mejor hacerlas en papel supongo&lt;/p&gt;
&lt;h3&gt;Ejercicio 12&lt;/h3&gt;
&lt;h3&gt;Ejercicio 13&lt;/h3&gt;
&lt;h3&gt;Ejercicio 14&lt;/h3&gt;
&lt;h3&gt;Ejercicio 15&lt;/h3&gt;</content:encoded><h:img src="/_astro/thumbnail.CW35VvjN.jpg"/><enclosure url="/_astro/thumbnail.CW35VvjN.jpg"/></item><item><title>Practica 9 Redes | IPv6</title><link>https://fabianmartinezrincon.com/blog/practica-9-redes</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/practica-9-redes</guid><description>Practica 9 de Redes y Comunicaciones</description><pubDate>Tue, 07 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Indice&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-1&quot;&gt;Ejercicio 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-2&quot;&gt;Ejercicio 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-3&quot;&gt;Ejercicio 3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-4&quot;&gt;Ejercicio 4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-5&quot;&gt;Ejercicio 5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-6&quot;&gt;Ejercicio 6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-7&quot;&gt;Ejercicio 7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-8&quot;&gt;Ejercicio 8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-9&quot;&gt;Ejercicio 9&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-10&quot;&gt;Ejercicio 10&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejercicio-11&quot;&gt;Ejercicio 11&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 1&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Qué es IPv6? ¿Por qué es necesaria su implementación?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;IPv6 (Internet Protocol version 6) es la versión más reciente del protocolo de comunicaciones Internet Protocol (IP), diseñado para reemplazar a IPv4, la versión que ha estado en uso desde 1983. IPv6 fue desarrollado por la Internet Engineering Task Force (IETF) para abordar la eventual escasez de direcciones IP disponibles bajo IPv4, así como para mejorar la eficiencia y la seguridad en la transmisión de datos en la red.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Características principales de IPv6:&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Espacio de direcciones ampliado:&lt;/strong&gt; Mientras que IPv4 utiliza direcciones de 32 bits, limitadas a aproximadamente 4.3 mil millones de direcciones únicas, IPv6 utiliza direcciones de 128 bits, lo que permite aproximadamente (3.4 \times 10^{38}) direcciones, un número casi ilimitado, suficiente para asignar direcciones únicas a cada dispositivo en el mundo.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Formato de direccionamiento simplificado:&lt;/strong&gt; IPv6 tiene un sistema de notación hexadecimal que hace que las direcciones sean más fáciles de interpretar para los humanos y reduce la complejidad de las tablas de enrutamiento en los routers.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Autoconfiguración:&lt;/strong&gt; Los dispositivos en una red IPv6 pueden configurarse automáticamente cuando se conectan a una red, gracias a la autoconfiguración sin estado y con estado, lo que simplifica la gestión de red.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Mejoras en el enrutamiento y en la gestión de paquetes:&lt;/strong&gt; IPv6 incluye mejoras en el enrutamiento y en la gestión de paquetes que permiten una mayor eficiencia y un enrutamiento más directo entre los dispositivos de internet.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Seguridad integrada:&lt;/strong&gt; IPv6 fue diseñado teniendo en cuenta la seguridad. El protocolo IPsec, que proporciona cifrado y autenticación, es un componente mandatorio en IPv6, a diferencia de IPv4, donde es opcional.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;¿Por qué es necesaria su implementación?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La implementación de IPv6 es necesaria por varias razones clave:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Escasez de direcciones IPv4:&lt;/strong&gt; El número de dispositivos en Internet ha crecido exponencialmente, y las direcciones IPv4 están prácticamente agotadas. IPv6, con su vasto espacio de direcciones, ofrece una solución a largo plazo a este problema.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Crecimiento de Internet de las Cosas (IoT):&lt;/strong&gt; Con el aumento de dispositivos IoT, cada uno requiere una dirección IP. IPv6 hace posible que cada dispositivo tenga su propia dirección única, facilitando así su gestión y conectividad.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Necesidad de una conectividad más eficiente:&lt;/strong&gt; IPv6 reduce la necesidad de técnicas como NAT (Network Address Translation), lo que permite una comunicación end-to-end más transparente y eficiente.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Soporte a nuevos servicios y experiencias de usuario:&lt;/strong&gt; Con capacidades como la autoconfiguración y la mejor seguridad, IPv6 puede soportar mejor los servicios de próxima generación y mejorar la experiencia del usuario en aplicaciones críticas y en nuevos desarrollos tecnológicos.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En conclusión, la implementación de IPv6 es fundamental para el futuro de una Internet en expansión y cada vez más conectada, asegurando la conectividad global y la continua innovación en tecnologías de red.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 2&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Por qué no es necesario el campo “Header Length” en IPv6?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El campo &quot;Header Length&quot; no es necesario en IPv6 debido a las siguientes razones principales:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Tamaño Fijo del Encabezado&lt;/strong&gt;: A diferencia de IPv4, donde el encabezado tiene una longitud variable debido a las opciones que pueden o no estar presentes, IPv6 tiene un encabezado de tamaño fijo de 40 bytes. Este diseño simplificado elimina la necesidad de un campo específico que indique la longitud del encabezado, ya que siempre es constante.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Simplificación del Procesamiento&lt;/strong&gt;: Al tener un tamaño de encabezado fijo, los dispositivos de red pueden procesar los paquetes de manera más eficiente. Esta uniformidad reduce la complejidad del procesamiento de paquetes en los routers y otros dispositivos de red, facilitando operaciones más rápidas y eficientes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Extension Headers&lt;/strong&gt;: En lugar de integrar todas las opciones directamente en el encabezado principal como en IPv4, IPv6 utiliza encabezados de extensión que se colocan entre el encabezado base y la carga útil. Cada encabezado de extensión tiene su propio campo de longitud, por lo que el tratamiento de opciones adicionales es modular y no afecta la longitud del encabezado base.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Optimización del Rendimiento&lt;/strong&gt;: Al eliminar la variabilidad en la longitud del encabezado y al no requerir el procesamiento de un campo de longitud del encabezado, IPv6 puede mejorar el rendimiento en el procesamiento de paquetes, lo que es crítico para manejar el volumen y la velocidad del tráfico moderno de Internet.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En resumen, la eliminación del campo &quot;Header Length&quot; en IPv6 es un reflejo del diseño optimizado del protocolo, que busca eficiencia, velocidad en el procesamiento de paquetes y una mayor facilidad en la configuración y gestión de la red.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 3&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿En qué se diferencia el checksum de IPv4 e IPv6? Y en cuánto a los campos checksum de TCP y UDP, ¿sufren alguna modificación en cuanto a su obligatoriedad de cálculo?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;IPv4 e IPv6 manejan el checksum (suma de verificación) de manera diferente, tanto en el encabezado del propio protocolo IP como en los protocolos de transporte como TCP y UDP. Aquí detallo las diferencias y las modificaciones en los campos de checksum para TCP y UDP cuando se transiciona de IPv4 a IPv6.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Checksum en IPv4:&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Encabezado de IPv4&lt;/strong&gt;: IPv4 incluye un campo de checksum que se utiliza para verificar la integridad del encabezado del paquete IP. Este checksum se recalcula en cada salto (por cada router que procesa el paquete) debido a que el campo TTL (Time to Live) del encabezado cambia, lo que implica una necesidad constante de recalculo del checksum para asegurar que no haya errores en el encabezado.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Checksum en IPv6:&lt;/code&gt;&lt;/p&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;&lt;strong&gt;Encabezado de IPv6&lt;/strong&gt;: A diferencia de IPv4, IPv6 no incluye un campo de checksum en el encabezado. Esta decisión de diseño se tomó por varias razones:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reducción de la Carga del Procesador en los Routers&lt;/strong&gt;: Eliminar el checksum del encabezado de IPv6 reduce la carga de procesamiento en los routers, ya que no necesitan recalcular el checksum en cada salto.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fiabilidad de las Capas Inferiores&lt;/strong&gt;: Las capas de enlace de datos modernas (como Ethernet) ya incorporan sus propios mecanismos de detección de errores, lo que hace menos crítico un checksum en el encabezado de IP.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mejora del Rendimiento&lt;/strong&gt;: Evitar el recalculo del checksum mejora la velocidad de procesamiento de los paquetes en los dispositivos de red.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Checksum de TCP y UDP en IPv4 e IPv6:&lt;/code&gt;&lt;/p&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;TCP y UDP&lt;/strong&gt;: Tanto en IPv4 como en IPv6, los protocolos TCP y UDP utilizan un campo de checksum para verificar la integridad de toda la sección del paquete que incluye el encabezado y los datos de estos protocolos. Sin embargo, hay diferencias importantes en cómo se calcula este checksum en los dos contextos de protocolo IP.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Obligatoriedad en IPv6&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En IPv4, el checksum para UDP es opcional; si se establece en cero, significa que no se está utilizando. Sin embargo, en IPv6, el cálculo del checksum es obligatorio tanto para TCP como para UDP. Esta obligatoriedad busca garantizar la integridad de los datos en la transmisión, considerando que no se realiza verificación de integridad en el encabezado de IPv6.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pseudo-Encabezado&lt;/strong&gt;: Tanto en IPv4 como en IPv6, el checksum de TCP y UDP se calcula utilizando un pseudo-encabezado que incluye la dirección IP de origen y destino, el protocolo y la longitud del segmento. En IPv6, este pseudo-encabezado se modifica para incluir las direcciones IPv6 de origen y destino, la longitud del payload y un campo de &quot;Next Header&quot; que especifica el tipo de protocolo encapsulado (TCP o UDP).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Conclusión:&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La principal diferencia en el manejo del checksum entre IPv4 e IPv6 es la eliminación del checksum del encabezado en IPv6, que simplifica el procesamiento en routers y mejora el rendimiento de la red. En cuanto a TCP y UDP, la transición a IPv6 hace obligatorio el cálculo del checksum para asegurar la integridad de los datos, reflejando la importancia de la fiabilidad en la entrega de datos en la red moderna.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 4&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Qué sucede con el campo “Opciones” en IPv6? ¿Existe, en IPv6, alguna forma de enviar información opcional?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;En IPv6, el manejo de opciones difiere significativamente en comparación con IPv4, principalmente para mejorar la eficiencia y la flexibilidad del procesamiento de paquetes en los dispositivos de red.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Qué sucede con el campo &quot;Opciones&quot; en IPv6?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El campo &quot;Opciones&quot;, como existía en IPv4 en el encabezado de protocolo base, no se encuentra en el encabezado fijo de IPv6. En IPv4, este campo podía usarse para funciones adicionales como seguridad, pruebas de ruta, y más, pero podía complicar el procesamiento del encabezado debido a su variabilidad de longitud.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Forma de enviar información opcional en IPv6:&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Encabezados de Extensión&lt;/strong&gt;: IPv6 introduce los &quot;encabezados de extensión&quot; para manejar las opciones que en IPv4 se incluirían directamente en el encabezado del paquete. Estos encabezados de extensión son opcionales y se colocan entre el encabezado base de IPv6 y la carga útil del paquete. Esto permite que el encabezado base tenga una estructura fija y simple, facilitando el procesamiento rápido por parte de los routers.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Tipos de Encabezados de Extensión&lt;/strong&gt;: Existen varios tipos de encabezados de extensión, cada uno diseñado para un propósito específico, como el manejo de rutas (Routing Header), la fragmentación (Fragment Header), opciones de seguridad (Hop-by-Hop Options Header), entre otros. Estos encabezados permiten la flexibilidad de enviar información adicional sin sobrecargar todos los paquetes con detalles innecesarios que solo algunos necesitan.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Procesamiento Eficiente&lt;/strong&gt;: Los encabezados de extensión están diseñados para ser procesados solo por los nodos que necesitan interpretarlos. Por ejemplo, un encabezado de extensión de &quot;Hop-by-Hop Options&quot; debe ser procesado por cada router en la ruta del paquete, mientras que otros encabezados podrían ser inspeccionados solo por el destinatario final o por nodos específicos en la ruta.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Simplificación de la Cabecera Principal&lt;/strong&gt;: Al trasladar las opciones a encabezados de extensión, IPv6 simplifica su cabecera principal. Esto agiliza el procesamiento en los routers, ya que no tienen que lidiar con la variabilidad de la longitud del encabezado principal durante el enrutamiento básico.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En resumen, IPv6 maneja las opciones de manera más modular y eficiente a través de los encabezados de extensión. Esta metodología permite una mayor flexibilidad y un procesamiento más rápido en comparación con IPv4, adecuándose mejor a las necesidades actuales y futuras de las redes globales de datos.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 5&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Si quisiese que IPv6 soporte una nueva funcionalidad, ¿cómo lo haría?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Introducir una nueva funcionalidad en IPv6 generalmente implica el desarrollo y la implementación de un nuevo encabezado de extensión o la modificación de uno existente. Este proceso es parte del continuo esfuerzo de estandarización que realiza la comunidad de ingeniería de Internet, liderada por organizaciones como la IETF (Internet Engineering Task Force). Aquí te explico paso a paso cómo se podría agregar una nueva funcionalidad a IPv6:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Paso 1: Identificación de la Necesidad&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Análisis de Requerimientos&lt;/strong&gt;: Determinar qué necesidad específica debe ser cubierta por la nueva funcionalidad. Esto puede surgir de limitaciones tecnológicas actuales, nuevas aplicaciones de red, o requisitos de seguridad mejorados.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Evaluación Preliminar&lt;/strong&gt;: Considerar si la funcionalidad puede ser implementada mediante los encabezados de extensión existentes o si es necesario desarrollar un nuevo tipo de encabezado.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Paso 2: Propuesta de Diseño&lt;/code&gt;&lt;/p&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Diseño del Encabezado de Extensión&lt;/strong&gt;: Si se necesita un nuevo encabezado de extensión, diseñar su estructura detallada. Esto incluye definir el formato del encabezado, los tipos de campos involucrados, y la lógica para su procesamiento.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Documentación&lt;/strong&gt;: Redactar un borrador de propuesta detallada que describa la funcionalidad, el diseño del encabezado, casos de uso, y beneficios esperados. Este documento debería seguir las directrices de la IETF para las propuestas de nuevos estándares.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Paso 3: Revisión y Estándarización&lt;/code&gt;&lt;/p&gt;
&lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Presentación a la IETF&lt;/strong&gt;: Someter la propuesta al grupo de trabajo relevante dentro de la IETF, como el grupo de trabajo de IPv6 (IPv6 WG) o cualquier otro pertinente.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Revisión Comunitaria y Retroalimentación&lt;/strong&gt;: La propuesta será revisada por expertos y otros miembros de la comunidad. Este proceso puede incluir discusiones en línea, presentaciones en reuniones de la IETF, y la solicitud de comentarios públicos (RFC).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Iteraciones de Diseño&lt;/strong&gt;: Basándose en la retroalimentación, realizar modificaciones necesarias al diseño del encabezado de extensión. Este es un proceso iterativo que puede requerir varias rondas de revisión.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;Paso 4: Aprobación y Implementación&lt;/code&gt;&lt;/p&gt;
&lt;ol start=&quot;8&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Aprobación del Estándar&lt;/strong&gt;: Una vez que la propuesta ha sido suficientemente revisada y mejorada, se busca la aprobación final de la IETF para que se convierta en un estándar.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Desarrollo de Software&lt;/strong&gt;: Desarrolladores de sistemas operativos y fabricantes de dispositivos implementan el nuevo encabezado de extensión en sus productos. Esto incluye actualizaciones de firmware para routers y actualizaciones de software para sistemas operativos que soportan IPv6.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Despliegue y Monitoreo&lt;/strong&gt;: Una vez implementada, la nueva funcionalidad comienza a desplegarse en redes operativas. Se realiza un seguimiento de su desempeño y se recolectan datos para asegurar que funciona como se esperaba sin introducir nuevos problemas en la red.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Agregar una nueva funcionalidad a IPv6 es un proceso que requiere un esfuerzo colaborativo a nivel internacional y un riguroso proceso de revisión para asegurar que las modificaciones beneficien a la infraestructura global de Internet sin comprometer su estabilidad o seguridad.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 6&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Es necesario el protocolo ICMP en IPv6? ¿Cumple las mismas funciones que en IPv4?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Sí, el protocolo ICMP (Internet Control Message Protocol) es necesario en IPv6, y se conoce específicamente como ICMPv6 (ICMP versión 6). Aunque cumple muchas de las mismas funciones fundamentales que su predecesor en IPv4, ICMPv6 también incluye funcionalidades adicionales necesarias debido a las diferencias inherentes entre IPv4 e IPv6. Aquí se describen los detalles y funciones clave:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Funciones Comunes con IPv4&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Diagnóstico de Red&lt;/strong&gt;: Al igual que en IPv4, ICMPv6 se utiliza para reportar errores en el procesamiento de paquetes, como mensajes de destino inalcanzable, tiempo excedido (para tratar casos donde un paquete ha pasado demasiado tiempo en tránsito), y problemas de parámetros de paquetes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Eco de Solicitud/Respuesta&lt;/strong&gt;: Utilizado para probar la conectividad entre nodos, similar a la función de ping en IPv4.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Funciones Específicas de ICMPv6&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Descubrimiento de Vecinos&lt;/strong&gt;: Uno de los roles más significativos de ICMPv6 es su participación en el proceso de Descubrimiento de Vecinos (NDP, Neighbor Discovery Protocol). Este protocolo reemplaza y expande las funcionalidades de ARP en IPv4, gestionando la resolución de direcciones, detección de nodos alcanzables, y más. Esto incluye:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Solicitud de Vecino y Anuncio de Vecino&lt;/strong&gt;: Funciones para determinar la dirección de enlace de un nodo y para verificar su disponibilidad.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Solicitud de Router y Anuncio de Router&lt;/strong&gt;: Usados para descubrir y comunicarse con routers en la red local.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Autoconfiguración de Direcciones&lt;/strong&gt;: ICMPv6 facilita la autoconfiguración sin estado de direcciones IPv6, permitiendo que los dispositivos en la red obtengan automáticamente direcciones IPv6 globales o locales basadas en los anuncios de router.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Mejoras en la Seguridad y Eficiencia&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mejor Integración con Seguridad&lt;/strong&gt;: ICMPv6 está más estrechamente integrado con IPsec, ofreciendo mejores opciones de seguridad que las disponibles en ICMP para IPv4.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gestión de Multicast&lt;/strong&gt;: ICMPv6 maneja la pertenencia a grupos multicast a través de mensajes específicos, lo que es crucial dado el uso extensivo de multicast en IPv6.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Conclusión&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Aunque ICMPv6 realiza muchas de las mismas funciones básicas que ICMP para IPv4, también aborda necesidades específicas de IPv6 que surgen de su diseño y requisitos operativos, como la autoconfiguración y el descubrimiento de vecinos, que son esenciales para la funcionalidad de la red. Por lo tanto, ICMPv6 es una pieza integral de IPv6, proporcionando herramientas cruciales para el mantenimiento y la operación de redes IPv6.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 7&lt;/h3&gt;
&lt;p&gt;El protocolo Neighbor Discovery (ND) es esencial para la operatividad de redes IPv6, y cumple varias funciones críticas que facilitan tanto la comunicación como la gestión de la red. Aquí te detallo sus funciones, y la importancia de su presencia para el funcionamiento adecuado de IPv6, así como el papel de las direcciones link-local.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Funciones del Protocolo Neighbor Discovery (ND):&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Descubrimiento de Routers&lt;/strong&gt;: ND permite a los hosts identificar los routers presentes en un enlace local. Los routers envían mensajes de anuncio de router (Router Advertisement) que informan a los hosts locales de su presencia y de varios parámetros de la red, como la disponibilidad de direcciones IP autoconfigurables.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Determinación de Direcciones&lt;/strong&gt;: A través del proceso de autoconfiguración sin estado, ND permite a los hosts obtener direcciones IP automáticamente basadas en los anuncios de los routers. Este proceso elimina la necesidad de un servidor DHCP, aunque IPv6 también soporta DHCPv6 para configuraciones más específicas.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Descubrimiento de Vecinos&lt;/strong&gt;: Similar al ARP en IPv4, pero más seguro y eficiente, ND permite a los hosts descubrir la dirección MAC (link-layer address) de otros hosts en la misma red local utilizando mensajes de solicitud de vecino (Neighbor Solicitation) y mensajes de anuncio de vecino (Neighbor Advertisement).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Detección de Direcciones Duplicadas (DAD)&lt;/strong&gt;: ND verifica si una dirección IP ya está en uso antes de asignarla a un dispositivo, lo que ayuda a prevenir conflictos de direcciones en la red.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Redireccionamiento&lt;/strong&gt;: Los routers pueden informar a los hosts de un mejor camino hacia un destino más allá del enlace local utilizando mensajes de redirección.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;¿Puede funcionar IPv6 sin el Protocolo Neighbor Discovery?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El funcionamiento de IPv6 estaría severamente comprometido sin Neighbor Discovery:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sin ND, la autoconfiguración de direcciones, la detección de otros dispositivos en la red, y la detección de routers serían inviables&lt;/strong&gt;, lo que requeriría mecanismos alternativos o manuales para todas estas funciones, reduciendo la eficiencia y aumentando la complejidad de gestión de la red.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DAD y la resolución de direcciones MAC serían también problemáticas&lt;/strong&gt;, aumentando el riesgo de conflictos de direcciones y problemas de comunicación en la red.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;¿Y sin una dirección de tipo link-local?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Las direcciones link-local en IPv6 son fundamentales para el funcionamiento de Neighbor Discovery:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Esenciales para la comunicación inicial en la red&lt;/strong&gt;: Las direcciones link-local son utilizadas por los dispositivos para comunicarse con otros dispositivos en la misma red local antes de que se establezcan direcciones globales.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Funcionamiento de ND&lt;/strong&gt;: Muchos aspectos del protocolo Neighbor Discovery, incluyendo el descubrimiento de routers y vecinos, dependen de la disponibilidad de direcciones link-local. Sin estas direcciones, un dispositivo no podría participar en estas actividades esenciales de configuración y mantenimiento de la red.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En resumen, tanto Neighbor Discovery como las direcciones link-local son cruciales para la operación normal de redes IPv6. Eliminar cualquiera de estos componentes resultaría en una red significativamente menos funcional y más difícil de administrar.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 8&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Cuál de las siguientes direcciones IPv6 no son válidas?&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2001:0:1019:afde::1&lt;/li&gt;
&lt;li&gt;2001::1871::4&lt;/li&gt;
&lt;li&gt;3ffg:8712:0:1:0000:aede:aaaa:1211&lt;/li&gt;
&lt;li&gt;3::1&lt;/li&gt;
&lt;li&gt;::&lt;/li&gt;
&lt;li&gt;2001::&lt;/li&gt;
&lt;li&gt;3ffe:1080:1212:56ed:75da:43ff:fe90:affe&lt;/li&gt;
&lt;li&gt;3ffe:1080:1212:56ed:75da:43ff:fe90:affe:1001&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para determinar si las direcciones IPv6 proporcionadas son válidas o no, es esencial entender el formato estándar de una dirección IPv6 y las reglas asociadas con su estructura. Una dirección IPv6 estándar se compone de 8 grupos de 4 dígitos hexadecimales, y cada grupo está separado por dos puntos (&lt;code&gt;:&lt;/code&gt;). A continuación, analizo cada dirección proporcionada:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;1. 2001:0:1019:afde::1&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Válida&lt;/strong&gt;: Esta dirección utiliza la compresión válida de ceros (&lt;code&gt;::&lt;/code&gt;), que solo aparece una vez para reemplazar grupos consecutivos de segmentos de cero. La dirección se expande a &lt;code&gt;2001:0000:1019:afde:0000:0000:0000:0001&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;2. 2001::1871::4&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No válida&lt;/strong&gt;: El uso de &lt;code&gt;::&lt;/code&gt; más de una vez en una dirección IPv6 no es permitido porque introduce ambigüedad respecto a la cantidad de grupos de ceros que se están reemplazando.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;3. 3ffg:8712:0:1:0000:aede:aaaa:1211&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No válida&lt;/strong&gt;: La presencia de &lt;code&gt;g&lt;/code&gt; en el primer grupo (&lt;code&gt;3ffg&lt;/code&gt;) es ilegítima porque no es un dígito hexadecimal válido. Los dígitos hexadecimales válidos son &lt;code&gt;0-9&lt;/code&gt; y &lt;code&gt;a-f&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;4. 3::1&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Válida&lt;/strong&gt;: Esta es una forma válidamente comprimida. Se expande a &lt;code&gt;0003:0000:0000:0000:0000:0000:0000:0001&lt;/code&gt;. La compresión &lt;code&gt;::&lt;/code&gt; se usa correctamente para reemplazar múltiples grupos de ceros.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;5. ::&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Válida&lt;/strong&gt;: Esta es una dirección especial que representa la dirección no especificada (equivalente a 0.0.0.0 en IPv4). Todos los grupos son ceros, y su uso es perfectamente válido.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;6. 2001::&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Válida&lt;/strong&gt;: Representa &lt;code&gt;2001:0000:0000:0000:0000:0000:0000:0000&lt;/code&gt;. Aquí, &lt;code&gt;::&lt;/code&gt; indica que todos los grupos restantes son ceros, lo cual es un uso válido de la compresión.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;7. 3ffe:1080:1212:56ed:75da:43ff:fe90:affe&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Válida&lt;/strong&gt;: Esta dirección no utiliza compresión y todos los segmentos son dígitos hexadecimales válidos. Tiene exactamente 8 grupos, que es el formato estándar completo para una dirección IPv6.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;8. 3ffe:1080:1212:56ed:75da:43ff:fe90:affe:1001&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No válida&lt;/strong&gt;: Esta dirección tiene 9 grupos, lo cual excede el máximo de 8 grupos permitidos para una dirección IPv6 estándar.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En resumen, las direcciones IPv6 deben seguir reglas estrictas de formato, incluyendo el número de grupos, la validez de los caracteres como dígitos hexadecimales, y el uso adecuado de la compresión &lt;code&gt;::&lt;/code&gt;. Las direcciones &lt;strong&gt;2, 3, y 8&lt;/strong&gt; son inválidas según estas reglas.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 9&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;¿Cuál sería una abreviatura correcta de 3f80:0000:0000:0a00:0000:0000:0000:0845?&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;3f80::a00::845&lt;/li&gt;
&lt;li&gt;3f80::a:845&lt;/li&gt;
&lt;li&gt;3f80::a00:0:0:0:845:4567&lt;/li&gt;
&lt;li&gt;3f80:0:0:a00::845&lt;/li&gt;
&lt;li&gt;3f8:0:0:a00::845&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para abreviar correctamente una dirección IPv6, se debe tener en cuenta que los ceros a la izquierda en cada grupo de cuatro dígitos hexadecimales se pueden omitir y que uno o más grupos de ceros consecutivos se pueden reemplazar por &lt;code&gt;::&lt;/code&gt;. Sin embargo, es importante recordar que &lt;code&gt;::&lt;/code&gt; solo puede usarse una vez en una dirección para evitar ambigüedades.&lt;/p&gt;
&lt;p&gt;Dada la dirección completa &lt;strong&gt;3f80:0000:0000:0a00:0000:0000:0000:0845&lt;/strong&gt;, revisemos cada opción proporcionada para ver si son abreviaciones válidas:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Opción 1: 3f80::a00::845&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No válida&lt;/strong&gt;: Utiliza &lt;code&gt;::&lt;/code&gt; dos veces, lo cual no está permitido porque introduce ambigüedad en la dirección.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Opción 2: 3f80::a:845&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No válida&lt;/strong&gt;: Aunque usa &lt;code&gt;::&lt;/code&gt; una sola vez, la abreviatura da la impresión de que el tercer grupo es &lt;code&gt;000a&lt;/code&gt; y el cuarto grupo es &lt;code&gt;0845&lt;/code&gt;, lo que distorsiona la estructura original de la dirección.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Opción 3: 3f80::a00:0:0:0:845:4567&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No válida&lt;/strong&gt;: Esta opción añade un grupo extra al final (&lt;code&gt;4567&lt;/code&gt;) que no existe en la dirección original, lo cual es incorrecto y modifica la dirección de manera significativa.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Opción 4: 3f80:0:0:a00::845&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Válida&lt;/strong&gt;: Esta es una abreviatura correcta. Los ceros iniciales dentro de los grupos han sido omitidos correctamente (&lt;code&gt;0a00&lt;/code&gt; a &lt;code&gt;a00&lt;/code&gt; y &lt;code&gt;0845&lt;/code&gt; a &lt;code&gt;845&lt;/code&gt;), y &lt;code&gt;::&lt;/code&gt; se utiliza para reemplazar tres grupos de ceros, lo cual es correcto y no introduce ambigüedades.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Opción 5: 3f8:0:0:a00::845&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No válida&lt;/strong&gt;: Este es un error común en la abreviatura de direcciones IPv6. El grupo inicial &lt;code&gt;3f80&lt;/code&gt; se ha truncado incorrectamente a &lt;code&gt;3f8&lt;/code&gt;, lo cual es incorrecto y altera la dirección.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;De las opciones dadas, la &lt;strong&gt;Opción 4&lt;/strong&gt; (3f80:0:0:a00::845) es la única abreviatura correcta y válida de la dirección IPv6 proporcionada.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 10&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Indique si las siguientes direcciones son de link-local, global-address, multicast, etc.&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;fe80::1/64&lt;/li&gt;
&lt;li&gt;3ffe:4543:2:100:4398::1/64&lt;/li&gt;
&lt;li&gt;::&lt;/li&gt;
&lt;li&gt;::1&lt;/li&gt;
&lt;li&gt;ff02::2&lt;/li&gt;
&lt;li&gt;2818:edbc:43e1::8721:122&lt;/li&gt;
&lt;li&gt;ff02::9&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Las direcciones IPv6 se pueden clasificar en varios tipos basados en su prefijo y propósito. Vamos a analizar cada dirección proporcionada para determinar su tipo:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;1. fe80::1/64&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tipo&lt;/strong&gt;: Link-local&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Descripción&lt;/strong&gt;: Las direcciones link-local en IPv6 tienen un prefijo de &lt;code&gt;fe80::/10&lt;/code&gt;. Estas direcciones son utilizadas para la comunicación entre nodos en el mismo enlace de red local y no son enrutable fuera de ese enlace.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;2. 3ffe:4543:2:100:4398::1/64&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tipo&lt;/strong&gt;: Global Unicast (deprecada)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Descripción&lt;/strong&gt;: Esta dirección parece ser una global unicast address. Sin embargo, el prefijo &lt;code&gt;3ffe::/16&lt;/code&gt; fue utilizado históricamente para direcciones de prueba durante la fase de despliegue inicial de IPv6 (parte de la red 6bone) y ya no está en uso general.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;3. ::&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tipo&lt;/strong&gt;: Unspecified address&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Descripción&lt;/strong&gt;: Esta dirección, que consiste completamente de ceros, es conocida como la dirección &quot;unspecified&quot;. Se utiliza en contextos de software o protocolos cuando no hay dirección específica asignada o aplicable.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;4. ::1&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tipo&lt;/strong&gt;: Loopback&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Descripción&lt;/strong&gt;: Esta dirección se usa para pruebas de loopback dentro de un host. Es equivalente a la dirección 127.0.0.1 en IPv4 y se utiliza para que un nodo se comunique consigo mismo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;5. ff02::2&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tipo&lt;/strong&gt;: Multicast&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Descripción&lt;/strong&gt;: Las direcciones que comienzan con &lt;code&gt;ff&lt;/code&gt; son direcciones multicast. Esta dirección en particular, &lt;code&gt;ff02::2&lt;/code&gt;, es una dirección de alcance de enlace local utilizada por todos los dispositivos routers en IPv6.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;6. 2818:edbc:43e1::8721:122&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tipo&lt;/strong&gt;: Global Unicast&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Descripción&lt;/strong&gt;: Este es el formato estándar para una dirección unicast global en IPv6, utilizada para la comunicación en internet. Las direcciones que no caen bajo los prefijos especiales y que están diseñadas para ser utilizadas en la red pública global generalmente son de este tipo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;7. ff02::9&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tipo&lt;/strong&gt;: Multicast&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Descripción&lt;/strong&gt;: Al igual que la anterior dirección multicast, esta también es una dirección multicast y pertenece al alcance de enlace local. &lt;code&gt;ff02::9&lt;/code&gt; específicamente se utiliza para el protocolo de enrutamiento RIPv6.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cada tipo de dirección IPv6 tiene un propósito específico y reglas asociadas para su uso, lo que asegura la correcta operación y configuración de la red conforme a las necesidades de conectividad y seguridad de la misma.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 11&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Al autogenerarse una dirección IPv6 sus últimos 64 bits en muchas ocasiones no se deducen de la dirección MAC, se generan de forma random, ¿por qué sucede esto? ¿Qué es lo que se intenta evitar? (Ver direcciones temporarias, RFC 8981)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La autogeneración de direcciones IPv6 que utilizan los últimos 64 bits generados de forma aleatoria en lugar de derivarlos directamente de la dirección MAC del dispositivo es una práctica diseñada para mejorar la privacidad y seguridad de los usuarios en la red. Este enfoque se describe en varias RFCs, incluida la RFC 8981, y es una evolución de la configuración estándar del Protocolo de Descubrimiento de Vecinos (NDP) para IPv6.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;¿Por qué se generan de forma aleatoria?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El uso de direcciones IPv6 generadas aleatoriamente, especialmente para la parte del identificador de interfaz (los últimos 64 bits de una dirección IPv6 en una red configurada para la Autoconfiguración sin Estado de Direcciones [SLAAC]), se promueve por las siguientes razones:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Privacidad Mejorada&lt;/strong&gt;: Tradicionalmente, las direcciones IPv6 podían incluir la dirección MAC del dispositivo en el campo del identificador de interfaz (usando el formato EUI-64). Esto podría exponer información persistente sobre el hardware del dispositivo a cualquier parte con la que se comunica el dispositivo, permitiendo actividades de seguimiento o identificación del usuario a lo largo del tiempo y a través de diferentes redes. Al generar estos bits de forma aleatoria, se reduce el riesgo de que la dirección revele la identidad o ubicación física del usuario.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Seguridad Incrementada&lt;/strong&gt;: La generación aleatoria dificulta que los atacantes adivinen las direcciones IPv6 de los dispositivos en una red, un factor importante en la mitigación de ciertos tipos de ataques de red, como aquellos que intentan mapear la red o dirigirse a dispositivos específicos dentro de ella.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;RFC 8981 y Direcciones Temporales&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La RFC 8981 detalla la generación de direcciones IPv6 temporales y privadas que son utilizadas por los dispositivos para comunicaciones externas, proporcionando un método para rotar periódicamente las direcciones y así mejorar la privacidad del usuario. Estas direcciones son conocidas como &quot;direcciones temporales&quot; o &quot;direcciones de privacidad&quot;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Funcionamiento de las Direcciones Temporales:&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Generación&lt;/strong&gt;: Las direcciones temporales se generan utilizando algoritmos de aleatorización que toman en cuenta el prefijo de la red y una semilla secreta que cambia con el tiempo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Uso&lt;/strong&gt;: Estas direcciones se utilizan para conexiones de salida, mientras que para la configuración de red y las conexiones entrantes se pueden utilizar direcciones más estables (aunque también privadas).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caducidad&lt;/strong&gt;: Las direcciones temporales tienen un tiempo de vida limitado, tras el cual son desechadas y reemplazadas por nuevas direcciones generadas.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Conclusión&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La generación aleatoria de los últimos 64 bits de las direcciones IPv6 es una práctica importante para proteger la privacidad y seguridad de los usuarios en redes modernas. Mediante el uso de direcciones IPv6 temporales y privadas, como se detalla en la RFC 8981, los sistemas y dispositivos pueden minimizar los riesgos asociados con el rastreo y la identificación a través de sus direcciones IP.&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.DhmxlalT.jpg"/><enclosure url="/_astro/thumbnail.DhmxlalT.jpg"/></item><item><title>TP Refactoring</title><link>https://fabianmartinezrincon.com/blog/refactoring</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/refactoring</guid><description>Tp de Refactoring</description><pubDate>Wed, 24 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Me quiero morir 💀&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/8b1710cf-5715-48a4-a076-fe78663aff49&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Facturacion_de_llamadas/assets/55964635/2ba0b3ed-ad4e-4258-bf1b-d0bff3c1ae7d&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;📌 &lt;a href=&quot;#-refactor-1&quot;&gt;Refactor 1&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#-refactor-1-move-method&quot;&gt;Move Method&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#-refactor-1-encapsulate-collection---remove-method&quot;&gt;Encapsulate Collection y Remove Method&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;📌 &lt;a href=&quot;#-refactor-2&quot;&gt;Refactor 2&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#-refactor-2-replace-conditional-with-polymorphism---remove-method---remove-field---encapsulate-field&quot;&gt;Replace Conditional with Polymorphism - Remove method - Remove Field - Encapsulate Field&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#refactor-2-factory-method&quot;&gt;Factory Method&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;📌 &lt;a href=&quot;#-refactor-3&quot;&gt;Refactor 3&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#-refactor-3-encapsulate-collection---move-method---hide-delegate&quot;&gt;Encapsulate Collection - Move Method - Hide Delegate&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;📌 &lt;a href=&quot;#-refactor-4&quot;&gt;Refactor 4&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#-refactor-4-move-method---rename-method&quot;&gt;Move Method - Rename Method&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#-refactor-4-replace-conditional-with-polymorphism---remove-field&quot;&gt;Replace Conditional with Polymorphism - Remove Field&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#-refactor-4-factory-method---rename-variables&quot;&gt;Factory Method&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#-refactor-4-reinventando-la-rueda---move-field---rename-variables&quot;&gt;Reinventando la rueda - Move field - Rename variables&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;📌 &lt;a href=&quot;#-refactor-5&quot;&gt;Refactor 5&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#-refactor-5-replace-conditional-logic-with-strategy---replace-magic-strings-with-class-type&quot;&gt;Replace Conditional Logic with Strategy - Replace Magic Strings with Class Type&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png&quot; alt=&quot;-----------------------------------------------------&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Facturacion_de_llamadas/assets/55964635/f844b172-fe9a-417b-9c15-9e78737de002&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png&quot; alt=&quot;-----------------------------------------------------&quot;&gt;&lt;/p&gt;
&lt;h2&gt;🚧 Refactor 1&lt;/h2&gt;
&lt;p&gt;🦨 &lt;strong&gt;Malos Olores&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Feature Envy&lt;/strong&gt; Se observa una mala asignación de responsabilidades en la clase &lt;code&gt;Empresa&lt;/code&gt;, asociada a una evidente envidia de atributos.&lt;/p&gt;
&lt;p&gt;Encontramos tareas en esta clase que deberían ser responsabilidad de &lt;code&gt;GestorNumeroDisponibles()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Extracto del código original:&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class Empresa{
	public boolean agregarNumeroTelefono(String str) {
		boolean encontre = guia.getLineas().contains(str);
		if (!encontre) {
			guia.getLineas().add(str);
			encontre = true;
			return encontre;
		} else {
			encontre = false;
			return encontre;
		}
	}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png&quot; alt=&quot;-----------------------------------------------------&quot;&gt;&lt;/p&gt;
&lt;h3&gt;🚧 Refactor 1 Move Method&lt;/h3&gt;
&lt;p&gt;En primer lugar, realizamos un &lt;strong&gt;Move method&lt;/strong&gt; del método &lt;code&gt;agregarNumeroTelefono(String str)&lt;/code&gt; a la clase &lt;code&gt;GestorNumeroDisponibles()&lt;/code&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class GestorNumerosDisponibles {
	private SortedSet&amp;#x3C;String&gt; lineas = new TreeSet&amp;#x3C;String&gt;(); 

	public SortedSet&amp;#x3C;String&gt; getLineas() {
		return lineas;
	}
	public boolean agregarNumeroTelefono(String numero) {
		boolean encontre = this.getLineas().contains(numero);
		if (!encontre) {
			this.getLineas().add(numero);
			encontre = true;
			return encontre;
		} else {
			encontre = false;
			return encontre;
		}
	}	
}
public class Empresa{
	public String agregarNumeroTelefono(String numero) {
		return guia.agregarNumeroTelefono(numero);
	}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;🦨 &lt;em&gt;Malos Olores&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Inappropriate Intimacy:&lt;/strong&gt; El método &lt;code&gt;getLineas()&lt;/code&gt; expone directamente el conjunto interno &lt;code&gt;lineas&lt;/code&gt;, lo cual permite a otras partes del código modificar directamente esta colección. Esto puede llevar a problemas de manejo de estado y viola el principio de encapsulamiento.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Feature Envy:&lt;/strong&gt; Los métodos en &lt;code&gt;GestorNumerosDisponibles&lt;/code&gt; hacen un uso excesivo del getter getLineas() en lugar de interactuar directamente con el campo &lt;code&gt;lineas&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Duplicate Code:&lt;/strong&gt; El uso de una variable booleana &lt;code&gt;encontre&lt;/code&gt; para manejar el control de flujo es innecesariamente complicado y duplica la lógica de verificación de existencia y adición en el conjunto.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png&quot; alt=&quot;-----------------------------------------------------&quot;&gt;&lt;/p&gt;
&lt;h3&gt;🚧 Refactor 1 Encapsulate Collection - Remove Method&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Refactoring&lt;/strong&gt;: Modificar getLineas() para que no retorne directamente la colección mutable. Mejor aún, eliminar este método si no es necesario y manejar toda la lógica de adición o eliminación a través de métodos específicos en GestorNumerosDisponibles.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Remove Method&lt;/strong&gt; Eliminamos getLineas() para que no pueda ser modificado por fuera de la clase, aseguramos que toda manipulación de lineas se haga a través de métodos de la clase misma.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Refactor aplicado:&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class GestorNumerosDisponibles{
	private SortedSet&amp;#x3C;String&gt; lineas = new TreeSet&amp;#x3C;String&gt;(); 

	public boolean agregarNumeroTelefono(String numero) {
		return this.lineas.add(numero);
	}
}

public class Empresa{
	public String agregarNumeroTelefono(String numero) {
		return guia.agregarNumeroTelefono(numero);
	}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png&quot; alt=&quot;-----------------------------------------------------&quot;&gt;&lt;/p&gt;
&lt;h2&gt;🚧 Refactor 2&lt;/h2&gt;
&lt;p&gt;🦨 &lt;em&gt;Malos Olores Detectados&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Duplicate Code&lt;/strong&gt;: El código original tenía estructuras condicionales repetitivas para configurar objetos de &lt;code&gt;Cliente&lt;/code&gt;, variando solo en la asignación de &lt;code&gt;dni&lt;/code&gt; para clientes físicos y &lt;code&gt;cuit&lt;/code&gt; para clientes jurídicos. Esto no solo duplica el código sino que también complica las modificaciones futuras.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Switch Statements&lt;/strong&gt;: Aunque en tu refactoring final aún se utiliza un switch, este es movido a una fábrica, lo cual es un lugar más apropiado que dispersarlo por el código de negocio.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Large Class&lt;/strong&gt;: La clase &lt;code&gt;Cliente&lt;/code&gt; en el código original podría expandirse desproporcionadamente si se agregaran más tipos de clientes, con más condiciones y más campos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Inappropriate Intimacy&lt;/strong&gt;: La clase &lt;code&gt;Empresa&lt;/code&gt; accede directamente a la lista de llamadas de &lt;code&gt;Cliente&lt;/code&gt;. Esto viola el principio de encapsulación y crea una dependencia innecesaria entre las clases.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dead Code (Código Muerto)&lt;/strong&gt;: El campo &lt;code&gt;tipo&lt;/code&gt; de la clase &lt;code&gt;Cliente&lt;/code&gt; no se utiliza en el código original, ya que el tipo de cliente se puede inferir a partir de la clase concreta que se esté utilizando. Además existen getters y setters que no se utilizan.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Speculative Generality:&lt;/strong&gt; La clase &lt;code&gt;Cliente&lt;/code&gt; tiene metodos que no se utiliza.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Incluimos constructores en nuestras clases para garantizar que cada objeto se inicialice con todos los datos necesarios. Esto evita errores y hace el código más claro y fácil de entender. Es fundamental para asegurar que todos los objetos comiencen en un estado válido y seguro.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;extracto del código original:&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class Empresa{	
	public Cliente registrarUsuario(String data, String nombre, String tipo) {
		Cliente var = new Cliente();
		if (tipo.equals(&quot;fisica&quot;)) {
			var.setNombre(nombre);
			String tel = this.obtenerNumeroLibre();
			var.setTipo(tipo);
			var.setNumeroTelefono(tel);
			var.setDNI(data);
		} else if (tipo.equals(&quot;juridica&quot;)) {
			String tel = this.obtenerNumeroLibre();
			var.setNombre(nombre);
			var.setTipo(tipo);
			var.setNumeroTelefono(tel);
			var.setCuit(data);
		}
		clientes.add(var);
		return var;
	}
}

public class Cliente {
	public List&amp;#x3C;Llamada&gt; llamadas = new ArrayList&amp;#x3C;Llamada&gt;();
	private String tipo;
	private String nombre;
	private String numeroTelefono;
	private String cuit;
	private String dni;

	public String getTipo() {
		return tipo;
	}
	public void setTipo(String tipo) {
		this.tipo = tipo;
	}
	public String getNombre() {
		return nombre;
	}
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	public String getNumeroTelefono() {
		return numeroTelefono;
	}
	public void setNumeroTelefono(String numeroTelefono) {
		this.numeroTelefono = numeroTelefono;
	}
	public String getCuit() {
		return cuit;
	}
	public void setCuit(String cuit) {
		this.cuit = cuit;
	}
	public String getDNI() {
		return dni;
	}
	public void setDNI(String dni) {
		this.dni = dni;
	}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png&quot; alt=&quot;-----------------------------------------------------&quot;&gt;&lt;/p&gt;
&lt;h3&gt;🚧 Refactor 2 Replace Conditional with Polymorphism - Remove method - Remove Field - Encapsulate Field&lt;/h3&gt;
&lt;p&gt;Creamos dos subclases, ClientePersonaFisica y ClientePersonaJuridica, desde la clase original Cliente y la hacemos abstracta. Esto no solo eliminó la duplicación de código sino que también aseguró que cada subclase maneje sus propios datos específicos de manera encapsulada.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Agregamos un constructor a la clase Cliente para asegurarnos de que cada objeto se inicialice con todos los datos necesarios.&lt;/li&gt;
&lt;li&gt;Eliminamos el campo &lt;code&gt;tipo&lt;/code&gt; de la clase Cliente, ya que este puede ser inferido a partir del tipo de subclase que se esté utilizando.&lt;/li&gt;
&lt;li&gt;Eliminamos los campos &lt;code&gt;dni&lt;/code&gt; y &lt;code&gt;cuit&lt;/code&gt;  y sus respectivos getters y setters de la clase &lt;code&gt;Cliente&lt;/code&gt;, ya que se movieron a las subclases &lt;code&gt;ClientePersonaFisica&lt;/code&gt; y &lt;code&gt;ClientePersonaJuridica&lt;/code&gt;, respectivamente.&lt;/li&gt;
&lt;li&gt;Cambiamos la visibilidad de la colección de &lt;code&gt;llamadas&lt;/code&gt; de &lt;code&gt;Cliente&lt;/code&gt; a privada para evitar que otras clases la manipulen directamente.&lt;/li&gt;
&lt;li&gt;Eliminamos el parametro &lt;code&gt;tipo&lt;/code&gt; del constructor de Cliente, ya que este se puede inferir a partir del tipo de subclase que se esté utilizando.&lt;/li&gt;
&lt;li&gt;Eliminamos metodos que no se utilizan en las subclases de Cliente (getNombre(), getCuit(), getDNI(), setDNI(), setCuit()).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Refactor aplicado:&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public abstract class Cliente {
	public List&amp;#x3C;Llamada&gt; llamadas = new ArrayList&amp;#x3C;Llamada&gt;();
	private String nombre;
	private String numeroTelefono;

	public Cliente(String nombre, String numeroTelefono) {
		this.nombre = nombre; 
		this.numeroTelefono = numeroTelefono;
	}
	
	public String getNumeroTelefono() {
		return numeroTelefono;
	}
}

public class ClientePersonaJuridica extends Cliente{
	private String cuit;	
	public ClientePersonaJuridica(String nombre, String numeroTelefono, String cuit){
		super(nombre, numeroTelefono);
		this.cuit = cuit;
	}
}

public class ClientePersonaFisica extends Cliente{
	private String dni;
	public ClientePersonaFisica(String nombre, String numeroTelefono, String dni){
		super(nombre, numeroTelefono);
		this.dni = dni;
	}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png&quot; alt=&quot;-----------------------------------------------------&quot;&gt;&lt;/p&gt;
&lt;h3&gt;🚧 Refactor 2 Factory Method&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Creamos una clase &lt;code&gt;ClienteFactory&lt;/code&gt; con un método &lt;code&gt;crearCliente&lt;/code&gt; que se encarga de instanciar el tipo correcto de cliente según el tipo especificado. Esto centraliza la creación de objetos &lt;code&gt;Cliente&lt;/code&gt; y facilita la extensión del sistema para incorporar nuevos tipos de clientes en el futuro.&lt;/li&gt;
&lt;li&gt;Quedando el método &lt;code&gt;registrarUsuario&lt;/code&gt; de la clase &lt;code&gt;Empresa&lt;/code&gt; más limpio y desacoplado de la lógica de creación de clientes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Refactor aplicado:&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class ClienteFactory{
	public static Cliente crearCliente(String tipo, String nombre, String numeroTelefono, String data){
		switch(tipo){
			case &quot;fisica&quot;:
				return new ClientePersonaFisica(nombre, numeroTelefono, data);
			case &quot;juridica&quot;:
				return new ClientePersonaJuridica(nombre, numeroTelefono, data);			
			default:
				throw new IllegalArgumentException(&quot;Tipo de cliente no válido&quot;);
		}		
	}
}

public class Empresa{
	public Cliente registrarUsuario(String data, String nombre, String tipo) {		
		Cliente cliente = ClienteFactory.crearCliente(tipo, nombre, this.obtenerNumeroLibre(), data);
		clientes.add(cliente);
		return cliente;
	}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png&quot; alt=&quot;-----------------------------------------------------&quot;&gt;&lt;/p&gt;
&lt;h2&gt;🚧 Refactor 3&lt;/h2&gt;
&lt;p&gt;🦨 &lt;em&gt;Malos Olores Detectados&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Feature Envy:&lt;/strong&gt; El método muestra envidia de atributos ya que accede directamente a la lista de llamadas del Cliente origen para agregar una nueva llamada. Esto indica una alta dependencia de la estructura interna de otra clase, lo cual va en contra del principio de encapsulación.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inappropriate Intimacy:&lt;/strong&gt; Manipular directamente la lista de llamadas del Cliente desde otra clase podría ser considerado una intimidad inapropiada, pues el método no solo conoce detalles internos de otra clase, sino que también los modifica directamente.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Extracto del código original:&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class Empresa {
	private List&amp;#x3C;Llamada&gt; llamadas = new ArrayList&amp;#x3C;Llamada&gt;();
	public Llamada registrarLlamada(Cliente origen, Cliente destino, String t, int duracion) {
		Llamada llamada = new Llamada(t, origen.getNumeroTelefono(), destino.getNumeroTelefono(), duracion);
		llamadas.add(llamada);
		origen.llamadas.add(llamada);
		return llamada;
	}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png&quot; alt=&quot;-----------------------------------------------------&quot;&gt;&lt;/p&gt;
&lt;h3&gt;🚧 Refactor 3 Encapsulate Collection - Move Method - Hide Delegate&lt;/h3&gt;
&lt;p&gt;Encapsulamos la gestión de la colección de llamadas dentro de la clase Cliente. Esto implica crear métodos en la clase Cliente para añadir llamadas, en lugar de modificar la lista directamente desde fuera.&lt;/p&gt;
&lt;p&gt;Consideramos mover parte de de la funcionalidad de &lt;code&gt;registrarLlamada()&lt;/code&gt; de la clase &lt;code&gt;Empresa&lt;/code&gt; a la clase &lt;code&gt;Cliente&lt;/code&gt; creando un método &lt;code&gt;agregarLlamada()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Rafactor aplicado&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class Cliente {
    private List&amp;#x3C;Llamada&gt; llamadas = new ArrayList&amp;#x3C;&gt;();

    public void agregarLlamada(Llamada llamada) {
        this.llamadas.add(llamada);
    }
}

public class Empresa {
    private List&amp;#x3C;Llamada&gt; llamadas = new ArrayList&amp;#x3C;&gt;();

    public Llamada registrarLlamada(Cliente origen, Cliente destino, String tipo, int duracion) {
        Llamada llamada = new Llamada(t, origen.getNumeroTelefono(), destino.getNumeroTelefono(), duracion);
        this.llamadas.add(llamada);
        origen.agregarLlamada(llamada);
        return llamada;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png&quot; alt=&quot;-----------------------------------------------------&quot;&gt;&lt;/p&gt;
&lt;h2&gt;🚧 Refactor 4&lt;/h2&gt;
&lt;p&gt;🦨 &lt;em&gt;Malos Olores Detectados&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Feature Envy y Inappropriate Intimacy&lt;/strong&gt;: El método accede directamente a la lista interna de llamadas del &lt;code&gt;Cliente&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;String Comparison&lt;/strong&gt;: Está utilizando &lt;code&gt;==&lt;/code&gt; para comparar strings, lo cual es inapropiado en Java para comparaciones de contenido de strings. Debería usar &lt;code&gt;.equals()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Duplicate Code&lt;/strong&gt;: Hay código duplicado en la manera de calcular el costo de las llamadas, especialmente en cómo se añade el IVA y se calculan los descuentos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Magic Numbers&lt;/strong&gt;: El código contiene numeros mágicos como &lt;code&gt;3&lt;/code&gt;, &lt;code&gt;150&lt;/code&gt;, &lt;code&gt;0.21&lt;/code&gt;, &lt;code&gt;50&lt;/code&gt;, que hacen el código difícil de entender y mantener.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Extracto del código original:&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class Empresa{
	public double calcularMontoTotalLlamadas(Cliente cliente) {
		double c = 0;
		for (Llamada l : cliente.llamadas) {
			double auxc = 0;
			if (l.getTipoDeLlamada() == &quot;nacional&quot;) {
				// el precio es de 3 pesos por segundo más IVA sin adicional por establecer la
				// llamada
				auxc += l.getDuracion() * 3 + (l.getDuracion() * 3 * 0.21);
			} else if (l.getTipoDeLlamada() == &quot;internacional&quot;) {
				// el precio es de 150 pesos por segundo más IVA más 50 pesos por establecer la
				// llamada
				auxc += l.getDuracion() * 150 + (l.getDuracion() * 150 * 0.21) + 50;
			}
	
			if (cliente.getTipo() == &quot;fisica&quot;) {
				auxc -= auxc * descuentoFis;
			} else if (cliente.getTipo() == &quot;juridica&quot;) {
				auxc -= auxc * descuentoJur;
			}
			c += auxc;
		}
		return c;
	}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png&quot; alt=&quot;-----------------------------------------------------&quot;&gt;&lt;/p&gt;
&lt;h3&gt;🚧 Refactor 4 Move Method - Rename Method&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Movimos el metodo &lt;code&gt;calcularCostoTotalLlamadas()&lt;/code&gt; de la clase &lt;code&gt;Empresa&lt;/code&gt; a la clase &lt;code&gt;Cliente&lt;/code&gt; para que sea responsabilidad de la clase &lt;code&gt;Cliente&lt;/code&gt; calcular el costo total de sus llamadas.&lt;/li&gt;
&lt;li&gt;Edita el método &lt;code&gt;calcularCostoTotalLlamadas()&lt;/code&gt; de la clase &lt;code&gt;Empresa&lt;/code&gt; para que llame al método &lt;code&gt;calcularCostoTotalLlamadas()&lt;/code&gt; de la clase &lt;code&gt;Cliente&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Refactor aplicado:&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class Empresa{
	public double calcularMontoTotalLlamadas(Cliente cliente) {		
		return cliente.calcularCostoTotalLlamadas();
	}
}

public class Cliente{
	public double calcularMontoTotalLlamadas() {
		for (Llamada l : this.llamadas) {
			double auxc = 0;
			if (l.getTipoDeLlamada() == &quot;nacional&quot;) {
				// el precio es de 3 pesos por segundo más IVA sin adicional por establecer la
				// llamada
				auxc += l.getDuracion() * 3 + (l.getDuracion() * 3 * 0.21);
			} else if (l.getTipoDeLlamada() == &quot;internacional&quot;) {
				// el precio es de 150 pesos por segundo más IVA más 50 pesos por establecer la
				// llamada
				auxc += l.getDuracion() * 150 + (l.getDuracion() * 150 * 0.21) + 50;
			}
	
			if (cliente.getTipo() == &quot;fisica&quot;) {
				auxc -= auxc * descuentoFis;
			} else if (cliente.getTipo() == &quot;juridica&quot;) {
				auxc -= auxc * descuentoJur;
			}
			c += auxc;
		}
	}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png&quot; alt=&quot;-----------------------------------------------------&quot;&gt;&lt;/p&gt;
&lt;h3&gt;🚧 Refactor 4 Replace Conditional with Polymorphism - Remove Field&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Creamos una clase abstracta &lt;code&gt;Llamada&lt;/code&gt; con métodos abstractos para calcular el costo de la llamada. Luego, creamos subclases &lt;code&gt;LlamadaNacional&lt;/code&gt; y &lt;code&gt;LlamadaInternacional&lt;/code&gt; que implementan estos métodos de acuerdo a las reglas específicas de cada tipo de llamada.&lt;/li&gt;
&lt;li&gt;Eliminamos el campo &lt;code&gt;tipoDeLlamada&lt;/code&gt; y su getter de la clase &lt;code&gt;Llamada&lt;/code&gt; ya que este se puede inferir a partir del tipo de subclase que se esté utilizando, tambien eliminamos el parametro tipoDeLlamada del constructor de Llamada.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public abstract class Llamada {	
	private String origen;
	private String destino;
	private int duracion;

	public Llamada(String origen, String destino, int duracion) { // quitamos el tipo de llamada		
		this.origen = origen;
		this.destino = destino;
		this.duracion = duracion;
	}

	public String getRemitente() {
		return destino;
	}

	public int getDuracion() {
		return this.duracion;
	}

	public String getOrigen() {
		return origen;
	}

}
public class LlamadaNacional extends Llamada{
    public LlamadaNacional(String numeroOrigen, String numeroDestino, int duracion) {
        super(numeroOrigen, numeroDestino, duracion);
    }
}

public class LlamadaInternacional extends Llamada{
	public LlamadaInternacional(String numeroOrigen, String numeroDestino, int duracion) {
		super(numeroOrigen, numeroDestino, duracion);
	}
}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png&quot; alt=&quot;-----------------------------------------------------&quot;&gt;&lt;/p&gt;
&lt;h3&gt;🚧 Refactor 4 Factory Method - Rename Variables&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Creamos una clase &lt;code&gt;LlamadaFactory&lt;/code&gt; con un método &lt;code&gt;crearLlamada&lt;/code&gt; que se encarga de instanciar el tipo correcto de llamada según el tipo especificado. Esto centraliza la creación de objetos &lt;code&gt;Llamada&lt;/code&gt; y facilita la extensión del sistema para incorporar nuevos tipos de llamadas en el futuro.&lt;/li&gt;
&lt;li&gt;Modificamos el método &lt;code&gt;registrarLlamada()&lt;/code&gt; de la clase &lt;code&gt;Empresa&lt;/code&gt; para que utilice la fábrica de llamadas para crear el objeto de llamada correspondiente.&lt;/li&gt;
&lt;li&gt;Renombramos las variables poco descriptivas&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class LlamadaFactory {
    public static Llamada crearLlamada(String tipo, String numeroOrigen, String numeroDestino, int duracion) {
        switch (tipo) {
            case &quot;nacional&quot;:
                return new LlamadaNacional(numeroOrigen, numeroDestino, duracion);
            case &quot;internacional&quot;:
                return new LlamadaInternacional(numeroOrigen, numeroDestino, duracion);
            default:
                throw new IllegalArgumentException(&quot;Tipo de llamada no válido&quot;);
        }
    }
}
public class Empresa {
	public Llamada registrarLlamada(Cliente origen, Cliente destino, String tipo, int duracion) {
        Llamada llamada = LlamadaFactory.crearLlamada(t, origen.getNumeroTelefono(), destino.getNumeroTelefono(), duracion);
        this.llamadas.add(llamada);
        origen.agregarLlamada(llamada);
        return llamada;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png&quot; alt=&quot;-----------------------------------------------------&quot;&gt;&lt;/p&gt;
&lt;h3&gt;🚧 Refactor 4 Reinventando la rueda - Move field - Rename variables&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Eliminamos el for loop de la clase Cliente y lo reemplazamos por un stream y una operación de suma, lo cual simplifica el cálculo del monto total de las llamadas.&lt;/li&gt;
&lt;li&gt;Creamos un método &lt;code&gt;computarMontoLlamada()&lt;/code&gt; en la clase &lt;code&gt;Cliente&lt;/code&gt; para calcular el monto de una llamada específica, teniendo en cuenta el descuento correspondiente.&lt;/li&gt;
&lt;li&gt;creamos un método &lt;code&gt;getDescuento()&lt;/code&gt; en la clase &lt;code&gt;Cliente&lt;/code&gt; para obtener el descuento correspondiente a cada cliente, cada subclase de Cliente implementará este método de acuerdo a sus reglas específicas.&lt;/li&gt;
&lt;li&gt;Movimos los atributos estaticos &lt;code&gt;descuentoFis&lt;/code&gt; y &lt;code&gt;descuentoJur&lt;/code&gt; a las subclases de &lt;code&gt;Cliente&lt;/code&gt; (descuentoFis a ClientePersonaFisica y descuentoJur a ClientePersonaJuridica), Les cambiamos el nombre y el modificador de acceso a private y les creamos un getter.&lt;/li&gt;
&lt;li&gt;Creamos un método &lt;code&gt;calcularMontoLlamada()&lt;/code&gt; en la clase Llamada para calcular el monto de la llamada, teniendo en cuenta el IVA y cualquier adicional.&lt;/li&gt;
&lt;li&gt;Creamos un método &lt;code&gt;getPrecioSegundo()&lt;/code&gt; en la clase Llamada para obtener el precio por segundo de la llamada, que será implementado por las subclases de Llamada.&lt;/li&gt;
&lt;li&gt;Creamos un método &lt;code&gt;getAdicional()&lt;/code&gt; en la clase Llamada para obtener cualquier adicional que se deba sumar al costo de la llamada, que será implementado por las subclases de Llamada.&lt;/li&gt;
&lt;li&gt;Creamos una constante &lt;code&gt;PORCENTAJE_IVA&lt;/code&gt; en la clase Llamada para representar el porcentaje de IVA que se debe sumar al costo de la llamada.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public abstract class Cliente {		
	public abstract double getDescuento();

	private double computarMontoLlamada(Llamada llamada) {
        return llamada.calcularMontoLlamada() * ( 1 - this.getDescuento());
    }
	public double calcularMontoTotalLlamadas() {
		return this.llamadas
				.stream()
				.mapToDouble(llamada -&gt; this.computarMontoLlamada(llamada))
				.sum();
	}
}

public class ClientePersonaFisica extends Cliente{
	private	static final double DESCUENTO = 0;
	private String dni;

	public ClientePersonaFisica(String nombre, String numeroTelefono, String dni){
		super(nombre, numeroTelefono);
		this.dni = dni;
	}
	public String getDNI() {
		return dni;
	}
	public void setDNI(String dni) {
		this.dni = dni;
	}

	@Override
    public double getDescuento() {
        return ClientePersonaFisica.DESCUENTO;
    }
}

public class ClientePersonaJuridica extends Cliente{
	private static final double DESCUENTO = 0.15;
	private String cuit;

	public ClientePersonaJuridica(String nombre, String numeroTelefono, String cuit){
		super(nombre, numeroTelefono);
		this.cuit = cuit;
	}

	public String getCuit() {
		return cuit;
	}
	public void setCuit(String cuit) {
		this.cuit = cuit;
	}

	public double getDescuento() {
		return ClientePersonaJuridica.DESCUENTO;
	}
}

public abstract class Llamada{
	private static final double PORCENTAJE_IVA = 0.21;
	public abstract double getPrecioSegundo();

	public double getAdicional(){
		return 0;
	};

	public double calcularMontoLlamada() {		
        return ((this.duracion * this.getPrecioSegundo()) + ((this.duracion * this.getPrecioSegundo()) * PORCENTAJE_IVA)) + this.getAdicional();		
    }
}

public class LlamadaNacional extends Llamada{
	private static final double PRECIO_SEGUNDO = 3;
	
	@Override
	public double getPrecioSegundo() {
		return LlamadaNacional.PRECIO_SEGUNDO;
	}
}

public class LlamadaInternacional extends Llamada{
    private static final double PRECIO_SEGUNDO = 150;
    private static final double ADICIONAL = 50;
    public LlamadaInternacional(String numeroOrigen, String numeroDestino, int duracion) {
        super(numeroOrigen, numeroDestino, duracion);
    }

    @Override
    public double getPrecioSegundo() {
        return PRECIO_SEGUNDO;
    }

    @Override
    public double getAdicional() {
        return ADICIONAL; 
    }
}

public class Empresa {
	public double calcularMontoTotalLlamadas(Cliente cliente) {
		return cliente.calcularMontoTotalLlamadas();
	}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png&quot; alt=&quot;-----------------------------------------------------&quot;&gt;&lt;/p&gt;
&lt;h3&gt;🚧 Refactor 5&lt;/h3&gt;
&lt;p&gt;🦨 &lt;em&gt;Malos Olores&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Switch Statements:&lt;/strong&gt; El uso de switch para manejar diferentes formas de obtener un número (último, primero, aleatorio) puede complicar la extensión del código. Si decides agregar más formas de seleccionar un número, este switch crecerá en complejidad y tamaño.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Magic Strings&lt;/strong&gt;: Las cadenas &quot;ultimo&quot;, &quot;primero&quot;, y &quot;random&quot; utilizadas en el &lt;code&gt;switch&lt;/code&gt; son ejemplos de &quot;magic strings&quot;. Estos valores están codificados directamente en la lógica, haciendo que el código sea más difícil de mantener y propenso a errores si se escribe incorrectamente en algún lugar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Duplicated Code:&lt;/strong&gt; Hay una lógica duplicada en cada caso del switch, particularmente en el proceso de remover un número de lineas después de seleccionarlo.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class GestorNumerosDisponibles {
	private SortedSet&amp;#x3C;String&gt; lineas = new TreeSet&amp;#x3C;String&gt;(); 
	private String tipoGenerador = &quot;ultimo&quot;;

	public String obtenerNumeroLibre() {
		String linea;
		switch (tipoGenerador) {
			case &quot;ultimo&quot;:
				linea = lineas.last();
				lineas.remove(linea);
				return linea;
			case &quot;primero&quot;:
				linea = lineas.first();
				lineas.remove(linea);
				return linea;
			case &quot;random&quot;:
				linea = new ArrayList&amp;#x3C;String&gt;(lineas)
						.get(new Random().nextInt(lineas.size()));
				lineas.remove(linea);
				return linea;
		}
		return null;
	}

	public void cambiarTipoGenerador(String valor) {
		this.tipoGenerador = valor;
	}

	public boolean agregarNumeroTelefono(String numero) {
		return this.lineas.add(numero);
	}	
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png&quot; alt=&quot;-----------------------------------------------------&quot;&gt;&lt;/p&gt;
&lt;h3&gt;🚧 Refactor 5 Replace Conditional Logic with Strategy - Replace Magic Strings with Class Type&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Basandonos en el patrón Strategy, creamos la interfaz &lt;code&gt;Generador&lt;/code&gt; que varian las implementaciones que encapsulan los diferentes comportamientos (último, primero, aleatorio).&lt;/li&gt;
&lt;li&gt;Creamos tres implementaciones de la interfaz &lt;code&gt;Generador&lt;/code&gt;: &lt;code&gt;UltimoGenerador&lt;/code&gt;, &lt;code&gt;PrimeroGenerador&lt;/code&gt;, y &lt;code&gt;RandomGenerador&lt;/code&gt;. Cada una de estas clases implementa el método &lt;code&gt;obtenerNumeroLibre()&lt;/code&gt; de acuerdo a su comportamiento específico.&lt;/li&gt;
&lt;li&gt;En lugar de usar cadenas para determinar el comportamiento, usamos los tipos de las clases directamente. Esto elimina la necesidad de cadenas mágicas y reduce la posibilidad de errores en tiempo de ejecución debido a cadenas mal escritas.&lt;/li&gt;
&lt;li&gt;En los test hicimos una minima modificacion, en vez de pasar un string, pasamos una instancia de la clase que implementa el comportamiento deseado.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public interface Generador {    
    public  String  obtenerNumeroLibre(SortedSet&amp;#x3C;String&gt; lineas);	 
}

public class UltimoGenerador implements Generador {
    public String obtenerNumeroLibre(SortedSet&amp;#x3C;String&gt; lineas) {
        String linea = lineas.last();
        lineas.remove(linea);
        return linea;
    }
}

public class PrimeroGenerador implements Generador {
    public String obtenerNumeroLibre(SortedSet&amp;#x3C;String&gt; lineas) {
        String linea = lineas.first();
        lineas.remove(linea);
        return linea;
    }
}

public class RandomGenerador implements Generador {
    public String obtenerNumeroLibre(SortedSet&amp;#x3C;String&gt; lineas) {
        List&amp;#x3C;String&gt; lista = new ArrayList&amp;#x3C;&gt;(lineas);
        String linea = lista.get(new Random().nextInt(lista.size()));
        lineas.remove(linea);
        return linea;
    }
}

public class GestorNumerosDisponibles {
	private SortedSet&amp;#x3C;String&gt; lineas = new TreeSet&amp;#x3C;String&gt;(); 
	private Generador tipoGenerador = new UltimoGenerador();

	public String obtenerNumeroLibre() {
		return tipoGenerador.obtenerNumeroLibre(lineas);
	}

	public void cambiarTipoGenerador(Genedor generador) {
		this.tipoGenerador = generador;
	}
}
class EmpresaTest {
	@Test
	void obtenerNumeroLibre() {
		// por defecto es el ultimo
		assertEquals(&quot;2214444559&quot;, this.sistema.obtenerNumeroLibre());
			
		this.sistema.getGestorNumeros().cambiarTipoGenerador(new PrimeroGenerador());
		assertEquals(&quot;2214444554&quot;, this.sistema.obtenerNumeroLibre());

		this.sistema.getGestorNumeros().cambiarTipoGenerador(new RandomGenerador());
		assertNotNull(this.sistema.obtenerNumeroLibre());
	}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;hr&gt;</content:encoded><h:img src="/_astro/thumbnail.CpG_ZoEJ.jpg"/><enclosure url="/_astro/thumbnail.CpG_ZoEJ.jpg"/></item><item><title>🎁 Decorator</title><link>https://fabianmartinezrincon.com/blog/decorator</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/decorator</guid><description>Patron Decorator</description><pubDate>Sun, 21 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Introducción&lt;/h1&gt;
&lt;p&gt;El patrón de diseño &lt;strong&gt;Decorator&lt;/strong&gt; se utiliza para agregar responsabilidades adicionales a un objeto de manera dinámica y transparente, es decir, sin afectar a otros objetos de la misma clase. A diferencia de la herencia, donde el comportamiento es estático y no se puede cambiar después de la compilación, el Decorator permite la adición y eliminación dinámica de comportamientos.&lt;/p&gt;
&lt;h2&gt;Objetivo del Decorator&lt;/h2&gt;
&lt;p&gt;El objetivo del Decorator es permitir la extensión de las funcionalidades de un objeto sin necesidad de heredar de él. Esto proporciona una alternativa flexible a la herencia para extender la funcionalidad.&lt;/p&gt;
&lt;h2&gt;Aplicabilidad&lt;/h2&gt;
&lt;p&gt;Usarías el Decorator para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Agregar responsabilidades a objetos de forma individual y de manera que puedas agregar o quitar funcionalidad en tiempo de ejecución.&lt;/li&gt;
&lt;li&gt;Evitar la creación de una gran cantidad de subclases que solo se diferencian en la funcionalidad que agregan.&lt;/li&gt;
&lt;li&gt;Modificar el comportamiento de los objetos encapsulando la variabilidad dentro de clases dedicadas a tal fin.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Solución que Ofrece&lt;/h2&gt;
&lt;p&gt;El patrón Decorator resuelve este problema permitiendo envolver un objeto dentro de una &quot;piel&quot; de objetos decoradores. Estos decoradores implementan la misma interfaz que el objeto que están decorando y agregan su comportamiento antes o después de delegar la llamada al objeto envuelto.&lt;/p&gt;
&lt;h3&gt;Estructura del Decorator&lt;/h3&gt;
&lt;p&gt;La estructura típica de un patrón Decorator incluye:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Componente (Component):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Una interfaz que define las operaciones que pueden ser decoradas.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Componente Concreto (ConcreteComponent):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Clase que implementa &lt;code&gt;Component&lt;/code&gt; y define un objeto que puede tener responsabilidades adicionales agregadas.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Decorador (Decorator):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Clase abstracta que implementa &lt;code&gt;Component&lt;/code&gt; y mantiene una referencia a un objeto &lt;code&gt;Component&lt;/code&gt;. El &lt;code&gt;Decorator&lt;/code&gt; delega las operaciones al objeto &lt;code&gt;Component&lt;/code&gt; y puede añadir comportamiento antes o después de la delegación.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Decoradores Concretos (ConcreteDecorators):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Clases que extienden &lt;code&gt;Decorator&lt;/code&gt; y agregan responsabilidades específicas al &lt;code&gt;Component&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Consecuencias&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Flexibilidad:&lt;/strong&gt; Al ser más flexible que la herencia, permite la adición y eliminación dinámica de responsabilidades.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Incrementalidad:&lt;/strong&gt; Facilita la adición de funcionalidades incrementales sin afectar a otros objetos o clases.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Complejidad:&lt;/strong&gt; Puede aumentar la cantidad de objetos pequeños en el sistema y complicar la estructura, especialmente si se anidan muchos decoradores.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Ejemplo en Código&lt;/h3&gt;
&lt;p&gt;En el contexto de entrada/salida de archivos (File I/O Streams), el patrón Decorator se utiliza para agregar comportamientos como buffering, compresión, encriptación, etc., de manera dinámica. Por ejemplo, puedes tener un &lt;code&gt;FileInputStream&lt;/code&gt; y luego agregarle dinámicamente un &lt;code&gt;BufferedInputStream&lt;/code&gt; y un &lt;code&gt;GZipInputStream&lt;/code&gt; para obtener un stream que lee de un archivo, lo descomprime y además añade funcionalidad de buffering.&lt;/p&gt;
&lt;h3&gt;Resumen&lt;/h3&gt;
&lt;p&gt;El patrón Decorator es una herramienta poderosa que ofrece una alternativa flexible a la herencia para extender las funcionalidades de los objetos. Permite modificar comportamientos de forma dinámica y es ampliamente utilizado en la programación orientada a objetos para añadir funcionalidades a clases ya existentes sin alterar su estructura.&lt;/p&gt;
&lt;h2&gt;Estructura&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/472bafdd-106d-4184-a262-c46c2229c869&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;El patrón de diseño &lt;strong&gt;Decorator&lt;/strong&gt; se utiliza para agregar responsabilidades adicionales a un objeto de manera dinámica y transparente, es decir, sin afectar a otros objetos de la misma clase. A diferencia de la herencia, donde el comportamiento es estático y no se puede cambiar después de la compilación, el Decorator permite la adición y eliminación dinámica de comportamientos.&lt;/p&gt;
&lt;h3&gt;Objetivo del Decorator&lt;/h3&gt;
&lt;p&gt;El objetivo del Decorator es permitir la extensión de las funcionalidades de un objeto sin necesidad de heredar de él. Esto proporciona una alternativa flexible a la herencia para extender la funcionalidad.&lt;/p&gt;
&lt;h3&gt;Aplicabilidad&lt;/h3&gt;
&lt;p&gt;Usarías el Decorator para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Agregar responsabilidades a objetos de forma individual y de manera que puedas agregar o quitar funcionalidad en tiempo de ejecución.&lt;/li&gt;
&lt;li&gt;Evitar la creación de una gran cantidad de subclases que solo se diferencian en la funcionalidad que agregan.&lt;/li&gt;
&lt;li&gt;Modificar el comportamiento de los objetos encapsulando la variabilidad dentro de clases dedicadas a tal fin.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Solución que Ofrece&lt;/h3&gt;
&lt;p&gt;El patrón Decorator resuelve este problema permitiendo envolver un objeto dentro de una &quot;piel&quot; de objetos decoradores. Estos decoradores implementan la misma interfaz que el objeto que están decorando y agregan su comportamiento antes o después de delegar la llamada al objeto envuelto.&lt;/p&gt;
&lt;h3&gt;Estructura del Decorator&lt;/h3&gt;
&lt;p&gt;La estructura típica de un patrón Decorator incluye:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Componente (Component):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Una interfaz que define las operaciones que pueden ser decoradas.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Componente Concreto (ConcreteComponent):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Clase que implementa &lt;code&gt;Component&lt;/code&gt; y define un objeto que puede tener responsabilidades adicionales agregadas.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Decorador (Decorator):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Clase abstracta que implementa &lt;code&gt;Component&lt;/code&gt; y mantiene una referencia a un objeto &lt;code&gt;Component&lt;/code&gt;. El &lt;code&gt;Decorator&lt;/code&gt; delega las operaciones al objeto &lt;code&gt;Component&lt;/code&gt; y puede añadir comportamiento antes o después de la delegación.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Decoradores Concretos (ConcreteDecorators):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Clases que extienden &lt;code&gt;Decorator&lt;/code&gt; y agregan responsabilidades específicas al &lt;code&gt;Component&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Consecuencias&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Flexibilidad:&lt;/strong&gt; Al ser más flexible que la herencia, permite la adición y eliminación dinámica de responsabilidades.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Incrementalidad:&lt;/strong&gt; Facilita la adición de funcionalidades incrementales sin afectar a otros objetos o clases.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Complejidad:&lt;/strong&gt; Puede aumentar la cantidad de objetos pequeños en el sistema y complicar la estructura, especialmente si se anidan muchos decoradores.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Ejemplo en Código&lt;/h3&gt;
&lt;p&gt;En el contexto de entrada/salida de archivos (File I/O Streams), el patrón Decorator se utiliza para agregar comportamientos como buffering, compresión, encriptación, etc., de manera dinámica. Por ejemplo, puedes tener un &lt;code&gt;FileInputStream&lt;/code&gt; y luego agregarle dinámicamente un &lt;code&gt;BufferedInputStream&lt;/code&gt; y un &lt;code&gt;GZipInputStream&lt;/code&gt; para obtener un stream que lee de un archivo, lo descomprime y además añade funcionalidad de buffering.&lt;/p&gt;
&lt;h3&gt;Resumen&lt;/h3&gt;
&lt;p&gt;El patrón Decorator es una herramienta poderosa que ofrece una alternativa flexible a la herencia para extender las funcionalidades de los objetos. Permite modificar comportamientos de forma dinámica y es ampliamente utilizado en la programación orientada a objetos para añadir funcionalidades a clases ya existentes sin alterar su estructura.&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.Bf0lTXis.jpg"/><enclosure url="/_astro/thumbnail.Bf0lTXis.jpg"/></item><item><title>📦 Composite</title><link>https://fabianmartinezrincon.com/blog/composite</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/composite</guid><description>Patron Composite</description><pubDate>Sat, 20 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Introducción&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://youtu.be/ES3DnAPted0?si=rXTAYg96uVkFsYAq&quot;&gt;Video de BettaTech&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;El patrón &lt;strong&gt;Composite&lt;/strong&gt; es un patrón de diseño estructural que te permite componer objetos en estructuras de árbol para representar jerarquías parte-todo. Permite a los clientes tratar tanto a los objetos individuales como a las composiciones de objetos de manera uniforme.&lt;/p&gt;
&lt;h2&gt;Concepto Principal&lt;/h2&gt;
&lt;p&gt;El patrón Composite se basa en la idea de que tanto los objetos individuales (hojas) como los grupos de objetos (composites) deben ser tratados de manera similar. Es decir, deben poder ser manejados a través de una interfaz común.&lt;/p&gt;
&lt;h2&gt;Problema&lt;/h2&gt;
&lt;p&gt;El problema que resuelve el patrón Composite es cómo organizar los objetos en estructuras que incluyan tanto objetos simples como grupos de objetos que deberían ser tratados de la misma manera. Por ejemplo, piensa en una interfaz gráfica con figuras que pueden ser simples (como círculos o rectángulos) o compuestas (como un diagrama que está formado por múltiples figuras).&lt;/p&gt;
&lt;h2&gt;Estructura&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Componente (Component):&lt;/strong&gt; Es la interfaz o clase abstracta que declara las operaciones comunes tanto para los objetos simples como para los compuestos. Puede incluir métodos para agregar y eliminar hijos, así como operaciones específicas como &lt;code&gt;move()&lt;/code&gt; o &lt;code&gt;draw()&lt;/code&gt; que deben ser implementadas por todos los objetos concretos.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Hoja (Leaf):&lt;/strong&gt; Representa los objetos finales de la composición que no tienen hijos. Realizan las operaciones solicitadas directamente.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Compuesto (Composite):&lt;/strong&gt; Define comportamientos para los componentes que tienen hijos. Guarda los componentes hijos y delega a ellos las operaciones que se invocan en el objeto compuesto.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Consecuencias&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Facilita la construcción de objetos complejos a partir de partes simples y composites.&lt;/li&gt;
&lt;li&gt;Simplifica el código de los clientes, ya que pueden tratar todos los objetos de la composición uniformemente.&lt;/li&gt;
&lt;li&gt;Facilita la adición de nuevos tipos de componentes, ya que los cambios son aislados y no afectan al código cliente.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Contras:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Puede ser difícil restringir los tipos de componentes en una composición. Por ejemplo, no hay una forma sencilla de permitir solo ciertos componentes en un compuesto.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cuestiones de Implementación:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Se pueden tener referencias explícitas al padre para facilitar la navegación y la gestión de la estructura.&lt;/li&gt;
&lt;li&gt;Se debe decidir entre la transparencia y la seguridad en el manejo de las operaciones de los hijos (p. ej., debería &lt;code&gt;Leaf&lt;/code&gt; tener operaciones para manejar hijos?).&lt;/li&gt;
&lt;li&gt;Es posible que necesites caching, ordenar los hijos, o manejar su borrado.&lt;/li&gt;
&lt;li&gt;Puedes elegir diferentes estructuras de datos para almacenar los componentes, dependiendo de las operaciones que necesites optimizar.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Ejemplo Aplicado&lt;/h3&gt;
&lt;p&gt;Imagina que estás diseñando un sistema para un Banco de Alimentos que necesita armar cajas con productos que cumplen ciertos requerimientos nutricionales. Puedes tener productos individuales como &lt;code&gt;Leaf&lt;/code&gt; y composiciones como cajas o paquetes como &lt;code&gt;Composite&lt;/code&gt;. El patrón Composite te permitiría tratar tanto un producto individual como una caja de productos de manera uniforme, por ejemplo, para calcular el valor nutricional total.&lt;/p&gt;
&lt;p&gt;En resumen, el patrón Composite es muy útil para trabajar con estructuras que pueden ser tratadas de manera recursiva como si fueran un único objeto, facilitando el manejo de colecciones de objetos a través de una interfaz común.&lt;/p&gt;
&lt;p&gt;| En la vida | En objetos :( |
| --------- | --------- |
| &lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/df3cc88a-bcd8-4da6-b073-806299a8d3e2&quot; alt=&quot;image&quot;&gt;   | &lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/101ffd56-5d80-4ff7-bb38-17f7a4c7cc88&quot; alt=&quot;image&quot;&gt;   |&lt;/p&gt;
&lt;h3&gt;Estructura&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/d8eb8cc1-a8db-42c1-b9aa-c21905472526&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;El diagrama UML que has subido representa el patrón de diseño Composite de una manera clásica y clara. A continuación, te detallo cada componente y su relación en el patrón:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cliente (Client):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Representa la parte del sistema que interactúa con la estructura compuesta. El cliente utiliza la interfaz &apos;Component&apos; para trabajar con los objetos del árbol.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Componente (Component):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Es una clase abstracta o interfaz que declara la interfaz común para todos los objetos en la composición, tanto simples (Leaf) como compuestos (Composite).&lt;/li&gt;
&lt;li&gt;Define las operaciones como &lt;code&gt;Operation()&lt;/code&gt;, que debe ser implementada tanto por las hojas como por los compuestos.&lt;/li&gt;
&lt;li&gt;También declara operaciones para manipular los hijos (&lt;code&gt;Add(Component)&lt;/code&gt;, &lt;code&gt;Remove(Component)&lt;/code&gt;, &lt;code&gt;GetChild(int)&lt;/code&gt;), aunque estos métodos no necesariamente tienen sentido o serán implementados en las hojas.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Hoja (Leaf):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Representa los objetos finales de la composición que no tienen hijos (objetos simples). Las hojas implementan la operación &lt;code&gt;Operation()&lt;/code&gt; que es común a todos los componentes del árbol.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Compuesto (Composite):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Representa los objetos complejos del árbol que pueden tener hijos. Estos hijos pueden ser tanto hojas como otros compuestos, permitiendo así la recursividad y la formación de una estructura de árbol.&lt;/li&gt;
&lt;li&gt;La clase Composite implementa la operación &lt;code&gt;Operation()&lt;/code&gt; y las operaciones de manejo de hijos (&lt;code&gt;Add(Component)&lt;/code&gt;, &lt;code&gt;Remove(Component)&lt;/code&gt;, &lt;code&gt;GetChild(int)&lt;/code&gt;). Cuando se invoca &lt;code&gt;Operation()&lt;/code&gt;, el Composite itera sobre sus hijos y les llama la operación &lt;code&gt;Operation()&lt;/code&gt; a cada uno de ellos (&lt;code&gt;forall g in children g.Operation();&lt;/code&gt;). Esto permite aplicar una operación a un grupo completo de objetos (hojas y/o compuestos) de manera transparente.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Relaciones:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La relación de herencia/interfaz (línea con un triángulo vacío) desde &apos;Leaf&apos; y &apos;Composite&apos; hacia &apos;Component&apos; significa que ambos, &apos;Leaf&apos; y &apos;Composite&apos;, conforman la interfaz de &apos;Component&apos;.&lt;/li&gt;
&lt;li&gt;La relación de agregación (línea con un diamante vacío) de &apos;Composite&apos; a &apos;Component&apos; indica que &apos;Composite&apos; puede tener cero o más hijos de tipo &apos;Component&apos;.&lt;/li&gt;
&lt;li&gt;La flecha punteada desde &apos;Composite&apos; hacia la operación &apos;Operation()&apos; de &apos;Component&apos; denota la llamada a esta operación en cada hijo durante la ejecución de &apos;Composite&apos;s Operation()&apos;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Este diagrama UML es fundamental para entender cómo el patrón Composite permite manejar objetos simples y compuestos de manera uniforme a través de una interfaz común, lo cual simplifica el código del cliente y permite construir jerarquías complejas de objetos.&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.BOyhdqqd.jpg"/><enclosure url="/_astro/thumbnail.BOyhdqqd.jpg"/></item><item><title>📡 Proxy</title><link>https://fabianmartinezrincon.com/blog/proxy</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/proxy</guid><description>Patron Proxy</description><pubDate>Sat, 20 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Estructura&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/9bf9a870-344d-4070-93d1-796fc49082a3&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;El diagrama UML que proporcionaste muestra la estructura del patrón de diseño &lt;strong&gt;Proxy&lt;/strong&gt;. Aquí está el detalle de cada parte del diagrama:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cliente (Client):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La clase que actúa como consumidor de los servicios proporcionados por el &lt;code&gt;Subject&lt;/code&gt;. El cliente interactúa con el &lt;code&gt;Subject&lt;/code&gt; sin necesariamente saber si está trabajando con un &lt;code&gt;RealSubject&lt;/code&gt; o un &lt;code&gt;Proxy&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Sujeto (Subject):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Es una interfaz que define una operación común llamada &lt;code&gt;Request()&lt;/code&gt; que debe ser implementada tanto por el &lt;code&gt;Proxy&lt;/code&gt; como por el &lt;code&gt;RealSubject&lt;/code&gt;. Representa la interfaz que el &lt;code&gt;Client&lt;/code&gt; utiliza para trabajar con los objetos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Sujeto Real (RealSubject):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La clase que hereda o implementa la interfaz &lt;code&gt;Subject&lt;/code&gt; y define el objeto real que el &lt;code&gt;Proxy&lt;/code&gt; está destinado a representar. &lt;code&gt;RealSubject&lt;/code&gt; implementa la operación real &lt;code&gt;Request()&lt;/code&gt; que el cliente quiere invocar.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Proxy:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Una clase que también implementa la interfaz &lt;code&gt;Subject&lt;/code&gt; y contiene una referencia al &lt;code&gt;RealSubject&lt;/code&gt;. Su propósito es controlar el acceso al &lt;code&gt;RealSubject&lt;/code&gt;, posiblemente realizando tareas adicionales como carga perezosa, control de acceso, buffering, etc., cuando se invoca su método &lt;code&gt;Request()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;El &lt;code&gt;Proxy&lt;/code&gt; implementa el método &lt;code&gt;Request()&lt;/code&gt; que es llamado por el &lt;code&gt;Client&lt;/code&gt;. Dentro de este método, el &lt;code&gt;Proxy&lt;/code&gt; puede realizar operaciones adicionales y, finalmente, delegar la llamada al &lt;code&gt;RealSubject&lt;/code&gt; llamando a &lt;code&gt;realSubject-&gt;Request()&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Funcionamiento del Proxy&lt;/h3&gt;
&lt;p&gt;Cuando el &lt;code&gt;Client&lt;/code&gt; invoca &lt;code&gt;Request()&lt;/code&gt;, puede hacerlo a través de un objeto &lt;code&gt;Proxy&lt;/code&gt;. El &lt;code&gt;Proxy&lt;/code&gt; entonces tiene la oportunidad de interceder en la operación. Puede realizar acciones antes o después de pasar la llamada a &lt;code&gt;Request()&lt;/code&gt; del &lt;code&gt;RealSubject&lt;/code&gt;. Este enfoque es útil para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Retrasar la creación del objeto real solo cuando se necesita realmente (&lt;code&gt;Lazy Initialization&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Controlar el acceso al objeto real por razones de seguridad (&lt;code&gt;Protection Proxy&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Gestionar la interacción con un objeto que está en un espacio de memoria diferente (&lt;code&gt;Remote Proxy&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Ejemplo&lt;/h3&gt;
&lt;p&gt;Imagina que el &lt;code&gt;RealSubject&lt;/code&gt; es un sistema de gestión de documentos y el &lt;code&gt;Proxy&lt;/code&gt; proporciona un control de acceso seguro. Cuando un cliente solicita abrir un documento a través del método &lt;code&gt;Request()&lt;/code&gt;, el &lt;code&gt;Proxy&lt;/code&gt; puede verificar las credenciales del usuario antes de permitir o negar el acceso al documento solicitando el método &lt;code&gt;Request()&lt;/code&gt; en el &lt;code&gt;RealSubject&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;En Resumen&lt;/h3&gt;
&lt;p&gt;El patrón Proxy es un patrón estructural esencial en el diseño de software que proporciona un objeto sustituto para otro objeto para controlar el acceso a él. Este patrón es particularmente útil para operaciones costosas o de seguridad, permitiendo que las operaciones se realicen de manera más eficiente o segura.&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.DRPBrjPo.jpg"/><enclosure url="/_astro/thumbnail.DRPBrjPo.jpg"/></item><item><title>🗽 State</title><link>https://fabianmartinezrincon.com/blog/state</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/state</guid><description>Patron State</description><pubDate>Sat, 20 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Introducción&lt;/h2&gt;
&lt;p&gt;El patrón &lt;strong&gt;State&lt;/strong&gt; es un patrón de diseño de comportamiento que permite a un objeto cambiar su comportamiento cuando su estado interno cambia. Parece como si el objeto cambiara su clase. Es especialmente útil en el diseño de máquinas de estado, donde el comportamiento de un objeto puede cambiar drásticamente dependiendo de su estado actual.&lt;/p&gt;
&lt;h3&gt;Intención&lt;/h3&gt;
&lt;p&gt;El propósito del patrón State es encapsular los estados variables de un objeto en clases separadas y permitir al objeto cambiar de estado como si cambiara de clase. En lugar de estar lleno de condicionales para realizar diferentes acciones dependiendo del estado, el objeto delega las acciones al objeto de estado actual.&lt;/p&gt;
&lt;h3&gt;Uso&lt;/h3&gt;
&lt;p&gt;El patrón State es útil cuando tienes un objeto que se comporta de manera diferente según el estado en el que se encuentra, y hay muchas operaciones condicionales que dependen del estado.&lt;/p&gt;
&lt;h3&gt;Estructura&lt;/h3&gt;
&lt;p&gt;El patrón State se compone de varias partes clave:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Contexto (Context):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Es la clase que tiene un estado que dicta cómo debe comportarse. Mantiene una referencia a una instancia de una subclase de &lt;code&gt;State&lt;/code&gt; que representa el estado actual.&lt;/li&gt;
&lt;li&gt;El contexto delega las operaciones a la instancia de &lt;code&gt;State&lt;/code&gt; para actuar de acuerdo con su estado actual.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Estado (State):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Es una interfaz o clase abstracta que define la interfaz para encapsular el comportamiento asociado con un estado particular del contexto.&lt;/li&gt;
&lt;li&gt;Puede definir métodos que serán llamados por el contexto para realizar acciones que dependen del estado.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Estados Concretos (ConcreteStates):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Son clases que implementan la interfaz &lt;code&gt;State&lt;/code&gt; y definen el comportamiento real asociado con un estado del contexto.&lt;/li&gt;
&lt;li&gt;Cada &lt;code&gt;ConcreteState&lt;/code&gt; sabe a qué otro estado debe cambiar el contexto bajo ciertas condiciones y puede realizar la transición al cambiar la referencia de &lt;code&gt;State&lt;/code&gt; en el contexto.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Ventajas&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Localización del Comportamiento de Estado:&lt;/strong&gt; Centraliza el comportamiento de cada estado en clases correspondientes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cambios de Estado explícitos:&lt;/strong&gt; Cambiar de un estado a otro se hace explícitamente cambiando la instancia de estado dentro del contexto, lo cual es más claro que usar múltiples condicionales.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Estado y Transiciones Encapsulados:&lt;/strong&gt; Al aislar los estados en diferentes clases, se encapsulan tanto las acciones como las transiciones entre estados.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Desventajas&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Aumento de Clases:&lt;/strong&gt; Puede incrementar el número de clases en el sistema.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dependencia entre Estados Concretos:&lt;/strong&gt; Puede haber dependencia entre &lt;code&gt;ConcreteStates&lt;/code&gt; si no se planifica adecuadamente, lo que puede llevar a un mantenimiento más difícil.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Ejemplo Aplicado&lt;/h3&gt;
&lt;p&gt;Un ejemplo común del patrón State es una máquina expendedora que tiene diferentes estados, como &apos;Esperando selección&apos;, &apos;Validando pago&apos;, &apos;Dispensando producto&apos;, y &apos;Dando cambio&apos;. Cada estado determinará cómo responderá la máquina a diferentes entradas, como la selección de un producto o la inserción de dinero.&lt;/p&gt;
&lt;h3&gt;Resumen&lt;/h3&gt;
&lt;p&gt;El patrón State es esencial para situaciones donde el comportamiento de un objeto depende de su estado, y hay complejas reglas de transición entre estados. Este patrón oculta las complejidades de estado y transición en un marco de trabajo que es fácil de entender y mantener.&lt;/p&gt;
&lt;h2&gt;Estructura&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/07e27d74-e170-4cb4-8c7e-07dc30f89281&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Este diagrama UML describe el patrón de diseño State. A continuación, te detallo cada componente del diagrama y cómo interactúan entre sí:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Contexto (Context):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La clase &lt;code&gt;Context&lt;/code&gt; mantiene una referencia a una instancia de la clase &lt;code&gt;State&lt;/code&gt;, que representa el estado actual del contexto.&lt;/li&gt;
&lt;li&gt;Contiene un método &lt;code&gt;request()&lt;/code&gt; que es el punto de entrada para solicitar la operación. Este método luego delega la ejecución a la instancia de &lt;code&gt;State&lt;/code&gt; actual llamando a &lt;code&gt;state.handle()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;La asociación entre &lt;code&gt;Context&lt;/code&gt; y &lt;code&gt;State&lt;/code&gt; se muestra con una línea que tiene un círculo al final, indicando que &lt;code&gt;Context&lt;/code&gt; mantiene una referencia a &lt;code&gt;State&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Estado (State):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La interfaz o clase abstracta &lt;code&gt;State&lt;/code&gt; define un método &lt;code&gt;handle()&lt;/code&gt;, que será implementado por las subclases concretas para realizar las acciones asociadas con un estado específico.&lt;/li&gt;
&lt;li&gt;Esta es la interfaz común que todas las clases concretas de estado implementarán.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Estados Concretos (ConcreteStateA y ConcreteStateB):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ConcreteStateA&lt;/code&gt; y &lt;code&gt;ConcreteStateB&lt;/code&gt; son implementaciones de la interfaz &lt;code&gt;State&lt;/code&gt;. Cada una define una versión del método &lt;code&gt;handle()&lt;/code&gt;, que contiene la lógica específica que debe ejecutarse cuando el objeto &lt;code&gt;Context&lt;/code&gt; se encuentra en el estado correspondiente.&lt;/li&gt;
&lt;li&gt;Estos objetos de estado concreto pueden cambiar el estado del &lt;code&gt;Context&lt;/code&gt; al reemplazar la instancia de estado actual por otra, lo que permite cambiar el comportamiento del &lt;code&gt;Context&lt;/code&gt; dinámicamente.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Transiciones de Estado:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En la práctica, la implementación de &lt;code&gt;handle()&lt;/code&gt; en &lt;code&gt;ConcreteStateA&lt;/code&gt; podría resultar en un cambio de estado al establecer una nueva instancia de &lt;code&gt;State&lt;/code&gt; (por ejemplo, &lt;code&gt;ConcreteStateB&lt;/code&gt;) en el &lt;code&gt;Context&lt;/code&gt;. Esto no se muestra explícitamente en el diagrama, pero es parte central de cómo funciona el patrón State.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Cómo Funciona&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Cuando un cliente invoca &lt;code&gt;request()&lt;/code&gt; en el &lt;code&gt;Context&lt;/code&gt;, el &lt;code&gt;Context&lt;/code&gt; delega esa solicitud a su objeto de estado actual llamando a &lt;code&gt;state.handle()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;El objeto de &lt;code&gt;State&lt;/code&gt; actual determina qué operaciones realizar y puede cambiar el estado actual del &lt;code&gt;Context&lt;/code&gt; a otro estado, influyendo así en el comportamiento futuro del &lt;code&gt;Context&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Este patrón permite al &lt;code&gt;Context&lt;/code&gt; cambiar su comportamiento en tiempo de ejecución sin tener que recurrir a grandes cantidades de condicionales y sin violar el principio de abierto/cerrado, que promueve que las entidades (clases, módulos, funciones, etc.) deberían estar abiertas para su extensión, pero cerradas para su modificación.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El diagrama ilustra una estructura flexible que soporta cambios en el comportamiento de un objeto sin recurrir a múltiples sentencias &lt;code&gt;if&lt;/code&gt; o &lt;code&gt;switch&lt;/code&gt; a lo largo del código, facilitando así la mantenibilidad y escalabilidad.&lt;/p&gt;
&lt;h2&gt;State vs Strategy&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/4bddf196-bd44-416e-9af1-8a06c333ba54&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;El patrón &lt;strong&gt;State&lt;/strong&gt; y el patrón &lt;strong&gt;Strategy&lt;/strong&gt; son a menudo confundidos debido a que su estructura UML puede parecer similar y ambos patrones implican el uso de composición para cambiar el comportamiento de un objeto en tiempo de ejecución. Sin embargo, sus intenciones, uso y forma de gestionar el cambio de comportamiento son distintos.&lt;/p&gt;
&lt;h3&gt;State&lt;/h3&gt;
&lt;p&gt;El patrón &lt;strong&gt;State&lt;/strong&gt; se utiliza cuando el comportamiento de un objeto debe cambiar de acuerdo con su estado interno. Cada estado es representado por una clase concreta que implementa una interfaz común, y el objeto cambia su comportamiento cambiando su estado interno a diferentes instancias de estas clases de estado.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Características del State:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Encapsula los posibles estados en diferentes clases.&lt;/li&gt;
&lt;li&gt;Cambios de estado normalmente se ocultan dentro de las clases de estado y pueden ser automáticos en respuesta a eventos internos.&lt;/li&gt;
&lt;li&gt;El objeto de contexto puede no saber qué clase de estado concreto está en uso, reflejando un cambio en el comportamiento de manera transparente.&lt;/li&gt;
&lt;li&gt;El número y naturaleza de los estados pueden ser muchos y complejos, cada estado puede tener su propia lógica para determinar a qué estado cambiar después.&lt;/li&gt;
&lt;li&gt;Se enfoca en el ciclo de vida de un objeto y cómo cambia su comportamiento a lo largo del tiempo y los eventos internos.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Strategy&lt;/h3&gt;
&lt;p&gt;El patrón &lt;strong&gt;Strategy&lt;/strong&gt; se centra en definir una familia de algoritmos, encapsulando cada uno en su propia clase de estrategia, y haciendo los algoritmos intercambiables desde el contexto. Este patrón se utiliza principalmente para seleccionar un algoritmo de un grupo de algoritmos en tiempo de ejecución.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Características del Strategy:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Encapsula un algoritmo o estrategia específica en una clase.&lt;/li&gt;
&lt;li&gt;Los cambios de estrategia suelen ser explícitos y controlados desde afuera, por el cliente del objeto de contexto.&lt;/li&gt;
&lt;li&gt;El objeto de contexto sabe qué estrategia está utilizando y normalmente elige entre estrategias concretas predefinidas.&lt;/li&gt;
&lt;li&gt;Los algoritmos no suelen cambiar automáticamente y no dependen del estado interno del objeto.&lt;/li&gt;
&lt;li&gt;Se enfoca en operaciones o acciones que realiza el objeto y en cómo pueden variar independientemente del ciclo de vida del objeto.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Comparación&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cambios de Comportamiento:&lt;/strong&gt; En el State, los cambios de comportamiento están ligados al estado interno del objeto. En el Strategy, los cambios de comportamiento se realizan cambiando la estrategia asignada al objeto desde el exterior.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conocimiento de los Estados/Algoritmos:&lt;/strong&gt; En el State, el objeto no necesita tener conocimiento de qué estado está activo. En Strategy, el cliente del contexto debe conocer las estrategias concretas para elegir una.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Control de Cambios:&lt;/strong&gt; En State, los estados suelen controlarse y cambiar desde el interior de la clase de estado. En Strategy, el contexto o el cliente externo controla cuál estrategia se utiliza.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;En Resumen&lt;/h3&gt;
&lt;p&gt;El State se ocupa de lo que un objeto es (estado interno), mientras que el Strategy se ocupa de lo que un objeto hace (comportamiento o algoritmo). Mientras que State puede conducir a un cambio en el comportamiento debido a un cambio en el estado interno del objeto, Strategy implica cambiar el comportamiento asignando un nuevo algoritmo, a menudo como resultado de decisiones tomadas fuera del objeto.&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.BCS4P-8C.jpg"/><enclosure url="/_astro/thumbnail.BCS4P-8C.jpg"/></item><item><title>🔑 Strategy</title><link>https://fabianmartinezrincon.com/blog/strategy</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/strategy</guid><description>Patrón Strategy</description><pubDate>Sat, 20 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;&lt;a href=&quot;https://youtu.be/VQ8V0ym2JSo?si=TQ_pmyrfQPNl2bGn&quot;&gt;Video de BettaTech&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;El patrón de diseño Strategy es un patrón de comportamiento que permite definir una familia de algoritmos, encapsular cada uno de ellos como un objeto, y hacerlos intercambiables. Strategy permite variar los algoritmos utilizados por un objeto de manera dinámica sin alterar el uso de los algoritmos por parte de los clientes.&lt;/p&gt;
&lt;h4&gt;Intención&lt;/h4&gt;
&lt;p&gt;El propósito del patrón Strategy es:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Desacoplar un algoritmo de su clase y esconder los detalles de implementación al cliente.&lt;/li&gt;
&lt;li&gt;Permitir el cambio dinámico de comportamiento de un objeto cuando su estado interno cambia.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Uso&lt;/h4&gt;
&lt;p&gt;El patrón Strategy es especialmente útil cuando:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Varias versiones de un algoritmo existen, y el cliente no debe conocer los detalles de implementación.&lt;/li&gt;
&lt;li&gt;La implementación de un algoritmo puede cambiar independientemente de los clientes que lo utilizan.&lt;/li&gt;
&lt;li&gt;Hay múltiples comportamientos condicionales y quieres evitar múltiples sentencias condicionales.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Estructura&lt;/h4&gt;
&lt;p&gt;El patrón Strategy se compone de tres partes principales:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Contexto (Context):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mantiene una referencia a una estrategia concreta (ConcreteStrategy) y puede definir una interfaz que permite a la estrategia acceder a sus datos.&lt;/li&gt;
&lt;li&gt;Delega el trabajo a la estrategia asociada en lugar de ejecutarlo por sí mismo.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Estrategia (Strategy):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Es una interfaz o clase abstracta común a todos los algoritmos concretos que forman parte de esta familia de algoritmos.&lt;/li&gt;
&lt;li&gt;Declara un método usualmente llamado &lt;code&gt;execute()&lt;/code&gt; o &lt;code&gt;perform()&lt;/code&gt; que será implementado por cada algoritmo concreto.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Estrategias Concretas (ConcreteStrategies):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Son implementaciones concretas de la interfaz Strategy que encapsulan cada uno de los algoritmos.&lt;/li&gt;
&lt;li&gt;Cada uno define su propio método &lt;code&gt;execute()&lt;/code&gt; o &lt;code&gt;perform()&lt;/code&gt; con el comportamiento específico.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Ventajas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Flexibilidad:&lt;/strong&gt; Al separar las estrategias y el contexto, puedes cambiar el comportamiento del contexto en tiempo de ejecución cambiando su estrategia.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reutilización:&lt;/strong&gt; Las estrategias pueden ser reutilizadas entre diferentes contextos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Principios SOLID:&lt;/strong&gt; Strategy favorece la programación orientada a interfaces y soporta el principio de inversión de dependencias, que dice que las clases de alto nivel no deberían depender de las clases de bajo nivel, sino de abstracciones.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Desventajas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Complejidad Adicional:&lt;/strong&gt; Puede sobrecomplicar el código si se utiliza para casos que no requieren una variabilidad de comportamientos significativa.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conocimiento de las Estrategias:&lt;/strong&gt; Los clientes deben conocer las diferencias entre las estrategias para poder seleccionar la adecuada.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Ejemplo Aplicado&lt;/h4&gt;
&lt;p&gt;Un ejemplo común es un sistema de pago en línea donde puedes tener diferentes estrategias para procesar un pago (por ejemplo, con tarjeta de crédito, PayPal, criptomoneda). El cliente selecciona la estrategía de pago y el contexto (sistema de pago) utiliza la estrategia para procesar el pago sin conocer los detalles de la implementación.&lt;/p&gt;
&lt;h4&gt;Resumen&lt;/h4&gt;
&lt;p&gt;En conclusión, el patrón Strategy es fundamental para diseñar sistemas flexibles y fácilmente extensibles, permitiendo el cambio de algoritmos en tiempo de ejecución sin gran impacto en el código cliente. Permite separar la selección de un algoritmo de su ejecución, proporcionando una serie de alternativas para realizar una tarea específica.&lt;/p&gt;
&lt;h3&gt;Estructura&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/315e3d36-107c-4e53-89eb-795f69baffd2&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Este diagrama UML ilustra el patrón de diseño Strategy. Cada parte del diagrama se explica a continuación:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Contexto (Context):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La clase &lt;code&gt;Context&lt;/code&gt; es la clase que utiliza la estrategia y tiene un método que se refiere a la estrategia, a menudo llamado algo como &lt;code&gt;ContextInterface()&lt;/code&gt;. En la práctica, este método utilizará un objeto de la estrategia para ejecutar una parte de su algoritmo.&lt;/li&gt;
&lt;li&gt;Posee una referencia a la interfaz &lt;code&gt;Strategy&lt;/code&gt; que se muestra con una línea que termina en un rombo blanco, indicando una relación de asociación; la clase &lt;code&gt;Context&lt;/code&gt; contiene o tiene acceso a un objeto &lt;code&gt;Strategy&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Estrategia (Strategy):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La clase &lt;code&gt;Strategy&lt;/code&gt; es una interfaz o clase abstracta que define una operación común para todas las estrategias concretas, denominada aquí &lt;code&gt;AlgorithmInterface()&lt;/code&gt;. Esta operación es el método que el &lt;code&gt;Context&lt;/code&gt; va a ejecutar.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Estrategias Concretas (ConcreteStrategyA, ConcreteStrategyB, ConcreteStrategyC):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Las clases &lt;code&gt;ConcreteStrategyA&lt;/code&gt;, &lt;code&gt;ConcreteStrategyB&lt;/code&gt;, y &lt;code&gt;ConcreteStrategyC&lt;/code&gt; son implementaciones concretas de la interfaz &lt;code&gt;Strategy&lt;/code&gt;. Cada una de ellas implementará &lt;code&gt;AlgorithmInterface()&lt;/code&gt; de manera que realice un comportamiento específico del algoritmo.&lt;/li&gt;
&lt;li&gt;Aunque comparten la misma operación &lt;code&gt;AlgorithmInterface()&lt;/code&gt;, cada implementación de la operación realizará probablemente acciones muy diferentes; estas diferencias representan las distintas estrategias que el &lt;code&gt;Context&lt;/code&gt; puede utilizar.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;La esencia de este diagrama es que el objeto &lt;code&gt;Context&lt;/code&gt; puede cambiar su comportamiento en tiempo de ejecución al cambiar el objeto &lt;code&gt;Strategy&lt;/code&gt; que está utilizando sin cambiar su interfaz. Esto le permite variar su comportamiento dinámicamente al delegar detalles operativos a los objetos de estrategia, en lugar de implementar múltiples comportamientos en sí mismo.&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.DrZ9MI-z.jpg"/><enclosure url="/_astro/thumbnail.DrZ9MI-z.jpg"/></item><item><title>📃Template-Method</title><link>https://fabianmartinezrincon.com/blog/template-method</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/template-method</guid><description>Patrón Template-Method</description><pubDate>Sat, 20 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Ejemplo WTF&lt;/h2&gt;
&lt;p&gt;Esto es lo que no tenemos que hacer&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/9bb08ceb-3773-4173-8a32-884dce2bf301&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Claro, aquí tienes un resumen conciso de los puntos clave del patrón de diseño &lt;strong&gt;Template Method&lt;/strong&gt;:&lt;/p&gt;
&lt;h4&gt;Concepto Principal&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;El &lt;strong&gt;Template Method&lt;/strong&gt; es un patrón de diseño que define el esqueleto de un algoritmo en un método, postergando algunos pasos algorítmicos a las subclases. Esto permite que las subclases puedan alterar ciertos pasos del algoritmo sin cambiar su estructura general.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Uso&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Se utiliza cuando varios algoritmos tienen estructuras similares pero difieren en algunos pasos específicos.&lt;/li&gt;
&lt;li&gt;Ayuda a evitar la duplicación de código y promueve la reutilización al centralizar el código común en una clase base.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Estructura&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Clase Abstracta&lt;/strong&gt;: Define un método plantilla (&lt;code&gt;templateMethod()&lt;/code&gt;) que contiene un algoritmo con pasos definidos, algunos de los cuales son implementados por subclases.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Subclases Concretas&lt;/strong&gt;: Implementan los detalles específicos de los pasos del algoritmo que varían entre las diferentes implementaciones.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Ventajas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reutilización de Código&lt;/strong&gt;: Centraliza el código común, reduciendo la duplicación.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Extensibilidad&lt;/strong&gt;: Facilita la introducción de nuevas variantes de un algoritmo sin modificar el código existente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Control&lt;/strong&gt;: El flujo del programa es controlado desde el nivel superior, permitiendo una mejor gestión del comportamiento del software.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Desventajas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Rigidez&lt;/strong&gt;: Puede resultar en jerarquías de clases rígidas si las subclases tienen que seguir una estructura de método plantilla muy estricta.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Complejidad&lt;/strong&gt;: Puede ser difícil seguir el flujo de control cuando el algoritmo es complejo y distribuido a través de múltiples subclases.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Aplicaciones Típicas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Muy usado en frameworks y bibliotecas donde se define un algoritmo estándar con puntos de extensión específicos para que los usuarios los adapten según necesiten.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este patrón es fundamental para diseñar aplicaciones robustas y fácilmente extensibles, manteniendo un alto nivel de coherencia y cohesión en el código base.&lt;/p&gt;
&lt;h3&gt;Estructura&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/cee1aaa5-8f35-4e3b-8bbc-a23aab37014f&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;La imagen que has proporcionado ilustra el patrón de diseño &lt;strong&gt;Template Method&lt;/strong&gt; a través de un diagrama UML (Unified Modeling Language). Este diagrama muestra la relación entre una clase abstracta y una clase concreta en el contexto de este patrón. A continuación, te explico cada uno de los elementos del diagrama:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;AbstractClass&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Es una clase abstracta que define un método llamado &lt;code&gt;TemplateMethod()&lt;/code&gt;. Este método es el método plantilla que dicta el algoritmo general. En el contexto del patrón, este método invoca una serie de operaciones en un orden específico.&lt;/li&gt;
&lt;li&gt;Contiene declaraciones de métodos llamados &lt;code&gt;PrimitiveOperation1()&lt;/code&gt; y &lt;code&gt;PrimitiveOperation2()&lt;/code&gt;. Estos son llamados dentro de &lt;code&gt;TemplateMethod()&lt;/code&gt; y son los pasos del algoritmo que varían según la implementación específica. Por lo tanto, se definen como operaciones, pero su implementación exacta se deja a las subclases.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ConcreteClass&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Esta es una subclase de &lt;code&gt;AbstractClass&lt;/code&gt; y proporciona implementaciones concretas de los métodos &lt;code&gt;PrimitiveOperation1()&lt;/code&gt; y &lt;code&gt;PrimitiveOperation2()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Cuando &lt;code&gt;TemplateMethod()&lt;/code&gt; se ejecuta en una instancia de &lt;code&gt;ConcreteClass&lt;/code&gt;, se llamarán las implementaciones de &lt;code&gt;PrimitiveOperation1()&lt;/code&gt; y &lt;code&gt;PrimitiveOperation2()&lt;/code&gt; de &lt;code&gt;ConcreteClass&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Flecha de Herencia&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La flecha sólida de &lt;code&gt;ConcreteClass&lt;/code&gt; a &lt;code&gt;AbstractClass&lt;/code&gt; indica que &lt;code&gt;ConcreteClass&lt;/code&gt; hereda de &lt;code&gt;AbstractClass&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Líneas discontinuas con marcadores de llamada&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Las líneas discontinuas que apuntan a los métodos &lt;code&gt;PrimitiveOperation1()&lt;/code&gt; y &lt;code&gt;PrimitiveOperation2()&lt;/code&gt; desde &lt;code&gt;TemplateMethod()&lt;/code&gt; indican que estos métodos son invocados (llamados) por &lt;code&gt;TemplateMethod()&lt;/code&gt;. En UML, estas líneas discontinuas suelen representar llamadas a métodos o utilización de métodos definidos en otro lugar.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Este diagrama UML está comunicando que &lt;code&gt;AbstractClass&lt;/code&gt; establece un algoritmo en &lt;code&gt;TemplateMethod()&lt;/code&gt;, pero deja algunos de los detalles específicos de ese algoritmo para ser definidos por &lt;code&gt;ConcreteClass&lt;/code&gt;. De esta manera, las clases concretas que extienden &lt;code&gt;AbstractClass&lt;/code&gt; pueden alterar partes del algoritmo sin cambiar la estructura general del mismo.&lt;/p&gt;
&lt;h2&gt;Ejemplo Práctico (Ejercicio 4 Cálculo de sueldos)&lt;/h2&gt;
&lt;p&gt;Sea una empresa que paga sueldos a sus empleados, los cuales están organizados en tres tipos: Temporarios, Pasantes y Planta. El sueldo se compone de 3 elementos: sueldo básico, adicionales y descuentos.&lt;/p&gt;
&lt;p&gt;|          | Temporario                                      | Pasante          | Planta                        |
|----------|-------------------------------------------------|------------------|-------------------------------|
| básico   | $ 20.000 + cantidad de horas que trabajo * $ 300| $20.000          | $ 50.000                      |
| adicional| $5.000 si está casado$2.000 por cada hijo  | $2.000 por examen que rindió | $5.000 si está casado$2.000 por cada hijo$2.000 por cada año de antigüedad |
| descuento| 13% del sueldo básico5% del sueldo adicional| 13% del sueldo básico5% del sueldo adicional | 13% del sueldo básico5% del sueldo adicional |&lt;/p&gt;
&lt;h3&gt;Tareas&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Diseñe la jerarquía de Empleados de forma tal que cualquier empleado puede responder al mensaje #sueldo.&lt;/li&gt;
&lt;li&gt;Desarrolle los test cases necesarios para probar todos los casos posibles.&lt;/li&gt;
&lt;li&gt;Implemente en Java.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;Diagrama&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/39f37ecd-5aa8-4136-8449-50995a69c2e3&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Codigo&lt;/h3&gt;
&lt;h4&gt;Empleado&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public abstract class Empleado {
	private String nombre;
	protected double cantidadHijos;
	protected Boolean estaCasado;
	
	public Empleado(String nombre) {
		this.nombre = nombre;
	}
	
	public double calcularSueldo() {
		return this.getBasico() + getAdicional() - getDescuento();
	}
	
	abstract double getBasico();
	abstract double getAdicional();
	
	double getDescuento() {
		return this.getBasico() * 0.13 + this.getAdicional() * 0.05;
	}
	
	public void setCasado(Boolean estaCasado) {
		this.estaCasado = estaCasado;
	}
	
	public void cantidadHijos(double cantidadHijos) {
		this.cantidadHijos = cantidadHijos;
	}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Empresa&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class Empresa {
	List&amp;#x3C;Empleado&gt; empleados = new ArrayList&amp;#x3C;Empleado&gt;();
	
	public void agregarEmpleado(Empleado e) {
		this.empleados.add(e);
	}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Pasante&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class Pasante extends Empleado{
	private double examenesRendidos;
	
	public Pasante(String nombre) {
		super(nombre);
	}

	@Override
	double getBasico() {
		return 20000;
	}

	@Override
	double getAdicional() {
		return 2000 * this.examenesRendidos;
	}
	
	public void setExamenesRendidos(double cantidadExamenes) {
		this.examenesRendidos = cantidadExamenes;
	}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Planta&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class Planta extends Empleado{
	private double antiguedad;
	
	public Planta(String nombre) {
		super(nombre);
		// TODO Auto-generated constructor stub
	}

	public void setAntiguedad(double antiguedad) {
		this.antiguedad = antiguedad;
	}
	
	@Override
	double getBasico() {
		return 50000;
	}

	@Override
	double getAdicional() {
		double total = 0;
		if (this.estaCasado) {
			total = total + 5000;
		}
		return total + (2000 * this.cantidadHijos) + (2000 * this.antiguedad);  
		
	}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Temporal&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class Temporal extends Empleado{
	private double cantidadHoras;
	
	public Temporal(String nombre) {
		super(nombre);
	}  

	public void setCantidadHoras(double horas) {
		this.cantidadHoras = horas;
	}
	
	@Override
	double getBasico() {
		return 20000 + (this.cantidadHoras * 300);
	}

	@Override
	double getAdicional() {
		if (this.estaCasado) {
			return 5000 + (2000 * this.cantidadHijos);
		}
		return 2000 * this.cantidadHijos;
		
	}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Test&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class EmpleadoTest {
	
	Pasante pasante;
	Planta planta;
	Temporal temporal;
	
	@BeforeEach
	void setUp() throws Exception {
		temporal = new Temporal(&quot;Temporal&quot;);
		pasante = new Pasante(&quot;Pasante&quot;);
		planta = new Planta(&quot;Planta&quot;);		
	}
	
    @Test
    public void testTemporal() {
    	temporal.setCantidadHoras(10);
    	temporal.setCasado(true);
    	temporal.cantidadHijos(1);
    	
        assertEquals(23000, temporal.getBasico());
        assertEquals(7000, temporal.getAdicional());
        assertEquals((23000 * 0.13) + (7000 * 0.05), temporal.getDescuento());
    }
    
    @Test
    public void testPasante() {
    	pasante.setExamenesRendidos(10);
    	
        assertEquals(20000, pasante.getBasico());
        assertEquals(20000, pasante.getAdicional());
        assertEquals((20000 * 0.13) + (20000 * 0.05), pasante.getDescuento());
    }
    
    @Test
    public void testPlanta() {
    	planta.setCasado(true);
    	planta.cantidadHijos(1);
    	planta.setAntiguedad(1);
    	
        assertEquals(50000, planta.getBasico());
        assertEquals(9000, planta.getAdicional());
        assertEquals((50000 * 0.13) + (9000 * 0.05), planta.getDescuento());
    }
}
&lt;/code&gt;&lt;/pre&gt;</content:encoded><h:img src="/_astro/thumbnail.ULOByYM9.jpg"/><enclosure url="/_astro/thumbnail.ULOByYM9.jpg"/></item><item><title>🔌 Adapter</title><link>https://fabianmartinezrincon.com/blog/adapter</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/adapter</guid><description>Patron Adapter</description><pubDate>Fri, 19 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Ejemplo Practico&lt;/h1&gt;
&lt;p&gt;Supongamos que tienes un sistema de figuras geométricas 2D y deseas extenderlo para manejar figuras 3D. Las figuras 3D tienen métodos distintos para dibujar y moverse (por ejemplo, &lt;code&gt;3dDraw()&lt;/code&gt; y &lt;code&gt;3dMove()&lt;/code&gt;). Podrías crear un adaptador que permita manejar estas figuras 3D como si fueran figuras 2D, proporcionando así una interfaz uniforme en el editor de figuras.&lt;/p&gt;
&lt;p&gt;Este patrón es especialmente útil en sistemas donde no puedes controlar el código fuente de las clases que necesitas usar, facilitando la integración y la extensibilidad sin modificar el comportamiento existente.&lt;/p&gt;
&lt;p&gt;| Sistema | Implementación a Agregar |
| --------- | --------- |
| &lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/c759e543-54a8-420a-a041-445902d76aa7&quot; alt=&quot;image&quot;&gt;   | &lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/96378126-7cc8-4f47-8451-70deb55546c8&quot; alt=&quot;image&quot;&gt;   |&lt;/p&gt;
&lt;h2&gt;Transformación&lt;/h2&gt;
&lt;p&gt;Ahora que sabemos cual es el problema y no podemos modificar nada, vamos a crear un adaptador entre los dos sistemas. El adapter termina heredando los meotodos de la interfaz que se quiere adaptar.&lt;/p&gt;
&lt;p&gt;| Sistema | Implementación a Agregar |
| --------- | --------- |
| &lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/53b4d8b8-eabc-4882-9091-aec428b90977&quot; alt=&quot;image&quot;&gt;   |  &lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/ade568ef-6b05-44b8-9147-62edd3aa7759&quot; alt=&quot;image&quot;&gt;  |&lt;/p&gt;
&lt;p&gt;Una vez que entendemos este concepto, vamos a identificar los respectivos roles futuras explicaciones.&lt;/p&gt;
&lt;h3&gt;Estructura&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/c0aa4ff9-9381-4f0d-bc3d-ff208c67d797&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Ejemplo: Integración de figuras 3D en un sistema de figuras 2D&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Escenario:&lt;/strong&gt;
Supongamos que tienes un sistema de edición gráfico que hasta ahora ha trabajado solo con figuras 2D (como círculos y rectángulos), y necesitas extenderlo para soportar figuras 3D (como esferas y cubos). El sistema de figuras 2D utiliza métodos como &lt;code&gt;draw()&lt;/code&gt; y &lt;code&gt;move()&lt;/code&gt;. Las figuras 3D, en cambio, tienen métodos como &lt;code&gt;draw3D()&lt;/code&gt; y &lt;code&gt;move3D()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Objetivo:&lt;/strong&gt;
Queremos que las figuras 3D sean tratadas como figuras 2D por el editor gráfico, sin cambiar la interfaz de usuario ni el código del cliente que maneja las figuras 2D.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Descripción de los componentes:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Target (Figura2D):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Esta es la interfaz que el cliente espera usar. Define métodos como &lt;code&gt;draw()&lt;/code&gt; y &lt;code&gt;move()&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Client (Editor):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Utiliza objetos que implementan la interfaz &lt;code&gt;Figura2D&lt;/code&gt;. Este cliente quiere usar figuras 3D pero sin alterar su forma de interactuar con figuras 2D.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Adapter (Adaptador3D):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Implementa la interfaz &lt;code&gt;Figura2D&lt;/code&gt; y adapta la interfaz de las figuras 3D al mundo de las figuras 2D.&lt;/li&gt;
&lt;li&gt;Contiene una instancia de &lt;code&gt;Figura3D&lt;/code&gt; y traduce las llamadas de los métodos &lt;code&gt;draw()&lt;/code&gt; y &lt;code&gt;move()&lt;/code&gt; de la interfaz &lt;code&gt;Figura2D&lt;/code&gt; a &lt;code&gt;draw3D()&lt;/code&gt; y &lt;code&gt;move3D()&lt;/code&gt; respectivamente.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Adaptee (Figura3D):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Clase que define una interfaz que necesita ser adaptada para ser utilizada por el cliente. En este caso, &lt;code&gt;Figura3D&lt;/code&gt; tiene métodos como &lt;code&gt;draw3D()&lt;/code&gt; y &lt;code&gt;move3D()&lt;/code&gt; que son incompatibles directamente con el sistema existente de figuras 2D.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Funcionamiento:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cuando el &lt;strong&gt;Editor&lt;/strong&gt; (cliente) necesita dibujar o mover una figura, llama a &lt;code&gt;draw()&lt;/code&gt; o &lt;code&gt;move()&lt;/code&gt; en la interfaz &lt;code&gt;Figura2D&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;El &lt;strong&gt;Adaptador3D&lt;/strong&gt; recibe estas llamadas y las traduce a &lt;code&gt;draw3D()&lt;/code&gt; y &lt;code&gt;move3D()&lt;/code&gt; del objeto &lt;code&gt;Figura3D&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;La &lt;code&gt;Figura3D&lt;/code&gt; realiza las acciones necesarias y el resultado se refleja en la interfaz del usuario como si se estuviese manejando una figura 2D convencional.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este enfoque permite que el sistema original de figuras 2D se extienda a nuevas dimensiones sin alterar el código cliente existente, garantizando que los nuevos tipos de figuras se integren de manera transparente y manteniendo la cohesión y modularidad del sistema.&lt;/p&gt;
&lt;h3&gt;Ejemplo Practico&lt;/h3&gt;
&lt;p&gt;Usted ha implementado una clase Media player, para reproducir archivos de audio y video en formatos que usted ha diseñado. Cada Media se puede reproducir con el mensaje play(). Para continuar con el desarrollo, usted desea incorporar la posibilidad de reproducir Video Stream. Para ello, dispone de la clase VideoStream que pertenece a una librería de terceros y usted no puede ni debe modificarla. El desafío que se le presenta es hacer que la clase MediaPlayer pueda interactuar con la clase VideoStream.
La situación se resume en el siguiente diagrama UML:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Orientacion-a-Objetos-2/assets/55964635/6400603c-4313-40fd-ac50-25eae5c79657&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Tareas:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Modifique el diagrama de clases UML para considerar los cambios necesarios. Si utiliza patrones de diseño indique los roles en las clases utilizando estereotipos.&lt;/li&gt;
&lt;li&gt;Implemente en Java&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Diagrama&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/e7ccb84f-5f1a-43ee-ac34-e6d8bc5bb213&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;El uml lo corregi pero el codigo no&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class Audio extends Media{
	
	public String play() {
		String nombre = &quot;audio&quot;;
		return nombre;
	}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class Media {
	public String play() {
		String nombre = &quot;media&quot;;
		return nombre;
	}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class VideoFile extends Media{
	public String play() {
		String nombre = &quot;video file&quot;;
		return nombre;
	}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class VideoStream extends VideoFile{
	public String reproduce() {
		String nombre = &quot;video stream&quot;;
		return nombre;
	}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;adapterVideoStream&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class adapterVideoStream extends VideoFile{
	private VideoStream vs = new VideoStream();
	
	public String play() {
		return vs.reproduce();
	}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;MediaPlayer&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class MediaPlayer {
	private List&amp;#x3C;Media&gt; media = new ArrayList&amp;#x3C;Media&gt;(); 
	
	public void play() {
		System.out.println(&quot;Play&quot;);
	}
	
	public void agregarMedia(Media m) {
		this.media.add(m);
	}
	
	public String concatenarNombresMedia() {
        String nombresConcatenados = &quot;&quot;;
        for (int i = 0; i &amp;#x3C; media.size(); i++) {
            nombresConcatenados += media.get(i).play(); 
            if (i &amp;#x3C; media.size() - 1) {
                nombresConcatenados += &quot;, &quot;; 
            }
        }
        return nombresConcatenados;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Test&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class MediaPlayerTest {
	
	MediaPlayer mp;
	Audio a;
	VideoFile vf;
	VideoStream vs;
	AdapterVideoStream adapter;
	
	@BeforeEach
	void setUp() throws Exception {
		mp = new MediaPlayer();
		a = new Audio();
		vf = new VideoFile();
		adapter = new AdapterVideoStream();
		
		mp.agregarMedia(a);
		mp.agregarMedia(vf);
		mp.agregarMedia(adapter);
	}
	
    @Test
    public void testNombreCompleto() {
    	assertEquals(&quot;audio, video file, video stream&quot;, mp.concatenarNombresMedia());
    }
}
&lt;/code&gt;&lt;/pre&gt;</content:encoded><h:img src="/_astro/thumbnail.D26PHI-Q.jpg"/><enclosure url="/_astro/thumbnail.D26PHI-Q.jpg"/></item><item><title>Final DBD</title><link>https://fabianmartinezrincon.com/blog/dbd-final</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/dbd-final</guid><description>En esta pagina tenes preguntas para poder simular el final (Las preguntas de DBD estan sacadas de este blog, solo que en este no las respondi)</description><pubDate>Sun, 31 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;😎 ESPACIO PUBLICITARIO 😎&lt;/h2&gt;
&lt;p&gt;En esta pagina tenes preguntas para poder simular el final (Las preguntas de DBD estan sacadas de este blog, solo que en este no las respondi)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://josu-dev.github.io/Depende-Quiz-Datos/&quot;&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/4f839366-b9b3-4de2-a1fe-bdfa75f5782b&quot; alt=&quot;Quiz DBD&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#modelado-de-datos&quot;&gt;Modelado De Datos&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#capitulo-9-introducci%C3%B3n-al-modelado-de-datos&quot;&gt;Capitulo 9. &lt;code&gt;Introducción al modelado de Datos&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#capitulo-10-modelado-entidad-relaci%C3%B3n-conceptual&quot;&gt;Capitulo 10. &lt;code&gt;Modelado Entidad Relación Conceptual&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#capitulo-11-modelado-entidad-relaci%C3%B3n-l%C3%B3gico&quot;&gt;Capitulo 11. &lt;code&gt;Modelado Entidad Relación Lógico&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#capitulo-12-modelado-fisico-relacional&quot;&gt;Capitulo 12. &lt;code&gt;Modelado Fisico (Relacional)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#capitulo-13-conceptos-de-normalizaci%C3%B3n&quot;&gt;Capitulo 13. &lt;code&gt;Conceptos de Normalización&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#procesamiento-de-consultas&quot;&gt;procesamiento de Consultas&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#capitulo-14-lenguajes-de-procesamientom-de-datos-algebra-y-calculo&quot;&gt;Capitulo 14. &lt;code&gt;Lenguajes de Procesamientom de Datos (Algebra y Calculo)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#capitulo-15-sql-y-qbe&quot;&gt;Capitulo 15. &lt;code&gt;SQL y QBE&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#capitulo-16-optimizaci%C3%B3n-de-consultas&quot;&gt;Capitulo 16. &lt;code&gt;Optimización de Consultas&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#seguridad-e-integridad-de-los-datos&quot;&gt;Seguridad e Integridad de los Datos&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#capitulo-17-concecptos-de-transacciones&quot;&gt;Capitulo 17. &lt;code&gt;Concecptos de Transacciones&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#capitulo-18-transacciones-en-entornos-concurrentes&quot;&gt;Capitulo 18. &lt;code&gt;Transacciones en Entornos Concurrentes&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#capitulo-19-seguridad-e-integridad&quot;&gt;Capitulo 19. &lt;code&gt;Seguridad e Integridad&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Modelado de Datos&lt;/h2&gt;
&lt;h3&gt;Capitulo 9. &lt;code&gt;Introducción al modelado de Datos&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Es un conjunto de herramientas conceptuales que permiten describir la información que es necesaria administrar para un SI (Sistema de Información),
las relaciones existen entre estos datos, la semántica asociada y las restricciones de consistencia&lt;/p&gt;
&lt;p&gt;Es desarrollado durante la etapa de adquisición de conocimiento del problema; el analista se independiza del tipo de SGBD (Sistema de Gestión de Bases de Datos) a utilizar y, por consiguiente, dedl producto de mercado. Así, el modelo conceptual se desarrolla independientemente de su implementación final.&lt;/p&gt;
&lt;p&gt;El analista debe determinar el tipo de SGBD, debido a que las decisiones que debe tomar dependen de esa elección.&lt;/p&gt;
&lt;p&gt;Es necesario tomar decisiones específicas. Estas últimas tienen que ver con el producto de mercado a utilizar, es decir, el SGBD específico.&lt;/p&gt;
&lt;h3&gt;Capitulo 10. &lt;code&gt;Modelado Entidad Relación Conceptual&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/FOD/assets/55964635/b693153b-0d1c-4a6a-84d3-528d050c74dc&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/FOD/assets/55964635/b6d63f29-0df5-4547-a9bb-8572e04c8871&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/FOD/assets/55964635/526eb338-f35e-43ac-b650-d947aa1decc5&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/FOD/assets/55964635/e04df4dc-cf37-4800-929b-e1a5d6458048&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Ejemplos&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/FOD/assets/55964635/537b9876-f60f-425c-bc18-6b18c9eebe2c&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/FOD/assets/55964635/3a047ef6-5ae3-41d2-aac6-aece47c70756&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Ejemplo&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/FOD/assets/55964635/66cd70e8-0e74-461e-8fb7-2a8252f450e5&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Cardinalidades&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/FOD/assets/55964635/00f4c0a0-2d1f-4574-9a01-273916b8a596&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/FOD/assets/55964635/c89b332b-8d0e-40e2-bf6f-20a3de2bd7ba&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Ejemplo&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/FOD/assets/55964635/c2cf7bb0-a514-4cf4-a64e-9b94a0728bc8&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/FOD/assets/55964635/882e35f7-e4c0-4860-bb28-a158eff5aceb&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Ejemplo&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/FOD/assets/55964635/3b8787ff-24ad-4f3b-b88d-652fa366ced6&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/FOD/assets/55964635/96cff147-7eec-4092-9eb9-2d3b98b553c8&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Ejemplo&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/FOD/assets/55964635/f87b9c7e-e7ad-4723-b4de-9cc55a463979&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/FOD/assets/55964635/a5af9c52-03aa-4ac8-b074-20cf2301cc74&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/fac1b82f-a829-40ea-bc7d-d3a082703736&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Identificador Simple&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/150e09dd-b1cb-400c-bea1-2b89513dfdcb&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Identificador Compuesto&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/0e67bd94-1dec-4c76-b31a-70d1e7e8e1f2&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Identificador Externo&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/7b0f32b0-4423-4cdc-abc2-3fb653fc3a64&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Capitulo 11. &lt;code&gt;Modelado Entidad Relación Lógico&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/b2560676-d61d-4153-b785-8f9abd6f5196&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/5fe85d5c-e6e6-43d5-84f6-d942ed97f6ad&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Ejemplo de como deberian verse los atributos polivalentes&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/b5f8aea3-9115-4a83-b097-6e48ade4ba64&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/a045d635-b49e-4021-a781-b06ccbcb284c&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/370263c7-7898-490e-bde8-2f3592755181&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/fed015d7-a5e6-40e1-a3ef-5ddd19ee19db&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/60cce5aa-f12a-4884-a759-e7fe924dd0dd&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/1e50b6b5-658c-4e01-be7d-4ee1b1124e40&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Primer Ejemplo de Relacion de Jerarquia (P-E)&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/23066141-5b6b-4b2c-994e-490d0cb6c2a0&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/94051a04-c275-4ac3-862c-08a5cfd9bda1&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Sobre el mismo ejemplo pero aplicando la 3ra opción&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/b725c0bc-9dad-4de6-88fd-b5af84806a7d&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Segundo Ejemplo de Relacion de Jerarquia (T-E)&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/e2ee215f-363b-4bdc-a1da-3304ede7a604&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Resolución con la 3era opción&lt;/h4&gt;
&lt;p&gt;Las otras dos opciones aunque se pueden aplicar, no son rentables en este caso ya que perdemos mucha legibilidad y mantenibilidad en el modelo.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/2a562884-b811-4fa3-9c49-34f56af4c521&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Capitulo 12. &lt;code&gt;Modelado Fisico (Relacional)&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/f5b486ac-c482-4d37-8928-ca9c070480fc&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/ddacd0b4-ebbf-4f3f-8b49-14fdf1701cae&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/3ee482c9-9b62-42f8-8072-9d61088e80ae&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/96bcdbd2-122f-4240-8e6a-ba3accaabf5d&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/e46fb735-5e36-41a2-ab26-1f5c6b41d2eb&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/f624fa1c-5f5b-4c9f-aa50-d65927167c85&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/b5095bcc-2777-475b-a8b6-b0e637966d0b&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/847f4d34-39bf-4725-af39-ce1114bc7e50&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/2319e63c-0211-45f9-8407-3fb969f33392&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/f1237f7d-cdb2-42f2-9902-1b58d844eb2d&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/4775229c-d4c1-41bf-b449-94cf22d3ec95&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/8e04e746-fac7-4f47-90b7-437150b9bfb2&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/5a0d9073-8a69-4e60-ad3f-94cbff645cf3&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/9b6d6e8c-f63a-4cf8-a72c-7fef727d861e&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/a9406746-8f58-44d3-ac11-2d0b7bfbded3&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/5f35607f-9fbf-4c21-89a0-bc37bede0377&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/5a410b48-90de-44d2-8ab1-4724472ddedf&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/c40ebe41-3b33-4c43-aec7-3bb097a0bd11&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/b38d61b6-843e-4e18-a836-8acf6d0246f7&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/15569a2c-9c1b-46b1-b221-59f19c29c9ac&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/c3aaf951-f3ba-4298-8566-8b77ab0424e2&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/71cfb10a-32ab-4cfc-945b-92a2161b04d4&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/019dd03e-6dcc-487d-a3e5-ffecaf0a7ce0&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/3caa6244-05bf-41f1-8c45-dc7ca81a8a4f&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/b7d40c38-df13-430e-9893-ab62179ba856&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/fe282b50-14da-4cea-acc9-5cdb238b007a&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;No entiendo muy bien cuando hablan de un id Auto Incremental&lt;/p&gt;
&lt;h3&gt;Capitulo 13. &lt;code&gt;Conceptos de Normalización&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/10312851-8abf-4ca3-a73c-4a395518219a&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/37192650-6f13-4903-87ab-a354f2d64ce0&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/96d234ac-158e-4f7a-b136-c00a3a8338f1&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/5c4096e8-7bfb-4568-a89d-cd9a9147f723&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/40bb4730-2c35-4d47-9928-5c73e5d0accb&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/96d234ac-158e-4f7a-b136-c00a3a8338f1&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/3dfc3b3e-d372-461b-8bdc-6fe7337b6b55&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/96d234ac-158e-4f7a-b136-c00a3a8338f1&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/5fc57b5c-bb4f-4387-866d-930ea28c39f2&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/4805cd4d-bcb4-4ffd-8cca-3fc2d0df7b3a&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/6f30c8c2-0376-49b0-a314-481a9123ce98&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/a8d2b6b5-0c83-4acf-8f19-e3a30aa36395&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/ab047be1-97c9-46a7-91ef-39166a44d480&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/faf87410-e7d0-4238-9d58-8fa0856dd802&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/95ee5640-dd54-4c19-8903-6f65b683e091&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/7c0da7d4-a847-4f1a-9705-3d8215a5fa04&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Procesamiento de Consultas&lt;/h2&gt;
&lt;h3&gt;Capitulo 14. &lt;code&gt;Lenguajes de Procesamientom de Datos (Algebra y Calculo)&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Los lenguajes de procesamiento de datos permiten operar con la información contenida en una BD&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/ebaabdb3-8079-41ab-89c7-e11d47d16135&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/a0f3d6d8-3acb-443b-b559-61f2c9716f28&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/55a17f2a-02ca-4284-88ee-72f7240055d5&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Selección&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/26d82211-698a-42c9-87c9-99b8a7e5e6e1&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/5486427c-a274-49b6-9a71-170d8191f746&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/beaef63d-ebc0-47c4-b152-6df97222138f&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Proyección&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/23865cd1-d1e6-4feb-b83d-1df50f984056&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/f77ba88e-f755-4542-b580-16664349233e&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/bce22b96-a207-4627-a4d0-9fed0847f29a&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Producto Cartesiano&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/5fd9042e-733f-462d-9904-3336940dcdac&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/68f89435-fe31-4412-b399-6074df552902&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/f9ea231d-6821-4060-88e3-6f2b99b025c4&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/f047b7f7-1407-46d3-a25b-0ddd89ec5e21&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Resultado&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/9704040f-9693-4f72-9411-e64a4f40488c&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/36a9c303-d2b4-460d-982d-a27e9a28275e&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Renombre&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/21479ea2-09cc-4b85-ad32-0a14a78b3054&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/707049bd-4a64-46ee-bfb0-5c723441cd90&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Resultado&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/ca8ade51-3800-4504-9229-28d2bdaea84f&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/fb120440-ffa9-45af-8a53-0f70ffe7fc2a&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Union&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/63cb07c0-f663-4579-bd8e-2baab048d065&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/28b69d3b-1b83-4afb-846e-509f2aa81f0c&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Tablas&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/14562c37-bcd8-4be0-80a7-6e5684d46466&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/82673347-f1a2-46e4-93ac-4db6c219d9f8&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/7a30fac2-982c-4ee8-80fa-17fe7f3e96e8&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Resultado&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/50510ba8-219f-4154-bea1-ba3cd954e4a5&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/1c059871-12fb-4aee-8177-428fb058c700&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Diferencia&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/776fdb23-47b6-4a9c-be03-8cf92dffacb0&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/c36e0f93-ae5c-4035-97d3-5c8925194cc8&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Tablas&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/14562c37-bcd8-4be0-80a7-6e5684d46466&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/82673347-f1a2-46e4-93ac-4db6c219d9f8&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/7a30fac2-982c-4ee8-80fa-17fe7f3e96e8&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Resultado&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/3265ba61-2467-4ca7-be08-14b503bf0f08&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Producto Natural&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/6f12af31-fa5c-4ad8-9d96-2e0d52b80680&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/36f3f46e-fca5-490b-a792-2ae0f2661d22&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/f9ea231d-6821-4060-88e3-6f2b99b025c4&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/f047b7f7-1407-46d3-a25b-0ddd89ec5e21&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Resultado&lt;/h4&gt;
&lt;p&gt;Seria esto sin las tablas repetidas&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/9704040f-9693-4f72-9411-e64a4f40488c&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Intersección&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/8c3df123-9993-4b80-b1ac-11924426e15a&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/89bba6b0-e8c8-4d25-907f-05ba58bb7f8b&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/14562c37-bcd8-4be0-80a7-6e5684d46466&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/82673347-f1a2-46e4-93ac-4db6c219d9f8&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/7a30fac2-982c-4ee8-80fa-17fe7f3e96e8&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Resultado&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/3d1a2f65-4617-4671-8f1b-6ffcfad9348e&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/c7bfa7cd-868d-4a24-b5fb-e63ff0cb55dd&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Asignación&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/0dafdca6-6694-473b-bf4e-d197ce16242c&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h3&gt;División&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/dd4e0285-41ca-46ac-99f2-9288b75695d1&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Altas&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/30b1a46a-e535-4643-abfa-225850d1a897&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Bajas&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/dc40371e-a64d-4f07-bb72-f22213b91dcf&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Modificaciones&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/442e77f5-6684-4d87-8491-9c5a7b5740fa&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Capitulo 15. &lt;code&gt;SQL y QBE&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/67504e79-25c4-4237-bdfd-187b39f3a610&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/58a3d666-e379-43e2-bb7a-af25749aaa22&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/22fd98d6-4ce1-4d77-bba3-5364182db56e&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/d869ba0c-8c47-4b3a-8288-6888be4ad3e1&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/1dcc3ea3-0fe8-4666-b3ab-937b54464163&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/cc3ae613-a1d4-451e-b653-3a3b703b388e&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/118a9c8a-4d57-4bf6-bf7a-a404207ff632&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/c28ee4bb-3736-4258-b9b3-317e76b2807f&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Me tengo que hacer algun apunte sobre todo SQL no porque sea mucho que lo es, sino que es mucho de forma muy distina, muchas operaciones.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Capitulo 16. &lt;code&gt;Optimización de Consultas&lt;/code&gt;&lt;/h3&gt;
&lt;hr&gt;
&lt;h2&gt;Seguridad e Integridad de los Datos&lt;/h2&gt;
&lt;h3&gt;Capitulo 17. &lt;code&gt;Concecptos de Transacciones&lt;/code&gt;&lt;/h3&gt;
&lt;h3&gt;Capitulo 18. &lt;code&gt;Transacciones en Entornos Concurrentes&lt;/code&gt;&lt;/h3&gt;
&lt;h3&gt;Capitulo 19. &lt;code&gt;Seguridad e Integridad&lt;/code&gt;&lt;/h3&gt;
&lt;hr&gt;
&lt;h2&gt;Finales&lt;/h2&gt;
&lt;h3&gt;Final de Marzo 2024&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;1)&lt;/code&gt; Por que se debe remover la jerarquia del modelo logico relacional&lt;/p&gt;
&lt;p&gt;&lt;code&gt;2)&lt;/code&gt; Que cardinalidad deben poseer los atributos derivados?&lt;/p&gt;
&lt;p&gt;&lt;code&gt;3)&lt;/code&gt; Para que se define la Integridad Referencial y que ventajas trae?&lt;/p&gt;
&lt;p&gt;&lt;code&gt;4)&lt;/code&gt; porque el modelo conceptual es independiente del tipo de dbms?&lt;/p&gt;
&lt;p&gt;&lt;code&gt;5)&lt;/code&gt; Por que el DBMS es el encargado de hacer la optimizacion&lt;/p&gt;
&lt;p&gt;&lt;code&gt;6)&lt;/code&gt; Que diferencia hay entre lenguaje procedural y no procedural&lt;/p&gt;
&lt;p&gt;&lt;code&gt;7)&lt;/code&gt; Durabilidad en entornos monousuario&lt;/p&gt;
&lt;p&gt;&lt;code&gt;8)&lt;/code&gt; Por que no hay agregacion en el Where&lt;/p&gt;
&lt;p&gt;&lt;code&gt;9)&lt;/code&gt;  crear tu pregunta&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Finales&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExd2lpd3A1emYyajVvOGV2MjBjZmF6N2FvNGUxMno1dHltZWp1NnJhciZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/Wkr0EKIsWitJm/giphy.gif&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]&lt;br&gt;
Es un recopilatorio de preguntas, algunas pueden que esten bien y otras mal porque depende de la interpretación o justificación de cada uno, en este caso vamos a tratar justificar todo en base al libro&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Temario de Preguntas&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#modelado&quot;&gt;Modelado&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#consultas&quot;&gt;Consultas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;&quot;&gt;Seguridad e Integridad de los Datos&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP]
Responder todo, ya fuee&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3&gt;Sacado del libro&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/1db36f21-78a1-4acb-ba6b-36e39ac6d926&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Las funciones de agregación en una consulta&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Pueden ir en el SELECT&lt;/li&gt;
&lt;li&gt;[ ] b) Pueden ir en el WHERE&lt;/li&gt;
&lt;li&gt;[ ] c) Pueden ir en el HAVING (SI O SI)&lt;/li&gt;
&lt;li&gt;[ ] d) Pueden aparecer sin otros atributos en el select&lt;/li&gt;
&lt;li&gt;[ ] e) Todas son correctas&lt;/li&gt;
&lt;li&gt;[ ] f) A, C y D son correctas&lt;/li&gt;
&lt;li&gt;[ ] g) A, B y C son correctas&lt;/li&gt;
&lt;li&gt;[ ] h) A y C son correctas&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En el SELECT si, en el WHERE no&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] f) A, C y D son correctas&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/8566a92c-7758-49aa-bca4-25bc7f0cbd09&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;Registro historico / Bitacora&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Un checkPoint en ambientes concurrentes&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Solo se genera si se utiliza el protocolo de HDE&lt;/li&gt;
&lt;li&gt;[ ] b) Solo se genera si se utiliza el protocolo de dos fases&lt;/li&gt;
&lt;li&gt;[ ] c) Se aplica en el protocolo de doble paginación&lt;/li&gt;
&lt;li&gt;[ ] d) Se coloca siempre entre dos transacciones, cuando ninguna esta activa&lt;/li&gt;
&lt;li&gt;[ ] e) Todas las anteriores&lt;/li&gt;
&lt;li&gt;[ ] f) Algunas de las anteriores&lt;/li&gt;
&lt;li&gt;[ ] g) Ninguna de las anteriores&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;[ ] g) Ninguna de las anteriores&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/179904e9-8d84-4875-957a-0180c16282e1&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;La propiedad de aislamiento&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) No se aplica en un ambiente concurrente&lt;/li&gt;
&lt;li&gt;[ ] b) Se aplica en un ambiente concurrente&lt;/li&gt;
&lt;li&gt;[ ] c) No se aplica en un ambiente monousuario&lt;/li&gt;
&lt;li&gt;[ ] d) Se aplica en un ambiente monousuario&lt;/li&gt;
&lt;li&gt;[ ] e) Algunas de las anteriores&lt;/li&gt;
&lt;li&gt;[ ] f) Ninguna de las anteriores&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Es la B y la D&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Se aplica en ambos ambientes&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/d0ff70d3-8af2-49e4-99aa-f3e61d285bd8&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Se tiene una jerarquia &lt;code&gt;total exclusiva&lt;/code&gt; en el modelo conceptual. Al pasar dicho modelo al logico se debe decidir que hacer con la misma&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Se puede dejar solo al padre&lt;/li&gt;
&lt;li&gt;[ ] b) Se puede dejar solo a los hijos&lt;/li&gt;
&lt;li&gt;[ ] c) Se puede dejar todas las entidades&lt;/li&gt;
&lt;li&gt;[ ] d) Todas las anteriores son validas&lt;/li&gt;
&lt;li&gt;[ ] e) Algunas de las anteriores son validas&lt;/li&gt;
&lt;li&gt;[ ] f) No tengo datos suficientes para responder&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;[!IMPORTANT]
En la foto de donde lo saque estaba corregida&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Todas las anteriores son validas&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En las otras, solo se puede dejar al padre o toda la estructura&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Una dependencia multivaluada&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Puede generar repetición innecesaria de información&lt;/li&gt;
&lt;li&gt;[ ] b) Genera repetición de información si no es una dependencia multivaluada trivial&lt;/li&gt;
&lt;li&gt;[ ] c) Genera repetición innecesaria de información&lt;/li&gt;
&lt;li&gt;[ ] d) Todas las anteriores son correctas&lt;/li&gt;
&lt;li&gt;[ ] e) Algunas de las anteriores son correctas&lt;/li&gt;
&lt;li&gt;[ ] f) Ninguna de las anteriores es correcta&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Preguntar&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/b33f5224-ed10-4c0d-830f-58cf601da040&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Trivial es que no se puede eliminar del esquema&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Un esquema fisico que no tiene dependencias parciales esta en:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) 3FN&lt;/li&gt;
&lt;li&gt;[ ] b) 5FN&lt;/li&gt;
&lt;li&gt;[ ] c) 2FN&lt;/li&gt;
&lt;li&gt;[ ] d) 1FN&lt;/li&gt;
&lt;li&gt;[ ] e) 4FN&lt;/li&gt;
&lt;li&gt;[ ] f) BCNF&lt;/li&gt;
&lt;li&gt;[ ] g) Todas las anteriores&lt;/li&gt;
&lt;li&gt;[ ] h) Algunas de las anteriores&lt;/li&gt;
&lt;li&gt;[ ] i) Ninguna de las anteriores&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un atributo depende de un subconjunto (Una parte) de otro atributo&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] i) Ninguna de las anteriores&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Suponga que tiene tablas&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Alumnos = (idAlumno, nombre, edad)&lt;/li&gt;
&lt;li&gt;Materias = (idMateria, nombre, año)&lt;/li&gt;
&lt;li&gt;Inscribe = (idAlumno, idMateria)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Indique cual sentencia AR muestra al alumno con las materias en las que se inscribió.&lt;/p&gt;
&lt;p&gt;Como referencia&lt;/p&gt;
&lt;p&gt;P proyeccción, S selección, I Intersección, R renombre&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Pnombre (alumnos |x| materias |x| inscribe)&lt;/li&gt;
&lt;li&gt;[ ] b) Pnombre (alumnos) |x| Pnombre (materias)&lt;/li&gt;
&lt;li&gt;[ ] c) Pnombre (alumnos) |x| Pnombre (materias) |x| inscribe)&lt;/li&gt;
&lt;li&gt;[ ] d) Palumnos.nombre, materias.nombre (alumnos |x| materias)&lt;/li&gt;
&lt;li&gt;[ ] e) Ninguna de las anteriores&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;[!IMPORTANT]
En la foto de donde lo saque estaba corregida&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Ninguna de las anteriores&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;La siguiente consulta SQL: SELECT * FROM B INNER JOIN A ON (A.id = B.id)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Retorna solo las filas de A que tengan coincidencia con las filas de B en el atributo id.&lt;/li&gt;
&lt;li&gt;[ ] b) Retorna solo las filas de B que no tengan coincidencia con las filas de A en el atributo id.&lt;/li&gt;
&lt;li&gt;[ ] c) Proyecta solo las columnas de A&lt;/li&gt;
&lt;li&gt;[ ] d) Retorna todas las filas de B&lt;/li&gt;
&lt;li&gt;[ ] e) Proyecta solo las columnas de B&lt;/li&gt;
&lt;li&gt;[ ] f) Hay más de una respuesta correcta&lt;/li&gt;
&lt;li&gt;[ ] g) Todas las anteriores son correctas&lt;/li&gt;
&lt;li&gt;[ ] h) Ninguna de las anteriores es correcta&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Falta responder&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;[ ] h) Ninguna de las anteriores es correcta&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Modificada&lt;/p&gt;
&lt;p&gt;[ ] a) Retorna solo las filas de B que tengan coincidencia con las filas de A en el atributo id.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;La función de agregación SUM de SQL:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Requiere de una cláusula GROUP BY.&lt;/li&gt;
&lt;li&gt;[ ] b) Calcula el máximo para una columna de la tabla.&lt;/li&gt;
&lt;li&gt;[ ] c) Cuenta los valores distintos para una fila de la tabla&lt;/li&gt;
&lt;li&gt;[ ] d) Se puede utilizar en la clausula HAVING sin utilizar un GROUP BY&lt;/li&gt;
&lt;li&gt;[ ] e) Hay más de una opcion válida&lt;/li&gt;
&lt;li&gt;[ ] f) Todas las anteriores son correctas&lt;/li&gt;
&lt;li&gt;[ ] g) Ninguna de las anteriores es correcta&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;li&gt;[ ] g) Ninguna de las anteriores es correcta&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ninguna funcion de agregación necesita el GROUP BY&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;La operación de proyección en Álgebra Relacional:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Es un operador binario&lt;/li&gt;
&lt;li&gt;[ ] b) Es un operador unitario&lt;/li&gt;
&lt;li&gt;[ ] c) Es equivalente a la clausula &quot;Where&quot; de SQL&lt;/li&gt;
&lt;li&gt;[ ] d) Es equivalente a la clausula &quot;Order By&quot; de SQL&lt;/li&gt;
&lt;li&gt;[ ] e) Puede proyectar elementos repetidos&lt;/li&gt;
&lt;li&gt;[ ] f) Hay más de una opción valida&lt;/li&gt;
&lt;li&gt;[ ] g) Todas las opciones anteriores son válidas&lt;/li&gt;
&lt;li&gt;[ ] h) Ninguna de las opciones anteriores es válida&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;[ ] b) Es un operador unitario&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Si una entrada en el registro bitácora tiene el siguiente formato: &quot;&amp;#x3C;T1, dato, valor anterior, valor nuevo&gt;&quot;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Utiliza bitácora con modificación diferida&lt;/li&gt;
&lt;li&gt;[ ] b) Utiliza el protocolo de hora de hora de entrada (Este se usa en concurrente)&lt;/li&gt;
&lt;li&gt;[ ] c) Utiliza bítacora con modificación inmediata&lt;/li&gt;
&lt;li&gt;[ ] d) Utiliza el protocolo de página en la sombra (nada que ver)&lt;/li&gt;
&lt;li&gt;[ ] e) Hay más de una opción valida&lt;/li&gt;
&lt;li&gt;[ ] f) Todas las opciones anteriores son válidas&lt;/li&gt;
&lt;li&gt;[ ] g) Ninguna de las opciones anteriores es válida&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;[ ] c) Utiliza bítacora con modificación inmediata&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Diferida no tiene el valor anterior&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Dada una transacción T1 que obtiene un bloqueo exclusivo sobre el dato D1 y otra transacción T2 que obtiene un bloque exclusivo sobre el dato D2, entonces:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) T1 no deberá esperar a que T2 libere el dato si desea leer D2&lt;/li&gt;
&lt;li&gt;[ ] b) T2 no deberá esperar a que T1 libere el dato si desea leer D1&lt;/li&gt;
&lt;li&gt;[ ] c) T1 no debera esperar a que T2 libere el dato para poder escribir D2&lt;/li&gt;
&lt;li&gt;[ ] d) T2 no deberá esperar a que T1 libere el dato para poder escribir D1&lt;/li&gt;
&lt;li&gt;[ ] e) T1 deberá esperar a que T2 libere el dato si desea leer D2&lt;/li&gt;
&lt;li&gt;[ ] f) T2 deberá esperar a que T1 libere el dato si desea leer D1&lt;/li&gt;
&lt;li&gt;[ ] g) Hay más de una opción valida&lt;/li&gt;
&lt;li&gt;[ ] h) Todas las opciones anteriores son válidas&lt;/li&gt;
&lt;li&gt;[ ] i) Ninguna de las opciones anteriores es válida&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;li&gt;[ ] g) Hay más de una opción valida (e y f)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cualquier bloqueo esclusivo va a tener que esperar si o si por todo, y si es compartido, solo puede leer.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Una jerarquía con cobertura Parcial y Exclusiva (P, E), al pasar al modelo lógico:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) No es posible dejar solamente las entidades hijas&lt;/li&gt;
&lt;li&gt;[ ] b) No se puede quitar la entidad generalizadora// Esto es el padre???&lt;/li&gt;
&lt;li&gt;[ ] c) Se deja la jerarquia completa sin relacionar las entidades que la componen&lt;/li&gt;
&lt;li&gt;[ ] d) No se realiza cambio alguno&lt;/li&gt;
&lt;li&gt;[ ] e) Hay más de una opción válida&lt;/li&gt;
&lt;li&gt;[ ] f) Todas las opciones anteriores son válidas&lt;/li&gt;
&lt;li&gt;[ ] g) Ninguna de las opciones anteriores es válida&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;[ ] e) Hay más de una opción válida&lt;/li&gt;
&lt;li&gt;[ ] a) No es posible dejar solamente las entidades hijas&lt;/li&gt;
&lt;li&gt;[ ] b) No se puede quitar la entidad generalizadora// Esto es el padre???&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Una relación entre dos entidades en un modelo conceptual:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Puede no tener cardinalidad&lt;/li&gt;
&lt;li&gt;[ ] b) No puede contener un atributo opcional polivalente (En logico NO)&lt;/li&gt;
&lt;li&gt;[ ] c) No puede contener un atributo compuesto monovalente (En logico NO)&lt;/li&gt;
&lt;li&gt;[ ] d) No debe contener atributos&lt;/li&gt;
&lt;li&gt;[ ] e) No puede contener más de un atributo opcional monovalente&lt;/li&gt;
&lt;li&gt;[ ] f) Puede contener un atributo identificador (WTF)&lt;/li&gt;
&lt;li&gt;[ ] g) Hay más de una opción válida&lt;/li&gt;
&lt;li&gt;[ ] h) Todas las opciones anteriores son válidas&lt;/li&gt;
&lt;li&gt;[ ] i) Ninguna de las opciones anteriores es válida&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;[ ] i) Ninguna de las opciones anteriores es válida&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Un identificador compuesto de una entidad en el modelo conceptual, cuando se realiza el pasaje al &lt;code&gt;logico relacional&lt;/code&gt;: Como que no existe.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Vamos a suponer que hablan del modelo entidad relación logico.
Y que estan hablando con propiedad.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Se debe transformar debido a que el modelo lógico relacional no acepta este tipo de identificadores&lt;/li&gt;
&lt;li&gt;[ ] b) Se deja sin modificación alguna&lt;/li&gt;
&lt;li&gt;[ ] c) Se debe separar en distintos atributos y uno de ellos será elegido identificador de la entidad&lt;/li&gt;
&lt;li&gt;[ ] d) Se elimina del modelo lógico relacional&lt;/li&gt;
&lt;li&gt;[ ] e) Hay más de una opción válida&lt;/li&gt;
&lt;li&gt;[ ] f) Todas las opciones anteriores son válidas&lt;/li&gt;
&lt;li&gt;[ ] g) Ninguna de las opciones anteriores es válida&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/ae2b8ed1-8f59-4c8d-ad41-2aab92230b6d&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] b) Se deja sin modificación alguna&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Una clave foránea en el modelo físico&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) No puede ser opcional&lt;/li&gt;
&lt;li&gt;[ ] b) No acepta valores repetidos&lt;/li&gt;
&lt;li&gt;[ ] c) Puede ser clave primaria y foránea al mismo tiempo y en la misma tabla (wtf)&lt;/li&gt;
&lt;li&gt;[ ] d) Hay más de una opción válida&lt;/li&gt;
&lt;li&gt;[ ] e) Todas las opciones anteriores son válidas&lt;/li&gt;
&lt;li&gt;[ ] f) Ninguna de las opciones anteriores es válida&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Decime si es opcional o no&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] b) No acepta valores repetidos (esta es falsa)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h1&gt;DEJAMOS HASTA ACA&lt;/h1&gt;
&lt;p&gt;En el algebra Relacional la expresión A U B&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Requiere que A y B contengan la misma cantidad de elementos (esta incompleta)&lt;/li&gt;
&lt;li&gt;[ ] b) Requiere que el esquema de B se encuentre contenido en el esquima de A //div&lt;/li&gt;
&lt;li&gt;[ ] c) Requiere que el esquima de A se encuentre contenido en el esquema de B //div&lt;/li&gt;
&lt;li&gt;[ ] d) Hay más de una opción valida&lt;/li&gt;
&lt;li&gt;[ ] e) Todas las opciones anteriores son válidas&lt;/li&gt;
&lt;li&gt;[ ] f) Ninguna de las opciones anteriores es válida&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;[ ] f) Ninguna de las opciones anteriores es válida&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;¿Cuál de las siguientes afirmaciones es cierca acerca de la normalización de base de datos?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) La normalización es el proceso de agregar redundancia a una base de datos para mejorar la eficiencia de las consultas&lt;/li&gt;
&lt;li&gt;[ ] b) La normalización es el proceso de eliminar la redundancia en una base de datos para evitar problemas de inconsistencia de datos&lt;/li&gt;
&lt;li&gt;[ ] c) La normalización es el proceso de crear copias de seguridad de una base de datos para protegerla de pérdidas de datos&lt;/li&gt;
&lt;li&gt;[ ] d) La normalización es el proceso de cifrar los datos en una base de datos para proteger su confidencialidad&lt;/li&gt;
&lt;li&gt;[ ] e) Todas las opciones anteriores son verdaderas&lt;/li&gt;
&lt;li&gt;[ ] f) Algunas de las opciones anteriores son verdaderas&lt;/li&gt;
&lt;li&gt;[ ] g) Ninguna de las opciones anteriores es verdadera&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;¿Cuál de las siguientes afirmaciones es verdadera sobre el modelo Entidad-Relación(ER)?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) El modelo ER es un modelo lógico que se enfoca en la implementación física de la base de datos&lt;/li&gt;
&lt;li&gt;[ ] b) Las entidades en el modelo ER representan relaciones entre los datos&lt;/li&gt;
&lt;li&gt;[ ] c) Las relaciones en un modelo ER representan vínculos entre las entidades&lt;/li&gt;
&lt;li&gt;[ ] d) El modelo ER no incluye atributos para las entidades y relaciones&lt;/li&gt;
&lt;li&gt;[ ] e) Todas las opciones anteriores son verdaderas&lt;/li&gt;
&lt;li&gt;[ ] f) Algunas de las opciones anteriores son verdaderas&lt;/li&gt;
&lt;li&gt;[ ] g) Ninguna de las opciones anteriores es verdadera&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;¿Cuál de las siguientes técnicas es útil para optímizar consultas SQL en una base de datos?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Usar subconsultas en lugar de productos de tablas&lt;/li&gt;
&lt;li&gt;[ ] b) Evitar el uso de índices para las claves primarias&lt;/li&gt;
&lt;li&gt;[ ] c) Usar funciones de agregación en lugar de GROUP BY&lt;/li&gt;
&lt;li&gt;[ ] d) Usar el operador LIKE en lugar de igualdad para comparaciones de cadenas&lt;/li&gt;
&lt;li&gt;[ ] e) Todas las opciones anteriores son verdaderas&lt;/li&gt;
&lt;li&gt;[ ] f) Algunas de las opciones anteriores son verdaderas&lt;/li&gt;
&lt;li&gt;[ ] g) Ninguna de las opciones anteriores es verdadera&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;¿Cuál de las siguientes afirmaciones es verdadera sobre el modelo lógico relacional?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Se pueden tener atributos compuestos&lt;/li&gt;
&lt;li&gt;[ ] b) Se pueden tener atributos derivados&lt;/li&gt;
&lt;li&gt;[ ] c) No se pueden tener identificadores compuestos&lt;/li&gt;
&lt;li&gt;[ ] d) Se pueden tener atributos polivalentes&lt;/li&gt;
&lt;li&gt;[ ] e) Todas las opciones anteriores son verdaderas&lt;/li&gt;
&lt;li&gt;[ ] f) Algunas de las opciones anteriores son verdaderas&lt;/li&gt;
&lt;li&gt;[ ] g) Ninguna de las opciones anteriores es verdadera&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;¿Cuál de las siguientes afirmaciones es cierta acerca de la integridad referencial en una base de datos relacional?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) La integridad referencial garantiza que cada registro en una tabla tenga un valor único en su clave primaria.&lt;/li&gt;
&lt;li&gt;[ ] b) La integridad referencial asegura que los valores en una tabla sean válidos en referencia a otra tabla.&lt;/li&gt;
&lt;li&gt;[ ] c) La integridad referencial solo se aplica a las tablas que tienen una clave foránea.&lt;/li&gt;
&lt;li&gt;[ ] d) La integridad referencial no es necesaria en una base de datos relacional.&lt;/li&gt;
&lt;li&gt;[ ] e) Todas las opciones anteriores son verdaderas&lt;/li&gt;
&lt;li&gt;[ ] f) Algunas de las opciones anteriores son verdaderas&lt;/li&gt;
&lt;li&gt;[ ] g) Ninguna de las opciones anteriores es verdadera&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Un atributo derivado posee información disponible en una entidad. Si esa información no estuviera sería posible aún calcularla. Entonces&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Contiene información redundante y puede quitarse del modelo&lt;/li&gt;
&lt;li&gt;[ ] b) Contiene información redundante y debe quitarse del modelo&lt;/li&gt;
&lt;li&gt;[ ] c) No contiene información redundante y debe dejarse en el modelo&lt;/li&gt;
&lt;li&gt;[ ] d) No contiene información redundante&lt;/li&gt;
&lt;li&gt;[ ] e) Todas las anteriores son correctas&lt;/li&gt;
&lt;li&gt;[ ] f) Algunas de las anteriores son correctas&lt;/li&gt;
&lt;li&gt;[ ] g) Ninguna de las anteriores es correcta&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;¿Cuáles de las siguientes cláusulas son necesarias para una consulta de selección de datos en SQL?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) SELECT&lt;/li&gt;
&lt;li&gt;[ ] b) FROM&lt;/li&gt;
&lt;li&gt;[ ] c) WHERE&lt;/li&gt;
&lt;li&gt;[ ] d) Todas las anteriores&lt;/li&gt;
&lt;li&gt;[ ] e) Algunas de las anteriores&lt;/li&gt;
&lt;li&gt;[ ] f) Ninguna de las anteriores&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;¿Qué afirmación describe mejor la relacion entre la cantidad de tuplas o filas generadas por las cláusulas LEFT JOIN e INNER JOIN en una consulta SQL?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Generan igual cantidad de tuplas o filas&lt;/li&gt;
&lt;li&gt;[ ] b) LEFT JOIN genera menos cantidad de tuplas o filas que INNER JOIN&lt;/li&gt;
&lt;li&gt;[ ] c) LEFT JOIN genera más cantidad de tuplas o filas que INNER JOIN&lt;/li&gt;
&lt;li&gt;[ ] d) LEFT JOIN puede generar igual cantidad de tuplas o filas que INNER JOIN&lt;/li&gt;
&lt;li&gt;[ ] e) Todas las anteriores son correctas&lt;/li&gt;
&lt;li&gt;[ ] f) Algunas de las anteriores son correctas&lt;/li&gt;
&lt;li&gt;[ ] g) Ninguna de las anteriores es correcta&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;¿Cuál de las siguientes afirmaciones es verdadera acerca de las tablas en una base de datos?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Tienen una clave primaria&lt;/li&gt;
&lt;li&gt;[ ] b) No pueden tener claves candidatas&lt;/li&gt;
&lt;li&gt;[ ] c) Deben tener al menos una clave foránea&lt;/li&gt;
&lt;li&gt;[ ] d) No pueden tener claves foráneas&lt;/li&gt;
&lt;li&gt;[ ] e) Todas las anteriores son correctas&lt;/li&gt;
&lt;li&gt;[ ] f) Algunas de las anteriores son correctas&lt;/li&gt;
&lt;li&gt;[ ] g) Ninguna de las anteriores es correcta&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;¿Qué significa la condición de idempotencia en el contexto de las transacciones en una base de datos?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Garantiza que una transacción se pueda ejecutar varias veces con el mismo resultado&lt;/li&gt;
&lt;li&gt;[ ] b) Garantiza que una transacción que ha fallado se pueda ejecutar varias veces con el mismo resultado&lt;/li&gt;
&lt;li&gt;[ ] c) Garantiza que una transacción que se ha registrado de transacciones se pueda ejecutar varias veces con el mismo resultado&lt;/li&gt;
&lt;li&gt;[ ] d) Todas las anteriores son correctas&lt;/li&gt;
&lt;li&gt;[ ] e) Algunas de las anteriores son correctas&lt;/li&gt;
&lt;li&gt;[ ] f) Ninguna de las anteriores es correcta&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Una jerarquia con cobertura Parcial y Exclusiva (P, E), al pasar al modelo lógico:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Es posible dejar solamente las entidades hijas&lt;/li&gt;
&lt;li&gt;[ ] b) Se puede quitar la entidad generalizadora&lt;/li&gt;
&lt;li&gt;[ ] c) Se deja la jerarquia completa sin relacionar las entidades que la componen&lt;/li&gt;
&lt;li&gt;[ ] d) No se realiza cambio alguno&lt;/li&gt;
&lt;li&gt;[ ] e) Hoy más de una opción válida&lt;/li&gt;
&lt;li&gt;[ ] f) Todas las opciones anteriores son válidas&lt;/li&gt;
&lt;li&gt;[ ] g) Ninguna de las opciones anteriores es válida&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Una relación entre dos entidades en un modelo conceptual:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Puede no tener cardinalidad&lt;/li&gt;
&lt;li&gt;[ ] b) No puede contener un atributo opcional polivalente&lt;/li&gt;
&lt;li&gt;[ ] c) No puede contener un atributo compuesto monovalente&lt;/li&gt;
&lt;li&gt;[ ] d) No debe contener atributos&lt;/li&gt;
&lt;li&gt;[ ] e) Puede contener más de un atributo opcional monovalente&lt;/li&gt;
&lt;li&gt;[ ] f) Puede contener un atributo identificador&lt;/li&gt;
&lt;li&gt;[ ] g) Hay más de una opción válida&lt;/li&gt;
&lt;li&gt;[ ] h) Todas las opciones anteriores son válidas&lt;/li&gt;
&lt;li&gt;[ ] i) Ninguna de las opciones anteriores es válida&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Una clave foránea en una tabla del modelo físico&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) No puede ser opcional&lt;/li&gt;
&lt;li&gt;[ ] b) No acepta valores repetidos&lt;/li&gt;
&lt;li&gt;[ ] c) No es clave primaria en ninguna tabla del modelo físico&lt;/li&gt;
&lt;li&gt;[ ] d) Hay mas de una opción válida&lt;/li&gt;
&lt;li&gt;[ ] e) Todas las opciones anteriores son válidas&lt;/li&gt;
&lt;li&gt;[ ] f) Ninguna de las opciones anteriores es válida&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;En el algebra Relacional la expresión A U B&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Requiere que A y B contengan la misma cantidad de elementos&lt;/li&gt;
&lt;li&gt;[ ] b) Requiere que el esquema de B se encuentre contenido en el esquema de A&lt;/li&gt;
&lt;li&gt;[ ] c) Requiere que el esquema de A se encuentre contenido en el esquema de B&lt;/li&gt;
&lt;li&gt;[ ] d) Hay más de una opción válida&lt;/li&gt;
&lt;li&gt;[ ] e) Todas las opciones anteriores son válidas&lt;/li&gt;
&lt;li&gt;[ ] f) Ninguna de las opciones anteriores es válida&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;La función de agregación AVG de SQL:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Requiere de una cláusula GROUP BY.&lt;/li&gt;
&lt;li&gt;[ ] b) Calcula el máximo para una columna de la tabla.&lt;/li&gt;
&lt;li&gt;[ ] c) Cuenta los valores distintos para una fila de la tabla&lt;/li&gt;
&lt;li&gt;[ ] d) Se puede utilizar en la clausula HAVING sin utilizar un GROUP BY&lt;/li&gt;
&lt;li&gt;[ ] e) Hay más de una opcion válida&lt;/li&gt;
&lt;li&gt;[ ] f) Todas las anteriores son correctas&lt;/li&gt;
&lt;li&gt;[ ] g) Ninguna de las anteriores es correcta&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;La operación de diferencia (-) en Álgebra Relacional:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Es un operador binario&lt;/li&gt;
&lt;li&gt;[ ] b) Es un operador unitario&lt;/li&gt;
&lt;li&gt;[ ] c) Es equivalente a la clausula &quot;Where&quot; de SQL&lt;/li&gt;
&lt;li&gt;[ ] d) Es equivalente a la clausula &quot;Order By&quot; de SQL&lt;/li&gt;
&lt;li&gt;[ ] e) Puede proyectar elementos repetidos&lt;/li&gt;
&lt;li&gt;[ ] f) Hay más de una opción válida&lt;/li&gt;
&lt;li&gt;[ ] g) Todas las opciones anteriores son válidas&lt;/li&gt;
&lt;li&gt;[ ] h) Ninguna de las opciones anteriores es válida&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;El algebra relacional&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Es un lenguaje de consultas teorico de BD relacional que define como hacer las operaciones de manipulacion de datos&lt;/li&gt;
&lt;li&gt;[ ] b) Es un lenguaje de consultas teorico de BD entidad relación que define como hacer las operaciones de manipulación de datos&lt;/li&gt;
&lt;li&gt;[ ] c) Es un lenguaje de consultas teorico de BD relacional que define solamente el resultado esperado en la respuesta&lt;/li&gt;
&lt;li&gt;[ ] d) Es un lenguaje de consultas teorico de BD entidad relación que define solamente el resultado esperado en la respuesta.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;La clausula EXIST en SQL&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Solo se aplica en una operación de consulta&lt;/li&gt;
&lt;li&gt;[ ] b) Necesita necesariamente una subconsulta&lt;/li&gt;
&lt;li&gt;[ ] c) No utiliza en el select que la contiene una función de agregación&lt;/li&gt;
&lt;li&gt;[ ] d) Todas las anteriores&lt;/li&gt;
&lt;li&gt;[ ] e) Algunas de las anteriores&lt;/li&gt;
&lt;li&gt;[ ] f) Ninguna de las anteriores&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;La clausula DELETE en SQL&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Es una clausula de definicion de datos&lt;/li&gt;
&lt;li&gt;[ ] b) Es una clausula de manipulacion de datos&lt;/li&gt;
&lt;li&gt;[ ] c) Puede alcanzar el estado Cometido&lt;/li&gt;
&lt;li&gt;[ ] d) Todas las anteriores&lt;/li&gt;
&lt;li&gt;[ ] e) Ninguna de las anteriores&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Una transacción que alcanza el espacio de fallada&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Puede volver a activarse&lt;/li&gt;
&lt;li&gt;[ ] b) Puede alcanzar el estado Abortada&lt;/li&gt;
&lt;li&gt;[ ] c) Puede alcanzar el estado Cometido&lt;/li&gt;
&lt;li&gt;[ ] d) Todas las anteriores&lt;/li&gt;
&lt;li&gt;[ ] e) Ninguna de las anteriores&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Ante dos transacciones concurrentes que generan un problema de integridad contra la BD&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Es preferible que haya un deadlock a tener inconsistencia&lt;/li&gt;
&lt;li&gt;[ ] b) Es preferible que haya inconsistencia si el deadlock produce inanición&lt;/li&gt;
&lt;li&gt;[ ] c) Es preferible que haya inconsistencia antes que tener deadlock&lt;/li&gt;
&lt;li&gt;[ ] d) Todas las anteriores&lt;/li&gt;
&lt;li&gt;[ ] e) Ninguna de las anteriores&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Un atributo derivado&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Representa un dato que está presente de otra forma en el modelo&lt;/li&gt;
&lt;li&gt;[ ] b) Puede estar en el modelo logico&lt;/li&gt;
&lt;li&gt;[ ] c) Puede estar en el modelo fisico&lt;/li&gt;
&lt;li&gt;[ ] d) Hay más de una opción válida&lt;/li&gt;
&lt;li&gt;[ ] e) Todas las opciones anteriores son válidas&lt;/li&gt;
&lt;li&gt;[ ] f) Ninguna de las opciones anteriores es válida&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Un atributo polivalente sobre el modelo conceptual&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Indica que el atributo esta formado por varios atributos simples&lt;/li&gt;
&lt;li&gt;[ ] b) Indica que el atributo puede tener multiples valores, pero no puede ser nulo&lt;/li&gt;
&lt;li&gt;[ ] c) Indica que el atributo puede tener multiples valores, pero debe aceptar ser nulo&lt;/li&gt;
&lt;li&gt;[ ] d) Todas las anteriores son correctas&lt;/li&gt;
&lt;li&gt;[ ] e) Algunas de las anteriores son correctas&lt;/li&gt;
&lt;li&gt;[ ] f) Ninguna de las anteriores es correcta&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Una relación del modelo lógico cuando se pasa al fisico&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Siempre se convierte en tabla&lt;/li&gt;
&lt;li&gt;[ ] b) En algún caso puede no convertirse en tabla&lt;/li&gt;
&lt;li&gt;[ ] c) No se convierte en tabla&lt;/li&gt;
&lt;li&gt;[ ] d) Todas las anteriores son correctas&lt;/li&gt;
&lt;li&gt;[ ] e) Algunas de las anteriores son correctas&lt;/li&gt;
&lt;li&gt;[ ] f) Ninguna de las anteriores es correcta&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Una jerarquia parcial superpuesta, donde el padre tiene tres hijos, cuando se convierte al modelo fisico&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Puede quedar solo el padre&lt;/li&gt;
&lt;li&gt;[ ] b) Puede quedar solo los hijos&lt;/li&gt;
&lt;li&gt;[ ] c) Puede quedar todo con relaciones es un&lt;/li&gt;
&lt;li&gt;[ ] d) Todas las anteriores son correctas&lt;/li&gt;
&lt;li&gt;[ ] e) Algunas de las anteriores son correctas&lt;/li&gt;
&lt;li&gt;[ ] f) Ninguna de las anteriores es correcta&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Un identificador simple de una tabla&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Puede ser un atributo con valor nulo&lt;/li&gt;
&lt;li&gt;[ ] b) Puede ser un atributo polivalente&lt;/li&gt;
&lt;li&gt;[ ] c) Puede ser un atributo derivado&lt;/li&gt;
&lt;li&gt;[ ] d) Todas las anteriores son correctas&lt;/li&gt;
&lt;li&gt;[ ] e) Algunas de las anteriores son correctas&lt;/li&gt;
&lt;li&gt;[ ] f) Ninguna de las anteriores es correcta&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Un identificador de una entidad sobre el modelo lógico, cuando dicha entidad se convierte en tabla sobre el fisico&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Puede ser clave primaria&lt;/li&gt;
&lt;li&gt;[ ] b) Puede ser clave candidata&lt;/li&gt;
&lt;li&gt;[ ] c) Puede ser clave secundaria&lt;/li&gt;
&lt;li&gt;[ ] d) Todas las anteriores son correctas&lt;/li&gt;
&lt;li&gt;[ ] e) Algunas de las anteriores son correctas&lt;/li&gt;
&lt;li&gt;[ ] f) Ninguna de las anteriores es correcta&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Una clave primaria en el esquema fisico de una BD&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Puede haber sido clave candidata&lt;/li&gt;
&lt;li&gt;[ ] b) No ha sido clave candidata&lt;/li&gt;
&lt;li&gt;[ ] c) Ha sido identificador en el esquema lógico&lt;/li&gt;
&lt;li&gt;[ ] d) No ha sido identificador en el esquema conceptual&lt;/li&gt;
&lt;li&gt;[ ] e) Ninguna de las anteriores&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Para la construcción del modelo ER-Conceptual, es necesario&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Contar con la definición del DBMS a utilizar&lt;/li&gt;
&lt;li&gt;[ ] b) Contar con la descripción detallada de las necesidades de usuario&lt;/li&gt;
&lt;li&gt;[ ] c) Contar con un DBA experimentado en el DBMS a utilizar&lt;/li&gt;
&lt;li&gt;[ ] d) Todas las anteriores son correctas&lt;/li&gt;
&lt;li&gt;[ ] e) Ninguna de las anteriores&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Un ciclo de entidades&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Representa una solución donde se repite información&lt;/li&gt;
&lt;li&gt;[ ] b) Debe ser quitado del modelo logico&lt;/li&gt;
&lt;li&gt;[ ] c) Aparece en el modelo fisico y repite información&lt;/li&gt;
&lt;li&gt;[ ] d) Todas las anteriores son correctas&lt;/li&gt;
&lt;li&gt;[ ] e) Ninguna de las anteriores&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Una entidad en el esquema fisico&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) No puede tener atributos polivalentes&lt;/li&gt;
&lt;li&gt;[ ] b) No puede tener atributos compuestos&lt;/li&gt;
&lt;li&gt;[ ] c) Tiene al menos un identificador&lt;/li&gt;
&lt;li&gt;[ ] d) Puede tener más de un identificador&lt;/li&gt;
&lt;li&gt;[ ] e) Algunas de las anteriores&lt;/li&gt;
&lt;li&gt;[ ] f) Ninguna de las anteriores&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;[!IMPORTANT]
En la foto de donde lo saque estaba corregida&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Ninguna de las anteriores&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Una relación recursiva en el esquema lógico&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Solo tiene un identificador&lt;/li&gt;
&lt;li&gt;[ ] b) Puede tener más de un identificador&lt;/li&gt;
&lt;li&gt;[ ] c) Puede tener más de un atributo&lt;/li&gt;
&lt;li&gt;[ ] d) No puede tener atributos con cardinalidad máxima N&lt;/li&gt;
&lt;li&gt;[ ] e) Algunas de las anteriores&lt;/li&gt;
&lt;li&gt;[ ] f) Ninguna de las anteriores&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Un ciclo de relaciones en el esquema conceptual&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Puede generar redundancia&lt;/li&gt;
&lt;li&gt;[ ] b) Si genera redundacia, luego debe eliminar el ciclo del proceso d(se corta)&lt;/li&gt;
&lt;li&gt;[ ] c) Siempre es entre 4 o más entidades&lt;/li&gt;
&lt;li&gt;[ ] d) Algunas de las anteriores&lt;/li&gt;
&lt;li&gt;[ ] e) Ninguna de las anteriores&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;[!IMPORTANT]
En la foto de donde lo saque estaba corregida&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Puede generar redundancia&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Un atributo derivado&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Puede ser clave&lt;/li&gt;
&lt;li&gt;[ ] b) Puede tener valor nulo&lt;/li&gt;
&lt;li&gt;[ ] c) Puede ser polivalente&lt;/li&gt;
&lt;li&gt;[ ] d) Todas las anteriores son correctas&lt;/li&gt;
&lt;li&gt;[ ] e) Ninguna de las anteriores&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Falta responder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;La operación de proyección en Álgebra Relacional&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Es un operador binario&lt;/li&gt;
&lt;li&gt;[ ] b) Es un operador unitario&lt;/li&gt;
&lt;li&gt;[ ] c) Es equivalente a la clausula &quot;Where&quot; de SQL&lt;/li&gt;
&lt;li&gt;[ ] d) Es equivalente a la clausula &quot;Order By&quot; de SQL&lt;/li&gt;
&lt;li&gt;[ ] e) Puede proyectar elementos repetidos&lt;/li&gt;
&lt;li&gt;[ ] f) Hay más de una opción válida&lt;/li&gt;
&lt;li&gt;[ ] g) Todas las opciones anteriores son válidas&lt;/li&gt;
&lt;li&gt;[ ] h) Ninguna de las opciones anteriores es válida&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;[!IMPORTANT]
En la foto de donde lo saque estaba corregida&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Es un operador unitario&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Dada una transacción T1 que obtiene un bloqueo exclusivo sobre el dato D1 y otra transacción T2 que obtiene un bloqueo exclusivo sobre el dato D2, entonces:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) T1 no deberá esperar a que T2 libere el dato si desea leer D2&lt;/li&gt;
&lt;li&gt;[ ] b) T2 no deberá esperar a que T1 libere el dato si desea leer D1&lt;/li&gt;
&lt;li&gt;[ ] c) T1 no debera esperar a que T2 libere el dato para poder escribir D2&lt;/li&gt;
&lt;li&gt;[ ] d) T2 no deberá esperar a que T1 libere el dato para poder escribir D1&lt;/li&gt;
&lt;li&gt;[ ] e) T1 deberá esperar a que T2 libere el dato si desea leer D2&lt;/li&gt;
&lt;li&gt;[ ] f) T2 deberá esperar a que T1 libere el dato si desea leer D1&lt;/li&gt;
&lt;li&gt;[ ] g) Hay más de una opción valida&lt;/li&gt;
&lt;li&gt;[ ] h) Todas las opciones anteriores son válidas&lt;/li&gt;
&lt;li&gt;[ ] i) Ninguna de las opciones anteriores es válida&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;[!IMPORTANT]
En la foto de donde lo saque estaba corregida&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Hay más de una opción valida&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;¿Cuál de las siguientes afirmaciones es verdadera sobre el modelo lógico relacional?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Se pueden tener atributos compuestos&lt;/li&gt;
&lt;li&gt;[ ] b) Se pueden tener atributos derivados&lt;/li&gt;
&lt;li&gt;[ ] c) No se pueden tener identificadores compuestos&lt;/li&gt;
&lt;li&gt;[ ] d) Se pueden tener atributos polivalentes&lt;/li&gt;
&lt;li&gt;[ ] e) Todas las opciones anteriores son verdaderas&lt;/li&gt;
&lt;li&gt;[ ] f) Algunas de las opciones anteriores son verdaderas&lt;/li&gt;
&lt;li&gt;[ ] g) Ninguna de las opciones anteriores es verdadera&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;[!IMPORTANT]
En la foto de donde lo saque estaba corregida&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Se pueden tener atributos derivados&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Si en una consulta SQL se utiliza la cláusula GROUP BY&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Se debe utilizar la cláusula HAVING&lt;/li&gt;
&lt;li&gt;[ ] b) Se puede indicar la condición del grupo en la cláusula WHERE&lt;/li&gt;
&lt;li&gt;[ ] c) Se debe utilizar al menos una función de agregación&lt;/li&gt;
&lt;li&gt;[ ] d) Todas las anteriores&lt;/li&gt;
&lt;li&gt;[ ] e) Algunas de las anteriores&lt;/li&gt;
&lt;li&gt;[ ] f) Ninguna de las anteriores&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;[!IMPORTANT]
En la foto de donde lo saque estaba corregida&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Se debe utilizar al menos una función de agregación&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;En algebra relacional la empresa A |x| B da el mismo resultado que:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) A x B&lt;/li&gt;
&lt;li&gt;[ ] b) A x B si entre las tablas A y B no hay atributo común&lt;/li&gt;
&lt;li&gt;[ ] c) B |x| A&lt;/li&gt;
&lt;li&gt;[ ] d) Todas las anteriores&lt;/li&gt;
&lt;li&gt;[ ] e) Ninguna de las anteriores&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;[!IMPORTANT]
En la foto de donde lo saque estaba corregida&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;B |x| A&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;En el algebra relacional la expresión A - B&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Requiere que A y B contengan la misma cantidad de elementos&lt;/li&gt;
&lt;li&gt;[ ] b) Requiere que el esquema de B se encuentre contenido en el esquema de A&lt;/li&gt;
&lt;li&gt;[ ] c) Requiere que el esquema de A se encuentre contenido en el esquema de B&lt;/li&gt;
&lt;li&gt;[ ] d) Hay más de una opción válida&lt;/li&gt;
&lt;li&gt;[ ] e) Todas las opciones anteriores son válidas&lt;/li&gt;
&lt;li&gt;[ ] f) Ninguna de las opciones anteriores es válida&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;[!IMPORTANT]
En la foto de donde lo saque estaba corregida&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;ESTA CORREGIDA COMO ERROR&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hay más de una opción válida&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;La función de agregación SUM() de SQL:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Necesita de una cláusula GROUP BY&lt;/li&gt;
&lt;li&gt;[ ] b) Calcula el máximo para una columna de la tabla&lt;/li&gt;
&lt;li&gt;[ ] c) Puede contar los valores distintos para una fila de la tabla&lt;/li&gt;
&lt;li&gt;[ ] d) Se puede utilizar en la clausula HAVING sin utilizar un GROUP BY&lt;/li&gt;
&lt;li&gt;[ ] e) Hay más de una opcion válida&lt;/li&gt;
&lt;li&gt;[ ] f) Todas las anteriores son correctas&lt;/li&gt;
&lt;li&gt;[ ] g) Ninguna de las anteriores es correcta&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;[!IMPORTANT]
En la foto de donde lo saque estaba corregida&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Ninguana de las anteriores es correcta&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Una clave candidata en una tabla del modelo físico&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Es un atributo o conjunto de atributos que juntos se pueden repetir dentro de la misma tabla.&lt;/li&gt;
&lt;li&gt;[ ] b) Es un atributo o conjunto de atributos que juntos conforman un atributo opcional&lt;/li&gt;
&lt;li&gt;[ ] c) No puede estar conformada por más de un atributo&lt;/li&gt;
&lt;li&gt;[ ] d) Puede estar conformada por más de un atributo opcional&lt;/li&gt;
&lt;li&gt;[ ] e) Puede estar conformada por más de un atributo monovalente obligatorio&lt;/li&gt;
&lt;li&gt;[ ] f) Hay más de una opción válida&lt;/li&gt;
&lt;li&gt;[ ] g) Todas las opciones anteriores son válidas&lt;/li&gt;
&lt;li&gt;[ ] h) Ninguna de las opciones anteriores es válida&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;[!IMPORTANT]
En la foto de donde lo saque estaba corregida&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Puede estar conformada por más de un atributo monovalente obligatorio&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/b751577b-60e9-48d5-a8d6-b9a9eb7b13da&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Preguntas del ostin&lt;/h2&gt;
&lt;p&gt;Los profes dijeron que solo estudiemos de las preguntas con fotos&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Cuál de las siguientes afirmaciones es cierta acerca de la normalización de base de datos?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) La normalización es el proceso de agregar redundancia a una base de datos para mejorar la eficiencia en las consultas&lt;/li&gt;
&lt;li&gt;[ ] b) La normalización es el proceso de eliminar la redundancia en una base de datos para evitar problemas de inconsistencia de datos.&lt;/li&gt;
&lt;li&gt;[ ] c) La normalización es el proceso de crear copias de seguridad de una base de datos para protegerla de pérdidas de datos.&lt;/li&gt;
&lt;li&gt;[ ] d) La normalización es el proceso de cifrar los datos en una base de datos para proteger su confidencialidad.&lt;/li&gt;
&lt;li&gt;[ ] e) Todas las opciones anteriores son verdaderas.&lt;/li&gt;
&lt;li&gt;[ ] f) Algunas de las opciones anteriores son verdaderas.&lt;/li&gt;
&lt;li&gt;[ ] g) Ninguna de las opciones anteriores es verdadera.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;b) La normalización es el proceso de eliminar la redundancia en una base de datos para evitar problemas de inconsistencia de datos.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;¿Cuál de las siguientes afirmaciones es verdadera sobre el modelo Entidad-Relación (ER)?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) El modelo ER es un modelo lógico que se enfoca en la implementación física de la base de datos.&lt;/li&gt;
&lt;li&gt;[ ] b) Las entidades en el modelo ER representan relaciones entre los datos.&lt;/li&gt;
&lt;li&gt;[ ] c) Las relaciones en un modelo ER representan vínculos entre las entidades.&lt;/li&gt;
&lt;li&gt;[ ] d) El modelo ER no incluye atributos para las entidades y relaciones.&lt;/li&gt;
&lt;li&gt;[ ] e) Todas las opciones anteriores son verdaderas.&lt;/li&gt;
&lt;li&gt;[ ] f) Algunas de las opciones anteriores son verdaderas.&lt;/li&gt;
&lt;li&gt;[ ] g) Ninguna de las opciones anteriores es verdadera.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;c) Las relaciones en un modelo ER representan vínculos entre las entidades.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;¿Cuál de las siguientes técnicas es útil para optimizar consultas SQL en una base de datos?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Usar subconsultas en lugar de productos de tablas.&lt;/li&gt;
&lt;li&gt;[ ] b) Evitar el uso de índices para las claves primarias.&lt;/li&gt;
&lt;li&gt;[ ] c) Usar funciones de agregación en lugar de GROUP BY.&lt;/li&gt;
&lt;li&gt;[ ] d) Usar el operador LIKE en lugar de igualdad para comparaciones de cadenas.&lt;/li&gt;
&lt;li&gt;[ ] e) Todas las opciones anteriores son verdaderas.&lt;/li&gt;
&lt;li&gt;[ ] f) Algunas de las opciones anteriores son verdaderas.&lt;/li&gt;
&lt;li&gt;[ ] g) Ninguna de las opciones anteriores es verdadera.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Lo unico que sabemos es que NINGUNA esta puesta como mal en el parcial, alguna tiene que ser&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;¿Cuál de las siguientes afirmaciones es verdadera sobre el modelo lógico relacional?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) Se pueden tener atributos compuestos.&lt;/li&gt;
&lt;li&gt;[ ] b) Se pueden tener atributos derivados.&lt;/li&gt;
&lt;li&gt;[ ] c) No se pueden tener identificadores compuestos.&lt;/li&gt;
&lt;li&gt;[ ] d) Se pueden tener atributos polivalentes.&lt;/li&gt;
&lt;li&gt;[ ] e) Todas las opciones anteriores son verdaderas.&lt;/li&gt;
&lt;li&gt;[ ] f) Algunas de las opciones anteriores son verdaderas.&lt;/li&gt;
&lt;li&gt;[ ] g) Ninguna de las opciones anteriores es verdadera.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Se pueden tener atributos derivados&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;¿Cuál de las siguientes afirmaciones es cierta acerca de la integridad referencial en una base de datos relacional?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] a) La integridad referencial garantiza que cada registro en una tabla tenga un valor único en su clave primaria.&lt;/li&gt;
&lt;li&gt;[ ] b) La integridad referencial asegura que los valores en una tabla sean válidos en referencia a otra tabla.&lt;/li&gt;
&lt;li&gt;[ ] c) La integridad referencial solo se aplica a las tablas que tienen una clave foránea.&lt;/li&gt;
&lt;li&gt;[ ] d) La integridad referencial no es necesaria en una base de datos relacional.&lt;/li&gt;
&lt;li&gt;[ ] e) Todas las opciones anteriores son verdaderas.&lt;/li&gt;
&lt;li&gt;[ ] f) Algunas de las opciones anteriores son verdaderas.&lt;/li&gt;
&lt;li&gt;[ ] g) Ninguna de las opciones anteriores es verdadera.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Sabemos que algunas no es&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Ya me canse de escribir&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/efe8f812-9826-4525-a2cf-2f59cd0054b4&quot; alt=&quot;WhatsApp Image 2024-02-09 at 14 50 14&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/fbe76e26-5866-4b2b-91ee-f5ba8035c611&quot; alt=&quot;WhatsApp Image 2024-02-09 at 14 50 14 (3)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/d73e2c07-1757-4a57-8c81-3240fc70e47c&quot; alt=&quot;WhatsApp Image 2024-02-09 at 14 50 14 (2)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/dbe3da57-94ee-4fd9-adfc-255daf6cef8a&quot; alt=&quot;WhatsApp Image 2024-02-09 at 14 50 14 (1)&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/36af06e9-50c5-4b58-9816-4c7241325b97&quot; alt=&quot;WhatsApp Image 2024-02-09 at 14 50 15 (2)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/fa1352ed-a85e-49b4-984f-a41a42ba9300&quot; alt=&quot;WhatsApp Image 2024-02-09 at 14 50 14 (14)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/cdcec387-c0e9-447c-a490-1d7e090581f1&quot; alt=&quot;WhatsApp Image 2024-02-09 at 14 50 14 (13)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/738340b7-320e-469b-ba59-3024006ed3ba&quot; alt=&quot;WhatsApp Image 2024-02-09 at 14 50 14 (12)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/0f69779b-46ef-4c1c-a995-a4d9f870c2ab&quot; alt=&quot;WhatsApp Image 2024-02-09 at 14 50 14 (11)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/64508d80-b09b-42cd-aa7b-da5d8b05c4f4&quot; alt=&quot;WhatsApp Image 2024-02-09 at 14 50 14 (10)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/b41d662f-607d-4c7c-b3e2-8cda5d15b1a2&quot; alt=&quot;WhatsApp Image 2024-02-09 at 14 50 14 (6)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/aad173fd-2dde-499f-967a-e4cb73e8dc9c&quot; alt=&quot;WhatsApp Image 2024-02-09 at 14 50 14 (4)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/503f64e0-dc0c-432e-a1bf-178d6c0321fd&quot; alt=&quot;WhatsApp Image 2024-02-09 at 14 50 14 (2)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/2aa849f1-0f35-4c2f-91d1-3050cd99b1ab&quot; alt=&quot;WhatsApp Image 2024-02-09 at 14 50 15 (6)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/fe789d3a-9605-4c3d-8ab2-1d84a685294d&quot; alt=&quot;WhatsApp Image 2024-02-09 at 14 50 15 (3)&quot;&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.DzP2fNSL.jpg"/><enclosure url="/_astro/thumbnail.DzP2fNSL.jpg"/></item><item><title>Final AYED</title><link>https://fabianmartinezrincon.com/blog/final-ayed</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/final-ayed</guid><description>Finales de la materias Algoritmos y Estructura de Datos</description><pubDate>Sat, 23 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Final Ayed&lt;/h2&gt;
&lt;p&gt;Bueno, por lo que me dijeron este final es full teorico. Aca dejo uno que me pasaron.&lt;/p&gt;
&lt;h3&gt;Imagenes&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/AyED/assets/55964635/ef5aff49-4269-4f1f-8164-8b301808ecbb&quot; alt=&quot;1&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/AyED/assets/55964635/8c762ffb-5961-49a9-b99b-4ac3b927375a&quot; alt=&quot;2&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/AyED/assets/55964635/32d10c94-08e8-432b-aeda-1948cd2a8448&quot; alt=&quot;3&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/AyED/assets/55964635/54d41cb9-7478-4416-870a-a6936c30fced&quot; alt=&quot;4&quot;&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.C94c7cpE.jpg"/><enclosure url="/_astro/thumbnail.C94c7cpE.jpg"/></item><item><title>Final FOD</title><link>https://fabianmartinezrincon.com/blog/final-fod</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/final-fod</guid><description>El objetivo de este blog es poder tener la información necesaria para aprobar el final.</description><pubDate>Tue, 12 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;😎 ESPACIO PUBLICITARIO 😎&lt;/h2&gt;
&lt;p&gt;En esta pagina tenes preguntas para poder simular el final&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://josu-dev.github.io/Depende-Quiz-Datos/&quot;&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/4f839366-b9b3-4de2-a1fe-bdfa75f5782b&quot; alt=&quot;Quiz FOD&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;El objetivo de este blog es poder tener la información necesaria para aprobar el final y que no dependa de si conseguiste finales o si no sabes donde encontrar información para estudiar.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Fabo-University/FOD&quot;&gt;Repositorio con todas las clases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Fabo-University/FOD/blob/main/Introducci%C3%B3n%20a%20las%20Bases%20de%20Datos%20-%20Bertone-Thomas.pdf&quot;&gt;Libro de la materia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://j-josu.github.io/Quiz-FOD/&quot;&gt;Cuestionario online&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Final de septiembre (07/09/2023)&lt;/h2&gt;
&lt;p&gt;En cada caso marcar una sola opción correcta. Cada respuesta correcta suma 1 punto, cada respuesta incorrecta resta 0.5 y un  inciso sin responder es neutro.&lt;/p&gt;
&lt;h4&gt;Pregunta 1)&lt;/h4&gt;
&lt;p&gt;Dado el siguiente árbol B+ es de 5. La operación de baja del valor 52:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Nodo 0&lt;/strong&gt;: 4, i, 1(23) 2(52) 3(73) 4(88) 5&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nodo 1&lt;/strong&gt;: 4, h, (5) (9) (15) (20)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nodo 2&lt;/strong&gt;: 3, h, (25) (32) (41)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nodo 3&lt;/strong&gt;: 2, h, (53) (62)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nodo 4&lt;/strong&gt;: 1, h, (78)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nodo 5&lt;/strong&gt;: 1, h, (90)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Respuestas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;a) Genera: lectura nodo 0, lectura nodo 5 y ninguna escritura.&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; Genera: lectura nodo 0, lectura nodo 5, lectura nodo 4 y escritura solo del nodo 0.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; El árbol desciende de nivel.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Genera: lectura nodo 0, lectura nodo 5, lectura nodo 4, escritura nodos 5 y escritura nodo 4.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e)&lt;/strong&gt; Hay más de una opción valida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;f)&lt;/strong&gt; Todas las opciones anteriores son correctas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;g)&lt;/strong&gt; Ninguna de las opciones anteriores es correcta.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Pregunta 2)&lt;/h4&gt;
&lt;p&gt;La siguiente secuencia de instrucciones en un archivo con al menos un registro y la siguiente estructura: código de producto y precio:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;assign (arch, &quot;archivo.dat&quot;);
reset(arch);
read(arch, producto);
producto.codigo:= 1;
producto.precio:= 5000;
write(arch, producto);
close(arch);
reset(arch);
writeln(filesize(arch));
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Respuestas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; Pierde la información del primer registro del archivo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;b) Modifica el código y el precio del primer registro existente en el archivo y lo escribe en su misma posición.&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; Puede imprimir 2 en pantalla&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Puede imprimir 1 en pantalla&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e)&lt;/strong&gt; Puede imprimir 0 en pantalla&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;f)&lt;/strong&gt; Hay más de una opción valida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;g)&lt;/strong&gt; Todas las opciones anteriores son correctas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;h)&lt;/strong&gt; Ninguna de las opciones anteriores es correcta.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Pregunta 3)&lt;/h4&gt;
&lt;p&gt;Se tiene el siguiente archivo para dispersión estática, con la técnica de saturación progresiva encadenada. Si llega la clave B que genera por función de dispersión la dirección 1 (F(B) = 1). Entonces:&lt;/p&gt;
&lt;p&gt;| Dir | Clave  | Enlace |
|-----|--------|--------|
| 0   |        | -1     |
| 1   | A      | 3      |
| 2   | Z      | -1     |
| 3   | W      | -1     |
| 4   |        | -1     |
| 5   | D      | -1     |
| 6   |        | -1     |
| 7   |        | -1     |&lt;/p&gt;
&lt;h4&gt;Respuestas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; La clave B se almacena en la dirección 0 con enlace a la dirección 3.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; La clave B se almacena en la dirección 4 con enlace a la dirección 3.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; La clave B se almacena en la dirección 3 y la clave W se quita del archivo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; La clave B se almacena en la dirección 3 y la clave W se mueve a la dirección 4 con enlace a la dirección 3.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e)&lt;/strong&gt; Hay más de una opción valida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;f)&lt;/strong&gt; Todas las opciones anteriores son correctas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;g)&lt;/strong&gt; Ninguna de las opciones anteriores es correcta.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Esta pregunta no esta corregida.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h4&gt;Pregunta 4)&lt;/h4&gt;
&lt;p&gt;Dado un archivo organizado con una lista invertida interna al mismo archivo para recuperación de espacio libre:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; Ante una nueva alta, se debe recorrer el archivo de forma secuencial buscando un espacio libre.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; La búsqueda de un elemento en el archivo puede realizarse secuencialmente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; Ante una nueva alta, siempre se modifica el registro de la posición 0.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Ante una baja de un elemento existente en el archivo, siempre se modifica el registro de la posición 0.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e)&lt;/strong&gt; Hay más de una opción valida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;f)&lt;/strong&gt; Todas las opciones anteriores son correctas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;g)&lt;/strong&gt; Ninguna de las opciones anteriores es correcta.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;No hay respuesta&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;Pregunta 4 Alternativa)&lt;/h4&gt;
&lt;p&gt;La misma Pregunta&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; Ante una nueva alta, se debe recorrer el archivo de forma secuencial buscando un espacio libre.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; Ante una nueva alta, siempre se modifica el registro de la posición 0.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; Ante una baja de un elemento existente en el archivo, siempre se modifica el registro de la posición 0.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Si se eliminan todos los registros del archivo, la operación de filesize imprime 0. &lt;strong&gt;&lt;code&gt;//Esta no es&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e)&lt;/strong&gt; Hay más de una opción valida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;f)&lt;/strong&gt; Todas las opciones anteriores son correctas.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Pregunta 5)&lt;/h4&gt;
&lt;p&gt;Según el estado de un archivo directo para dispersión estensible y bloques o cubetas con capacidad para 3 registros:&quot;&lt;/p&gt;
&lt;p&gt;Tabla:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;0 (0): 1&lt;/li&gt;
&lt;li&gt;1 (1): 0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Claves de registros en Bloques:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;0: 1 | 13525(0011010011010101), 12829(0011001000011101), 11541(0010110100010101)&lt;/li&gt;
&lt;li&gt;1: 0 | 55344(1101100000110000), 37502(1001001001111110), 20642(0101000010100010)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Respuestas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; El proceso de alta de la clave 19825 (100110101110001) no produce overflow&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; El proceso de alta de la clave 19825 (100110101110001) produce overflow y no es necesario duplicar la tabla&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; El proceso de alta de la clave 19825 (100110101110001) produce más de un overflow y se duplica la tabla una única vez, quedando la misma con 2 bits asociados (4 entradas)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Hay más de una opción valida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e)&lt;/strong&gt; Todas las opciones anteriores son correctas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;f)&lt;/strong&gt; Ninguna de las opciones anteriores es correcta.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;No hay respuesta&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h4&gt;Pregunta 6) No estan ordenados&lt;/h4&gt;
&lt;p&gt;Dado un archivo maestro que almacena código ded producto y stock, y dando dos archivos de detalle que almacenan fecha de venta, código de producto y cantidad vendida. El archivo maestro y los detalles no están ordenados, entonces en la implementación de un algoritmo de actualización maestro/detalle:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; Se aplica un algoritmo de corte de control  para procesar ambos archivos de detalle simultáneamente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; No es necesario procesar todos los registros del archivo maestro.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; No es posible actualizar el archivo maestro con los archivos de detalle.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Es necesario procesar todos los registros en los archivos detalle&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;e) Hay más de una opción valida.&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;f)&lt;/strong&gt; Todas las opciones anteriores son correctas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;g)&lt;/strong&gt; Ninguna de las opciones anteriores es correcta.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Pregunta 6 Alternativa) Estan ordenados&lt;/h4&gt;
&lt;p&gt;Dado un archivo maestro que almacena código ded producto y stock, y dando dos archivos de detalle que almacenan fecha de venta, código de producto y cantidad vendida. El archivo maestro y los detalles están ordenados por codigo de producto, entonces en la implementación de un algoritmo de actualización maestro/detalle:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; Se pueden procesar ambos archivos de detalle simultáneamente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; Puede no ser necesario procesar todos los registros del archivo maestro.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; Es necesario procesar todos los registros de los archivos de detalle.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Hay más de una opción valida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;e) Todas las opciones anteriores son correctas.&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;f)&lt;/strong&gt; Ninguna de las opciones anteriores es correcta.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Pregunta 7)&lt;/h4&gt;
&lt;p&gt;Dada una función de dispersión&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; Se utiliza saturación progresiva para ubicar registros en overflow.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; Se utiliza saturación progresiva encadenada para ubicar registros en overflow.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; Se utiliza saturación progresiva encadenada en áreas separadas para ubicar registros en overflow.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Se utiliza dispersión doble para ubicar registros en overflow.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e)&lt;/strong&gt; Todas las opciones anteriores son correctas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;f)&lt;/strong&gt; Algunas de las opciones anteriores son correctas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;g)&lt;/strong&gt; Ninguna de las opciones anteriores es correcta.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Pregunta 8)&lt;/h4&gt;
&lt;p&gt;Cuando se busca un elemento en un árbol B+&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; Puede necesitar la creación de un nodo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; No es necesario acceder al nivel hoja.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; Puede ser necesario realizar una actualización en un nodo interno.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Es necesario acceder al nivel hoja.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e)&lt;/strong&gt; Hay más de una opción válida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;f)&lt;/strong&gt; Todas las opciones anteriores son correctas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;g)&lt;/strong&gt; Ninguna de las opciones anteriores es correcta.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;No hay respuesta&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h4&gt;Pregunta 9)&lt;/h4&gt;
&lt;p&gt;Cuando se busca un elemento en un árbol B (Pueden preguntar lo mismo con árbol B+):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; Puede necesitar la creación de un nodo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; Puede no ser necesario acceder al nivel hoja.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; Puede ser necesario realizar una actualización en un nodo interno.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Es necesario acceder al nivel hoja.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e)&lt;/strong&gt; Hay más de una opción válida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;f)&lt;/strong&gt; Todas las opciones anteriores son correctas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;g) Ninguna de las opciones anteriores es correcta.&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Pregunta 10)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Cuando se realiza una baja en un árbol B+:&lt;/li&gt;
&lt;li&gt;Cuando se realiza una baja en un árbol B:&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Respuestas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; Puede ocurrir overflow&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; Ocurre underflow&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; Puede ser necesario liberar un nodo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Puede no ser necesario acceder al nivel hoja.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e)&lt;/strong&gt; Hay más de una opción válida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;f)&lt;/strong&gt; Todas las opciones anteriores son correctas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;g)&lt;/strong&gt; Ninguna de las opciones anteriores es correcta.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;No hay respuesta&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h4&gt;Pregunta 8)&lt;/h4&gt;
&lt;p&gt;Un indice secundario es:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; Una estructura de datos adicional que permite asociar una o varias claves primarias con una clave candidata.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; Una estructura de datos adicional que contiene el mismo volumen de información que el archivo original&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; Una estructura de datos adicional que permite asociar una o varias claves secundarias con una clave primaria.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Hay más de una opción válida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e)&lt;/strong&gt; Todas las opciones anteriores son correctas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;f) Ninguna de las opciones anteriores es correcta.&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Pregunta 7)&lt;/h4&gt;
&lt;p&gt;Un árbol AVL es un (utilizar sólo 5 palabras, no más):&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Otro Final&lt;/h2&gt;
&lt;h4&gt;Pregunta 1)&lt;/h4&gt;
&lt;p&gt;Cuando se produce un desborde en dispersión dinámica:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; En algunos casos aumenta la cantidad de bits asociado al bloque en donde sucede el desborde.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; Siempre se duplica la tabla asociada al archivo de datos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; No es necesario generar un nuevo bloque para el archivo de datos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Puede no ser necesario escribir en el archivo de datos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e)&lt;/strong&gt; Hay más de una opción válida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;f)&lt;/strong&gt; Todas las opciones anteriores son correctas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;g)&lt;/strong&gt; Ninguna de las opciones anteriores es correcta.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Pregunta 2)&lt;/h4&gt;
&lt;p&gt;La siguiente secuencia de instrucciones en un archivo vacío con la siguiente estructura: código de producto y precio:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;assign (arch, &quot;archivo.dat&quot;);
rewrite(arch);
producto.codigo:= 1;
producto.precio:= 5000;
close(arch);
reset(arch);
writeln(filesize(arch));
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Respuestas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; Pierde Información&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; Modificar el código y el precio del último registro existente en el archivo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; Puede imprimir 0 en pantalla&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Puede imprimir 1 en pantalla &lt;strong&gt;&lt;code&gt;//Esta no es&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e)&lt;/strong&gt; No realiza cambio alguno sobre el archivo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;f)&lt;/strong&gt; Hay más de una opción valida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;g)&lt;/strong&gt; Todas las opciones anteriores son correctas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;h)&lt;/strong&gt; Ninguna de las opciones anteriores es correcta.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Pregunta 3)&lt;/h4&gt;
&lt;p&gt;Final de septiembre (07/09/2023) Pregunta 6 Alternativa&lt;/p&gt;
&lt;hr&gt;
&lt;h4&gt;Pregunta 4)&lt;/h4&gt;
&lt;p&gt;Un árbol AVL&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; Es un árbol binario en donde cada nodo puede tener más de un nodo padre.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; Es un árbol B balanceado en altura&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; Es una estructura de datos lineal que se puede desbalancear.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Puede ser árbol B balanceado en altura.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Puede ser árbol B+ balanceado en altura.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e)&lt;/strong&gt; Hay más de una opción válida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;f)&lt;/strong&gt; Todas las opciones anteriores son correctas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;g)&lt;/strong&gt; Ninguna de las opciones anteriores es correcta.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;No hay respuesta&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h4&gt;Pregunta 5)&lt;/h4&gt;
&lt;p&gt;Un índice secundario es:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; Una estructura de datos adicional que permite asociar una o varias claves primarias con una clave secundaria.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; Una estructura de datos adicional que contiene el mismo volumen de información que el archivo original&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; Una estructura de datos adicional que permite asociar una o varias claves secundarias con una clave primaria.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Una estructura de datos adicional que establece un orden lógico del archivo original.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e)&lt;/strong&gt; Una estructura de datos adicional que permite relacionar una clave primaria con otra clave candidata.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;f)&lt;/strong&gt; Hay más de una opción válida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;g)&lt;/strong&gt; Todas las opciones anteriores son correctas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;h)&lt;/strong&gt; Ninguna de las opciones anteriores es correcta.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;No hay respuesta&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h4&gt;Pregunta 6)&lt;/h4&gt;
&lt;p&gt;Cuando se realiza una baja en un árbol B+ de prefijos simples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; Necesita la creación de más de un nodo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; Siempre se accede al nivel hoja.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; Es necesario realizar una actualización en un nodo interno.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Nunca puede aumentar el nivel del árbol&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e)&lt;/strong&gt; Se promociona una copia de la expresión en un nodo interno. &lt;strong&gt;&lt;code&gt;//Esta no es&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;f)&lt;/strong&gt; Hay más de una opción válida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;g)&lt;/strong&gt; Todas las opciones anteriores son correctas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;h)&lt;/strong&gt; Ninguna de las opciones anteriores es correcta.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Pregunta 7)&lt;/h4&gt;
&lt;p&gt;Cuando se realiza un alta en un árbol B:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; El nuevo elemento debe ir en un nodo interno.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; Ocurre un overflow&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; Puede ocurrir un underflow. &lt;strong&gt;&lt;code&gt;//Esta no es&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Puede ser necesario liberar un nodo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e)&lt;/strong&gt; El árbol nunca puede descender de nivel.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;f)&lt;/strong&gt; No es necesario acceder al nivel hoja.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;g)&lt;/strong&gt; Hay más de una opción válida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;h)&lt;/strong&gt; Todas las opciones anteriores son correctas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;i)&lt;/strong&gt; Ninguna de las opciones anteriores es correcta.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Pregunta 8)&lt;/h4&gt;
&lt;p&gt;Cuando se realiza un alta y produce una colisión en dispersión estática:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; Siempre se genera desborde.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; Nunca se genera desborde.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;c) Se puede generar desborde.&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Se puede generar una colisión.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e)&lt;/strong&gt; Hay más de una opción válida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;f)&lt;/strong&gt; Todas las opciones anteriores son correctas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;g)&lt;/strong&gt; Ninguna de las opciones anteriores es correcta.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Pregunta 9)&lt;/h4&gt;
&lt;p&gt;Dado un archivo organizado con una lista invertida interna al mismo archivo para recuperación de espacio libre:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; Ante una nueva alta, se recorre el archivo de forma secuencial buscando un espacio libre.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; Ante una nueva alta, se modifica el registro de la posición 0.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; Ante una baja de un elemento existente en un archivo, se modifica el registro de la posición 0.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Si se eliminan todos los registros del archivo, entonces se debe eliminar el registro en la posición 0 del archivo. &lt;strong&gt;&lt;code&gt;//Esta no es&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e)&lt;/strong&gt; La lista invertida interna no puede estar vacía.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;f)&lt;/strong&gt; Hay más de una opción válida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;g)&lt;/strong&gt; Todas las opciones anteriores son correctas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;h)&lt;/strong&gt; Ninguna de las opciones anteriores es correcta.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Pregunta 10)&lt;/h4&gt;
&lt;p&gt;Cuando una clave &lt;strong&gt;x&lt;/strong&gt; y otra clave &lt;strong&gt;y&lt;/strong&gt; generan, por Función de Dispersión, la misma dirección, entonces:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; Puede ocurrir un desborde.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; Puede ocurrir una colisión.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; &lt;strong&gt;x&lt;/strong&gt; e &lt;strong&gt;y&lt;/strong&gt; no son claves sinónimas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Todas las opciones anteriores son correctas. &lt;strong&gt;&lt;code&gt;//Esta no es&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e)&lt;/strong&gt; Hay más de una opción válida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;f)&lt;/strong&gt; Ninguna de las opciones anteriores es correcta.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Final de Julio (06/07/2023)&lt;/h2&gt;
&lt;p&gt;En cada caso marcar una sola opción correcta. Cada respuesta correcta suma 1 punto, cada respuesta incorrecta resta 0.5 y un inciso sin respuesta es neutro.&lt;/p&gt;
&lt;h4&gt;Pregunta 1)&lt;/h4&gt;
&lt;p&gt;Dado un archivo maestro que almacena código de producto y stock, y dado dos archivos de detalle que almacenan fecha de venta, código de producto y cantidad vendida. El archivo maestro ordenado por stock y los detalles por  código ded producto, entonces en la implementación de un algoritmo ded actualización maestro/detalle:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; No se pueden procesar ambos archivos de detalle simultáneamente. &lt;strong&gt;&lt;code&gt;//Esta no es&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; No es necesario procesar todos los registros del archivo maestro.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; Puede no ser necesario procesar todos los registros de los archivos detalle.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Hay más de una opción válida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e)&lt;/strong&gt; Todas las opciones anteriores son correctas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;f)&lt;/strong&gt; Ninguna de las opciones anteriores es correcta.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Pregunta 2)&lt;/h4&gt;
&lt;p&gt;La siguiente secuencia de instrucciones en un archivo con al menos un registro y con la siguiente estructura: código de producto y precio:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;assign (arch, &quot;archivo.dat&quot;);
rewrite(arch);
producto.codigo:= 1;
producto.precio:= 5000;
write(arch, producto);
close(arch);
reset(arch);
writeln(filesize(arch));
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Respuestas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; Puede perder información. &lt;strong&gt;&lt;code&gt;//Esta no es&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; Modifica el código y el precio del último registro existente en el archivo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; Imprime 0 en pantalla&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Imprime 1 en pantalla&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e)&lt;/strong&gt; No realiza cambio alguno sobre el archivo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;f)&lt;/strong&gt; Hay más de una opción válida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;g)&lt;/strong&gt; Todas las opciones anteriores son correctas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;h)&lt;/strong&gt; Ninguna de las opciones anteriores es correcta.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Pregunta 3)&lt;/h4&gt;
&lt;p&gt;Dado un archivo organizado con una lista invertida interna al mismo archivo para recuperación de espacio libre:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; El registro ubicado en la posición 1 se considera un registro especial que se utiliza como inicio de la lista.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; Ante una nueva alta, se recorre el archivo de forma secuencial buscando un espacio libre.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; Ante una nueva alta, si la lista interna de espacio libre está vacía se recorre el archivo secuencialemnte hasta el final y ahí se agrega el nuevo registro.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Ante una baja, no es necesario actualizar la lista interna de espacio libre.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e)&lt;/strong&gt; Si se eliminan todos los registros del archivo, entonces se debe eliminar el registro en la posición 0 del archivo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;f)&lt;/strong&gt; La lista invertida interna no puede estar vacía.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;g)&lt;/strong&gt; Hay más de una opción válida. &lt;strong&gt;&lt;code&gt;//Esta no es&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;h)&lt;/strong&gt; Todas las opciones anteriores son correctas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;i)&lt;/strong&gt; Ninguna de las opciones anteriores es correcta.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Pregunta 4)&lt;/h4&gt;
&lt;p&gt;Un índice primario es:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; Una estructura de datos adicional que permite asociar una o varias claves primarias con una clave secundaria.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; Una estructura de datos adicional que contiene el mismo volumen de información que el archivo original&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; Una estructura de datos adicional que permite asociar una o varias claves secundarias con una clave primaria.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;d) Una estructura de datos adicional que establece un orden lógico del archivo original.&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e)&lt;/strong&gt; Una estructura de datos adicional que permite relacionar una clave primaria con otra clave candidata.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;f)&lt;/strong&gt; Hay más de una opción válida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;g)&lt;/strong&gt; Todas las opciones anteriores son correctas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;h)&lt;/strong&gt; Ninguna de las opciones anteriores es correcta.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Pregunta 5)&lt;/h4&gt;
&lt;p&gt;Un árbol AVL&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; Es un árbol binario en donde cada nodo puede tener más de un nodo padre.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; Es un árbol B balanceado en altura&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; Es una estructura de datos lineal que se puede desbalancear.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Puede ser árbol B balanceado en altura.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Puede ser árbol B+ balanceado en altura.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e)&lt;/strong&gt; Hay más de una opción válida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;f)&lt;/strong&gt; Todas las opciones anteriores son correctas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;g)&lt;/strong&gt; Ninguna de las opciones anteriores es correcta. &lt;strong&gt;&lt;code&gt;//Esta no es&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Pregunta 6)&lt;/h4&gt;
&lt;p&gt;Cuando se realiza un alta en un árbol B+ de prefijos simples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; No necesita la creación de más de un nodo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; Siempre se accede al nivel hoja.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; Puede no ser necesario realizar una actualización en un nodo interno.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Nunca puede aumentar el nivel del árbol&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e)&lt;/strong&gt; Siempre se promociona una copia de la expresión minima de la clave.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;f) Hay más de una opción válida.&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;g)&lt;/strong&gt; Todas las opciones anteriores son correctas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;h)&lt;/strong&gt; Ninguna de las opciones anteriores es correcta.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Pregunta 7)&lt;/h4&gt;
&lt;p&gt;Cuando se realiza una baja en un árbol B:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; El elemento que se elimina no puede estar en un nod interno del árbol.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; Puede existir underflow y no propagarse hasta el nodo raíz.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; Puede existir underflow y progagarse hasta el nodo raíz.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Siempre es necesario liberar un nodo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e)&lt;/strong&gt; El árbol desciende de nivel.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;f)&lt;/strong&gt; No es necesario acceder al nivel hoja.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;g) Hay más de una opción válida.&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;h)&lt;/strong&gt; Todas las opciones anteriores son correctas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;i)&lt;/strong&gt; Ninguna de las opciones anteriores es correcta.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Pregunta 8)&lt;/h4&gt;
&lt;p&gt;Cuando se realiza un alta se produce una colisión en dispersión estática:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; Siempre se genera desborde.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; Nunca se genera desborde.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; &lt;strong&gt;&lt;code&gt;Se puede generar desborde.&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Se puede generar una colisión.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e)&lt;/strong&gt; Hay más de una opción válida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;f)&lt;/strong&gt; Todas las opciones anteriores son correctas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;g)&lt;/strong&gt; Ninguna de las opciones anteriores es correcta.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Pregunta 9)&lt;/h4&gt;
&lt;p&gt;Cuando una clave &lt;strong&gt;x&lt;/strong&gt; y otra clave &lt;strong&gt;y&lt;/strong&gt; generan, por Función de Dispersión, distinta dirección, entonces:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; Puede ocurrir un desborde.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; Puede ocurrir una colisión.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; &lt;strong&gt;x&lt;/strong&gt; e &lt;strong&gt;y&lt;/strong&gt; no son claves sinónimas. &lt;strong&gt;&lt;code&gt;//Esta no es&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Todas las opciones anteriores son correctas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e)&lt;/strong&gt; Hay más de una opción válida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;f)&lt;/strong&gt; Ninguna de las opciones anteriores es correcta.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Pregunta 10)&lt;/h4&gt;
&lt;p&gt;Cuando se produce un desborde en dispersión dinámica:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a)&lt;/strong&gt; En algunos casos aumenta la cantidad de bits asociado al bloque en donde sucede el desborde.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;b)&lt;/strong&gt; Siempre se duplica la tabla asociada al archivo de datos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c)&lt;/strong&gt; Se debe generar un nuevo bloque para el archivo de datos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d)&lt;/strong&gt; Puede no ser necesario duplicar la tabla asociada al archivo de datos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;e)&lt;/strong&gt; Puede no ser necesario escribir en el archivo de datos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;f)&lt;/strong&gt; Hay más de una opción válida. &lt;strong&gt;&lt;code&gt;//Esta no es&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;g)&lt;/strong&gt; Todas las opciones anteriores son correctas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;h)&lt;/strong&gt; Ninguna de las opciones anteriores es correcta.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Mas Finales&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/a8deffe9-b4a4-4f84-bdf1-695ed6aac347&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 39 02&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/83eada33-faa7-42e0-b94d-ef3189f6f92d&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 39 02 (1)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/b9f4ba65-064f-4f65-9d95-b591c8c17762&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 39 01&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/67be5cd8-7bcd-49d7-9e64-9e0165ac4f1b&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 39 01 (2)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/233d0050-f4fc-4a46-929a-07396e1baa33&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 39 01 (1)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/0af57699-e23f-4234-865d-288efb9b1171&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 39 00&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/30d556e1-48a2-4c65-af9e-03bb8ff94354&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 39 00 (3)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/469d40c4-4e58-4270-9c44-6021a362dd26&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 39 00 (2)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/92ac08ab-25a1-4645-9037-ddb18c3c7db0&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 39 00 (1)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/be5e116d-8ac6-4d10-97d9-a157920696b3&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 38 59&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/6dae533a-fc8a-4632-9534-5af9ae16bf85&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 38 59 (2)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/8ca511f4-813e-49e1-bb98-9adf56b64740&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 38 59 (1)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/58a1baac-d101-4a1e-a590-6a33fbf6fd26&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 38 58&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/fab2d9bb-e109-4e90-9ad4-03753d3f3f24&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 38 58 (3)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/d0093a4d-11ca-442d-b2dc-c14574010664&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 38 58 (2)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/589a6eeb-045f-4818-b7ba-9bd27dc04eee&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 38 58 (1)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/72397470-c8a4-4f03-9f60-30218e2f51e0&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 38 57&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/e47c2b62-57e8-4d7c-a0a6-572c674bd53a&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 38 57 (2)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/e58c120b-c1de-41d1-ad04-6f905f2d66e6&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 38 55&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/13d57bbc-dbd8-4865-a624-9d0cc095867b&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 38 55 (3)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/b4b330e0-193f-4246-a3d5-26bdaeca81d5&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 38 55 (2)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/db9c3498-d3cc-4441-9252-a817a19a46f6&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 38 55 (1)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/f7f0164b-e460-4b34-8ab1-25bdfb255ab9&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 38 54&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/8a4b1060-8608-4110-8614-41e54e9fa894&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 38 54 (1)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/087773db-1ab7-4bc5-bea0-8f9d433d97aa&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 38 15&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/84277822-3e82-4d46-b463-aa239e3d85eb&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 38 14&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/a3bf7ea3-e8a5-4726-bab5-5abca7a3e982&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 38 14 (2)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/09c496cd-ca64-4a76-a0be-7862a50d2112&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 38 14 (1)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/25986578-3201-487d-baeb-87880fa1e500&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 37 57&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/8d2905aa-7507-497c-9377-e0c7a2bd2f98&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 37 57 (1)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/27da657b-fca8-4262-94b4-ff2ef3a931a8&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 37 56&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/65d20f49-8b78-41f5-9137-62d282e2ba6c&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 37 56 (2)&quot;&gt;
&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/aa5ced84-3c8f-488a-ad2e-65797f303390&quot; alt=&quot;WhatsApp Image 2023-12-16 at 16 37 56 (1)&quot;&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.DBIYG2Oq.jpg"/><enclosure url="/_astro/thumbnail.DBIYG2Oq.jpg"/></item><item><title>Final Taller de Programación</title><link>https://fabianmartinezrincon.com/blog/final-taller</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/final-taller</guid><description>En esta página voy a tratar de explicar todo lo que se necesita para aprobar el final independientemente del tema.</description><pubDate>Tue, 12 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;En esta página voy a tratar de explicar todo lo que se necesita para aprobar el final independientemente del tema. Hay muchas cosas que uno lo puede deducir, pero en esta cátedra el más mínimo error es motivo para un 2(dos).&lt;/p&gt;
&lt;h1&gt;💀 Final Taller de Programación&lt;/h1&gt;
&lt;h2&gt;Final Pascal&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=kN9NGex2-yg&amp;#x26;ab_channel=Cio&quot;&gt;Video para instalar pascal en vs-code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si te toca este final, tenes 2 opciones nada más.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Merge acumulador&lt;/li&gt;
&lt;li&gt;Arboles&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para ambos temas te tenes que saber si o si:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Agregar Adelante&lt;/li&gt;
&lt;li&gt;Agregar Atras&lt;/li&gt;
&lt;li&gt;Insertar Ordenado&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Agregar Adelante&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-pascal&quot;&gt;Procedure AgregarAdelante (var L:lista; x:integer);
Var 
    nue:Lista;
Begin  
    New(nue);  
    nue^.datos:=x;  
    nue^.sig:=L;  
    L:=nue; 
End;    
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Agregar Atras&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-pascal&quot;&gt;procedure AgregarAlFinal(var l,ult:lista;x:integer); 
var  
    nue : lista;
begin 
    new (nue);
    nue^.dato:= x;
    nue^.sig := NIL;
    if l &amp;#x3C;&gt; Nil then 
        ult^.sig := nue
    else 
        l := nue;
    ult := nue;
end;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Insertar Ordenado&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-pascal&quot;&gt;Procedure InsertarElemento ( var pri: lista; x: Integer);
var 
    ant, nue, act: lista;
begin
    new (nue);
    nue^.dato := x;
    act := pri;
    ant := pri;
    while (act&amp;#x3C;&gt;NIL) and (act^.dato &amp;#x3C; x) do 
    begin
        ant := act;
        act := act^.sig ;
    end;
    if (ant = act)  then 
        pri := nue   
    else  
        ant^.sig  := nue; 
    nue^.sig := act ;
end;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mira, para probar los codigos yo lo que hago es hacer una lista de numeros enteros y, insertando lo que quiera probar y despues imprimo la lista para ver si esta bien.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-pascal&quot;&gt;procedure ImprimirLista (L:lista);
begin
    while (L &amp;#x3C;&gt; nil) do 
    begin
        writeln (L^.dato);
        L:= L^.sig;
    end;
end;
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;IMPORTANTE: Yo no avanzaria hasta saber bien estos codigos, ya que si tenes algun error en estos es causa de desaprobar :,(&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Y con esto nos aseguramos de tener todo en orden.&lt;/p&gt;
&lt;p&gt;Bien, una vez que sabemos que funcionan los codigos, vamos a resolver el siguiente final.&lt;/p&gt;
&lt;h3&gt;Final Merge Acumulador&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;En este final no me acordaba el insertar ordenado y el modulo recursivo del punto c, lo habia hecho mal&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/fa8d3aea-b55f-4814-b3bc-3afb4082798e&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Tenemos los datos relevantes con colores que seria &lt;strong&gt;denuncia&lt;/strong&gt; que contiene lo siguiente:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Categoria de denuncia 1..6&lt;/li&gt;
&lt;li&gt;DNI&lt;/li&gt;
&lt;li&gt;Direccion
&lt;ul&gt;
&lt;li&gt;Numero de calle&lt;/li&gt;
&lt;li&gt;Numero de altura&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Mes&lt;/li&gt;
&lt;li&gt;Dia&lt;/li&gt;
&lt;li&gt;Hora&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bien una vez que tenemos estos datos, podemos empezar a ver los puntos dados.&lt;/p&gt;
&lt;h4&gt;Punto A&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Al decirnos que estan agrupadas por categoria nos indica que es un vector de listas (un vector de 6 agrupa las denuncias por categoria).&lt;/li&gt;
&lt;li&gt;Tambien nos dice que estan ordenadas por numero de calle, por lo que usaremos el proceso de &lt;strong&gt;InsertarOrdenado&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Punto B&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Al decir que recibe un vector de listas y devuelve una sola lista nos indica que tenemos que usar un &lt;strong&gt;merge&lt;/strong&gt; y por defecto usamos un &lt;strong&gt;agregarAtras&lt;/strong&gt; en el modulo de minimo.&lt;/li&gt;
&lt;li&gt;Cuando nos dice que para cada nro de calle en especifica, ya sabemos que es un &lt;strong&gt;merge acumulador&lt;/strong&gt; (un merge normal pero con un corte de control)&lt;/li&gt;
&lt;li&gt;Para los merges acumuladores es recomendable crear una estructura de datos aparte, que tenga los datos solicidatos, en este caso, &lt;strong&gt;nro de calle&lt;/strong&gt;, &lt;strong&gt;cantidad total de denuncias&lt;/strong&gt; y &lt;strong&gt;cantidad de denuncias realizadas en el mes de julio&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Punto C&lt;/h4&gt;
&lt;p&gt;Bien, en este caso, yo lo que hago siempre es hacer el module en forma iterativa, para probar y despues lo paso a recursivo. Basicamente cambias el &lt;strong&gt;while&lt;/strong&gt; por el &lt;strong&gt;if&lt;/strong&gt; y despues llavas cambias en donde se incrementa la variable, por una llamada a la funcion con el incremento o modificación correspondiente.&lt;/p&gt;
&lt;h3&gt;Codigo Completo (No lo probe)&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-pascal&quot;&gt;program imperativo;
const
    DIMF = 6;
type
    categoria = 1..DIMF;
    direccion = record
        nroCalle:integer;
        nroAltura:integer;
    end;
    denuncia = record
        cat:categoria;
        DNI:integer;
        dir:direccion;
        mes:integer;
        dia:integer;
        hora:integer;
    end;
    lista = ^nodo;
    nodo = record
        dato:denuncia;
        sig:lista;
    end;
    vectorContador = array [1..DIMF] of lista;

    datoNuevo = record
        nroCalle:integer;
        denunciasTotales:integer;
        denunciasJulio:integer;
    end;
    listaNueva = ^nodoNuevo;
    nodoNuevo = record
        dato:datoNuevo;
        sig:listaNueva;
    end;

procedure insertarOrdenado(var l:lista;d:denuncia);
var
    act,ant,nue:lista;
begin
    new(nue);
    nue^.dato:=d;
    act:=l;
    ant:=l;
    while (act &amp;#x3C;&gt; nil) and (act^.dato.DNI &amp;#x3C; d.DNI) do
    begin
        ant:=act;
        act:=act^.sig;
    end;
    if (act = ant) then
        l:=nue
    else
        ant^.sig:=nue;
    nue^.sig:=act;
end;

procedure imprimirLista(l:lista);
begin
    while l &amp;#x3C;&gt; nil do
    begin
        WriteLn(l^.dato.DNI);
        l:=l^.sig;
    end;
end;

procedure agregarAtras(var l,ult:listaNueva; nro:datoNuevo);
var
    nue:listaNueva;
begin
    new(nue);
    nue^.dato:=nro;
    nue^.sig:=nil;
    if (l = nil) then
        l:=nue
    else
        ult^.sig:=nue;
    ult:=nue;    
end;

procedure leerDenuncia(var d:denuncia);
begin
    
    writeln(&apos;Ingresar dni: &apos;); ReadLn(d.DNI);

    if (d.DNI &amp;#x3C;&gt; 0) then
    begin
        writeln(&apos;Ingresar categoria: &apos;); ReadLn(d.cat);
        writeln(&apos;Ingresar nroCalle: &apos;); ReadLn(d.dir.nroCalle);
        writeln(&apos;Ingresar nroAltura: &apos;); ReadLn(d.dir.nroAltura);
        writeln(&apos;Ingresar mes: &apos;); ReadLn(d.mes);
        writeln(&apos;Ingresar dias: &apos;); ReadLn(d.dia);
        writeln(&apos;Ingresar hora: &apos;); ReadLn(d.hora);
    end;
end;

procedure cargarDenuncias(var vc:vectorContador);
var
    d:denuncia;
begin
    leerDenuncia(d);
    while (d.DNI &amp;#x3C;&gt; 0) do
    begin
        insertarOrdenado(vc[d.cat],d);
        leerDenuncia(d);
    end;
end;
procedure inicializarVector (var vc:vectorContador);
var
    i:integer;
begin
    for i:=1 to DIMF do
    begin
        vc[i]:=nil;
    end;
end;

procedure minimo(vc:vectorContador; var min:denuncia);
var
    posMin:integer;
    i:integer;
begin
    posMin:=-1;
    min.DNI:=9999;
    for i:=1 to DIMF do
    begin
        if (vc[i] &amp;#x3C;&gt; nil) and (vc[i]^.dato.DNI &amp;#x3C; min.DNI) then
        begin
            min.DNI:=vc[i]^.dato.DNI;
            posMin:=i;
        end;
    end;
    if (posMin &amp;#x3C;&gt; -1) then
    begin
        min:=vc[posMin]^.dato;
        vc[posMin]:=vc[posMin]^.sig;
    end;
end;
procedure mergeAcumulador(vc:vectorContador;var ln:listaNueva);
var
    min:denuncia;
    actual:datoNuevo;
    ult:listaNueva;
begin
    ult:=nil;
    minimo(vc,min);
    while (min.DNI &amp;#x3C;&gt; 9999) do
    begin
        actual.nroCalle:=min.DNI;
        actual.denunciasTotales:=0;
        actual.denunciasJulio:=0;
        while (min.DNI &amp;#x3C;&gt; 9999) and (actual.nroCalle = min.DNI)  do
        begin
            actual.denunciasTotales:=actual.denunciasTotales + 1;
            if (min.mes = 6) then
                actual.denunciasJulio:=actual.denunciasJulio + 1;
            minimo(vc,min);  
        end;
        agregarAtras(ln,ult,actual);
    end;
end;
procedure calleDenuncias(l:listaNueva;var nroCalle:integer;calleMax:integer);
begin
    if l &amp;#x3C;&gt; nil then
    begin
        if (calleMax &amp;#x3C; l^.dato.denunciasTotales) then
        begin
            calleMax:=l^.dato.denunciasTotales;
            nroCalle:=l^.dato.nroCalle;
        end;
        calleDenuncias(l^.sig,nroCalle,calleMax)
    end;
end;
var
    vc:vectorContador;
    l:listaNueva;
    calleDenuncias:integer;
    calleMaxima:integer;
begin
    inicializarVector(vc);
    cargarDenuncias(vc);
    mergeAcumulador(vc,l);
    calleDenuncias:=0;
    calleMaxima:=-1;
    calleMasDenuncias(l,calleDenuncias,calleMaxima);
    writeln(&apos;La calle con mas denuncias es: &apos;, calleDenuncias);
end.
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3&gt;Final Arboles&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;En este final tenia mal el recorrido del arbol, lo puse dos condicionales en la condicion base. (Y siempre va &amp;#x3C;&gt; nil en la condicion base)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/749e071a-179f-4db5-97f3-1c2ede2e5fb8&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;IMPORTANTE: Primero te diria que resuelvas este parcial con full enteros y despues le agregues los datos compuestos, ya que es mas facil/rapido de testear&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;En los teoricos suelen tomar el recorrido optimo del arbol&lt;/p&gt;
&lt;p&gt;Tenemos &lt;strong&gt;recital&lt;/strong&gt; con los siguientes datos&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Nombre de la Banda&lt;/li&gt;
&lt;li&gt;Fecha del recital&lt;/li&gt;
&lt;li&gt;Cantidad de canciones tocadas&lt;/li&gt;
&lt;li&gt;Monto recaudado por la venta de entradas&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bien, una vez que tenemos estos datos, podemos empezar a ver los puntos dados.&lt;/p&gt;
&lt;h4&gt;Punto A&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;En el momento que nos dice que tienen que estar en &lt;strong&gt;una estructura que permite el recorrido optimo&lt;/strong&gt; por &lt;strong&gt;monto recaudado&lt;/strong&gt;, usamos un &lt;strong&gt;arbol&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Punto B&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Mira, esta parte puede ser la menos intuitiva, ya que NO tenemos que recorrer el arbol completo, tenemos que recorrer las ramas, hasta estar en el rango de numeros&lt;/li&gt;
&lt;li&gt;Tenemos que usar un &lt;strong&gt;agregarAtras&lt;/strong&gt;, ya que el arbol al estar ordenado, mantenemos el orden.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Punto C&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Aca simplemente hacemos el modulo iterativo, cambiamos el while por el if y despues cambiamos el incremento de la variable, por la llamada al proceso con el incremento como parametro.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Codigo Completo (No lo probe)&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-pascal&quot;&gt;program arboles;
type
    recital = record
        nombreBanda:String;
        fecha:String;
        cantTocadas:integer;
        montoRecaudado:real;
    end;
    arbol = ^nodo;
    nodo = record
        dato:recital;
        HI:arbol;
        HD:arbol;
    end;
    lista = ^nodoNuevo;
    nodoNuevo = record
        dato:recital;
        sig:lista;
    end;

procedure crearArbol(var abb:arbol;nro:recital);
begin
    if (abb = nil) then
    begin
        new(abb);
        abb^.dato:=nro;
        abb^.HI:=nil;
        abb^.HD:=nil;
    end
    else
        if (abb^.dato.montoRecaudado &gt; nro.montoRecaudado) then
            crearArbol(abb^.HI,nro)
        else
            crearArbol(abb^.HD,nro);
end;

procedure leerRecital(var r:recital);
begin
    Write(&apos;Ingresar nombreBanda: &apos;); ReadLn(r.nombreBanda);
    if (r.nombreBanda &amp;#x3C;&gt; &apos;ZZZ&apos;) then
    begin
        Write(&apos;Ingresar fecha: &apos;); ReadLn(r.fecha);
        Write(&apos;Ingresar cantTocadas: &apos;); ReadLn(r.cantTocadas);
        Write(&apos;Ingresar monto Recaudado: &apos;); ReadLn(r.montoRecaudado);
    end;
end;
procedure LeerRecitales(var abb:arbol);
var
    dato:recital;
begin
    leerRecital(dato);
    while dato.nombreBanda &amp;#x3C;&gt; &apos;ZZZ&apos; do
    begin
        crearArbol(abb,dato);
        leerRecital(dato);
    end;
end;
procedure agregarAdelante(var l:lista; r:recital);
var
    nue:lista;
begin
    new(nue);
    nue^.dato:=r;
    nue^.sig:=l;
    l:=nue;
end;

procedure entreRango(abb:arbol;nro1,nro2:integer;var l:lista);
begin
    if (abb &amp;#x3C;&gt; nil)then
    begin
        if (abb^.dato.montoRecaudado &amp;#x3C; nro1) then
            entreRango(abb^.HD,nro1,nro2,l)
        else if (abb^.dato.montoRecaudado &gt; nro2) then
            entreRango(abb^.HI,nro1,nro2,l)
        else
            begin
                entreRango(abb^.HI,nro1,nro2,l);
                agregarAdelante(l,abb^.dato);
                entreRango(abb^.HD,nro1,nro2,l);
            end;
    end;
end;
procedure recitalesMas12Canciones(l:lista; var cantMas12:integer);
begin
    if (l &amp;#x3C;&gt; nil) then
    begin
        if (l^.dato.cantTocadas &gt;= 12) then
          cantMas12:= cantMas12 + 1;
        recitalesMas12Canciones(l^.sig,cantMas12);
    end;    
end;
var
    abb:arbol;
    nro1,nro2:integer;
    l:lista;
    cantMas12:integer;
begin
    abb:=nil;
    LeerRecitales(abb);
    nro1:=3;
    nro2:=8;
    l:=nil;
    entreRango(abb,nro1,nro2,l);
    cantMas12:=0;
    recitalesMas12Canciones(l,cantMas12);
    WriteLn(&apos;La cantidad de recitales que tocaron mas de 12 canciones son:&apos;, cantMas12);
end.
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;Final Objetos&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=MXHsvSvJpHI&amp;#x26;ab_channel=TecnoTutoriales&quot;&gt;Video para instalar Java&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En todos los finales de objetos son mas o menos lo mismo, con resolver bien este final creo que abarcas todos los temas de objetos.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Cuando rendi este final me dijieron que tenia un 10 en el practico, pero me fue mal en las preguntas teoricas.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/45f4d6a1-edba-4c42-9dfa-eb40fa405f33&quot; alt=&quot;Objetos&quot;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;IMPORTANTE en este tipo de finales NO tenes collecciones, nos manejamos siempre con arrays&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Lo mas importante es identificar los objetos con sus atributos y herencias que tenemos.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tenista
&lt;ul&gt;
&lt;li&gt;Nombre&lt;/li&gt;
&lt;li&gt;Cantidad de Partidos Ganados&lt;/li&gt;
&lt;li&gt;Premios obtenidos en toda su carrera (un array de reales)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Partido
&lt;ul&gt;
&lt;li&gt;Fecha (string)&lt;/li&gt;
&lt;li&gt;Lugar&lt;/li&gt;
&lt;li&gt;Resultado
&lt;ul&gt;
&lt;li&gt;SetsEquipo1&lt;/li&gt;
&lt;li&gt;SetsEquipo2&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Partido Single (Heredan de Partido)
&lt;ul&gt;
&lt;li&gt;2 tenistas&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Partido Doble (Heredan de Partido)
&lt;ul&gt;
&lt;li&gt;4 tenistas&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Una vez que definimos todos los tipos de datos. Empezamos a ver los puntos y definimos los metodos segun el objeto.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cuando decimos que debe instanciarse con todos sus datos, nos referimos al constructor.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Main (Falta el de dobles pero me estoy durmiendo y no tengo muchas ganas)&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class Ultimo {

    public static void main(String[] args) {

        Tenista t1 = new Tenista(&quot;Fabian&quot;,2,12);
        Tenista t2 = new Tenista(&quot;Fernando&quot;,1,1);
        
        String fecha = &quot;1-1-2023&quot;;
        String lugar = &quot;La Plata&quot;;
        
        Single partidoS = new Single(fecha,lugar,t1,t2); 
        partidoS.registrarResultado(1, 2);
        partidoS.registrarResultado(1, 2);
        partidoS.registrarResultado(1, 2);
        
        partidoS.otorgarPremio(100000);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Tenista&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class Tenista {
    private String nombre;
    private int partidosGanados;
    private double premios;
    
    public Tenista(String nombre, int partidosGanados, double premios){
        this.nombre = nombre;
        this.partidosGanados = partidosGanados;
        this.premios = premios;
    }
    
    public void ganoPartido(){
        this.partidosGanados++;
    }
    
    public void agregarPremio(double premio){
        this.premios = this.premios + premio;
    }
    
    public int getPartidosGanados(){
        return this.partidosGanados;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Partido&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public abstract class Partido {
    private String fecha;
    private String lugar;
    private int lado1;
    private int lado2;
    
    public Partido(String fecha, String lugar){
        this.fecha = fecha;
        this.lugar = lugar;
        this.lado1 = 0;
        this.lado2 = 0;
    }
    
    public void registrarResultado(int lado1, int lado2){
        if (lado1 &gt; lado2) {
            this.lado1++;
        }
        else{
            this.lado2++;
        }
    }
    
    public boolean finalizo(){
        if ((this.lado1 == 3) || (this.lado2 == 3)) {
            return true;
        }
        return false;
    }
    
    abstract public void otorgarPremio(double premio);
    
    public boolean ganoLado1(){
        if (this.lado1 == 3){
            return true;
        }
        return false;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Single&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class Single extends Partido {
    private Tenista t1;
    private Tenista t2;
    
    public Single(String fecha, String lugar,Tenista t1, Tenista t2){
        super(fecha,lugar);
        this.t1 = t1;
        this.t2 = t2;
    }

    @Override
    public void otorgarPremio(double premio) {
        //Suponemos que el partido termino (algun lado tiene 3 sets ganados)
        if (this.ganoLado1()){
            this.t1.ganoPartido();
            this.t1.agregarPremio(premio);
        }
        else{
            this.t2.ganoPartido();
            this.t2.agregarPremio(premio);
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Doble&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class Doble extends Partido {
    Tenista t1E1;
    Tenista t2E1;
    Tenista t1E2;
    Tenista t2E2;
    
    public Doble (String fecha, String lugar, Tenista t1E1, Tenista t2E1, Tenista t1E2, Tenista t2E2){
        super(fecha, lugar);
        this.t1E1 = t1E1;
        this.t2E1 = t2E1;
        this.t1E2 = t1E1;
        this.t2E2 = t1E2;
    }

    public double calcularPremio(int ganadosJ1, int ganadosJ2){
        return (ganadosJ1 / (ganadosJ1 + ganadosJ2));
    }
    @Override
    public void otorgarPremio(double premio) {
        double premio1,premio2 = 0;
        if (this.ganoLado1()){
            premio1 = premio * this.calcularPremio(this.t1E1.getPartidosGanados(), this.t2E1.getPartidosGanados());
            this.t1E1.agregarPremio(premio1);
            premio2 = premio * this.calcularPremio(this.t2E1.getPartidosGanados(), this.t1E1.getPartidosGanados());
            this.t2E1.agregarPremio(premio2);
        }
        else{
            premio1 = premio * this.calcularPremio(this.t1E2.getPartidosGanados(), this.t2E2.getPartidosGanados());
            this.t1E2.agregarPremio(premio1);
            premio2 = premio * this.calcularPremio(this.t2E2.getPartidosGanados(), this.t1E2.getPartidosGanados());
            this.t2E2.agregarPremio(premio2);
        }
    }
}   
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Final Concurrente&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Fabo-University/Taller-de-Programacion/blob/main/r-Info-2.9.jar&quot;&gt;Archivo para programar&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/3bca1075-53a7-4524-955d-bc41ca1af59a&quot; alt=&quot;concurrente&quot;&gt;&lt;/p&gt;
&lt;h3&gt;El programa tiene la siguiente estructura:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;programa NombrePrograma&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;procesos&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;proceso x()&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;areas&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;area1&lt;/strong&gt; : AreaP(5, 1, 5, 10) // Recorre la avenida 5, desde la calle 1 hasta la 10&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;robots&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;robot RECOLECTOR&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;variables&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;R1&lt;/strong&gt; : RECOLECTOR&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;comenzar&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AsignarArea&lt;/strong&gt;(R1, area1)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Iniciar&lt;/strong&gt;(R1, 5, 1)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;fin&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Extraemos los datos del enunciado&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;programa final
procesos
  proceso VaciarBolsa
  comenzar
    mientras (HayFlorEnLaBolsa)
      depositarFlor
    mientras (HayPapelEnLaBolsa)
      depositarPapel
  fin
  proceso recorrerAvenida
  comenzar
    derecha
    mover
    repetir 18
      mover
      si HayFlorEnLaEsquina
        tomarFlor
  fin
  proceso depositarFlores
  variables
    av:numero
    ca:numero
  comenzar
    av:=PosAv
    ca:=PosCa
    mientras HayFlorEnLaBolsa
      BloquearEsquina(1,6)
      Pos(1,6)
      depositarFlor
      Pos(av,ca)
      LiberarEsquina(1,6)
  fin
areas
  area1: AreaP(1,1,20,1)
  area2: AreaP(1,2,20,2)
  area3: AreaP(1,3,20,3)
  area4: AreaP(1,4,20,4)
  area5: AreaP(1,5,1,5)
  areaMulti: AreaPC(1,6,1,6)
robots
  robot TIPO1
  variables
    av:numero
    ca:numero
    id:numero
  comenzar
    RecibirMensaje(id,RF)
    av:=PosAv
    ca:=PosCa
    VaciarBolsa
    recorrerAvenida
    depositarFlores
    EnviarMesanje(id,RF)
    Pos(av,ca)
  fin
  robot FISCALIZADOR
  variables
    idFinal1:numero
    idFinal2:numero
    id:numero
  comenzar
    EnviarMensaje(1,R1)
    EnviarMensaje(2,R2)
    EnviarMensaje(3,R3)
    EnviarMensaje(4,R4)

    RecibirMensaje(idFinal1,*)
    RecibirMensaje(idFinal2,*)
    RecibirMensaje(id,*)
    RecibirMensaje(id,*)

  fin
variables
  R1:TIPO1
  R2:TIPO1
  R3:TIPO1
  R4:TIPO1
  RF:FISCALIZADOR
comenzar
  AsignarArea(R1,area1)
  AsignarArea(R1,areaMulti)
  AsignarArea(R2,area2)
  AsignarArea(R2,areaMulti)
  AsignarArea(R3,area3)
  AsignarArea(R3,areaMulti)
  AsignarArea(R4,area4)
  AsignarArea(R4,areaMulti)
  AsignarArea(RF,area5)
  
  Iniciar(R1,1,1)
  Iniciar(R2,1,2)
  Iniciar(R3,1,3)
  Iniciar(R4,1,4)
  Iniciar(RF,1,5)
fin
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;La primera parte la hice mas o menos asi, para simular cuando lleguen todos, se podria usar un repetir o un recibirMensaje en el fiscalizador 4 veces, para saber que estan todos listos&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Hay varios parciales que son mas faciles en mi github&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Fabo-University/Taller-de-Programacion&quot;&gt;Link&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;Aprobe :D 8&lt;/h3&gt;
&lt;p&gt;En el teorico me preguntaron sobre el recorrido de un arbol de forma optima, que es lo que esta arriba y tambien que tenia mal el codigo de r-info (El robot jefe recibia el id y despues las flores o algo asi).&lt;/p&gt;
&lt;p&gt;Bueno en cuanto a la practica hice tres objetos nada mas, sin herencia ni nada, un objeto &lt;strong&gt;Sistema&lt;/strong&gt; con dos arreglos, uno para partidos y otro para apuestas (Partidos y Apuestas son los otros 2 objetos)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/2bd33ac3-dcc6-4d6f-a465-ff86038e59c0&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.BVsDKnFS.jpg"/><enclosure url="/_astro/thumbnail.BVsDKnFS.jpg"/></item><item><title>Parciales Objetos 1</title><link>https://fabianmartinezrincon.com/blog/final-oo1</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/final-oo1</guid><description>Material con parciales para la materias Orientación a Objetos 1</description><pubDate>Sun, 11 Jun 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Bueno, como primer paso, identificamos todos los objetos, sin los metodos. No hace falta crear el objeto sistema. Con sistema se refiere al conjunto completo de objetos. Una forma de darnos cuenta de que hicimos una buena distribución es que podamos ejecutar todos los metodos desde los test.&lt;/p&gt;
&lt;h2&gt;Primer Parcial&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/fbf0355e-d595-4051-aa45-2c4873033002&quot; alt=&quot;Primer Parcial&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Uml&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/0c17d973-c87d-444e-8fe9-3e31528288bc&quot; alt=&quot;UmpPrimerParcial&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Sistema&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;import java.util.*;
import java.util.stream.Collectors;

public class Sistema {
  private List&amp;#x3C;Contribuyente&gt; contribuyentes = new ArrayList&amp;#x3C;&gt;();

  public void altaContribuyente(Contribuyente c) {
    this.contribuyentes.add(c);
  }

  public List&amp;#x3C;Contribuyente&gt; masPagan(Integer n){
    return this.contribuyentes.stream().limit(n)
      .sorted((ex1, ex2) -&gt; Double.compare (
      ex1.impuestosAPagar(),ex2.impuestosAPagar()
      ))
      .collect(Collectors.toList());
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Contribuyente&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;import java.util.*;

public class Contribuyente {
  private String nombre;
  private String apellido;
  private String email;
  private String localidad;
  private List&amp;#x3C;Bien&gt; bienes = new ArrayList&amp;#x3C;&gt;();

  public Contribuyente(String nombre, String apellido, String email, String localidad) {
    this.nombre=nombre;
    this.apellido=apellido;
    this.email=email;
    this.localidad=localidad;
  }

  public void altaBien(Bien b){
    this.bienes.add(b);
  }
  public double impuestosAPagar() {
    return this.bienes.stream()
      .mapToDouble(bien -&gt; bien.calcularImpuesto())
      .sum();
  }
  }
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Bien&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public interface Bien {
  public double calcularImpuesto();
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Inmueble&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class Inmueble implements Bien{
  private Integer nroPartida;
  private double valorLote;
  private double valorEdificacion;

  public Inmueble(Integer nroPartida, double valorLote, double valorEdificacion) {
    this.nroPartida=nroPartida;
    this.valorLote=valorLote;
    this.valorEdificacion=valorEdificacion;
  }
  @Override
  public double calcularImpuesto() {
    return (this.valorEdificacion + this.valorEdificacion)/100;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Vehiculo&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;import java.time.LocalDate;
import java.time.temporal.ChronoUnit;

  public abstract class Vehiculo implements Bien{
  private String patente;
  private LocalDate fechaFabricacion;
  private double valor;
  private Contribuyente contribuyente;

  public Vehiculo(String patente, LocalDate fechaFabricacion, double valor, Contribuyente c) {
    this.patente=patente;
    this.fechaFabricacion=fechaFabricacion;
    this.valor=valor;
    this.contribuyente=c;
  }
  public int antiguedad() {
    return (int) ChronoUnit.YEARS.between(this.fechaFabricacion, LocalDate.now());
  }

  @Override
  public double calcularImpuesto() {
    if (this.antiguedad() &gt; 10) {
      return this.valor;
    }
    return this.valor + ((this.valor/100)*porcentaje());
  }

  public double getValor() {
    return this.valor;
  }

  abstract public int porcentaje();
  }
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Embarcación&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;import java.time.LocalDate;

  public class Embarcacion extends Vehiculo{
  private String nombre;
  public Embarcacion(String patente, LocalDate fechaFabricacion, double valor, Contribuyente c,String nombre) {
    super(patente, fechaFabricacion, valor, c);
    this.nombre=nombre;
  }
  @Override
  public int porcentaje() {
    if (super.getValor() &amp;#x3C; 1000000) {
      return 10;
    }
    return 15;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Automotor&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;import java.time.LocalDate;

public class Automotor extends Vehiculo{
  public Automotor(String patente, LocalDate fechaFabricacion, double valor, Contribuyente c) {
    super(patente, fechaFabricacion, valor, c);
    this.marca=marca;
    this.modelo=modelo;
  }

  private String marca;
  private String modelo;

  @Override
  public int porcentaje() {
    return 15;
  }
  }
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Test&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;  import static org.junit.jupiter.api.Assertions.assertEquals;

  import java.time.LocalDate;

  import org.junit.jupiter.api.BeforeEach;
  import org.junit.jupiter.api.Test;

  public class VehiculoTest {
  Embarcacion embarcacion;
  Embarcacion embarcacion2;
  Embarcacion embarcacion3;
  Automotor automotor;

  Contribuyente c;
  Sistema sistema;
  LocalDate fecha;
  LocalDate fecha2;

  @BeforeEach
  void setup() throws Exception{
    c = new Contribuyente(&quot;Fabian&quot;, &quot;777&quot;, &quot;fab@gmail.com&quot;, &quot;Los Hornos&quot;);
    sistema = new Sistema();
    sistema.altaContribuyente(c);
    
    fecha = LocalDate.of(2000, 1, 1);
    fecha2 = LocalDate.of(2022, 1, 1);
  }

  @Test
  public void embarcacionTest() {
    embarcacion = new Embarcacion(&quot;1&quot;,fecha, 10, c,&quot;Barquito&quot;);
    embarcacion2 = new Embarcacion(&quot;1&quot;,fecha2, 10, c,&quot;Barquito&quot;);
    embarcacion3 = new Embarcacion(&quot;1&quot;,fecha2, 1000000, c,&quot;Barquito&quot;);
    
    assertEquals(10, embarcacion.calcularImpuesto());
    assertEquals(11, embarcacion2.calcularImpuesto());
    assertEquals(1150000, embarcacion3.calcularImpuesto()); //El valor mas el 15%
  }
  }
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;Primer Recuperatorio&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/10f819b7-d94a-4a01-9e91-3e5ec9312f64&quot; alt=&quot;Primer Recuperatorio&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/53707e77-8c0a-48c6-9ff1-2b0ae6cf0c6a&quot; alt=&quot;umlSegundo&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Sistema&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;import java.util.*;

public class Sistema {
private List&amp;#x3C;Empleado&gt; empleados = new ArrayList&amp;#x3C;&gt;();

public void altaEmpleado(Empleado e) {
  this.empleados.add(e);
}

public Boolean aplicarDescuento(Orden orden) {
  return empleados.stream()
    .anyMatch(empleado -&gt; empleado.tieneOrden12Meses(orden));
}
}

&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Empleado&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;import java.util.*;
import java.util.stream.Collectors;

  public class Empleado {
  private String nombre;
  private double valorHora;
  private List&amp;#x3C;Orden&gt; ordenes = new ArrayList&amp;#x3C;&gt;();

  public Empleado(String nombre, double valorHora) {
    this.nombre=nombre;
    this.valorHora=valorHora;
  }

  public void registrarOrden(Orden o) {
    this.ordenes.add(o);
  }

  public double getValorHora() {
    return this.valorHora;
  }

  public List&amp;#x3C;Factura&gt; facturarOrdenes(List&amp;#x3C;Orden&gt; ordenes ){
    return ordenes.stream()
      .map(orden -&gt; orden.generarFactura())
      .collect(Collectors.toList());
  }

  public Boolean tieneOrden12Meses(Orden o) {
    return this.ordenes.stream()
      .allMatch(orden -&gt; (
        orden.equals(o) &amp;#x26;&amp;#x26; orden.antiguedad() == 1
        ));
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Orden&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.List;

public abstract class Orden {
  private String patente;
  private LocalDateTime fecha = LocalDateTime.now();
  protected List&amp;#x3C;Repuesto&gt; repuestos;

  public Orden(String patente) {
    this.patente=patente;
  }
  public Factura generarFactura() {
    return new Factura(LocalDate.now(),this.patente, this.costoOrden(),getDescuento());
  }

  public double totalRepuesto() {
    return this.repuestos.stream()
    .mapToDouble(repuesto -&gt; repuesto.getCosto())
    .sum();
  }

  public int getDescuento() {
    return 0;
  }

  public int antiguedad() {
    return (int) ChronoUnit.YEARS.between(this.fecha, LocalDateTime.now());
  }
  abstract public double costoOrden();
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Reparación&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;import java.time.LocalTime;
import java.util.*;

public class reparacion extends Orden{
  private String descripcion;
  private List&amp;#x3C;Empleado&gt; empleados = new ArrayList&amp;#x3C;&gt;();
  private Integer horasNecesarias;
  private LocalTime hora;

  public reparacion(String patente, String descripcion, List&amp;#x3C;Empleado&gt; empleados, Integer horasNecesarias) {
    super(patente);
    this.descripcion=descripcion;
    this.empleados=empleados;
    this.horasNecesarias=horasNecesarias;
    this.hora=LocalTime.now();
  }

  public double totalEmpleados() {
    return this.empleados.stream()
        .mapToDouble(empleado -&gt; empleado.getValorHora())
        .sum() * this.horasNecesarias;
  }

  @Override
  public double costoOrden() {
    return (super.totalRepuesto() + this.totalEmpleados()) * 1.1;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Compra De Repuesto&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class CompraDeRepuesto extends Orden {

  public CompraDeRepuesto(String patente) {
    super(patente);
    // TODO Auto-generated constructor stub
  }

  public Boolean aplicarDescuento() {
    return super.repuestos.stream()
        .anyMatch(repuesto -&gt; repuesto.antiguedad()&gt;5);
  }

  public double incremento() {
    if (this.aplicarDescuento()) {
      return 1.08;
    }
    return 1.15;
  }

  @Override
  public double costoOrden() {
    return super.totalRepuesto()*this.incremento();
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Factura&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;import java.time.LocalDate;

public class Factura {
  private LocalDate fecha;
  private String patente;
  private double montoTotal;
  private int descuento;

  public Factura(LocalDate fecha, String patente, double montoTotal, int descuento) {
    this.fecha=fecha;
    this.patente=patente;
    this.montoTotal=montoTotal;
    this.descuento=descuento;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Repuesto&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;import java.time.LocalDate;
import java.time.temporal.ChronoUnit;

public class Repuesto {
  private String nombre;
  private LocalDate fechaFabricacion;
  public double costo;

  public Repuesto(String nombre, LocalDate fechaFabricacion, double costo) {
    this.nombre=nombre;
    this.fechaFabricacion=fechaFabricacion;
    this.costo=costo;
  }

  public double getCosto() {
    return this.costo;
  }

  public int antiguedad() {
    return (int) ChronoUnit.YEARS.between(this.fechaFabricacion, LocalDate.now());
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;Segundo Recuperatorio&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/c2207c29-e8c7-483e-9852-7f0eec6479ad&quot; alt=&quot;Segundo Recuperatorio&quot;&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.D5BEd_Tt.jpg"/><enclosure url="/_astro/thumbnail.D5BEd_Tt.jpg"/></item><item><title>Parciales Ingenieria de Software 1</title><link>https://fabianmartinezrincon.com/blog/parcial-inge1</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/parcial-inge1</guid><description>Historias de Usuario y Casos de uso. Tuve que ir todas las practicas y consultas para poder entender con mejor detalle.</description><pubDate>Sun, 07 May 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Podemos extraer todos los datos de nuestro enunciado de la siguiente forma. Tener en cuenta que los roles y actores son los mismos, solo que en HU no tomamos en cuenta el servidor y los actores que surgen por herencia.
Las HI y CU son las mismas tambien, solo que no tenemos las que interactuan unicamente con el servidor. Ejemplo, validar DNI o Cargar Noticias.&lt;/p&gt;
&lt;p&gt;Tambien podes ver los ejercicios de las practicas en los repositorios de arriba. Sugiero que los intentes hacer por tu cuenta antes de mirar el ejercicio&lt;/p&gt;
&lt;p&gt;Quiero aclarar que estos colores los elegi yo porque a mi me gustaron, no es nada especifico de la catedra&lt;/p&gt;
&lt;p&gt;| Colores Para identificar               | !Color Picker Boxes|
| --- | --- |
| Roles/Actores                          | Yellow Color          |
| Historias de Usuario/Casos de uso      | Orange Color          |
| Datos solicitados o que debe realizar  | Purple Color          |
| Reglas de negocios/Verifica el sistema | Cyan Color              |&lt;/p&gt;
&lt;p&gt;Vamos a extraer los datos del primer y segundo parcial en 2022&lt;/p&gt;
&lt;h2&gt;Primera Fecha&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://user-images.githubusercontent.com/55964635/205096308-5808f9f7-99d8-40d8-82ba-c6a0f3b686e0.jpeg&quot; alt=&quot;Primer Parcial&quot;&gt;&lt;/p&gt;
&lt;p&gt;En el parcial recomiendo empezar con HU y despues CU para extraer todo lo que hace el sistema y no confundirnos.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/e584be28-12fb-4f8f-9811-a3bc7cb31559&quot; alt=&quot;Parcial1&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Roles&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Persona (Usuario no registrado)&lt;/li&gt;
&lt;li&gt;Usuario&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Historias de Usuario Resueltas&lt;/h3&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/MITH-arg/EI-Materias/assets/55964635/b6659366-c65e-4597-9e72-53a0dc6bf640&quot; alt=&quot;Parcial1CU&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Actores&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Persona(Usuario no registrado)&lt;/li&gt;
&lt;li&gt;Usuario&lt;/li&gt;
&lt;li&gt;Otro&lt;/li&gt;
&lt;li&gt;Servidor&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Casos de Uso Resueltos&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Paso alterno 4: Usuario no registrado. Se informa. Vuelve al paso 2. &lt;/li&gt;
&lt;li&gt;Paso alterno 5: Usuario Bloqueado. Se informa. Fin del cu &lt;/li&gt;
&lt;li&gt;Paso alterno 6: Contraseña incorrecta. Se informa y se incrementa en un intento &lt;/li&gt;
&lt;li&gt;Paso alterno 6: Contraseña incorrecta en el intento 3. Se informa y se bloquea la cuenta. Fin del Cu &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Curso Normal: Acciones del actor Acciones del Sistema&lt;/p&gt;
&lt;p&gt;Paso 1: El usuario selecciona la opción &quot;Cerrar Sesión&quot;
Paso 3: El usuario confirma la operación&lt;/p&gt;
&lt;p&gt;Paso 2: El sistema solicita confirmación del usuario
Paso 4: El sistema realiza el cierre de sesión y deshabilita las opciones para el acceso a los detalles&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Paso alterno 3: No acepta la confirmación. Se notifica. Fin del CU&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Curso Normal: Acciones del actor Acciones del Sistema&lt;/p&gt;
&lt;p&gt;Paso 1: El usuario selecciona la opción Acceder detalle&lt;/p&gt;
&lt;p&gt;Paso 2: El sistema valida la cantidad de accesos&lt;/p&gt;
&lt;p&gt;Paso 3: El sistema ejecuta el cu &quot;Recibir Noticias&quot;&lt;/p&gt;
&lt;p&gt;Paso 4: El sistema muestra la noticias e incrementa los accesos del usuario&lt;/p&gt;
&lt;p&gt;Curso Normal: Acciones del actor Acciones del Sistema&lt;/p&gt;
&lt;p&gt;Paso 2: El servidor acepta la conexión y valida el tokem
Paso 3: El servidor retorna un conjunto de noticias&lt;/p&gt;
&lt;p&gt;Paso 1: El sistema solicita conexión con el servidor y envia tokem
Paso 4: El sistema valida noticias recibidas
Paso 5: El sistema muestra las noticias en recibidas en pantalla y cierra la conexión con el servidor&lt;/p&gt;
&lt;h2&gt;Segunda Fecha&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/11623658-f01e-4e9d-92ae-d51ae675036d&quot; alt=&quot;Segundo Parcial&quot;&gt;&lt;/p&gt;
&lt;p&gt;Extraemos los datos como en el parcial anterior, la fotocopia esta super borrosa, pero bueno.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/MITH-arg/EI-Materias/assets/55964635/6ca3655d-ff80-4a9b-b4f9-c0bf44e5cd4a&quot; alt=&quot;Parcial2&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Roles&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Persona (Cliente no registrado)&lt;/li&gt;
&lt;li&gt;Cliente&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Historias de Usuario Resueltas&lt;/h3&gt;
&lt;p&gt;En este parcial hablamos que otro sistema se encarga de liberar la reserva pasadas las 48hs, esto lo pregunte y me dijeron que es una abstracción más y que solo pregunte si esta disponible o no.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/Fabian-Martinez-Rincon/assets/55964635/fbafd933-099b-4ce3-b9f7-b14587d91343&quot; alt=&quot;Parcial2Cu&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Actores&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Persona(Usuario no registrado)&lt;/li&gt;
&lt;li&gt;Usuario&lt;/li&gt;
&lt;li&gt;Otro&lt;/li&gt;
&lt;li&gt;Servidor&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Casos de Uso Resueltos&lt;/h3&gt;
&lt;p&gt;El iniciar sesión y cerrar sesión no se implementan&lt;/p&gt;
&lt;p&gt;Curso Normal: Acciones del actor Acciones del Sistema&lt;/p&gt;
&lt;p&gt;Paso 1: La persona selecciona la opcion &quot;registrar Persona&quot;&lt;/p&gt;
&lt;p&gt;Paso 3: La persona ingresa datos solicitados&lt;/p&gt;
&lt;p&gt;Paso 2: El sistema solicita nombre, apellido, fecha de nacimiento, dni, dirección de correo electronico y contraseña&lt;/p&gt;
&lt;p&gt;Paso 4: El sistema verifica dni no registrado&lt;/p&gt;
&lt;p&gt;Paso 5: El sistema valida que la contraseña no tenga mas de 6 caracteres&lt;/p&gt;
&lt;p&gt;Paso 6: El sistema valida que la persona no tenga mas de 21 años&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Paso alterno 4: dni registrado. Se informa. Fin del cu&lt;/li&gt;
&lt;li&gt;Paso alterno 5: contraseña con menos de 6 caracteres. Se notifica. Vuelve al paso 2.&lt;/li&gt;
&lt;li&gt;Paso alterno 6: persona menor de 21 años. Se informa. Fin del cu&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Curso Normal: Acciones del actor Acciones del Sistema&lt;/p&gt;
&lt;p&gt;Paso 1: Otro selecciona &quot;Pedir Presupuesto&quot;&lt;/p&gt;
&lt;p&gt;Paso 3: Otro ingresa datos solicitados&lt;/p&gt;
&lt;p&gt;Paso 2: El sistema solicita un tipo de carpa, cantidad de personas y fecha del evento.&lt;/p&gt;
&lt;p&gt;Paso 4: El sistema valida que la fecha se encuentre en el año actual&lt;/p&gt;
&lt;p&gt;Paso 5: El sistema valida que la fecha este disponible&lt;/p&gt;
&lt;p&gt;Paso 6: El sistema genera un codigo, imprime el presupuesto y reserva la carpa por 48hs&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Paso alterno 4: La fecha no se encuentra en el año actual. Se notifica. Vuelve al paso 2&lt;/li&gt;
&lt;li&gt;Paso alterno 5: La carpa no esta disponible. Se notifica. Vuelve al paso 2.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Curso Normal: Acciones del actor Acciones del Sistema&lt;/p&gt;
&lt;p&gt;Paso 1: El usuario selecciona la opción &quot;alquilar Carpa&quot;&lt;/p&gt;
&lt;p&gt;Paso 3: El usuario ingresa datos solicitados&lt;/p&gt;
&lt;p&gt;Paso 2: El sistema solicita codigo de presupuesto, dirección y la seña a pagar&lt;/p&gt;
&lt;p&gt;Paso 4: El sistema valida que la seña no sea menor al 50% del monto&lt;/p&gt;
&lt;p&gt;Paso 5: El sistema valida que la seña no sea mayor al 100% del monto&lt;/p&gt;
&lt;p&gt;Paso 6: El sistema ejecuta el cu &quot;Pagar con tarjeta&quot;&lt;/p&gt;
&lt;p&gt;Paso 7: El sistema registra el pago, envia un comprobante con el nro de alquiler y monto restante a pagar al correo&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Paso alterno 4: La seña es menor al 50%. Se informa. Fin del Cu&lt;/li&gt;
&lt;li&gt;Paso alterno 5: La seña es mayor al 100%. Se informa. Fin del Cu&lt;/li&gt;
&lt;li&gt;Paso alterno 6: El pago no se realiza. Se notifica. Fin del CU&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Curso Normal: Acciones del actor Acciones del Sistema&lt;/p&gt;
&lt;p&gt;Paso 1: El usuario selecciona la opción &quot;Pagar resto&quot;&lt;/p&gt;
&lt;p&gt;Paso 3: El usuario ingresa datos solicitados&lt;/p&gt;
&lt;p&gt;Paso 2: El sistema solicita numero de alquiler&lt;/p&gt;
&lt;p&gt;Paso 4: El sistema valida que no se pago el 100% del pago&lt;/p&gt;
&lt;p&gt;Paso 5: El sistema ejecuta el cu &quot;Pagar con tarjeta&quot;&lt;/p&gt;
&lt;p&gt;Paso 6: El sistema registra el pago completo del alquiler&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Paso alterno 1: Ya se pago el 100% del alquiler&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Curso Normal: Acciones del actor Acciones del Sistema&lt;/p&gt;
&lt;p&gt;Paso 2:&lt;/p&gt;
&lt;p&gt;Paso 1:&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.BuaBHjBf.jpg"/><enclosure url="/_astro/thumbnail.BuaBHjBf.jpg"/></item><item><title>Parciales DBD</title><link>https://fabianmartinezrincon.com/blog/dbd-parcial</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/dbd-parcial</guid><description>Parciales practicas de la materia Diseño de Base de Datos</description><pubDate>Sun, 27 Nov 2022 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Conceptual&lt;/h2&gt;
&lt;h3&gt;Parcial Conceptual&lt;/h3&gt;
&lt;p&gt;Diseño de Bases De Datos- Examen práctico- Primer Fecha- Tema 1- 8/11/2022


Importante: Consignar en primer hoja: nombre, apellido, legajo, tema de examen, turno de práctica, temas rendidos y cantidad de hojas entregadas, En restantes hojas poner legajo y nro hoja/total hojas


¿Modelado conceptual - (Tema 1)


Se debe modelar mediante modelo conceptual la información necesaria para un sistema encargado
de las ventas de una papelera.


La papelera cuenta con varios puntos de venta de los cuales se conoce: número único de punto de
venta, dirección detallada, teléfonos y empleados que trabajan en el punto de venta. Un empleado
puede ser repositor, vendedor o administrativo. De todos los empleados se conoce: D.N.I, apellidos,
nombres y C.U.LT. De los repositores se conoce además la edad; de los vendedores se conocen los
títulos, en caso de que posean y de los administrativos se registra el número de pasaporte. Un empleado trabaja en un único punto de venta en un momento determinado pero puede rotar entre los diferentes puntos de venta a lo largo del tiempo. Es necesario conocer el historial de rotaciones
de cada empleado en los diferentes puntos de venta de manera cronológica.


Cada punto de venta tiene información de los productos que comercializa, de cada producto se
registra: precio actual [precio de compra] código de producto (puede repetirse para diferentes puntos
de ventas pero no en el mismo punto de venta)| stock actual] stock mínimo, descripción y ubicación.


Para las ventas es necesario almacenar: nro ticket fiscal, precio total de la venta, fecha de la venta,
iproductos comprados, vendedor que realizó la venta, cliente involucrado y una descripción de la
forma de pago. Si la venta es con tarjeta de crédito es necesario además, guardar la cantidad de
¡cuotas en que se realiza el pago y el interés aplicado. Tenga en cuenta que es posible que en un
futuro se consulte a cuánto se vendió un determinado producto en una venta determinada.


En cambio, para las compras se debe almacenar código único de comprá, fecha, productos
involucrados, precio total y proveedor. Tenga en cuenta que es posible que en un futuro se consulte
a cuánto se compró un determinado producto en una compra X.
De cada proveedor se conoce: razón social, C.U.I.T, posición frente a la afip, nombre de fantasía (puede no tener), dirección
detallada, teléfono y mail.


Por último de los clientes se conoce D.N.I, apellidos, nombres y C.U.1,T. Los empleados de la papelera pueden ser clientes.&lt;/p&gt;
&lt;h4&gt;📚 Contexto Resuelto&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Punto de venta&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;número unico (Identificador)&lt;/li&gt;
&lt;li&gt;dirección detallada&lt;/li&gt;
&lt;li&gt;(0,n) teléfonos&lt;/li&gt;
&lt;li&gt;1,n &amp;#x3C;trabaja&gt; empleados&lt;/li&gt;
&lt;li&gt;1,n &amp;#x3C;tiene&gt; productos&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Persona&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;D.N.I&lt;/li&gt;
&lt;li&gt;apellidos&lt;/li&gt;
&lt;li&gt;nombres&lt;/li&gt;
&lt;li&gt;C.U.I.T&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cliente&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Empleado&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;+repositor
&lt;ul&gt;
&lt;li&gt;edad&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;+vendedor
&lt;ul&gt;
&lt;li&gt;(0,n) titulos&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;+administrativo
&lt;ul&gt;
&lt;li&gt;nroPasaporte&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;#x3C;trabaja&gt; 1,1 punto de venta&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;#x3C;trabaja&gt;&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;FechaInicio&lt;/li&gt;
&lt;li&gt;(0,1) FechaFin&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Producto&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;precio actual&lt;/li&gt;
&lt;li&gt;precio de compra&lt;/li&gt;
&lt;li&gt;código de producto (puede repetirse para diferentes puntos de ventas pero no en el mismo punto de venta) &amp;#x3C;idExterno&gt;&lt;/li&gt;
&lt;li&gt;stock actual&lt;/li&gt;
&lt;li&gt;stock mínimo&lt;/li&gt;
&lt;li&gt;descripción&lt;/li&gt;
&lt;li&gt;ubicación.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Venta&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;nro ticket fiscal (Identificador)&lt;/li&gt;
&lt;li&gt;precio total de la venta&lt;/li&gt;
&lt;li&gt;fecha de la venta&lt;/li&gt;
&lt;li&gt; 1,n productos comprados&lt;/li&gt;
&lt;li&gt; 1,1 vendedor que realizó la venta
&lt;ul&gt;
&lt;li&gt;Fecha&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt; 1,1 cliente involucrado&lt;/li&gt;
&lt;li&gt;descripción forma de pago&lt;/li&gt;
&lt;li&gt;(0, 1) cantidad de cuotas&lt;/li&gt;
&lt;li&gt;(0, 1) interés aplicado&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compra&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;código único de comprá&lt;/li&gt;
&lt;li&gt;fecha&lt;/li&gt;
&lt;li&gt;&amp;#x3C;compro&gt; productos involucrados
&lt;ul&gt;
&lt;li&gt;Precio Compra&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;precio total&lt;/li&gt;
&lt;li&gt;(1, 1)  proveedor&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;proveedor&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;razón social (identificador)&lt;/li&gt;
&lt;li&gt;C.U.I.T (identificador)&lt;/li&gt;
&lt;li&gt;posición frente a la afip&lt;/li&gt;
&lt;li&gt;(0, 1) nombre de fantasía (puede no tener)&lt;/li&gt;
&lt;li&gt;dirección detallada&lt;/li&gt;
&lt;li&gt;teléfono&lt;/li&gt;
&lt;li&gt;mail&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Logico|Fisico&lt;/h2&gt;
&lt;h3&gt;Logico&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Solo en (T,E) se puede dejar solo a los hijos, en el resto se puede realizar cualquier opearción.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Fisico Entidades&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Los atributos son siempre propios&lt;/li&gt;
&lt;li&gt;(0, 1) Solo subrayas el id propio (no importa el caso)&lt;/li&gt;
&lt;li&gt;(1, 1)
&lt;ul&gt;
&lt;li&gt;(0, 1) Forkeas el identificador y subrayas el id propio&lt;/li&gt;
&lt;li&gt;(1, 1) Lo de arriba pero se puede hacer para uno de los dos lados&lt;/li&gt;
&lt;li&gt;(1, n) Forkeas el identificador y subrayas el id propio&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;(0, n) - Solo subrayas el id propio (no importa el caso)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Fisico Relaciones&lt;/h3&gt;
&lt;p&gt;Cuando hablamos de (0, n), hablamos de las dos formas (0, n) y (1, n)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Se generan cuando hay (0, 1) o (0, n) de cualquier lado&lt;/li&gt;
&lt;li&gt;(0, 1)
&lt;ul&gt;
&lt;li&gt;(0, 1) Junto los dos identificadores y subrayo cualquiera de los dos&lt;/li&gt;
&lt;li&gt;(0, n) Junto los dos identificadores y subrayo el id del lado del (0, 1)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;(0, n), (0, n) Junto los dos identificadores y los subrayo los dos (dependiendo del dominio, puedo subrayar el atributo de la relación o no como en el caso del historial)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Parcial&lt;/h3&gt;
&lt;h3&gt;Parcial Logico&lt;/h3&gt;
&lt;p&gt;Tramos y posee tiene relacion (1, 1)&lt;/p&gt;
&lt;h3&gt;Parcial Fisico&lt;/h3&gt;
&lt;h4&gt;Entidades&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Telefono&lt;/strong&gt; = (&lt;code&gt;nro&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Persona&lt;/strong&gt; = (&lt;code&gt;Dni&lt;/code&gt;, fk(nombre, distancia), Ny Ap, Dirección, Tipo, Antecedentes Medicos?)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mail&lt;/strong&gt; = (&lt;code&gt;mail&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tramos&lt;/strong&gt; = (&lt;code&gt;Distancia, fk(nombre)&lt;/code&gt;, Recaudado)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Carrera&lt;/strong&gt; = (&lt;code&gt;nombre&lt;/code&gt;, Dir Fin, Dia Comienzo)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Relaciones&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Llega&lt;/strong&gt; = (&lt;code&gt;Dni&lt;/code&gt;, nombre, Distancia, puesto)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tiene&lt;/strong&gt; = (&lt;code&gt;nro, dni&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tiene2&lt;/strong&gt; = (&lt;code&gt;mail, dni&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Algebra y Sql&lt;/h2&gt;
&lt;h3&gt;Algebra Relacional Operaciones importantes&lt;/h3&gt;
&lt;h3&gt;Parcial Algebra y Sql&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SOCIO=&lt;/strong&gt;(&lt;code&gt;nro_socio&lt;/code&gt;, DNI, Apellido, Nombre, Fecha_Nacimiento, Fecha_ingreso)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LIBRO=&lt;/strong&gt;(&lt;code&gt;ISBN&lt;/code&gt;, Titulo, Cod_Genero, Descripcion)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;COPIA=&lt;/strong&gt;(&lt;code&gt;ISBN(FK), Nro_Ejemplar&lt;/code&gt;, Estado)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;EDITORIAL=&lt;/strong&gt;(&lt;code&gt;Cod_Editorial&lt;/code&gt;, Denominación, Telefono, Calle, Numero, Piso, Dpto)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LIBRO-EDITORIAL=&lt;/strong&gt;(&lt;code&gt;ISBN(FK), Cod_Editorial(FK), Año_Edicion&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GENERO=&lt;/strong&gt;(&lt;code&gt;Cod_Genero&lt;/code&gt;, Nombre_genero)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PRESTAMO=&lt;/strong&gt; (&lt;code&gt;Nro_Prestamo&lt;/code&gt;, nro_Socio(FK), ISBN(FK), Nro_Ejemplar(FK), Fecha_Prestamo, Fecha_Devolucion)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ISBN(FK) y Nro_Ejemplar son foraneas de copia&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;1)&lt;/code&gt; Listar el titulo, género (el Nombre del Género) y descripción de aquellos libros editados por la editorial &quot;Nueva Editorial&quot;. Dicho listado deberá estar ordenado por titulo.
&lt;pre&gt;&lt;code&gt;Select Distinct (L.Titulo, G.Nombre_genero, L.Descripcion)
from LIBRO L 
    INNER JOIN LIBRO-EDITORIAL LE (L.ISBN = LE.ISBN)
    INNER JOIN EDITORIAL E (LE.Cod_Editorial = E.Cod_Editorial)
    INNER JOIN GENERO G (L.Cod_Genero = G.Cod_Genero)
where (E.Denominacion = Nueva Editorial)
ORDER BY T.Titulo
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;2)&lt;/code&gt; Listar el apellido y nombre de aquellos socios cuya fecha de ingreso esté entre el 01/9/2022 y el 30/09/2022. Dicho listado debera estar ordenado por apellido y nombre.
&lt;pre&gt;&lt;code&gt;Select s.Apellido, Nombre
from SOCIO s
WHERE (s.Fecha_ingreso BETWEEN &quot;01-9-2022&quot; and &quot;30-09-2022&quot;)
ORDER BY s.Apellido, s.Nombre
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;3)&lt;/code&gt; Listar el nombre, apellido, fecha de Nacimiento y cantidad de prestamos de aquellos socios que hayan solicitado más de 5 prestamos. Dicho listado deberá estar ordenado por Apellido.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;    Select s.Nombre, s.Apellido, Fecha_Nacimiento, CONT(*)
    from SOCIO s
        INNER JOIN PRESTAMO P()
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;4)&lt;/code&gt; Listar el DNI, apellido, y nombre de aquellos socios que no tengan préstamos de libros editados por la editorial &quot;Gran Editorial&quot;. Dicho listado deberá estar ordenado por Apellido y Nombre&lt;/li&gt;
&lt;li&gt;&lt;code&gt;5)&lt;/code&gt; Mostrar que cantidad de socios tienen actualmente libros prestados cuyo estado sea &quot;Bueno&quot;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;6)&lt;/code&gt; Listar el titulo, genero, denominación de la editorial y año de edición de aquellos libros editados entre los años 1980 y 2015.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resultado&lt;/strong&gt;
GENERO, LIBRO, LIBRO-EDITORIAL, EDITORIAL
&lt;pre&gt;&lt;code&gt;π Titulo, Nombre_genero , Denominación, Año_Edicion(
    GENERO ⨝ LIBRO ⨝ (
        σ Año_Edicion &gt;= &apos;01-1-1980&apos; ʌ Año_Edicion &amp;#x3C;= &apos;01-1-2015&apos; 
        (LIBRO-EDITORIAL)
    )
    ⨝
    EDITORIAL
    )
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;7)&lt;/code&gt; Agregar un nuevo socio con el nro_socio, DNI, Apellido, Nombre y Fecha de nacimiento que prefiera.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resultado&lt;/strong&gt;
&lt;pre&gt;&lt;code&gt;SOCIO &amp;#x3C;= SOCIO ∪ {(1234, 777, &quot;Rey&quot;, &quot;Vegeta&quot;, 1-1-2000, 1-1-2022)}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;8)&lt;/code&gt; Modificar el titulo del libro cuyo ISBN es 2152-2020 por el titulo &quot;El Código X&quot;
&lt;pre&gt;&lt;code&gt;δTITULO &amp;#x3C;= &apos;El codigo x&apos; (σ ISBN = 2152-2020 (Libro))
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://gist.github.com/miporto/01d443e83269c555baa435cf48eaaf76&quot;&gt;Algunas operaciones de Algebra Relacional&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><h:img src="/_astro/thumbnail.yYhAdD0m.jpg"/><enclosure url="/_astro/thumbnail.yYhAdD0m.jpg"/></item><item><title>Final Organización de Computadoras</title><link>https://fabianmartinezrincon.com/blog/final-oc</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/final-oc</guid><description>Material para el final de la materia Organizazción de Computadoras</description><pubDate>Fri, 15 Jul 2022 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Final&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;⚠️ Las Algunas preguntas estan hechas bajo mi criterio, pueden estar mal, si detectan que algo esta mal, no duden en contactarme por mail:fabianmartinezrincon.123@gmail.com o por discord: fabomartinez&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;Indice&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#finales-echos-por-mi&quot;&gt;Finales Echos por mi&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#final-1&quot;&gt;Final 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#final-2-08-22&quot;&gt;Final 2 08-22&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#final-3-sin-fecha&quot;&gt;Final 3 sin fecha&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#final-4-11-22&quot;&gt;Final 4 11-22&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#final-5-mesa-febrero-2%C2%BA-llamado--21022022&quot;&gt;Final 5 Mesa febrero 2º llamado | 21/02/2022&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#final-6-febrero-2022-1era-fecha&quot;&gt;Final 6 FEBRERO 2022 1ERA FECHA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#final-7-organizaci%C3%B3n-de-computadoras-08-23&quot;&gt;Final 7 Organización de Computadoras 08-23&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#final-8---abril-2023-1004&quot;&gt;Final 8 - Abril 2023 (10/04)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#final-9-organizaci%C3%B3n-de-computadoras-23-feb1&quot;&gt;Final 9 Organización de Computadoras 23-Feb1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#final-10-feb20b&quot;&gt;Final 10 Feb20b&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#final-11-octubre-del-2023&quot;&gt;Final 11 Octubre del 2023&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#final-12-23dicb&quot;&gt;Final 12 23Dicb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#final-13-febrero-2022-1era-fecha&quot;&gt;Final 13 FEBRERO 2022 1ERA FECHA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#final-14-08-23&quot;&gt;Final 14 08-23&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#final-15-11-22&quot;&gt;Final 15 11-22&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#final-16-04-24&quot;&gt;Final 16 04-24&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#final-17-abr23&quot;&gt;Final 17&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#final-18-5-23&quot;&gt;Final 18&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#final-19&quot;&gt;Final 19&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#final-20-08-22&quot;&gt;Final 20&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#final-21-09-22&quot;&gt;Final 21&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#otros-finales-resueltos&quot;&gt;Otros Finales Resueltos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejemplos&quot;&gt;Ejemplos de youtube&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#numeros-en-punto-flotante&quot;&gt;Punto Flotante&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;Practica 1&lt;/h3&gt;
&lt;h3&gt;Ejercicio 1&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/32794443-4aae-4f72-9ed2-d137e8f0fe26&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Vamos a añadir el sistema &lt;strong&gt;Ex2&lt;/strong&gt; a las representaciones. En el sistema Ex2, sumamos un exceso de (2^{n-1}) (en 8 bits, el exceso es 128) antes de representar el número en binario.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;0&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;: &lt;code&gt;00000000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;: &lt;code&gt;00000000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca1&lt;/strong&gt;: &lt;code&gt;00000000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca2&lt;/strong&gt;: &lt;code&gt;00000000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ex2&lt;/strong&gt;: &lt;code&gt;10000000&lt;/code&gt; (0 + 128)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;1&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;: &lt;code&gt;00000001&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;: &lt;code&gt;00000001&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca1&lt;/strong&gt;: &lt;code&gt;00000001&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca2&lt;/strong&gt;: &lt;code&gt;00000001&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ex2&lt;/strong&gt;: &lt;code&gt;10000001&lt;/code&gt; (1 + 128)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;127&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;: &lt;code&gt;01111111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;: &lt;code&gt;01111111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca1&lt;/strong&gt;: &lt;code&gt;01111111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca2&lt;/strong&gt;: &lt;code&gt;01111111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ex2&lt;/strong&gt;: &lt;code&gt;11111111&lt;/code&gt; (127 + 128)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;128&lt;/strong&gt;: //Este esta mal&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;: No se puede representar, ya que el rango es de 0 a 255.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;: No se puede representar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca1&lt;/strong&gt;: No se puede representar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca2&lt;/strong&gt;: No se puede representar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ex2&lt;/strong&gt;: &lt;code&gt;00000000&lt;/code&gt; (128 + 128 = 256, pero en 8 bits es &lt;code&gt;00000000&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;255&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;: &lt;code&gt;11111111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;: No se puede representar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca1&lt;/strong&gt;: No se puede representar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca2&lt;/strong&gt;: No se puede representar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ex2&lt;/strong&gt;: &lt;code&gt;01111111&lt;/code&gt; (255 + 128 = 383, pero en 8 bits es &lt;code&gt;01111111&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;256&lt;/strong&gt;: No se puede representar en ninguno de los sistemas de 8 bits.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;: No se puede representar&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;: No se puede representar&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca1&lt;/strong&gt;: No se puede representar&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca2&lt;/strong&gt;: No se puede representar&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ex2&lt;/strong&gt;: No se puede representar&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;-1&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;: No se puede representar&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;: &lt;code&gt;11111111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca1&lt;/strong&gt;: &lt;code&gt;11111110&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca2&lt;/strong&gt;: &lt;code&gt;11111111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ex2&lt;/strong&gt;: &lt;code&gt;01111111&lt;/code&gt; (-1 + 128)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;-7&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;: No se puede representar&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;: &lt;code&gt;11111001&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca1&lt;/strong&gt;: &lt;code&gt;11111000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca2&lt;/strong&gt;: &lt;code&gt;11111001&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ex2&lt;/strong&gt;: &lt;code&gt;01111001&lt;/code&gt; (-7 + 128)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;-127&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;: No se puede representar&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;: &lt;code&gt;10000001&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca1&lt;/strong&gt;: &lt;code&gt;10000000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca2&lt;/strong&gt;: &lt;code&gt;10000001&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ex2&lt;/strong&gt;: &lt;code&gt;00000001&lt;/code&gt; (-127 + 128)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;-128&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;: No se puede representar&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;: &lt;code&gt;10000000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca1&lt;/strong&gt;: &lt;code&gt;01111111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca2&lt;/strong&gt;: &lt;code&gt;10000000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ex2&lt;/strong&gt;: &lt;code&gt;00000000&lt;/code&gt; (-128 + 128)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;-139&lt;/strong&gt;: No se puede representar en ninguno de los sistemas de 8 bits.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;: No se puede representar&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;: No se puede representar&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca1&lt;/strong&gt;: No se puede representar&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca2&lt;/strong&gt;: No se puede representar&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ex2&lt;/strong&gt;: No se puede representar&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;-56&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;: No se puede representar&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;: &lt;code&gt;11001000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca1&lt;/strong&gt;: &lt;code&gt;10110111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca2&lt;/strong&gt;: &lt;code&gt;10111000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ex2&lt;/strong&gt;: &lt;code&gt;01001000&lt;/code&gt; (-56 + 128)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;130&lt;/strong&gt;: No se puede representar en BCS, Ca1, ni Ca2 porque el rango permitido es de -128 a 127.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;: &lt;code&gt;10000010&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;: No se puede representar&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca1&lt;/strong&gt;: No se puede representar&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca2&lt;/strong&gt;: No se puede representar&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ex2&lt;/strong&gt;: &lt;code&gt;10000010&lt;/code&gt; (130 + 128 = 258, pero en 8 bits es &lt;code&gt;00000010&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;45&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;: &lt;code&gt;00101101&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;: &lt;code&gt;00101101&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca1&lt;/strong&gt;: &lt;code&gt;00101101&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca2&lt;/strong&gt;: &lt;code&gt;00101101&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ex2&lt;/strong&gt;: &lt;code&gt;10101101&lt;/code&gt; (45 + 128)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;90&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;: &lt;code&gt;01011010&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;: &lt;code&gt;01011010&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca1&lt;/strong&gt;: &lt;code&gt;01011010&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca2&lt;/strong&gt;: &lt;code&gt;01011010&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ex2&lt;/strong&gt;: &lt;code&gt;11011010&lt;/code&gt; (90 + 128)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;-90&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;: No se puede representar&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;: &lt;code&gt;10100110&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca1&lt;/strong&gt;: &lt;code&gt;01011001&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca2&lt;/strong&gt;: &lt;code&gt;01011010&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ex2&lt;/strong&gt;: &lt;code&gt;00100110&lt;/code&gt; (-90 + 128)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;0.75 y 2.5&lt;/strong&gt;: No se pueden representar en sistemas enteros de 8 bits.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ejemplo de Bogado&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/3524dcb2-11ea-4c8c-b7c3-ea6291dbddae&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/user-attachments/assets/dc7f7380-4126-4e88-914c-4a7cf68055cd&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Ejercicio 2&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/df84948f-6ea0-47d0-bb1e-42179e115c68&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Para interpretar las cadenas de 8 bits en los sistemas BSS, BCS, Ca1, Ca2 y Ex2, vamos a analizar cada cadena por separado en cada sistema:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;00000000&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;: 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;: 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca1&lt;/strong&gt;: 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca2&lt;/strong&gt;: 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ex2&lt;/strong&gt;: (0 - 128 = -128)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;00000001&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;: 1&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;: 1&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca1&lt;/strong&gt;: 1&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca2&lt;/strong&gt;: 1&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ex2&lt;/strong&gt;: (1 - 128 = -127)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;11111110&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;: No se puede representar (número negativo en BSS)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;: -126&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca1&lt;/strong&gt;: -1 (invertir bits de 00000001 que es 1)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca2&lt;/strong&gt;: -2 (invertir bits de 00000001 que es 1 y sumar 1)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ex2&lt;/strong&gt;: (254 - 128 = 126)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;01111111&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;: 127&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;: 127&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca1&lt;/strong&gt;: 127&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca2&lt;/strong&gt;: 127&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ex2&lt;/strong&gt;: (127 - 128 = -1)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;11111111&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;: No se puede representar (número negativo en BSS)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;: -127&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca1&lt;/strong&gt;: -0 (invertir bits de 00000000 que es 0)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca2&lt;/strong&gt;: -1 (invertir bits de 00000000 que es 0 y sumar 1)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ex2&lt;/strong&gt;: (255 - 128 = 127)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;00010001&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;: 17&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;: 17&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca1&lt;/strong&gt;: 17&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca2&lt;/strong&gt;: 17&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ex2&lt;/strong&gt;: (17 - 128 = -111)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;10011001&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;: No se puede representar (número negativo en BSS)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;: -25&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca1&lt;/strong&gt;: -102 (invertir bits de 01100110 que es 102)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca2&lt;/strong&gt;: -103 (invertir bits de 01100110 que es 102 y sumar 1)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ex2&lt;/strong&gt;: (153 - 128 = 25)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;10101010&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;: No se puede representar (número negativo en BSS)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;: -86&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca1&lt;/strong&gt;: -85 (invertir bits de 01010101 que es 85)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca2&lt;/strong&gt;: -86 (invertir bits de 01010100 que es 85 y sumar 1)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ex2&lt;/strong&gt;: (170 - 128 = 42)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;01100110&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;: 102&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;: 102&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca1&lt;/strong&gt;: 102&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca2&lt;/strong&gt;: 102&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ex2&lt;/strong&gt;: (102 - 128 = -26)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Resumen de los resultados:&lt;/h4&gt;
&lt;p&gt;| Cadena     | BSS       | BCS  | Ca1  | Ca2  | Ex2    |
|------------|-----------|------|------|------|--------|
| 00000000   | 0         | 0    | 0    | 0    | -128   |
| 00000001   | 1         | 1    | 1    | 1    | -127   |
| 11111110   | 254 | -126 | -1   | -2   | 126    |
| 01111111   | 127       | 127  | 127  | 127  | -1     |
| 11111111   | 255 | -127 | -0   | -1   | 127    |
| 00010001   | 17        | 17   | 17   | 17   | -111   |
| 10011001   | 153 | -25  | -102 | -103 | 25     |
| 10101010   | 170 | -86  | -85  | -86  | 42     |
| 01100110   | 102       | 102  | 102  | 102  | -26    |&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/754f0570-f2c7-4232-b3b7-7b4a6afec1bb&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Ejercicio 3&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/680b8037-b8e0-478d-b37f-c9a69d5e9e5f&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/98828090-8176-463a-a107-e4d148a76504&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/user-attachments/assets/d81fe7ec-8fc1-4079-a274-188d84568d45&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/user-attachments/assets/a3175e4b-a336-4aff-bbec-54b4f0a94967&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/user-attachments/assets/e75b277f-a587-43b6-bdfb-daa9424ea832&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 4&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/662416d2-8e3a-4bce-9466-6247c6b92300&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Vamos a representar los números dados en los sistemas de punto fijo del ejercicio 3 y, si no es posible obtener una representación exacta, indicaremos cuál es la más próxima y calcularemos el error cometido. Si el número está fuera del rango del sistema, lo señalaremos.&lt;/p&gt;
&lt;h4&gt;Sistema de punto fijo en BSS (7 bits de parte entera y 3 bits de parte fraccionaria)&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/65334c81-1ca8-415d-a05a-cddf2aa5cfd8&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;7&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Representación: 7&lt;/li&gt;
&lt;li&gt;Error: 0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;15.125&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Representación: 15.125&lt;/li&gt;
&lt;li&gt;Error: 0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;2.2&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Más próxima: 2.25&lt;/li&gt;
&lt;li&gt;Error: (2.25 - 2.2 = 0.05)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;8.001&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Más próxima: 8&lt;/li&gt;
&lt;li&gt;Error: (8 - 8.001 = -0.001)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;123.25&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Representación: 123.25&lt;/li&gt;
&lt;li&gt;Error: 0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;50.50&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Más próxima: 50.5&lt;/li&gt;
&lt;li&gt;Error: 0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;120&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Representación: 120&lt;/li&gt;
&lt;li&gt;Error: 0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;1.2&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Más próxima: 1.25&lt;/li&gt;
&lt;li&gt;Error: (1.25 - 1.2 = 0.05)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;1.25&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Representación: 1.25&lt;/li&gt;
&lt;li&gt;Error: 0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;35&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Representación: 35&lt;/li&gt;
&lt;li&gt;Error: 0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;-1.25&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No se puede representar (fuera del rango)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;1.0625&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Más próxima: 1.125&lt;/li&gt;
&lt;li&gt;Error: (1.125 - 1.0625 = 0.0625)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;-1.5625&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No se puede representar (fuera del rango)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;-35.5&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No se puede representar (fuera del rango)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Sistema de punto fijo en BCS (1 bit de signo, 5 bits de parte entera y 4 bits de parte fraccionaria)&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/1654ecc6-c9c7-4fe8-bca1-07998857d06b&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;7&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Representación: 7&lt;/li&gt;
&lt;li&gt;Error: 0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;15.125&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Representación: 15.125&lt;/li&gt;
&lt;li&gt;Error: 0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;2.2&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Más próxima: 2.1875&lt;/li&gt;
&lt;li&gt;Error: (2.2 - 2.1875 = 0.0125)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;8.001&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Más próxima: 8&lt;/li&gt;
&lt;li&gt;Error: (8 - 8.001 = -0.001)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;123.25&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No se puede representar (fuera del rango)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;50.50&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No se puede representar (fuera del rango)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;120&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No se puede representar (fuera del rango)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;1.2&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Más próxima: 1.1875&lt;/li&gt;
&lt;li&gt;Error: (1.2 - 1.1875 = 0.0125)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;1.25&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Representación: 1.25&lt;/li&gt;
&lt;li&gt;Error: 0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;35&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No se puede representar (fuera del rango)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;-1.25&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Representación: -1.25&lt;/li&gt;
&lt;li&gt;Error: 0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;1.0625&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Representación: 1.0625&lt;/li&gt;
&lt;li&gt;Error: 0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;-1.5625&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Representación: -1.5625&lt;/li&gt;
&lt;li&gt;Error: 0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;-35.5&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No se puede representar (fuera del rango)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Resumen&lt;/h4&gt;
&lt;p&gt;| Número   | BSS Representación | Error BSS | BCS Representación | Error BCS |   |
|----------|--------------------|-----------|--------------------|-----------|---|
| 7        | 7                  | 0         | 7                  | 0         |   |
| 15.125   | 15.125             | 0         | 15.125             | 0         |   |
| 2.2      | 2.25               | 0.05      | 2.1875             | 0.0125    |   |
| 8.001    | 8                  | -0.001    | 8                  | -0.001    |   |
| 123.25   | 123.25             | 0         | No se puede representar | -       |   |
| 50.50    | 50.5               | 0         | No se puede representar | -       |   |
| 120      | 120                | 0         | No se puede representar | -       |   |
| 1.2      | 1.25               | 0.05      | 1.1875             | 0.0125    |   |
| 1.25     | 1.25               | 0         | 1.25               | 0         |   |
| 35       | 35                 | 0         | No se puede representar | -       |   |
| -1.25    | No se puede representar | -       | -1.25              | 0         |   |
| 1.0625   | 1.125              | 0.0625    | 1.0625             | 0         |   |
| -1.5625  | No se puede representar | -       | -1.5625            | 0         |   |
| -35.5    | No se puede representar | -       | No se puede representar | -       |   |&lt;/p&gt;
&lt;p&gt;Con esto, hemos representado los números en los sistemas de punto fijo de acuerdo a las restricciones y características mencionadas en el ejercicio 3.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/ffa7b418-cbb6-4e50-8e69-0ad721a48b5f&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/user-attachments/assets/954f9e08-73db-4515-941a-6048c6e4aa7f&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 5&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/186fb92b-7c4e-452f-801c-abac779dda3e&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/618bac08-61d9-446e-b15d-872564f2e22c&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Interpretación de las cadenas&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;00000000&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Parte entera: 0000000 (0)&lt;/li&gt;
&lt;li&gt;Parte fraccionaria: 000 (0)&lt;/li&gt;
&lt;li&gt;Valor: 0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Bit de signo: 0 (positivo)&lt;/li&gt;
&lt;li&gt;Parte entera: 00000 (0)&lt;/li&gt;
&lt;li&gt;Parte fraccionaria: 0000 (0)&lt;/li&gt;
&lt;li&gt;Valor: 0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;01010101&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Parte entera: 0101010 (42)&lt;/li&gt;
&lt;li&gt;Parte fraccionaria: 101 (0.625)&lt;/li&gt;
&lt;li&gt;Valor: 42.625&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Bit de signo: 0 (positivo)&lt;/li&gt;
&lt;li&gt;Parte entera: 10101 (21)&lt;/li&gt;
&lt;li&gt;Parte fraccionaria: 0101 (0.3125)&lt;/li&gt;
&lt;li&gt;Valor: 21.3125&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;10000000&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Parte entera: 1000000 (64)&lt;/li&gt;
&lt;li&gt;Parte fraccionaria: 000 (0)&lt;/li&gt;
&lt;li&gt;Valor: 64&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Bit de signo: 1 (negativo)&lt;/li&gt;
&lt;li&gt;Parte entera: 00000 (0)&lt;/li&gt;
&lt;li&gt;Parte fraccionaria: 0000 (0)&lt;/li&gt;
&lt;li&gt;Valor: -16&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;11111110&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Parte entera: 1111111 (127)&lt;/li&gt;
&lt;li&gt;Parte fraccionaria: 110 (0.75)&lt;/li&gt;
&lt;li&gt;Valor: 127.75&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Bit de signo: 1 (negativo)&lt;/li&gt;
&lt;li&gt;Parte entera: 11111 (31)&lt;/li&gt;
&lt;li&gt;Parte fraccionaria: 1110 (0.9375)&lt;/li&gt;
&lt;li&gt;Valor: -0.0625&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;11111111&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Parte entera: 1111111 (127)&lt;/li&gt;
&lt;li&gt;Parte fraccionaria: 111 (0.875)&lt;/li&gt;
&lt;li&gt;Valor: 127.875&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Bit de signo: 1 (negativo)&lt;/li&gt;
&lt;li&gt;Parte entera: 11111 (31)&lt;/li&gt;
&lt;li&gt;Parte fraccionaria: 1111 (0.9375)&lt;/li&gt;
&lt;li&gt;Valor: -0.0625&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;10101010&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Parte entera: 1010101 (85)&lt;/li&gt;
&lt;li&gt;Parte fraccionaria: 010 (0.25)&lt;/li&gt;
&lt;li&gt;Valor: 85.25&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Bit de signo: 1 (negativo)&lt;/li&gt;
&lt;li&gt;Parte entera: 01010 (10)&lt;/li&gt;
&lt;li&gt;Parte fraccionaria: 1010 (0.625)&lt;/li&gt;
&lt;li&gt;Valor: -5.375&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;01111111&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Parte entera: 0111111 (63)&lt;/li&gt;
&lt;li&gt;Parte fraccionaria: 111 (0.875)&lt;/li&gt;
&lt;li&gt;Valor: 63.875&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Bit de signo: 0 (positivo)&lt;/li&gt;
&lt;li&gt;Parte entera: 11111 (31)&lt;/li&gt;
&lt;li&gt;Parte fraccionaria: 1111 (0.9375)&lt;/li&gt;
&lt;li&gt;Valor: 31.9375&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;01101101&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BSS&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Parte entera: 0110110 (54)&lt;/li&gt;
&lt;li&gt;Parte fraccionaria: 110 (0.75)&lt;/li&gt;
&lt;li&gt;Valor: 54.75&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCS&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Bit de signo: 0 (positivo)&lt;/li&gt;
&lt;li&gt;Parte entera: 11011 (27)&lt;/li&gt;
&lt;li&gt;Parte fraccionaria: 0110 (0.375)&lt;/li&gt;
&lt;li&gt;Valor: 27.375&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Resumen de los resultados:&lt;/h4&gt;
&lt;p&gt;| Cadena     | BSS       | BCS        |
|------------|-----------|------------|
| 00000000   | 0         | 0          |
| 01010101   | 42.625    | 21.3125    |
| 10000000   | 64        | -16        |
| 11111110   | 127.75    | -0.0625    |
| 11111111   | 127.875   | -0.0625    |
| 10101010   | 85.25     | -5.375     |
| 01111111   | 63.875    | 31.9375    |
| 01101101   | 54.75     | 27.375     |&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 6&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/746d5cc9-c945-4646-9acc-19bfa23ed521&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=UUyhf9xzahI&quot;&gt;Link de la clase&lt;/a&gt;
&lt;a href=&quot;https://www.youtube.com/watch?v=ncCl3qNUMPU&quot;&gt;Link de la clase&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Ejemplo de Como deberia Ser&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/fe58b04f-7061-46e3-94dc-7f3e0550e8c1&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/user-attachments/assets/cd7fdcc3-5973-449e-bf9f-e9e9a28c837a&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/user-attachments/assets/288b308c-82e2-4e20-91c9-ce9a516b0928&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/user-attachments/assets/de2904f2-907d-4a74-ac44-39b22641c952&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/user-attachments/assets/a14ad105-142f-4c19-b2c5-554f0195caac&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/user-attachments/assets/e4e11917-8a88-4149-bd8d-bb2c3fed1d6d&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Vamos a revisar las sumas en BCD desempaquetado y empaquetado según los ejemplos proporcionados.&lt;/p&gt;
&lt;h4&gt;Números a representar:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;0, 1, 3, 8, 12, 13, 22, 35, 99, 100, 1255&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;BCD desempaquetado (cada dígito decimal utiliza 1 byte)&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;0&lt;/strong&gt;: &lt;code&gt;0000 0000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1&lt;/strong&gt;: &lt;code&gt;0000 0001&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;3&lt;/strong&gt;: &lt;code&gt;0000 0011&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;8&lt;/strong&gt;: &lt;code&gt;0000 1000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;12&lt;/strong&gt;: &lt;code&gt;0000 0001 0000 0010&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;13&lt;/strong&gt;: &lt;code&gt;0000 0001 0000 0011&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;22&lt;/strong&gt;: &lt;code&gt;0000 0010 0000 0010&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;35&lt;/strong&gt;: &lt;code&gt;0000 0011 0000 0101&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;99&lt;/strong&gt;: &lt;code&gt;0000 1001 0000 1001&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;100&lt;/strong&gt;: &lt;code&gt;0000 0001 0000 0000 0000 0000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1255&lt;/strong&gt;: &lt;code&gt;0000 0001 0000 0010 0000 0101 0000 0101&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;BCD empaquetado (1 byte representa 2 dígitos decimales)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;0&lt;/strong&gt;: &lt;code&gt;0000 0000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1&lt;/strong&gt;: &lt;code&gt;0000 0001&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;3&lt;/strong&gt;: &lt;code&gt;0000 0011&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;8&lt;/strong&gt;: &lt;code&gt;0000 1000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;12&lt;/strong&gt;: &lt;code&gt;0001 0010&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;13&lt;/strong&gt;: &lt;code&gt;0001 0011&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;22&lt;/strong&gt;: &lt;code&gt;0010 0010&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;35&lt;/strong&gt;: &lt;code&gt;0011 0101&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;99&lt;/strong&gt;: &lt;code&gt;1001 1001&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;100&lt;/strong&gt;: &lt;code&gt;0001 0000 0000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1255&lt;/strong&gt;: &lt;code&gt;0001 0010 0101 0101&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Procedimiento para calcular sumas en BCD empaquetado&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Convertir los números decimales a BCD empaquetado&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sumar los números como si fueran números binarios normales&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Si algún dígito excede 9 (1001 en binario), agregar 6 (0110 en binario) para corregirlo&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Sumas en BCD desempaquetado y empaquetado&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/7d8a2b58-bf8d-4a59-a150-91941ec3b949&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/e5c1acb1-1df5-4e13-9adc-2d16f9ad9624&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/4172076e-fb30-4dc1-a449-91895a96f727&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Sumas en BCD empaquetado:&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;32 + 45&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BCD empaquetado: &lt;code&gt;0011 0010 + 0100 0101 = 0111 0111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Decimal: 77&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;22 + 89&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BCD empaquetado: &lt;code&gt;0010 0010 + 1000 1001 = 0001 0100 0001&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Decimal: 111&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;1307 + 708&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BCD empaquetado: &lt;code&gt;0001 0011 0000 0111 + 0111 0000 1000 = 0100 0011 1000 0111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Decimal: 2015&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 7&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/6f7b9b79-5691-418f-b48e-cfa5d60453a0&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Lamento la confusión. Entiendo que BSS es binario sin signo. Vamos a corregir las representaciones teniendo en cuenta que BSS utiliza el mínimo número de bits necesarios para representar los números sin signo.&lt;/p&gt;
&lt;h4&gt;Representación en BCD, BCD empaquetado y BSS&lt;/h4&gt;
&lt;h4&gt;Números a representar:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;13160&lt;/li&gt;
&lt;li&gt;2988&lt;/li&gt;
&lt;li&gt;927&lt;/li&gt;
&lt;li&gt;87127&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;BCD desempaquetado (cada dígito decimal utiliza 1 byte)&lt;/h4&gt;
&lt;p&gt;Cada dígito decimal se representa con 4 bits (1 byte por dígito).&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;13160&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1: &lt;code&gt;0000 0001&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;3: &lt;code&gt;0000 0011&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;1: &lt;code&gt;0000 0001&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;6: &lt;code&gt;0000 0110&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;0: &lt;code&gt;0000 0000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Total: &lt;code&gt;0000 0001 0000 0011 0000 0001 0000 0110 0000 0000&lt;/code&gt; (40 bits)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;2988&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2: &lt;code&gt;0000 0010&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;9: &lt;code&gt;0000 1001&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;8: &lt;code&gt;0000 1000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;8: &lt;code&gt;0000 1000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Total: &lt;code&gt;0000 0010 0000 1001 0000 1000 0000 1000&lt;/code&gt; (32 bits)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;927&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;9: &lt;code&gt;0000 1001&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;2: &lt;code&gt;0000 0010&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;7: &lt;code&gt;0000 0111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Total: &lt;code&gt;0000 1001 0000 0010 0000 0111&lt;/code&gt; (24 bits)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;87127&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;8: &lt;code&gt;0000 1000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;7: &lt;code&gt;0000 0111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;1: &lt;code&gt;0000 0001&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;2: &lt;code&gt;0000 0010&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;7: &lt;code&gt;0000 0111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Total: &lt;code&gt;0000 1000 0000 0111 0000 0001 0000 0010 0000 0111&lt;/code&gt; (40 bits)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;BCD empaquetado (1 byte representa 2 dígitos decimales)&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;13160&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;13: &lt;code&gt;0001 0011&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;16: &lt;code&gt;0001 0110&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;0: &lt;code&gt;0000 0000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Total: &lt;code&gt;0001 0011 0001 0110 0000 0000&lt;/code&gt; (24 bits)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;2988&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;29: &lt;code&gt;0010 1001&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;88: &lt;code&gt;1000 1000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Total: &lt;code&gt;0010 1001 1000 1000&lt;/code&gt; (16 bits)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;927&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;09: &lt;code&gt;0000 1001&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;27: &lt;code&gt;0010 0111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Total: &lt;code&gt;0000 1001 0010 0111&lt;/code&gt; (16 bits)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;87127&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;87: &lt;code&gt;1000 0111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;12: &lt;code&gt;0001 0010&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;7: &lt;code&gt;0000 0111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Total: &lt;code&gt;1000 0111 0001 0010 0000 0111&lt;/code&gt; (24 bits)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;BSS (Binario Sin Signo)&lt;/h4&gt;
&lt;p&gt;Utilizamos el mínimo número de bits necesarios para representar el número en binario sin signo.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;13160&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Binario: &lt;code&gt;11001101111000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Total: &lt;code&gt;11001101111000&lt;/code&gt; (14 bits)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;2988&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Binario: &lt;code&gt;101110101100&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Total: &lt;code&gt;101110101100&lt;/code&gt; (12 bits)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;927&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Binario: &lt;code&gt;1110011111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Total: &lt;code&gt;1110011111&lt;/code&gt; (10 bits)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;87127&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Binario: &lt;code&gt;10101010001101111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Total: &lt;code&gt;10101010001101111&lt;/code&gt; (17 bits)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Resumen de bits necesarios&lt;/h4&gt;
&lt;p&gt;| Número  | BCD (bits) | BCD empaquetado (bits) | BSS (bits) |
|---------|------------|-------------------------|------------|
| 13160   | 40         | 24                      | 14         |
| 2988    | 32         | 16                      | 12         |
| 927     | 24         | 16                      | 10         |
| 87127   | 40         | 24                      | 17         |&lt;/p&gt;
&lt;h4&gt;Conclusiones sobre BCD y BSS&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Ventajas de BCD:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Facilidad de Conversión:&lt;/strong&gt; La conversión entre BCD y decimal es directa y sencilla.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Precisión:&lt;/strong&gt; No hay errores de redondeo como en las conversiones binario a decimal.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compatibilidad:&lt;/strong&gt; Es útil en aplicaciones donde la salida debe ser en decimal, como en pantallas de siete segmentos.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Desventajas de BCD:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Ineficiencia:&lt;/strong&gt; BCD no es eficiente en términos de uso de bits, ya que cada dígito decimal se representa con 4 bits, lo que resulta en una mayor cantidad de bits necesarios.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Operaciones Aritméticas:&lt;/strong&gt; Las operaciones aritméticas son más complejas y requieren ajustes adicionales para cada dígito mayor que 9.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Ventajas de BSS:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Eficiencia de Bits:&lt;/strong&gt; La representación en BSS es más eficiente en términos de cantidad de bits utilizados.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Operaciones Aritméticas Simples:&lt;/strong&gt; Las operaciones aritméticas son más directas en binario.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Desventajas de BSS:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Conversión:&lt;/strong&gt; La conversión entre BSS y decimal es menos intuitiva que BCD.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Errores de Redondeo:&lt;/strong&gt; Pueden ocurrir errores de redondeo en conversiones entre binario y decimal.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En resumen, BCD es más adecuado para aplicaciones que requieren una interacción frecuente con números decimales, mientras que BSS es más eficiente para el almacenamiento y procesamiento de datos en sistemas digitales.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 8&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/7fc30744-fd62-4503-80f9-e9646d2469cf&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Vamos a resolver el ejercicio de convertir de binario a hexadecimal y de hexadecimal a BCD en forma directa, sin utilizar el sistema decimal. También explicaremos por qué el sistema hexadecimal es muy utilizado.&lt;/p&gt;
&lt;h4&gt;Conversión de binario a hexadecimal&lt;/h4&gt;
&lt;p&gt;Para convertir de binario a hexadecimal, dividimos el número binario en grupos de 4 bits, empezando desde la derecha, y luego convertimos cada grupo de 4 bits en su equivalente hexadecimal.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;101000001000&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Agrupamos: &lt;code&gt;1010 0000 1000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Convertimos:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;1010&lt;/code&gt; -&gt; A&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0000&lt;/code&gt; -&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;code&gt;1000&lt;/code&gt; -&gt; 8&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Resultado: &lt;code&gt;A08&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;1110001011101&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Agrupamos: &lt;code&gt;0001 1100 0101 1101&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Convertimos:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0001&lt;/code&gt; -&gt; 1&lt;/li&gt;
&lt;li&gt;&lt;code&gt;1100&lt;/code&gt; -&gt; C&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0101&lt;/code&gt; -&gt; 5&lt;/li&gt;
&lt;li&gt;&lt;code&gt;1101&lt;/code&gt; -&gt; D&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Resultado: &lt;code&gt;1C5D&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;111010011001011&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Agrupamos: &lt;code&gt;0001 1101 0011 0011&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Convertimos:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0001&lt;/code&gt; -&gt; 1&lt;/li&gt;
&lt;li&gt;&lt;code&gt;1101&lt;/code&gt; -&gt; D&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0011&lt;/code&gt; -&gt; 3&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0011&lt;/code&gt; -&gt; 3&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Resultado: &lt;code&gt;1D33&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;1001111100000011&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Agrupamos: &lt;code&gt;1001 1111 0000 0011&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Convertimos:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;1001&lt;/code&gt; -&gt; 9&lt;/li&gt;
&lt;li&gt;&lt;code&gt;1111&lt;/code&gt; -&gt; F&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0000&lt;/code&gt; -&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0011&lt;/code&gt; -&gt; 3&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Resultado: &lt;code&gt;9F03&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;1110101010101010&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Agrupamos: &lt;code&gt;1110 1010 1010 1010&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Convertimos:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;1110&lt;/code&gt; -&gt; E&lt;/li&gt;
&lt;li&gt;&lt;code&gt;1010&lt;/code&gt; -&gt; A&lt;/li&gt;
&lt;li&gt;&lt;code&gt;1010&lt;/code&gt; -&gt; A&lt;/li&gt;
&lt;li&gt;&lt;code&gt;1010&lt;/code&gt; -&gt; A&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Resultado: &lt;code&gt;EAAA&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;101101101011010&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Agrupamos: &lt;code&gt;0001 0110 1101 1010&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Convertimos:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0001&lt;/code&gt; -&gt; 1&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0110&lt;/code&gt; -&gt; 6&lt;/li&gt;
&lt;li&gt;&lt;code&gt;1101&lt;/code&gt; -&gt; D&lt;/li&gt;
&lt;li&gt;&lt;code&gt;1010&lt;/code&gt; -&gt; A&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Resultado: &lt;code&gt;16DA&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Conversión de hexadecimal a BCD&lt;/h4&gt;
&lt;p&gt;Para convertir de hexadecimal a BCD (Binary Coded Decimal), convertimos cada dígito hexadecimal a su equivalente binario de 4 bits y luego concatenamos estos valores.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;2801&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Convertimos cada dígito:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;2&lt;/code&gt; -&gt; &lt;code&gt;0010&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;8&lt;/code&gt; -&gt; &lt;code&gt;1000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0&lt;/code&gt; -&gt; &lt;code&gt;0000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;1&lt;/code&gt; -&gt; &lt;code&gt;0001&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Resultado: &lt;code&gt;0010 1000 0000 0001&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;1C5D&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Convertimos cada dígito:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;1&lt;/code&gt; -&gt; &lt;code&gt;0001&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;C&lt;/code&gt; -&gt; &lt;code&gt;1100&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;5&lt;/code&gt; -&gt; &lt;code&gt;0101&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;D&lt;/code&gt; -&gt; &lt;code&gt;1101&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Resultado: &lt;code&gt;0001 1100 0101 1101&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;78AB&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Convertimos cada dígito:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;7&lt;/code&gt; -&gt; &lt;code&gt;0111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;8&lt;/code&gt; -&gt; &lt;code&gt;1000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;A&lt;/code&gt; -&gt; &lt;code&gt;1010&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;B&lt;/code&gt; -&gt; &lt;code&gt;1011&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Resultado: &lt;code&gt;0111 1000 1010 1011&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;F79A&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Convertimos cada dígito:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;F&lt;/code&gt; -&gt; &lt;code&gt;1111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;7&lt;/code&gt; -&gt; &lt;code&gt;0111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;9&lt;/code&gt; -&gt; &lt;code&gt;1001&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;A&lt;/code&gt; -&gt; &lt;code&gt;1010&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Resultado: &lt;code&gt;1111 0111 1001 1010&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;7EF1&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Convertimos cada dígito:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;7&lt;/code&gt; -&gt; &lt;code&gt;0111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;E&lt;/code&gt; -&gt; &lt;code&gt;1110&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;F&lt;/code&gt; -&gt; &lt;code&gt;1111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;1&lt;/code&gt; -&gt; &lt;code&gt;0001&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Resultado: &lt;code&gt;0111 1110 1111 0001&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;324A&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Convertimos cada dígito:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;3&lt;/code&gt; -&gt; &lt;code&gt;0011&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;2&lt;/code&gt; -&gt; &lt;code&gt;0010&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;4&lt;/code&gt; -&gt; &lt;code&gt;0100&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;A&lt;/code&gt; -&gt; &lt;code&gt;1010&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Resultado: &lt;code&gt;0011 0010 0100 1010&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Resumen de la conversión&lt;/h4&gt;
&lt;p&gt;| Binario            | Hexadecimal |
|--------------------|-------------|
| 101000001000       | A08         |
| 1110001011101      | 1C5D        |
| 111010011001011    | 1D33        |
| 1001111100000011   | 9F03        |
| 1110101010101010   | EAAA        |
| 101101101011010    | 16DA        |&lt;/p&gt;
&lt;p&gt;| Hexadecimal | BCH                    |
|-------------|------------------------|
| 2801        | 0010 1000 0000 0001    |
| 1C5D        | 0001 1100 0101 1101    |
| 78AB        | 0111 1000 1010 1011    |
| F79A        | 1111 0111 1001 1010    |
| 7EF1        | 0111 1110 1111 0001    |
| 324A        | 0011 0010 0100 1010    |&lt;/p&gt;
&lt;h4&gt;Utilización del sistema hexadecimal&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Ventajas del sistema hexadecimal:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Compacto y Legible:&lt;/strong&gt; El sistema hexadecimal es más compacto que el binario, reduciendo la longitud de las cadenas de bits, lo que facilita la lectura y escritura de valores binarios.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conversión Directa:&lt;/strong&gt; La conversión entre hexadecimal y binario es directa y fácil, ya que cada dígito hexadecimal corresponde exactamente a 4 bits.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Utilización en Programación:&lt;/strong&gt; Es ampliamente utilizado en programación y sistemas digitales para representar direcciones de memoria, valores de colores en gráficos, y otros datos binarios.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;El sistema hexadecimal es muy utilizado debido a su eficiencia en la representación y facilidad de conversión con el sistema binario.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 9&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/9d238750-6918-4e9d-ba9e-e58acbbeda97&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Vamos a realizar las operaciones de suma (ADD) y resta (SUB) indicadas y calcular los flags para cada operación.&lt;/p&gt;
&lt;h4&gt;Notación de Flags:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;C&lt;/strong&gt;: Carry (acarreo)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B&lt;/strong&gt;: Borrow (préstamo)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Z&lt;/strong&gt;: Zero (resultado cero)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;V&lt;/strong&gt;: Overflow (desbordamiento)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;N&lt;/strong&gt;: Negative (negativo)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Operaciones y Cálculos:&lt;/h4&gt;
&lt;h4&gt;1. ADD 00011101 00110111&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;  00011101
+ 00110111
-----------
  01010010

Flags: Carry=0, Zero=0, Negative=0, Overflow=0
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2. ADD 01110000 11110001&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;  01110000
+ 11110001
-----------
  01100001

Flags: Carry=1, Zero=0, Negative=0, Overflow=1
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3. ADD 10011101 01101010&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;  10011101
+ 01101010
-----------
  00000111

Flags: Carry=1, Zero=0, Negative=0, Overflow=1
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;4. ADD 01010110 01110010&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;  01010110
+ 01110010
-----------
  11001000

Flags: Carry=0, Zero=0, Negative=1, Overflow=0
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;5. ADD 01101110 01100001&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;  01101110
+ 01100001
-----------
  11001111

Flags: Carry=0, Zero=0, Negative=1, Overflow=0
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;6. ADD 10111101 11100001&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;  10111101
+ 11100001
-----------
  10011110

Flags: Carry=1, Zero=0, Negative=1, Overflow=1
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;7. ADD 00001110 00001111&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;  00001110
+ 00001111
-----------
  00011101

Flags: Carry=0, Zero=0, Negative=0, Overflow=0
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Restas (SUB):&lt;/h4&gt;
&lt;h4&gt;8. SUB 00111011 00101101&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;  00111011
- 00101101
-----------
  00001110

Flags: Borrow=0, Zero=0, Negative=0, Overflow=0
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;9. SUB 01110000 11110001&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;  01110000
- 11110001
-----------
  01111111

Flags: Borrow=1, Zero=0, Negative=0, Overflow=1
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;10. SUB 10101110 01110010&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;  10101110
- 01110010
-----------
  00111100

Flags: Borrow=0, Zero=0, Negative=0, Overflow=1
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;11. SUB 10111101 11100001&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;  10111101
- 11100001
-----------
  11011100

Flags: Borrow=1, Zero=0, Negative=1, Overflow=0
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;12. SUB 01101110 01100001&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;  01101110
- 01100001
-----------
  00001111

Flags: Borrow=0, Zero=0, Negative=0, Overflow=0
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;13. SUB 10000000 10000000&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;  10000000
- 10000000
-----------
  00000000

Flags: Borrow=0, Zero=1, Negative=0, Overflow=0
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Resumen de Resultados y Flags:&lt;/h4&gt;
&lt;p&gt;| Operación              | Resultado | Flags                         |
|------------------------|-----------|-------------------------------|
| ADD 00011101 00110111  | 01010010  | Carry=0, Zero=0, Negative=0, Overflow=0 |
| ADD 01110000 11110001  | 01100001  | Carry=1, Zero=0, Negative=0, Overflow=1 |
| ADD 10011101 01101010  | 00000111  | Carry=1, Zero=0, Negative=0, Overflow=1 |
| ADD 01010110 01110010  | 11001000  | Carry=0, Zero=0, Negative=1, Overflow=0 |
| ADD 01101110 01100001  | 11001111  | Carry=0, Zero=0, Negative=1, Overflow=0 |
| ADD 10111101 11100001  | 10011110  | Carry=1, Zero=0, Negative=1, Overflow=1 |
| ADD 00001110 00001111  | 00011101  | Carry=0, Zero=0, Negative=0, Overflow=0 |
| SUB 00111011 00101101  | 00001110  | Borrow=0, Zero=0, Negative=0, Overflow=0 |
| SUB 01110000 11110001  | 01111111  | Borrow=1, Zero=0, Negative=0, Overflow=1 |
| SUB 10101110 01110010  | 00111100  | Borrow=0, Zero=0, Negative=0, Overflow=1 |
| SUB 10111101 11100001  | 11011100  | Borrow=1, Zero=0, Negative=1, Overflow=0 |
| SUB 01101110 01100001  | 00001111  | Borrow=0, Zero=0, Negative=0, Overflow=0 |
| SUB 10000000 10000000  | 00000000  | Borrow=0, Zero=1, Negative=0, Overflow=0 |&lt;/p&gt;
&lt;p&gt;Estos cálculos muestran los resultados de las operaciones y el estado de los diferentes flags (Carry, Zero, Negative, Overflow) después de cada operación.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 10&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/1c998165-8456-4e56-a89a-45bc19836ad6&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Claro, aquí tienes un resumen de lo anterior:&lt;/p&gt;
&lt;h4&gt;Representación y Verificación de Operaciones en Distintos Sistemas&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;BSS (Binario Sin Signo):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Representa números positivos sin signo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ejemplo Operación:&lt;/strong&gt;
&lt;pre&gt;&lt;code&gt;  01110000 (112) + 11110001 (241) = 11000111 (199)
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flags:&lt;/strong&gt; Carry=0, Zero=0, Negative=0, Overflow=0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;BCS (Binario Complemento de Signo):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Utiliza el bit más significativo como bit de signo (0 para positivo, 1 para negativo).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ejemplo Operación:&lt;/strong&gt;
&lt;pre&gt;&lt;code&gt;  01110000 (112) + 11110001 (-15) = 01100111 (71)
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flags:&lt;/strong&gt; Carry=1, Zero=0, Negative=1, Overflow=1&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ca1 (Complemento a 1):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Se obtiene invirtiendo todos los bits del número en BCS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ejemplo Operación:&lt;/strong&gt;
&lt;pre&gt;&lt;code&gt;  01110000 (112) + 11110001 (-14) = 01100110 (70)
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flags:&lt;/strong&gt; Carry=1, Zero=0, Negative=1, Overflow=1&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ca2 (Complemento a 2):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Se obtiene sumando 1 al complemento a 1 del número.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ejemplo Operación:&lt;/strong&gt;
&lt;pre&gt;&lt;code&gt;  01110000 (112) + 11110001 (-15) = 01100111 (71)
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flags:&lt;/strong&gt; Carry=1, Zero=0, Negative=1, Overflow=1&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Exceso2:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Se suma un exceso fijo (generalmente 2^(n-1)) y luego se representa como BSS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ejemplo Operación:&lt;/strong&gt;
&lt;pre&gt;&lt;code&gt;  01110000 (112-64) + 11110001 (-15-64) = 11000111 (199-128)
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flags:&lt;/strong&gt; Carry=0, Zero=0, Negative=0, Overflow=0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Conclusiones:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;BSS (Binario Sin Signo):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Representa números positivos sin signo.&lt;/li&gt;
&lt;li&gt;Fácil de interpretar y manipular.&lt;/li&gt;
&lt;li&gt;No se usa para números negativos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;BCS (Binario Complemento de Signo):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Usa el bit más significativo como bit de signo.&lt;/li&gt;
&lt;li&gt;Representa números negativos.&lt;/li&gt;
&lt;li&gt;La aritmética requiere manejo del bit de signo.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ca1 (Complemento a 1):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Inversión de todos los bits para obtener el número negativo.&lt;/li&gt;
&lt;li&gt;Menos eficiente para aritmética de números negativos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ca2 (Complemento a 2):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Agrega 1 al complemento a 1 para obtener el número negativo.&lt;/li&gt;
&lt;li&gt;Más eficiente para operaciones aritméticas.&lt;/li&gt;
&lt;li&gt;Común en sistemas binarios modernos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Exceso2:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Suma de un exceso fijo para representar números negativos.&lt;/li&gt;
&lt;li&gt;Utilizado en ciertas aplicaciones de hardware.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cada sistema de representación tiene ventajas y desventajas según el contexto de uso. La interpretación correcta de los resultados y el manejo de los flags son cruciales en operaciones aritméticas binarias.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 11&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/a9053c1f-70e1-422a-928b-4ab31cd87010&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Para abordar el ejercicio 11, vamos a analizar las operaciones de suma (ADD) realizadas en el ejercicio 9 y establecer una regla para determinar la correctitud de la operación ADD en el sistema BSS observando solo los flags. En el sistema BSS (Binario Sin Signo), los números son siempre positivos, y el bit más significativo no es un bit de signo.&lt;/p&gt;
&lt;h4&gt;Análisis de Resultados y Flags&lt;/h4&gt;
&lt;h4&gt;Resultados del Ejercicio 9 con Flags:&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ADD 00011101 00110111&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Resultado: 01010010&lt;/li&gt;
&lt;li&gt;Flags: Carry=0, Zero=0, Negative=0, Overflow=0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ADD 01110000 11110001&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Resultado: 01100001&lt;/li&gt;
&lt;li&gt;Flags: Carry=1, Zero=0, Negative=0, Overflow=1&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ADD 10011101 01101010&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Resultado: 00000111&lt;/li&gt;
&lt;li&gt;Flags: Carry=1, Zero=0, Negative=0, Overflow=1&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ADD 01010110 01110010&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Resultado: 11001000&lt;/li&gt;
&lt;li&gt;Flags: Carry=0, Zero=0, Negative=1, Overflow=0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ADD 01101110 01100001&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Resultado: 11001111&lt;/li&gt;
&lt;li&gt;Flags: Carry=0, Zero=0, Negative=1, Overflow=0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ADD 10111101 11100001&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Resultado: 10011110&lt;/li&gt;
&lt;li&gt;Flags: Carry=1, Zero=0, Negative=1, Overflow=1&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ADD 00001110 00001111&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Resultado: 00011101&lt;/li&gt;
&lt;li&gt;Flags: Carry=0, Zero=0, Negative=0, Overflow=0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Observaciones&lt;/h4&gt;
&lt;p&gt;En el contexto de BSS, los números deben ser interpretados como valores sin signo. Aquí están las reglas y observaciones basadas en los flags:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Carry (C)&lt;/strong&gt;: Indica que hubo un acarreo fuera del bit más significativo. Para números sin signo, un carry (C=1) sugiere que la suma de los números excedió la capacidad del número de bits usados. Esto indica que el resultado es incorrecto para BSS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero (Z)&lt;/strong&gt;: Indica que el resultado de la operación es cero. Este flag es menos relevante para verificar errores en BSS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Negative (N)&lt;/strong&gt;: En BSS, este flag no se utiliza porque todos los números son positivos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overflow (V)&lt;/strong&gt;: Indica desbordamiento cuando el resultado excede la capacidad del sistema. En el contexto de BSS, esto puede ser indicativo de un error similar al carry.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Regla para Determinar la Correctitud de la Operación ADD en BSS&lt;/h3&gt;
&lt;p&gt;Para determinar la correctitud de la operación ADD en el sistema BSS, la mera observación del flag &lt;strong&gt;Carry (C)&lt;/strong&gt; es suficiente:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Si C=1, el resultado es incorrecto.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Si C=0, el resultado es correcto.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Aplicación de la Regla&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ADD 00011101 00110111&lt;/strong&gt; (C=0) → Correcto&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ADD 01110000 11110001&lt;/strong&gt; (C=1) → Incorrecto&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ADD 10011101 01101010&lt;/strong&gt; (C=1) → Incorrecto&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ADD 01010110 01110010&lt;/strong&gt; (C=0) → Correcto&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ADD 01101110 01100001&lt;/strong&gt; (C=0) → Correcto&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ADD 10111101 11100001&lt;/strong&gt; (C=1) → Incorrecto&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ADD 00001110 00001111&lt;/strong&gt; (C=0) → Correcto&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Conclusión&lt;/h4&gt;
&lt;p&gt;En el sistema BSS, la presencia de un acarreo (C=1) es suficiente para indicar que el resultado de una operación ADD es incorrecto. Esta regla es simple y efectiva para determinar la correctitud de las sumas en BSS sin necesidad de verificar la operación en el sistema decimal.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 12&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/e1c18008-cc3c-4f65-abf2-e18a7a9ca59b&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Vamos a trabajar con las operaciones de resta (SUB) para el sistema Ca2 (Complemento a 2) y establecer reglas para determinar la correctitud de las operaciones ADD y SUB observando los flags.&lt;/p&gt;
&lt;h3&gt;Ejemplos de Operaciones SUB del Ejercicio 9&lt;/h3&gt;
&lt;h4&gt;Restas (SUB):&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SUB 00111011 00101101&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Operación: &lt;code&gt;00111011 - 00101101&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Resultado: &lt;code&gt;00001110&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Flags: Borrow=0, Zero=0, Negative=0, Overflow=0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SUB 01110000 11110001&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Operación: &lt;code&gt;01110000 - 11110001&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Resultado: &lt;code&gt;01111111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Flags: Borrow=1, Zero=0, Negative=0, Overflow=1&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SUB 10101110 01110010&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Operación: &lt;code&gt;10101110 - 01110010&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Resultado: &lt;code&gt;00111100&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Flags: Borrow=0, Zero=0, Negative=0, Overflow=1&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SUB 10111101 11100001&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Operación: &lt;code&gt;10111101 - 11100001&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Resultado: &lt;code&gt;11011100&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Flags: Borrow=1, Zero=0, Negative=1, Overflow=0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SUB 01101110 01100001&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Operación: &lt;code&gt;01101110 - 01100001&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Resultado: &lt;code&gt;00001111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Flags: Borrow=0, Zero=0, Negative=0, Overflow=0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SUB 10000000 10000000&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Operación: &lt;code&gt;10000000 - 10000000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Resultado: &lt;code&gt;00000000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Flags: Borrow=0, Zero=1, Negative=0, Overflow=0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Análisis de Resultados y Flags en Ca2&lt;/h3&gt;
&lt;p&gt;Para determinar la correctitud de las operaciones ADD y SUB en el sistema Ca2, observamos los flags de cada operación.&lt;/p&gt;
&lt;h4&gt;Observaciones:&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Borrow (B):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En las restas, el flag de Borrow indica que hubo un préstamo.&lt;/li&gt;
&lt;li&gt;Si Borrow (B=1), generalmente sugiere un problema en la operación para Ca2.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Zero (Z):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Indica que el resultado de la operación es cero.&lt;/li&gt;
&lt;li&gt;No es tan relevante para verificar errores en Ca2.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Negative (N):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En Ca2, el flag negativo indica que el resultado es negativo.&lt;/li&gt;
&lt;li&gt;Importante para operaciones con signo.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Overflow (V):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Indica desbordamiento cuando el resultado excede la capacidad del sistema.&lt;/li&gt;
&lt;li&gt;En Ca2, un overflow (V=1) puede sugerir un error en la operación.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Reglas para Determinar la Correctitud de ADD y SUB en Ca2&lt;/h3&gt;
&lt;h4&gt;Sumas (ADD):&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Si Overflow (V=1) y Carry (C=1), el resultado es incorrecto.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Si Overflow (V=0) y Carry (C=0), el resultado es correcto.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Restas (SUB):&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Si Borrow (B=1) o Overflow (V=1), el resultado es incorrecto.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Si Borrow (B=0) y Overflow (V=0), el resultado es correcto.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Aplicación de las Reglas:&lt;/h3&gt;
&lt;h4&gt;Operaciones ADD:&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ADD 00011101 00110111&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Flags: C=0, Z=0, N=0, V=0 → Correcto&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ADD 01110000 11110001&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Flags: C=1, Z=0, N=0, V=1 → Incorrecto&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ADD 10011101 01101010&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Flags: C=1, Z=0, N=0, V=1 → Incorrecto&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ADD 01010110 01110010&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Flags: C=0, Z=0, N=1, V=0 → Correcto&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ADD 01101110 01100001&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Flags: C=0, Z=0, N=1, V=0 → Correcto&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ADD 10111101 11100001&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Flags: C=1, Z=0, N=1, V=1 → Incorrecto&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ADD 00001110 00001111&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Flags: C=0, Z=0, N=0, V=0 → Correcto&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Operaciones SUB:&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SUB 00111011 00101101&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Flags: B=0, Z=0, N=0, V=0 → Correcto&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SUB 01110000 11110001&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Flags: B=1, Z=0, N=0, V=1 → Incorrecto&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SUB 10101110 01110010&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Flags: B=0, Z=0, N=0, V=1 → Incorrecto&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SUB 10111101 11100001&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Flags: B=1, Z=0, N=1, V=0 → Incorrecto&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SUB 01101110 01100001&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Flags: B=0, Z=0, N=0, V=0 → Correcto&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SUB 10000000 10000000&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Flags: B=0, Z=1, N=0, V=0 → Correcto&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Conclusión&lt;/h3&gt;
&lt;p&gt;En el sistema Ca2:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Para ADD:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Si V=1 y C=1, el resultado es incorrecto.&lt;/li&gt;
&lt;li&gt;Si V=0 y C=0, el resultado es correcto.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Para SUB:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Si B=1 o V=1, el resultado es incorrecto.&lt;/li&gt;
&lt;li&gt;Si B=0 y V=0, el resultado es correcto.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estas reglas permiten verificar la correctitud de las operaciones sin necesidad de convertir los resultados al sistema decimal.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 13&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/3b3e8ab9-c7cf-48e3-9907-2aa208a15b82&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Para abordar el ejercicio 13, vamos a considerar las operaciones de suma (ADD) y resta (SUB) del ejercicio 9, suponiendo que el punto o coma fraccionaria se encuentra entre el bit 2 y el bit 3. Interpretaremos los valores de las cadenas de bits como BSS (Binario Sin Signo) y como Ca2 (Complemento a 2) y observaremos los flags correspondientes.&lt;/p&gt;
&lt;h3&gt;Operaciones del Ejercicio 9:&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ADD 00011101 00110111&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ADD 01110000 11110001&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ADD 10011101 01101010&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ADD 01010110 01110010&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ADD 01101110 01100001&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ADD 10111101 11100001&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ADD 00001110 00001111&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SUB 00111011 00101101&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SUB 01110000 11110001&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SUB 10101110 01110010&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SUB 10111101 11100001&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SUB 01101110 01100001&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SUB 10000000 10000000&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Interpretación con Punto Fraccionario entre Bit 2 y Bit 3&lt;/h3&gt;
&lt;h4&gt;Operación 1: ADD 00011101 00110111&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Operandos:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0001.1101&lt;/code&gt; -&gt; 1.78125 (BSS)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0011.0111&lt;/code&gt; -&gt; 3.4375 (BSS)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Suma:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0101.0100&lt;/code&gt; -&gt; 5.21875 (BSS)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Flags:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Carry:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Negative:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overflow:&lt;/strong&gt; 0&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Operación 2: ADD 01110000 11110001&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Operandos:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0111.0000&lt;/code&gt; -&gt; 7.0 (BSS)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;1111.0001&lt;/code&gt; -&gt; -1.9375 (Ca2)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Suma:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0110.0001&lt;/code&gt; -&gt; 6.0625 (Ca2)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Flags:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Carry:&lt;/strong&gt; 1&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Negative:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overflow:&lt;/strong&gt; 1&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Operación 3: ADD 10011101 01101010&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Operandos:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;1001.1101&lt;/code&gt; -&gt; -6.0625 (Ca2)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0110.1010&lt;/code&gt; -&gt; 6.625 (BSS)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Suma:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0000.0111&lt;/code&gt; -&gt; 0.4375 (Ca2)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Flags:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Carry:&lt;/strong&gt; 1&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Negative:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overflow:&lt;/strong&gt; 1&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Operación 4: ADD 01010110 01110010&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Operandos:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0101.0110&lt;/code&gt; -&gt; 5.375 (BSS)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0111.0010&lt;/code&gt; -&gt; 7.125 (BSS)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Suma:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;1100.1000&lt;/code&gt; -&gt; -4.5 (Ca2)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Flags:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Carry:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Negative:&lt;/strong&gt; 1&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overflow:&lt;/strong&gt; 0&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Operación 5: ADD 01101110 01100001&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Operandos:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0110.1110&lt;/code&gt; -&gt; 6.875 (BSS)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0110.0001&lt;/code&gt; -&gt; 6.0625 (BSS)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Suma:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;1100.1111&lt;/code&gt; -&gt; -4.125 (Ca2)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Flags:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Carry:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Negative:&lt;/strong&gt; 1&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overflow:&lt;/strong&gt; 0&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Operación 6: ADD 10111101 11100001&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Operandos:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;1011.1101&lt;/code&gt; -&gt; -4.125 (Ca2)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;1110.0001&lt;/code&gt; -&gt; -1.9375 (Ca2)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Suma:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;1001.1110&lt;/code&gt; -&gt; -6.0625 (Ca2)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Flags:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Carry:&lt;/strong&gt; 1&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Negative:&lt;/strong&gt; 1&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overflow:&lt;/strong&gt; 1&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Operación 7: ADD 00001110 00001111&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Operandos:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0000.1110&lt;/code&gt; -&gt; 0.875 (BSS)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0000.1111&lt;/code&gt; -&gt; 0.9375 (BSS)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Suma:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0001.1101&lt;/code&gt; -&gt; 1.8125 (BSS)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Flags:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Carry:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Negative:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overflow:&lt;/strong&gt; 0&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Operación 8: SUB 00111011 00101101&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Operandos:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0011.1011&lt;/code&gt; -&gt; 3.71875 (BSS)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0010.1101&lt;/code&gt; -&gt; 2.8125 (BSS)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resta:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0000.1110&lt;/code&gt; -&gt; 0.90625 (BSS)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Flags:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Borrow:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Negative:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overflow:&lt;/strong&gt; 0&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Operación 9: SUB 01110000 11110001&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Operandos:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0111.0000&lt;/code&gt; -&gt; 7.0 (BSS)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;1111.0001&lt;/code&gt; -&gt; -1.9375 (Ca2)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resta:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0111.1111&lt;/code&gt; -&gt; 7.9375 (BSS)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Flags:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Borrow:&lt;/strong&gt; 1&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Negative:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overflow:&lt;/strong&gt; 1&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Operación 10: SUB 10101110 01110010&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Operandos:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;1010.1110&lt;/code&gt; -&gt; -5.125 (Ca2)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0111.0010&lt;/code&gt; -&gt; 7.125 (BSS)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resta:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0011.1100&lt;/code&gt; -&gt; 3.75 (BSS)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Flags:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Borrow:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Negative:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overflow:&lt;/strong&gt; 1&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Operación 11: SUB 10111101 11100001&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Operandos:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;1011.1101&lt;/code&gt; -&gt; -4.125 (Ca2)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;1110.0001&lt;/code&gt; -&gt; -1.9375 (Ca2)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resta:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;1101.1100&lt;/code&gt; -&gt; -2.25 (Ca2)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Flags:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Borrow:&lt;/strong&gt; 1&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Negative:&lt;/strong&gt; 1&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overflow:&lt;/strong&gt; 0&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Operación 12: SUB 01101110 01100001&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Operandos:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0110.1110&lt;/code&gt; -&gt; 6.875 (BSS)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0110.0001&lt;/code&gt; -&gt; 6.0625 (BSS)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resta:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0000.1111&lt;/code&gt; -&gt; 0.8125 (BSS)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Flags:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Borrow:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Negative:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overflow:&lt;/strong&gt; 0&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Operación 13: SUB 10000000 10000000&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Operandos:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;1000.0000&lt;/code&gt; -&gt; -4.0 (Ca2)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;1000.0000&lt;/code&gt; -&gt; -4.0 (Ca2)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resta:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0000.0000&lt;/code&gt; -&gt; 0 (BSS)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Flags:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Borrow:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero:&lt;/strong&gt; 1&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Negative:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overflow:&lt;/strong&gt; 0&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Conclusión&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Flags en Ca2:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Carry (C)&lt;/strong&gt; y &lt;strong&gt;Borrow (B)&lt;/strong&gt;: Importantes para determinar errores en operaciones aritméticas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overflow (V)&lt;/strong&gt;: Indica desbordamiento y posibles errores en representación.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero (Z)&lt;/strong&gt;: Indica que el resultado es cero.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Negative (N)&lt;/strong&gt;: Indica si el resultado es negativo.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Interpretación en Ca2 y BSS con Punto Fraccionario:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los valores fraccionarios permiten una precisión adicional en las operaciones.&lt;/li&gt;
&lt;li&gt;En Ca2, se necesita tener cuidado con los signos y desbordamientos.&lt;/li&gt;
&lt;li&gt;En BSS, el rango es más simple, y los resultados son siempre positivos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Reglas para Determinar Correctitud en Ca2:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Si V=1 y C=1 en ADD, el resultado es incorrecto.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Si B=1 o V=1 en SUB, el resultado es incorrecto.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estas reglas son útiles para verificar la correctitud de las operaciones sin necesidad de convertir los resultados al sistema decimal, asegurando precisión en las operaciones binarias con punto fraccionario.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 14&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/82d83bbb-53e4-43c7-9eef-2badf6648e57&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Vamos a considerar todas las cadenas posibles en los sistemas BSS, BCS, Ca1, Ca2, y Exceso2, restringidos a 4 bits. Además, vamos a considerar el punto fijo en cada una de todas las posiciones posibles y obtener el rango y resolución de cada uno de los sistemas.&lt;/p&gt;
&lt;h4&gt;Sistema BSS (Binario Sin Signo)&lt;/h4&gt;
&lt;p&gt;En BSS, todos los números son positivos. Con 4 bits, los valores posibles son de 0 a 15.&lt;/p&gt;
&lt;h4&gt;Posiciones del Punto Fijo:&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;A la izquierda del MSB (X.XXX):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Valores: &lt;code&gt;0.000&lt;/code&gt;, &lt;code&gt;0.001&lt;/code&gt;, &lt;code&gt;0.010&lt;/code&gt;, ..., &lt;code&gt;1.111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rango: 0 a 1.875&lt;/li&gt;
&lt;li&gt;Resolución: 0.125&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Entre el MSB y el segundo bit (XX.XX):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Valores: &lt;code&gt;00.00&lt;/code&gt;, &lt;code&gt;00.01&lt;/code&gt;, &lt;code&gt;00.10&lt;/code&gt;, ..., &lt;code&gt;11.11&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rango: 0 a 3.75&lt;/li&gt;
&lt;li&gt;Resolución: 0.25&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Entre el segundo y tercer bit (XXX.X):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Valores: &lt;code&gt;000.0&lt;/code&gt;, &lt;code&gt;000.1&lt;/code&gt;, &lt;code&gt;001.0&lt;/code&gt;, ..., &lt;code&gt;111.1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rango: 0 a 7.5&lt;/li&gt;
&lt;li&gt;Resolución: 0.5&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Entre el tercer y cuarto bit (XXXX.):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Valores: &lt;code&gt;0000.&lt;/code&gt;, &lt;code&gt;0001.&lt;/code&gt;, &lt;code&gt;0010.&lt;/code&gt;, ..., &lt;code&gt;1111.&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rango: 0 a 15&lt;/li&gt;
&lt;li&gt;Resolución: 1&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;A la derecha del LSB (XXXX0):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Valores: &lt;code&gt;00000&lt;/code&gt;, &lt;code&gt;00001&lt;/code&gt;, &lt;code&gt;00010&lt;/code&gt;, ..., &lt;code&gt;11111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rango: 0 a 30&lt;/li&gt;
&lt;li&gt;Resolución: 2&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Sistema BCS (Binario Complemento de Signo)&lt;/h4&gt;
&lt;p&gt;En BCS, el bit más significativo es el bit de signo. Con 4 bits, los valores posibles van de -8 a 7.&lt;/p&gt;
&lt;h4&gt;Posiciones del Punto Fijo:&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;A la izquierda del MSB (X.XXX):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Valores: &lt;code&gt;0.000&lt;/code&gt;, &lt;code&gt;0.001&lt;/code&gt;, &lt;code&gt;0.010&lt;/code&gt;, ..., &lt;code&gt;1.111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rango: -1 a 0.875&lt;/li&gt;
&lt;li&gt;Resolución: 0.125&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Entre el MSB y el segundo bit (XX.XX):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Valores: &lt;code&gt;00.00&lt;/code&gt;, &lt;code&gt;00.01&lt;/code&gt;, &lt;code&gt;00.10&lt;/code&gt;, ..., &lt;code&gt;11.11&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rango: -2 a 1.75&lt;/li&gt;
&lt;li&gt;Resolución: 0.25&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Entre el segundo y tercer bit (XXX.X):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Valores: &lt;code&gt;000.0&lt;/code&gt;, &lt;code&gt;000.1&lt;/code&gt;, &lt;code&gt;001.0&lt;/code&gt;, ..., &lt;code&gt;111.1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rango: -4 a 3.5&lt;/li&gt;
&lt;li&gt;Resolución: 0.5&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Entre el tercer y cuarto bit (XXXX.):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Valores: &lt;code&gt;0000.&lt;/code&gt;, &lt;code&gt;0001.&lt;/code&gt;, &lt;code&gt;0010.&lt;/code&gt;, ..., &lt;code&gt;1111.&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rango: -8 a 7&lt;/li&gt;
&lt;li&gt;Resolución: 1&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;A la derecha del LSB (XXXX0):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Valores: &lt;code&gt;00000&lt;/code&gt;, &lt;code&gt;00001&lt;/code&gt;, &lt;code&gt;00010&lt;/code&gt;, ..., &lt;code&gt;11111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rango: -16 a 14&lt;/li&gt;
&lt;li&gt;Resolución: 2&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Sistema Ca1 (Complemento a 1)&lt;/h4&gt;
&lt;p&gt;En Ca1, los valores negativos se obtienen invirtiendo todos los bits del número en BCS.&lt;/p&gt;
&lt;h4&gt;Posiciones del Punto Fijo:&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;A la izquierda del MSB (X.XXX):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Valores: &lt;code&gt;0.000&lt;/code&gt;, &lt;code&gt;0.001&lt;/code&gt;, &lt;code&gt;0.010&lt;/code&gt;, ..., &lt;code&gt;1.111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rango: -1 a 0.875&lt;/li&gt;
&lt;li&gt;Resolución: 0.125&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Entre el MSB y el segundo bit (XX.XX):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Valores: &lt;code&gt;00.00&lt;/code&gt;, &lt;code&gt;00.01&lt;/code&gt;, &lt;code&gt;00.10&lt;/code&gt;, ..., &lt;code&gt;11.11&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rango: -2 a 1.75&lt;/li&gt;
&lt;li&gt;Resolución: 0.25&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Entre el segundo y tercer bit (XXX.X):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Valores: &lt;code&gt;000.0&lt;/code&gt;, &lt;code&gt;000.1&lt;/code&gt;, &lt;code&gt;001.0&lt;/code&gt;, ..., &lt;code&gt;111.1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rango: -4 a 3.5&lt;/li&gt;
&lt;li&gt;Resolución: 0.5&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Entre el tercer y cuarto bit (XXXX.):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Valores: &lt;code&gt;0000.&lt;/code&gt;, &lt;code&gt;0001.&lt;/code&gt;, &lt;code&gt;0010.&lt;/code&gt;, ..., &lt;code&gt;1111.&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rango: -8 a 7&lt;/li&gt;
&lt;li&gt;Resolución: 1&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;A la derecha del LSB (XXXX0):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Valores: &lt;code&gt;00000&lt;/code&gt;, &lt;code&gt;00001&lt;/code&gt;, &lt;code&gt;00010&lt;/code&gt;, ..., &lt;code&gt;11111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rango: -16 a 14&lt;/li&gt;
&lt;li&gt;Resolución: 2&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Sistema Ca2 (Complemento a 2)&lt;/h4&gt;
&lt;p&gt;En Ca2, los valores negativos se obtienen sumando 1 al complemento a 1 del número.&lt;/p&gt;
&lt;h4&gt;Posiciones del Punto Fijo:&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;A la izquierda del MSB (X.XXX):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Valores: &lt;code&gt;0.000&lt;/code&gt;, &lt;code&gt;0.001&lt;/code&gt;, &lt;code&gt;0.010&lt;/code&gt;, ..., &lt;code&gt;1.111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rango: -1 a 0.875&lt;/li&gt;
&lt;li&gt;Resolución: 0.125&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Entre el MSB y el segundo bit (XX.XX):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Valores: &lt;code&gt;00.00&lt;/code&gt;, &lt;code&gt;00.01&lt;/code&gt;, &lt;code&gt;00.10&lt;/code&gt;, ..., &lt;code&gt;11.11&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rango: -2 a 1.75&lt;/li&gt;
&lt;li&gt;Resolución: 0.25&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Entre el segundo y tercer bit (XXX.X):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Valores: &lt;code&gt;000.0&lt;/code&gt;, &lt;code&gt;000.1&lt;/code&gt;, &lt;code&gt;001.0&lt;/code&gt;, ..., &lt;code&gt;111.1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rango: -4 a 3.5&lt;/li&gt;
&lt;li&gt;Resolución: 0.5&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Entre el tercer y cuarto bit (XXXX.):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Valores: &lt;code&gt;0000.&lt;/code&gt;, &lt;code&gt;0001.&lt;/code&gt;, &lt;code&gt;0010.&lt;/code&gt;, ..., &lt;code&gt;1111.&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rango: -8 a 7&lt;/li&gt;
&lt;li&gt;Resolución: 1&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;A la derecha del LSB (XXXX0):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Valores: &lt;code&gt;00000&lt;/code&gt;, &lt;code&gt;00001&lt;/code&gt;, &lt;code&gt;00010&lt;/code&gt;, ..., &lt;code&gt;11111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rango: -16 a 14&lt;/li&gt;
&lt;li&gt;Resolución: 2&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Sistema Exceso2&lt;/h4&gt;
&lt;p&gt;En Exceso2, se suma un exceso (en n bits será (2^{n-1})) y luego se representa como BSS.&lt;/p&gt;
&lt;h4&gt;Posiciones del Punto Fijo:&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;A la izquierda del MSB (X.XXX):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Valores: &lt;code&gt;0.000&lt;/code&gt;, &lt;code&gt;0.001&lt;/code&gt;, &lt;code&gt;0.010&lt;/code&gt;, ..., &lt;code&gt;1.111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rango: -0.5 a 1.375&lt;/li&gt;
&lt;li&gt;Resolución: 0.125&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Entre el MSB y el segundo bit (XX.XX):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Valores: &lt;code&gt;00.00&lt;/code&gt;, &lt;code&gt;00.01&lt;/code&gt;, &lt;code&gt;00.10&lt;/code&gt;, ..., &lt;code&gt;11.11&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rango: -1 a 3.25&lt;/li&gt;
&lt;li&gt;Resolución: 0.25&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Entre el segundo y tercer bit (XXX.X):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Valores: &lt;code&gt;000.0&lt;/code&gt;, &lt;code&gt;000.1&lt;/code&gt;, &lt;code&gt;001.0&lt;/code&gt;, ..., &lt;code&gt;111.1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rango: -2 a 7&lt;/li&gt;
&lt;li&gt;Resolución: 0.5&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Entre el tercer y cuarto bit (XXXX.):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Valores: &lt;code&gt;0000.&lt;/code&gt;, &lt;code&gt;0001.&lt;/code&gt;, &lt;code&gt;0010.&lt;/code&gt;, ..., &lt;code&gt;1111.&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rango: -4 a 15&lt;/li&gt;
&lt;li&gt;Resolución: 1&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;A la derecha del LSB (XXXX0):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Valores: &lt;code&gt;00000&lt;/code&gt;, &lt;code&gt;00001&lt;/code&gt;, &lt;code&gt;00010&lt;/code&gt;, ..., &lt;code&gt;11111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rango: -8 a 30&lt;/li&gt;
&lt;li&gt;Resolución: 2&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Resumen&lt;/h4&gt;
&lt;p&gt;| Sistema | Posición del Punto | Rango             | Resolución |
|---------|---------------------|-------------------|------------|
| BSS     | X.XXX               | 0 a 1.875         | 0.125      |
|         | XX.XX               | 0 a 3.75          | 0.25       |
|         | XXX.X               | 0 a 7.5           | 0.5        |
|         | XXXX.               | 0 a 15            | 1          |
|         | XXXX0               | 0 a 30            | 2          |
| BCS     | X.XXX               | -1 a 0.875        | 0.125      |
|         | XX.XX               | -2 a 1.75         | 0.25       |
|         | XXX.X               | -4 a 3.5          | 0.5        |
|         | XXXX.               | -8 a 7            | 1          |
|         | XXXX0               | -16 a 14          | 2          |
| Ca1     | X.XXX               | -1 a 0&lt;/p&gt;
&lt;p&gt;.875        | 0.125      |
|         | XX.XX               | -2 a 1.75         | 0.25       |
|         | XXX.X               | -4 a 3.5          | 0.5        |
|         | XXXX.               | -8 a 7            | 1          |
|         | XXXX0               | -16 a 14          | 2          |
| Ca2     | X.XXX               | -1 a 0.875        | 0.125      |
|         | XX.XX               | -2 a 1.75         | 0.25       |
|         | XXX.X               | -4 a 3.5          | 0.5        |
|         | XXXX.               | -8 a 7            | 1          |
|         | XXXX0               | -16 a 14          | 2          |
| Exceso2 | X.XXX               | -0.5 a 1.375      | 0.125      |
|         | XX.XX               | -1 a 3.25         | 0.25       |
|         | XXX.X               | -2 a 7            | 0.5        |
|         | XXXX.               | -4 a 15           | 1          |
|         | XXXX0               | -8 a 30           | 2          |&lt;/p&gt;
&lt;h4&gt;Conclusión&lt;/h4&gt;
&lt;p&gt;Cada sistema tiene su propio rango y resolución dependiendo de la posición del punto fijo. La cantidad de cadenas y los números que se pueden representar varían según el sistema y la posición del punto fijo. En general, mientras más a la derecha se encuentre el punto fijo, mayor es el rango y menor la resolución, y viceversa.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 15&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/2026bf7c-1f36-43ff-95f1-180c836b0bc2&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/6c8e0f12-899e-4279-985f-be754c10f44f&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/user-attachments/assets/82d05a69-6de9-41ac-9599-79d807c2ee43&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/user-attachments/assets/eb5a09db-3836-4474-aefa-cb8a2c4d7dd5&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 16&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/dfe4c75d-0090-4d17-b5d8-3be27c417d84&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Mecanismos para Sumar y Restar en BCS, Ca1 y Exceso&lt;/h4&gt;
&lt;p&gt;Para abordar este problema, vamos a describir los mecanismos para realizar operaciones de suma y resta en los sistemas BCS (Binario Complemento de Signo), Ca1 (Complemento a 1) y Exceso, utilizando el análisis de los resultados y flags del punto 9.&lt;/p&gt;
&lt;h4&gt;Sistema BCS (Binario Complemento de Signo)&lt;/h4&gt;
&lt;p&gt;En BCS, el bit más significativo (MSB) se utiliza como bit de signo: 0 para positivo y 1 para negativo. Las operaciones aritméticas deben considerar este bit de signo para obtener resultados correctos.&lt;/p&gt;
&lt;h4&gt;Suma en BCS:&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Interprete los operandos:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si el MSB es 0, el número es positivo.&lt;/li&gt;
&lt;li&gt;Si el MSB es 1, el número es negativo.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Realice la suma binaria normal de los operandos.&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Determine los flags:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Carry (C):&lt;/strong&gt; Indica acarreo fuera del bit más significativo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overflow (V):&lt;/strong&gt; Se produce si hay un cambio de signo incorrecto.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero (Z):&lt;/strong&gt; El resultado es cero.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Negative (N):&lt;/strong&gt; El resultado es negativo.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Corrija el resultado si es necesario, considerando los flags.&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Resta en BCS:&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Interprete los operandos.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Convierta la resta a suma del complemento:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Resta (A - B) se convierte en (A + (-B)).&lt;/li&gt;
&lt;li&gt;Encuentre el complemento a 2 de B y sume a A.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Determine los flags.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Corrija el resultado si es necesario.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Sistema Ca1 (Complemento a 1)&lt;/h4&gt;
&lt;p&gt;En Ca1, el complemento a 1 de un número se obtiene invirtiendo todos los bits.&lt;/p&gt;
&lt;h4&gt;Suma en Ca1:&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Interprete los operandos.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Realice la suma binaria normal de los operandos.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Determine los flags.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Corrija el resultado si es necesario, añadiendo 1 si hay un acarreo fuera del MSB.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Resta en Ca1:&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Interprete los operandos.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Convierta la resta a suma del complemento:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Resta (A - B) se convierte en (A + (-B)).&lt;/li&gt;
&lt;li&gt;Encuentre el complemento a 1 de B y sume a A.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Determine los flags.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Corrija el resultado si es necesario.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Sistema Exceso&lt;/h4&gt;
&lt;p&gt;En el sistema Exceso, un valor de exceso se suma a cada número para obtener su representación binaria.&lt;/p&gt;
&lt;h4&gt;Suma en Exceso:&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Convierta los números del formato Exceso a formato binario.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Realice la suma binaria normal de los operandos.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ajuste el resultado sumando el valor del exceso.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Determine los flags.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Resta en Exceso:&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Convierta los números del formato Exceso a formato binario.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Convierta la resta a suma del complemento:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Resta A - B se convierte en A + (-B).&lt;/li&gt;
&lt;li&gt;Encuentre el complemento a 2 de B y sume a A.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ajuste el resultado restando el valor del exceso.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Determine los flags.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Análisis de Resultados y Flags&lt;/h4&gt;
&lt;h4&gt;Operación de Ejemplo (ADD):&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ADD 01110000 11110001 (BCS)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Paso 1:&lt;/strong&gt; Interprete los operandos.
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;01110000&lt;/code&gt; (112)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;11110001&lt;/code&gt; (-15)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Paso 2:&lt;/strong&gt; Realice la suma binaria.
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;01110000&lt;/code&gt; + &lt;code&gt;11110001&lt;/code&gt; = &lt;code&gt;01100001&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Paso 3:&lt;/strong&gt; Determine los flags.
&lt;ul&gt;
&lt;li&gt;Carry=1, Zero=0, Negative=0, Overflow=1&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Paso 4:&lt;/strong&gt; Corrija el resultado si es necesario.
&lt;ul&gt;
&lt;li&gt;La suma es correcta, considerando los flags.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Operación de Ejemplo (SUB):&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SUB 10101110 01110010 (Ca1)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Paso 1:&lt;/strong&gt; Interprete los operandos.
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;10101110&lt;/code&gt; (-81)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;01110010&lt;/code&gt; (58)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Paso 2:&lt;/strong&gt; Convierta la resta a suma del complemento.
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;10101110&lt;/code&gt; + &lt;code&gt;10001101&lt;/code&gt; = &lt;code&gt;00111011&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Paso 3:&lt;/strong&gt; Determine los flags.
&lt;ul&gt;
&lt;li&gt;Borrow=0, Zero=0, Negative=0, Overflow=1&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Paso 4:&lt;/strong&gt; Corrija el resultado si es necesario.
&lt;ul&gt;
&lt;li&gt;La suma es correcta, considerando los flags.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Conclusiones&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BCS:&lt;/strong&gt; Utiliza el bit de signo para la representación y necesita manejar correctamente el overflow y carry.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ca1:&lt;/strong&gt; Requiere la inversión de todos los bits para representar números negativos y puede necesitar un ajuste adicional en la suma.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exceso:&lt;/strong&gt; Involucra un ajuste de exceso para representar los números y necesita correctas conversiones antes y después de las operaciones.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Reglas para Determinar Correctitud:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Suma en BCS y Ca1:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si V=1 y C=1, el resultado es incorrecto.&lt;/li&gt;
&lt;li&gt;Si V=0 y C=0, el resultado es correcto.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Resta en BCS y Ca1:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si B=1 o V=1, el resultado es incorrecto.&lt;/li&gt;
&lt;li&gt;Si B=0 y V=0, el resultado es correcto.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Aplicar estas reglas permite verificar la correctitud de las operaciones sin necesidad de convertir los resultados al sistema decimal.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 17&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/24063b1a-2ab9-4b84-a4b9-3412471510b4&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/51f3ea13-5999-41e2-badc-ebf595404648&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/user-attachments/assets/9cdf0d4a-fed7-441d-8969-c1ec5e9dbbf5&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;El análisis demuestra cómo el sistema de complemento a 2 maneja la representación y el cálculo de números negativos y el caso especial del valor más negativo posible.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 18&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/8939f4fd-9d60-4e60-9c04-ed2334abe726&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Practica 2&lt;/h1&gt;
&lt;h3&gt;Ejercicio 1&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/e5348778-0e64-42f3-868c-27b765730349&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 2&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/cb3e3ce9-11d4-4df6-a0b3-5597efaddabc&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 3&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/129a4526-d2b5-4a22-b9fc-2fb83892443f&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 4&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/513febba-d1ca-4ad5-a2d6-c3cb58701075&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 5&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/8d6916c2-a1b4-4387-b74a-76612ef39fb9&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 6&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/8f4f62df-221c-4d8b-aa26-15accfe3e7d9&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 7&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/b2999b08-b326-4c6d-96e8-fbcf54145e55&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 8&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/862ca2dc-db39-40e3-bab7-cf196ffb039f&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 9&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/200ed8a9-aded-405a-ae05-62b8a1e59ded&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 10&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/69387310-0d87-4b01-8e2f-a6f2a942deed&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 11&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/f742fd5f-926c-4745-befd-6d6f585a04ec&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 12&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/c09a3592-3221-41f4-aa9c-f66672bef3dd&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Ejercicio 13&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/5ed26cef-a1e4-46dd-9f21-1e6da469a7be&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Finales Echos por mi&lt;/h3&gt;
&lt;h1&gt;Final 1&lt;/h1&gt;
&lt;h4&gt;Ejercicio 1&lt;/h4&gt;
&lt;p&gt;Dado un sistema en punto flotante con 6 bits de mantisa fraccionaria normalizada en BCS y exponente de 4 bits en exceso 8 (en ese orden de izq a der)&lt;/p&gt;
&lt;p&gt;&lt;code&gt;a) ¿Cuál es el valor del minimo positivo representable en ese sistema?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/a1077c78-fafe-448f-b473-32b864cb8576&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;b) Representante en punto flotante el número decimal 32.25&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/00259749-a119-4092-ab2d-1ccc45429af1&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Ejercicio 2&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;a) ¿Cuáles son las 3 formas que se pueden utilizar para representar una función lógica?&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tablas de Verdad:
&lt;ul&gt;
&lt;li&gt;Una tabla de verdad es una representación tabular que muestra todas las posibles combinaciones de las entradas a una función lógica y los correspondientes resultados de salida. Cada fila de la tabla representa una combinación única de las entradas y su resultado de salida asociado.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Diagramas de Circuitos Lógicos:
&lt;ul&gt;
&lt;li&gt;Los diagramas de circuitos lógicos son representaciones gráficas de una función lógica usando compuertas lógicas. Estos diagramas muestran cómo se conectan las compuertas lógicas (AND, OR, NOT, NAND, NOR, XOR, etc.) para realizar una operación lógica específica. Cada compuerta tiene un símbolo estándar y las conexiones entre ellas indican el flujo de las señales lógicas.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ecuaciones Booleanas:
&lt;ul&gt;
&lt;li&gt;Las ecuaciones booleanas usan álgebra booleana para representar una función lógica. Estas ecuaciones describen la relación entre las variables de entrada y la salida usando operadores booleanos como AND (multiplicación), OR (suma), y NOT (complemento). Las expresiones booleanas se pueden simplificar usando las leyes del álgebra booleana para optimizar el diseño del circuito.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;b) Describa el método de diseño de circuitos de circuitos lógicos combinacionales denominado &quot;Suma de productos&quot;.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=59DOU2mzdgE&quot;&gt;Video Explicativo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/338488b6-a8ec-4b33-8503-c154cd9b00af&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/6466a38d-d59e-417d-8d6e-360f94b4c826&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/user-attachments/assets/88691704-f797-4467-81db-e6a6af4c8149&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/user-attachments/assets/8119d5f9-fff2-42f3-a1b0-121061e35054&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Resumen&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tablas de Verdad&lt;/strong&gt;: Enumeran todas las combinaciones de entradas y salidas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diagramas de Circuitos Lógicos&lt;/strong&gt;: Utilizan compuertas lógicas para representar visualmente la función.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ecuaciones Booleanas&lt;/strong&gt;: Describen la función lógica usando operadores booleanos.
El método SOP garantiza que todas las combinaciones de entradas que producen una salida &apos;1&apos; se representen en el circuito final, asegurando la correcta implementación de la función lógica.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Ejercicio 3&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;a) ¿Qué se representa con el formato de instrucción?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El formato de instrucción es una representación específica que define cómo se codifican las instrucciones dentro de una computadora. Incluye varios componentes clave que son necesarios para que la Unidad Central de Procesamiento (CPU) pueda interpretar y ejecutar las instrucciones correctamente. Los componentes principales del formato de instrucción suelen incluir:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Código de Operación (Opcode):&lt;/strong&gt; Este es un conjunto de bits que especifica la operación que debe realizar la CPU (por ejemplo, adición, sustracción, carga, almacenamiento, etc.). El opcode indica a la CPU qué tipo de instrucción se debe ejecutar.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Operando(s):&lt;/strong&gt; Estos son los datos sobre los cuales se debe realizar la operación especificada por el opcode. Los operandos pueden ser:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Inmediatos:&lt;/strong&gt; Valores constantes incluidos en la instrucción.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Registros:&lt;/strong&gt; Direcciones de registros internos de la CPU.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Direcciones de memoria:&lt;/strong&gt; Ubicaciones en la memoria donde se encuentran los datos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Modo de Direccionamiento:&lt;/strong&gt; Especifica cómo se deben interpretar los operandos. Hay varios modos de direccionamiento, como:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Directo:&lt;/strong&gt; La dirección del operando está explícitamente dada.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Indirecto:&lt;/strong&gt; La dirección del operando está en un registro o en otra dirección de memoria.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inmediato:&lt;/strong&gt; El operando está incluido en la instrucción.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Indexado:&lt;/strong&gt; La dirección del operando es calculada sumando un desplazamiento a un registro base.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Un ejemplo simplificado de una instrucción podría ser:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ADD R1, R2, R3
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Donde &lt;code&gt;ADD&lt;/code&gt; es el opcode que indica una operación de suma, y &lt;code&gt;R1&lt;/code&gt;, &lt;code&gt;R2&lt;/code&gt;, y &lt;code&gt;R3&lt;/code&gt; son los operandos que indican los registros que contienen los valores a sumar y donde se almacenará el resultado.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;b) Describa los pasos del ciclo de instrucción de un salto incondicional&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El ciclo de instrucción de un salto incondicional es el proceso que sigue la CPU para ejecutar una instrucción de salto que siempre se realiza sin condiciones. A continuación se detallan los pasos típicos de este ciclo:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Fetch (Búsqueda):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La CPU obtiene (fetch) la instrucción de salto desde la memoria. La dirección de la instrucción a ser buscada es indicada por el contador de programa (Program Counter, PC).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Decode (Decodificación):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La instrucción de salto obtenida es decodificada por la unidad de control de la CPU. Durante este paso, la CPU identifica que la instrucción es un salto incondicional y determina la dirección de salto (la dirección a la que se debe transferir el control).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Execution (Ejecución):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En el caso de un salto incondicional, la CPU simplemente carga la nueva dirección de la instrucción (especificada por la instrucción de salto) en el contador de programa (PC). Esto implica que la próxima instrucción a ser ejecutada no es la siguiente en secuencia, sino la instrucción ubicada en la dirección especificada por el salto.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Writeback (Escritura):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En un salto incondicional, generalmente no hay necesidad de una fase de escritura ya que no se está modificando el contenido de los registros o memoria, solo el valor del contador de programa (PC).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Increment Program Counter (Actualización del Contador de Programa):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Aunque en muchos ciclos de instrucción se incrementa el PC para apuntar a la siguiente instrucción, en un salto incondicional el PC es actualizado directamente con la dirección de salto especificada.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Ejemplo de Salto Incondicional&lt;/h4&gt;
&lt;p&gt;Supongamos que la instrucción de salto es &lt;code&gt;JMP 0x0040&lt;/code&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Fetch:&lt;/strong&gt; La CPU busca la instrucción &lt;code&gt;JMP 0x0040&lt;/code&gt; desde la memoria.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Decode:&lt;/strong&gt; La instrucción es decodificada y se identifica como un salto incondicional a la dirección &lt;code&gt;0x0040&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Execution:&lt;/strong&gt; La CPU actualiza el contador de programa (PC) con el valor &lt;code&gt;0x0040&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Writeback:&lt;/strong&gt; No se realiza ninguna operación de escritura adicional.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Increment Program Counter:&lt;/strong&gt; En este caso, el PC ya se ha actualizado con la dirección de salto, por lo que el ciclo de instrucción continuará con la nueva dirección en el siguiente ciclo.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Estos pasos aseguran que la CPU salte incondicionalmente a una nueva posición de memoria y continúe la ejecución desde allí.&lt;/p&gt;
&lt;h4&gt;Ejercicio 4&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;a) ¿Cuales son los valores típicos de tiempo de acceso a los niveles de una &quot;jerarquia de memoria&quot;?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La jerarquía de memoria en una computadora está diseñada para balancear la velocidad, costo y capacidad de almacenamiento. Cada nivel en la jerarquía tiene características diferentes en cuanto a estos aspectos. Aquí hay una lista de los niveles típicos de la jerarquía de memoria y sus tiempos de acceso aproximados:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Registros de la CPU:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tiempo de acceso: 1 ciclo de reloj de la CPU (menos de 1 nanosegundo, típicamente en el rango de picosegundos a nanosegundos).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Caché L1:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tiempo de acceso: 1-2 ciclos de reloj de la CPU (alrededor de 1-2 nanosegundos).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Caché L2:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tiempo de acceso: 3-10 ciclos de reloj de la CPU (aproximadamente 3-10 nanosegundos).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Caché L3:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tiempo de acceso: 10-20 ciclos de reloj de la CPU (aproximadamente 10-20 nanosegundos).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Memoria Principal (RAM, DRAM):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tiempo de acceso: 50-100 nanosegundos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Almacenamiento en estado sólido (SSD):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tiempo de acceso: 50-150 microsegundos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Disco Duro (HDD):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tiempo de acceso: 10-15 milisegundos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Memoria Secundaria (Cintas, almacenamiento en la nube, etc.):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tiempo de acceso: segundos a minutos, dependiendo de la tecnología y la ubicación.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;b) ¿Porque la organización 2 1/2D de memoria semiconductora requiere &apos;refresco&apos;?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La organización 2 1/2D de memoria semiconductora se refiere a un diseño en el que la memoria está estructurada en varios niveles (capas) y utiliza una técnica que permite una mayor densidad de almacenamiento. Este diseño es común en la memoria DRAM (Dynamic Random Access Memory). La razón por la que la memoria DRAM requiere &quot;refresco&quot; es fundamentalmente debido a la naturaleza de su tecnología de almacenamiento.&lt;/p&gt;
&lt;h4&gt;Funcionamiento de la DRAM&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Almacenamiento de Datos en Capacitores:&lt;/strong&gt; En la DRAM, cada bit de información se almacena en un pequeño capacitor. Un capacitor puede estar cargado (representando un bit &apos;1&apos;) o descargado (representando un bit &apos;0&apos;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pérdida de Carga:&lt;/strong&gt; Los capacitores en la DRAM no pueden retener su carga indefinidamente; la carga se fuga con el tiempo debido a la naturaleza de los materiales y las imperfecciones en los componentes electrónicos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Refresco de Datos:&lt;/strong&gt; Para evitar la pérdida de datos, cada bit de la DRAM debe ser refrescado periódicamente. Esto implica leer el estado del capacitor y luego reescribir el mismo valor para restaurar la carga completa.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Organización 2 1/2D y Necesidad de Refresco&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Alta Densidad de Almacenamiento:&lt;/strong&gt; La organización 2 1/2D permite almacenar una mayor cantidad de datos en un área más pequeña, lo que implica que hay más capacitores por unidad de área.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Más Capas y Mayor Integración:&lt;/strong&gt; Con más capas de almacenamiento y mayor integración, la complejidad del sistema aumenta y la tasa de fuga de los capacitores puede ser más pronunciada debido a la proximidad de los componentes y la interferencia potencial.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Refresco Periódico Necesario:&lt;/strong&gt; Debido a la fuga de carga en los capacitores, la memoria DRAM en una configuración 2 1/2D, al igual que cualquier DRAM, requiere ciclos de refresco periódicos para asegurar que los datos almacenados no se pierdan. Estos ciclos de refresco son gestionados por el controlador de memoria y ocurren cientos de veces por segundo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En resumen, la necesidad de refresco en la organización 2 1/2D de memoria semiconductora se debe a la naturaleza inherente de la tecnología DRAM, donde los datos se almacenan en capacitores que pierden su carga con el tiempo y deben ser periódicamente recargados para mantener la integridad de los datos almacenados.&lt;/p&gt;
&lt;h4&gt;Ejercicio 5&lt;/h4&gt;
&lt;p&gt;Una imagen de pantalla de 100 cm por 50 cm posee una resolución de 100 puntos por centimetro:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;a) ¿Cuántos bytes de memoria se necesitan para almacenar una imagen en True Color?&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Dimensiones de la imagen:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ancho: 100 cm&lt;/li&gt;
&lt;li&gt;Alto: 50 cm&lt;/li&gt;
&lt;li&gt;Resolución: 100 puntos por centímetro&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Calcular la resolución total de la imagen en píxeles:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ancho en píxeles: 100 cm * 100 puntos/cm = 10,000 píxeles&lt;/li&gt;
&lt;li&gt;Alto en píxeles: 50 cm * 100 puntos/cm = 5,000 píxeles&lt;/li&gt;
&lt;li&gt;Total de píxeles: 10,000 píxeles * 5,000 píxeles = 50,000,000 píxeles&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;True Color:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En True Color, cada píxel se representa con 24 bits (8 bits por canal para los colores rojo, verde y azul).&lt;/li&gt;
&lt;li&gt;Convertir 24 bits a bytes: 24 bits / 8 = 3 bytes por píxel&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Calcular la memoria total en bytes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Memoria total: 50,000,000 píxeles * 3 bytes/píxel = 150,000,000 bytes&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Por lo tanto, se necesitan 150,000,000 bytes de memoria para almacenar una imagen en True Color.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;b) Cuantas imágenes podria almacenar en esa memoría si la imagen a almacenar fuera monocromatica?&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Monocromática:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Una imagen monocromática (en blanco y negro) se representa con 1 bit por píxel.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Calcular la memoria necesaria para una imagen monocromática:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Memoria necesaria por píxel: 1 bit&lt;/li&gt;
&lt;li&gt;Convertir bits a bytes: 1 bit / 8 = 0.125 bytes por píxel&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Calcular la memoria total en bytes para una imagen monocromática:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Memoria total para una imagen: 50,000,000 píxeles * 0.125 bytes/píxel = 6,250,000 bytes&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Calcular el número de imágenes monocromáticas que se pueden almacenar:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Memoria disponible: 150,000,000 bytes (de la parte a)&lt;/li&gt;
&lt;li&gt;Número de imágenes: 150,000,000 bytes / 6,250,000 bytes/imagen = 24 imágenes&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Por lo tanto, en la misma cantidad de memoria, se podrían almacenar 24 imágenes monocromáticas.&lt;/p&gt;
&lt;h4&gt;Resumen&lt;/h4&gt;
&lt;p&gt;a) Se necesitan 150,000,000 bytes de memoria para almacenar una imagen en True Color.&lt;/p&gt;
&lt;p&gt;b) Se podrían almacenar 24 imágenes monocromáticas en esa misma memoria.&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Final 2 08-22&lt;/h1&gt;
&lt;h4&gt;Ejercicio 1&lt;/h4&gt;
&lt;p&gt;Dado un sistema en punto flotante con 6 bits de mantisa fraccionaria en BCS y exponente de 4 bits en exceso 8 (en ese orden de izq a der):&lt;/p&gt;
&lt;p&gt;&lt;code&gt;A) ¿Cuál es el rango de representación del sistema?.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Para determinar el rango de representación de un sistema en punto flotante, necesitamos entender cómo se representan tanto la mantisa como el exponente.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Mantisa fraccionaria en BCS (Binary Coded Sign):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La mantisa tiene 6 bits, con el formato 1.xxx...xx (donde x puede ser 0 o 1).&lt;/li&gt;
&lt;li&gt;Esto significa que la mantisa puede representar valores en el rango de 1 a 1.11111 en binario (equivalente a 1 a (2 - 2^-6) en decimal).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Exponente de 4 bits en exceso 8:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El exponente se representa con 4 bits en exceso 8.&lt;/li&gt;
&lt;li&gt;Esto significa que el exponente puede variar de 0000 a 1111 en binario, que en decimal representa de 0 a 15.&lt;/li&gt;
&lt;li&gt;En exceso 8, el exponente real se calcula restando 8. Por lo tanto, el exponente real varía de -8 a 7.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/41e47b50-255c-4ee8-9dd9-5f6e03c6df96&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;B) Represente en punto flotante el número decimal 322.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Para representar el número decimal 322 en el sistema de punto flotante dado:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/b64233cf-1970-4ca2-9614-f0c3a4138792&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Entonces, la representación en punto flotante del número 322 es:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;0 1111 010000&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Espero que esto ayude a resolver el ejercicio. Si tienes más preguntas o necesitas más aclaraciones, no dudes en decírmelo.&lt;/p&gt;
&lt;h4&gt;Ejercicio 2&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;A) ¿Cuáles son las 3 formas que se pueden utilizar para representar una función lógica?&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Tablas de Verdad:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Una tabla de verdad es una representación tabular que muestra todas las posibles combinaciones de las entradas a una función lógica y los correspondientes resultados de salida. Cada fila de la tabla representa una combinación única de las entradas y su resultado de salida asociado.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Diagramas de Circuitos Lógicos:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los diagramas de circuitos lógicos son representaciones gráficas de una función lógica utilizando compuertas lógicas. Estos diagramas muestran cómo se conectan las compuertas lógicas (AND, OR, NOT, NAND, NOR, XOR, etc.) para realizar una operación lógica específica. Cada compuerta tiene un símbolo estándar y las conexiones entre ellas indican el flujo de las señales lógicas.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ecuaciones Booleanas:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Las ecuaciones booleanas usan álgebra booleana para representar una función lógica. Estas ecuaciones describen la relación entre las variables de entrada y la salida usando operadores booleanos como AND (multiplicación), OR (suma), y NOT (complemento). Las expresiones booleanas se pueden simplificar usando las leyes del álgebra booleana para optimizar el diseño del circuito.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;B) Describa el método de diseño de circuitos lógicos combinacionales denominado &quot;Suma de productos&quot;.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El método de &quot;Suma de productos&quot; (SOP) es una técnica estándar en el diseño de circuitos lógicos combinacionales. Consiste en representar una función lógica como una suma (OR) de productos (AND) de variables de entrada. Aquí están los pasos generales para diseñar un circuito utilizando el método SOP:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/13980831-15a6-46dd-8a91-c7d7f7561df9&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Ejemplo&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/9e5b7876-a599-4507-899d-b650e7791986&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/user-attachments/assets/8f43452a-a5d7-4111-a2de-229424b38dae&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Ejercicio 3&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;A) ¿Qué es el ciclo de instrucción?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El ciclo de instrucción es el proceso que sigue una CPU para ejecutar una instrucción de un programa almacenado en la memoria. Este ciclo es repetitivo y se compone de varios pasos que incluyen la búsqueda (fetch), decodificación (decode), ejecución (execute) y escritura (write back) de las instrucciones. Cada ciclo de instrucción permite que la CPU lea una instrucción de la memoria, la interprete y realice la operación correspondiente.&lt;/p&gt;
&lt;p&gt;El ciclo de instrucción se puede descomponer en las siguientes fases:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Fetch (Búsqueda):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La CPU obtiene la instrucción desde la memoria. La dirección de la instrucción a ser buscada es indicada por el contador de programa (PC).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Decode (Decodificación):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La instrucción buscada es decodificada por la unidad de control de la CPU para determinar qué operación debe realizarse y qué operandos son necesarios.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Execute (Ejecución):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La CPU realiza la operación especificada por la instrucción utilizando los operandos apropiados. Esto puede incluir operaciones aritméticas, lógicas, de control, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Write Back (Escritura):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los resultados de la operación se almacenan en la memoria o en los registros de la CPU según lo especificado por la instrucción.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Increment Program Counter (Actualización del Contador de Programa):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El contador de programa (PC) se incrementa para apuntar a la siguiente instrucción a ser ejecutada en el ciclo siguiente.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;B) Describa los pasos del ciclo de instrucción de una operación aritmética.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Veamos los pasos del ciclo de instrucción para una operación aritmética, como una suma. Supongamos que tenemos una instrucción de suma &lt;code&gt;ADD R1, R2, R3&lt;/code&gt;, donde &lt;code&gt;R1&lt;/code&gt;, &lt;code&gt;R2&lt;/code&gt;, y &lt;code&gt;R3&lt;/code&gt; son registros de la CPU.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Fetch (Búsqueda):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La CPU busca la instrucción &lt;code&gt;ADD R1, R2, R3&lt;/code&gt; desde la memoria. La dirección de la instrucción a ser buscada es indicada por el contador de programa (PC).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Decode (Decodificación):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La unidad de control decodifica la instrucción &lt;code&gt;ADD R1, R2, R3&lt;/code&gt;. Se determina que la operación a realizar es una suma y que los operandos son los registros &lt;code&gt;R2&lt;/code&gt; y &lt;code&gt;R3&lt;/code&gt;, con el resultado que se almacenará en el registro &lt;code&gt;R1&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Fetch Operands (Búsqueda de Operandos):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La CPU busca los valores almacenados en los registros &lt;code&gt;R2&lt;/code&gt; y &lt;code&gt;R3&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Execute (Ejecución):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La unidad aritmético-lógica (ALU) de la CPU realiza la operación de suma utilizando los valores de &lt;code&gt;R2&lt;/code&gt; y &lt;code&gt;R3&lt;/code&gt;. Por ejemplo, si &lt;code&gt;R2&lt;/code&gt; tiene el valor 5 y &lt;code&gt;R3&lt;/code&gt; tiene el valor 10, la ALU suma estos valores para obtener el resultado 15.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Write Back (Escritura):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El resultado de la operación (15) se almacena en el registro &lt;code&gt;R1&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Increment Program Counter (Actualización del Contador de Programa):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El contador de programa (PC) se incrementa para apuntar a la siguiente instrucción a ser ejecutada.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Ejemplo Visual del Ciclo de Instrucción de una Suma&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Fetch:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;PC -&gt; Memory[PC] -&gt; Instruction Register (IR)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Instrucción: &lt;code&gt;ADD R1, R2, R3&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Decode:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;IR -&gt; Control Unit&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Control Unit decodifica &lt;code&gt;ADD&lt;/code&gt; y determina los operandos &lt;code&gt;R2&lt;/code&gt;, &lt;code&gt;R3&lt;/code&gt; y el destino &lt;code&gt;R1&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Fetch Operands:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;R2 -&gt; Operand 1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;R3 -&gt; Operand 2&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Execute:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ALU: Operand 1 + Operand 2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Resultado: 15&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Write Back:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Result (15) -&gt; R1&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Increment PC:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;PC + 1 -&gt; PC&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Este ciclo se repite para cada instrucción del programa, permitiendo que la CPU ejecute secuencialmente todas las instrucciones almacenadas en la memoria.&lt;/p&gt;
&lt;p&gt;Si necesitas más detalles o ejemplos específicos, no dudes en decírmelo.&lt;/p&gt;
&lt;h4&gt;Ejercicio 4&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;A) ¿Cómo está compuesta una &quot;jerarquía de memoria&quot;?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La jerarquía de memoria en una computadora está organizada en varios niveles que varían en velocidad, tamaño y costo. Cada nivel está diseñado para optimizar el rendimiento general del sistema al balancear estos factores. La jerarquía de memoria típica incluye los siguientes niveles, desde el más rápido y costoso hasta el más lento y económico:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Registros de la CPU:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los registros son la forma más rápida de memoria dentro del procesador. Son muy pequeños y se utilizan para almacenar datos temporales que la CPU necesita de inmediato.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Caché:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Caché L1:&lt;/strong&gt; Es la más rápida y está directamente integrada en el núcleo del procesador. Tiene una capacidad pequeña, típicamente entre 32KB y 256KB.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caché L2:&lt;/strong&gt; También está integrada en el procesador pero es más grande y ligeramente más lenta que la L1, con capacidades típicas entre 256KB y 2MB.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caché L3:&lt;/strong&gt; Puede estar compartida entre varios núcleos del procesador. Es más grande y más lenta que las cachés L1 y L2, con capacidades típicas entre 2MB y 64MB.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Memoria Principal (RAM):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La memoria RAM (DRAM) es más lenta que la caché, pero tiene una capacidad mucho mayor, típicamente en el rango de gigabytes (GB). Se utiliza para almacenar datos y programas que están siendo utilizados activamente por el sistema.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Almacenamiento Secundario:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Discos Duros (HDD) y Unidades de Estado Sólido (SSD):&lt;/strong&gt; Estos dispositivos de almacenamiento son mucho más lentos que la memoria RAM, pero tienen una capacidad mucho mayor, en el rango de terabytes (TB). Se utilizan para almacenar datos y programas a largo plazo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memoria Externa (cintas, almacenamiento en la nube, etc.):&lt;/strong&gt; Estos son los medios de almacenamiento más lentos pero también los más grandes y económicos. Se utilizan para copias de seguridad y almacenamiento de archivos que no se necesitan con frecuencia.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;B) ¿Porqué la organización 2D de memoria semicondutora NO requiere &apos;refresco&apos;? &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La organización 2D de memoria semiconductora generalmente se refiere a la memoria &lt;strong&gt;SRAM (Static Random Access Memory)&lt;/strong&gt;, en contraste con la memoria &lt;strong&gt;DRAM (Dynamic Random Access Memory)&lt;/strong&gt;, que suele utilizar una organización más compleja (a veces denominada 2.5D o 3D debido a las múltiples capas de almacenamiento).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SRAM (2D) vs DRAM (2.5D o 3D):&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SRAM:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Celdas de Memoria:&lt;/strong&gt; Las celdas de memoria SRAM están compuestas por flip-flops, que son circuitos de almacenamiento estático formados por transistores.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Estabilidad:&lt;/strong&gt; Una vez que los flip-flops almacenan un bit de información (0 o 1), mantienen su estado sin necesidad de ser refrescados periódicamente mientras haya alimentación eléctrica.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Velocidad y Consumo:&lt;/strong&gt; La SRAM es muy rápida y consume menos energía en estado activo, pero es más costosa y tiene menor densidad de almacenamiento en comparación con la DRAM.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;DRAM:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Celdas de Memoria:&lt;/strong&gt; Las celdas de memoria DRAM están formadas por un transistor y un capacitor. El capacitor almacena la carga eléctrica que representa el bit de información.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pérdida de Carga:&lt;/strong&gt; Los capacitores pierden su carga con el tiempo debido a la fuga eléctrica, lo que significa que la información almacenada en una celda DRAM se degrada rápidamente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Refresco Necesario:&lt;/strong&gt; Para evitar la pérdida de datos, cada bit en la DRAM debe ser refrescado periódicamente, lo que implica leer y reescribir el contenido del capacitor. Este proceso de refresco consume tiempo y energía adicionales.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Conclusión:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SRAM (Organización 2D):&lt;/strong&gt; No requiere refresco porque utiliza flip-flops que mantienen su estado de manera estable mientras haya energía. La organización 2D en SRAM es suficiente para mantener los datos sin necesidad de refresco periódico.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DRAM (Organización 2.5D o 3D):&lt;/strong&gt; Requiere refresco debido a la naturaleza de los capacitores que pierden carga con el tiempo. La organización 2.5D o 3D en DRAM permite una mayor densidad de almacenamiento, pero a costa de la necesidad de refrescar los datos periódicamente.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por lo tanto, la organización 2D de memoria semiconductora (SRAM) no requiere refresco porque las celdas de memoria estática (flip-flops) mantienen su estado sin necesidad de intervención adicional.&lt;/p&gt;
&lt;h4&gt;Ejercicio 5&lt;/h4&gt;
&lt;p&gt;Una imagen en una pantalla de 100 cm por 50 cm posee una resolución de 100 puntos por centímetro:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;A) ¿Cuántos bytes de memoria se necesitan para almacenar una imagen en True Color?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Para calcular cuántos bytes de memoria se necesitan para almacenar una imagen en True Color, seguimos estos pasos:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Dimensiones de la imagen:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ancho: 100 cm&lt;/li&gt;
&lt;li&gt;Alto: 50 cm&lt;/li&gt;
&lt;li&gt;Resolución: 100 puntos por centímetro&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Calcular la resolución total de la imagen en píxeles:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ancho en píxeles: 100 cm * 100 puntos/cm = 10,000 píxeles&lt;/li&gt;
&lt;li&gt;Alto en píxeles: 50 cm * 100 puntos/cm = 5,000 píxeles&lt;/li&gt;
&lt;li&gt;Total de píxeles: 10,000 píxeles * 5,000 píxeles = 50,000,000 píxeles&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;True Color:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En True Color, cada píxel se representa con 24 bits (8 bits por canal para los colores rojo, verde y azul).&lt;/li&gt;
&lt;li&gt;Convertir 24 bits a bytes: 24 bits / 8 = 3 bytes por píxel&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Calcular la memoria total en bytes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Memoria total: 50,000,000 píxeles * 3 bytes/píxel = 150,000,000 bytes&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Por lo tanto, se necesitan 150,000,000 bytes de memoria para almacenar una imagen en True Color.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;B) ¿Cuántas imágenes podría almacenar en esa memoria si la imagen a almacenar fuera &apos;monocromática&apos;?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Para calcular cuántas imágenes monocromáticas se pueden almacenar en la misma cantidad de memoria, seguimos estos pasos:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Monocromática:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Una imagen monocromática (en blanco y negro) se representa con 1 bit por píxel.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Calcular la memoria necesaria para una imagen monocromática:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Memoria necesaria por píxel: 1 bit&lt;/li&gt;
&lt;li&gt;Convertir bits a bytes: 1 bit / 8 = 0.125 bytes por píxel&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Calcular la memoria total en bytes para una imagen monocromática:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Memoria total para una imagen: 50,000,000 píxeles * 0.125 bytes/píxel = 6,250,000 bytes&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Calcular el número de imágenes monocromáticas que se pueden almacenar:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Memoria disponible: 150,000,000 bytes (de la parte a)&lt;/li&gt;
&lt;li&gt;Número de imágenes: 150,000,000 bytes / 6,250,000 bytes/imagen = 24 imágenes&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Por lo tanto, en la misma cantidad de memoria, se podrían almacenar 24 imágenes monocromáticas.&lt;/p&gt;
&lt;h4&gt;Resumen&lt;/h4&gt;
&lt;p&gt;A) Se necesitan 150,000,000 bytes de memoria para almacenar una imagen en True Color.&lt;/p&gt;
&lt;p&gt;B) Se podrían almacenar 24 imágenes monocromáticas en esa misma memoria.&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Final 3 sin fecha&lt;/h1&gt;
&lt;h4&gt;Ejercicio 1&lt;/h4&gt;
&lt;p&gt;4186H (en hexadecimal) punto flotante 8 bits mantisa BCS y bit implícito y exponente 8 bits en exceso 128 (de izq a der)&lt;/p&gt;
&lt;p&gt;&lt;code&gt;a) Determine el valor decimal representado&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/690377fd-5232-484b-b512-adab79f90550&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/user-attachments/assets/3d6ad683-fbbe-4cb9-9eb5-bb23818a99a0&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;b) Calcule el error absoluto máximo&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/757bff0f-a6e6-4239-950d-b5c09776dad9&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Ejercicio 2&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;¿Qué es una puerta lógica?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/f8d9ad37-e3ae-4521-ae21-d8d0098d0f14&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Describa el circuito lógico secuencial &quot;Biestable RS&quot;.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/df5b5e43-75b0-4a29-a1a1-1c0fe78e2116&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Realice la tabla de comportamiento y un gráfico de interconexión de puertas lógicas que lo represente&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/d430bed7-c12d-45fe-b0bb-f0db69c485ad&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/user-attachments/assets/f7f377f4-9c2e-4eeb-8daa-9c5afe3d5923&quot; alt=&quot;image&quot;&gt;
&lt;img src=&quot;https://github.com/user-attachments/assets/cb8881e4-73ed-4abc-b695-1be4ec8fcf78&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Ejercicio 3&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;¿Qué es un ciclo de instrucción?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El ciclo de instrucción es el proceso completo que sigue una CPU para ejecutar una instrucción de un programa almacenado en la memoria. Este ciclo es repetitivo y consta de varias fases, cada una de las cuales realiza una tarea específica para procesar y ejecutar una instrucción. Las fases del ciclo de instrucción son:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Fetch (Búsqueda):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La CPU obtiene la instrucción desde la memoria. La dirección de la instrucción a ser buscada es indicada por el contador de programa (PC).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Decode (Decodificación):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La instrucción buscada es decodificada por la unidad de control de la CPU. En esta fase, se determina qué operación debe realizarse y cuáles son los operandos necesarios.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Execute (Ejecución):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La CPU realiza la operación especificada por la instrucción utilizando los operandos apropiados. Esto puede incluir operaciones aritméticas, lógicas, de control, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Write Back (Escritura):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los resultados de la operación se almacenan en la memoria o en los registros de la CPU según lo especificado por la instrucción.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Increment Program Counter (Actualización del Contador de Programa):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El contador de programa (PC) se incrementa para apuntar a la siguiente instrucción a ser ejecutada en el ciclo siguiente.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Estas fases se repiten continuamente mientras el programa está en ejecución, permitiendo que la CPU ejecute secuencialmente todas las instrucciones almacenadas en la memoria.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Describa el funcionamiento del modo de direccionamiento indirecto vía registro con desplazamiento&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El modo de direccionamiento indirecto vía registro con desplazamiento es una técnica utilizada en la arquitectura de computadoras para acceder a datos en la memoria. Este modo de direccionamiento combina el uso de un registro base, un desplazamiento y la memoria principal para calcular la dirección efectiva del operando. Aquí está el funcionamiento detallado:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Registro Base:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Un registro en la CPU (por ejemplo, el registro base o el registro índice) contiene una dirección base. Este registro se utiliza como punto de partida para calcular la dirección efectiva del operando.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Desplazamiento:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Un valor constante (desplazamiento) se suma al valor contenido en el registro base para obtener la dirección efectiva. El desplazamiento puede ser positivo o negativo y se especifica en la instrucción.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Dirección Indirecta:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La dirección efectiva calculada en el paso anterior apunta a una ubicación en la memoria. En esta ubicación de memoria se encuentra la dirección real del operando.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Acceso al Operando:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La CPU utiliza la dirección real obtenida en el paso anterior para acceder al operando en la memoria.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Ejemplo de Funcionamiento&lt;/h4&gt;
&lt;p&gt;Supongamos que tenemos la siguiente instrucción en ensamblador:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;LOAD R1, [R2 + 10]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Donde &lt;code&gt;LOAD&lt;/code&gt; es la operación que carga un valor en el registro &lt;code&gt;R1&lt;/code&gt; desde la memoria.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Registro Base (&lt;code&gt;R2&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El registro &lt;code&gt;R2&lt;/code&gt; contiene la dirección base. Supongamos que &lt;code&gt;R2&lt;/code&gt; tiene el valor &lt;code&gt;1000&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Desplazamiento (&lt;code&gt;10&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El desplazamiento es &lt;code&gt;10&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Calcular la Dirección Efectiva:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dirección efectiva = Valor de &lt;code&gt;R2&lt;/code&gt; + Desplazamiento = &lt;code&gt;1000 + 10 = 1010&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Dirección Indirecta:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La dirección efectiva &lt;code&gt;1010&lt;/code&gt; apunta a una ubicación en la memoria. Supongamos que en la dirección &lt;code&gt;1010&lt;/code&gt; en la memoria se encuentra el valor &lt;code&gt;2000&lt;/code&gt;, que es la dirección real del operando.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Acceso al Operando:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La CPU utiliza la dirección real &lt;code&gt;2000&lt;/code&gt; para acceder al operando en la memoria. Supongamos que en la dirección &lt;code&gt;2000&lt;/code&gt; se encuentra el valor &lt;code&gt;50&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cargar el Operando:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El valor &lt;code&gt;50&lt;/code&gt; se carga en el registro &lt;code&gt;R1&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Tabla de Ejemplo&lt;/h4&gt;
&lt;p&gt;| Registro | Valor          |
|----------|----------------|
| R2       | 1000           |
| Mem[1010]| 2000 (Dirección real) |
| Mem[2000]| 50 (Valor del operando) |
| R1       | 50 (Después de LOAD)    |&lt;/p&gt;
&lt;h4&gt;Resumen&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ciclo de Instrucción:&lt;/strong&gt; Es el proceso completo que sigue una CPU para buscar, decodificar, ejecutar y escribir una instrucción de un programa.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Modo de Direccionamiento Indirecto Vía Registro con Desplazamiento:&lt;/strong&gt; Es un método que utiliza un registro base y un desplazamiento para calcular una dirección efectiva, la cual apunta a una dirección en memoria donde se encuentra la dirección real del operando. Este modo es útil para acceder a estructuras de datos como arreglos y tablas de manera eficiente.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Ejercicio 4&lt;/h4&gt;
&lt;p&gt;a) &lt;code&gt;Describa las características principales de la organización 2D de memoria semiconductora&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La organización 2D de memoria semiconductora se refiere a la disposición de celdas de memoria en una configuración bidimensional (filas y columnas) sobre un chip de silicio. Esta disposición es común en tecnologías de memoria como SRAM (Static Random Access Memory) y DRAM (Dynamic Random Access Memory). Las características principales son:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Disposición en Matriz:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Las celdas de memoria están organizadas en una matriz de filas y columnas, donde cada celda se encuentra en la intersección de una fila y una columna.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Acceso mediante Decodificadores:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La selección de una celda específica se realiza mediante decodificadores de fila y columna. El decodificador de fila selecciona una fila específica y el decodificador de columna selecciona una columna específica.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Tipos de Memoria:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SRAM:&lt;/strong&gt; Utiliza celdas de memoria basadas en flip-flops (generalmente 6 transistores por celda), lo que permite un acceso muy rápido y sin necesidad de refresco.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DRAM:&lt;/strong&gt; Utiliza celdas de memoria basadas en un transistor y un capacitor. Requiere refresco periódico para mantener la carga en el capacitor y, por lo tanto, los datos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Velocidad y Consumo de Energía:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SRAM:&lt;/strong&gt; Es más rápida y consume menos energía durante la operación activa, pero ocupa más espacio y es más costosa de fabricar debido al mayor número de transistores por celda.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DRAM:&lt;/strong&gt; Tiene una mayor densidad de almacenamiento y es más económica, pero es más lenta y requiere energía adicional para los ciclos de refresco.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Aplicaciones:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SRAM:&lt;/strong&gt; Utilizada en cachés de CPU y registros internos debido a su alta velocidad.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DRAM:&lt;/strong&gt; Utilizada como memoria principal (RAM) en computadoras debido a su alta densidad de almacenamiento y menor costo.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;b) &lt;code&gt;Realice el esquema del chip con esta organización&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Un esquema simplificado de un chip de memoria con organización 2D podría verse así:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-plaintext&quot;&gt;       Columna 0  Columna 1  Columna 2  ...  Columna N
       ---------------------------------------------
Fila 0 |  Celda  |  Celda  |  Celda  |  ...  |  Celda  |
       ---------------------------------------------
Fila 1 |  Celda  |  Celda  |  Celda  |  ...  |  Celda  |
       ---------------------------------------------
Fila 2 |  Celda  |  Celda  |  Celda  |  ...  |  Celda  |
       ---------------------------------------------
...    |  ...    |  ...    |  ...    |  ...  |  ...    |
       ---------------------------------------------
Fila M |  Celda  |  Celda  |  Celda  |  ...  |  Celda  |
       ---------------------------------------------
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cada &quot;Celda&quot; representa una celda de memoria que puede almacenar un bit de información (0 o 1).&lt;/p&gt;
&lt;p&gt;c) &lt;code&gt;Mencione valores típicos de capacidad de almacenamiento y de tiempo de acceso&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Capacidad de Almacenamiento:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SRAM:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Capacidades típicas varían desde unos pocos kilobytes (KB) hasta varios megabytes (MB). Ejemplos incluyen 32KB a 64MB.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DRAM:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Capacidades típicas varían desde 1 gigabyte (GB) hasta varios terabytes (TB). Ejemplos comunes son 4GB, 8GB, 16GB, y 32GB.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Tiempo de Acceso:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SRAM:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Muy rápida, con tiempos de acceso típicos en el rango de 1 a 10 nanosegundos (ns).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DRAM:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Más lenta que SRAM, con tiempos de acceso típicos en el rango de 50 a 100 nanosegundos (ns). Las memorias DRAM modernas (como DDR4) pueden tener latencias menores, pero aún así son más lentas que las SRAM.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Resumen&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Organización 2D de Memoria Semiconductora:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Disposición en matriz de celdas de memoria.&lt;/li&gt;
&lt;li&gt;Selección de fila y columna mediante decodificadores.&lt;/li&gt;
&lt;li&gt;Diferentes tecnologías como SRAM y DRAM con características específicas.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Esquema del Chip:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Disposición de filas y columnas con celdas de memoria en cada intersección.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Valores Típicos:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Capacidades de almacenamiento: Desde KB a MB para SRAM, y GB a TB para DRAM.&lt;/li&gt;
&lt;li&gt;Tiempos de acceso: 1-10 ns para SRAM, y 50-100 ns para DRAM.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Ejercicio 5&lt;/h4&gt;
&lt;p&gt;Un video musical monocromático de youtube dura 200 seg&lt;/p&gt;
&lt;p&gt;&lt;code&gt;a. Calcule cuántos bytes de memoria se necesitan para almacenar el video completo si cada imagen es de 800 x 500 px&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;b. ¿Cuál debería ser la velocidad de transferencia (en bytes/seg) si la imagen debe ser cambiada 25 veces en 1 seg?&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Final 4 11-22&lt;/h1&gt;
&lt;h4&gt;Ejercicio 1&lt;/h4&gt;
&lt;p&gt;Dado un sistema en punto flotante con 5 bits de mantisa en BCS con bit implicito y exponente de 5 bits en exceso 16 (en ese orden de izq a der):&lt;/p&gt;
&lt;p&gt;&lt;code&gt;A) ¿Cuál es el valor decimal del mínimo positivo representable por el sistema?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;B) Represente en el sistema de punto flotante dado el número decimal 2,625&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Ejercicio 2&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;¿Cuáles son las 3 funciones lógicas elementales y cómo las puede representar?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;b) Describa el método de diseño de circuitos lógicos combinacionales denominado &quot;Suma de productos&quot;&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Ejercicio 3&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;A) ¿Cómo es el formato de instrucción de una máquina de 3 direcciones?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;b) Describa la diferencia en los pasos del ciclo de instrucción de una instrucción SUB y una CMP&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Ejercicio 4&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;A) ¿Cuáles son los principios que rigen el funcionamiento de una &quot;jerarquía de memoría&quot;?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;b) ¿Porqué la organización 2 1/2D de memoria semiconductora utiliza 2 decodificadores?&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Ejercicio 5&lt;/h4&gt;
&lt;p&gt;Una imagen en una pantalla de 100cm por 50cm posee una resolución de 100 puntos por centímetro:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;a) ¿Cuántos bytes de memoria se necesitan para almacenar una imagen en True Color?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;b) ¿Cuántas imágenes &quot;monocromo&quot; se podrían almacenar en esa memoria?&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Final 5 Mesa febrero 2º llamado | 21/02/2022&lt;/h1&gt;
&lt;h4&gt;Ejercicio 1&lt;/h4&gt;
&lt;p&gt;Sistema de punto flotante 7 bits mantisa BCS y bit implícito y 8 bits exponente en exceso /128 (en ese orden de izq a der)&lt;/p&gt;
&lt;p&gt;&lt;code&gt;a) Representar tu número de alumno (sin el nro después de la barra &quot;/6&quot;).&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;b) Calcular error absoluto.&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Ejercicio 2&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;a) Las 3 formas que se pueden utilizar para representar una función lógica.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;b) Suma de productos.&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Ejercicio 3&lt;/h4&gt;
&lt;p&gt;Elementos que debe poseer una instrucción.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;b) Modo de direccionamiento utilizado en las instrucciones de salto condicional.&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Ejercicio 4&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;a) ¿Qué función debe cumplir un &quot;punto de memoria&quot;?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;b) ¿Por qué la organización 2/1D requiere refresco?&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Final 6 FEBRERO 2022 1ERA FECHA&lt;/h1&gt;
&lt;h4&gt;Ejercicio 1&lt;/h4&gt;
&lt;p&gt;Dado el número A188 en BCH donde 8 bits representan la mantisa en BCS con bit implícito y 8 bits para exponente en exceso 128.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;a) Calcular el valor en decimal.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;b) Calcular el error absoluto máximo.&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Ejercicio 2&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;a) ¿Qué es un circuito combinatorio?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;b) Explicar que es &quot;sumador completo&quot;. Realizar tabla de verdad y gráfico.&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Ejercicio 3&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;a) MSX88 representa una máquina de 2 direcciones?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;b) Explicar máquina de 1 dirección.&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Ejercicio 4&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;a) Dar 3 características principales de la organización de memoria semiconductor (2^1/2 D)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;b) Realizar una tabla con valores típicos de capacidad de almacenamiento y tiempo de acceso de cada nivel de jerarquía de memoria.&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Ejercicio 5&lt;/h4&gt;
&lt;p&gt;Dado un vídeo monocromático de 15 segundos donde cada imagen tiene 500*800 pixeles:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;a) Cuantos bytes se necesitan por cada imagen?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;b) Que velocidad de transferencia a periférico debe haber si cada imagen debe ser cambiada 25 veces en 1 segundo?&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Final 7 Organización de Computadoras 08-23&lt;/h1&gt;
&lt;h4&gt;Ejercicio 1&lt;/h4&gt;
&lt;p&gt;Dado un sistema en punto flotante con 6 bits de mantisa fraccionaria en BCS y exponente de 4 bits en exceso 8 (en ese orden de izq a der):&lt;/p&gt;
&lt;p&gt;&lt;code&gt;A) ¿Cuál es el rango de representación del sistema?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;B) Represente en punto flotante el número decimal 32,2.&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Ejercicio 2&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;A) ¿Cuáles son las 3 formas que se pueden utilizar para representar una función lógica?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;B) Describa el funcionamiento del circuito lógico secuencial denominado &apos;D&apos;.&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Ejercicio 3&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;A) ¿Qué es un ciclo de instrucción?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;B) Describa los pasos del ciclo de instrucción de una operación aritmética.&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Ejercicio 4&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;A) ¿Cómo está compuesta una &quot;jerarquía de memoria&quot;?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;B) ¿Por qué la organización 2D de memoria semiconductora NO requiere &apos;refresco&apos;?&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Ejercicio 5&lt;/h4&gt;
&lt;p&gt;Una imagen en una pantalla de 100 cm por 50 cm posee una resolución de 100 puntos por centímetro:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;A) ¿Cuántos bytes de memoria se necesitan para almacenar una imagen en True Color?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;B) ¿Cuántas imágenes podría almacenar en esa memoria si la imagen a almacenar fuera &apos;monocromática&apos;?&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Final 8 - Abril 2023 (10/04)&lt;/h1&gt;
&lt;h4&gt;Ejercicio 1&lt;/h4&gt;
&lt;p&gt;a) Características de coma flotante IEEE 754 simple precisión.&lt;/p&gt;
&lt;p&gt;b) Representar el número 1 en el modelo del inciso a).&lt;/p&gt;
&lt;h4&gt;Ejercicio 2&lt;/h4&gt;
&lt;p&gt;a) Explicar qué es la suma de productos.&lt;/p&gt;
&lt;p&gt;b) Usar suma de productos para representar una función de cuatro entradas (A,B,C,D) cuya salida de 1 cuando dos de las entradas sea cero (cabeza ecuación gráfico).&lt;/p&gt;
&lt;h4&gt;Ejercicio 3&lt;/h4&gt;
&lt;p&gt;a) Explicar el modo de direccionamiento indirecto por registro con desplazamiento.&lt;/p&gt;
&lt;p&gt;b) Dar ejemplos de instrucciones de sus variantes.&lt;/p&gt;
&lt;h4&gt;Ejercicio 4&lt;/h4&gt;
&lt;p&gt;a) Explicar los principios de la jerarquía de memoria.&lt;/p&gt;
&lt;p&gt;b) Describir la organización 2^(1/2) D y realizar el gráfico para esa memoria con capacidad de almacenamiento de 1024 bits.&lt;/p&gt;
&lt;h4&gt;Ejercicio 5&lt;/h4&gt;
&lt;p&gt;a) Describir el disco rígido teniendo en cuenta su comunicación con la CPU, el formato de almacenamiento, cantidad de información, etc.&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Final 9 Organización de Computadoras 23-Feb1&lt;/h1&gt;
&lt;h4&gt;Ejercicio 1&lt;/h4&gt;
&lt;p&gt;Dada la representación A188H (en BCH) de un sistema en punto flotante con 8 bits de mantisa en BCS y bit implícito y exponente de 8 bits en exceso 128 (en ese orden de izq a der):&lt;/p&gt;
&lt;p&gt;A) Determine el valor decimal representado en ese sistema.&lt;/p&gt;
&lt;p&gt;B) Calcule el Error Absoluto Máximo de esa representación.&lt;/p&gt;
&lt;h4&gt;Ejercicio 2&lt;/h4&gt;
&lt;p&gt;A) ¿Qué es un circuito combinatorio?&lt;/p&gt;
&lt;p&gt;B) Describa el circuito lógico denominado “sumador completo”. Realice la tabla de verdad y un gráfico de interconexión de puertas lógicas que lo represente.&lt;/p&gt;
&lt;h4&gt;Ejercicio 3&lt;/h4&gt;
&lt;p&gt;A) ¿El MSX88 simula una máquina de 2 direcciones? Justifique.&lt;/p&gt;
&lt;p&gt;B) Describa el formato de instrucción de una máquina de 1 dirección.&lt;/p&gt;
&lt;h4&gt;Ejercicio 4&lt;/h4&gt;
&lt;p&gt;A) Describa 3 características fundamentales de un ‘chip’ de memoria semiconductor para una organización 2 1/2D&lt;/p&gt;
&lt;p&gt;B) En una tabla, escriba los valores típicos de capacidad de almacenamiento y tiempo de acceso de cada nivel de una jerarquía de memoria.&lt;/p&gt;
&lt;h4&gt;Ejercicio 5&lt;/h4&gt;
&lt;p&gt;Un video monocromático de Tik-Tok dura 15 segundos y cada imagen es de 500 por 800 píxeles.&lt;/p&gt;
&lt;p&gt;A) ¿Cuántos bytes de memoria se necesitan para almacenar una imagen del video?&lt;/p&gt;
&lt;p&gt;B) ¿Cuál debe ser la velocidad de transferencia a periférico (en bytes/segundo) si para &apos;percibir movimiento&apos; cada imagen &apos;visible&apos; debe ser cambiada 25 veces en un segundo?&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Final 10 Feb20b&lt;/h1&gt;
&lt;h4&gt;Ejercicio 1&lt;/h4&gt;
&lt;p&gt;¿Qué define el Teorema Fundamental de la Numeración?.&lt;/p&gt;
&lt;p&gt;Determine el rango de representación y resoluciones de:&lt;/p&gt;
&lt;p&gt;a) Un sistema en Punto Fijo en BCS con 4 bits para parte entera y 4 bits para parte fraccionaria&lt;/p&gt;
&lt;p&gt;b) Un sistema en Punto Flotante con 4 bits para mantisa con bit implícito en BCS y 4 bits para exponente en BCS&lt;/p&gt;
&lt;h4&gt;Ejercicio 2&lt;/h4&gt;
&lt;p&gt;a) Describa las diferencias entre un circuito combinatorio y uno secuencial.&lt;/p&gt;
&lt;p&gt;b) Describa el método ‘Suma de Productos’ para determinar la ecuación algebraica de un circuito lógico.&lt;/p&gt;
&lt;p&gt;c) Ejemplifique el uso de SOP con la función OR Exclusiva.&lt;/p&gt;
&lt;h4&gt;Ejercicio 3&lt;/h4&gt;
&lt;p&gt;Describa las características que tienen las máquinas que ejecutan instrucciones con 1 dirección.&lt;/p&gt;
&lt;p&gt;Suponiendo que se poseen las instrucciones adecuadas y que varA, varB, varC y varD son las direcciones de memoria donde se almacenan los valores A, B, C y D respectivamente:&lt;/p&gt;
&lt;p&gt;a) Resuelva mediante programa en pseudo-assembly la ecuación D = (A-B)*(C+A) para la máquina de una dirección.&lt;/p&gt;
&lt;p&gt;b) Determine la cantidad de instrucciones y la de accesos a memoria (de instrucciones y de datos) requeridos por la solución programada.&lt;/p&gt;
&lt;h4&gt;Ejercicio 4&lt;/h4&gt;
&lt;p&gt;¿Cuáles son los principios que sustentan el funcionamiento de la jerarquía de un sistema de memoria?.&lt;/p&gt;
&lt;p&gt;En una tabla, escriba valores típicos de capacidad de almacenamiento en bytes, tiempo de acceso y tecnología de soporte de cada nivel.&lt;/p&gt;
&lt;h4&gt;Ejercicio 5&lt;/h4&gt;
&lt;p&gt;a) ¿Qué son y para qué sirven los modos de direccionamiento?.&lt;/p&gt;
&lt;p&gt;b) Explique el funcionamiento que tendrán las instrucciones en assembly JMP Dir y POP AX. La CPU es la del MSX88, Dir es una dirección de 16 bit y AX un registro de 16 bits.&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Final 11 Octubre del 2023&lt;/h1&gt;
&lt;h4&gt;Ejercicio 1&lt;/h4&gt;
&lt;p&gt;a- Describa características de IEEE 754 simple precisión.&lt;/p&gt;
&lt;p&gt;b- Representar el valor hexadecimal 62000000H en el sistema.&lt;/p&gt;
&lt;h4&gt;Ejercicio 2&lt;/h4&gt;
&lt;p&gt;a- ¿Que es un circuito lógico combinatorial?&lt;/p&gt;
&lt;p&gt;b- Describa suma de productos e implemente la función XOR utilizando el mismo.&lt;/p&gt;
&lt;h4&gt;Ejercicio 3&lt;/h4&gt;
&lt;p&gt;a- Describa el funcionamiento de las instrucciones de Mov. de datos.&lt;/p&gt;
&lt;p&gt;b- ¿Qué modos de direccionamiento pueden ser utilizados en ellos?&lt;/p&gt;
&lt;h4&gt;Ejercicio 4&lt;/h4&gt;
&lt;p&gt;a- ¿Cuáles son los principios que permiten el funcionamiento de un sistema de memoria basado en jerarquía?&lt;/p&gt;
&lt;p&gt;b- Describa y realice un esquema de organización 2D y con capacidad de almacenamiento de 1024 palabras de 16 bits&lt;/p&gt;
&lt;h4&gt;Ejercicio 5&lt;/h4&gt;
&lt;p&gt;a- Describa características de un disco rígido. Mencione medio de almacenamiento, tiempo de acceso, formato y capacidad, etc.&lt;/p&gt;
&lt;p&gt;b- ¿Qué son los RAID?&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Final 12 23Dicb&lt;/h1&gt;
&lt;h4&gt;Ejercicio 1&lt;/h4&gt;
&lt;p&gt;a) Describa las características del sistema de representación en coma flotante estándar IEEE 754 de simple precisión.&lt;/p&gt;
&lt;p&gt;b) Represente el número decimal 1 en el formato de la parte a).&lt;/p&gt;
&lt;h4&gt;Ejercicio 2&lt;/h4&gt;
&lt;p&gt;a) Describa el método de implementación de funciones booleanas denominado SoP.&lt;/p&gt;
&lt;p&gt;b) Use el método descrito en a) para la función lógica S con 4 entradas (A, B, C, D) cuya salida es &apos;1&apos; cuando dos de las entradas están en &apos;1&apos; (Tabla-Ecuación-Gráfico).&lt;/p&gt;
&lt;h4&gt;Ejercicio 3&lt;/h4&gt;
&lt;p&gt;a) Describa el modo de direccionamiento indirecto por Registro con desplazamiento.&lt;/p&gt;
&lt;p&gt;b) Use el método descrito en a) para el modo de direccionamiento Sim) que usen las variantes de la parte a).&lt;/p&gt;
&lt;h4&gt;Ejercicio 4&lt;/h4&gt;
&lt;p&gt;a) Describa el funcionamiento del proceso (para MSX88 o Viento) de un sistema de memoria basado en jerarquía?&lt;/p&gt;
&lt;p&gt;b) ¿Cuáles son los principios que permiten el funcionamiento 2 ½ D con capacidad de almacenamiento de 1024 bits.&lt;/p&gt;
&lt;h4&gt;Ejercicio 5&lt;/h4&gt;
&lt;p&gt;Describa las características del almacenamiento externo conocido como disco rígido. Considerar el tipo de comunicación entre CPU y el periférico, el formato de almacenamiento, cantidad de información almacenada etc..&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Final 13 FEBRERO 2022 1ERA FECHA&lt;/h1&gt;
&lt;h4&gt;Ejercicio 1&lt;/h4&gt;
&lt;p&gt;Dado el numero A188 en BCH donde 8 bits representan la mantisa en BCS con bit implícito y 8 bits para exponente en exceso 128.&lt;/p&gt;
&lt;p&gt;a) Calcular el valor en decimal.&lt;/p&gt;
&lt;p&gt;b) Calcular el error absoluto máximo.&lt;/p&gt;
&lt;h4&gt;Ejercicio 2&lt;/h4&gt;
&lt;p&gt;a) ¿Que es un circuito combinatorio?&lt;/p&gt;
&lt;p&gt;b) Explicar que es &quot;sumador completo&quot;. Realizar tabla de verdad y gráfico.&lt;/p&gt;
&lt;h4&gt;Ejercicio 3&lt;/h4&gt;
&lt;p&gt;a) MSX88 representa una maquina de 2 direcciones?&lt;/p&gt;
&lt;p&gt;b) Explicar maquina de 1 direccion.&lt;/p&gt;
&lt;h4&gt;Ejercicio 4&lt;/h4&gt;
&lt;p&gt;a) Dar 3 características principales de la organización de memoria semiconductor (2^1/2 D)&lt;/p&gt;
&lt;p&gt;b) Realizar una tabla con valores típicos de capacidad de almacenamiento y tiempo de acceso de cada nivel de jerarquía de memoria.&lt;/p&gt;
&lt;h4&gt;Ejercicio 5&lt;/h4&gt;
&lt;p&gt;Dado un video monocromático de 15 segundos donde cada imagen tiene 500*800 píxeles&lt;/p&gt;
&lt;p&gt;a) ¿Cuantos bytes se necesitan por cada imagen?&lt;/p&gt;
&lt;p&gt;b) Que velocidad de transferencia a periférico debe haber si cada imagen debe ser cambiada 25 veces en 1 segundo?&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Final 14 08-23&lt;/h1&gt;
&lt;h4&gt;Ejercicio 1&lt;/h4&gt;
&lt;p&gt;Dado un sistema en punto flotante con 6 bits de mantisa fraccionaria en BCS y exponente de 4 bits en exceso 8 (en ese orden de izq a der):&lt;/p&gt;
&lt;p&gt;A) ¿Cuál es el rango de representación del sistema?&lt;/p&gt;
&lt;p&gt;B) Represente en el sistema de punto flotante dado el número decimal 32,2.&lt;/p&gt;
&lt;h4&gt;Ejercicio 2&lt;/h4&gt;
&lt;p&gt;A) ¿Cuáles son las 3 formas que se pueden utilizar para representar una función lógica?&lt;/p&gt;
&lt;p&gt;B) Describa el funcionamiento del circuito lógico secuencial denominado &apos;D&apos;.&lt;/p&gt;
&lt;h4&gt;Ejercicio 3&lt;/h4&gt;
&lt;p&gt;A) ¿Qué es un ciclo de instrucción?&lt;/p&gt;
&lt;p&gt;B) Describa los pasos del ciclo de instrucción de una operación aritmética.&lt;/p&gt;
&lt;h4&gt;Ejercicio 4&lt;/h4&gt;
&lt;p&gt;A) ¿Cómo está compuesta una &apos;jerarquía de memoria&apos;?&lt;/p&gt;
&lt;p&gt;B) ¿Porqué la organización 2D de memoria semiconductor NO requiere &apos;refresco&apos;?&lt;/p&gt;
&lt;h4&gt;Ejercicio 5&lt;/h4&gt;
&lt;p&gt;Una imagen en una pantalla de 100 cm por 50 cm posee una resolución de 100 puntos por centímetro:&lt;/p&gt;
&lt;p&gt;A) ¿Cuántos bytes de memoria se necesitan para almacenar una imagen en &apos;True Color&apos;?&lt;/p&gt;
&lt;p&gt;B) ¿Cuántas imágenes podría almacenar en esa memoria si la imagen a almacenar fuera &apos;monocromática&apos;?&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Final 15 11-22&lt;/h1&gt;
&lt;h4&gt;Ejercicio 1&lt;/h4&gt;
&lt;p&gt;Dado un sistema en punto flotante con 5 bits de mantisa en BCS con bit implícito y exponente de 5 bits en exceso 16 (en ese orden de izq a der):&lt;/p&gt;
&lt;p&gt;A) ¿Cuál es el valor decimal del mínimo positivo representable por el sistema?&lt;/p&gt;
&lt;p&gt;B) Represente en el sistema de punto flotante dado el número decimal 2,625.&lt;/p&gt;
&lt;h4&gt;Ejercicio 2&lt;/h4&gt;
&lt;p&gt;A) ¿Cuáles son las 3 funciones lógicas elementales y cómo las puede representar?&lt;/p&gt;
&lt;p&gt;B) Describa el método de diseño de circuitos lógicos combinacionales denominado &quot;Suma de productos&quot;.&lt;/p&gt;
&lt;h4&gt;Ejercicio 3&lt;/h4&gt;
&lt;p&gt;A) ¿Cómo es el formato de instrucción de una máquina de 3 direcciones?
B) Describa la diferencia en los pasos del ciclo de instrucción de una instrucción SUB y una CMP.&lt;/p&gt;
&lt;h4&gt;Ejercicio 4&lt;/h4&gt;
&lt;p&gt;A) ¿Cuáles son los principios que rigen el funcionamiento de una &quot;jerarquía de memoria&quot;?
B) ¿Porqué la organización 2 1/2D de memoria semiconductor utiliza 2 decodificadores?&lt;/p&gt;
&lt;h4&gt;Ejercicio 5&lt;/h4&gt;
&lt;p&gt;Una imagen en una pantalla de 100 cm por 50 cm posee una resolución de 100 puntos por centímetro:
A) ¿Cuántos bytes de memoria se necesitan para almacenar una imagen en True Color?
B) ¿Cuántas imágenes &quot;monocromo&quot; se podrían almacenar en esa memoria?&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Final 16 04-24&lt;/h1&gt;
&lt;h4&gt;Ejercicio 1&lt;/h4&gt;
&lt;p&gt;Dada la representación 4885H (en BCH) de un sistema en punto flotante con 8 bits de mantisa en BCS y bit implícito y exponente de 8 bits en exceso 128 (en ese orden de izq a der):&lt;/p&gt;
&lt;p&gt;A) Determine el valor decimal representado.&lt;/p&gt;
&lt;p&gt;B) Calcule el Error Absoluto Máximo.&lt;/p&gt;
&lt;h4&gt;Ejercicio 2&lt;/h4&gt;
&lt;p&gt;A) ¿Cuáles son las formas de representar o describir la función lógica NOR?&lt;/p&gt;
&lt;p&gt;B) Describa el circuito lógico secuencial denominado &quot;biestable RS&quot;. Realice la tabla de comportamiento y el gráfico de interconexión de puertas lógicas que lo represente.&lt;/p&gt;
&lt;h4&gt;Ejercicio 3&lt;/h4&gt;
&lt;p&gt;A) ¿Qué es el modo de direccionamiento de un operando?&lt;/p&gt;
&lt;p&gt;B) Describa cómo se determina la dirección efectiva del operando cuando se utiliza el modo de direccionamiento indirecto via registro con desplazamiento.&lt;/p&gt;
&lt;h4&gt;Ejercicio 4&lt;/h4&gt;
&lt;p&gt;A) ¿Porqué funciona la jerarquía de memoria?&lt;/p&gt;
&lt;p&gt;B) Describa 3 características principales de la organización 2 1/2D de memoria semiconductor.&lt;/p&gt;
&lt;h4&gt;Ejercicio 5&lt;/h4&gt;
&lt;p&gt;Un video musical en blanco y negro dura 100 segundos y cada imagen es de 500 por 800 píxeles:&lt;/p&gt;
&lt;p&gt;A) ¿Cuál debe ser la velocidad de transferencia a periférico (en bytes/segundo) si para &quot;percibir movimiento&quot; cada imagen &quot;visible&quot; debe ser cambiada 25 veces en un segundo?&lt;/p&gt;
&lt;p&gt;B) ¿Cuántos bytes de memoria se necesitan para almacenar el video completo?&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Final 17 Abr23&lt;/h1&gt;
&lt;h4&gt;Ejercicio 1&lt;/h4&gt;
&lt;p&gt;a) Describa las características del sistema de representación en coma flotante estándar IEEE 754 de simple precisión.&lt;/p&gt;
&lt;p&gt;b) Represente el número decimal 1 en el formato de la parte a).&lt;/p&gt;
&lt;h4&gt;Ejercicio 2&lt;/h4&gt;
&lt;p&gt;a) Describa el método de implementación de funciones booleanas denominado SoP.&lt;/p&gt;
&lt;p&gt;b) Use el método descripto en a) para la función lógica S con 4 entradas (A, B, C, D) cuya salida es &apos;1&apos; cuando dos de las entradas están en &apos;0&apos; (Tabla-Ecuación-Gráfico).&lt;/p&gt;
&lt;h4&gt;Ejercicio 3&lt;/h4&gt;
&lt;p&gt;a) Describa el funcionamiento del modo de direccionamiento Indirecto por Registro con desplazamiento.&lt;/p&gt;
&lt;p&gt;b) Escriba instrucciones como ejemplo de uso de las variantes que conozca.&lt;/p&gt;
&lt;h4&gt;Ejercicio 4&lt;/h4&gt;
&lt;p&gt;a) ¿Cuáles son los principios que permiten el funcionamiento de un sistema de memoria basado en jerarquía?&lt;/p&gt;
&lt;p&gt;b) Describa y realice un esquema de memoria con organización 2 ½ D con capacidad de almacenamiento de 1024 bits.&lt;/p&gt;
&lt;h4&gt;Ejercicio 5&lt;/h4&gt;
&lt;p&gt;Describa las características del almacenamiento externo conocido como disco rígido. Considerar el tipo de comunicación entre CPU y el periférico, el formato de almacenamiento, cantidad de información almacenada, etc.&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Final 18 5-23&lt;/h1&gt;
&lt;h4&gt;Ejercicio 1&lt;/h4&gt;
&lt;p&gt;Dada la representación 4185H (en hexadecimal) de un sistema en punto flotante con 8 bits de mantisa en BCS y bit implícito y exponente de 8 bits en exceso 128 (en ese orden de izq a der):&lt;/p&gt;
&lt;p&gt;a) Determine el valor decimal representado.&lt;/p&gt;
&lt;p&gt;b) Calcule el Error Absoluto máximo.&lt;/p&gt;
&lt;h4&gt;Ejercicio 2&lt;/h4&gt;
&lt;p&gt;¿Qué es una puerta lógica?&lt;/p&gt;
&lt;p&gt;Describa el circuito lógico secuencial denominado &quot;biestable RS&quot;.&lt;/p&gt;
&lt;p&gt;Realice la tabla de comportamiento y un gráfico de interconexión de puertas lógicas que lo represente.&lt;/p&gt;
&lt;h4&gt;Ejercicio 3&lt;/h4&gt;
&lt;p&gt;¿Qué es un ciclo de instrucción?&lt;/p&gt;
&lt;p&gt;Describa el funcionamiento del modo de direccionamiento indirecto via registro con desplazamiento.&lt;/p&gt;
&lt;h4&gt;Ejercicio 4&lt;/h4&gt;
&lt;p&gt;a) Describa las características principales de la organización 21/2D de memoria semiconductor.&lt;/p&gt;
&lt;p&gt;b) Realice un esquema del chip con esta organización.&lt;/p&gt;
&lt;p&gt;c) Mencione valores típicos de capacidad de almacenamiento y de tiempo de acceso.&lt;/p&gt;
&lt;h4&gt;Ejercicio 5&lt;/h4&gt;
&lt;p&gt;Un video musical monocromático de youtube dura 200 segundos.&lt;/p&gt;
&lt;p&gt;a) Calcule cuántos bytes de memoria se necesitan para almacenar el video completo si cada imagen es de 800 por 500 píxeles.&lt;/p&gt;
&lt;p&gt;b) ¿Cuál debe ser la velocidad de transferencia (en bytes/segundo) si la imagen debe ser cambiada 25 veces en un segundo?&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Final 19&lt;/h1&gt;
&lt;h4&gt;Ejercicio 1&lt;/h4&gt;
&lt;p&gt;4185H (en hexadecimal) Punto flotante 8 bits mantisa BCS y bit implícito y exponente 8 bits en exceso 128 (de izq a der)&lt;/p&gt;
&lt;p&gt;a. Determine el valor decimal representado&lt;/p&gt;
&lt;p&gt;b. Calcule el error absoluto máximo&lt;/p&gt;
&lt;h4&gt;Ejercicio 2&lt;/h4&gt;
&lt;p&gt;¿Qué es una puerta lógica? Describa el circuito lógico secuencial &quot;Biestable RS&quot;. Realice la tabla de comportamiento y un gráfico de interconexión de puertas lógicas que lo represente.&lt;/p&gt;
&lt;h4&gt;Ejercicio 3&lt;/h4&gt;
&lt;p&gt;¿Qué es un ciclo de instrucción?&lt;/p&gt;
&lt;p&gt;Describa el funcionamiento del modo de direccionamiento indirecto vía registro con desplazamiento.&lt;/p&gt;
&lt;h4&gt;Ejercicio 4&lt;/h4&gt;
&lt;p&gt;a. Describa las características principales de la organización 2D de memoria semiconductora&lt;/p&gt;
&lt;p&gt;b. Realice el esquema del chip con esta organización&lt;/p&gt;
&lt;p&gt;c. Mencione valores típicos de capacidad de almacenamiento y de tiempo de acceso&lt;/p&gt;
&lt;h4&gt;Ejercicio 5&lt;/h4&gt;
&lt;p&gt;Un video musical monocromático de Youtube dura 200 seg&lt;/p&gt;
&lt;p&gt;a. Calcule cuántos bytes de memoria se necesitan para almacenar el video completo si cada imagen es de 800 x 500 px&lt;/p&gt;
&lt;p&gt;b. ¿Cuál debería ser la velocidad de transferencia (en bytes/seg) si la imagen debe ser cambiada 25 veces en 1 seg?&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Final 20 08-22&lt;/h1&gt;
&lt;h4&gt;Ejercicio 1&lt;/h4&gt;
&lt;p&gt;Dado un sistema en punto flotante con 6 bits de mantisa fraccionaria en BCS y exponente de 4 bits en exceso 8 (en ese orden de izq a der):&lt;/p&gt;
&lt;p&gt;A) ¿Cuál es el rango de representación del sistema?&lt;/p&gt;
&lt;p&gt;B) Represente en el sistema de punto flotante dado el número decimal 32,2.&lt;/p&gt;
&lt;h4&gt;Ejercicio 2&lt;/h4&gt;
&lt;p&gt;A) ¿Cuáles son las 3 formas que se pueden utilizar para representar una función lógica?&lt;/p&gt;
&lt;p&gt;B) Describa el método de diseño de circuitos lógicos combinacionales denominado &quot;Suma de productos&quot;.&lt;/p&gt;
&lt;h4&gt;Ejercicio 3&lt;/h4&gt;
&lt;p&gt;A) ¿Qué es el ciclo de instrucción?&lt;/p&gt;
&lt;p&gt;B) Describa los pasos del ciclo de instrucción de una operación aritmética.&lt;/p&gt;
&lt;h4&gt;Ejercicio 4&lt;/h4&gt;
&lt;p&gt;A) ¿Cómo está compuesta una &quot;jerarquía de memoria&quot;?&lt;/p&gt;
&lt;p&gt;B) ¿Porqué la organización 2D de memoria semiconductor NO requiere &quot;refresco&quot;?&lt;/p&gt;
&lt;h4&gt;Ejercicio 5&lt;/h4&gt;
&lt;p&gt;Una imagen en una pantalla de 100 cm por 50 cm posee una resolución de 100 puntos por centímetro:&lt;/p&gt;
&lt;p&gt;A) ¿Cuántos bytes de memoria se necesitan para almacenar una imagen en &quot;True Color&quot;?&lt;/p&gt;
&lt;p&gt;B) ¿Cuántas imágenes podría almacenar en esa memoria si la imagen a almacenar fuera &quot;monocromática&quot;?&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Final 21 09-22&lt;/h1&gt;
&lt;h4&gt;Ejercicio 1&lt;/h4&gt;
&lt;p&gt;Dado un sistema en punto flotante con 6 bits de mantisa fraccionaria normalizada en BCS y exponente de 4 bits en exceso 8 (en ese orden de izq a der):&lt;/p&gt;
&lt;p&gt;A) ¿Cuál es el valor del mínimo positivo representable en ese sistema?&lt;/p&gt;
&lt;p&gt;B) Represente en punto flotante el número decimal 32,25.&lt;/p&gt;
&lt;h4&gt;Ejercicio 2&lt;/h4&gt;
&lt;p&gt;A) ¿Cuáles son las 3 formas que se pueden utilizar para representar una función lógica?&lt;/p&gt;
&lt;p&gt;B) Describa el método de diseño de circuitos lógicos combinacionales denominado &quot;Suma de productos&quot;.&lt;/p&gt;
&lt;h4&gt;Ejercicio 3&lt;/h4&gt;
&lt;p&gt;A) ¿Qué se representa con el formato de instrucción?&lt;/p&gt;
&lt;p&gt;B) Describa los pasos del ciclo de instrucción de un salto incondicional.&lt;/p&gt;
&lt;h4&gt;Ejercicio 4&lt;/h4&gt;
&lt;p&gt;A) ¿Cuáles son los valores típicos de tiempo de acceso en los niveles de una &quot;jerarquía de memoria&quot;?&lt;/p&gt;
&lt;p&gt;B) ¿Porqué la organización 2 1/2D de memoria semiconductor requiere &quot;refresco&quot;?&lt;/p&gt;
&lt;h4&gt;Ejercicio 5&lt;/h4&gt;
&lt;p&gt;Una imagen en una pantalla de 100 cm por 50 cm posee una resolución de 100 puntos por centímetro:&lt;/p&gt;
&lt;p&gt;A) ¿Cuántos bytes de memoria se necesitan para almacenar una imagen en True Color?&lt;/p&gt;
&lt;p&gt;B) ¿Cuántas imágenes podría almacenar en esa memoria si la imagen a almacenar fuera &quot;monocromática&quot;?&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Otros Finales Resueltos&lt;/h1&gt;
&lt;p&gt;¿Qué es una puerta lógica? Describe el método para la obtención del circuito combinatorio de una tabla de verdad con cuatro variables de entrada que produce una salida “1” solo cuando una de las 4 entradas esta en  1.&lt;/p&gt;
&lt;p&gt;Una puerta lógica es un dispositivo electrónico que produce como señal de salida una operación booleana a partir  de las señales de entrada. Las puertas básicas usadas en lógica digital son: AND OR NOT, y en base a estas se derivan XOR, NAND y NOR. Cada puerta tiene una o mas entradas que cuando cambian, la señal de salida aparece casi instantáneamente, retrasada solo por el retardo de puerta. La puerta se define de tres formas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Simbólica: es el convenio gráfico conocido universalmente para representar la puerta&lt;/li&gt;
&lt;li&gt;Función algebraica: es la ecuación con la que se puede definir una puerta.&lt;/li&gt;
&lt;li&gt;Tabla de verdad: enumera el valor de una operación para cada combinación posible de los valores de los operandos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El método consiste en usar la técnica de suma de productos, primero se arma la tabla de verdad:&lt;/p&gt;
&lt;p&gt;| A | B | C | D | F |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 1 | 1 |
| 0 | 0 | 1 | 0 | 1 |
| 0 | 0 | 1 | 1 | 0 |
| 0 | 1 | 0 | 0 | 1 |
| 0 | 1 | 0 | 1 | 0 |
| 0 | 1 | 1 | 0 | 0 |
| 0 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 0 | 1 |
| 1 | 0 | 0 | 1 | 0 |
| 1 | 0 | 1 | 0 | 0 |
| 1 | 0 | 1 | 1 | 0 |
| 1 | 1 | 0 | 0 | 0 |
| 1 | 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 0 | 0 |
| 1 | 1 | 1 | 1 | 0 |&lt;/p&gt;
&lt;p&gt;Tomar las filas en las que la salida es “1”, y armar la función algebraica. Los “0” serán la variable negada.&lt;/p&gt;
&lt;p&gt;F= [(~A).(~B).(~C).D]+[(~A).(~B).C.(~D)]+[(~A).B.(~C).(~D)]+[A.(~B).(~C).(~D)]&lt;/p&gt;
&lt;p&gt;Así de esta forma queda dibujar el circuito lógico que van a ser tres AND unidas a un OR. Las negaciones se realizan agregando una NOT antes.
Se unen todas las salidas de las compuertas AND con una OR porque solo se va a cumplir una de las condiciones a la vez.&lt;/p&gt;
&lt;p&gt;Describa las características principales de la organización 2 ½ D de memoria semiconductora. Defina los valores de capacidad de almacenamiento y tiempo acceso.&lt;/p&gt;
&lt;p&gt;Los bits se almacenan en una matriz cuadrada de N filas por M columnas. Se accede de un bit a la vez, que tiene asociada una dirección que puede ser leída o escrita según la señal de control.
Están hechas de transistores en lugar de flip-flops como la memoria 2D, lo que permite poder fabricarlas de mayor capacidad. El problema de los transistores es que pierden la carga y por lo tanto pierden el valor almacenado, por lo cual se debe usar una técnica de refresco. Esto puede provocar cuello de botella. Tiene dos decodificadores, la dirección se divide en dos.
Hoy en día se comercializan memorias de 1 a 8 GB, con tiempos de acceso entre 50 y 70 ns.&lt;/p&gt;
&lt;p&gt;Enumere todos los elementos a tener en cuenta para el diseño del repertorio de instrucciones de un procesador. Describa dos de ellos.&lt;/p&gt;
&lt;p&gt;Para el repertorio de instrucciones hay que tener en cuenta:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tipos de operaciones: cuantas y cuales&lt;/li&gt;
&lt;li&gt;Tipos de datos: cuales&lt;/li&gt;
&lt;li&gt;Formato de instrucciones: longitud (bits), N° de direcciones, tamaño de cada campo.&lt;/li&gt;
&lt;li&gt;Registros: cantidad que se pueden referenciar mediante instrucciones y su uso.&lt;/li&gt;
&lt;li&gt;Direccionamiento: la manera de especificar la dirección de un operando o una instrucción (la próxima)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dos ejemplo podrían ser, las maquinas de dos direcciones y las de una dirección.&lt;/p&gt;
&lt;p&gt;Tipos de operaciones&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Transferencia de datos: MOV (load/store)&lt;/li&gt;
&lt;li&gt;Aritméticas: ADD, SUB, INC, DEC, MUL, DIV.&lt;/li&gt;
&lt;li&gt;Lógicas: AND, OR, XOR, NOT.&lt;/li&gt;
&lt;li&gt;Conversión&lt;/li&gt;
&lt;li&gt;E/S: In, Out.&lt;/li&gt;
&lt;li&gt;Transferencia de control: salto, bifurcación.&lt;/li&gt;
&lt;li&gt;Control del sistema: usadas por el sistema operativo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tipos de datos
Los mas importantes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Direcciones&lt;/li&gt;
&lt;li&gt;Números: enteros, punto fijo, punto flotante.&lt;/li&gt;
&lt;li&gt;Caracteres: ASCII, BCD.&lt;/li&gt;
&lt;li&gt;Datos lógicos&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Modos de direccionamiento
En una instrucción se utilizan bits para expresar el código de operación: nos dicen qué hacer. También se necesitan una gran cantidad de bits para especificar de donde provienen los datos.
Los modos de direccionamiento tienen como objetivo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Disminuir la cantidad de bits en la instrucción.&lt;/li&gt;
&lt;li&gt;La dirección puede que no se conozca hasta el momento de ejecutar el programa.&lt;/li&gt;
&lt;li&gt;Manejo mas eficiente de los datos (arreglos).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Los modos de direccionamiento que existen son:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Inmediato&lt;/li&gt;
&lt;li&gt;Directo&lt;/li&gt;
&lt;li&gt;Por registro&lt;/li&gt;
&lt;li&gt;Indirecto por memoria&lt;/li&gt;
&lt;li&gt;Indirecto por registro&lt;/li&gt;
&lt;li&gt;Por desplazamiento&lt;/li&gt;
&lt;li&gt;Del stack&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mdd Inmediato
El operando se obtiene automáticamente de la memoria al mismo tiempo que la instrucción. No requiere una referencia extra a memoria.
La desventaja es que el tamaño del operando está limitado por el tamaño del campo de direccionamiento.&lt;/p&gt;
&lt;p&gt;Mdd Directo
El campo de direccion tiene la direccion efectiva del operando. Es simple pero tiene un espacio limitado de direcciones por cantidad de bits del campo.&lt;/p&gt;
&lt;p&gt;Mdd por registro
Conceptualmente es igual al Directo, pero se especifica un registro en lugar de una posición de memoria.
La referencia a registro usa menos bits que la especificación de la dirección y no requiere acceso a memoria de datos.
La desventaja es que son pocos.&lt;/p&gt;
&lt;p&gt;Mdd Indirecto por memoria
En la instrucción está la dirección de la dirección del operando. Trata de solucionar el problema del Directo. Así, con una dirección de menos bits en la instrucción, se apunta a una dirección de mas bits.
La ventaja es que es espacio de direccionamiento es mayor. La principal desventaja es que realiza múltiples accesos a memoria.&lt;/p&gt;
&lt;p&gt;Mdd Indirecto por registro
En la instrucción se especifica el registro que tiene almacenada la dirección. La ventaja de esto es que necesita menos bits para especificar el registro que la posición de memoria.&lt;/p&gt;
&lt;p&gt;Mdd por desplazamiento
Combina capacidades de Indirecto y Directo. Requiere que la instrucción tenga dos campos de dirección. Estos dos campos se suman para producir la dirección efectiva. Los mas comunes son Relativo, De registro base e Indexado.&lt;/p&gt;
&lt;p&gt;Mdd Del stack
El stack o pila es un arreglo lineal de localidades de memoria. Es una lista o cola donde el ultimo en entrar es el primero en salir. Es una zona de memoria reservada.
Asociado con la pila o stack hay un registro apuntador (SP) cuyo valor es la dirección tope de pila o stack.&lt;/p&gt;
&lt;p&gt;Se requiere mostrar en “True Color” de 1024x1024 píxeles, un vídeo que posee 20 imágenes por cada segundo ¿podría usar la memoria cuyos valores de capacidad y tiempo de acceso definió en el punto 3? justifiquen.&lt;/p&gt;
&lt;p&gt;1024 x 1024 x 3 Bytes x 20 = 62.914.560 Bytes = 60 MB&lt;/p&gt;
&lt;p&gt;1 Byte _________ 50 ns
62.914.560______ x ns&lt;/p&gt;
&lt;p&gt;(62.914.560 x 50) / 1 = 3,14 seg. aprox.
Por lo tanto la memoria especificada en el punto 3 no nos sirve para mostrar las 20 imágenes en un segundo.&lt;/p&gt;
&lt;p&gt;¿Qué características determinan que un circuito lógico sea combinacional? Describa el método para implementar el circuito lógico de la función booleana F de cuatro entradas (a, b, c y d) cuya tabla de verdad posee valor de salida “1” cuando solo una de sus variables esta en “1”. realice el gráfico correspondiente de interconexión de compuertas resultantes.&lt;/p&gt;
&lt;p&gt;Para que un circuito lógico sea combinacional se necesitan un conjunto de dos o mas puertas interconectadas. Responden a los valores logicos de las entradas, la salida esta determinada exclusivamente por los valores de las entradas en ese instante. Si cambia la entrada cambia la salida. Lo valores pasados de las entradas no influyen en los valores de las salidas.&lt;/p&gt;
&lt;p&gt;¿Qué es un ciclo de instrucción? Describa los diferentes pasos del ciclo si la instrucción a realizar es XOR AL, 55H (or exclusivo entre registro y operando inmediato). Si AL contenía 5AH, ¿Que resultado queda en AL luego de la ejecución de la instrucción?&lt;/p&gt;
&lt;p&gt;El ciclo de instrucción es el procedimiento requerido para una sola instrucción. Se puede decir que un ciclo de instrucción incluye subciclos: captación o búsqueda, interpretación y ejecución e interrupción. La ejecución del programa se detiene sólo si la computadora se desconecta, se produce una error o se encuentra una instrucción que la detiene. La secuencia exacta de eventos que tiene lugar durante un ciclo de instrucción depende del diseño de la CPU.&lt;/p&gt;
&lt;p&gt;Los pasos de la instrucción XOR AL, 55H son:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Busca el código de operación.&lt;/li&gt;
&lt;li&gt;Incrementa el PC.&lt;/li&gt;
&lt;li&gt;Decodifica la instrucción y detecta que tiene que ir a buscar la otra parte.&lt;/li&gt;
&lt;li&gt;Busca la otra parte del código de operación.&lt;/li&gt;
&lt;li&gt;Incrementa el PC.&lt;/li&gt;
&lt;li&gt;Decodifica la instrucción y detecta que es una operación lógica XOR, por lo que tendrá que usar la ALU.&lt;/li&gt;
&lt;li&gt;Busca el operando que en este caso es el 55H.&lt;/li&gt;
&lt;li&gt;Incrementa el PC.&lt;/li&gt;
&lt;li&gt;Realiza la operación XOR entre el valor almacenado en AL y el 55H.&lt;/li&gt;
&lt;li&gt;Almacena el resultado en AL.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;El resultado que quedaría en AL seria 00001111 = 0FH&lt;/p&gt;
&lt;p&gt;¿Que operaciones de tipo aritmético podemos encontrar en un repertorio de instrucciones? ¿Porque los distintos tipos de datos que deseen utilizarse en esas operaciones condicionan el hardware necesario para operar?&lt;/p&gt;
&lt;p&gt;El conjunto de operaciones de tipo aritmético que podemos encontrar son la suma, resta, multiplicación, división, incremento, decremento, valor absoluto y negación.
Los tipos de datos condicionan al hardware por una serie de cosas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si se esta diseñando un sistema que valla a multiplicar muchos números seria conveniente seria conveniente incluir un multiplicador por hardware.&lt;/li&gt;
&lt;li&gt;Si se va a utilizar números  muy grandes debe disponerse de una cantidad adecuada de bits para los buses en general, memoria, CPU, etc. Por ejemplo, una maquina de 4 bits no se podría utilizar para un software que trabaja con números de miles de millones.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Describa los métodos de acceso a la información almacenada en memoria secundaria. ¿que ventaja y/o usos puede mencionar del almacenamiento en RAID?&lt;/p&gt;
&lt;p&gt;Los métodos de acceso son:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Secuencial: la memoria se organiza en unidades (registros). Para acceder a uno se debe ir trasladando desde la posición actual a la deseada por todos los registros intermedios. Ej.: discos.&lt;/li&gt;
&lt;li&gt;Directo: se accede directamente a una vecindad dada de registros o bloques, luego una búsqueda secuencial contando o esperando alcanzar la posición. Ej.: discos.&lt;/li&gt;
&lt;li&gt;Aleatorio-Random: cada posición direccionable tiene un único mecanismo de acceso. Ej.: memoria principal y cache.&lt;/li&gt;
&lt;li&gt;Asociativa: de tipo aleatoria donde se hace una comparación de ciertos bits de una palabra buscando coincidencias de valores dados, y esto para todas las palabras simultáneamente. Una palabra accedida basándose en una parte de su contenido y no de su dirección o posición.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Las ventajas y/o usos de RAID depende de cada nivel:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;NIVEL 0: En este nivel los datos del usuario y del sistema están distribuidos a lo largo de todos los discos del conjunto, a través de la tira de datos (las cuales pueden ser bloques físicos, sectores o alguna otra entidad) y se proyectan cíclicamente en dispositivos consecutivos. Al conjunto de tiras lógicamente consecutivas, que se proyecta exactamente sobre una misma tira en cada miembro del conjunto, se las denomina franja.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;NIVEL 1: Consigue la redundancia duplicando todos los datos, proporcionando una copia de seguridad en tiempo real. Se hace una distribución de datos como en el nivel 0, pero cada franja lógica se proyecta en dos discos físicos separados. De esta forma cada disco tiene un espejo que tiene la misma información.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esto trae tres ventajas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Una petición de lectura puede ser servida por cualquier de los dos discos que contienen los datos pedidos.&lt;/li&gt;
&lt;li&gt;La petición de escritura, que requiere que las dos tiras correspondientes se actualicen, se hace en paralelo.&lt;/li&gt;
&lt;li&gt;Cuando una unidad falla, se puede acceder inmediatamente a los datos de la otra.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La principal desventaja es el costo de su implementación, ya que se requiere el doble del espacio de disco del disco lógico. Ej.: Para organizar un RAID 1 de 4 discos físicos se usaran 2 para el espacio lógico y 2 para el espejado.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NIVEL 2: utiliza una técnica de acceso en paralelo, que consiste en que todos los discos miembros, participan en la ejecución de cada E/S. Dado que el giro de cada unidad esta sincronizado, para que cada cabezal este en la misma posición en cada disco.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En este nivel las tiras son muy pequeñas, y la redundancia y corrección de errores, se logran a través de una ecuación de paridad, que consiste en calcular los bits de cada posición de cada disco, y almacenarlos en las correspondientes posiciones en los discos de paridad.&lt;/p&gt;
&lt;p&gt;Cuando se produce un error en un solo bit, el controlador del conjunto lo reconoce, realiza el calculo para saber el valor correspondiente y lo corrige instantáneamente.&lt;/p&gt;
&lt;p&gt;En cuanto a las operaciones E/S, una petición de lectura no conlleva un tiempo adicional, sin embargo, la petición de escritura debe acceder a todos los discos de datos y de paridad.
La ventaja de este RAID esta en que se necesita una menor cantidad de discos para almacenar la información. Y su desventaja recae en el costo.
Su uso esta destinado en entornos en los que haya muchos errores de disco y la seguridad no sea alta.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NIVEL 3: se organiza de manera similar que el de nivel 2 y utiliza una acceso en paralelo, pero se diferencia de él en que solo requiere de un disco redundante, sin importar lo grande que sea el conjunto de disco.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En este nivel la corrección es simple, se calcula un sencillo bit de paridad para el conjunto de bit individuales que están en la misma posición, en todos los discos de datos. En caso de que falle una unidad, se accede a disco de paridad y se reconstruye la información desde el resto de los dispositivos.&lt;/p&gt;
&lt;p&gt;Las ventajas de este RAID se encuentran en el ahorro de espacio, ya que solo se necesita un disco de paridad y en las altas velocidades de transferencias de datos. Su desventaja esta en que solo se puede recuperar un disco dañado por ves, si se dañaran dos al mismo tiempo, no podría reconstruir la información.&lt;/p&gt;
&lt;p&gt;Su uso esta destinado en entornos no orientados en transacciones.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NIVEL 4: Este nivel, así como el 5 y el 6, usan una técnica de acceso independiente, por lo que las diferentes E/S se pueden atender en paralelo. (es más adecuado para sistemas que requieran velocidades de petición de E/S altas, que para los que necesiten velocidades de transferencia altas)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Las tiras de datos son relativamente grandes, y se realiza una paridad bit a bit que se guarda en la tira correspondiente del disco de paridad. Esto trae aparejado un cuello de botella sobre el disco de paridad, ya que debe actualizarse cada vez que se haga una escritura en cualquiera de los discos de datos.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NIVEL 5: Este nivel es muy similar al nivel 4, pero las tiras de paridad se distribuyen a lo largo de todos los discos. Se distribuye de manera cíclica: para un conjunto de n discos, la tira de paridad está en diferentes discos para las primeras n tiras, y este patrón se repite. O sea que la tira de paridad siempre está en otro disco que su correspondiente tira de datos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esta distribución evita el cuello de botella que se produce el nivel 4, ya que la actualización de la paridad se distribuye sobre todos los discos.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NIVEL 6: El nivel 6 agrega otro algoritmo de comprobación de datos, y se distribuyen de la misma manera que el nivel 5. Uno es el algoritmo de los niveles 3, 4 y 5 que calcula la XOR, y otro es un algoritmo independiente. Esto hace posible la regeneración de los datos incluso si dos de los discos que contienen los datos de los usuarios fallan.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Es una solución perfecta para aplicaciones con objetivos críticos, pero tiene un gran costo de cálculo y escritura de paridades.&lt;/p&gt;
&lt;p&gt;Describa como se puede construir un sumador binario completo. Defina cuales son las funciones lógicas que se pueden utilizar, tabla de verdad y realice un esquema de interconexión de compuertas de dicho sumador.&lt;/p&gt;
&lt;p&gt;Un  sumador binario completo se puede construir armando la tabla de verdad con los valores booleanos de la suma binaria, y la tabla de verdad de la suma con acarreo. Una vez realizadas estas tablas, se puede hacer las funciones de salida.
Para que funcione un sumador de varios bits cada uno de los sumadores de un bit deben tener 3 entradas, incluyendo el acarreo del sumador inmediato inferior.&lt;/p&gt;
&lt;p&gt;Suma = (-A . -B . C) + (-A . B . -C) + (A.B.C) + (A.-B.-C)
Acarreo = A.B + A.C + B.C&lt;/p&gt;
&lt;p&gt;¿Qué mejoras podemos obtener en el funcionamiento de máquina que ejecuta instrucciones debido al principio de localidad de referencia?&lt;/p&gt;
&lt;p&gt;La principal mejora que podemos obtener cuando se cumple el principio de localidad de referencia es la disminución de la frecuencia de acceso a los niveles inferiores de la jerarquía de memoria. Es gracias a este principio que dicha jerarquía puede implementarse.
El principio de localidad de referencia nos dice que en el curso de la ejecución de un programa, las referencias a memoria por parte del procesador, tanto para instrucciones como para datos, tienden a estar agrupadas. Los programas normalmente contienen un numero de bucles iterativos y subrutinas. Cada vez que se entra en un bucle a una subrutina, hay repetidas referencias a un pequeño conjunto de instrucciones. Esto también se cumple al trabajar con matrices o arreglos.&lt;/p&gt;
&lt;p&gt;¿En qué momento del ciclo de instrucciones se fija la CPU si hay pedido de interrupciones? ¿Por qué? Describa los pasos que se llevan a cabo cuando se encuentra el pedido.&lt;/p&gt;
&lt;p&gt;Después de la ejecución de la instrucción.&lt;/p&gt;
&lt;p&gt;Pasos&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;ol&gt;
&lt;li&gt;Suspende la ejecución del programa en curso y guarda su contexto. Esto significa almacenar la dirección de la siguiente instrucción a ejecutar y cualquier otro dato relacionado con la actividad en curso del procesador.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Carga el PC con la dirección de comienzo de una rutina de gestión de interrupción.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A continuación el procesador prosigue con el ciclo de captación y accede a la primera instrucción del programa de gestión de interrupción, que dará servicio a la interrupción. Generalmente el programa de gestión de interrupción forma parte del sistema operativo. Normalmente, este programa determina el origen de la interrupción y realiza todas las acciones que sea necesarias. Cuando la rutina de gestión de interrupción se completa, el procesador puede proseguir la ejecución del programa de usuario en el punto en el que se interrumpió.&lt;/p&gt;
&lt;p&gt;¿Qué objetivo persigue la existencia del registro puntero de pila (stack pointer) en el CPU? ¿Para qué serviría tener más de uno?&lt;/p&gt;
&lt;p&gt;El objetivo del stack pointer es contener el valor de la dirección del tope de la pila.&lt;/p&gt;
&lt;p&gt;Tener más de un Stack Pointer serviría para poder tener una pila para el usuario y una para el sistema. Esto evitaría que el usuario tenga que estar pendiente de los cambios que realiza el sistema en la pila.&lt;/p&gt;
&lt;p&gt;Completada la instrucción add AX, meno1. ¿Qué instrucción deberá ejecutar a continuación para determinar si el resultado obtenido es correcto o no? Considere los casos de representación de números sin signos y en ca2.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Para números sin signo debería ejecutar: 
		JNC correcto
		MOV CX, 1
		JMP fin
correcto:	MOV CX, 0
fin:		HLT

Para números en ca2 debería ejecutar: 
		JNO correcto
		MOV CX, 1
		JMP fin
correcto:	MOV CX, 0
fin:		HLT
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Describa los componentes que definen el tiempo de acceso de un disco magnético. ¿Cómo se podría calcular un tiempo de acceso promedio?&lt;/p&gt;
&lt;p&gt;Los componentes que definen el tiempo de acceso son: Por un lado, la cabeza de lectura, que tiene una cierta velocidad para alcanzar el cilindro buscado (tiempo de seek).
También los discos en si, que tienen una determinada velocidad de giro. Esto determina el tiempo de latencia, que ocurre desde que la cabeza de lectura se posiciona sobre el cilindro, hasta que el sector buscado pasa por debajo de la cabeza.&lt;/p&gt;
&lt;p&gt;Para calcular el tiempo de acceso promedio debemos sumar el tiempo de seek y el tiempo de latencia promedio. Este último se puede calcular como el tiempo de giro de una pista dividido dos.
Otra manera podría ser midiendo el tiempo de acceso de una gran cantidad de accesos y hacer un promedio.&lt;/p&gt;
&lt;p&gt;¿Qué es un JK? Describa las características de funcionamiento con tabla de comportamiento y gráfico del circuito lógico.&lt;/p&gt;
&lt;p&gt;Es un circuito secuencial, por lo tanto la salida depende de la entrada como del estado interno del circuito. Es un tipo de flip-flop que tiene dos entradas al igual que es SR, pero todas las combinaciones posibles son validas. La entrada J sola realiza la función de puesta a 1, causando que la salida sea 1. La entrada K solo realiza la función de puesta a 0. Cuando J y K son 1 la función realizada es de conmutación: la salida se invierte.&lt;/p&gt;
&lt;p&gt;Describa paso a paso el ciclo de instrucción correspondiente a la ejecución JMP memo1. Dicha instrucción ocupa 3 bytes en memoria. La memoria almacena palabras de 8 bits y direcciona con 16 bits.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Busca el código de operación&lt;/li&gt;
&lt;li&gt;Incrementa el Program Counter&lt;/li&gt;
&lt;li&gt;Decodifica y detecta que se trata de un salto&lt;/li&gt;
&lt;li&gt;Busca la parte baja de la dirección a la que tiene que saltar&lt;/li&gt;
&lt;li&gt;Incrementa el PC&lt;/li&gt;
&lt;li&gt;Busca la parte alta de la dirección a la que tiene que saltar&lt;/li&gt;
&lt;li&gt;Incrementa el PC&lt;/li&gt;
&lt;li&gt;Carga el PC con el valor de la dirección a la que tiene que saltar&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Enumere las instrucciones de tipo transferencia de control que posee el MSX-88 y explique el modo de direccionamiento de c/u de ellas.&lt;/p&gt;
&lt;p&gt;Las instrucciones de tipo transferencia de control que posee el MSX-88 son: Los saltos (JMP, JZ, JNZ, JS, JNS, JC, JNC, JO, JNO)
Las llamadas a subrutinas (Call, Ret)
También son de transferencia de control las de interrupciones.&lt;/p&gt;
&lt;p&gt;Los modos de direccionamiento que usan son:
Relativos al PC, donde se tiene un número que debe ser sumado al contenido del PC.
Directo, cuando la etiqueta representa una dirección a la que se debe saltar.&lt;/p&gt;
&lt;p&gt;¿Que es un módem? Para que sirve, porque se utiliza? Cuales son los parámetros de un módem?&lt;/p&gt;
&lt;p&gt;MODEM: MOdulador, DEModulador. Convierte señales &apos;0&apos; y&apos;1&apos; en tono de audio y viceversa. La tasa de Bits/seg (bps) es el numero de bits enviados por segundo. Tasa de baudio es el numero de cambio de señal por segundo.
Su principal uso es para telecomunicaciones: convierte señales analógicas provenientes de un sistema telefónico a cadenas binarias. Es una de las tecnologías más usadas para conectarse a internet.&lt;/p&gt;
&lt;p&gt;Describa los mecanismos de impresión que conozca, compare calidad obtenible, cantidad de copias por vez, tamaño de papel utilizable, cantidad de colores y velocidad de impresión de los mecanismos que mencione.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Impresora de impacto: Los caracteres son impresos golpeando los moldes de los caracteres o una cinta entintada sobre la hoja.
En la disposición “Margarita” todos los caracteres sobre relieve están dispuestos en forma de flor e impactan de a uno contra la hoja, golpeando una cinta entintada que les permite marcar el carácter. La ventaja es que cada carácter individual se imprime con buena calidad, pero no puede imprimir nada que no sea cadenas de caracteres.
En cambio, las impresoras por matriz de puntos, marcan los caracteres sobre una cinta al igual que las de margarita, pero usando punzones manejados por solenoides. Tiene tantos punzones como sea el alto de la matriz de caracteres. Produce muy baja resolución.
Ambos tipos de impresoras son muy lentas y por lo general ruidosas. Según el fabricante, pueden usar algunos colores, pero muy limitados y de baja calidad y resolución.&lt;/li&gt;
&lt;li&gt;Impresora láser: Es el tipo de impresora con mayor resolución, llegando hasta 1200dpi. Permite usar todos los colores y puede imprimir páginas completas de texto o gráfico a gran velocidad. Permite realizar muchas copias en menos tiempo que los demás sistemas. La desventaja es que son costosas.&lt;/li&gt;
&lt;li&gt;Impresora Ink-jet ó de inyección de tinta: Tienen un trasductor ultrasónico que lanza pequeños chorros de tinta a los puntos correctos con la cabeza moviéndose sobre el papel.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Permite tanto blanco y negro como color.
El precio, resolución, y velocidad se encuentra entre las anteriores. Esto hace que sean las más comunes para uso cotidiano.&lt;/p&gt;
&lt;p&gt;Con respecto a al tamaño utilizable, puede que las impresoras de impacto estén limitadas por el tamaño físico de los punzones o martillos. En los otros tipos, depende del tamaño de bandeja que incorpore el fabricante. Los tamaños más comunes son los estándares “A4”, “Oficio”, “carta”, etc.&lt;/p&gt;
&lt;p&gt;La cantidad de copias por vez va depender de la velocidad de impresión del dispositivo, siendo las más rápidas las láser.&lt;/p&gt;
&lt;p&gt;Describa las diferencias que tendremos entre una computadora con teclado y monitor como periféricos y una que posee un equipo denominado terminal como periférico. Puede considerar cantidad y ubicación de la memoria de video, cantidad y tipo de puertas de E/S, tipo de comunicación entre CPU y periférico.&lt;/p&gt;
&lt;p&gt;En una computadora tradicional con teclado y monitor, tendremos un monitor de video con memoria de visualización que está mapeada en la memoria principal del equipo. En cambio, en un esquema con terminales, cada terminal se compone de un teclado y un monitor con su propia memoria de visualización dedicada a ese terminal. Esto evita que se llene la memoria principal del computador que centraliza a los terminales.
Cada terminal puede estar alejado físicamente del CPU, por ejemplo, se puede tener el computador principal en una habitación y poner un terminal en cada una de las demás habitaciones.&lt;/p&gt;
&lt;p&gt;La terminal conecta sus periféricos con la computadora a través de una conexión en serie, que tiene poco ancho de banda, por lo que los monitores de los terminales suelen estar orientados a caracteres para ahorrar transferencia de datos. En cambio, las computadoras con video mapeado en memoria conectan los periféricos directamente al bus de memoria, que permite cambios rápidos. Esto hace que tenga solo 1 E/S para el monitor, a diferencia de el computador con terminales, que va a tener 1 conexión de E/S para cada terminal, a pesar de que no necesite mapear la memoria de visualización en su memoria principal.&lt;/p&gt;
&lt;p&gt;¿Qué define el Teorema fundamental de la numeración?&lt;/p&gt;
&lt;p&gt;El teorema fundamental de la numeración establece la forma general de construir números en un sistema de numeración posicional.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/9444bbcd-3859-4012-81d7-878d78c006bf&quot; alt=&quot;1&quot;&gt;&lt;/p&gt;
&lt;p&gt;Donde:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;N es el número decimal&lt;/li&gt;
&lt;li&gt;d es un dígito que puede variar entre {0,1,..., (b-1)}&lt;/li&gt;
&lt;li&gt;b es la base de representación&lt;/li&gt;
&lt;li&gt;-k es la posición del dígito menos significativo, y n es la posición del dígito más significativo.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h1&gt;Ejemplos&lt;/h1&gt;
&lt;h3&gt;Numeros en Punto Flotante&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/4f2ba0e9-bbae-429a-8a6e-25b4b37ab826&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Mantisa Entera BCS restringido a 4 bits y el Exponente BSS restringido a 3 bits. (0110010)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://youtu.be/lbf76DyolKI?si=DEQxUtXJvvjt9HJL&quot;&gt;Explicación Numeros en Punto Flotante Parte 1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/9b61158b-ce27-4788-bcf4-649c88b72f09&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Mantisa Entera BCS restringido a 4 bits y el Exponente BSS restringido a 3 bits. (1011111)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://youtu.be/O10ce7g59NI?si=2LlCO5TQizDLDIv6&quot;&gt;ExplicaciónNumeros en Punto Flotante Parte 2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/4f11d9df-ef12-4358-8945-4eaf231fe52f&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Mantisa Entera BCS restringido a 4 bits y el Exponente BSS restringido a 3 bits. (1010011)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://youtu.be/EcgWg25SeZU?si=WKmM16BvpPtvhpLt&quot;&gt;Explicación Numeros en Punto Flotante Parte 3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/7fbd2ac9-e475-4af0-9e27-e76245d9ada4&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Mantisa Fraccionaria BCS restringido a 4 bits y el Exponente BSS restringido a 3 bits. (1010011)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://youtu.be/be6uwcy1GT4?si=Nlhqgx7-QXwDG69A&quot;&gt;Explicación Numeros En Punto Flotante Parte 4&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/aa135c5e-0f92-4a02-9df8-a348069ce43e&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Sistema en Punto Flotante cuya mantisa es fraccionaria, con 6 bits, está expresada en BSS (en el inciso a) o BCS (en el insciso b) y su exponente en BCS con 4 bits, escriba el significado de las siguientes cadenas de bits (mantisa a la izquierda)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://youtu.be/NNqgT0xH9Kg?si=6gpAC7r8ZpVMXEKq&quot;&gt;Explicación Practica Punto Flotante Parte 1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/c3f91b66-747b-46df-80b1-74d6be91fb3f&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Sistema en Punto Flotante cuya mantisa es fraccionaria, con 6 bits, está expresada en BSS (en el inciso a) o BCS (en el insciso b) y su exponente en BCS con 4 bits, escriba el significado de las siguientes cadenas de bits (mantisa a la izquierda)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://youtu.be/2X5Owj5l3po?si=d_4N4pF9kRZbDnEJ&quot;&gt;Explicación Practica Punto Flotante Parte 2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/f396aabc-2ea9-4461-8baa-fe5119122526&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Sistema en Punto Flotante cuya mantisa es fraccionaria, con 6 bits, está expresada en BSS (en el inciso a) o BCS (en el insciso b) y su exponente en BCS con 4 bits, escriba el significado de las siguientes cadenas de bits (mantisa a la izquierda)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://youtu.be/CxcN47BthFU?si=QjD6DulFumBWp5c8&quot;&gt;Explicación Practica Punto Flotante Parte 2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Parte A)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/799a6276-bc4d-48ec-8975-6d726151f40f&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Parte B)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/d24aaa58-5005-425f-9e28-dd58e56a01b6&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href=&quot;https://youtu.be/0P0NGutcPcA?si=9pnez6f-I7_6wPNL&quot;&gt;Explicación Punto Flotante Ejercicio 1 Rango y Resolución Parte 1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Calcular El Rango&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/3284f9db-6bd8-46a1-aefc-701874c896e4&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Esto es un ejemplo para ver el maximo anterior y lo demas continua en la siguiente clase&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/0eadd8e8-6d71-4aae-a31f-2ba3f84237da&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href=&quot;https://youtu.be/pd-uk_Nrgus?si=QwrV6_4IiDForYep&quot;&gt;Explicación Punto Flotante Ejercicio 1 Rango y Resolución Parte 2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/76056776-892c-4e47-9e86-070cf6cf3315&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/thumbnail.DPC_6rSH.jpg"/><enclosure url="/_astro/thumbnail.DPC_6rSH.jpg"/></item><item><title>Introducción a los sitemas Operativos</title><link>https://fabianmartinezrincon.com/blog/practicas-iso</link><guid isPermaLink="true">https://fabianmartinezrincon.com/blog/practicas-iso</guid><description>Practica 1, 2 y 3 de Introducción a los Sistemas Operativos.</description><pubDate>Fri, 15 Jul 2022 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;El objetivo de esta práctica es que el alumno se familiarice con los conceptos básicos del sistema operativo GNU/Linux, así como con su entorno y comandos principales.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;1) Características de &lt;strong&gt;GNU/Linux&lt;/strong&gt;:&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Es multiusuario:&lt;/strong&gt; Cumple simultáneamente las necesidades de dos o más usuarios que comparten los mismos recursos, un sistema multiusuario permite que los usuarios accedan a los datos o procesos de una única maquina, desde diferentes computadoras o termínales&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Es multitarea y multiprocesador:&lt;/strong&gt; Puede realizar varias operaciones, funciones o ejecuciones al mismo tiempo&lt;/p&gt;
&lt;p&gt;Los SO multitarea permiten realizar varias operaciones gracias a una operación denominada cambio de contexto que actúa de la siguiente manera, quita un proceso del CPU, ingresa uno nuevo, y luego vuelve a ingresar el proceso que quitó del CPU en una especie de cola de ejecución, sin que el procesador se entere de todo lo que está pasando, de modo, que pueda realizar varias tareas simultáneas. Es como una especie de engaño, que permite mejorar el rendimiento de los ordenadores y facilitar el trabajo a los usuarios.&lt;/p&gt;
&lt;p&gt;Multiprocesador se refiere al número de procesadores del sistema, que es más de uno y éste es capaz de usarlos todos para distribuir su carga de trabajo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Es altamente portable:&lt;/strong&gt; Se puede usar en cualquier ordenador que tenga el SO para el que fue programado sin la
necesidad de una instalación previa; significa que no hace falta la instalación de bibliotecas adicionales en el sistema para que pueda funcionar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Posee diversos intérpretes de comandos, de los cuales algunos son programables&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Es el método de interacción entre el usuario y la máquina (shell)&lt;/li&gt;
&lt;li&gt;CLI (interfaz de línea de comando) un ejemplo seria la terminal bash.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Permite el manejo de usuarios y permisos:&lt;/strong&gt; Nos permite darle permisos particulares a usuarios y archivos del file system.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Todo es un archivo (hasta los dispositivos y directorios):&lt;/strong&gt; Todo es un fichero. Los directorios son ficheros, los ficheros son ficheros, y los dispositivos son ficheros. A veces a los dispositivos se les llama nodos, pero siguen siendo ficheros.&lt;/p&gt;
&lt;p&gt;Los sistemas de ficheros de GNU/Linux se organizan en una estructura jerárquica, de tipo árbol.&lt;/p&gt;
&lt;p&gt;El nivel más alto del sistema de ficheros es / o directorio raíz. Todos los demás ficheros y directorios están bajo el directorio raíz. Por ejemplo, &lt;code&gt;/home/jebediah/cheeses.odt&lt;/code&gt; muestra la ruta completa al fichero cheeses.odt que está en el directorio jebediah, que a su vez está bajo el directorio home, que por su parte está bajo el directorio raíz (/).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cada directorio puede estar en una partición diferente (/temp, /home, etc.):&lt;/strong&gt; En Linux, el sistema de archivos se organiza en una estructura de árbol con una raíz denominada &quot;/&quot; (barra). Dentro de esta estructura de árbol, cada partición puede montarse en un directorio diferente, lo que significa que los archivos y directorios que se encuentran dentro de esa partición se harán accesibles a través del directorio montado.&lt;/p&gt;
&lt;p&gt;Por ejemplo, si tienes una partición llamada /dev/sda1 y quieres montarla en el directorio /home, los archivos y directorios en esa partición estarán disponibles en el directorio /home. Si tienes otra partición llamada /dev/sda2 y quieres montarla en /temp, los archivos y directorios en esa partición estarán disponibles en el directorio /temp.&lt;/p&gt;
&lt;p&gt;En resumen, en Linux, cada partición puede montarse en un directorio diferente en la estructura de árbol de archivos del sistema, lo que permite una mejor organización y gestión de los datos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Es case sensitive:&lt;/strong&gt; Sensible a las mayúsculas y minúsculas&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Es código abierto:&lt;/strong&gt; Software cuyo código fuente y otros derechos que normalmente son exclusivos para quienes poseen los derechos de autor, son publicados bajo una licencia de código abierto o forman parte del dominio público. En las licencias compatibles con la Open Source Definition el propietario de los derechos de autor permite a los usuarios utilizarlo, modificarlo, estudiarlo, aprovechar su documentación, redistribuir el software, a cualquiera, para cualquier propósito, ya sea en su forma modificada o en su forma original etc.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A diferencia de Windows y Mac, Linux no pertenece a ninguna compañía, sino que su desarrollo depende de la colaboración de un gran número de empresas y profesionales.&lt;/li&gt;
&lt;li&gt;Su uso esta mas enfocado a programadores dado que sus interfaces son menos amigables.&lt;/li&gt;
&lt;li&gt;Los demás sistemas suelen ser en su mayoría pagos y enfocados mas a lo comercial&lt;/li&gt;
&lt;li&gt;El manejo de permisos de Linux vuelve mas difícil la creación de un virus para dicho sistema mientras que en Windows es mas común.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;GNU es un SO de tipo Unix pero libre, diseñado por miles de programadores, así como una gran colección de programas informáticos que componen al sistema, desarrollado por y para el GNU.&lt;/p&gt;
&lt;p&gt;Está formado en su totalidad por software libre, mayoritariamente bajo términos
de copyleft. GNU es el acrónimo recursivo de &quot;GNU&apos;s Not Unix&quot; &lt;strong&gt;(GNU no es Unix)&lt;/strong&gt;, nombre elegido debido a que GNU sigue un diseño tipo Unix y se mantiene compatible con este, pero se distingue de Unix por ser software libre y por no contener código de Unix.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El proyecto GNU fue iniciado por Richard M. Stallman con el propósito de crear un sistema operativo completo y libre: el sistema GNU.&lt;/li&gt;
&lt;li&gt;Se baso principalmente en 4 libertades
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Libertad 1:&lt;/strong&gt; la libertad para ejecutar el programa con cualquier fin.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Libertad 2:&lt;/strong&gt; La libertad de estudiar cómo trabaja el programa y de adecuarlo para que haga lo que usuario desee&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Libertad 3:&lt;/strong&gt; la libertad de redistribuir el programa de manera de colaborar con el resto de la sociedad.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Libertad 4:&lt;/strong&gt; la libertad de hacer pública y distribuir a terceros la versión mejorada.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pondria más pero a nadie le importa la historia de linux salu2.&lt;/p&gt;
&lt;p&gt;Puede realizar varias operaciones, funciones o ejecuciones al mismo tiempo&lt;/p&gt;
&lt;p&gt;Los SO multitarea permiten realizar varias operaciones gracias a una operación denominada cambio de contexto que actúa de la siguiente manera, quita un proceso del CPU, ingresa uno nuevo, y luego vuelve a ingresar el proceso que quitó del CPU en una especie de cola de ejecución, sin que el procesador se entere de todo lo que está pasando, de modo, que pueda realizar varias tareas simultáneas. Es como una especie de engaño, que permite mejorar el rendimiento de los ordenadores y facilitar el trabajo a los usuarios.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Linux es Multitarea:&lt;/code&gt; La multitarea no consiste en hacer que el procesador realice más de un trabajo al mismo tiempo (un solo procesador no tiene esa capacidad), lo único que realiza es presentar las tareas de forma intercalada para que se ejecuten varias simultáneamente. Por lo tanto en Linux es posible ejecutar varios programas a la vez sin necesidad de tener que parar la ejecución de cada aplicación.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GNU/Linux si es multitarea.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;POSIX (Interfaz de sistema operativo portátil) es un conjunto de interfaces de sistema
operativo estándar basadas en el sistema operativo Unix .&lt;/p&gt;
&lt;p&gt;Definen una interfaz y un entorno estándar que puede utilizar un sistema operativo para proporcionar acceso a aplicaciones compatibles con POSIX.&lt;/p&gt;
&lt;p&gt;El estándar también define un intérprete de comandos ( shell ) y programas de utilidad comunes . POSIX admite la portabilidad de aplicaciones en el nivel del código fuente , por lo que las aplicaciones se pueden crear para ejecutarse en cualquier sistema operativo compatible con POSIX.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2) Distribuciones de &lt;strong&gt;GNU/Linux&lt;/strong&gt;:&lt;/h2&gt;
&lt;p&gt;Una distribución es un conjunto de software de GNU, así como programas de sistema, librerías y aplicaciones de usuario, con también software de terceros (a veces), con una versión de un kernel de Linux, todo compilado, empaquetado, configurado y preparado para su instalación en una computadora.&lt;/p&gt;
&lt;p&gt;En resumen una distribución de GNU/Linux es el sistema operativo preparado para ser instalado y usado en una computadora.&lt;/p&gt;
&lt;p&gt;Desarrollar una distribución es elegir de entre todos los programas de sistema (compiladores, intérpretes, etc.) y aplicaciones de usuario (entornos gráficos de escritorio, editores de texto, paquetes de ofimática, etc.) de GNU y de software de terceros (a veces, no siempre), los que se crean convenientes según la distribución que se quiera crear, más pesada, más ligera, etc., sumado a una versión de un kernel de Linux.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Distribución GNU/Linux = Software GNU + Software de terceros (no siempre) + Kernel de Linux.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cualquier persona con conocimientos de programación puede crear una distribución
GNU/Linux, por eso hay cientos de ellas.&lt;/p&gt;
&lt;p&gt;Es tan indispensable el kernel de Linux como el conjunto de programas y librerías de GNU. Por ello cuando a una distribución GNU/Linux se le llama Linux a secas, es una falta de respeto hacia todo el software que GNU ha desarrollado y continua desarrollando como software libre y gratuito.&lt;/p&gt;
&lt;p&gt;Debian, Opensuse, Fedora, Ubuntu.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Debian:&lt;/code&gt;&lt;/strong&gt; Se orienta a la estabilidad, en términos de ciclo de desarrollo. Sus actualizaciones y versiones se liberan cuando están listas y bien probadas. Lo cual es bueno para servidores, pero por otra parte nos limita compatibilidad con dispositivos de hardware más novedosos. Son muy exigentes en lo que respecta a Software Libre.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Fedora:&lt;/code&gt;&lt;/strong&gt; Se orienta a innovación con un ciclo de desarrollo corto de seis meses, y un tiempo de soporte de un año sobre sus paquetes. Lo más nuevo se encuentra en Fedora, a veces la gente desconfía de la solidez de sus paquetes sin embargo lo que sucede es que están en fase de maduración y se le integran mejores funcionalidades. Por ahí leí que Fedora es como probar lo que Linux ofrecerá dentro de seis meses.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Opensuse:&lt;/code&gt;&lt;/strong&gt; Novel se quedó sin sistema operativo para su plataforma de servidores y redes, así que compro Suse. Su panel de control para configuración lo hace fácil de configurar. Es un buena elección para aprender de servidores, pero posiblemente para cosas más sofisticadas dejarán las herramientas de configuración y harán ajustes personalizados. El mundo de Software Libre les critica fuertemente sus acuerdos de interoperabilidad con Microsoft.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Ubuntu:&lt;/code&gt;&lt;/strong&gt; Se propuso cambiarle la cara al mundo Linux y ciertamente lo ha logrado. Apuntando a ser fácil de usar hace bien simple la instalación de drivers y decodificadores privativos, cosa que se le critican los fundamentalistas del software libre. Su programa de enviar discos gratis hasta la puerta de tu casa ha significado su creciente popularidad. Tiene ciclo de desarrollo rápido, pero sus versiones tienen ciclos de soporte alternado, entre periodos largos y cortos, tratando de tener estabilidad de soporte y flexibilidad de desarrollo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Las mayores diferencias se encuentran sobre todo en distribuciones comerciales, donde se han introducido herramientas para una fácil instalación, detección de software etc...&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Diferencias:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Proceso de instalación.&lt;/li&gt;
&lt;li&gt;Ayudantes o wizard que te ayuden en la configuración de tu máquina.&lt;/li&gt;
&lt;li&gt;Gestores de paquetes.&lt;/li&gt;
&lt;li&gt;Secuencia en el proceso de arranque.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Debian es una comunidad de desarrolladores , que mantiene un sistema operativo GNU basado en software libre. El sistema se encuentra precompilado, empaquetado y en formato deb para múltiples arquitecturas de computador y para varios núcleos.&lt;/p&gt;
&lt;p&gt;El proyecto Debian fue anunciado inicialmente 1993 por Ian Murdock. Debian 0.01 fue lanzado el 16 de agosto de 1993 y la primera versión estable fue hecha en 1996.&lt;/p&gt;
&lt;p&gt;Nació como una apuesta por separar en sus versiones el software libre del software no libre. El modelo de desarrollo del proyecto es ajeno a motivos empresariales o comerciales, siendo llevado adelante por los propios usuarios, aunque cuenta con el apoyo de varias empresas en forma de infraestructuras.&lt;/p&gt;
&lt;p&gt;Debian no vende directamente su software, lo pone a disposición de cualquiera en Internet, aunque sí permite a personas o empresas distribuirlo comercialmente mientras se respete su licencia.&lt;/p&gt;
&lt;p&gt;La primera adaptación del sistema Debian, siendo también la más desarrollada, es Debian GNU/Linux, basada en el núcleo Linux, y como siempre utilizando herramientas de GNU&lt;/p&gt;
&lt;p&gt;Los nombres de las versiones de Debian son tomados de la película Toy Story. Hasta la fecha,
hay quince versiones estables (con sus respectivas revisiones) enumeradas en la tabla adjunta:&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3) Estructura de GNU/Linux:&lt;/h2&gt;
&lt;p&gt;Kernel, shell y Filesystem.&lt;/p&gt;
&lt;p&gt;Estructura. Nos ocuparemos de tres componentes principales:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Kernel:&lt;/code&gt;&lt;/strong&gt; El núcleo se podría definir como el corazón de este sistema operativo. Es a grandes rasgos, el encargado de que el software y el hardware de una computadora puedan trabajar juntos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Shell:&lt;/code&gt;&lt;/strong&gt; Es un programa que recibe lo que se escribe en una terminal de texto y lo convierte en instrucciones para el sistema operativo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Filesystem:&lt;/code&gt;&lt;/strong&gt; Es la forma lógica en que dentro de un SO se organizan y se administran los archivos.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;4) Kernel:&lt;/h2&gt;
&lt;p&gt;El kernel es la estructura principal del SO, es el que se encarga de que el software y el hardware puedan trabajar juntos.&lt;/p&gt;
&lt;p&gt;Es un núcleo monolítico hibrido, y esta licenciado bajo la licencia GPL v2.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Evolución&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;En 1991 Linus Torvalds inicia la programación del kernel Linux basándose en Minix (un clon de Unix desarrollado por Tenembaum en 1987).&lt;/p&gt;
&lt;p&gt;En octubre de 1991 sale la primera versión oficial Linux(0.02) .&lt;/p&gt;
&lt;p&gt;En 1992 se une Linux con el proyecto Gnu de Richard Stallman , la versión 1.0 aparece el 14 de marzo del 94’ , luego el desarrollo de Gnu/Linux se sigue desarrollando por miles de programadores, en el 96’ adoptan como mascota oficial a Tux (pingüinito).&lt;/p&gt;
&lt;p&gt;En julio de 1996 se lanza la versión 2.0 y se define la nomenclatura de versionado. Se desarrollo hasta febrero de 2004 y termino con la 2.0.40. En enero de 1999 se lanza la versión 2.2, que provee mejoras de portabilidad entre otras y se desarrolla hasta febrero de 2004 terminando en la versión 2.2.26.&lt;/p&gt;
&lt;p&gt;En 2001 se lanza la versión 2.4 y se deja de desarrollar a fines del 2010 con la 2.4.37.11. La versión 2.4 fue la que catapulto a GNU/Linux como un SO estable y robusto.&lt;/p&gt;
&lt;p&gt;Durante este período es que se comienza a utilizar Linux más asiduamente Núcleo.&lt;/p&gt;
&lt;p&gt;A fines del 2003 se lanza la versión 2.6, Esta versión ha tenido muchas mejoras para el SO dentro de las que se destacan soporte de hilos, mejoras en la planificación y soporte de nuevo hardware.&lt;/p&gt;
&lt;p&gt;El 3 de agosto de 2011 se lanza la versión 2.6.39.4 anunciándose la misma desde meses
previos como la última en su revisión.&lt;/p&gt;
&lt;p&gt;El 17 de julio de 2011 se lanza la versión 3.01, No agrega mayores cambios.&lt;/p&gt;
&lt;p&gt;La decisión del cambio son los 20 años del SO y no superar los 40 números de revisión. Totalmente compatible con 2.6. La última versión estable es la 5.19.6 (agosto de 2022).&lt;/p&gt;
&lt;p&gt;Funciones principales: Administrar la memoria, CPU y E/S, administración de procesos y
comunicación y concurrencia.&lt;/p&gt;
&lt;p&gt;La versión del kernel actual es 5.16. Lo demas a nadie le importa&lt;/p&gt;
&lt;p&gt;En la versión 2.0 se define la nomenclatura del versionado:&lt;/p&gt;
&lt;p&gt;Modo de Versionar: A.B.C.[D]&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;A)&lt;/code&gt; Denota Versión. Cambia con menor Frecuencia. en 1994 (versión 1.0), en 1996 (versión 2.0) y en 2010(3.0).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;B)&lt;/code&gt; Denota Mayor revisión. Antes de la versión 2.6, los números impares indicaban desarrollo, los pares producción.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;C)&lt;/code&gt; Denota Menor revisión. Solo cambia cuando hay nuevos drivers o características. -------------------------- la D se agrega a partir de la visión 2.4 ------------------------------------------&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;D)&lt;/code&gt; Cambia cuando se corrige un grave error sin agregar nueva funcionalidad.
(casi no se usan en la rama de versiones 3.x, 4.x y 5.x viéndose reflejado en el componente C del SO).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ejemplo actualidad: versión 5.19.6&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Antes de la versión 2.6, los números impares indicaban desarrollo, los pares producción.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sí. Se puede instalar en la misma máquina, pero 2 núcleos corriendo simultáneamente en Linux es imposible&lt;/p&gt;
&lt;p&gt;Se encuentra ubicado el /lib/: librerías esenciales compartidas y módulos de kernel&lt;/p&gt;
&lt;p&gt;Directorio raíz de toda la jerarquía de archivos del sistema.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;\&lt;/code&gt; Jerarquia Primaria&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/bin/&lt;/code&gt; Comandos binarios esenciales de usuario&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/boot/&lt;/code&gt; Archivos estáticos del selector de arranque&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/dev/&lt;/code&gt; Archivos de unidades&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/&lt;/code&gt; Configuración del sistema de Host Especifico&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/home/&lt;/code&gt; Directorio &quot;home&quot; de usuario&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/lib/&lt;/code&gt; Librerias esenciales compartidas y módulos de Kernel&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/media/&lt;/code&gt; Punto de Montaje para medios removibles&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/mnt/&lt;/code&gt; Punto de Montaje temporal para sistemas de archivos&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/opt/&lt;/code&gt; Agregados de paquetes de Software y Aplicaciones&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/sbin/&lt;/code&gt; Binarios de Sistema&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/srv/&lt;/code&gt; Datos para los servicios provistos por este sistema&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/tmp/&lt;/code&gt; Archivos temporales&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/usr/&lt;/code&gt; Unidades y aplicaciones de (Multi) usuario&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/var/&lt;/code&gt; Variables de archivo&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/root/&lt;/code&gt; Directorio &quot;Home&quot; del usuario Root&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/proc/&lt;/code&gt; Documentación del sistema de archivos virtual del Kernel y las condiciones de los procesos en archivos de texto&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El kernel Gnu/Linux si es &lt;strong&gt;monolítico&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;Kernel monolítico&lt;/code&gt;&lt;/strong&gt; quiere decir que toda funcionalidad que implementa el SO se ejecuta en modo kernel o supervisor, ejemplo cuando un usuario quiere ejecutar un proceso se pasa a modo kernel se resuelve todo ahí y después regresa a modo usuario cuando esa resolución termino, toda la lógica se encuentra en el modo kernel.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;Ventajas&lt;/code&gt;&lt;/strong&gt; el modelado, el diseño implica menos tiempo en la resolución de las cosas. (cambio de modo - resuelvo lo que tengo que resolver - vuelvo a modo usuario).&lt;/p&gt;
&lt;p&gt;También existe el &lt;em&gt;&lt;strong&gt;kernel microkernel&lt;/strong&gt;&lt;/em&gt;, se trata de que el modo kernel o supervisor este el menos tiempo posible y trata de dejar en modo usuario diferentes componentes para que se ejecuten en modo usuario y que hagan de apoyo al modo kernel.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;Ejemplo:&lt;/code&gt;&lt;/strong&gt; el SO tiene un conjunto de procesos que van a ir cambiando cada 3 segundos, cada vez que cambia de proceso eso debe estar en modo kernel, ahora la selección de cuál de esos 3 procesos va a ser seleccionado para a entrar a ejecutarse se puede hacer en modo usuario.&lt;/p&gt;
&lt;p&gt;Básicamente el kernel microkernel reduce al máximo el uso del modo kernel y delega cosas al modo usuario cosa que no sucede con el modo kernel.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5) Intérprete de comandos (Shell):&lt;/h2&gt;
&lt;p&gt;La shell también conocida como CLI (interfaz de línea de comando), es el que gestiona la interacción entre el usuario y el sistema operativo.&lt;/p&gt;
&lt;p&gt;(es solo un programa que hará de mediador entre nosotros y el kernel del SO. Puede ser tanto gráfico Ej. La interfase X-Window, como de texto Linux (Ej. El bash).&lt;/p&gt;
&lt;p&gt;La Shell no forma parte básico del sistema operativo si no que la misma dialogo con el kernel.&lt;br&gt;
La shell es iniciada por un proceso llamado login y dado que cada usuario tiene asignado una shell por defecto la misma se inicia cada vez que un usuario comienza a trabajar en su estación de trabajo, es decir se loguea en una terminal. Dentro del contenido del archivo /etc/passwd, se puede ver cual es la shell que cada usuario tiene asignada por defecto.&lt;/p&gt;
&lt;p&gt;Es el encargado de ejecutar programas a partir del ingreso de comandos.&lt;/p&gt;
&lt;p&gt;Ejemplo: control de procesos, redirección de entrada/salida, listado y lectura de ficheros, protección, comunicaciones y un lenguaje de órdenes para escribir programas por lotes o (scripts o guiones).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Bourne Shell (sh)&lt;/code&gt;&lt;/strong&gt; Creado por S. Bourne, es el más utilizado en la actualidad. Su símbolo del sistema es $. Es el shell estándar y el que se monta en casi todos los sistemas UNIX/Linux.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Korn Shell (ksh)&lt;/code&gt;&lt;/strong&gt; Escrito por David Korn, amplía el shell del sistema añadiendo historial de órdenes, edición en línea de órdenes y características ampliadas de programación.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Bourne Again Shell (bash)&lt;/code&gt;&lt;/strong&gt; Fue creado para usarlo en el proyecto GNU. BASH, por lo tanto, es un shell o intérprete de comandos GNU que incorpora la mayoría de distribuciones de Linux. Es compatible con el shell sh. Además, incorpora algunas características útiles de ksh y csh, y otras propias como la edición de línea de comandos, tamaño ilimitado del historial de comandos, control de los trabajos y procesos, funciones y alias, cálculos aritméticos con números enteros, etc. Su símbolo del sistema es nombre_usuario@nombre_equipo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Los intérpretes se diferencian entre sí básicamente en la sintaxis de sus comandos y en la interacción con el usuario.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PATH:&lt;/strong&gt; es una variable y su contenido es una cadena que contiene rutas de
directorios separadas por dos puntos.&lt;/p&gt;
&lt;p&gt;Por ejemplo, para mostrar el valor de una variable en la shell se debe escribir:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;echo $ nombrevariable &lt;/code&gt;&lt;/li&gt;
&lt;li&gt;en el caso de la variable path seria&lt;/li&gt;
&lt;li&gt;echo$ PATH&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;la variable PATH contiene una lista de directorios separados por dos puntos. Estos son los directorios en los que el shell busca el comando que el usuario escribe desde el teclado.&lt;/p&gt;
&lt;p&gt;La búsqueda no se realiza en el orden en el que están los directorios en la variable PATH.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los &lt;code&gt;comandos propios&lt;/code&gt;, también conocidos como built-in commands, son aquellos que están integrados en la propia shell. Estos comandos suelen ser los más básicos y necesarios para la gestión de la sesión y del sistema, como por ejemplo: cd (para cambiar de directorio), echo (para imprimir texto en la pantalla), exit (para salir de la sesión), entre otros.&lt;/li&gt;
&lt;li&gt;Por otro lado, los &lt;code&gt;comandos externos&lt;/code&gt; son aquellos que se encuentran en el sistema operativo y que son invocados desde la shell. Estos comandos pueden ser programas completos o scripts que realizan una tarea específica. Ejemplos de comandos externos son ls (para listar los archivos en un directorio), cat (para mostrar el contenido de un archivo), grep (para buscar patrones en un archivo), entre otros.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En resumen, los comandos propios están integrados en la propia shell y los comandos externos son programas o scripts que se ejecutan desde la shell.&lt;/p&gt;
&lt;p&gt;La principal razon es que es muy remplazable, en caso de que falle, se puede reiniciar y todo tendria que seguir andando.&lt;/p&gt;
&lt;p&gt;Y tambien&lt;/p&gt;
&lt;p&gt;La shell no forma parte del kernel de Linux porque es una aplicación que proporciona una interfaz de línea de comandos para interactuar con el sistema operativo, mientras que el kernel es la parte central del sistema operativo que administra los recursos del hardware y proporciona servicios básicos al software. Aunque la shell y el kernel trabajan juntos, son dos componentes distintos con diferentes funciones y responsabilidades.&lt;/p&gt;
&lt;p&gt;Si, es posible.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;¿Desde dónde se define?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Se definen en etc/passwd&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;¿Cualquier usuario puede realizar dicha tarea?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;No, cada usuario puede definir su o sus intérpretes&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6) Sistema de Archivos (File System):&lt;/h2&gt;
&lt;p&gt;Es la forma en que dentro de un SO se organizan y se administran los archivos.&lt;/p&gt;
&lt;p&gt;Los usuarios de Linux hacen una distinción del filesystem. Dicen que un filesystem es un esquema de programación que se utiliza para organizar y buscar archivos en una
partición. Mientras que el sistema de archivos se refiere a todos los archivos de la
computadora.&lt;/p&gt;
&lt;p&gt;Lo que esto significa, básicamente, es que el filesystem es la estructura que se utiliza para ver, buscar y usar los archivos mediante Ubuntu. Mientras que el sistema de archivos son todos los archivos separados de esa estructura y el formato de esos archivos.&lt;/p&gt;
&lt;p&gt;A continuación veremos una lista con algunos filesystem utilizados hoy en día:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ext2&lt;/li&gt;
&lt;li&gt;ext3&lt;/li&gt;
&lt;li&gt;ReiserFS&lt;/li&gt;
&lt;li&gt;XFS&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si. En estos momentos existen distribuciones de GNU-Linux que pueden realizar operaciones de lectura y escritura sobre ellas.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://user-images.githubusercontent.com/55964635/227661611-40497548-8ce3-4142-88f9-e193515a9d88.png&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Mencione los directorios más importantes e indique qué tipo de información se encuentra en ellos.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/&lt;/code&gt;&lt;/strong&gt; Tope de la estructura de directorios. Es como el C:\ (raíz).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/home&lt;/code&gt;&lt;/strong&gt; Se almacenan archivos de usuarios (Mis documentos)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/var&lt;/code&gt;&lt;/strong&gt; Información que varía de tamaño (logs, BD, spools)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/etc&lt;/code&gt;&lt;/strong&gt; Archivos de configuración del sistema.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/bin&lt;/code&gt;&lt;/strong&gt; Archivos binarios y ejecutables.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/dev&lt;/code&gt;&lt;/strong&gt; Enlace a dispositivos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/usr&lt;/code&gt;&lt;/strong&gt; Aplicaciones de usuarios&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;(Filesystem Hierarchy Standard - Estándar de jerarquía del sistema de archivos).&lt;/p&gt;
&lt;p&gt;FHS: es el estándar que siguen todos los sistemas operativos unix, para organizar el sistema de archivos.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7) Particiones:&lt;/h2&gt;
&lt;p&gt;Es el nombre que recibe cada división de una sola unidad física de almacenamiento
de datos. (es un pedazo de una unidad ).&lt;/p&gt;
&lt;p&gt;Toda partición tiene su propio sistema de archivos (formato); generalmente, casi cualquier sistema operativo interpreta, utiliza y manipula cada partición como un disco físico independiente, a pesar de que dichas particiones estén en un solo disco físico.&lt;/p&gt;
&lt;p&gt;Existen 3 tipos diferentes de particiones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Partición primaria&lt;/code&gt;&lt;/strong&gt; Son las divisiones crudas o primarias del disco, solo puede haber 4 de éstas o 3 primarias y una extendida. Depende de una tabla de particiones. Un disco físico completamente formateado consiste, en realidad, de una partición primaria que ocupa todo el espacio del disco y posee un sistema de archivos. A este tipo de particiones, prácticamente cualquier sistema operativo puede detectarlas y asignarles una unidad, siempre y cuando el sistema operativo reconozca su formato (sistema de archivos).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Partición extendida&lt;/code&gt;&lt;/strong&gt; También conocida como partición secundaria es otro tipo de partición que actúa como una partición primaria; sirve para contener múltiples unidades lógicas en su interior. Fue ideada para romper la limitación de 4 particiones primarias en un solo disco físico. Solo puede existir una partición de este tipo por disco, y solo sirve para contener particiones lógicas. Por lo tanto, es el único tipo de partición que no soporta un sistema de archivos directamente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Partición lógica&lt;/code&gt;&lt;/strong&gt; Ocupa una porción de la partición extendida o la totalidad de la misma, la cual se ha formateado con un tipo específico de sistema de archivos (FAT32, NTFS, ext2,...) y se le ha asignado una unidad, así el sistema operativo reconoce las particiones lógicas o su sistema de archivos. Puede haber un máximo de 23 particiones lógicas en una partición extendida.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Facilidad de reinstalación.&lt;/code&gt;&lt;/strong&gt; Si separamos los archivos Windows de nuestra información personal, será mucho más fácil reinstalar Windows. Esto es porque nos «ata» todo lo que tenemos guardado, evitando formatear o intentando hallar otras soluciones antes que esa. De hecho, podemos clonar la partición de Windows para hacer restauración.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Copias de seguridad.&lt;/code&gt;&lt;/strong&gt; Las copias de seguridad son las que nos salvan de los problemas catastróficos (que me lo digan a mí). Siempre hay que funcionar sobreseguro, lo que se traduce en tener backups de toda la información, o de la más importante. Las particiones nos dan la ventaja de tener un volumen para copias de seguridad.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Más seguridad.&lt;/code&gt;&lt;/strong&gt; Imaginad que nuestra partición de Windows queda infectada por un virus y perdemos toda la información hallada en ella. Tener nuestra información importante en otra partición nos salva de un gran apuro, especialmente si el virus es ransomware. Igualmente, instalad un antivirus y funcionad con él.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Mejor organización.&lt;/code&gt;&lt;/strong&gt; Esto depende de la persona, pero es innegable que podemos organizarnos mucho mejor teniendo varias particiones. Así, podemos clasificar toda nuestra información de mayor a menor importancia, o según el tipo de información, tamaño, etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Instalar dos o más sistemas operativos.&lt;/code&gt;&lt;/strong&gt; En mi opinión, es uno de los motivos principales por los que las personas hacen particiones. En el pasado, hice una partición para usar OS X y Windows, creando un arranque dual que me permitiera elegir el sistema operativo que quisiese iniciar. Al fin y al cabo, tenéis un volumen listo para usar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Máquinas virtuales.&lt;/code&gt;&lt;/strong&gt; Quienes trabajéis con ellas, haréis particiones para instalar una máquina virtual en ella. Es una gran idea para separar nuestro PC de nuestra máquina virtual. Por tanto, podemos tener ambos contenidos separados; de lo contrario, si algo falla, podríamos perder toda la información de nuestro PC y máquina virtual.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Experiencia más lenta.&lt;/code&gt;&lt;/strong&gt; Si tenemos muchas particiones, puede que nos cueste encontrar un archivo en concreto. Aquí hay que ser muy metódico y ordenado para saber qué partición es vital, como cuál es prescindible. Al final, tardamos en encontrar algo por tener demasiadas particiones.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Posibilidad de errores.&lt;/code&gt;&lt;/strong&gt; Existe la posibilidad de que surjan más fallos cuando tenemos muchas particiones. Son meras cuestiones de probabilidad, así que no hay que volverse loco.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Desorden en los volúmenes.&lt;/code&gt;&lt;/strong&gt; Es fácil que esto ocurra; de hecho, me ha pasado muchas veces a mí. Cuando hacemos una partición, formateamos, volvemos a crear un volumen, etc., podemos crear particiones extendidas que no van a ningún sitio. En mi caso, se trataba de una partición de 700 MB en un HDD de 2 TB: el impacto es mínimo. Sin embargo, no tiene gracia que nos pase en un SSD de poca capacidad.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Innecesario para el usuario medio.&lt;/code&gt;&lt;/strong&gt; Al final, las personas que utilizan el PC para «3 cosas», no requieren particiones, ni se quieren liar a aprender cómo funciona esto. Por tanto, es una opción limitada a aquellos que buscan cierta utilidad.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El primer disco duro &lt;strong&gt;&lt;code&gt;IDE&lt;/code&gt;&lt;/strong&gt; se conoce como /dev/hda. Si tenemos un segundo disco duro IDE se llamará /dev/hdb, etc.&lt;/p&gt;
&lt;p&gt;Los discos duros &lt;strong&gt;&lt;code&gt;SCSI&lt;/code&gt;&lt;/strong&gt; y &lt;strong&gt;&lt;code&gt;SATA&lt;/code&gt;&lt;/strong&gt; se denominan /dev/sda, /dev/sdb, etc. En cada disco son representadas &lt;strong&gt;añadiendo un número decimal al nombre del disco&lt;/strong&gt;: sda1 y sda2 representan a la primera y segunda partición en la primera unidad de disco SCSI en el sistema.&lt;/p&gt;
&lt;p&gt;Si bien el número &lt;strong&gt;mínimo absoluto de particiones sería uno (1)&lt;/strong&gt;, una &lt;strong&gt;instalación típica de GNU / Linux tendrá al menos dos (2)&lt;/strong&gt; particiones: la partición raíz (indicada como /) y la partición de &lt;strong&gt;intercambio&lt;/strong&gt;. Puede optar por tener todos los archivos en una sola partición dentro de la mayoría de las distribuciones durante la instalación.&lt;/p&gt;
&lt;p&gt;El esquema de particiones estándar para la mayoría de las instalaciones domésticas de Linux es el siguiente: Una partición de 12-20 GB para el sistema operativo, que se monta como / (llamada &lt;strong&gt;“raíz”&lt;/strong&gt; o &lt;strong&gt;root&lt;/strong&gt;) Una partición más pequeña que se utiliza para aumentar su RAM, montada y denominada &lt;strong&gt;/swap&lt;/strong&gt;. Una mampara más grande para uso personal, montada como &lt;strong&gt;/home&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Para una instalación de &lt;strong&gt;GNU/Linux saludable se recomiendan 3 particiones swap, root y home&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hay 2 tipos de particiones principales en un sistema Linux:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Partición de datos&lt;/code&gt;&lt;/strong&gt; datos normales del sistema Linux, incluida la partición raíz que contiene todos los datos para iniciar y ejecutar el sistema; y.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Partición de intercambio&lt;/code&gt;&lt;/strong&gt; expansión de la memoria física de la computadora, memoria extra en el disco duro.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Tipo de filesystem&lt;/code&gt;&lt;/strong&gt; Sistema de archivos Ext2, ext3 y ext4: Así como Apple y Microsoft tienen sus propios sistemas, estos tres (cada uno evolución del anterior) son los utilizados por las distribuciones GNU/Linux. El principal inconveniente es que sólo puede ser utilizado en esta familia de sistemas operativos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;Tipo de filesystem&lt;/code&gt;&lt;/strong&gt; Sistema de archivos &lt;strong&gt;Ext2, ext3 y ext4&lt;/strong&gt;: Así como Apple y Microsoft tienen sus propios sistemas, estos tres (cada uno evolución del anterior) son los utilizados por las distribuciones GNU/Linux. El principal inconveniente es que sólo puede ser utilizado en esta familia de sistemas operativos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;Integración de nuevas adquisiciones&lt;/code&gt;&lt;/strong&gt; Si forma una empresa nueva. La empresa recién formada no utiliza las mismas aplicaciones para las nóminas, el inventario y la facturación. Tiene previsto consolidar las dos empresas en un solo conjunto de aplicaciones, pero esta consolidación tardará un tiempo. Mientras tanto, debe reducir el coste de los centros de datos con rapidez.&lt;/p&gt;
&lt;p&gt;Por tanto, decide crear particiones lógicas para las aplicaciones utilizadas por la empresa recién adquirida. Instala un sistema operativo y las aplicaciones utilizadas por la empresa nueva en la partición lógica. Si las cargas de trabajo combinadas necesitan más recursos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;Creación de varios entornos de cliente&lt;/code&gt;&lt;/strong&gt; El usuario suministra servicios e-commerce de alta disponibilidad a diversos clientes. Proporciona recursos de sistema, aplicaciones y soporte técnico a cada cliente, y cada cliente puede configurar y utilizar independientemente las aplicaciones ejecutadas en los recursos de sistema suministrados. En un entorno de este tipo, es esencial aislar a los clientes para que sólotengan acceso a sus recursos. Sin embargo, dedicar un servidor físico a cada cliente tiene un coste prohibitivo, y no permite aumentar ni disminuir fácilmente la cantidad de recursos de sistema utilizados por cada cliente.&lt;/p&gt;
&lt;p&gt;Por tanto, decide crear una partición lógica para cada cliente. Instala un sistema operativo y aplicaciones en cada partición lógica. A continuación, puede utilizar el particionamiento dinámico para añadir recursos a particiones lógicas o eliminar recursos de ellas según sea necesario. Si un cliente deja de utilizar el servicio, puede suprimir la partición lógica de dicho cliente y reasignar los recursos a otras particiones lógicas&lt;/p&gt;
&lt;p&gt;Existen 2 tipos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Destructivos:&lt;/strong&gt; permiten crear y eliminar particiones (fdisk)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No destructivo:&lt;/strong&gt; permiten crear, eliminar y modificar particiones&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;8) Arranque (bootstrap) de un Sistema Operativo:&lt;/h2&gt;
&lt;p&gt;La BIOS (Sistema Básico de Entrada/Salida) es un software que inicializa y comprueba todos los componentes de hardware durante el arranque de la máquina. También prepara el equipo para que el Sistema Operativo se cargue y se ejecute. Su nombre viene de las siglas en inglés Basic Input Output System.&lt;/p&gt;
&lt;p&gt;La Bios es un software de bajo nivel que se encuentra en el Motherboard. Cuando se arranca la computadora el bios se ejecuta, realizando el POST (power – on Self -test) que incluye rutinas que, entre otras actividades, fijan valores de señales internas y ejecutan test internos (ram , teclado etc).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;POST&lt;/code&gt;&lt;/strong&gt; POST es un acrónimo de Power-On Self Test (Autocomprobación de encendido) que se ejecuta en tu PC en el momento en que la enciendes. El POST prueba el hardware de tu computadora y se asegura de que no exista ninguna avería ni haya errores presentes en su sistema operativo.
El POST comprueba todo, desde el teclado y la unidad de disco, hasta la velocidad de la RAM en una computadora y los puertos integrados. Si todo está en orden, POST continuará como de costumbre y permitirá que tu PC se inicie normalmente. Si se detecta un error, el BIOS emitirá un mensaje de error que puede aparecer en forma de texto en la pantalla o una serie de pitidos indicativos de dicho error. Estos sonidos siempre son señales para mensajes determinados, por lo que, si te sucede esto, deberás verificar lo que ello significa para el hardware de tu computadora.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Configuración del CMOS&lt;/code&gt;&lt;/strong&gt; Tu PC almacena todas las configuraciones de bajo nivel como la hora del sistema y la configuración de hardware dentro del CMOS. Esto significa que cada cambio que realices en la estructura del BIOS se guardará en este chip de memoria especial llamado Semiconductor Complementario de Óxido Metálico, o CMOS (por sus siglas en inglés). La configuración del CMOS es responsable, a su vez, de configurar tu contraseña, hora y fecha.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Cargador de arranque&lt;/code&gt;&lt;/strong&gt; El cargador de arranque, programa que vive dentro de la EPROM o ROM de tu computadora, tiene la tarea de leer el sector de arranque del disco duro de tu PC para moverse a lo largo de todo el proceso de carga del sistema operativo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;UEFI (Unified Extensible Firmware Interface o Interfaz de Firmware Extensible Unificada). Es la Alianza entre varias compañías con el objetivo de modernizar el proceso de arranque, querían reemplazar a la BIOS. Sus funciones son parecidas a los de la BIOS, pero mejoradas. UEFI aporta criptografía, autenticación por red, y una interfaz gráfica.&lt;/p&gt;
&lt;p&gt;Usa el sistema GPT (GUID Partition table) para solucionar algunas limitaciones del MBR, tales como la cantidad de particiones y capacidad máxima del dispositivo particionado.&lt;/p&gt;
&lt;p&gt;Sector de arranque – MBR&lt;/p&gt;
&lt;p&gt;El Master Boot Record es el primer sector del disco físico.&lt;/p&gt;
&lt;p&gt;Se ubica en el cilindro 0, cabeza 0, sector 1. En todos los discos existe un MBR, pero el mismo es tenido en cuenta si el disco contiene las particiones del sistema.&lt;/p&gt;
&lt;p&gt;El tamaño de MBR coincide con el tamaño estandard de sector del disco, generalmente 512 bytes. Estos bytes contienen lo siguiente:&lt;/p&gt;
&lt;p&gt;El MBC es un pequeño código que permite arrancar el sistema operativo. La tarea del MBC consiste en buscar una entrada de la tabla de particiones marcada con el valor 0x80 indicando que esta entrada es booteable lo cual indica que la partición correspondiente a esta entrada es booteable. La última acción del BIOS es leer el MBC. Lo lleva a memoria y lo ejecuta.&lt;/p&gt;
&lt;p&gt;Una partición GPT GUID Partition Table es un estándar diseñado para realizar la configuración de las tablas de particiones y su ubicación en medios de almacenamiento como los discos duros físicos.&lt;/p&gt;
&lt;p&gt;Puede ser utilizado independientemente de la UEFI.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;MBR&lt;/code&gt; es la tabla de particiones tradicional que soporta los sistemas operativos más antiguos, mientras que &lt;code&gt;GPT&lt;/code&gt; es un nuevo sustituto que no tiene límites en cuanto al tamaño del disco y el número de particiones que se pueden crear&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;Las ventajas de GPT sobre MBR&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Soporta discos duros más grandes que 2TiB.&lt;/li&gt;
&lt;li&gt;Permite crear particiones teóricamente ilimitadas.&lt;/li&gt;
&lt;li&gt;Contiene una verificación de redundancia cíclica para comprobar la integridad de sus datos.&lt;/li&gt;
&lt;li&gt;Contiene la copia de seguridad del encabezado GPT primario y las entradas de la partición que protege mejor los datos del disco.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un gestor de arranque, es un programa que se encarga del inicio del ordenador, antes del sistema operativo, y que nos permite elegir el sistema operativo que queremos cargar, es decir se encarga del bootstrap (carga) o booteo del sistema.&lt;/p&gt;
&lt;p&gt;Es el encargado de carga el sistema operativo (kernel) de un ordenador en la memoria RAM.&lt;/p&gt;
&lt;p&gt;Se ejecuta luego del código de la BIOS.&lt;/p&gt;
&lt;p&gt;Los datos de un sistema operativo deben cargarse directamente en la memoria RAM al iniciarse el dispositivo. Esto es posible con el bootloader, también conocido como gestor de arranque. El bootloader suele ejecutarse directamente al arrancar un dispositivo usando algún medio que sea booteable, es decir, que sirva como unidad de arranque, como puede ser un disco duro, un CD o DVD, o un stick booteable. El medio de arranque recibe la información acerca de dónde se encuentra el bootloader por parte del firmware del ordenador (BIOS, por ejemplo). Al proceso completo se le denomina inicio, arranque o, en inglés to boot.&lt;/p&gt;
&lt;p&gt;En lo que a la ubicación de los bootloaders se refiere, se han consolidado dos opciones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;El bootloader se guarda en el primer bloque del medio booteable o de arranque (MBR):&lt;/code&gt;&lt;/strong&gt; Está estrechamente relacionada con el principio de los Master Boot Records, que no solo contienen la referencia necesaria por parte del firmware hacia el bootloader, sino también el software de inicio en sí. Para el record se reserva siempre el primer bloque o sector de memoria disponible en el medio. Este bloque o sector también es llamado, precisamente por esta función tan importante, boot block o boot sector.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;El bootloader se guarda en una partición específica del medio de arranque:&lt;/code&gt;&lt;/strong&gt; El sistema operativo usa como lugar de almacenamiento del bootloader una partición seleccionada, si bien el sistema de archivos de base y la tabla de particiones utilizada no tienen por qué coincidir en absoluto. El firmware siempre es un factor decisivo y, este tipo de ubicación del bootloader, requiere además un formato de archivo específico del gestor de arranque. En dispositivos con UEFI se trata, por ejemplo, del formato PE/COFF (Portable Executable / Common Object File Format).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Algunos gestores de arranque: GRUB&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GRUB 2&lt;/li&gt;
&lt;li&gt;LILO o SYSLINUX.&lt;/li&gt;
&lt;li&gt;NTLDR&lt;/li&gt;
&lt;li&gt;GAG&lt;/li&gt;
&lt;li&gt;YaST&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;GRand Unified Bootloader(grub): gestor de arranque múltiple que se usa para iniciar dos o más sistemas operativos instalados en un mismo ordenador.&lt;/p&gt;
&lt;p&gt;Cuando aprietas el botón de arranque de un ordenador, lo primero que aparece en la pantalla son los datos acerca del hardware del equipo. El software responsable de esta información es, en primer lugar, el ya mencionado firmware, que los productores de los dispositivos por lo general implementan en una memoria flash en la placa base o mainboard. En la mayoría de los ordenadores de mesa y portátiles se apuesta por el ya veterano BIOS (Basic Input/Output System) o por el más reciente UEFI (Unified Extensible Firmware Interface). Ambos programas reúnen diferentes datos del hardware y para generar, entre otras cosas, una lista completa de todas las unidades de disco disponibles en el dispositivo.&lt;/p&gt;
&lt;p&gt;Una vez se ha completado este proceso, el firmware comprueba uno a uno los soportes de datos encontrados en busca del bootloader o, más concretamente, la llamada boot signature o boot record. La búsqueda se inicia siempre en los medios extraíbles conectados (CD/DVD, stick USB, discos duros externos, etc.) y luego pasa a los discos duros internos. En estos últimos, el bootloader (o la boot signature) suele estar en el Master Boot Record (MBR), que también aloja la tabla de particiones del soporte de datos. Cuando se encuentre un bootloader, este se cargará y se iniciará así el sistema. Si la búsqueda, en cambio, no tiene éxito, el firmware mostrará un mensaje de error.&lt;/p&gt;
&lt;p&gt;Ell flujo de control durante el arranque es desde el &lt;strong&gt;&lt;a href=&quot;&quot;&gt;BIOS&lt;/a&gt;&lt;/strong&gt;, al &lt;strong&gt;&lt;a href=&quot;&quot;&gt;gestor de arranque&lt;/a&gt;&lt;/strong&gt; y al núcleo (&lt;strong&gt;&lt;a href=&quot;&quot;&gt;kernel&lt;/a&gt;)&lt;/strong&gt;).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Kernel:&lt;/strong&gt; Este inicia el planificador (para permitir la &lt;strong&gt;&lt;a href=&quot;&quot;&gt;multitarea&lt;/a&gt;&lt;/strong&gt;) y ejecuta el primer &lt;strong&gt;&lt;a href=&quot;&quot;&gt;espacio de usuario&lt;/a&gt;&lt;/strong&gt; (fuera del espacio del núcleo) y el programa de inicialización (que establece el entorno de usuario y permite la interacción del usuario y el &lt;strong&gt;&lt;a href=&quot;&quot;&gt;inicio de sesión&lt;/a&gt;)&lt;/strong&gt;, momento en el que el núcleo se inactiva hasta que sea llamado externamente.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;La etapa del &lt;strong&gt;&lt;a href=&quot;&quot;&gt;cargador de arranque&lt;/a&gt;&lt;/strong&gt; no es totalmente necesaria. Determinadas BIOS pueden cargar y pasar el control a Linux sin hacer uso del cargador. Cada proceso de arranque será diferente dependiendo de la arquitectura del &lt;strong&gt;&lt;a href=&quot;&quot;&gt;procesador&lt;/a&gt;&lt;/strong&gt; y el &lt;em&gt;BIOS&lt;/em&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;En el apagado, Init es llamado a cerrar toda las funcionalidades del espacio de usuario de una manera controlada, de nuevo a través de secuencias de comandos, tras lo cual el Init termina y el núcleo ejecuta el apagado.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Se notifica a los usuarios este hecho.&lt;/li&gt;
&lt;li&gt;Se bloquea el sistema para que nadie más pueda acceder exceptuando el &lt;strong&gt;root&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Se envía la señal &lt;strong&gt;SIGTERM&lt;/strong&gt; (señal de terminación) a todos los procesos no definidos en &lt;strong&gt;inittab&lt;/strong&gt;(contiene un registro para cada proceso que define los niveles de ejecución para ese proceso) para el siguiente run level, provocando que terminen su ejecución de modo ordenado.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si es posible ya lo vimos anteriormente gracias a las particiones de disco instalar múltiples sistema operativos o a través de maquinas virtuales.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9) Archivos&lt;/h2&gt;
&lt;p&gt;Un nombre de archivo puede tener entre 1 y 255 caracteres. recomendable emplear los caracteres con significado especial en Linux, que son los siguientes: &lt;strong&gt;= \ ^ ~ &apos; &quot; ` * ; - ? ( )! &amp;#x26; ~ &amp;#x3C; &gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;VI&lt;/strong&gt;
Es el editor de texto clásico en UNIX. Puede usarse en cualquier tipo de terminal con un mínimo de teclas.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;MODOS DE VI:&lt;/strong&gt;
Existen tres modos o estados de vi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Modo comando:&lt;/strong&gt; Este es el modo en el que se encuentra el editor cada vez que se inicia.
Las teclas ejecutan acciones (comandos) que permiten mover el cursor, ejecutar comandos de edición de texto, salir de &lt;strong&gt;vi&lt;/strong&gt;, guardar cambios, etc.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Modo inserción o texto:&lt;/strong&gt; Este es el modo que se usa para insertar el texto. Existen varios
comandos que se pueden utilizar para ingresar a este modo.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Modo línea o ex:&lt;/strong&gt; Se escriben comandos en la última línea al final de la pantalla.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;MCEDIT&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Al igual que Vi funciona como gestor de archivos&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;cat&lt;/strong&gt;
Es la abreviatura de concatenar. Esto se refiere al hecho de que cat puede ser utilizado para combinar múltiples archivos en un archivo, también se puede utilizar para crear nuevos archivos y para mostrar el contenido de los archivos existentes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;more&lt;/strong&gt;
Es un comando para ver (pero no modificar) el contenido de un archivo o comando y visualizarlo por páginas.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Utilice el siguiente comando para crear un archivo (en este ejemplo, .htaccess). También puede editar un archivo existente con el mismo comando.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;nvim fabianmartinezrincon.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Pulse la tecla de la letra i para cambiar al modo de entrada.&lt;/li&gt;
&lt;li&gt;Inserte el contenido deseado o realice las modificaciones deseadas.&lt;/li&gt;
&lt;li&gt;Pulse la tecla ESC para salir del modo de entrada.&lt;/li&gt;
&lt;li&gt;Guarde el nuevo archivo o los cambios realizados con el siguiente comando:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;:wq
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Permite detectar el tipo y formato de un archivo&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-css&quot;&gt;file [opciones] archivo
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;b)&lt;/code&gt; muestra solo el tipo de archivo sin ninguna información adicional.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;i)&lt;/code&gt; fuerza el uso de la sintaxis MIME para mostrar el tipo de archivo.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;z)&lt;/code&gt; trata los archivos como si estuvieran comprimidos.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;10) Indique qué comando es necesario utilizar para realizar cada una de las siguientes acciones. Investigue su funcionamiento y parámetros más importantes:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mkdir &quot;ISO 2022&quot;&lt;/code&gt; Cree la carpeta ISO2017&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd &apos;ISO 2022&apos;&lt;/code&gt; Acceda a la carpeta (cd)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;touch ISO2022-1 ISO2022-2&lt;/code&gt; Cree dos archivos con los nombres iso2017-1 e iso2017-2 (touch)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ls&lt;/code&gt; Liste el contenido del directorio actual (ls)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pwd&lt;/code&gt; Visualizar la ruta donde estoy situado (pwd)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;find ./&apos;ISO 2022&apos; -name &quot;ISO*&quot;&lt;/code&gt; Busque todos los archivos en los que su nombre contiene la cadena “iso*” (find)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;df&lt;/code&gt; Informar la cantidad de espacio libre en disco (df)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;who&lt;/code&gt; Verifique los usuarios conectado al sistema (who)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vi ISO2022-1&lt;/code&gt; Acceder a el archivo iso2017-1 e ingresar Nombre y Apellido&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tail ISO2022-1&lt;/code&gt; Mostrar en pantalla las últimas líneas de un archivo (tail).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;shutdown&lt;/code&gt;  El comando de apagado (Shutdown) te permite apagar, reiniciar y detener tu sistema&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;sudo shutdown
sudo shutdown now
sudo shutdown [time]
sudo shutdown 11:50
sudo shutdown +5
sudo shutdown +2 &quot;System update&quot;
sudo shutdown -r
sudo shutdown +3 –r &quot;Update System&quot;
sudo shutdown -c
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo reboot&lt;/code&gt; Sirve para reiniciar el equipo&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo halt&lt;/code&gt; El comando halt detiene la CPU del ordenador&lt;/li&gt;
&lt;li&gt;&lt;code&gt;locate&lt;/code&gt; El comando locate es una alternativa útil, ya que es más rápido que find para realizar búsquedas. Eso se debe a que sólo escanea tu base de datos de Linux en lugar de todo el sistema. Además, la sintaxis es más fácil de escribir &lt;code&gt;sudo apt install locate&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uname&lt;/code&gt; Se usa para verificar la información del sistema
&lt;pre&gt;&lt;code&gt;uname -s
uname -r
uname -v
uname -n
uname -m
uname -p
uname -i
uname -o
uname -a
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gmesg&lt;/code&gt; (No entiendo porque esta diferente) El comando &lt;code&gt;dmesg&lt;/code&gt; es una utilidad de Linux que muestra mensajes relacionados con el kernel recuperados del búfer de anillo del kernel. &lt;code&gt;dmesg&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lspci&lt;/code&gt; El comando lspci lista todos los componentes tipo pci como son las tarjetas de red, tarjetas de sonido o tarjetas de televisión.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;at&lt;/code&gt; Ejecuta comandos a la hora especificada.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;netstat&lt;/code&gt; Los administradores de sistemas utilizan netstat el comando de Linux para ver información sobre las conexiones de red &lt;code&gt;sudo apt install net-tools&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mount&lt;/code&gt; Se utiliza para montar dispositivos y particiones para su uso por el sistema operativo  
&lt;pre&gt;&lt;code&gt;sudo apt install nfs-common
sudo mkdir -p /mnt/client_ shareddirectory
sudo mount [nfs_server]:/[nfs_shareddirectory] [client_mountpoint]
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;umount&lt;/code&gt; El comando umount le permite eliminar un sistema de archivos remoto que esté montando en la actualidad &lt;code&gt;umount --all&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;head&lt;/code&gt; Este comando sirve principalmente para mostrar al principio de un archivo (de texto) o para reducir a lo especificado los datos mostrados por un comando de Linux&lt;/li&gt;
&lt;li&gt;&lt;code&gt;losetup&lt;/code&gt; losetup de comandos de Linux se utiliza para fijar el dispositivo de bucle.
&lt;strong&gt;parámetros:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;d&lt;/code&gt; dispositivo extraíble.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;e&lt;/code&gt;  Iniciar cifrado codificación.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;o&lt;/code&gt; &amp;#x3C;número de traducción&gt; Establecer el número de conversión de datos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;write&lt;/code&gt; sirve para enviar un mensaje a otro usuario del sistema.
&lt;ul&gt;
&lt;li&gt;write usuario&lt;/li&gt;
&lt;li&gt;Escribo aquí lo que&lt;/li&gt;
&lt;li&gt;quiera que le llegue y luego cierro.&lt;/li&gt;
&lt;li&gt;Control-D&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mkfs&lt;/code&gt; Se utiliza para dar formato a un dispositivo de almacenamiento de bloque con un determinado sistema de archivos&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fdisk&lt;/code&gt; (con cuidado) Permite al usuario crear particiones en el disco duro de la misma manera que su contraparte de MS-DOS&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;Indique en qué directorios se almacenan los comandos mencionados en el ejercicio anterior.&lt;/h3&gt;
&lt;p&gt;El directorio /bin es un directorio estático y es donde se almacenan todos los binarios necesarios para garantizar las funciones básicas a nivel de usuario. Solo almacena los ejecutables de usuario, ya que los binarios necesarios para tareas administra/vas gestionadas por el usuario root o súper-usuario del sistema se encuentran en el directorio / sbin.&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;El objetivo de esta práctica es que el alumno comprenda los aspectos principales acerca de la estructura del sistema Operativo GNU/Linux en lo que respecta a procesos, usuarios, filesystems,
permisos, etc&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;1) Editor de textos:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vim:&lt;/strong&gt; Es un editor de texto que rompe las bolas pero aprendes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GNU Emacs:&lt;/strong&gt; La misma basura que vim pero con calculadora y administrador de archivos&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;mcedit:&lt;/strong&gt; Te permite navegar entre los ficheros con una interfaz.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Los &lt;strong&gt;comandos cat, more y less&lt;/strong&gt; permiten mostrar el contenido de ficheros de texto desde la línea de comandos en sistemas &lt;strong&gt;Unix&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;En su lugar los &lt;strong&gt;editores de texto&lt;/strong&gt;, justamente nos dejan &lt;strong&gt;editar texto&lt;/strong&gt; además de poder &lt;strong&gt;visualizarlo&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cat&lt;/code&gt; imprimirá por pantalla el contenido del fichero sin ningún tipo de paginación ni posibilidad de modificarlo. Básicamente concatena archivos o la salida estándar en la salida estándar.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;more&lt;/code&gt; permite visualizar por pantalla el contenido de un fichero de texto, con la diferencia con el anterior de que &lt;code&gt;more&lt;/code&gt; página los resultados. Primero mostrará por pantalla todo lo que se pueda visualizar sin hacer scroll y después, pulsando la tecla espacio avanzará de igual modo por el fichero.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;less&lt;/code&gt; es el más completo de los tres, pues puede hacer todo lo que hace &lt;code&gt;more&lt;/code&gt; añadiendo mayor capacidad de navegación por el fichero (avanzar y retroceder) además de que sus comandos están basados en el editor &lt;code&gt;vi&lt;/code&gt;, del cual se diferencia en que no tiene que leer todo el contenido del fichero antes de ser abierto.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.oracle.com/cd/E19620-01/805-7644/6j76klopr/index.html&quot;&gt;Comandos basicos&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;2) Proceso de Arranque SystemV&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Paso 1)&lt;/code&gt; Se empieza a ejecutar el código del BIOS&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Paso 2)&lt;/code&gt; El BIOS ejecuta el POST&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Paso 3)&lt;/code&gt; El BIOS lee el sector de arranque (MBR)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Paso 4)&lt;/code&gt; Se carga el gestor de arranque (MBC)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Paso 5)&lt;/code&gt; El bootloader carga el kernel y el initrd&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Paso 6)&lt;/code&gt; Se monta el initrd como sistema de archivos raíz y se inicializan componentes esenciales (ej.: scheduler)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Paso 7)&lt;/code&gt; El Kernel ejecuta el proceso init y se desmonta el initrd&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Paso 8)&lt;/code&gt; Se lee el /etc/inittab&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Paso 9)&lt;/code&gt; Se ejecutan los scripts apuntados por el &lt;em&gt;&lt;strong&gt;runlevel 1&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Paso 10)&lt;/code&gt; El final del &lt;em&gt;&lt;strong&gt;runlevel 1&lt;/strong&gt;&lt;/em&gt; le indica que vaya al runlevel por defecto&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Paso 11)&lt;/code&gt; Se ejecutan los scripts apuntados por el runlevel por defecto&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Paso 12)&lt;/code&gt; El sistema est´a listo para usarse&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Su función es cargar todos los subprocesos necesarios para el correcto funcionamiento del SO&lt;/li&gt;
&lt;li&gt;El proceso init posee el PID 1 y se encuentra en &lt;strong&gt;/sbin/init&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;En SysV se lo configura a traves del archivo &lt;strong&gt;/etc/inittab&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;No tiene padre y es el padre de todos los procesos (pstree)&lt;/li&gt;
&lt;li&gt;Es el encargado de montar los filesystems y de hacer disponible los dem´as dispositivos&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El programa pstree facilita información sobre la finalización de una serie de procesos relacionados entre sí, esto es, todos los descendientes de un proceso particular. El programa deja claro desde un principio que proceso es el primario y cuales son los secundarios.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Es el modo en que arranca Linux (3 en Redhat, 2 en Debian)&lt;/li&gt;
&lt;li&gt;El proceso de arranque lo dividimos en niveles&lt;/li&gt;
&lt;li&gt;Cada uno es responsable de levantar (iniciar) o bajar (parar) una serie de servicios&lt;/li&gt;
&lt;li&gt;Un nivel de ejecución es básicamente una configuración de programas y servicios que se ejecutarán orientados a un determinado funcionamiento.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Explicación más detallada&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Paso 1)&lt;/code&gt; Cuando un sistema GNU/Linux arranca, primero se carga el kernel del sistema, después se inicia el primer proceso, denominado &lt;strong&gt;init&lt;/strong&gt;, que es el responsable de ejecutar y activar el resto del sistema, mediante la gestión de los niveles de ejecución (o &lt;strong&gt;runlevels&lt;/strong&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Paso 2)&lt;/code&gt; En el caso del modelo runlevel de SystemV, cuando el proceso init arranca, utiliza un fichero de configuración llamado &lt;strong&gt;/etc/inittab&lt;/strong&gt; para decidir el modo de ejecución en el que va a entrar.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Paso 3)&lt;/code&gt; En este fichero se define el runlevel por defecto (initdefault) en arranque (por instalación en Fedora el 5, en Debian el 2) y una serie de servicios de terminal por activar para atender la entrada del usuario.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Paso 4)&lt;/code&gt; Después, el sistema, según el runlevel escogido, consulta los ficheros contenidos en &lt;strong&gt;/etc/rcn.d&lt;/strong&gt;, donde &lt;strong&gt;n&lt;/strong&gt; es el número asociado al runlevel (nivel escogido), en el que se encuentra una lista de servicios por activar o parar en caso de que arranquemos en el runlevel, o lo abandonemos&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Paso 5)&lt;/code&gt; Dentro del directorio encontraremos una serie de &lt;strong&gt;scripts&lt;/strong&gt; o enlaces a los scripts que controlan el servicio. Cada script posee un nombre relacionado con el servicio, una S o K inicial que indica si es el script para iniciar &lt;strong&gt;(S)&lt;/strong&gt; o matar &lt;strong&gt;(K)&lt;/strong&gt; el servicio, y un número que refleja el orden en que se ejecutarán los servicios.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;0&lt;/code&gt;&lt;/strong&gt; Indica halt o apagado de la máquina.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;1&lt;/code&gt;&lt;/strong&gt; Indica monousuario.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;2&lt;/code&gt;&lt;/strong&gt; Indica modo multiusuario sin soporte de red.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;3&lt;/code&gt;&lt;/strong&gt; Indica modo multiusuario completo con soporte de red.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;4&lt;/code&gt;&lt;/strong&gt; No usado, con esta opción el administrador puede personalizar el inicio para cargar algún servicio.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;5&lt;/code&gt;&lt;/strong&gt; Indica multiusuario completo con inicio gráfico (X11)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;6&lt;/code&gt;&lt;/strong&gt; Indica shutdown y reboot: Se apaga inmediatamente la máquina para reinicio.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un administrador (root) puede editar el archivo &lt;strong&gt;/etc/inittab&lt;/strong&gt; como mejor convenga al usuario, sin embargo también tiene el poder de establecerlo en 0 o en 6. Si se establece en 6, algo que hice como experimento en mi Mandriva, la próxima vez que la máquina se encienda, se leerá el modo 6, shutdown y reboot, y se hará exactamente eso.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;¿Dónde se define qué Runlevel ejecutar al iniciar el sistema operativo?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Se encuentran definidos en &lt;strong&gt;/etc/inittab&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Los scripts que se ejecutan están en &lt;strong&gt;/etc/init.d&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;En &lt;strong&gt;/etc/rcX.d&lt;/strong&gt; (donde X = 0..6) hay links a los archivos del /etc/init.d&lt;/li&gt;
&lt;li&gt;Formato de los links:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;    [SjK]&amp;#x3C;orden&gt;&amp;#x3C;nombreScript&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;S)&lt;/code&gt; lanza el script con el argument start&lt;/li&gt;
&lt;li&gt;&lt;code&gt;K)&lt;/code&gt; lanza el script con el argument stop&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;¿Todas las distribuciones respetan estos estándares?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;No todas las distribuciones respetan los estándares.&lt;/p&gt;
&lt;p&gt;Es el archivo de configuración de init, que decide el modo de ejecución en el que va a entrar.&lt;/p&gt;
&lt;p&gt;Cuando el sistema se arranca, se verifica si existe un runlevel predeterminado en el archivo &lt;strong&gt;/etc/inittab&lt;/strong&gt;, si no, se debe introducir por medio de la consola del sistema. Después se procede a ejecutar todos los scripts relativos al runlevel especificado.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;¿Qué tipo de información se almacena en el? ¿Cuál es la estructura de la información que en él se almacena?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/etc/inittab&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;id:nivelesEjecucion:acción:proceso&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Id&lt;/strong&gt;: identifica la entrada en inittab (1 a 4 caracteres)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Niveles_ejecucion&lt;/strong&gt;: el/los nivel de ejecución en los que se realiza la acción&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Acción&lt;/strong&gt;: describe la acción a realizar
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;wait&lt;/strong&gt;: Se inicia cuando se entra al runlevel e init espera a que termine&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;initdefault&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ctrlaltdel&lt;/strong&gt;: se ejecutará cuando init reciba la señal SIGINT&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;off, repawn, once, boot, bootwait, powerwait, otras…&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Proceso&lt;/strong&gt;: el proceso exacto que será ejecutado&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Existen dos formas de modificar los runlevels:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;a) Cambiar de runlevel en ejecución:&lt;/strong&gt;
Existe una utilidad para línea de comandos que permite cambiar de un nivel de ejecución a otro. Esta es la herramienta init. Para cambiar de nivel de ejecución sólo hay que ejecutar init seguido del número del runlevel.&lt;br&gt;
Por ejemplo&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt; init 0&lt;/code&gt;&lt;/strong&gt; Cambia al runlevel 0 (se apaga el sistema, equivalente al comando halt).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt; init 2&lt;/code&gt;&lt;/strong&gt; Cambia al runlevel 2.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt; init 6&lt;/code&gt;&lt;/strong&gt; Cambia al runlevel 6 (reinicia el sistema, equivalente al comando reboot).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;También &lt;strong&gt;&lt;code&gt;telinit&lt;/code&gt;&lt;/strong&gt;, nos permite cambiar de nivel de ejecución, sólo tenemos que indicar el número. Por ejemplo, necesitamos hacer una tarea crítica en root; sin usuarios trabajando, podemos hacer un &lt;strong&gt;&lt;code&gt;tellinit 1&lt;/code&gt;&lt;/strong&gt; (también puede usarse S) para pasar a runlevel monousuario, y después de la tarea un tellinit 3 para volver a multiusuario&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;b) Modificar el runlevel por defecto&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Por defecto, el sistema suele arrancar en el nivel de ejecución 5 (modo gráfico). Si se quisiera modificar este comportamiento, habría que editar el fichero &lt;strong&gt;&lt;code&gt;/etc/inittab.&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Más concretamente, habría que modificar en el fichero /etc/inittab la línea donde el número 5 indica que el nivel de ejecución por defecto es el 5&lt;/p&gt;
&lt;p&gt;No es permanente. En el caso de que el runlevel se cambie durante la sección de bash abierta y luego se apague la máquina, cuando se vuelva a prender la maquina se volverá a restablecer al modo que tenga el sistema configurado (por defecto).&lt;/p&gt;
&lt;p&gt;En el caso de que se quiera cambiar el modo de arranque del runlevel de manera permanente se tendrá que configurar para que eso suceda.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;ls /etc/rc0.d
sudo runlevel
sudo telinit 2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Los scripts RC se encargan de cargar o cerrar los servicios necesarios para que el sistema funcione, de acuerdo con el runlevel que se está iniciando. Por ejemplo: lpd (servicio para imprimir), fetchmail (servicio para leer correo-e), sshd (SecureShell para abrir sesiones remotas de una manera segura), networking (abre las conexiones de red).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;¿Dónde se almacenan?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Todos estos servicios se encuentran en &lt;strong&gt;/etc/init.d/&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sin embargo, no todos los servicios se cargan en todos los runlevels. &lt;strong&gt;¿Cómo sabe el RC que servicios tiene que cargar?&lt;/strong&gt; Los servicios a cargar se encuentran en el directorio /etc/rcX.d/, donde X es el runlevel a cargar. En realidad, en estos directorios no hay más que enlaces simbólicos a /etc/init.d/&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cuando un sistema GNU/Linux arranca o se detiene se ejecutan scripts, indique cómo determina qué script ejecutar ante cada acción. ¿Existe un orden para llamarlos? Justifique.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Orden para llamarlos:&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Los nombres en estos directorios tienen una sintaxis bastante concreta. Empiezan por una letra (S o K) seguidos de un número y el nombre del servicio. La letra S significa iniciar (S de start). La letra K significa acabar (K de kill). El número es de dos dígitos, de 00 a 99 e indica el orden en el que se arrancará el servicio.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;1)&lt;/code&gt; Ejecuta, por orden de nombre, todos los scripts que comienzan por &lt;strong&gt;K&lt;/strong&gt; en el directorio correspondiente al nivel, utilizando como argumento para dicho script la opción &lt;strong&gt;stop&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;2)&lt;/code&gt; Ejecuta, por orden de nombre, todos los scripts que comienzan por S en el directorio correspondiente al nivel, utilizando como argumento para dicho script la opción start.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El comando &lt;strong&gt;insserv&lt;/strong&gt; se usa para controlar el orden de inicio y detención de los servicios que se encuentran en un sistema Linux.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;¿Para qué se utiliza?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Se utiliza para administrar el orden de los enlaces simbólicos del &lt;strong&gt;&lt;code&gt;/etc/rcX.d&lt;/code&gt;&lt;/strong&gt;, resolviendo las dependencias de forma automática&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Utiliza cabeceras en los scripts del &lt;strong&gt;&lt;code&gt;/etc/init.d&lt;/code&gt;&lt;/strong&gt; que permiten especificar la relación con otros scripts rc -&gt; LSBInit (Linux Standard Based Init)&lt;/li&gt;
&lt;li&gt;Es utilizado por update-rc.d para instalar / remover los links simbólicos&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;¿Qué ventajas provee respecto de un arranque tradicional?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Mejora la performance del arranque en sistemas multiprocesadores.&lt;/p&gt;
&lt;p&gt;Upstart fue el primer reemplazo propuesto para SystemV (Ubuntu, Fedora, Debian, etc.).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Permite la ejecución de trabajos en forma asincrónica a través de eventos (event-based) como principal diferencia con sysVinit que es estrictamente sincrónico (dependencybased).&lt;/li&gt;
&lt;li&gt;Estos trabajos se denominan &lt;strong&gt;Jobs&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;El principal objetivo de un job es definir servicios o tareas a ser ejecutadas por init&lt;/li&gt;
&lt;li&gt;Son scripts de texto plano que definen las acciones/tareas (unidad de trabajo) a ejecutar ante determinados eventos.&lt;/li&gt;
&lt;li&gt;Cada job es definido en el &lt;strong&gt;/etc/init (.conf).&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Suelen ser de dos tipos:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Task&lt;/strong&gt;: ejecución finita (task) -&gt; not respawning -&gt; exit 0 o uso de stop.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Service&lt;/strong&gt;: ejecución indeterminada  respawning&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Los jobs son ejecutados ante eventos (arranque del equipo, inserción de un dispositivo USB,etc)
&lt;ul&gt;
&lt;li&gt;Es posible crear eventos pero existen algunos de manera estándar.&lt;/li&gt;
&lt;li&gt;Definido por &lt;strong&gt;start on y stop on.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Es compatible con SystemV ! &lt;strong&gt;/etc/init/rc-sysinit.conf&lt;/strong&gt;, runlevels, scripts en /etc/init.d, objetivo start y stop.&lt;/li&gt;
&lt;li&gt;Cada job posee un objetivo (goal start/stop) y un estado (state).
&lt;ul&gt;
&lt;li&gt;En base a ellos se ejecuta un proceso específico.&lt;/li&gt;
&lt;li&gt;Al inicio, init emite el evento startup.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Un job puede tener uno o varias tareas ejecutables como parte de su ciclo de vida y siempre debe existir la tarea principal&lt;/li&gt;
&lt;li&gt;Las tareas de un job se definen mediante exec o script ... end script&lt;/li&gt;
&lt;li&gt;A través de &lt;strong&gt;initctl&lt;/strong&gt; podemos administrar los jobs del demonio de Upstart:&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;start &amp;#x3C;job&gt;&lt;/code&gt;&lt;/strong&gt;: cambia el objetivo a start del job especificado&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;stop &amp;#x3C;job&gt;&lt;/code&gt;&lt;/strong&gt;: cambia el objetivo a stop del job especificado&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;emit &amp;#x3C;event&gt;&lt;/code&gt;&lt;/strong&gt;: event es emitido causando que otros Jobs cambien a objetivo start o stop&lt;/li&gt;
&lt;li&gt;No más &lt;strong&gt;/etc/inittab&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Upstart se creó como reemplazo del modelo SysVinit. A diferencia de SysVinit, que se creó para operar en un entorno estático Upstart se creó para operar en un entorno flexible.&lt;/p&gt;
&lt;p&gt;Upstart proporciona beneficios principales sobre el SysVinit. Estos beneficios son: event-based (principal diferencia con SysVinit que es estrictamente sincrónico - dependecy-based -) es la ejecucion de servicios en forma asincrónica y otro beneficio es el reinicio automático de servicios que dejan de responder de la manera inesperada para el sistema.&lt;/p&gt;
&lt;p&gt;Upstart en lugar de usar runlevels, usa jobs que cada uno de ellos posee un objetivo (start/stop y un estado state). Cuando ocurre una interrupción, upstart detecta ese interrupción y realiza los cambios necesarios.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los &lt;strong&gt;&lt;code&gt;jobs&lt;/code&gt;&lt;/strong&gt; reemplazan a los scripts de SystemV en Upstart.&lt;/li&gt;
&lt;li&gt;Cada job es definido en el &lt;strong&gt;&lt;code&gt;/etc/init (.conf)&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;# MySQL Servise
description &quot;MySQL Server &quot; {Descripcion}
autor &quot;info autor&quot; {Autor}
start on ( net − device − up {Iniciar base de datos}
        and local −filesystems   {}
        and runlevel [2345])
stop on runlevel [016]
[...]
exec / usr / sbin /mysqld
[...]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Este es un archivo de configuración Upstart para el servicio de base de datos MySQL. Cada línea se explica a continuación:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MySQL Service: un comentario que describe el servicio que se va a iniciar.&lt;/li&gt;
&lt;li&gt;description &quot;MySQL Server&quot;: una descripción del servicio, que aparecerá en los registros del sistema. {Descripcion}&lt;/li&gt;
&lt;li&gt;author &quot;info autor&quot;: información sobre el autor del archivo de configuración. {Autor}&lt;/li&gt;
&lt;li&gt;start on (net-device-up and local-filesystems and runlevel [2345]): indica que el servicio debe iniciarse cuando la red y el sistema de archivos locales estén disponibles y el sistema se esté ejecutando en el nivel de ejecución 2, 3, 4 o 5. {Iniciar base de datos}&lt;/li&gt;
&lt;li&gt;stop on runlevel [016]: indica que el servicio debe detenerse cuando el sistema se esté ejecutando en el nivel de ejecución 0, 1 o 6.&lt;/li&gt;
&lt;li&gt;exec &lt;code&gt;/usr/sbin/mysqld&lt;/code&gt;: la línea que indica al sistema qué comando ejecutar para iniciar el servicio MySQL. El comando &lt;code&gt;/usr/sbin/mysqld&lt;/code&gt; es el comando para iniciar el servidor de base de datos MySQL.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Es un sistema que centraliza la administración de demonios y librerias del sistema.&lt;/li&gt;
&lt;li&gt;Puede ser controlado por &lt;code&gt;systemctl&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Compatible con SysV -&gt; si es llamado como &lt;code&gt;init&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;El demonio systemd reemplaza al proceso init -&gt; este pasa a terner PID 1&lt;/li&gt;
&lt;li&gt;Los runlevels son reemplazados por &lt;code&gt;targets&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Al igual que con Upstart el archivo &lt;code&gt;/etc/inittab&lt;/code&gt; no existe más.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Las unidades de trabajo son denominadas units de tipo:&lt;/p&gt;
&lt;p&gt;Service: controla un servicio particular (.service)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Socket&lt;/code&gt;&lt;/strong&gt; encapsula IPC, un sockect del sistema o file system FIFO (.socket) -&gt; sockect-based activation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Target&lt;/code&gt;&lt;/strong&gt; agrupa units o establece puntos de sincronización durante el booteo (.target)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;dependencia&lt;/code&gt;&lt;/strong&gt; de unidades&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Snapshot&lt;/code&gt;&lt;/strong&gt; almacena el estado de un conjunto de unidades que puede ser establecido más tarde (.snapshot) etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Las &lt;strong&gt;units&lt;/strong&gt; pueden tener dos estados -&gt; &lt;strong&gt;active&lt;/strong&gt; o &lt;strong&gt;inactive&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Permite organizar un grupo de procesos en forma jerárquica&lt;/p&gt;
&lt;p&gt;Agrupa conjunto de procesos relacionados (por ejemplo, un servidor web Apache con sus dependientes).&lt;/p&gt;
&lt;p&gt;Tareas que realiza:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tracking mediante subsistema cgroups  no se utiliza el PID  doble fork no funciona para escapar de systemd.&lt;/li&gt;
&lt;li&gt;Limitar el uso de recursos.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;3) Usuarios&lt;/h2&gt;
&lt;p&gt;En un sistema GNU/Linux, la información de los usuarios se almacena principalmente en los siguientes archivos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/etc/passwd&lt;/code&gt;&lt;/strong&gt; Este archivo contiene información básica de los usuarios, como sus nombres de usuario, identificación de usuario (UID), identificación de grupo (GID), nombre completo, ruta del directorio de inicio y shell predeterminada.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/etc/shadow&lt;/code&gt;&lt;/strong&gt; Este archivo contiene información confidencial de los usuarios, como sus contraseñas encriptadas, tiempo de última modificación de la contraseña, tiempo de expiración, cuenta bloqueada, etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/etc/group&lt;/code&gt;&lt;/strong&gt; Este archivo contiene información de los grupos de usuarios, como el nombre del grupo, identificación de grupo (GID) y una lista de nombres de usuario que pertenecen a ese grupo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/etc/gshadow&lt;/code&gt;&lt;/strong&gt; Este archivo contiene información confidencial de los grupos de usuarios, como sus contraseñas encriptadas, tiempo de última modificación de la contraseña, tiempo de expiración, cuenta bloqueada, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Es importante destacar que estos archivos son de lectura y escritura solo para el superusuario (root) y que modificarlos sin conocimiento puede comprometer la seguridad del sistema.&lt;/p&gt;
&lt;p&gt;Los sistemas operativos Linux y Unix utilizan el UID (User ID o ID de usuario) para identificar al usuario particular. El GID (Group ID o ID de grupo) se utiliza para identificar a un grupo. Supongo que no podrian existir dos iguales ya que no los podrias distinguir.&lt;/p&gt;
&lt;p&gt;Puede haber un caso que seria el root en el que podemos tener varios usuarios root con el ID 0&lt;/p&gt;
&lt;p&gt;En sistemas operativos del tipo Unix, el superusuario o root es el nombre
convencional de la cuenta de usuario que posee todos los derechos en todos los
modos (monousuario o multiusuario). Normalmente es la cuenta de administrador.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Su UID (User ID) y GID es 0 (cero).&lt;/li&gt;
&lt;li&gt;Es la única cuenta de usuario con privilegios sobre todo el sistema.&lt;/li&gt;
&lt;li&gt;Acceso total a todos los archivos y directorios con independencia de propietarios y permisos.&lt;/li&gt;
&lt;li&gt;Controla la administración de cuentas de usuarios.&lt;/li&gt;
&lt;li&gt;Ejecuta tareas de mantenimiento del sistema.&lt;/li&gt;
&lt;li&gt;Puede detener el sistema.&lt;/li&gt;
&lt;li&gt;Instala software en el sistema.&lt;/li&gt;
&lt;li&gt;Puede modificar o reconfigurar el kernel, controladores, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo adduser iso2022&lt;/code&gt; creo un usuario y en home le agrego /home/ (contra = nombre para pruebas)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo gropadd catedra&lt;/code&gt; creo un grupo&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo usermod -a -G catedra iso2022&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;id -nG iso2022&lt;/code&gt; menciona los grupos a los que pertenece mi usuario&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo login iso2022&lt;/code&gt; entro como el usuario&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd ..&lt;/code&gt; para ir a la home personal y crear un archivo (creo)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo userdel iso2022&lt;/code&gt; lo elimina pero aun tenemos todos los archivos creados por este&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;useradd nombre ó adduser nombre&lt;/code&gt;&lt;/strong&gt; Crea un nuevo usuario&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;usermod nombre&lt;/code&gt;&lt;/strong&gt; nos permite modificar todos los parámetros de la cuenta de un usuario creado con anterioridad.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;userdel nombre&lt;/code&gt;&lt;/strong&gt; Elimina un usuario&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;su&lt;/code&gt;&lt;/strong&gt; entrar al super usuario (tenes los permisos de TODO)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;groupadd nombre&lt;/code&gt;&lt;/strong&gt; te deja crear un grupo&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;who&lt;/code&gt;&lt;/strong&gt; Verifiqua los usuarios conectado al sistema&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;groupdel nombre&lt;/code&gt;&lt;/strong&gt; elimina un grupo&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;passwd&lt;/code&gt;&lt;/strong&gt; de deja cambiar la constraseña del usuario actual&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;4) FileSystem:&lt;/h2&gt;
&lt;p&gt;Este mecanismo permite que archivos y directorios “pertenezcan” a un usuario en particular. Por ejemplo, como diego creó archivos en su directorio “home”, diego es el propietario de esos archivos y tiene acceso total a ellos.&lt;/p&gt;
&lt;p&gt;Unix también permite que los archivos sean compartidos entre usuarios y grupos de usuarios. Si diego lo desea, podría restringir el acceso a sus archivos de forma que ningún otro usuario pueda acceder a ellos.&lt;/p&gt;
&lt;p&gt;Los &lt;strong&gt;permisos están divididos en tres tipos: &lt;code&gt;lectura&lt;/code&gt;, &lt;code&gt;escritura&lt;/code&gt; y &lt;code&gt;ejecución&lt;/code&gt;&lt;/strong&gt;. Estos permisos pueden ser fijados para tres clases de usuarios: el propietario del archivo o directorio, los integrantes del grupo al que pertenece y todos los demás usuarios.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;lectura&lt;/code&gt;&lt;/strong&gt; permite a un usuario leer el contenido del archivo o en el caso de un directorio, listar el contenido del mismo (usando ls).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;escritura&lt;/code&gt;&lt;/strong&gt; permite a un usuario escribir y modificar el archivo (inclusive, eliminarlo). Para directorios, el permiso de escritura permite crear nuevos archivos o borrar archivos ya existentes en el mismo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ejecución&lt;/code&gt;&lt;/strong&gt; permite a un usuario ejecutar el archivo si es un programa. Para directorios, el permiso de ejecución permite al usuario ingresar al mismo (por ejemplo, con el comando cd).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Interpretando los permisos de archivos&lt;/code&gt;&lt;/strong&gt; Veamos un ejemplo del uso de permisos de archivos. Usando el comando ls con la opción &lt;strong&gt;&lt;code&gt;-l&lt;/code&gt;&lt;/strong&gt; se mostrara un listado &lt;strong&gt;&lt;code&gt;largo&lt;/code&gt;&lt;/strong&gt; de los archivos, el cual incluye los permisos. 
&lt;pre&gt;&lt;code&gt;fabrizio@debian: /$ ls -l
-rwxr-xr-- 1 fabrizio users 505 May 5 19:05 prueba.exe
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El primer campo representa los permisos del archivo. El tercer campo es el propietario del mismo (fabrizio), el cuarto es el grupo al cual pertenece el archivo (users) y el último campo es el nombre del archivo (prueba.exe).&lt;/p&gt;
&lt;p&gt;La cadena &lt;strong&gt;&lt;code&gt;-rwxr-xr--&lt;/code&gt;&lt;/strong&gt; nos informa, por orden, los permisos para el propietario, los usuarios del grupo y el resto de los usuarios.&lt;/p&gt;
&lt;p&gt;El primer carácter de la cadena de permisos &lt;code&gt;(“-”)&lt;/code&gt; representa el tipo de archivo. El &lt;code&gt;“-”&lt;/code&gt; significa que es un archivo regular, &lt;code&gt;“d”&lt;/code&gt; indicaría que se trata de un directorio. Los siguientes tres caracteres &lt;code&gt;(“rwx”)&lt;/code&gt; representan los permisos para el propietario del archivo, fabrizio. Éste tiene permisos para leer &lt;code&gt;(r)&lt;/code&gt;, escribir &lt;code&gt;(w)&lt;/code&gt; y ejecutar &lt;code&gt;(x)&lt;/code&gt; el archivo prueba.exe.&lt;/p&gt;
&lt;p&gt;Los siguientes tres caracteres, &lt;code&gt;“r-x”&lt;/code&gt;, representan los permisos para los miembros del grupo al que pertenece el archivo (en este caso, users). Como sólo aparece &lt;code&gt;“r-x”&lt;/code&gt; cualquier usuario que pertenezca al grupo users puede leer este archivo, y ejecutarlo, pero no modificarlo.&lt;/p&gt;
&lt;p&gt;Los últimos tres caracteres, &lt;code&gt;“r--”&lt;/code&gt;, representan los permisos para cualquier otro usuario del sistema (que no sea fabrizio ni pertenezca al grupo users). Como sólo está presente la &lt;code&gt;“r”&lt;/code&gt;, los demás usuarios pueden leer el archivo, pero no escribir en él o ejecutarlo&lt;/p&gt;
&lt;p&gt;Aquí tenemos otros ejemplos de permisos de grupo&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;-rw-------&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;El propietario del archivo puede leer y escribir. Nadie más puede acceder al archivo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;rwxrwxrwx&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Todos los usuarios pueden leer, escribir y ejecutar el archivo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;drwxr-xr-x&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;El propietario del directorio puede leer, escribir y entrar al mismo. Los usuarios pertenecientes al grupo del directorio y todos los demás usuarios pueden leer e ingresar al directorio.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;chmod:&lt;/strong&gt; nos permite gestionar permisos&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;chown:&lt;/strong&gt; permite cambiar el propietario de un archivo o directorio en sistemas&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;chgrp:&lt;/strong&gt; nos permite cambiar el grupo al que pertenece un archivo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Existen 3 tipos de permisos y se basan en una notacion octal para referenciar a cada uno:&lt;/p&gt;
&lt;p&gt;| Permiso  | Valor | Octal |
| ------------- | ------------- | ------------- |
| Lectura  | R  | 4 |
| Escritura  | W  | 2 |
| Ejecución  | X  | 1 |&lt;/p&gt;
&lt;p&gt;Se aplican sobre los usuarios:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Usuarios: permisos del dueño -&gt; &lt;code&gt;U&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Usuarios: permisos del grupo -&gt; &lt;code&gt;G&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Usuarios: permisos de otro usuario -&gt; &lt;code&gt;O&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La notación octal se refiere a ver estos valores en 3 bits , 010 equivale a 2 , por lo tanto si un archivo tendrá solo permisos de escritura, figura de esa manera. Si los valores fueran 110= serian permisos de lectura y escritura, y si fueran 111 el archivo tendría todos los permisos (lectura escritura y ejecución).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En general cuando se le da un permiso a un archivo requiere 3 números (ejemplo &lt;strong&gt;&lt;code&gt;chmod 755&lt;/code&gt;&lt;/strong&gt;) cada uno de esos números representa los permisos para diferentes cosas.&lt;/li&gt;
&lt;li&gt;El primer número es para indicar los permisos para el dueño del archivo (&lt;strong&gt;&lt;code&gt;U&lt;/code&gt;&lt;/strong&gt;).&lt;/li&gt;
&lt;li&gt;El segundo número es para indicar los permisos para los usuarios del grupo de un archivo (&lt;strong&gt;&lt;code&gt;G&lt;/code&gt;&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;El tercer número es para indicar los permisos para todo el resto de los usuarios (&lt;strong&gt;&lt;code&gt;O&lt;/code&gt;&lt;/strong&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por lo tanto, en el ejemplo &lt;strong&gt;&lt;code&gt;chmod 755&lt;/code&gt;&lt;/strong&gt;, indica que el &lt;strong&gt;&lt;code&gt;dueño (U)&lt;/code&gt;&lt;/strong&gt; tiene permiso para lectura, escritura y ejecución ( 4 + 2 + 1 = 7). Los &lt;strong&gt;&lt;code&gt;usuarios del grupo (G)&lt;/code&gt;&lt;/strong&gt; y para el &lt;strong&gt;&lt;code&gt;resto de los usuarios (O)&lt;/code&gt;&lt;/strong&gt; tienen permiso para lectura y ejecución (4 + 1= 5). Ver tabla.&lt;/p&gt;
&lt;p&gt;Existe la posibilidad, si es que el usuario puede utilizar el comando su, o sudo. Sino, sin poseer los permisos necesarios no puede acceder al archivo. Sólo root.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Full path name&lt;/code&gt;&lt;/strong&gt; es la ruta completa a ese archivo o carpeta desde el directorio / del sistema de archivos. ejemplo &lt;code&gt;/home/your_username/my_script&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Relative path name&lt;/code&gt;&lt;/strong&gt; Rastrea la ruta desde el directorio actual a través de su padre o sus subdirectorios y archivos. ..\Documents&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Con el comando pwd podemos saber el directorio actual.&lt;/li&gt;
&lt;li&gt;Con &lt;code&gt;cd&lt;/code&gt;o &lt;code&gt;cd ~&lt;/code&gt; vamos al directorio personal.&lt;/li&gt;
&lt;li&gt;Se puede usar este mismo comando para acceder a directorios a partir de la ruta en donde estemos parados&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Se podría acceder a diferentes directorios gracias la ubicación relativa o atajos ya prestablecidos como &lt;code&gt;cd ..&lt;/code&gt; para volver al directorio anterior sin necesidad de poner ningún atajo&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;cd&lt;/code&gt;&lt;/strong&gt; Nos permite meternos en un directorio interno&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;umount&lt;/code&gt;&lt;/strong&gt; permite eliminar un sistema de archivos remoto que esté montando en la actualidad (no usar xd)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;mkdir&lt;/code&gt;&lt;/strong&gt; Cree una carpeta&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;du&lt;/code&gt;&lt;/strong&gt; Para ver el tamaño de ficheros y carpetas&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;rmdir&lt;/code&gt;&lt;/strong&gt; Borrar directorios&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;df&lt;/code&gt;&lt;/strong&gt; Informa la cantidad de espacio libre en disco&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;mount&lt;/code&gt;&lt;/strong&gt; Se utiliza para montar dispositivos y particiones para su uso por el sistema operativo (se instala con &lt;strong&gt;sudo apt install nfs-common&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ln&lt;/code&gt;&lt;/strong&gt; crear un enlace simbólico al fichero o directorio (como un acceso directo)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ls&lt;/code&gt;&lt;/strong&gt; Lista el contenido del directorio actual&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;pwd&lt;/code&gt;&lt;/strong&gt; Visualiza la ruta donde estoy situado&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;cp&lt;/code&gt;&lt;/strong&gt; sirve para copiar archivos y directorios dentro del sistema de archivos&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;mv&lt;/code&gt;&lt;/strong&gt; se utiliza para mover o renombrar los archivos y directorios&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;5) Procesos&lt;/h2&gt;
&lt;p&gt;Un proceso es un programa en ejecución. Para nosotros serán sinónimos de tarea, job y proceso.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Es dinámico&lt;/li&gt;
&lt;li&gt;Tiene program counter.&lt;/li&gt;
&lt;li&gt;Su ciclo de vida comprende desde que se lo &lt;strong&gt;&lt;code&gt;dispara&lt;/code&gt;&lt;/strong&gt; hasta que termina.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La sigla &lt;code&gt;PID&lt;/code&gt; hace referencia al &lt;code&gt;ID&lt;/code&gt; del Proceso y la sigla &lt;code&gt;PPID&lt;/code&gt; hace referencia al &lt;code&gt;ID&lt;/code&gt; del Proceso Padre del proceso.&lt;/p&gt;
&lt;p&gt;Todos los procesos tienen estos atributos, además de estos (que son los más importantes pero no todos): Usuario (&lt;code&gt;UID&lt;/code&gt;), Grupo (&lt;code&gt;GID&lt;/code&gt;), Prioridad, etc. Con ps –ejH&lt;/p&gt;
&lt;p&gt;PUEDO VER EL PPID.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;pstree&lt;/code&gt;&lt;/strong&gt; que nos muestra los procesos en una estructura de árbol top El comando top te permite ver las tareas del sistema que se ejecutan en tiempo real.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;top&lt;/code&gt;&lt;/strong&gt; El comando top te permite ver las tareas del sistema que se ejecutan en tiempo real.Proporciona un buen resumen de tu sistema para verificar rápidamente si algo se destaca que pueda estar causando problemas con tu sitio web o servidor&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ps&lt;/code&gt;&lt;/strong&gt; muestra por pantalla un listado de los procesos que están ejecutándose en el sistema.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Las opciones (parámetros) más importantes y utilizadas de este comando son:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;a&lt;/code&gt;&lt;/strong&gt; para mostrar los procesos de todos los teminales.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;u&lt;/code&gt;&lt;/strong&gt; para mostrar el usuario al que pertenece el proceso y la hora de inicio.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;x&lt;/code&gt;&lt;/strong&gt; para mostrar procesos que no estan controlados por ningún terminal.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Suelen usarse combiandas para tener una visión global de los procesos que están en ejecutan.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Proceso ejecutándose en Background&lt;/code&gt;&lt;/strong&gt; significa que el proceso continúa la ejecución mientras que el shell se libera para otras actividades. &lt;strong&gt;&lt;code&gt;Proceso en segundo plano&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Proceso ejecutándose en Foreground&lt;/code&gt;&lt;/strong&gt; Es exactamente lo contrario, quiere decir que no se admitirá ningún otro comando hasta que se complete el proceso. &lt;strong&gt;&lt;code&gt;Proceso en primer plano&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para ejecutar un proceso en background en Linux, se puede agregar el símbolo &quot;&amp;#x26;&quot; al final del comando en la línea de comandos. Por ejemplo, para ejecutar un proceso llamado &quot;mi_proceso&quot; en background, se puede escribir:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;mi_proceso &amp;#x26;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esto permitirá que el proceso se ejecute en segundo plano mientras se sigue usando la terminal para ejecutar otros comandos.&lt;/p&gt;
&lt;p&gt;Para pasar un proceso de background a foreground y viceversa, se pueden usar los siguientes comandos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;fg&lt;/code&gt;&lt;/strong&gt; mueve un proceso en background a foreground. Se debe proporcionar el número de trabajo (job number) del proceso como argumento. El número de trabajo se puede obtener con el comando &quot;jobs&quot;. Por ejemplo: 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;fg %1
&lt;/code&gt;&lt;/pre&gt;
Esto mueve el proceso número 1 en background al foreground.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;bg&lt;/code&gt;&lt;/strong&gt; mueve un proceso en foreground a background. También se debe proporcionar el número de trabajo del proceso como argumento. Por ejemplo:
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bg %1
&lt;/code&gt;&lt;/pre&gt;
Esto mueve el proceso número 1 en foreground a background.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;También se puede suspender un proceso en foreground con la combinación de teclas &lt;code&gt;Ctrl + Z&lt;/code&gt;. Esto detendrá el proceso y lo moverá a background. Para reanudar el proceso en background, se puede usar el comando &lt;code&gt;bg&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El &lt;strong&gt;&lt;code&gt;|&lt;/code&gt;&lt;/strong&gt; nos permite comunicar dos procesos por medio de un pipe o tubería desde la shell&lt;/p&gt;
&lt;p&gt;El pipe conecta stdout (salida estándar) del primer comando con la stdin (entrada estándar) del segundo.&lt;/p&gt;
&lt;p&gt;Por ejemplo:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ls | more
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Se ejecuta el comando ls y la salida del mismo, es enviada como entrada del comanda &lt;strong&gt;&lt;code&gt;more&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Se pueden anidar tantos pipes como se deseen&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;¿Cómo haríamos si quisiéramos contar la cantidad de usuarios del sistema que en su
nombre de usuario aparece una letra “a&quot;?&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;cat /etc/passwd | cut -d: -f1 | grep a | wc –l
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;En Linux, al final todo es tratado como si fuera un fichero y como tal, tenemos descriptores de fichero para aquellos puntos donde queramos acceder.&lt;/p&gt;
&lt;p&gt;Hay unos descriptores de fichero por defecto:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;0&lt;/code&gt;&lt;/strong&gt; Entrada estándar (normalmente el teclado).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;1&lt;/code&gt;&lt;/strong&gt; Salida estándar (normalmente la consola).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;2&lt;/code&gt;&lt;/strong&gt; Salida de error.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para redirigir las salidas utilizaremos el descriptor de fichero seguido del símbolo &gt; o &amp;#x3C; si redirigimos la entrada hacia un comando. Veamos unos ejemplos&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ls -l &gt; fichero&lt;/code&gt;&lt;/strong&gt; Guarda la salida de ls -l en fichero. Si no existe lo crea, y si existe lo sobreescribe.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ls -l &gt;&gt; fichero&lt;/code&gt;&lt;/strong&gt; Añade la salida del comando a fichero. Si no existe lo crea, y si existe, lo añade al final.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ls -l 2 &gt; fichero&lt;/code&gt;&lt;/strong&gt; Si hay algún error, lo guarda en fichero (podría salir un error si no tuviéramos permiso de lectura en el directorio).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Las &lt;strong&gt;redirecciones&lt;/strong&gt; consisten en trasladar información de un tipo a otro&lt;/p&gt;
&lt;p&gt;Hay 2 tipos de redirecciones&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Al utilizar redirecciones mediante &gt; (destructiva):
&lt;ul&gt;
&lt;li&gt;Si el archivo de destino no existe, se lo crea&lt;/li&gt;
&lt;li&gt;Si el archivo existe, se lo trunca y se escribe el nuevo contenido&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Al utilizar redirecciones mediante &gt;&gt; (no destructiva):
&lt;ul&gt;
&lt;li&gt;Si el archivo de destino no existe, se lo crea&lt;/li&gt;
&lt;li&gt;Si el archivo existe, se agrega la información al final&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;EJEMPLOS&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Redirecciona &lt;strong&gt;stdout&lt;/strong&gt; hacía un archivo. Lo crea si no existe, si existe lo sobreescribe.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;ls -l &gt; lista.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;(La salida del comando se envía a un archivo en vez de la terminal.)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;Redirecciona &lt;strong&gt;stdout&lt;/strong&gt; hacía un archivo. Lo crea si no existe, si existe concatena la salida al final de este.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ps -ef &gt;&gt; processos.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;(Concatena al archivo procesos.txt la salida del comando.)&lt;/p&gt;
&lt;p&gt;Es importante ver que si no se especifica el descriptor de fichero se asume que se redirige la salida estándar. En el caso del operador &lt;code&gt;&amp;#x3C;&lt;/code&gt; se redirige la entrada estándar, es decir, el contenido del fichero que especificáramos, se pasaría como parámetro al comando.&lt;/p&gt;
&lt;p&gt;Si quisiéramos redirigir todas las salidas a la vez hacia un mismo fichero, podríamos utilizar &lt;strong&gt;&lt;code&gt;&gt;&amp;#x26;&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Además, con el carácter &lt;code&gt;&amp;#x26;&lt;/code&gt; podemos redirigir salidas de un tipo hacia otras, por ejemplo, si quisiéramos redirigir la salida de error hacia la salida estándar podríamos indicarlo con: &lt;strong&gt;&lt;code&gt;2&gt;&amp;#x26;1&lt;/code&gt;&lt;/strong&gt;. Es importante tener en cuenta que el orden de las redirecciones es significativo: se ejecutarán de izquierda a derecha.&lt;/p&gt;
&lt;p&gt;El comando &lt;strong&gt;&lt;code&gt;kill&lt;/code&gt;&lt;/strong&gt; en Linux (ubicado en / bin / kill), es un comando incorporado que se usa para terminar los procesos manualmente. El comando kill envía una señal a un proceso que termina el proceso. Si el usuario no especifica ninguna señal que se enviará junto con el comando kill, se envía la señal TERM predeterminada que finaliza el proceso.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;kill -l&lt;/code&gt;&lt;/strong&gt; Para mostrar todas las señales disponibles, puede usar la siguiente opción de comando.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;kill pid&lt;/code&gt;&lt;/strong&gt; Para mostrar cómo usar un PID con el comando kill.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;kill -s&lt;/code&gt;&lt;/strong&gt; Para mostrar cómo enviar señales a los procesos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;kill -L&lt;/code&gt;&lt;/strong&gt; este comando se usa para listar las señales disponibles en un formato de tabla.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ps:&lt;/strong&gt; Muestra información de los procesos activos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;kill:&lt;/strong&gt; Usa el PID para matar el proceso. Permite interactuar con cualquier proceso mandando señales. Kill &lt;code&gt;&amp;#x3C;pid&gt;&lt;/code&gt; termina un proceso y Kill -9 &lt;code&gt;&amp;#x3C;pid&gt;&lt;/code&gt; fuerza a terminar un proceso en caso de que la anterior opción falle.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pstree:&lt;/strong&gt; muestra un árbol de procesos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;killall:&lt;/strong&gt; nos permite matar un proceso escribiendo su nombre&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;top:&lt;/strong&gt; Sirve para ver los procesos de ejecución del sistema (y más cosas) en tiempo real&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;nice:&lt;/strong&gt; Ejecuta un comando con una prioridad determinada, o modifica la prioridad a de un proceso. &lt;code&gt;nice -10 named&lt;/code&gt; Esto bajaría la prioridad de named en 10 unidades(Si estaba en -10, pasará a - 20) &lt;code&gt;MENOS GENTIL = MAS PRIORIDAD&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;6) Otros comandos de Linux (Indique funcionalidad y parámetros)&lt;/h2&gt;
&lt;p&gt;Los archivos &lt;code&gt;TAR&lt;/code&gt; no son archivos comprimidos sino empaquetados. &lt;code&gt;TAR&lt;/code&gt; es un empaquetador, es algo más parecido a un compresor como &lt;code&gt;arj&lt;/code&gt; ó &lt;code&gt;zip&lt;/code&gt; pero sin compresión. Su función es la de incluir todos los ficheros juntos en el mismo archivo, conservando las estructuras de directorios y permisos de los mismos.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;crear&lt;/code&gt;&lt;/strong&gt; un archivo .tar 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;tar –cvf mi_archivo.tar /directorio/a/empaquetar 
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;extraer&lt;/code&gt;&lt;/strong&gt; el contenido de un archivo .tar ya creado 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;tar –xvf mi_archivo.tar
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;actualizar&lt;/code&gt;&lt;/strong&gt; el contenido de un archivo .tar ya existente 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;tar –uvf mi_archivo.tar
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;agregar&lt;/code&gt;&lt;/strong&gt; un directorio a un archivo .tar ya existente  
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;tar –rvf archivo. tar  directorio/a/agregar
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;empaquetar&lt;/code&gt;&lt;/strong&gt; y comprimir el archivo .tar 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;tar –cvzf archivo.tgz /directorio/a/empaquetar/y/comprimir
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;desempaquetar&lt;/code&gt;&lt;/strong&gt; el archivo .tgz 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;tar –xvzf archivo.tgz
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Ojo : Observa la extensión &quot;.tgz&quot; para el tar comprimido. Aunque también podemos ponerle como extensión &quot;.tar.gz&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Claro, para sumar el tamaño de cuatro archivos en Linux y crear un archivo empaquetado que los contenga, puede seguir los siguientes pasos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Abrir una terminal y navegar hasta el directorio que contiene los cuatro archivos usando el comando &lt;code&gt;cd&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Para sumar el tamaño de los cuatro archivos, use el comando  
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;du -sh file1 file2 file3 file4
&lt;/code&gt;&lt;/pre&gt;
Esto le dará la suma total de los tamaños de los cuatro archivos.&lt;/li&gt;
&lt;li&gt;Para crear un archivo empaquetado que contenga los cuatro archivos, puede utilizar el comando
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;tar -cvzf archivo_empaquetado.tar.gz file1 file2 file3 file4
&lt;/code&gt;&lt;/pre&gt;
Esto creará un archivo empaquetado llamado &lt;code&gt;archivo_empaquetado.tar.gz&lt;/code&gt; que contiene los cuatro archivos.&lt;/li&gt;
&lt;li&gt;Para comparar los tamaños de los cuatro archivos individuales y el archivo empaquetado, use el comando &lt;code&gt;ls -lh&lt;/code&gt;. Esto mostrará el tamaño de cada archivo en una lista. Compare el tamaño total de los cuatro archivos individuales con el tamaño del archivo empaquetado para notar la diferencia en el tamaño.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Es importante tener en cuenta que el comando &lt;code&gt;tar&lt;/code&gt; utiliza la compresión para reducir el tamaño del archivo empaquetado, por lo que es posible que el tamaño del archivo empaquetado sea menor que la suma total de los tamaños de los cuatro archivos individuales.&lt;/p&gt;
&lt;p&gt;Teniendo en cuenta que tenemos 4 archivos en el directorio Descargas/ejercicio6 y nos situamos en Descargas ejecutamos lo siguiente&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;tar cvfz archivo.tar.gz ejercicio6
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esto nos dejaria un archivo empaquetado de archivos comprimidos en un solo archivo archivo.tar.gz y para acceder a dicha informacion haremos&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;tar xvfz archivo.tar.gz
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Si los archivos están en el mismo directorio utilizamos el comando visto anteriormente&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;tar&lt;/code&gt;&lt;/strong&gt; Empaqueta/desempaqueta varios archivos en uno solo, puede realizar compresión sin perdida&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;grep&lt;/code&gt;&lt;/strong&gt; El comando grep nos permite buscar cadenas de texto y palabras dentro de un fichero de texto o de la entrada estándar de la terminal. Una vez encontrado el contenido que estamos buscando:
grep mostrará en pantalla la totalidad de la línea/s que contiene/n la cadena de texto o palabra que estamos buscando&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;gzip&lt;/code&gt;&lt;/strong&gt; Comprime solo archivos utilizando la extensión .gz que se utiliza para truncar el tamaño de un archivo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;zgrep&lt;/code&gt;&lt;/strong&gt; Se usa para buscar expresiones de un archivo dado, incluso si está comprimido&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;wc&lt;/code&gt;&lt;/strong&gt; Cuenta los caracteres, palabras y líneas del archivo de texto.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7) Ejercicio&lt;/h2&gt;
&lt;p&gt;Enunciado: Indique qué acción realiza cada uno de los comandos indicados a continuación considerando su orden. Suponga que se ejecutan desde un usuario que no es root ni pertenece al grupo de root. (Asuma que se encuentra posicionado en el directorio de trabajo del usuario con el que se logueó). En caso de no poder ejecutarse el comando, indique la razón&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;l s −l &gt; prueba {No se puede acceder a pruebas pq no existe el fichero}                         
ps &gt; PRUEBA 
chmod 710 prueba
chown root : root PRUEBA
chmod 777 PRUEBA 
chmod 700 / etc / passwd 
passwd root 
rm PRUEBA 
man / etc / shadow 
find / −name ∗ .conf 
usermod root −d /home/ newroot −L 
cd / root 
rm ∗ 
cd / etc 
cp ∗ /home −R 
shutdown 
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ls -l &gt; prueba&lt;/code&gt; Genera un archivo de nombre prueba que contiene un listado detallado con los contenidos del directorio home del usuario. Se redirige la salida estándar de ls mediante el carácter &gt; hacia el archivo prueba.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ps &gt; PRUEBA&lt;/code&gt; Genera un archivo de nombre PRUEBA que contiene un listado de los procesos en ejecución en el directorio home del usuario. AL igual que en el ejemplo anterior, se redirige la salida estándar mediante &gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;chmod 710 prueba&lt;/code&gt; Cambia los permisos del archivo prueba a 710 para UGO (usuario, Grupo, Otros).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;chown root:root PRUEBA&lt;/code&gt; Se intenta cambiar el propietario del archivo prueba pero la operación no está permitida.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;chmod 777 PRUEBA&lt;/code&gt; Cambia los permisos del archivo PRUEBA a 777. Es decir, todos los usuarios pueden leer, escribir y ejecutar el archivo.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;chmod 700 /etc/passwd&lt;/code&gt; Intenta cambiar los permisos a 700, pero la operación no está permitida para un usuario que no es root, esto por el archivo que está intentando cambiar.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;passwd root&lt;/code&gt; passwd: No debe ver o cambiar la información de la contraseña para root.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rm PRUEBA&lt;/code&gt; Se elimina el archivo PRUEBA.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;man /etc/shadow&lt;/code&gt; Permiso denegad, porque “man” no debe recibir una ruta, si hago “man shadow” si anda.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;find / -name *.conf&lt;/code&gt; Lista todos los archivos cuyo nombres terminan con .conf, empezando la búsqueda en el directorio raíz /.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;usermod root –d /home/newroot –L&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd /root&lt;/code&gt; Se intenta acceder a la carpeta root, pero la operación falla porque el usuario no tiene los permisos.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rm *&lt;/code&gt; Borra todos los archivos del directorio donde está posicionado el usuario.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd /etc&lt;/code&gt; Cambia el directorio a /etc, osea “se mueve” a /etc&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cp * /home –R&lt;/code&gt; Intenta copiar el contenido de /etc a home, pero el usuario no tiene los permisos necesarios para crear archivos en el directorio /home.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;shutdown&lt;/code&gt; Apaga el equipo&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;8) Indique qué comando sería necesario ejecutar para realizar cada una de las siguientes acciones:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Todos los procesos tienen un pid (id de proceso) para terminar un proceso se usa el comando:
&lt;pre&gt;&lt;code&gt;kill -9 23 (kill menos 9 número de id del proceso).
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ps –aux&lt;/code&gt; Para ver los procesos del sistema que corren en el momento comando:&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;1)&lt;/code&gt; Primero buscamos el PID de init con el comando &lt;code&gt;ps –aux&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;2)&lt;/code&gt; Ingresamos como superusuario: su – e ingresamos contraseña&lt;/li&gt;
&lt;li&gt;&lt;code&gt;3)&lt;/code&gt; Utilizamos el comando kill –9 1&lt;/li&gt;
&lt;li&gt;&lt;code&gt;4)&lt;/code&gt; Y vamos a ver que no va a suceder nada, porque el proceso init, no puede terminarse, así que ni responde al comando.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para buscar un &lt;code&gt;archivo&lt;/code&gt; se utiliza el comando:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; find / -type f -name NombreDelArchivoABuscar
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Búsqueda por tipo&lt;/p&gt;
&lt;p&gt;Linux permite a los usuarios listar toda la información basada en sus tipos. Hay varios filtros que puedes usar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;d&lt;/code&gt;&lt;/strong&gt; directorio o carpeta&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;f&lt;/code&gt;&lt;/strong&gt; archivo normal&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;l&lt;/code&gt;&lt;/strong&gt; enlace simbólico&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;c&lt;/code&gt;&lt;/strong&gt; dispositivos de caracteres&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;b&lt;/code&gt;&lt;/strong&gt; dispositivos de bloque&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si deseamos buscar la palabra “conf” en todo el sistema se utiliza el comando:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;find / -name NombreABuscar 
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;ps &gt; /home/user/procesos
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cat Procesos&lt;/code&gt; Para poder comprobar el contenido que tiene el directorio Procesos&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rm –r Procesos&lt;/code&gt; Para eliminar dicho directorio&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Usuario:&lt;/strong&gt; Lectura, escritura, ejecución&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Grupo:&lt;/strong&gt; Lectura, ejecución&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Otros:&lt;/strong&gt; ejecución&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;mkdir xxxx&lt;/code&gt; Primero creamos el directorio “xxxx”&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;ls –l&lt;/code&gt; Para ver los permisos que tiene dicho directorio&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;chmod 751 xxxx&lt;/code&gt; Para cambiar sus permisos donde Usuario tenga los permisos de lectura, escritura, ejecución, Grupo los permisos de lectura y ejecución y Otros el permiso&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;7&lt;/code&gt; = 4(Lectura) + 2(Escritura) + 1(Ejecución) --&gt; &lt;code&gt;Usuario&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;5&lt;/code&gt; = 4(Lectura) + 1(Ejecución) --&gt; &lt;code&gt;Grupo&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;1&lt;/code&gt; = 1(Ejecución) --&gt; &lt;code&gt;Otros&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;ls -l&lt;/code&gt; Para chequear si los permisos fueron modificados&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para lograr visualizar los permisos se lee de la siguiente forma:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://user-images.githubusercontent.com/55964635/227809799-8f8fb1d2-8ea0-4a2e-8a26-33bc6d1f83f0.png&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No ver la primera d!&lt;/li&gt;
&lt;li&gt;Los primeros &lt;code&gt;rwx&lt;/code&gt;(Lectura, Escritura, Ejecución) pertenecen a Usuario&lt;/li&gt;
&lt;li&gt;Luego rx (LecturaEjecución) pertenece a Grupo&lt;/li&gt;
&lt;li&gt;Y x (Ejecución) pertenece a Otros&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Usuario:&lt;/strong&gt; Lectura, escritura.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Grupo:&lt;/strong&gt; Lectura, ejecución&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Otros:&lt;/strong&gt; Ninguno&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;mkdir yyyy&lt;/code&gt; Primero creamos el directorio &lt;code&gt;“yyyy”&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;ls –l&lt;/code&gt; Para ver los permisos que tiene dicho directorio&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;chmod 650 yyyy&lt;/code&gt; Para cambiar sus permisos donde Usuario tenga los permisos de lectura, escritura, ejecución, Grupo los permisos de lectura y ejecución y Otros el permiso de ejecución.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;cd /tmp
rm *
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;chown iso2010 /opt/isodata
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;pwd &gt;&gt; /home/user/donde
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;9) Indique qué comando sería necesario ejecutar para realizar cada una de las siguientes acciones&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;su
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;sudo adduser il {crear}
passwd il {nueva contra}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;se modificaron los archivos &lt;code&gt;/etc/passwd&lt;/code&gt; y se creo el directorio personal del perfil en /home/nombrelegido&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;cd /tmp
mkdir cursada2017
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;En modo superusuario/root&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;cp /var/log/* /tmp/cursada2017
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;chown nombreUsuario:nombreUsuario /tmp/cursada2017
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;chmod -R 745 /tmp/cursada2017
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;sudo login user
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;ps -p 544
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;ps aux | wc -l
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;who
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;sudo shutdown 1 &apos;El sistema se va a apagar&apos;
tmb sin apagar
wall &quot;En un minuto apagaremos el sistema.&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;sudo shutdown now
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;10) Indique qué comando sería necesario ejecutar para realizar cada una de las siguientes acciones&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;mkdir 19508/3 {No se puede dado q confunde / con un desplazamiento de directorio}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Nombre, Apellido, Número de alumno y dirección de correo electrónico. El archivo debe llamarse &quot;LEAME&quot;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd legajo
vi LEAME
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dueño:&lt;/strong&gt; ningún permiso&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Grupo:&lt;/strong&gt; permiso de ejecución&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Otros:&lt;/strong&gt; todos los permisos&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;chmod 017 LEAME
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Se puede porque unix es case sensitive y distingue entre mayúsculas y minúsculas.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;find / -name &quot;[0-9]*&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;find / -name &quot;*.os&quot; &gt; /home/user/legajo/ejerciciof
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;11) Ejercicio&lt;/h2&gt;
&lt;p&gt;Indique qué acción realiza cada uno de los comandos indicados a continuación considerando su orden. Suponga que se ejecutan desde un usuario que no es root ni pertenece al grupo de root. (Asuma que se encuentra posicionado en el directorio de trabajo del usuario con el que se logueó). En caso de no poder ejecutarse el comando indique la razón:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mkdir iso&lt;/code&gt; Crea el directorio iso&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd . / iso; ps &gt; f0&lt;/code&gt; Me situo en iso y creo el archivo f0 con los procesos en ejecucion&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ls &gt; f1&lt;/code&gt; Guardo en F1 la lista de archivos en el directorio iso&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd /&lt;/code&gt; Me posiciono en la raiz&lt;/li&gt;
&lt;li&gt;&lt;code&gt;echo $HOME&lt;/code&gt; muestra en pantalla la direccion del directorio personal del usuario&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ls −l $&gt; $HOME/iso/ls&lt;/code&gt; No se puede acceder a $ no existe el fichero o directorio&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd $HOME; mkdir f2&lt;/code&gt; Nos situamos en el directorio personal y creamos el directorio f2&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ls −ld f2&lt;/code&gt; Se da un listado detallado de f2&lt;/li&gt;
&lt;li&gt;&lt;code&gt;chmod 341 f2&lt;/code&gt; Se modifican los permisos de f2;Es,Ej para usuario,L para Grupo, y Ej para otros&lt;/li&gt;
&lt;li&gt;&lt;code&gt;touch dir&lt;/code&gt; se crea el archivo dir&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd f2&lt;/code&gt; accedemos al directoriio f2&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd ~/ iso&lt;/code&gt; accedemos a la carpeta iso&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pwd &gt; f3&lt;/code&gt; se guarda en el archivo f3 la direccion de la carpeta iso&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ps | grep &apos; ps &apos; | wc −l &gt;&gt; ../f2/f3&lt;/code&gt; se obtienen los procesos, se usa de entrada para grep el cual filtra todos los que posean ps,pra luego almacenar la cantidad de lineas obtenidas luegro de dicho filtro y añadirlas al archivo f3&lt;/li&gt;
&lt;li&gt;&lt;code&gt;chmod 700 .. / f2 ; cd ..&lt;/code&gt; Se modifica el acceso de f2 dando al usuario todos los permisos y a los demas nada, volviendo despues al directorio personal&lt;/li&gt;
&lt;li&gt;&lt;code&gt;find . −name etc / passwd&lt;/code&gt; Lanza un warning por mal uso del comando&lt;/li&gt;
&lt;li&gt;&lt;code&gt;find / −name etc / passwd&lt;/code&gt; filtra todos los archivos de passwd por nombre en orden&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mkdir ejercicio5&lt;/code&gt; crea el directorio ejercicio5&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;a) Inicie 2 sesiones utilizando su nombre de usuario y contraseña. En una sesión vaya siguiendo paso a paso las órdenes que se encuentran escritas en el cuadro superior. En la otra sesión, cree utilizando algún editor de textos un archivo que se llame. ejercicio10_explicacion&quot;dentro del directorio creado en el ejercicio 9.a) y, para cada una de las órdenes que ejecute en la otra sesión, realice una breve explicación de los resultados obtenidos. (ARRIBA)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;19:&lt;/code&gt; Copiar el directorio iso y todo su contenido al directorio creado en el inciso 9.a).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;20:&lt;/code&gt; Copiar el resto de los archivos y directorios que se crearon en este ejercicio al directorio creado en el ejercicio 9.a).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://user-images.githubusercontent.com/55964635/189272687-459c381d-b44c-4a8d-b3d0-aa3acc44e1ae.png&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;12) Ejercicio&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Enunciado:&lt;/strong&gt; Cree una estructura desde el directorio /home que incluya varios directorios, subdirectorios y archivos, según el esquema siguiente. Asuma que “usuario” indica cuál es su nombre de usuario. Además deberá tener en cuenta que dirX hace referencia a directorios y fX hace
referencia a archivos:&lt;/p&gt;
&lt;p&gt;a) Utilizando la estructura de directorios anteriormente creada, indique que comandos son necesarios para realizar las siguientes acciones:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mueva el archivo &quot;f3.al directorio de trabajo /home/usuario.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;mv f3 $HOME
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Copie el archivo &quot;f4.en el directorio &quot;dir11&quot;.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;cp f4 $HOME/dir11
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Haga los mismo que en el inciso anterior pero el archivo de destino, se debe llamar &quot;f7&quot;.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;cp f4 $HOME/dir11/f7
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Cree el directorio copia dentro del directorio usuario y copie en él, el contenido de &quot;dir1&quot;.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;mkdir copia; cp -a dir11 copia
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Renombre el archivo &quot;f1&quot;por el nombre archivo y vea los permisos del mismo.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;cd iso;mv f0 archivo; ls  -ld archivo
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Cambie los permisos del archivo llamado archivo de manera de reflejar lo siguiente:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Usuario&lt;/code&gt;&lt;/strong&gt; Permisos de lectura y escritura&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Grupo&lt;/code&gt;&lt;/strong&gt; Permisos de ejecución&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Otros&lt;/code&gt;&lt;/strong&gt; Todos los permisos&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;chmod 617 archivo
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Renombre los archivos &quot;f3 2 &quot;f4&quot;de manera que se llamen &quot;f3.exe 2 &quot;f4.exerespectivamente.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;mv f3 f3.exe; cd $HOME/dir11 ; mov f4 f4.exe
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Utilizando un único comando cambie los permisos de los dos archivos renombrados en el inciso anterior, de manera de reflejar lo siguiente:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Usuario&lt;/code&gt;&lt;/strong&gt; Ningún permiso&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Grupo&lt;/code&gt;&lt;/strong&gt; Permisos de escritura&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Otros&lt;/code&gt;&lt;/strong&gt; Permisos de escritura y ejecución&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;chmod 023 f3.exe f4.exe
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;13) Indique qué comando/s es necesario para realizar cada una de las acciones de la siguiente secuencia de pasos (considerando su orden de aparición):&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;a) Cree un directorio llamado logs en el directorio /tmp.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;cd /tmp; mkdir logs
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;b) Copie todo el contenido del directorio /var/log en el directorio creado en el punto anterior.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;cp -a /var/log/. /tmp/logs
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;c) Empaquete el directorio creado en 1, el archivo resultante se debe llamar &quot;misLogs.tar&quot;.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;tar cvf misLogs.tar logs
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;d) Empaquete y comprima el directorio creado en 1, el archivo resultante se debe llamar &quot;misLogs.tar.gz&quot;.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;tar cvfz misLogs.tar.gz logs
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;e) Copie los archivos creados en 3 y 4 al directorio de trabajo de su usuario.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;cp misLogs.tar $HOME
cp misLogs.tar.gz $HOME
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;f) Elimine el directorio creado en 1, logs&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;rm -r logs
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;g) Desempaquete los archivos creados en 3 y 4 en do directorios diferentes.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;tar xvf misLogs.tar -C 1 
tar xvfz misLogs.tar.gz -C 2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Fecha&lt;/strong&gt; -&gt; Con el comando &lt;code&gt;Date&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;Ejercicios de scripting&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;1) Ejercicio&lt;/h2&gt;
&lt;p&gt;¿Qué es el Shell Scripting? ¿A qué tipos de tareas están orientados los script?  ¿Los scripts deben compilarse? ¿Por qué?&lt;/p&gt;
&lt;p&gt;La Shell provee estructuras de control que permiten programar shell scripts.&lt;/p&gt;
&lt;p&gt;El Shell Scripting es la técnica (habilidad / destreza) de diseñar y crear Script (archivo de automatización de tareas) mediante un Shell (preferiblemente) de un Sistema Operativo, o un&lt;/p&gt;
&lt;p&gt;Editor de Texto (Gráfico o Terminal). Este es un tipo de lenguaje de programación que generalmente es interpretado.&lt;/p&gt;
&lt;p&gt;Está orientado a diferentes tareas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Automatización de tareas&lt;/li&gt;
&lt;li&gt;Aplicaciones interactivas&lt;/li&gt;
&lt;li&gt;Aplicaciones con interfaz gráfica (con el comando zenity, por ejemplo).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;2) Ejercicio&lt;/h2&gt;
&lt;p&gt;Investigar la funcionalidad de los comandos echo y read&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Echo:&lt;/code&gt; Es un comando para la impresión de un texto en pantalla. El comando para imprimir el contenido de la variable es:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;echo $nombreVar &lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Read:&lt;/code&gt; El comando read lee su entrada estándar y asigna las palabras leídas en la(s) variable(s) cuyo nombre se pasa como argumento. Se trata del input desde teclado.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/ISO/blob/main/Practicas/Practica3/Imagenes/1.png?raw=true&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;a) ¿Como se indican los comentarios dentro de un script?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Los comentarios tienen que comenzar con el símbolo #&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;b) ¿Cómo se declaran y se hace referencia a variables dentro de un script?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;No necesita declarar una variable. Se creará sólo con asignarle un valor a su referencia. Luego se referencia con el símbolo $ Ejemplo&lt;/p&gt;
&lt;p&gt;Para hacer un script:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Paso 1&lt;/code&gt; en la consola usar el comando: &lt;code&gt;touch script.sh&lt;/code&gt; para crear el directorio.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Paso 2&lt;/code&gt; Ver si se creo el directorio con el comando &lt;code&gt;ls&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Paso 3&lt;/code&gt; Ingresar al archivo &lt;code&gt;script.sh&lt;/code&gt; con el editor de texto vi de la siguiente manera
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;vim script.sh &lt;/code&gt;&lt;/li&gt;
&lt;li&gt;DENTRO DEL EDITOR VIM:&lt;/li&gt;
&lt;li&gt;Ingresar la letra i para estar en modo insertar y Escribir&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;#!/bin/bash 
CAD=&quot;¡Hola Mundo!&quot;
echo $CAD
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ESC&lt;/code&gt; (para salir del modo editor)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:wq&lt;/code&gt; (para guardar los cambios)&lt;/li&gt;
&lt;li&gt;Salimos del editor vi e ingresamos a la consola&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Paso 4:&lt;/code&gt; Damos permiso de ejecución con el comando:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;chmod u+x script.sh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Si ponemos el comando ls vamos a ver que el directorio .sh cambio de color.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Paso 5:&lt;/code&gt; Con el comando &lt;code&gt;./script.sh&lt;/code&gt; vamos a ver el contenido de ese script en cosola.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Paso 6:&lt;/code&gt; Si queremos borrar ese directorio con script solo es necesario poner en consola el comando &lt;code&gt;rm script.sh&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tambien podes ejecutar el script con el comando &lt;code&gt;bash script.sh&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3) Ejercicio&lt;/h2&gt;
&lt;p&gt;Crear dentro del directorio personal del usuario logueado un directorio llamado practicashell-script y dentro de él un archivo llamado mostrar.sh cuyo contenido sea el siguiente:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash
# Comentarios acerca de lo que hace el script
# Siempre comento mis scripts, si no hoy lo hago
# y mañana ya no me acuerdo de lo que quise hacer
echo &quot;Introduzca su nombre y apellido:&quot;
read nombre apellido
echo &quot;Fecha y hora actual:&quot;
date
echo &quot;Su apellido y nombre es:&quot;
echo &quot;$apellido $nombre&quot;
echo &quot;Su usuario es: `whoami`&quot;
echo &quot;Su directorio actual es:&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://user-images.githubusercontent.com/55964635/232369884-42f534c8-975e-4053-997a-ad86ffdada50.png&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(a)&lt;/strong&gt; Asignar al archivo creado los permisos necesarios de manera que pueda ejecutarlo&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(b)&lt;/strong&gt; Ejecutar el archivo creado de la siguiente manera: ./mostrar&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(c)&lt;/strong&gt; ¿Qué resultado visualiza?&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://user-images.githubusercontent.com/55964635/232370167-cc259f97-9771-4169-958f-31ce04e94529.png&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(d)&lt;/strong&gt; Las backquotes (`) entre el comando whoami ilustran el uso de la sustitución de comandos. ¿Qué significa esto?
Son para poder ejecutar comando cuando se encuentran dentro de un string&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(e)&lt;/strong&gt; Realizar modificaciones al script anteriormente creado de manera de poder mostrar distintos resultados (cuál es su directorio personal, el contenido de un directorio en particular, el espacio libre en disco, etc.). Pida que se introduzcan por teclado (entrada estándar) otros datos.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash

echo &quot;Nombre y apellido&quot;
read nombre apellido
echo &quot;Fecha y hora actual: `date`&quot;
echo $nombre $apellido
echo &quot;Su usuario es: `whoami`&quot;
echo &quot;su directorio actual es :`pwd`&quot;
echo &quot;su directorio personal es : `$HOME`&quot;
echo &quot;Nombre de un directorio:&quot;
echo contenido
echo &quot;Contenido de $contenido es `ls $contenido`&quot;
echo &quot;Espacio libre en el disco `df`&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/ISO/blob/main/Documentos/2023-04-17-00-40-25.png?raw=true&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;4) Ejercicio&lt;/h2&gt;
&lt;p&gt;Parametrización: ¿Cómo se acceden a los parámetros enviados al script al momento de su invocación? ¿Qué información contienen las variables &lt;code&gt;$#, $*, $?&lt;/code&gt; y &lt;code&gt;$HOME&lt;/code&gt; dentro de un script?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los scripts pueden recibir argumentos en su invocación. Para accederlos, se utilizan variables especiales:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$0&lt;/code&gt; contiene la invocación al script. (nombre del script)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$1, $2, $3,...&lt;/code&gt; contienen cada uno de los argumentos.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$#&lt;/code&gt; contiene la cantidad de argumentos recibidos.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$*&lt;/code&gt; contiene la lista de todos los argumentos separados por espacios.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$?&lt;/code&gt; contiene en todo momento el valor de retorno del ultimo comando ejecutado.(si el valor es 0 se ejecuto correctamente, en caso de que haya habido algún error dará un valor entre 1 y 255).&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash

echo &quot;$0&quot;
echo &quot;$1 $3&quot;
echo &quot;$#&quot;
echo &quot;$*&quot;
echo &quot;$HOME&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/ISO/blob/main/Documentos/2023-04-17-01-05-38.png?raw=true&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5) Ejercicio&lt;/h2&gt;
&lt;p&gt;¿Cual es la funcionalidad de comando exit? ¿Qué valores recibe como parámetro y cual es su significado?&lt;/p&gt;
&lt;p&gt;El comando exit finaliza un script. Incluso, puede arrojar un valor de terminación, el cual estará disponible para su proceso padre.&lt;/p&gt;
&lt;p&gt;Todo comando posee un estado de terminación (exit status). Un comando que se ejecutó satisfactoriamente arrojará un valor de 0, mientras que un comando que no se procesó de manera correcta, finalizará con un número diferente de 0.&lt;/p&gt;
&lt;p&gt;Al igual que un comando, un script posee su propio estado de terminación, el cual será determinado por la última instrucción ejecutada por el script.&lt;/p&gt;
&lt;p&gt;Dentro de un script, el comando exit puede arrojar un número dentro de un rango de 0 a 255.&lt;/p&gt;
&lt;p&gt;Se puede consultar el exit status imprimiendo la variable &lt;code&gt;$?&lt;/code&gt; de la siguiente manera:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ingresamos al editor VIM con el archivo mostrar.sh&lt;/li&gt;
&lt;li&gt;Una vez hecho el bin bash, como última línea y dentro de insertar ingresamos el siguiente comando: echo $?&lt;/li&gt;
&lt;li&gt;ESC&lt;/li&gt;
&lt;li&gt;:exit&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En la consola se mostrara un número de 0 a 255.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/ISO/blob/main/Documentos/2023-04-17-01-20-45.png?raw=true&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6) Ejercicio&lt;/h2&gt;
&lt;p&gt;El comando &lt;strong&gt;expr&lt;/strong&gt; permite la evaluación de expresiones. Su sintaxis es: &lt;strong&gt;expr arg1 op arg2&lt;/strong&gt;, donde &lt;strong&gt;arg1 y arg2&lt;/strong&gt; representan argumentos y op la operación de la expresión. Investigar que tipo de operaciones se pueden utilizar&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Se puede utilizar
&lt;ul&gt;
&lt;li&gt;suma&lt;/li&gt;
&lt;li&gt;resta&lt;/li&gt;
&lt;li&gt;multiplicación (/*)&lt;/li&gt;
&lt;li&gt;división (/).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Y devuelve solo la parte entera.:&lt;/li&gt;
&lt;li&gt;expr 10 + 10 -&gt; 20, expr 14 % 9 -&gt; 5.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;También se puede utilizar para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cálculo de la longitud de la cadena:
&lt;ul&gt;
&lt;li&gt;expr length “esto es un test” &gt;&lt;/li&gt;
&lt;li&gt;devuelve la cantidad de caracteres: 15&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Cadena de rastreo:
&lt;ul&gt;
&lt;li&gt;expr substr “esto es un test” 3 5 &gt;&lt;/li&gt;
&lt;li&gt;te devuelve el texto desde la pos 3 y 5 lugares: to es&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;La cadena numérica primera posición de rastreo personaje que aparece:
&lt;ul&gt;
&lt;li&gt;expr index “esto es un test” s&lt;/li&gt;
&lt;li&gt;te devuelve el índice de la letra pasado por parámetro en la cadena (la primera aparición).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash/

SUMA=`expr 10 + 5`
RESTA=$(expr 10 - 5)
MULTIPLICACION=$(expr 10 \* 5)
DIVISION=$(expr 10 / 5)
MODULO=$(expr 10 % 5)
LONGITUD=&quot;Fabian &quot;$(expr length &quot;Fabian&quot;)
SUBSTR=&quot;Fabian 1 6: &quot;$(expr substr &quot;Fabian&quot; 1 6)
INDICE=&quot;Fabian b: &quot;$(expr index &quot;Fabian&quot; b)

echo &quot;var1 = 10, var2 = 5&quot;
echo &quot;SUMA $SUMA&quot;
echo &quot;RESTA $RESTA&quot;
echo &quot;MULTIPLICACION $MULTIPLICACION&quot;
echo &quot;DIVISION $DIVISION&quot;
echo &quot;MODULO $MODULO&quot;
echo &quot;LONGITUD $LONGITUD&quot;
echo &quot;SUBSTR $SUBSTR&quot;
echo &quot;INDICE $INDICE&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/ISO/blob/main/Documentos/2023-04-17-02-25-09.png?raw=true&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7) Ejercicio&lt;/h2&gt;
&lt;p&gt;El comando &lt;strong&gt;“test expresión”&lt;/strong&gt; permite evaluar expresiones y generar un valor de retorno, true o false. Este comando puede ser reemplazado por el uso de corchetes de la siguiente manera &lt;strong&gt;[ expresión ]&lt;/strong&gt;. Investigar que tipo de expresiones pueden ser usadas con el comando test. Tenga en cuenta operaciones para: evaluación de archivos, evaluación de cadenas de caracteres y evaluaciones numéricas.&lt;/p&gt;
&lt;p&gt;Este comando tiene un código de retorno igual a 0 cuando el test es positivo, y diferente de cero en caso contrario&lt;/p&gt;
&lt;p&gt;El comando test posee dos sintaxis: &lt;strong&gt;test expresión&lt;/strong&gt; y &lt;strong&gt;[ expresión ]&lt;/strong&gt;, donde &lt;strong&gt;expresión&lt;/strong&gt; representa el test que se debe efectuar&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash

var1=10
var2=5

if [ -e 7.sh ]; then echo &quot;existe&quot;; else echo &quot;no existe&quot;; fi

if (( $var1 % $var2 == 0 )); then echo &quot;Es Par&quot;; else echo &quot;Es Impar&quot;; fi

if (( $var1 &gt; $var2 )); then echo &quot;Es Mayor&quot;; else echo &quot;Es Menor&quot;; fi

if [ -r 7.sh -a -w 7.sh -a -x 7.sh ]; then echo &quot;Todos los permisos&quot;
else echo &quot;no tiene todos los permisos&quot;; fi

if [ -r 7.sh -o -w 7.sh -o -x 7.sh ]; then echo &quot;algun permiso&quot;
else echo &quot;no tiene todos los permisos&quot;; fi
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/ISO/blob/main/Documentos/2023-04-17-03-25-59.png?raw=true&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;8) Ejercicio&lt;/h2&gt;
&lt;p&gt;Estructuras de control. Investigue la sintaxis de las siguientes estructuras de control incluidas en shell scripting:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash
if [ 3 -eq 3 ]; then
  echo &quot;Son iguales&quot;
else
  echo &quot;Son distintos&quot;
fi
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/ISO/blob/main/Documentos/2023-04-17-04-59-47.png?raw=true&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash
echo &quot;Ingrese un caracter&quot;
read letra
case $letra in
  [a-z]) echo &quot;Es una minuscula&quot;;;
  [A-Z]) echo &quot;Es una mayuscula&quot;;;
  [0-9]) echo &quot;Es un nro&quot;;;
  *) echo &quot;Ingreso un caracter invalida&quot;;;
esac
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/ISO/blob/main/Documentos/2023-04-17-04-32-55.png?raw=true&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash
var1=0
while [ $var1 -le 5 ]
do
  echo &quot;Hola mundo&quot;
  var1=$((var1+1))
done
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/ISO/blob/main/Documentos/2023-04-17-04-15-06.png?raw=true&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash
for var in 1 2 3 4 5
do
  echo $var
done
echo &quot;--------&quot;
for var2 in {1..5}
do
  echo $var2
done
echo &quot;--------&quot;
for ((i=1; i&amp;#x3C;=5; i++))
do
  echo $i
done
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/ISO/blob/main/Documentos/2023-04-17-04-47-29.png?raw=true&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash
select opcion in opcion1 opcion2
do
  case $opcion in
    opcion1) echo &quot;Opcion1&quot; ;;
    opcion2) echo &quot;Opcion2&quot;;;
    *) exit;;
  esac
done
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/ISO/blob/main/Documentos/2023-04-17-12-08-38.png?raw=true&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9) Ejercicio&lt;/h2&gt;
&lt;p&gt;¿Qué acciones realizan las sentencias break y continue dentro de un bucle? ¿Qué parámetros reciben?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;break [n]&lt;/code&gt;&lt;/strong&gt; Corta la ejecución de &lt;code&gt;n&lt;/code&gt; niveles de loops.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;continue [n]&lt;/code&gt;&lt;/strong&gt; salta a la siguiente iteración del enésimo loop que contiene esta instrucción&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash/
contador=0
while true
do
  let contador++
  if [ $contador -eq 10 ]; then
    break
  elif [ $contador -eq 5 ]; then
    continue
  fi
  echo $contador
done
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/ISO/blob/main/Documentos/2023-04-17-12-31-44.png?raw=true&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10) Ejercicio&lt;/h2&gt;
&lt;p&gt;¿Qué tipo de variables existen? ¿Es shell script fuertemente tipado? ¿Se pueden definir arreglos? ¿Cómo?&lt;/p&gt;
&lt;p&gt;bash soporta &lt;code&gt;strings&lt;/code&gt; y &lt;code&gt;arrays&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los nombres son case sensitive&lt;/li&gt;
&lt;li&gt;Para crear una variable:
&lt;ul&gt;
&lt;li&gt;NOMBRE=&quot;pepe&quot; # SIN espacios alrededor del =&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Para accederla se usa $:
&lt;ul&gt;
&lt;li&gt;echo $NOMBRE&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para evitar ambigüedades se pueden usar llaves:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Esto no accede a $NOMBRE&lt;/li&gt;
&lt;li&gt;echo $NOMBREesto_no_es_parte_de_la_variable&lt;/li&gt;
&lt;li&gt;Esto sí&lt;/li&gt;
&lt;li&gt;echo ${NOMBRE}esto_no_es_parte_de_la_variable
Los nombres de las variables pueden contener mayúsculas, minúsculas, números y el símbolo (underscore), pero no pueden empezar con un número.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No es fuertemente tipado, y no requiere una declaración explícita de tipo variables.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Todo sobre los arreglos&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;| Bash | Resultado |
| --- | --- |
| arreglo=() | Definir Arreglo vacio |
| arreglo[0]=&quot;valor1&quot; | Asignación |
| arreglo=(&quot;valor1&quot;, &quot;valor2&quot;) | Definir con valores |
| read -a arreglo | leer desde teclado  tiene que estar definido arriba |
| ${arreglo[0]} | retorna &quot;valor1&quot; |
| ${arreglo[*]} | Retorna todos los elementos del array |
| ${arreglo[@]} | Retorna todos los elementos del array |
| ${#arreglo[@]} | Retorna 2, si contiene valor1 y valor2 |&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Codigo de ejemplo&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash
array=()

read -a array
echo &quot;Array pelado&quot; $array
echo &quot;index 3&quot; ${array[3]}
echo &quot;Todos los elementos&quot; ${array[*]}
echo &quot;Cantidad de elementos&quot; ${#array[*]}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/ISO/blob/main/Documentos/2023-04-17-13-17-14.png?raw=true&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;11) Ejercicio&lt;/h2&gt;
&lt;p&gt;¿Pueden definirse funciones dentro de un script? ¿Cómo? ¿Cómo se maneja el pasaje de parámetros de una función a la otra?&lt;/p&gt;
&lt;p&gt;Si, se pueden definir funciones dentro de un script.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Las funciones permiten modularizar el comportamiento de los scripts.&lt;/li&gt;
&lt;li&gt;Se pueden declarar de 2 formas:
&lt;pre&gt;&lt;code&gt;function nombre { block }
nombre() { block }
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Con la sentencia return se retorna un valor entre 0 y 255&lt;/li&gt;
&lt;li&gt;El valor de retorno se puede evaluar mediante la variable $?&lt;/li&gt;
&lt;li&gt;Reciben argumentos en las variables $1, $2, etc&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para definir variables locales podemos usar la palabra clave &lt;code&gt;local var1&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash
sumar(){
  return $(( $1 + $2 ))
}
cadena(){
  echo &quot;Hola $1, como estas&quot;
}

sumar 2 3
echo $?
mensaje=$(cadena &quot;Juan&quot;)
echo $mensaje
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/ISO/blob/main/Documentos/2023-04-17-13-30-12.png?raw=true&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;12) Ejercicio&lt;/h2&gt;
&lt;p&gt;Evaluación de expresione&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(a)&lt;/strong&gt; Realizar un script que le solicite al usuario 2 números, los lea de la entrada Standard e imprima la multiplicación, suma, resta y cual es el mayor de los números leídos.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash

echo &quot;Ingrese dos nros&quot;
read nro1 nro2
echo &quot;MULTIPLICACION: $(( $nro1 * $nro2 ))&quot;
echo &quot;SUMA: $(( $nro1 + $nro2 ))&quot;
echo &quot;RESTA: $(( $nro1 - $nro2 ))&quot;

if [ $nro1 -gt $nro2 ]; then
  echo &quot;es mayor el $nro1&quot;
else 
  echo &quot;es mayor el $nro2&quot;
fi
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/ISO/blob/main/Documentos/2023-04-17-13-48-29.png?raw=true&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(b)&lt;/strong&gt; Modificar el script creado en el inciso anterior para que los números sean recibidos como parámetros. El script debe controlar que los dos parámetros sean enviados.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash

if (( $# != 2 )); then exit 0; fi

echo &quot;MULTIPLICACION: $(( $1 * $2 ))&quot;
echo &quot;SUMA: $(( $1 + $2 ))&quot;
echo &quot;RESTA: $(( $1 - $2 ))&quot;

if [ $1 -gt $2 ]; then
  echo &quot;es mayor el $1&quot;
else 
  echo &quot;es mayor el $2&quot;
fi
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/ISO/blob/main/Documentos/2023-04-17-15-26-52.png?raw=true&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(c)&lt;/strong&gt; Realizar una calculadora que ejecute las 4 operaciones básicas: +, - ,*, %. Esta calculadora debe funcionar recibiendo la operación y los números como parámetros&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash
select operacion in Multiplicacion Suma Resta CualEsMayor Cerrar
do
   case $operacion in
      Multiplicacion) echo &quot;MULTIPLICACION: $(( $1 * $2 ))&quot; ;;
      Suma) echo &quot;SUMA: $(( $1 + $2 ))&quot; ;;
      Resta) echo &quot;RESTA: $(( $1 - $2 ))&quot; ;;
      CualEsMayor) 
         if [ $1 -gt $2 ]; then echo &quot;es mayor el $1&quot;;
         else echo &quot;es mayor el $2&quot; ;fi
         ;;
      Cerrar|*) exit ;;
   esac  
done
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/ISO/blob/main/Documentos/2023-04-17-15-45-51.png?raw=true&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;13) Ejercicio&lt;/h2&gt;
&lt;p&gt;Uso de las estructuras de control&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(a)&lt;/strong&gt; Realizar un script que visualice por pantalla los números del 1 al 100 así como sus cuadrados.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash
for i in {1..100}
do
  echo &quot;$i La potencia es: $(($i * $i))&quot;
done
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/ISO/blob/main/Documentos/2023-04-17-15-58-03.png?raw=true&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;b) Crear un script que muestre 3 opciones al usuario: Listar, DondeEstoy y QuienEsta. Según la opción elegida se le debe mostrar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Listar: lista el contenido del directoria actual.&lt;/li&gt;
&lt;li&gt;DondeEstoy: muestra el directorio donde me encuentro ubicado.&lt;/li&gt;
&lt;li&gt;QuienEsta: muestra los usuarios conectados al sistema.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash
select opcion in Listar DondeEstoy QuienEsta
do
  case $opcion in
    Listar) echo $(ls) ;;
    DondeEstoy) echo $(pwd);;
    QuienEsta) echo $(who);;
    *) exit;;
  esac
done
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/ISO/blob/main/Documentos/2023-04-17-16-22-17.png?raw=true&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;c) Crear un script que reciba como parámetro el nombre de un archivo e informe si el mismo existe o no, y en caso afirmativo indique si es un directorio o un archivo. En caso de que no exista el archivo/directorio cree un directorio con el nombre recibido como parámetro&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash
if (( $# != 1 )); then exit; fi

fi [ -e $1 ]; then
   echo &quot;El archivo $1 existe&quot;
   fi [ -f $1 ]; then echo &quot;Y es un archivo&quot;; fi
   fi [ -d $1 ]; then echo &quot;Y es un directorio&quot;; fi
   exit
fi
mkdir $1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/ISO/blob/main/Documentos/2023-04-17-16-38-34.png?raw=true&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;14) Ejercicio&lt;/h1&gt;
&lt;p&gt;Renombrando Archivos: haga un script que renombre solo archivos de un directorio pasado como parametro agregandole una CADENA, contemplando las opciones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;“-a CADENA”:&lt;/strong&gt; renombra el fichero concatenando CADENA al final del nombre del archivo&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;“-b CADENA”:&lt;/strong&gt; renombra el fichero concantenado CADENA al principio del nombre
del archivo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ejemplo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si tengo los siguientes archivos: /tmp/a /tmp/b&lt;/li&gt;
&lt;li&gt;Al ejecutar: ./renombra /tmp/ -a EJ&lt;/li&gt;
&lt;li&gt;Obtendré como resultado: /tmp/aEJ /tmp/bEJ&lt;/li&gt;
&lt;li&gt;Y si ejecuto: ./renombra /tmp/ -b EJ&lt;/li&gt;
&lt;li&gt;El resultado será: /tmp/EJa /tmp/EJb&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Comandos ejecutados&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;bash 14.sh prueba -a Ej&lt;/li&gt;
&lt;li&gt;Despues&lt;/li&gt;
&lt;li&gt;bash 14.sh prueba -b Ej&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash
if [ $# -ne 3 ]; then 
  echo  -e &quot;
  Parametros: \n
  Path \n
  -a/-b \n
  sufijo/prefijo
&quot;; exit;fi

if ! [ -e $1 ]; then 
  echo &quot;El path ingresado no existe&quot;
  exit
fi
cd $1
archivos=&quot;$(ls)&quot;
ls -1
if [ $2 = &quot;-a&quot; ];then
  for i in ${archivos[*]};do mv $i $i$3;done
elif [ $2 = &quot;-b&quot; ];then
  for i in ${archivos[*]};do mv $i $3$i;done
else
  echo &quot;Tiene que ingresar -a o -b&quot;
fi
echo &quot;Despues de todo:&quot;
ls -1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/Fabian-Martinez-Rincon/ISO/blob/main/Documentos/2023-04-18-10-12-13.png?raw=true&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;15) Ejercicio&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Comando cut&lt;/strong&gt;. El comando cut nos permite procesar la líneas de la entrada que reciba (archivo, entrada estándar, resultado de otro comando, etc) y cortar columnas o campos, siendo posible indicar cual es el delimitador de las mismas. Investigue los parámetros que puede recibir este comando y cite ejemplos de uso.&lt;/p&gt;
&lt;p&gt;Comando cut : Su principal utilidad es la de borrar secciones, campos o caracteres de la salida de un comando o de cada una de las líneas de un fichero de texto.&lt;/p&gt;
&lt;p&gt;Ejemplos de uso:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mostrar los caracteres que nos interesen en una línea de texto o en un conjunto de líneas&lt;/li&gt;
&lt;li&gt;Imaginemos que tenemos un fichero de texto con el nombre &lt;code&gt;geekland.txt&lt;/code&gt; que tiene el siguiente contenido:
&lt;pre&gt;&lt;code&gt;la utilidad
es fácil de usar y es útil
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Si únicamente queremos mostrar el cuarto carácter de cada una de las líneas lo haremos con la opción &lt;code&gt;-c 4&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cut -c 4 geekland.txt&lt;/code&gt;
&lt;pre&gt;&lt;code&gt;u
f
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Si ahora queremos mostrar los caracteres del 2 al 6:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cut -c 2-6 geekland.txt&lt;/code&gt;
&lt;pre&gt;&lt;code&gt;a uti
s fá
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Si finalmente queremos mostrar los caracteres 1,2,3 y 5,6,7 y 8 de cada una de las líneas de un fichero de texto:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cut -c 1-3,5-8 geekland.txt&lt;/code&gt;
&lt;pre&gt;&lt;code&gt;la tili
es áci
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cut también ofrece la posibilidad de seleccionar un carácter inicial y seleccionar el resto de caracteres hasta el final. Por ejemplo para seleccionar el texto a partir del carácter 5 hasta el final usaremos la opción &lt;code&gt;-c 5-&lt;/code&gt; del siguiente modo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cut -c 5- geekland.txt&lt;/code&gt;
&lt;pre&gt;&lt;code&gt;tilidad cut
ácil de usar y es útil
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;O también permite seleccionar un carácter final y seleccionar el resto de caracteres hasta el inicio de la frase o fichero. Por lo tanto para mostrar desde el carácter 4 hasta el inicio de la frase lo haremos del siguiente modo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cut -c -4 geekland.txt&lt;/code&gt;
&lt;pre&gt;&lt;code&gt;la u
es f
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Capturar texto a partir de un delimitador y fijando el campo que queremos mostrar&lt;/li&gt;
&lt;li&gt;Si únicamente queremos mostrar la tercera palabra:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;a)&lt;/code&gt; Cada palabra esta separada por un espacio. Por lo tanto tendremos que fijar el espacio como delimitador. Para fijar el espacio como delimitador lo haré con la opción&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-d &apos; &apos;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;b)&lt;/code&gt; A continuación hay que definir la palabra que queremos mostrar. si queremos
mostrar la tercera palabra lo haremos con la opción –f2. La opción –f2 hace que se
muestre la palabra que hay entre el segundo y tercer delimitador.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cut -d &apos; &apos; –f2&lt;/code&gt;
&lt;pre&gt;&lt;code&gt;utilidad
fácil
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Ahora imaginemos que la salida del comando cat /etc/passwd es la siguiente:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cat /etc/passwd&lt;/code&gt;
&lt;pre&gt;&lt;code&gt;root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
...
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si únicamente queremos mostrar los usuarios podemos fijar que el delimitador sea : y a posteriori definir que se muestre el primer campo. Para hacer lo que acabo de mencionar podemos usar el siguiente comando:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cut -d &apos;:&apos; -f1 /etc/passwd&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;root
daemon
bin
sys
... 
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;16) Ejercicio&lt;/h2&gt;
&lt;p&gt;Realizar un script que reciba como parámetro una extensión y haga un reporte con 2
columnas, el nombre de usuario y la cantidad de archivos que posee con esa extensión. Se debe guardar el resultado en un archivo llamado &lt;strong&gt;reporte.txt&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Funciona un toque raro el find&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash

if [ $# -ne 1 ]; then echo &quot;error&quot;; exit 1; fi

cadena=&quot;&quot;
for i in $(cat /etc/passwd) 
do
  usuario=$(echo $i | cut -d: -f1)
  path=$(echo $i | cut -d: -f6)  
  cadena+=&quot;$usuario $(find $path -name &quot;*$1&quot; | wc -l) \n&quot;
done
echo -e &quot;$cadena&quot; &gt; reporte.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;17) Ejercicio&lt;/h2&gt;
&lt;p&gt;Escribir un script que al ejecutarse imprima en pantalla los nombre de los archivos que se encuentran en el directorio actual, intercambiando minúsculas por mayúsculas, además de eliminar la letra a (mayúscula o minúscula). Ejemplo, directorio actual:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;IsO
pepE
Maria
Si ejecuto: ./ejercicio17
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Obtendré como resultado&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;iSo
PEPe
mRI
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Ayuda&lt;/strong&gt;: Investigar el comando &lt;strong&gt;tr&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash

archivos=$(ls)
for i in $archivos
do
  nuevo=$(echo $i | tr &apos;[:lower:][:upper:]&apos; &apos;[:upper:][:lower:]&apos; | tr -d &apos;aA&apos;)
  echo $nuevo
done
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Tambien podemos eliminar de la siguiente manera&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;nuevo_nombre=${archivo//a}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nuevo_nombre=${archivo^^}&lt;/code&gt; Todo a mayuscula&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nuevo_nombre=${archivo,,}&lt;/code&gt; Todo a minuscula&lt;/li&gt;
&lt;li&gt;echo $i | tr [a-zA-Z] [A-Za-z] | tr -d &apos;aA&apos;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;18) Ejercicio&lt;/h2&gt;
&lt;p&gt;Crear un script que verifique cada 10 segundos si un usuario se ha loqueado en el sistema (el nombre del usuario será pasado por parámetro). Cuando el usuario finalmente se loguee, el programa deberá mostrar el mensaje ”Usuario XXX logueado en el sistema” y salir.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash

if [ $# -ne 1 ]; then 
  echo &quot;Parametros incorrectos&quot;; exit 1; 
fi

usuarios=$(cat /etc/passwd | cut -d: -f1 | grep -w $1 | wc -l)
if [ $usuarios -eq 0 ]; then
  echo &quot;El usuario pasado no existe&quot;; exit 2;
fi

while true
do
  if [ $(users | grep -w $1 | wc -l) -eq 1 ]; then
    echo &quot;usuario $1 logueado en el sistema&quot;
    exit
  fi  
  sleep 10
done
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;19) Ejercicio&lt;/h2&gt;
&lt;p&gt;Escribir un Programa de “Menu de Comandos Amigable con el Usuario” llamado menu, el cual, al ser invocado, mostrará un menú con la selección para cada uno de los scripts creados en esta práctica. Las instrucciones de como proceder deben mostrarse junto con el menú. El menú deberá iniciarse y permanecer activo hasta que se seleccione Salir. Por ejemplo:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;MENU DE COMANDOS
03. Ejercicio 3
12. Evaluar Expresiones
13. Probar estructuras de control
...
Ingrese la opción a ejecutar: 03
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash

scripts=$(ls | grep &quot;\.sh&quot;)
select opcion in Salir $scripts
do
  case $opcion in
    Salir) exit;;
    *) source $opcion;;
  esac
done
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;20) Ejercicio&lt;/h2&gt;
&lt;p&gt;Realice un scrip que simule el comportamiento de una estructura de PILA e implemente las siguientes funciones aplicables sobre una estructura global definida en el script:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;push:&lt;/strong&gt; Recibe un parámetro y lo agrega en la pila&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pop:&lt;/strong&gt; Saca un elemento de la pila&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;lenght:&lt;/strong&gt; Devuelve la longitud de la pila&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;print:&lt;/strong&gt; Imprime todos elementos de la pila&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash
pila=()

push (){
  pila+=($1)
}
pop (){
  unset pila[${#pila[@]}-1]
}
lenght (){
  echo ${#pila[*]}
}
print(){
  echo ${pila[*]}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;21) Ejercicio&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Agregue 10 elementos a la pila.&lt;/li&gt;
&lt;li&gt;Saque 3 de ellos.&lt;/li&gt;
&lt;li&gt;Imprima la longitud de la cola.&lt;/li&gt;
&lt;li&gt;Luego imprima la totalidad de los elementos que en ella se encuentan.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash

pila=()
push (){ pila+=($1); }
pop (){ unset pila[${#pila[@]}-1]; }
lenght (){ echo ${#pila[*]}; }
print(){ echo ${pila[*]}; }

push 2
push 4
echo &quot;$(lenght)&quot;
print
pop
print
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;22) Ejercicio&lt;/h2&gt;
&lt;p&gt;Dada la siguiente declaración al comienzo de un script: num=(10 3 5 7 9 3 5 4) (la cantidad de elementos del arreglo puede variar). Implemente la función productoria dentro de este script, cuya tarea sea multiplicar todos los números del arreglo&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash

num=(10 3 5 7 9 3 5 4)
productora(){
  let resultado=1
  for i in ${num[*]}
  do
    resultado=$(($i * $resultado))
  done
  echo $resultado
}

productora
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;23) Ejercicio&lt;/h2&gt;
&lt;p&gt;Implemente un script que recorra un arreglo compuesto por números e imprima en pantalla sólo los números pares y que cuente sólo los números impares y los informe en pantalla al finalizar el recorrido&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash
nros=(10 3 5 7 9 3 5 4)

imprimir(){
  let nro
  for i in ${nros[*]}
  do
    echo $i
    if (( $i % 2 == 0 )); then
      echo &quot;Par: &quot;$i
    else
      let impares++
    fi
  done
  echo &quot;Nros Impares: &quot;$impares
}

imprimir
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;24) Ejercicio&lt;/h2&gt;
&lt;p&gt;Dada la definición de 2 vectores del mismo tamaño y cuyas longitudes no se conocen&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;vector1=( 1 .. N)
vector2=( 7 .. N)
Por ejemplo:
vector1=( 1 80 65 35 2 )
y
vector2=( 5 98 3 41 8 ).
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Complete este script de manera tal de implementar la suma elemento a elemento entre
ambos vectores y que la misma sea impresa en pantalla de la siguiente manera:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;La suma de los elementos de la posición 0 de los vectores es 6
La suma de los elementos de la posición 1 de los vectores es 178
...
La suma de los elementos de la posición 4 de los vectores es 10
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash
vector1=(1 80 65 35 2 )
vector2=(5 98 3 41 8 )
long=`expr ${#vector1[*]} - 1`

for i in $(seq 0 $long)
do
  resultado=`expr ${vector1[$i]} + ${vector2[$i]}`
  echo &quot;La suma de los elementos de la posicion $i de los vectores es $resultado&quot;
done
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;25) Ejercicio&lt;/h2&gt;
&lt;p&gt;Realice un script que agregue en un arreglo todos los nombres de los usuarios del sistema
pertenecientes al grupo “users”. Adicionalmente el script puede recibir como parametro:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;“-b n”&lt;/strong&gt;: Retorna el elemento de la posición n del arreglo si el mismo existe. Caso contrario, un mensaje de error.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;“-l”:&lt;/strong&gt; Devuelve la longitud del arreglo&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;“-i”:&lt;/strong&gt; Imprime todos los elementos del arreglo en pantalla&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash

# En grupo, me quedo con la columna 4 que tiene
# Los usuarios del grupo
# Uso el grep para filtrar por grupo aunque puede haber un usuario con nombre
# users pero bueno
# Cambiamos el separador de , por un espacio para agregarlo al array

if [ $# -ne 1 ] &amp;#x26;&amp;#x26; [ $# -ne 2 ]; then echo &quot;Parametros Invalidos&quot;; exit 1; fi 
grupo=$(cat /etc/group | grep -w &quot;users&quot; |cut -d: -f4 | tr &quot;,&quot; &quot; &quot;)
usuarios=($grupo)

case $1 in
  -b)
    if [ $2 -lt ${#usuarios[*]} ]; then
      echo ${usuarios[$2]}
    else
      echo &quot;Parametro fuera de rango&quot;
      exit 1
    fi;;
  -l) echo &quot;Longitud: ${#usuarios}&quot;;;
  -i) echo &quot;Todos: ${usuarios[*]}&quot;;;
esac
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;26) Ejercicio&lt;/h2&gt;
&lt;p&gt;Escriba un script que reciba una cantidad desconocida de parámetros al momento de su invocación (debe validar que al menos se reciba uno). Cada parámetro representa la ruta absoluta de un archivo o directorio en el sistema. El script deberá iterar por todos los parámetros recibidos, y solo para aquellos parámetros que se encuentren en posiciones impares (el primero, el tercero, el qverificar si el archivo o directorio existen en el sistema, imprimiendo en pantalla que tipo de objeto es (archivo o directorio). Además, deberá informar la cantidad de archivos o directorios inexistentes en el sistema.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;#!/bin/bash
if [ $# -le  0 ]; then exit 1;fi

let existen
for ((i=0 ; i&amp;#x3C;=$cantidad ; i+=2));
do
  actual=${elementos[$i]}
  if [ -d $actual ]; then echo &quot;es un directorio&quot;;
  elif [ -f $actual ]; then echo &quot;es un archivo&quot;;
  else let existen++;fi
done
echo &quot;La cantidad de archivos que no existen es&quot; $existen
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;27) Ejercicio&lt;/h2&gt;
&lt;p&gt;Realice un script que implemente a través de la utilización de funciones las operaciones
básicas sobre arreglos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;inicializar:&lt;/strong&gt; Crea un arreglo llamado array vacío&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;agregar_elem &amp;#x3C;parametro1&gt;:&lt;/strong&gt; Agrega al final del arreglo el parámetro recibido&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;eliminar_elem &amp;#x3C;parametro1&gt;:&lt;/strong&gt; Elimina del arreglo el elemento que se encuentra en la
posición recibida como parámetro. Debe validar que se reciba una posición válida&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;longitud:&lt;/strong&gt; Imprime la longitud del arreglo en pantalla&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;imprimir:&lt;/strong&gt; Imprime todos los elementos del arreglo en pantalla&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;inicializar_Con_Valores &amp;#x3C;parametro1&gt;&amp;#x3C;parametro2&gt;:&lt;/strong&gt; Crea un arreglo con longitud
&amp;#x3C;parametro1&gt;y en todas las posiciones asigna el valor &amp;#x3C;parametro2&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;#!/bin/bash

inicializar(){
  array=()
  echo &quot;vecto pa&quot;
}
agregar_elem(){
  array+=($1)
}
eliminar_elem(){
  unset array[$1]
}
imprimir(){
  echo ${array[*]}
}
longitud(){
  echo ${#array[*]}
}
inicializar_Con_Valores(){
  for ((i=0; i&amp;#x3C;$1; i++));
  do
    array+=($2)
  done
}

select opcion in  inicializar agregar_elem eliminar_elem longitud imprimir inicializar_Con_Valores
do  
  case $opcion in
    inicializar) inicializar;;
    agregar_elem) agregar_elem 9;;
    eliminar_elem) eliminar_elem 0;;
    longitud) longitud ;;
    inicializar_Con_Valores) inicializar_Con_Valores 10 4 ;;
    imprimir) imprimir;;
  esac
done
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;28) Ejercicio&lt;/h2&gt;
&lt;p&gt;Realice un script que reciba como parámetro el nombre de un directorio. Deberá validar que el mismo exista y de no existir causar la terminación del script con código de error 4. Si el directorio existe deberá contar por separado la cantidad de archivos que en él se encuentran para los cuales el usuario que ejecuta el script tiene permiso de lectura y escritura, e informar dichos valores en pantalla. En caso de encontrar subdirectorios, no deberán procesarse, y tampoco deberán ser tenidos en cuenta para la suma a informar.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash

if [ $# -ne 1 ]; then echo &quot;Ingrese un parametro&quot;; exit 1; fi
if ! [ -e $1 ] &amp;#x26;&amp;#x26; ! [ -d $1 ] ; then exit 4; fi

archivos=($(ls))
let contador=0
for i in ${archivos[*]} 
do
  if [ -f $i ] &amp;#x26;&amp;#x26; [ -w $i ] &amp;#x26;&amp;#x26; [ -r $i ]; then let contador++;fi
done
echo $contador
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;29) Ejercicio&lt;/h2&gt;
&lt;p&gt;Implemente un script que agregue a un arreglo todos los archivos del directorio /home cuya terminación sea .doc. Adicionalmente, implemente las siguientes funciones que le permitan acceder a la estructura creada:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;verArchivo &amp;#x3C;nombre_de_archivo&gt;: Imprime el archivo en pantalla si el mismo se
encuentra en el arreglo. Caso contrario imprime el mensaje de error “Archivo no encontrado” y devuelve como valor de retorno 5&lt;/li&gt;
&lt;li&gt;cantidadArchivos: Imprime la cantidad de archivos del /home con terminación .doc&lt;/li&gt;
&lt;li&gt;borrarArchivo &amp;#x3C;nombre_de_archivo&gt;: Consulta al usuario si quiere eliminar el archivo lógicamente. Si el usuario responde Si, elimina el elemento solo del arreglo. Si el usuario responde No, elimina el archivo del arreglo y también del FileSystem. Debe validar que el archivo exista en el arreglo. En caso de no existir, imprime el mensaje de error “Archivo no encontrado” y devuelve como valor de retorno 10&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash

archivos_doc=$( ls $HOME | grep &apos;\.doc$&apos; )

verArchivo(){
  encontro=false
  for i in ${archivos_doc[*]}
  do
    if [ $1 = $i ]; then 
      echo $(cat &quot;$HOME/$1&quot;)
      encontro=true
    fi
  done
  if [ $encontro = false ]; then echo &quot;No se encontro&quot; ;return 5; fi
}

cantidadArchivos(){
  echo ${#archivos_doc[*]}
}

borrarArchivo(){
  echo &quot;Ingrese un archivo&quot;
  if ! [ -e &quot;$HOME/$1&quot; ]; then echo &quot;Archivo no encontrado&quot;; return 10; fi
  echo &quot;Quiere eliminar el archivo logicamente? SI O NO&quot;
  select desicion in SI NO SALIR  
  do
    case $desicion in
      SI) unset &quot;$archivos_doc[$1]&quot;; echo &quot;Elementos ${archivos_doc[*]}&quot; ;;
      NO) rm &quot;$HOME/$1&quot; ;;
      SALIR) break;;
    esac
  done
}

verArchivo &quot;ejercio292.doc&quot;
cantidadArchivos
borrarArchivo &quot;ejercio9.doc&quot;
echo $?
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;30) Ejercicio&lt;/h2&gt;
&lt;p&gt;Realice un script que mueva todos los programas del directorio actual (archivos ejecutables) hacia el subdirectorio “bin” del directorio HOME del usuario actualmente logueado. El script debe imprimir en pantalla los nombres de los que mueve, e indicar cuántos ha movido, o que no ha movido ninguno. Si el directorio “bin” no existe,deberá ser creado.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;#!/bin/bash

# El -F agrega un indicador al final para saber que permisos tiene
# / para directorios
# * para archivos ejecutables

archivos=$(ls -F | grep &quot;*$&quot;)
if [ -n ${archivos[*]} ];then exit 1; fi
echo ${archivos[*]}
bin=&quot;$HOME/bin&quot;
if ! [ -e $bin ]; then mkdir $bin; fi

mv ${archivos[*]} $bin
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;</content:encoded><h:img src="/_astro/thumbnail.DYJgYKf3.jpg"/><enclosure url="/_astro/thumbnail.DYJgYKf3.jpg"/></item></channel></rss>