jueves, 2 de julio de 2015

Números de puerto

Números de puerto bien conocidos usados por TCP y UDP.

Puerto/protocoloDescripción
n/d / GREGRE (protocolo IP 47) Enrutamiento y acceso remoto
n/d / ESPIPSec ESP (protocolo IP 50) Enrutamiento y acceso remoto
n/d / AHIPSec AH (protocolo IP 51) Enrutamiento y acceso remoto
1/tcpMultiplexor TCP
7/tcpProtocolo Echo (Eco) Responde con eco a llamadas remotas
9/tcpProtocolo Discard Elimina cualquier dato que recibe
13/tcpProtocolo Daytime Fecha y hora actuales
17/tcpQuote of the Day (Cita del Día)
19/tcpProtocolo Chargen Generador de caracteres
20/tcpFTP File Transfer Protocol (Protocolo de Transferencia de Ficheros) - datos
21/tcpFTP File Transfer Protocol (Protocolo de Transferencia de Ficheros) - control
22/tcpSSH, scp, SFTP
23/tcpTelnet manejo remoto de equipo, inseguro
25/tcpSMTP Simple Mail Transfer Protocol (Protocolo Simple de Transferencia de Correo)
37/tcptime (comando)
43/betocpnicname
53/udpDNS Domain Name System (Sistema de Nombres de Dominio), por ejemplo BIND9
53/tcp and udpFaceTime
67/udpBOOTP BootStrap Protocol (Server), también usado por DHCP
68/udpBOOTP BootStrap Protocol (Client), también usado por DHCP
69/udpTFTP Trivial File Transfer Protocol (Protocolo Trivial de Transferencia de Ficheros)
70/tcpGopher
79/tcpFinger
80/tcpHTTP HyperText Transfer Protocol (Protocolo de Transferencia de HiperTexto) (WWW)
88/tcpKerberos Agente de autenticación
110/tcpPOP3 Post Office Protocol (E-mail)
111/tcpsunrpc
113/tcpident (auth) antiguo sistema de identificación
119/tcpNNTP usado en los grupos de noticias de usenet
123/udpNTP Protocolo de sincronización de tiempo
135/tcpepmap
137/tcpNetBIOS Servicio de nombres
138/tcpNetBIOS Servicio de envío de datagramas
139/tcpNetBIOS Servicio de sesiones
143/tcpIMAP4 Internet Message Access Protocol (E-mail)
161/udpSNMP Simple Network Management Protocol
162/tcpSNMP-trap
177/tcpXDMCP Protocolo de gestión de displays en X11
389/tcpLDAP Protocolo de acceso ligero a Bases de Datos
443/tcpHTTPS/SSL usado para la transferencia segura de páginas web
445/tcpMicrosoft-DS (Active Directory, compartición en Windows, gusano Sasser, Agobot) o también es usado por Microsoft-DS compartición de ficheros
465/tcpSMTP Sobre SSL. Utilizado para el envío de correo electrónico (E-mail)
500/udpIPSec ISAKMP, Autoridad de Seguridad Local
512/tcpexec
513/tcpRlogin
514/udpsyslog usado para logs del sistema
520/udpRIP Routing Information Protocol (Protocolo de Información de Enrutamiento)
591/tcpFileMaker 6.0 (alternativa para HTTP, ver puerto 80)
631/tcpCUPS sistema de impresión de Unix
666/tcpidentificación de Doom para jugar sobre TCP
690/tcpVATP (Velneo Application Transfer Protocol) Protocolo de comunicaciones de Velneo
993/tcpIMAP4 sobre SSL (E-mail)
995/tcpPOP3 sobre SSL (E-mail)
1080/tcpSOCKS Proxy
1337/tcpsuele usarse en máquinas comprometidas o infectadas
1352/tcpIBM Lotus Notes/Domino RCP
1433/tcpMicrosoft-SQL-Server
1434/tcpMicrosoft-SQL-Monitor
1494/tcpCitrix MetaFrame Cliente ICA
1512/tcpWINS Windows Internet Naming Service
1521/tcpOracle listener por defecto
1701/udpEnrutamiento y Acceso Remoto para VPN con L2TP.
1720/udpH.323
1723/tcpEnrutamiento y Acceso Remoto para VPN con PPTP.
1761/tcpNovell Zenworks Remote Control utility
1863/tcpMSN Messenger
1935/tcpFMS Flash Media Server
2049/tcpNFS Archivos del sistema de red
2082/tcpcPanel puerto por defecto
2083/tcpCPanel puerto por defecto sobre SSL
2086/tcpWeb Host Manager puerto por defecto
2427/udpCisco MGCP
3030/tcp and udpNetPanzer
3074/tcpXbox Live
3074/udpXbox Live
3128/tcpHTTP usado por web caches y por defecto en Squid cache
3128/tcpNDL-AAS
3306/tcpMySQL sistema de gestión de bases de datos
3389/tcpRDP (Remote Desktop Protocol) Terminal Server
3396/tcpNovell agente de impresión NDPS
3690/tcpSubversion (sistema de control de versiones)
4662/tcpeMule (aplicación de compartición de ficheros)
4672/udpeMule (aplicación de compartición de ficheros)
4899/tcpRAdmin (Remote Administrator), herramienta de administración remota (normalmente troyanos)
5000/tcpUniversal plug-and-play
5060/udpSession Initiation Protocol (SIP)
5190/tcpAOL y AOL Instant Messenger
5222/tcpJabber/XMPP conexión de cliente
5223/tcpJabber/XMPP puerto por defecto para conexiones de cliente SSL
5269/tcpJabber/XMPP conexión de servidor
5432/tcpPostgreSQL sistema de gestión de bases de datos
5517/tcpSetiqueue proyecto SETI@Home
5631/tcpPC-Anywhere protocolo de escritorio remoto
5632/udpPC-Anywhere protocolo de escritorio remoto
5400/tcpVNC protocolo de escritorio remoto (usado sobre HTTP)
5500/tcpVNC protocolo de escritorio remoto (usado sobre HTTP)
5600/tcpVNC protocolo de escritorio remoto (usado sobre HTTP)
5700/tcpVNC protocolo de escritorio remoto (usado sobre HTTP)
5800/tcpVNC protocolo de escritorio remoto (usado sobre HTTP)
5900/tcpVNC protocolo de escritorio remoto (conexión normal)
6000/tcpX11 usado para X-windows
6112/udpBlizzard
6129/tcpDameware Software conexión remota
6346/tcpGnutella compartición de ficheros (Limewire, etc.)
6347/udpGnutella
6348/udpGnutella
6349/udpGnutella
6350/udpGnutella
6355/udpGnutella
6667/tcpIRC IRCU Internet Relay Chat
6881/tcpBitTorrent puerto por defecto
6969/tcpBitTorrent puerto de tracker
7100/tcpServidor de Fuentes X11
7100/udpServidor de Fuentes X11
8000/tcpiRDMI por lo general, usado erróneamente en sustitución de 8080. También utilizado en el servidor de streaming ShoutCast.
8080/tcpHTTP HTTP-ALT ver puerto 80. Tomcat lo usa como puerto por defecto.
8118/tcpprivoxy
9009/tcpPichat peer-to-peer chat server
9898/tcpGusano Dabber (troyano/virus)
10000/tcpWebmin (Administración remota web)
19226/tcpPanda Security Puerto de comunicaciones de Panda Agent.
12345/tcpNetBus en:NetBus (troyano/virus)
25565/tcpMinecraft Puerto por defecto usado por servidores del juego.
31337/tcpBack Orifice herramienta de administración remota (por lo general troyanos)
45003/tcpCalivent herramienta de administración remota SSH con análisis de paquetes.                          






Transmisión de vídeo y voz

UDP es generalmente el protocolo usado en la transmisión de vídeo y voz a través de una red. Esto es porque no hay tiempo para enviar de nuevo paquetes perdidos cuando se está escuchando a alguien o viendo un vídeo en tiempo real.
Ya que tanto TCP como UDP circulan por la misma red, en muchos casos ocurre que el aumento del tráfico UDP daña el correcto funcionamiento de las aplicaciones TCP. Por defecto, TCP pasa a un segundo lugar para dejar a los datos en tiempo real usar la mayor parte del ancho de banda. El problema es que ambos son importantes para la mayor parte de las aplicaciones, por lo que encontrar el equilibrio entre ambos es crucial.
Todo este tipo de protocolos son usados en telemática.


Comparativa entre UDP y TCP (Transmission Control Protocol)

  • UDP: proporciona un nivel de transporte no fiable de datagramas, ya que apenas añade la información necesaria para la comunicación extremo a extremo al paquete que envía al nivel inferior. Lo utilizan aplicaciones como NFS (Network File System) y RCP (comando para copiar ficheros entre ordenadores remotos), pero sobre todo se emplea en tareas de control y en la transmisión de audio y vídeo a través de una red. No introduce retardos para establecer una conexión, no mantiene estado de conexión alguno y no realiza seguimiento de estos parámetros. Así, un servidor dedicado a una aplicación particular puede soportar más clientes activos cuando la aplicación corre sobre UDP en lugar de sobre TCP.
  • TCP: es el protocolo que proporciona un transporte fiable de flujo de bits entre aplicaciones. Está pensado para poder enviar grandes cantidades de información de forma fiable, liberando al programador de la dificultad de gestionar la fiabilidad de la conexión (retransmisiones, pérdida de paquetes, orden en el que llegan los paquetes, duplicados de paquetes...) que gestiona el propio protocolo. Pero la complejidad de la gestión de la fiabilidad tiene un coste en eficiencia, ya que para llevar a cabo las gestiones anteriores se tiene que añadir bastante información a los paquetes que enviar. Debido a que los paquetes para enviar tienen un tamaño máximo, cuanta más información añada el protocolo para su gestión, menos información que proviene de la aplicación podrá contener ese paquete (el segmento TCP tiene una sobrecarga de 20 bytes en cada segmento, mientras que UDP solo añade 8 bytes). Por eso, cuando es más importante la velocidad que la fiabilidad, se utiliza UDP. En cambio, TCP asegura la recepción en destino de la información para transmitir.







Código de ejemplo (Python 3.x)

El siguiente ejemplo muestra cómo usar el protocolo UDP para una comunicación cliente/servidor:

Servidor:
import socketserver
print("Servidor iniciado...")
class MyUDPHandler(socketserver.BaseRequestHandler):
    def handle(self):
        data = self.request[0].strip()
        socket = self.request[1]
        print("{0} Ha escrito:".format(self.client_address[0]))
        print(data)
        socket.sendto(data.upper(), self.client_address)
if __name__ == "__main__":
    HOST, PORT = "localhost", 9999
    server = socketserver.UDPServer((HOST, PORT), MyUDPHandler)
    server.serve_forever()
Cliente (Cambia "localhost" por la dirección IP del servidor.):
import socket
import sys
print("Cliente iniciado...")
HOST, PORT = "localhost", 9999
data = " ".join(sys.argv[1:])

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

sock.sendto(bytes(data + "\n","utf8"), (HOST, PORT))
received = sock.recv(1024)

print("Enviado: {0}".format(data))
print("Recibido: {0}".format(received))

Código de ejemplo (C)[editar]

El siguiente ejemplo muestra cómo usar el protocolo UDP para una comunicación cliente/servidor:

Servidor:
#include <winsock.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")

const int BufLen = 1024;

int main()
{
   WSADATA wsaData;
   SOCKET RecvSocket;
   sockaddr_in RecvAddr;
   int Puerto = 2345;
   char RecvBuf[BufLen];
   sockaddr_in SenderAddr;
   int SenderAddrSize = sizeof(SenderAddr);
   WSAStartup(MAKEWORD(2,2), &wsaData);
   RecvSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
   RecvAddr.sin_family = AF_INET;
   RecvAddr.sin_port = htons(Puerto);
   RecvAddr.sin_addr.s_addr = INADDR_ANY;
   bind(RecvSocket, (SOCKADDR *) &RecvAddr, sizeof(RecvAddr));
   recvfrom(RecvSocket,RecvBuf, BufLen,0,(SOCKADDR *)&SenderAddr,&SenderAddrSize);
 printf("%s\n",RecvBuf);
   closesocket(RecvSocket);
   WSACleanup();
}
Cliente (Cambia "127.0.0.1" por la dirección IP del servidor):
#include <winsock.h>
#pragma comment(lib,"ws2_32.lib")

int main()
{
 WSADATA wsaData;
   SOCKET SendSocket;
   sockaddr_in RecvAddr;
 int Puerto = 2345;
   char ip[] = "127.0.0.1";
   char SendBuf[] = "Hola!!!!";
   WSAStartup(MAKEWORD(2,2), &wsaData);
   SendSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
   RecvAddr.sin_family = AF_INET;
   RecvAddr.sin_port = htons(Puerto);
   RecvAddr.sin_addr.s_addr = inet_addr(ip);
   sendto(SendSocket,SendBuf,strlen(SendBuf)+1,0,(SOCKADDR *) &RecvAddr,sizeof(RecvAddr));
   WSACleanup();
}

Código de ejemplo (Java)

El siguiente ejemplo muestra cómo usar el protocolo UDP para una comunicación cliente/servidor:

Servidor:
public static void main(String[] args) {

  try {
   System.out.println("server creado........");
   // 1. crear el servidor..
   DatagramSocket socket = new DatagramSocket(45000);

   // 2. recibir mensaje desde el cliente...

   // 2.1 crear el paquete donde se recibe el mensaje.
   byte[] buffer = new byte[1024];
   DatagramPacket paqueteCliente = new DatagramPacket(buffer, 1024);
   // 2.2 recibir el paquete. operacion bloqueante.
   System.out.println("socket esperando....");
   socket.receive(paqueteCliente);

   // 2.3 leer el paquete como string...
   String msj = new String(paqueteCliente.getData());

   System.out.println("desde "
     + paqueteCliente.getAddress().getHostAddress()
     + " desde el puerto " + paqueteCliente.getPort()
     + " se recibio:" + msj);

   // 3. enviar respuesta..
   String resp = new Date().toString();// la hora como respuesta.
   // 3.1 crear datagrama de envio.
   // direccion destino..
   InetAddress addr = paqueteCliente.getAddress();// la misma del
            // cliente.
   int port = paqueteCliente.getPort();
   // el datagrama contiene la información del destino.
   DatagramPacket paqueteEnvio = new DatagramPacket(resp.getBytes(),
     resp.length(), addr, port);
   System.out.println("enviando:"+new String(paqueteEnvio.getData()));
   // 3.2 enviar paquete...
   socket.send(paqueteEnvio);
   
   //4. cerrar el socket...
   socket.close();

  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

 }
Cliente:
public static void main(String[] args) {
  try {

   // 1. crear el socket por donde se enviara la peticion y se recibira
   // la respuesta..
   DatagramSocket socket = new DatagramSocket(32000);

   // 2. crear datagrama para enviar la info. el datagrama contiene
   // toda la info necesaria para que llegue el msj
   String msj = "Hola Server....."; // msj a enviar.
   String ip = "127.0.0.1";
   int port = 45000;
   // 2.1 crear datagrama
   DatagramPacket paqueteEnvio = new DatagramPacket(msj.getBytes(),
     msj.length(), InetAddress.getByName(ip), port);
   // 2.2 enviar paquete.
   socket.send(paqueteEnvio);

   // 3. recibir respuesta...

   // 3.1 crear datagrama de recepcion.
   byte[] resp = new byte[1024];
   DatagramPacket paqueteRecibido = new DatagramPacket(resp,
     resp.length);

   // 3.2 recibir paquete.
   socket.receive(paqueteRecibido);

   // 4. mostrar info...
   System.out.println("Server respondio desde "
     + paqueteRecibido.getAddress().getHostAddress()
     + " por el puerto " + paqueteRecibido.getPort()
     + " se recibio:" + new String(paqueteRecibido.getData()));

   // 5. cerrar
   socket.close();

  } catch (IOException e) {
   e.printStackTrace();
  }





Principales características

Las características principales de este protocolo son:
1. Trabaja sin conexión, es decir que no emplea ninguna sincronización entre el origen y el destino.
2. Trabaja con paquetes o datagramas enteros, no con bytes individuales como TCP. Una aplicación que emplea el protocolo UDP intercambia información en forma de bloques de bytes, de forma que por cada bloque de bytes enviado de la capa de aplicación a la capa de transporte, se envía un paquete UDP.
3. No es fiable. No emplea control del flujo ni ordena los paquetes.
4. Su gran ventaja es que provoca poca carga adicional en la red ya que es sencillo y emplea cabeceras muy simples.
5. Un paquete UDP puede ser fragmentado por el protocolo IP para ser enviado fragmentado en varios paquetes IP si resulta necesario.
6. Puesto que no hay conexión, un paquete UDP admite utilizar como dirección IP de destino la dirección de broadcast o de multicast de IP. Esto permite enviar un mismo paquete a varios destinos.





Uso en aplicaciones

La mayoría de las aplicaciones claves de Internet utilizan el protocolo UDP, incluyendo: el Sistema de Nombres de Dominio (DNS), donde las consultas deben ser rápidas y solo contaran de una sola solicitud, luego de un paquete único de respuesta, el Protocolo de Administración de Red (SNMP), el Protocolo de Información de Enrutamiento (RIP) y el Protocolo de Configuración dinámica de host(DHCP).