Download - Tarea_01
Martínez Venegas Mario Francisco Puerto, Socket, Cliente/Servidor
Tarea # 01
1. Buscar el comando para ver los puertos activos en el equipo, ejecutar en consola en maquina
conectada a Internet, y de los números mostrados decir en que clasificación están de la IANA.
El comando para verificar el estado de las conexiones en nuestro ordenador es netstat. El
comandos anterior sin ningún tipo de parámetro, mostrará las conexiones activas.
El comando anterior seguido del parámetro –AN, mostrará las conexiones activas, además
de los puertos abiertos.
Podemos también conocer cualquier conexión creada con el exterior, para ello, necesitamos
escribir el comando netstat seguido del parámetro –B. Abrimos cmd como administrador.
Según la IANA, los puertos por los que hay una conexión activa son los siguientes y están
reservados por la misma para uso privado:
Puertos 49697, 49774, 50494 y 50496
Tienen usos asignados como protocolo ARGUS, protocolo de resolución de direcciones
(ARP), mensaje de control de internet, protocolos de internet en redes Ethernet, protocolo
de transacción, entre muchos otros.
2. Hacer un listado de las funciones del API de Berkeley con parámetros de los diagramas de
comunicación Orientada y No orientada a conexión.
Funciones del API de Berkeley
socket(): crea un socket nuevo de un cierto tipo, identificado por un número entero
y asigna recursos de sistema para el mismo.
bind(): es típicamente usado en el lado del servidor y asocia un socket con una
estructura de dirección de socket, es decir, un número de puerto local especificado
y la dirección IP.
listen(): es utilizado en el lado del servidor, causa un socket TCP límite para entrar en
estado de escucha.
connect(): es usada en el lado del cliente, y asigna un numero de puerto local libre a
un socket. En caso de un socket TCP, provoca un intento para establecer una nueva
conexión TCP.
accept(): es usada en el lado del servidor. Acepta un intento entrante recibido para
crear una conexión TCP de un cliente remoto y crea un socket nuevo asociado con el
par de dirección del socket de esta conexión.
send(), recv() o write(), read() o sendto(), recvfrom(): son usadas para enviar y recibir
datos de/desde un socket remoto.
close(): hace que el sistema libere los recursos asignados a un socket. En caso de TCP,
la conexión es terminada.
gethostbyname(), gethostbyaddr(): son usadas para resolver nombres y direcciones
de host. Sólo para IPv4.
select(): es usada para hilos, esperando uno o más de una lista proporcionada de
sockets que deben estar listos para leer, escribir o que tengan errores.
poll(): es usada para comprobar el estado de un socket en un set de sockets. El set
puede ser probado para ver si algún socket puede escribir, leer o si un error ocurrió.
getsockopt(): se utiliza para recuperar el valor actual de una opción de socket
particular para el socket especificado.
setsockopt(): se utiliza para establecer una opción de socket particular para el socket
especificado.
Parámetros de las funciones para Comunicación Orientada a Conexión:
socket(int dominio, int tipo, int protocolo): la función socket toma tres argumentos,
el dominio, el tipo y el protocolo a usar.
bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen): la función bind
toma tres argumentos, un descriptor representando el socket para llevar a cabo el
enlace [sockfd], un puntero a una estructura sockaddr que representa la dirección
para unirse [my_addr] y un campo socket_t especificando el tamaño de la estructura
sockaddr [addrlen].
listen(int sockfd, int backlog): la función listen requiere dos argumentos, un
descriptor de socket válido [sockfd] y un entero representando el número de
conexiones pendientes que puede ser puestas en cola en cualquier momento. El
sistema operativo usualmente coloca un tope en este valor [backlog].
accept( int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen): la función accept
recibe tres parámetros, el descriptor del socket escucha que tiene la conexión puesta
[sockfd], un puntero a una estructura sockaddr para recibir información de las
direcciones del cliente [cliaddr] y un puntero para una localidad socklen_t que
especifica el tamaño de una estructura de dirección de cliente pasada a accept.
Cuando accept devuelve, esta localidad indica cómo cuántos bytes de la estructura
están usados actualmente [addrlen].
read(int fd, void *buf, size_t count): intenta leer hasta contar bytes desde el
descriptor de archive [fd], en donde comienza el buffer [buf].
write(int fd, const void *buf, size_t count): escribe hasta la cuenta de bytes desde el
buffer apuntado [buf] al archivo referido por el descriptor de archivo [fd].
close(int fd): cierra un archivo descriptor [fd].
Parámetros de las funciones para Comunicación No Orientada a Conexión:
socket(int dominio, int tipo, int protocolo): la función socket toma tres argumentos,
el dominio, el tipo y el protocolo a usar.
bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen): la función bind
toma tres argumentos, un descriptor representando el socket para llevar a cabo el
enlace [sockfd], un puntero a una estructura sockaddr que representa la dirección
para unirse [my_addr] y un campo socket_t especificando el tamaño de la estructura
sockaddr [addrlen].
recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr,
socklen_t *addrlen): coloca el mensaje recibido en el buffer [buf]. El llamador debe
especificar el tamaño del buffer en [len]. Si [src_addr] no es NULL, y el protocolo
subyacente proporciona la dirección de origen del mensaje, la dirección de origen se
sitúa en el buffer apuntado por [src_addr].
sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr
*dest_addr, socklen_t addrlen): Si es usada esta función en un modo conexión los
argumentos [dst_addr] y [addrlen] son ignorados. De lo contrario, la dirección del
destino está dado por [dest_addr] con [addrlen] especificando su tamaño.
read(int fd, void *buf, size_t count): intenta leer hasta contar bytes desde el
descriptor de archive [fd], en donde comienza el buffer [buf].
close(int fd): cierra un archivo descriptor [fd].
3. Escribir un programa en Java donde interactúen al menos 2 clases.
Código claseUno
Código claseDos
Código funcionando
FUENTES CONSULTADAShttps://en.wikipedia.org/wiki/Berkeley_sockets#socket.28.29http://man7.org/linux/man-pages/man7/socket.7.htmlhttps://norfipc.com/infografia/como-usar-netstat-conocer-conexiones-establecidas.htmlhttp://www.chuidiang.com/clinux/sockets/socketselect.phphttp://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt