{"id":1055,"date":"2014-01-23T14:14:24","date_gmt":"2014-01-23T12:14:24","guid":{"rendered":"http:\/\/blog.walii.es\/?p=1055"},"modified":"2014-01-23T19:23:37","modified_gmt":"2014-01-23T17:23:37","slug":"diferencias-entre-tcp-y-udp","status":"publish","type":"post","link":"https:\/\/blog.walii.es\/?p=1055","title":{"rendered":"Diferencias entre TCP y UDP"},"content":{"rendered":"<p>La forma mas r\u00e1pida de diferenciar entre estos tipos de Protocolos, es indicar que UDP no posee control de sesi\u00f3n, o lo que es lo mismo, que este protocolo es inseguro y se utiliza solo para los casos en cuales no nos importa si el paquete llega o se pierde por el camino.<\/p>\n<p>Detalle pedido prestado desde WIKIPEDIA<\/p>\n<ul>\n<li>UDP: proporciona un nivel de\u00a0<i>transporte no fiable de datagramas<\/i>, ya que apenas a\u00f1ade la informaci\u00f3n necesaria para la comunicaci\u00f3n extremo a extremo al paquete que env\u00eda al nivel inferior. Lo utilizan aplicaciones como NFS (<i><a title=\"Network File System\" href=\"http:\/\/es.wikipedia.org\/wiki\/Network_File_System\">Network File System<\/a><\/i>) y RCP (comando para copiar ficheros entre ordenadores remotos), pero sobre todo se emplea en tareas de control y en la transmisi\u00f3n de audio y v\u00eddeo a trav\u00e9s de una red. No introduce retardos para establecer una conexi\u00f3n, no mantiene estado de conexi\u00f3n alguno y no realiza seguimiento de estos par\u00e1metros. As\u00ed,\u00a0<i>un servidor dedicado a una aplicaci\u00f3n particular puede soportar m\u00e1s clientes activos cuando la aplicaci\u00f3n corre sobre UDP en lugar de sobre TCP.<\/i><\/li>\n<li>TCP: es el protocolo que proporciona un\u00a0<i>transporte fiable de flujo de bits entre aplicaciones<\/i>. Est\u00e1 pensado para poder enviar grandes cantidades de informaci\u00f3n de forma fiable, liberando al programador de la dificultad de gestionar la fiabilidad de la conexi\u00f3n (retransmisiones, p\u00e9rdida de paquetes, orden en el que llegan los paquetes, duplicados de paquetes&#8230;) que gestiona el propio protocolo. Pero la complejidad de la gesti\u00f3n de la fiabilidad tiene un coste en eficiencia, ya que para llevar a cabo las gestiones anteriores se tiene que a\u00f1adir bastante informaci\u00f3n a los paquetes que enviar. Debido a que los paquetes para enviar tienen un tama\u00f1o m\u00e1ximo, cuanta m\u00e1s informaci\u00f3n a\u00f1ada el protocolo para su gesti\u00f3n, menos informaci\u00f3n que proviene de la aplicaci\u00f3n podr\u00e1 contener ese paquete (el segmento TCP tiene una sobrecarga de 20 bytes en cada segmento, mientras que UDP solo a\u00f1ade 8 bytes). Por eso, cuando es m\u00e1s importante la velocidad que la fiabilidad, se utiliza UDP. En cambio,\u00a0<i>TCP asegura la recepci\u00f3n en destino de la informaci\u00f3n para transmitir<\/i>.<\/li>\n<\/ul>\n<p>En la comunicaci\u00f3n TCP se ven involucrados varios flujos de datos.<\/p>\n<p><strong>EVENT<\/strong>\u00a0<strong>DIAGRAM<\/strong><\/p>\n<p>Host A env\u00eda un\u00a0paquete TCP\u00a0<span style=\"color: #ff0000;\"><strong>SYN<\/strong><\/span>chronize al Host B<\/p>\n<p>Host B recibe el\u00a0<span style=\"color: #ff0000;\"><strong>SYN<\/strong><\/span><\/p>\n<p>Host B<strong>\u00a0envia un<\/strong>\u00a0<span style=\"color: #0000ff;\"><strong>SYN<\/strong><\/span>chronize-ACKnowledgement<\/p>\n<p>Host A recibe el <span style=\"color: #0000ff;\"><strong>SYN-ACK<\/strong><\/span><\/p>\n<p>Host A<strong>\u00a0env\u00eda un<\/strong>\u00a0<span style=\"color: #cc00cc;\"><strong>ACK<\/strong><\/span>nowledge<\/p>\n<p>Host B recibe el\u00a0<span style=\"color: #cc00cc;\"><strong>ACK<\/strong><\/span>.\u00a0<em><strong><br \/>\nLa conexi\u00f3n TCP se ha establecido (TCP ESTABLISHED).<\/strong><\/em><\/p>\n<p><img loading=\"lazy\" id=\"TCPthreeWayHandshake\" title=\"TCP Three Way Handshake diagram - animated\" alt=\"tcp three-way handshake,syn,syn-ack,ack\" src=\"http:\/\/www.inetdaemon.com\/img\/internet\/3-way-handshake.gif\" width=\"216\" height=\"122\" name=\"TCPthreeWayHandshake\" border=\"1\" hspace=\"10\" vspace=\"10\" \/><\/p>\n<p>Cuando cerremos una sesi\u00f3n el flujo es diferente.<\/p>\n<p><a href=\"http:\/\/blog.walii.es\/wp-content\/uploads\/2014\/01\/300px-Fin_de_conexi\u00f3n_TCP.svg_.png\"><img loading=\"lazy\" class=\"aligncenter size-full wp-image-1058\" alt=\"300px-Fin_de_conexi\u00f3n_TCP.svg\" src=\"http:\/\/blog.walii.es\/wp-content\/uploads\/2014\/01\/300px-Fin_de_conexi\u00f3n_TCP.svg_.png\" width=\"300\" height=\"240\" \/><\/a><\/p>\n<h2>Campos de la cabecera TCP<\/h2>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.walii.es\/wp-content\/uploads\/2014\/01\/Screen-Shot-2014-01-23-at-1.00.07-PM.png\"><img loading=\"lazy\" class=\"aligncenter  wp-image-1057\" alt=\"Screen Shot 2014-01-23 at 1.00.07 PM\" src=\"http:\/\/blog.walii.es\/wp-content\/uploads\/2014\/01\/Screen-Shot-2014-01-23-at-1.00.07-PM.png\" width=\"478\" height=\"154\" srcset=\"https:\/\/blog.walii.es\/wp-content\/uploads\/2014\/01\/Screen-Shot-2014-01-23-at-1.00.07-PM.png 797w, https:\/\/blog.walii.es\/wp-content\/uploads\/2014\/01\/Screen-Shot-2014-01-23-at-1.00.07-PM-300x96.png 300w\" sizes=\"(max-width: 478px) 100vw, 478px\" \/><\/a><\/p>\n<ul>\n<li>Puerto origen (16 bits): Identifica el puerto emisor.<\/li>\n<li>Puerto destino (16 bits): Identifica el puerto receptor.<\/li>\n<\/ul>\n<p>Estos dos valores identifican la aplicaci\u00f3n receptora y la emisora, junto con las direcciones IP del emisor y receptor identifican de forma un\u00edvoca cada conexi\u00f3n. La combinaci\u00f3n de una direcci\u00f3n IP y un puerto es llamado\u00a0<a title=\"Socket de Internet\" href=\"http:\/\/es.wikipedia.org\/wiki\/Socket_de_Internet\">socket<\/a>. Es el par de sockets (direcci\u00f3n IP + puerto del emisor y direcci\u00f3n IP+ puerto del receptor) emisor y receptor el que especifica los dos puntos finales que un\u00edvocamente se corresponden con cada conexi\u00f3n TCP en\u00a0<a title=\"Internet\" href=\"http:\/\/es.wikipedia.org\/wiki\/Internet\">internet<\/a>.<\/p>\n<ul>\n<li>N\u00famero de secuencia (32 bits): Identifica el byte del flujo de datos enviado por el emisor TCP al receptor TCP que representa el primer byte de datos del segmento.<\/li>\n<\/ul>\n<p>Si consideramos un flujo de bytes unidireccional entre las dos aplicaciones, TCP numera cada byte con un n\u00famero de secuencia. Este n\u00famero de secuencia es de 32 bits sin signo que retorna a 0 al llegar a 2<sup>32<\/sup>\u00a0-1.<\/p>\n<p>Cuando una conexi\u00f3n est\u00e1 siendo establecida el\u00a0<a title=\"Flag\" href=\"http:\/\/es.wikipedia.org\/wiki\/Flag\">flag<\/a>\u00a0SYN se activa y el campo del n\u00famero de secuencia contiene el ISN (initial sequence number) elegido por el\u00a0<a title=\"Host\" href=\"http:\/\/es.wikipedia.org\/wiki\/Host\">host<\/a>\u00a0para esa conexi\u00f3n. El n\u00famero de secuencia del primer byte de datos ser\u00e1 el ISN+1 ya que el flag SYN consume un n\u00famero de secuencia.<\/p>\n<ul>\n<li>N\u00famero de\u00a0<a title=\"ACK\" href=\"http:\/\/es.wikipedia.org\/wiki\/ACK\">acuse de recibo<\/a>\u00a0(32 bits): Contiene el valor del siguiente n\u00famero de secuencia que el emisor del segmento espera recibir.<\/li>\n<\/ul>\n<p>Una vez que la conexi\u00f3n ha sido establecida, este n\u00famero se env\u00eda siempre y se valida con el flag ACK activado. Enviar ACKs no cuesta nada ya que el campo de acuse de recibo siempre forma parte de la cabecera, al igual que el flag ACK. TCP se puede describir como un protocolo sin asentimientos selectivos o negativos ya que el n\u00famero de asentimiento en la cabecera TCP significa que se han recibido correctamente los bytes anteriores pero no se incluye ese byte.<\/p>\n<p>No se pueden asentir partes selectivas del flujo de datos (suponiendo que no estamos usando la opci\u00f3n SACK de asentimientos selectivos). Por ejemplo si se reciben correctamente los bytes 1-1024 y el siguiente segmento contiene los bytes 2049-3072, el receptor no puede asentir este \u00faltimo segmento. Todo lo que puede enviar es un ACK con 1025 como n\u00famero de asentimiento, al igual que si llega el segmento 1025-2048 pero con un error de cheksum.<\/p>\n<ul>\n<li>Longitud de cabecera (4 bits): especifica el tama\u00f1o de la cabecera en palabras de 32 bits.<\/li>\n<\/ul>\n<p>Es requerido porque la longitud del campo \u201copciones\u201d es variable. Por lo tanto el tama\u00f1o m\u00e1ximo de la cabecera est\u00e1 limitado a 60 bytes, mientras que sin \u201copciones\u201d el tama\u00f1o normal ser\u00e1 de 20 bytes. A este campo tambi\u00e9n se le suele llamar \u201cdata offset\u201d por el hecho de que es la diferencia en bytes desde el principio del segmento hasta el comienzo de los datos.<\/p>\n<ul>\n<li>Reservado (3 bits): para uso futuro. Debe estar a 0.<\/li>\n<\/ul>\n<ul>\n<li>Flags (9 bits):<\/li>\n<\/ul>\n<dl>\n<dd>\n<ul>\n<li>NS (1 bit): ECN-nonce concealment protection. Para proteger frente a paquetes accidentales o maliciosos que se aprovechan del control de congesti\u00f3n para ganar ancho de banda de la red.<\/li>\n<li>CWR (1bit): Congestion Window Reduced. El flag se activa por el host emisor para indicar que ha recibido un segmento TCP con el flag ECE activado y ha respondido con el mecanismo de control de congesti\u00f3n.<\/li>\n<li>ECE (1 bit): Para dar indicaciones sobre congesti\u00f3n.<\/li>\n<li>URG (1 bit): Indica que el campo del puntero urgente es v\u00e1lido.<\/li>\n<li>ACK (1 bit): Indica que el campo de asentimiento es v\u00e1lido. Todos lo paquetes enviados despu\u00e9s del paquete SYN inicial deben tener activo este flag.<\/li>\n<li>PSH (1 bit): Push. El receptor debe pasar los datos a la aplicaci\u00f3n tan pronto como sea posible.<\/li>\n<li>RST (1 bit): Reset. Reinicia la conexi\u00f3n.<\/li>\n<li>SYN (1 bit): Synchronice. Sincroniza los n\u00fameros de secuencia para iniciar la conexi\u00f3n.<\/li>\n<li>FIN (1 bit): El emisor finaliza el env\u00edo de datos.<\/li>\n<\/ul>\n<\/dd>\n<\/dl>\n<ul>\n<li>Tama\u00f1o de ventana (16 bits): Tama\u00f1o de la ventana de recepci\u00f3n que especifica el n\u00famero m\u00e1ximo de bytes que pueden ser metidos en el buffer de recepci\u00f3n o dicho de otro modo, el n\u00famero m\u00e1ximo de bytes pendientes de asentimiento.<\/li>\n<\/ul>\n<ul>\n<li>Suma de verificaci\u00f3n (16 bits):\u00a0<a title=\"Suma de verificaci\u00f3n\" href=\"http:\/\/es.wikipedia.org\/wiki\/Suma_de_verificaci%C3%B3n\">Checksum<\/a>\u00a0utilizado para la comprobaci\u00f3n de errores tanto en la cabecera como en los datos.<\/li>\n<\/ul>\n<ul>\n<li>Puntero urgente (16 bits): Cantidad de bytes desde el n\u00famero de secuencia que indica el lugar donde acaban los datos urgentes.<\/li>\n<\/ul>\n<ul>\n<li>Opciones: Para poder a\u00f1adir caracter\u00edsticas no cubiertas por la cabecera fija.<\/li>\n<\/ul>\n<ul>\n<li>Relleno: Se utiliza para asegurarse que la cabecera acaba con un tama\u00f1o m\u00faltiplo de 32 bits.<\/li>\n<\/ul>\n<p>Hablando de TCP podr\u00edamos poner un ejemplo de interlocuci\u00f3n como es el caso de DHCP<\/p>\n<p><a href=\"http:\/\/blog.walii.es\/wp-content\/uploads\/2014\/01\/220px-DHCP_session_en.svg_.png\"><img loading=\"lazy\" class=\"aligncenter size-full wp-image-1059\" alt=\"220px-DHCP_session_en.svg\" src=\"http:\/\/blog.walii.es\/wp-content\/uploads\/2014\/01\/220px-DHCP_session_en.svg_.png\" width=\"220\" height=\"286\" \/><\/a><\/p>\n<p>Por ejemplo es \u00fatil tener en cuenta como se compone un paquete IP (En muchas entrevistas de trabajo pueden preguntarlo, y siempre es bueno tener un mapa a mano)<\/p>\n<p><a href=\"http:\/\/blog.walii.es\/wp-content\/uploads\/2014\/01\/imag2.gif\"><img loading=\"lazy\" class=\"aligncenter size-full wp-image-1060\" alt=\"imag2\" src=\"http:\/\/blog.walii.es\/wp-content\/uploads\/2014\/01\/imag2.gif\" width=\"362\" height=\"173\" \/><\/a><\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.walii.es\/wp-content\/uploads\/2014\/01\/Image2755.gif\"><img loading=\"lazy\" class=\"aligncenter  wp-image-1061\" alt=\"Image2755\" src=\"http:\/\/blog.walii.es\/wp-content\/uploads\/2014\/01\/Image2755.gif\" width=\"462\" height=\"58\" \/><\/a><\/p>\n<p>Y tambi\u00e9n es \u00fatil tener un listado de los diferentes estados de TCP<\/p>\n<p><a href=\"http:\/\/blog.walii.es\/wp-content\/uploads\/2014\/01\/imag32.gif\"><img loading=\"lazy\" class=\"aligncenter size-full wp-image-1062\" alt=\"imag32\" src=\"http:\/\/blog.walii.es\/wp-content\/uploads\/2014\/01\/imag32.gif\" width=\"330\" height=\"189\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>La forma mas r\u00e1pida de diferenciar entre estos tipos de Protocolos, es indicar que UDP no posee control de sesi\u00f3n, o lo que es lo mismo, que este protocolo es inseguro y se utiliza solo para los casos en cuales no nos importa si el paquete llega o se pierde por el camino. Detalle pedido &hellip;<br \/><a href=\"https:\/\/blog.walii.es\/?p=1055\" class=\"more-link pen_button pen_element_default pen_icon_arrow_double\">Seguir leyendo <span class=\"screen-reader-text\">Diferencias entre TCP y UDP<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[130],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.walii.es\/index.php?rest_route=\/wp\/v2\/posts\/1055"}],"collection":[{"href":"https:\/\/blog.walii.es\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.walii.es\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.walii.es\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.walii.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1055"}],"version-history":[{"count":2,"href":"https:\/\/blog.walii.es\/index.php?rest_route=\/wp\/v2\/posts\/1055\/revisions"}],"predecessor-version":[{"id":1069,"href":"https:\/\/blog.walii.es\/index.php?rest_route=\/wp\/v2\/posts\/1055\/revisions\/1069"}],"wp:attachment":[{"href":"https:\/\/blog.walii.es\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1055"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.walii.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1055"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.walii.es\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1055"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}