Bienvenidos sean a este post, hoy abandonaremos nuestro proyecto por un momento y hablaremos sobre algunos conceptos sobre lo que es networking o redes antes de la implementacion del servidor.
Antes de continuar con nuestro juego vamos a hablar sobre algunos conceptos basicos cuando trabajemos con las redes o el networking:
- Buffer, es una ubicacion de la memoria para leer y escribir datos tanto recibidos como para enviar de paquetes/datagramas sobre la red.
- Paquetes, es la porcion de informacion que se envia por la red por medio de TCP
- Datagramas, idem al anterior pero sobre UDP
- Protocolo de control de transmision (TCP), es un metodo de conexion entre dispositivos de forma segura ya que posee un chequeo de que la informacion fue enviada correctamente y solamente lo hara si ambos extremos estan conectados
- Protocolo de datagrama del usuario (UDP), este metodo es menos seguro que el anterior pero es mas rapido porque no tiene un protocolo de conexion y verificacion, por lo tanto toma el dato y lo envia por la red sin necesidad de que haya alguien para recibirlo
- Socket, es un extremo de la sesion de conexion tanto de TCP como de UDP, podemos tener multiples de estos sobre un puerto y en este pasara la informacion
- Direccion IP, es la direccion de identificacion de nuestro equipo sobre la red, si bien no siempre tendremos la misma direccion sobre la red esta es unica para cada dispositivo pero no es fija para cada una, despues hablaremos de esto
- Puerto, es el medio de comunicacion para nuestros dispositivos, este se comparte para que los sockets se puedan conectar a este y manipular la informacion entre los distintos dispositivos
- Red cliente/servidor, es una red donde tendremos un equipo central (servidor) que recibira las conexiones de los clientes y pasara la informacion que reciba tanto para el mismo como para los clientes
Primero hablemos sobre las direcciones IP, es la direccion que utilizamos cuando nos conectamos a una red, por ejemplo: 192.168.100.1, y con esto representaremos a nuestro equipo en la red por lo tanto para conectarnos debemos usar esta direccion pero no siempre tenemos la misma direccion asignada, esto ultimo se aplica a grandes redes como puede ser una empresa o internet pero en casas en general es siempre la misma IP, el otro dato que tambien usaremos para la conexion es el puerto y este es un valor que va desde 0 a 65535, si bien hay algunos puertos reservados a partir de un valor ya son genericos y pueden ser usados por cualquiera, les dejo algunos establecidos:
- 21, para conexiones ftp (File Transfer Protocol)
- 22, para conexiones ssh (Secure SHell)
- 23, para conexiones Telnet
- 80, para conexiones http (HyperText Transfer Protocol)
- 443, para conexiones https (HyperText Transfer Protocol Secure)
- 666, para conexiones de red en el DOOM original
- 1433, para conexiones sql (Structured Query Language)
- 3306, para conexiones de MySQL / MariaDB (Bases de datos)
Y estos son algunos de los reservados aunque esto no significa que no puedan usarse o modificarse, por ejemplo para evitar ataques en el port ssh se recomienda modificarlo por otro mas elevado y menos estandar, pero es recomendable evitarlos para evitar conflictos con los programas que usualmente lo usan y por lo general se tienden a usar los valores de 23000 en adelante pero siempre queda a criterio de cada uno, si quieren saber un poco mas les recomiendo visitar la siguiente pagina:
https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
En esta pagina encontraran una lista detallada de cada puerto y para que se usa en terminos generales pero recuerden que hasta el 6000 aproximadamente son numeros para aplicaciones conocidas y de ahi en adelante no son tan estandares pero si pueden ser usadas por programas mas conocidos, por ultimo hablaremos de dos tipos de conexiones que podemos tener entre dos dispositivos.
No nos vamos a meter con las topologias porque seria complicar algo que a nosotros no nos afecta en si porque la red ya va a estar creada y funcionando pero si debemos saber diferenciar entre una conexion peer-to-peer o puerto-a-puerto y entre una de cliente-servidor (como la que usaremos en el juego), el primer tipo de conexion se establece entre dos dispositivos y por lo general es de tipo TCP donde estableceremos que uno se conecte con el otro y a partir de ahi enviaremos los paquetes de informacion entre ambos, se puede usar UDP pero al ser dos dispositivos es mas seguro hacerlo con el primer protocolo dado que no vamos a tener mucha diferencia de performance, su gran ventaja es la estabilidad y performance pero su mayor desventaja es que solo estos dispositivos se comunican y no podemos agregar otro.
El otro tipo de conexion establece a uno de los dispositivos como servidor y sera el encargado de recibir las conexiones del resto de los dispositivos que seran cliente de este, el servidor recibira y enviara informacion desde y al cliente que lo solicite, de esta forma los clientes tambien se comunican entre ellos pero el flujo de informacion lo hara el servidor, en este tipo de conexion podemos usar tanto TCP como UDP con sus respectivas ventajas y desventajas, la primera va a ser la performance donde TCP sera mas lento que UDP por lo tanto deberemos evaluar en base a que accion como debera ser la conexion, si es solo texto (como un chat por ejemplo) seria recomendable usar TCP pero a la hora del juego sera mas recomendable UDP porque al no tener tantas verificaciones se procesa mas rapida pero recuerden que es menos segura y nunca tendremos una certificacion del 100% que la informacion llegue, por este motivo para nuestro proyecto crearemos un servidor que se encargara de recibir las conexiones de nuestro clientes y los hara jugar al mismo tiempo pero de esto hablaremos en el proximo post.
Por ultimo aclarare un tema mas sobre las direcciones IP, hasta el momento de crear este curso existen dos versiones para las direcciones ip (v4 y v6), la direccion que pase como ejemplo es una direccion IP v4 pero en varios paises ya se esta utilizando la v6, la cual es un poco diferente les dejo un ejemplo:
2001:0db8:85a3:0000:0000:8a2e:0370:7334
Si en el futuro desaparece la v4 y solo queda la v6 hare todas las modificaciones que sean necesarias pero por un tema de practicidad seguire trabajando con la v4, con esto aclarado ya tenemos la base de lo que aplicaremos a nuestro juego a partir del proximo post.
En resumen, hoy hemos hablado sobre que son las redes o networking, hemos vistos algunas de las denominaciones mas estandar dentro de las redes, cuales son las principales diferencias entre la direccion IP, el socket, el puerto y el tipo de conexion, hemos visto cuales son las principales diferencias entre TCP y UDP, tambien hemos visto muy superficialmente el porque no podemos usar ciertos valores de puertos y a partir de cual es seguro hacerlo, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.00
