Está en la página 1de 14

Unidad 1 / Escenario 1

Lectura fundamental

Aplicaciones con énfasis en


el manejo transaccional de la
información

Contenido

1 Conceptos fundamentales de transacción

2 Creación de un socket

3 Supresión de un socket

4 Enlace de un socket

5 Primitivas de un socket desde el punto de vista del server

6 Primitivas de un socket desde el punto de vista del Cliente

7 Ejemplo completo de un servidor

8 Ejemplo de un cliente

Palabras claves
socket, transacción, programación, creación, supresión.
1. Conceptos fundamentales de transacción.

1.1 ¿Qué es una transacción?

Se define como transacción, al conjunto de instrucciones de computador que se deben realizar


para ejecutar una operación en tiempo real, por lo general sobre una base de datos.

Un ejemplo de una transacción es aquella operación que realiza un cliente de un banco cuando
realiza un retiro, o una consulta a través de un cajero automático.

1.2 Fundamentos de sockets

¿Qué es un socket?

Para poder comprender la funcionalidad de una transacción, primero se debe entender el con-
cepto de socket y su funcionamiento.

Uno de los grandes aportes de la Universidad de Berkeley a las operaciones computacionales


en línea, fue la definición del socket. Para entender este concepto de una manera sencilla es
haciendo un paralelo con una conversación por teléfono o una conversación usando un chat,
donde cada uno de los participantes de dicho evento está en lugares diferentes.

Se denomina dominio de un socket al conjunto de sockets con los cuales se estable comunica-
ción. Los protocolos de comunicación usados en los sockets son: TCP, UDP, IP. Algunos de los
dominios son:

 AF_NS /* Protocolos propiedad de XEROX */

 AF_APPLETALK /* De Apple */

 AF_SNA /* IBM */

 PF_INET /* Protocolo para IPV4 */

 PF_INET6 /* Protocolo para IPV6 */

 PF_LOCAL /* Para comunicaciones locales */

En resumen, un socket es un punto de comunicación a través del cual un proceso puede enviar o
recibir información. Es lo que comúnmente se conoce como comunicación cliente servidor.

POLITÉCNICO GRANCOLOMBIANO 2
1.3 Tipos de sockets para comunicaciones

El tipo de un socket define un conjunto de propiedades para la comunicación en la cual esté


involucrado el socket.

1.3.1 Propiedades de una comunicación.

A. Fiabilidad. Ningún dato se pierde en el proceso de transmisión.

B. Conservación del orden de los datos. Los datos en el orden en que se envían.

C. No duplicación de datos. Al destino solo debe llegar una copia del dato enviado.

D. Comunicación en modo conectado. Primero es estable una conversación entre el emisor


y el receptor. Así cuando se envía un mensaje, éste ya tiene el destino predefinido.

E. Conservación de los límites. En el destino se encuentra el límite del mensaje.

F. Mensajes urgentes. Es una propiedad utilizada para enviar los datos de un mensaje, por
fuera del flujo normal. Se les denomina como “out of band”.

Algunos tipos son:

a. SOCK_DGRAM /* Para mensajes en modo asincrónico, el cual envía datagramas de


tamaño fijo y limitado, usa el protocolo UDP */

b. SOCK_STREAM. /* Se usa para comunicaciones bidireccionales, en modo conecta-


do, es confiable. Usa el protocolo TCP. La transmisión de datos se hace de manera
ordenada */

c. SOCK_RAW. /* Se usa con protocolos de red más bajos como IP. Es un tipo de
uso reservado para súper usuarios (root) */

d. SOCK_SEQPACKET. /* Se usan en comunicaciones bidireccionales, altamente con-


fiable, pada datagramas de longitud fija y la transmisión de datos se hace de manera
ordenada */

Los tipos más usados, son los tipos “a“ y “b”

POLITÉCNICO GRANCOLOMBIANO 3
2. Creación de un socket
Para crear un socket se debe usar la primitiva socket. Ésta primitiva, contiene las características
del socket a saber:

A. El tipo, el dominio y el protocolo.

B. El estado del socket (conectado o no).

C. La dirección del socket conectado en el evento que sea de este tipo.

D. Punteros a los datos (tanto en emisión como en recepción).

E. Protocolos de red y de transporte.

F. Dirección de red.

G. Número de puerto.

El valor devuelto es un entero (>= cuando el socket es creado correctamente ò < 0 si falló el
proceso de creación).

• Ejemplo:
Tabla 1. Creación de un socket

Int socket (dominio, tipo, protocolo)


{ int dominio; */ PF_INET */
Int tipo; */ SOCK_STREAM */
Int protocolo */ 0: protocolo por defecto */
}

#include <sys/types.h>
#include <sys/socket.h>
...
int transa;
...
if ((transa=socket(PF_INET,SOCK_STREAM,0))<0)
{
xxerror(“socket”); /* xxerror, es una librería que crea el programador para reportar errores*/
exit(0);
}

Fuente: Rojas, Alexis (2017)

POLITÉCNICO GRANCOLOMBIANO 4
3. Supresión de un socket
Se define como supresión de un socket, al proceso llevado a cabo para cerrarlo, es decir, cuando
ya no hay ninguna operación que posea un descriptor para accederlo. En este punto es donde se
liberan las diferentes tablas de control que utiliza el socket en la comunicación. En otras pala-
bras, es el último paso que se hace para cerrar una transacción.

La primitiva usada es close().


Tabla 2. Supresión de un socket
#include <sys/types.h>
#include <unistd>
...
int transa;
...
if ( close (transa) <0 )
{
xxerror(“socket”);
exit(0);
}
Fuente: Rojas, Alexis (2017)

4. Enlace de un socket

Figura 1. Enlace de una transacción


Fuente: Politécnico Grancolombiano. (2017)

POLITÉCNICO GRANCOLOMBIANO 5
El enlace de un socket se conoce como la sincronización de un computador remoto, por lo gene-
ral el computador cliente y un servidor local o viceversa, como se aprecia en la figura 1. El enlace
se estable una vez el socket haya sido credo.

Figura 2. Diagrama de comunicación de un socket TCP


Fuente: Huércano Ruíz, Federico; Villar Cueli, José. (2014)

5. Primitivas de un socket desde el punto de vista del server


Los puertos utilizados por los computadores que actúan como servidores, deben tener un puer-
to asociado para el socket, porque el cliente necesita conocer el puerto en el cual está disponi-
ble el servicio para poder establecer la conexión con el servidor.

Los puertos más usados son:

• Puerto 21, protocolo TCP: Se usa para transferir archivos.

• Puerto 22, protocolo TCP: Se usa para establecer una Shell de conexión segura SSH.

• Puerto 25, protocolo TCP: SMTP, Se usa para correo electrónico.

• Puerto 53, protocolo TCP: Se usa para transferir archivos.

• Puerto 80, protocolo TCP: Se usa para transferir archivos.

• Puerto 443, protocolo UDP: Se usa para los servidores de nombres.

POLITÉCNICO GRANCOLOMBIANO 6
5.1 Primitiva bind

Un socket recién creado, no es accesible sino por los procesos que conocen su descriptor. La
primitiva bind, permite con una sola operación, darle nombre al socket del servidor, asociarle una
dirección IP y un puerto.

• Ejemplo:
Tabla 3. Primitiva bind

int bind (sock, p_direccion, lg) /* Deveulve 0, si ce creó correctamen o -1 si falló */


{ int sock; /* Descriptor del socket creado con anterioridad */
Struct sockaddr_in *p_direccion; /* punter de mermoria a la dirección */
int lg; /* longitud de la dirección */
}

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
...
int bind (int bind(int sock, struct sockaddr *p_direccion, int lg); /* socaddr require de sockaddr_in */

bind devuelve

Incluyendo SOCADDR_IN, quedaría así:


...
int transa;
struct sockaddr_in dir;
...
dir.sin_familia=PF_INET; */ sin_familia: protocolo de comunicación del socket */
dir.sin_puerto=htons(puerto); /* puerto al que se asocia el socket */
dir.sin_direc.transa_addr=htonl(INADDR_ANY); /* INADDR_ANY, es para que escuche
todas las direcciones (127.0.0.1,
192.168.101.xx, etces */
if (bind(transa, (struct sockaddr *)&dir,sizeof(struct sockaddr_in))!=0)
{
xxerror(“bind”); /* xxerror, es una librería que crea el programador para reportar errores*/
exit(0);
}
Fuente: Rojas, Alexis (2017)

POLITÉCNICO GRANCOLOMBIANO 7
5.2 Primitiva listen

Una vez establecida la conexión, el servidor procede a activar la primitiva de escucha, para lo cual
se usa la función Listen(), con los parámetros siguientes:
• Descriptor de escucha del socket.
• Tamaño de la cola de peticiones para aceptar.
• Ejemplo:
Tabla 4. Primitiva listen
...
int transa;
...
if (listen(transa, 5)!=0) /* 5 es el tamaño de la cola de mensajes */
{
xxerror(“listen”);
exit(0);
}
Fuente: Rojas, Alexis (2017)

5.3 Primitiva accept

En el momento en el que llega una petición, la función accept() se activa y recibe la petición. Si la
petición es aceptada devuelve 0, de lo contrario devuelve -1.

Parámetros:
• Nombre del socket asociado a la petición.
• Estructura que debe contener el puerto y la dirección del cliente de donde viene la petición.
• Tamaño a la estructura del socket.

Tabla 5. Primitiva accept


int transa, transa_conectado, tamanno;
struct sockaddr_in dir;
...
tamann=sizeof(struct sockaddr_in);
if ((transa_conectado=accept(transa, (struct
sockaddr *)&dir, &tamann))<0)
{
xxerror(“accept”);
exit(0);
}
Fuente: Rojas, Alexis (2017)

De aquí en adelante, el cliente y el servidor están conectados para poder intercambiar mensajes a
través de las primitivas Read/Write (dentro del socket se conocen como send() y recv()).

POLITÉCNICO GRANCOLOMBIANO 8
6. Primitivas de un socket desde el punto de vista del Cliente

El código en el cliente consta de las siguientes etapas:

6.1 Primitivas socket connect.

El cliente también tiene que crear un socket usando la función socket(), con sus respectivos
parámetros:

• Nombre del descriptor que utilizará para establecer la conexión.

• Estructura con el puerto y la dirección ip, para conectarse.

• Longitud de la estructura.

Tabla 6. Primitivas socket connect.


...
int transa;
struct sockaddr_in dir;
...
dir.sin_familia=PF_INET;
dir.sin_puerto=htons(13);
if (inet_aton(“192.168.101.xx”,&dir.sin_addr)==0)
{
xxerror(“inet_aton”);
exit(0);
}
if (connect(transa, (struct sockaddr *)&dir, sizeof(struct sockaddr_in))<0)
{
if (errno==ECONNREFUSED) /* Servicio no está disponible */
...
else /* segundo error */
{
xxerror(“connect”);
exit(0);
}
Fuente: Rojas, Alexis (2017)

POLITÉCNICO GRANCOLOMBIANO 9
6.2 Primitiva write

El cliente es quien primero escribe al servidor y lo hace con la función write(). Devuelve 0 si
la escritura fue exitosa o -1 de otra manera. El servidor está escuchando y procede a leer. (Ver
figura 2). Ejemplo:
Tabla 7. Primitiva write

#define tamanno 200
...
int transa, n;
char buffer[tamanno];
...
if ((n=write(transa, buffer, tamanno))<0)
{
xxerror(“write”);
exit(0);
}
Fuente: Rojas, Alexis (2017)

6.3 Primitiva read


El servidor lee, analiza, resuelve la transacción y procede a escribirle al cliente quien está atento
a leer la respuesta del servidor y lo hace con la función read(). Devuelve 0 si la lectura fue exito-
sa, o -1 de otra manera. Ejemplo:

Tabla 8. Primitiva read


..
#define tamanno 200
...
int transa, n;
char buffer[tamanno];
...
if ((n=read(transa, buffer, tamanno))<0)
{
xxerror(“read”);
exit(0);
}

Fuente: Rojas, Alexis (2017)

POLITÉCNICO GRANCOLOMBIANO 10
7. Ejemplo completo de un servidor
Tabla 9. Ejemplo completo de un servidor

Fuente: Huércano Ruíz, Federico; Villar Cueli, José. (2014). Página 161

POLITÉCNICO GRANCOLOMBIANO 11
8. Ejemplo de un cliente.
Tabla 10. Ejemplo de un cliente.

Fuente: Huércano Ruíz, Federico; Villar Cueli, José. (2014). Página 162

POLITÉCNICO GRANCOLOMBIANO 12
Referencias
Rifflet, J., 1992. Comunicaciones en UNIX. Madrid: McGraw-Hil. Capítulo 12. Pags 234 – 271.
Recuperado de: http://eds.b.ebscohost.com.loginbiblio.poligran.edu.co:2048/eds/detail/detai-
l?vid=7&sid=ced1619f-3931-4b9a-b700-d9e0152b1c2b%40sessionmgr102&bdata=Jmxhbmc-
9ZXMmc2l0ZT1lZHMtbGl2ZQ%3d%3d#AN=edseul.3000144295453&db=edseul

JAMES TCP-IP networking: architecture, administration, and programming. Capítulo 19. Página
209 – 226. Recuperado de: http://eds.a.ebscohost.com.loginbiblio.poligran.edu.co:2048/eds/
detail/detail?vid=3&sid=fa077792-35e9-4e28-b5c1-f34da0599e97%40sessionmgr4006&hi-
d=4113&bdata=Jmxhbmc9ZXMmc2l0ZT1lZHMtbGl2ZQ%3d%3d#AN=EDSBVB.BV021925626&d-
b=edsbvb

Huércano Ruíz, Federico; Villar Cueli, José. (2014). Desarrollo de componentes software para
servicios de comunicaciones: UF1288. EDITORIAL IC Editorial. FECHA. July 2014. Páginas 148 –
166. Recuperado de: http://site.ebrary.com.loginbiblio.poligran.edu.co:2048/lib/bibliopoligransp/
reader.action?docID=11162023&ppg=130

POLITÉCNICO GRANCOLOMBIANO 13
INFORMACIÓN TÉCNICA

Módulo: Persistencia y Datos Transaccionales

Unidad 1: Sistemas de información transaccionales con


características ACID
Escenario 1: Aplicaciones con énfasis en el manejo
transaccional de la información

Autor: Alexis Rojas Cordero

Asesor Pedagógico: Heidy Moncada


Diseñador Gráfico: Santiago Rodriguez
Asistente: Ana Milena Raga

Este material pertenece al Politécnico Grancolombiano.


Prohibida su reproducción total o parcial.

POLITÉCNICO GRANCOLOMBIANO 14

También podría gustarte