Bueno vamos a comenzar con una pequeña introducción de algunos temas que si bien se deberian saber por ahi hay algunos conceptos que no se tienen del todo asimilados.


Introducción

¿Qué es una red de comunicaciones?

Vamos a comenzar viendo para que se utilizan las redes de comunicaciones. Para esto vamos a analizar un modelo de comunicaciones, mostrando algunas de las tareas que se realizan para intercambiar información desde un host fuente a uno destino.

Lo que buscamos con un sistema de comunicación es intercambiar datos.
Vemos un ejemplo de un modelo punto a punto donde se realiza un intercambio de datos entre una computadora y un servidor por intermedio de una red telefónica.





Fuente: es el modulo en el cual se generan los datos a ser transmitidos.

Transmisor: los datos que son generados en la fuente no se transmiten directamente como se generaron, sino que un transmisor va a transformar y codificar la información con el propósito de generar señales electromagnéticas que se puedan transmitir a través de algún sistema de transmisión

Usualmente, los datos generados por la fuente no son transmitidos directamente en la forma en la que fueron generados. En vez, un transmisor transforma y codifica la información de tal manera que genera señales electromagnéticas que pueden ser transmitidas a través de algún sistema de transmisión.

Como podemos ver el la figura la fuente(computadora) esta conectada a un transmisor(Módem)quien va a recibir un tren de bits de la fuente y lo va a transformar en una señal analógica la cual pueda se manejada por la red telefónica.

Acá tienen un pequeño video del funcionamiento del módem por si quedaron dudas.




Destino: Va a ser quien recibe los datos que provienen del receptor, quien a su vez recibe los datos que fueron enviados desde la fuente, y en este caso va a demodular la señal analógica para obtener los datos.

Algunas de las tareas de la comunicación son:

1-Utilización del sistema de transmisión : que se refiere a la necesidad de hacer uso eficaz de los recursos utilizados en las transmisión. Algunas de las técnicas utilizadas para lograr este fin pueden ser el Multiplexado para mantener la capacidad total de trasmisión de un determinado numero de usuarios, otras pueden ser técnicas de Control de Congestionamiento para evitar que el sistema se sature por una demanda excesiva de transmisión de servicios.

2-Una interfase: la cual es necesaria para que un dispositivo pueda trasmitir información por el medio de transmisión.

3-Generación de señales: es requerida para la comunicación. Las propiedades de las señales, tales como forma e intensidad, deben ser tales para que la señal sea capaz de ser propagada a través de un sistema de transmisión y además deben ser interpretadas como datos por el receptor .

4-Sincronización: El receptor y el emisor deben estar sincronizados.El receptor debe ser capaz de determinar cuando comienza y termina la señal recibida.Al igual que debería conocer la duración de cada elemento de la señal.

5-Administración de Intercambios: para el procesamiento de datos se necesitan ciertas convenciones además del simple hecho de establecer la conexión.Por ejemplo se deberá establecer si ambos dispositivos pueden transmitir simultáneamente o deben hacerlo por turnos.

6-Detección y corrección de errores: en todos los sistemas de comunicación hay un potencial de error; las señales transmitidas son distorsionadas antes de alcanzar su destino . La Detección y corrección de errores son requeridos en circunstancias en donde los errores no pueden ser tolerados.

7-Control de Flujo: sirve para asegurar que la fuente no sature al destinatario al enviar los datos más rápido de lo que pueden ser procesados o recibidos.

8-Direccionamiento y Ruteo:cuando más de dos dispositivos comparten un sistema de transmisión, un sistema fuente debe indicar la identidad del destinatario. El sistema de transmisión debe asegurar
que el sistema destinatario, y solo aquel sistema, reciba los datos.

9-Recuperación:las técnicas de recuperación son necesarias en situaciones en donde en un intercambio de información, tales como una transacción de una base de datos o la transferencia de un archivo, son interrumpidos debido a una falla en alguna parte del sistema. El objetivo es

que sea capaz de resumir la actividad en el punto de interrupción o cuando menos restablecer el estado del sistema en la condición que se encontraba antes de ser interrumpido .

10-Formato de mensajes: Es el acuerdo que debe existir entre las dos partes respecto el formato de las datos intercambiados.

11-Seguridad:El emisor debe asegurarse de que solo el destino deseado reciba los datos. Igualmente el receptor querrá estar seguro de que los datos recibidos no se han alterado en la transmisión y que dichos datos realmente provienen del supuesto emisor.

12- Gestión de Red: se necesita la habilidad de un gestor de red que configure el sistema, monitorice su estado, reaccione ante fallos y sobrecargas, y planifique son acierto los crecimientos futuros.

Bueno ya vimos un modelo para las comunicaciones ahora vamos a ver el modelo de referencia OSI(Open System Interconnection).

El Modelo de Referencia de Interconexión de Sistemas Abiertos, conocido mundialmente como modelo OSI fue creado por la ISO(Organización Estándar Internacional), con el fin de poner orden entre todos los sistemas y componentes requeridos en la transmisión de datos además de simplificar la interrelación entre fabricantes.

O sea es un marco de referencia para la definición de arquitecturas de interconexión de sistemas de comunicaciones.

Ahora veamos un video para aclarar las definiciones anteriores.



Vamos a continuar con el protocolo TCP/IP.

TCP/IP se llama así por dos de sus protocolos más importantes: Transmission Control Protocol (TCP) y el Internet Protocol (IP). También se le conoce como protocolos de Internet .

El objetivo de TCP/IP fue construir una interconexión de redes que proporcionara servicios de comunicación universales: Internet. Cada red física tiene su propia interfase de comunicaciones dependiente de la tecnología que la implementa. Las comunicaciones entre servicios las proporciona el software que se ejecuta entre la red física y la aplicación de usuario, y da a estas aplicaciones una interfase común, independiente de la estructura de la red física. De esta manera la arquitectura de las redes físicas es transparente al usuario.

El modelo de referencia TCP/IP consta principalmente de tres protocolos: IP, UDP y TCP. El protocolo básico es IP y permite enviar mensajes entre dos computadoras.

Miremos el siguiente video asi entendemos mejor el protocolo.





Ahora seguimos con el protocolo Ip.

El protocolo IP es el más utilizado para la interconexión entre redes y cuando se diseñó ya se tuvo en cuenta la interconexión entre redes. Su trabajo es proporcionar un medio para el transporte de datagramas del origen al destino, sin importar si estas máquinas están en la misma red, o si hay otras redes entre ellas. IP está implementado en todas las computadoras y routers. Se preocupa de la retransmisión de los datos de una computadora a otra, pasando por uno o varios routers nodo a nodo. No sabe de que aplicación son los paquetes, únicamente sabe de máquina son.

Los datos proporcionados por la capa de transporte son divididos en datagramas y transmitidos a través de la capa de red (capa Internet). Durante el camino puede ser fragmentado en unidades más pequeñas si deben atravesar una red o subred cuyo tamaño de paquete sea más pequeño. En la máquina destino, estas unidades son reensambladas para volver a tener el datagrama original que es entregado a la capa de transporte.

Veamos un video del funcionamiento del router.




Datagramas Ip



-Vers. Indica la versión del protocolo, en el caso de la figura 2 contendrá el valor 4 (=Ipv4)
-LONG Indica la longitud de la cabecera en palabras de 32 bits (4 octetos). Máximo 24 = 16 palabras.
-Servicio Indica el tipo de servicio solicitado. Este campo habitualmente no es considerado por los routers, por lo que no suele ser utilizado.
-Longitud Total Señala la longitud total de todo el datagrama (incluidos los datos) en bytes. El tamaño máximo por tanto es de 216 = 65535 octetos.
-Identificador Es un identificador de datagrama que se utiliza en caso de segmentación.
-FLAGS Se utilizan para labores de fragmentación.
-Offset Se utiliza para identificar la posición de un fragmento cuando existe segmentación.
-Time To Live (TTL)Indica la validez de un datagrama. El origen indica un valor inicial. Cada vez que atraviesa un router, este decrementa el valor. Al llegar a 0 la red elimina el datagrama.
-Protocolo Indica el tipo de datos que transporta IP (ej: TCP, UDP, ICMP; etc).
-Checksum Se trata de un código de redundancia utilizado para determinar si se han producido errores de transmisión o no.
-Dir. IP Origen Es la dirección origen del datagrama, identifica al origen de la comunicación.
-Dir. IP Destino Es la dirección destino del datagrama, identifica al destino de la comunicación.
Opciones Para utilizar opciones adicionales del protocolo IP. Tamaño variable hasta 11*4 bytes.
Relleno (Padding)Utilizado para alinear el campo de opciones a 32 bits.

Además del protocolo IP, la arquitectura TCP/IP utiliza una serie de protocolos que son parte integral de la misma, es decir, cualquier equipo que implemente la arquitectura debe incorporarlos. Estos protocolos se utilizan para informar de sucesos, fallos y obtención de direcciones y se denominan protocolos de control.


ICMP Internet Control Message Protocol - Protocolo de Control de Mensajes de Internet .

Es la parte del protocolo IP cuyo objetivo es diagnosticar problemas de red. Se encarga de controlar si un paquete no puede alcanzar su destino, si su vida ha expirado, si el encabezamiento lleva un valor no permitido, si es un paquete de eco o respuesta, etc.
No se suele usar en programas destinados al usuario final, exceptuando ping y traceroute.
Utiliza la misma la capa que el protocolo IP, la de red.
Los mensajes ICMP son construidos en el nivel de capa de red. IP encapsula el mensaje ICMP apropiado con una nueva cabecera IP (para obtener los mensajes de respuesta desde el host original que envía), y transmite el datagrama resultante de manera habitual.
El ICMP va encapsulado en un solo datagrama IP no se puede garantizar la entrega del ICMP.

El paquete ICMP




Los mensajes ICMP se transmiten como datagramas IP normales,con el campo de cabecera "protocolo" con un valor 1, y comienzan con un campo de 8 bits que define el tipo de mensaje de que se trata. Estan compuestos por:
El campo código, de o bits, que a veces ofrece una descripción del error concreto que se ha producido y después un campo suma de control, de 16 bits, que incluye una suma de verificación de errores de transmisión.
El cuerpo del mensaje, determinado por el contenido del campo "tipo". Contienen además los 8 primeros bytes del datagrama que ocasionó el error.

Utilidades ICMP

Ping



El ping es la más sencilla de todas las aplicaciones TCP/IP. Envía uno o más datagramas a un host de destino determinado solicitando una respuesta y mide el tiempo que tarda en retornarla. La palabra ping, procede de la operación de sónar empleada para localizar un objeto submarino. También es un acrónimo de Packet InterNet Groper.


Los argumentos más utilizados son:
-f Flood. Envia muchos paquetes ICMP en un corto intervalo de tiempo.
-c Número de pings que se desea enviar. En los UNIX el número es ilimitado, mientras otros sitemas envían sólo 4 paquetes.
-i Tiempo entre un ping y otro, por defecto un segundo.
-s Tamaño del paquete que se desea enviar.
-I Interfaz por la que queremos enviar el ping. Solo tiene sentido en caso de que tengamos varias interfaces.
-Q Marca los paquetes con una prioridad determinada. Se usa para comprobar impelemtenciones de QOS.

ARP
Address Resolution Protocol - Protocolo de resolución de direcciones.

Dos maquinas van a poder comunicarse si conocen su direccion fisica de Rees, entonces ARP resuelve este problema.
Una interfaz ethernet tiene asignada una direccion fisica MAC de 48 bits única la cual es asignada cuando se fabrica .Una maquina conectada a una red tiene entonces una Direccion Logica IP y una Direccion Fisica MAC, el problema es entonces como dos maquinas que desean comunicarse conocen esa direccion fisica.
Entonces sabemos que una máquina A sabe que quiere comunicarse con una máquina B porque conoce su IP unicamente, entonces Transmite por difusion(Broadcast) un paquete ARP pidiendo a B su direccion MAC; Así B responde a la máquina A con su direccion MAC.Todos los host conectados a la red son alcanzados por el broadcast pero solo B responde.
Las computadoras utilizan una memoria intermedia(cache ARP) para guardar estas asignaciones y de este modo no tener que utilizar el mecanismo cada vez que desean intercambiar información.
El módulo ARP intenta hallar la dirección en su caché. Si encuentra el par buscado, devuelve la correspondiente dirección física de 48 bits al llamador(el manejador de dispositivo). Si no lo encuentra, descarta el paquete (se asume que al ser un protocolo de alto nivel volverá a transmitirlo) y genera un broadcast de red para una solicitud ARP.
Algunas Aclaraciones
-Si A realiza una peticion ARP a B, B genera una entrada en su memoria con la IP y MAC de A y luuego envia su MAC a A.
-A envia por difusion a toda la red, entonces todas las maquinas de la red guardan o actualizan su memoria (Solo B responde).
-Si se cambia la tarjeta de B por ejemplo porque se daño entonces hay mecanismos que informa su nueva MAC x difusion ARP cuando se inicia el sistema.





Formato del Paquete.
















Hardware address space: Especifica el tipo de hardware; ejemplos son Ethernet o Packet Radio Net.
Protocol address space: Especifica el tipo de protocolo, el mismo que en el campo de tipo EtherType en la cabecera de IEEE 802.
Hardware address length: Especifica la longitud(en bytes) de la dirección hardware del paquete.
Protocol address length: Especifica la longitud(en bytes) de las direcciones del protocolo en el paquete. Para IP será de 4.
Operation code: Especifica si se trata de una petición(1) o una solicitud(2) ARP.
Source/target hardware address: Contiene las direcciones física hardware.
Source/target protocol address: Contiene las direcciones del protocolo. En TCP/IP son direcciones IP de 32 bits.

Ahora vamos a ver los protocolos de Transporte.
Los protocolos de aplicación no se comunican con IP directamente, pero si le hablan con los protocolos de transporte como TCP o UDP.
Estos protocolos de transporte pasan datos a IP, quien encapsula los datos en datagramas IP que son enviados sobre la red. En si los protocolos de transporte ocultan la red de los protocolos de aplicación de modo que ellos no traten con la redimension y otras cuestiones, también protegiendo a la red de la necesidad de tener que multiplexar el trafico de protocolo de aplicación(Una tarea que Ip puede dejar a los protocolos de transporte).
Por ejemplo, tanto UDP como TCP proporcionan un servicio de multiplexación a protocolos de aplicación por vía de números de puerto especifico de aplicación. Donde los números de los puertos actúan como un buzón de un correo virtual para mensajes que serán entregados a un host, permitiendo de esta manera que múltiples aplicaciones puedan correr sobre un mismo host.

TCP (Transmission Control Protocol)
Es un protocolo utilizado entre dos host remotos unidos por una red para intercambiar datos.Este protocolo garantiza que los datos seran entregados a su destino sin errores y en el mismo orden en el cual fueron transmitidos.
Proporciona un mecanismo de PUERTOS, bueno esta ya es la segunda vez que hablamos de puertos desde que comenzamos con los protocolos de transporte, entonces vamos a aclarar un poco este concepto, como ya sabemos los Sistemas Operativos actuales soportan la MULTIPROGRAMACION, son SISTEMAS MULTITAREAS, para poder dar soporte a la comunicación de distintos procesos ejecutandose en un mismo host, se utilizan los puertos.
Durante una comunicación, en lugar de pensar en los PROCESOS (de una aplicación) como el destino final imaginemos que se asigna a cada uno de ellos un punto abstracto llamado puerto.
Tiene un número entero positivo y posee una memoria intermedia finita para que el proceso pueda leer de de ahi.
Para comunicarse con un puerto externo el transmisor necesita conocer la IP y puerto del otro lado.
Continuando con TCP, podemos decir que pertenece a la capa de transporte, esta difinido en RFC 793 y trabaja en capa 4 del modelo OSI.

Tambien podemos definirlo como un protocolo ORIENTADO A LA conexión ya que los extremos deben establecer la conexión antes de transmitir.

Las etapas de la conexión son tres:establecimiento de conexión, transferencia de datos y fin de la conexión.
Para establecer la conexión se usa el procedimiento llamado negociación en tres pasos (3-way handshake).
Y para la desconexion utilizamos una negociación en cuatro pasos (4-way handshake) .

Establecimiento de la conexcion















Establecimiento de la conexión.
Antes de que el cliente intente conectarse con el servidor, éste último debe primero ligarse hacia el puerto para abrirlo para las conexiones, es decir, una apertura pasiva. Una vez establecida el cliente puede iniciar la apertura activa. Se requiere de un saludo de tres etapas:
1.La apertura activa se realiza enviando un paquete SYN (sincroniza) hacia el servidor.
2.En respuesta, el servidor responde con un paquete SYN-ACK (conformación de sincronización).
3.Finalmente el cliente envía un paquete ACK (confirmación) de regreso hacia el servidor.


Transferencia de datos.
Hay tres funciones clave que diferencian a TCP de UDP:
Transferencia de datos libre de errores.
Transferencia de datos ordenada.
Retransmisión de paquetes perdidos.
Descartado de paquetes duplicados.
Ajuste en la congestión de la transmisión de datos.
Terminación de la conexión.
Esta etapa utiliza un saludo de tres vías, con cada extremo de la conexión terminando independientemente. Cuando una de los extremos desea detener su parte de la conexión, envía un paquete FIN, que la otra parte confirma con un paquete ACK. Por tanto una interrupción de la conexión requiere un par de paquetes FIN y ACK desde cada lado de la conexión TCP.
Una conexión puede quedar abierta a medias cuando uno de los extremos ha terminado la conexión desde su lado pero el otro extremo no. El extremo que terminó la conexión ya no puede enviar datos en la conexión, pero el el otro extremo si.
El método más común sea un saludo de tres etapas donde un anfitrión A envía un paquete FIN y el anfitrión B responde con un paquete FIN y un ACK (en el mismo paso) y el anfitrión A responde con un paquete ACK.

Las caracteristicas de TCP son:
-Es orientado a la conexión
-Tiene una conexión Full Duplex, punto a punto.
-Comprueba duplicidad de datos.
-Permite especificar niveles de seguridad y prioridad de conexión
-Control de flujo atraves de Ventana Deslizante.
-Flujo confiable en una red no confiable como IP.
-Definido por socket.
Estas son algunas de las caracteristicas mencionadas muy por encima asi que si a alguno se le presentan dudas les recomendaria investigar mas sobre estos temas, ya que como dije al comienzo del blog esto es un pequeña introducción para comenzar con lo que realmente nos interesa que son las comunicaciones de resdes seguras.

Formato de los segmentos TCP.

Puerto de origen (16 bits): Identifica el puerto a través del que se envía.
Puerto destino (16 bits): Identifica el puerto del receptor.
Número de secuencia (32 bits): Sirve para comprobar que ningún segmento se ha perdido, y que llegan en el orden correcto. Su significado varía dependiendo del valor de SYN:

-Si el flag SYN está activo (1), entonces este campo indica el número inicial de secuencia (con lo cual el número de secuencia del primer byte de datos será este número de secuencia más uno).
-Si el flag SYN no está activo (0), entonces este campo indica el número de secuencia del primer byte de datos.

Número de acuse de recibo (ACK) (32 bits): Si el flag ACK está puesto a activo, entonces en este campo contiene el número de secuencia del siguiente paquete que el receptor espera recibir.
Longitud de la cabecera TCP (4 bits): Especifica el tamaño de la cabecera TCP en palabras de 32-bits. El tamaño mínimo es de 5 palabras, y el máximo es de 15 palabras (lo cual equivale a un tamaño mínimo de 20 bytes y a un máximo de 60 bytes)
Reservado (4 bits): Bits reservados para uso futuro, deberían ser puestos a cero.

Bits de control (flags) (8 bits): Son 8 flags o banderas. Cada una indica “activa” con un 1 o “inactiva” con un 0.

URG = 1, el campo puntero urg esta activo, sino es ignorado
ACK = 1, confirmación de otro segmento.
PSH = 1, fuerza la entrega inmediata a la capa superior.
RST = 1, reiniciará la conexión.
SYN, Activa/desactiva la sincronización de los números de secuencia.
FIN, Si se activa es porque no hay más datos a enviar por parte del emisor, esto es, el paquete que lo lleva activo es el último de una conexión.

Ventana (16 bits): Es el tamaño de la ventana de recepción, que especifica el número de bytes que el receptor está actualmente esperando recibir.

Suma de verificación (checksum) (16 bits): Es una suma de verificación utilizada para comprobar si hay errores tanto en la cabecera como en los datos.

Puntero urgente (16 bits): Si el flag URG está activado, entonces este campo indica el desplazamiento respecto al número de secuencia que indica el último byte de datos marcados como “urgentes”.

Opciones (número de bits variable): La longitud total del campo de opciones ha de ser múltiplo de una palabra de 32 bits (si es menor, se ha de rellenar al múltiplo más cercano), y el campo que indica la longitud de la cabecera ha de estar ajustado de forma adecuada.

Continuamos ahora con el protocolo UDP(User Datagram Protocol).

No todas las aplicaciones requieren de una entrega garantizada, y estos usos tipicamente usan UDP para servicios de transporte.A diferencia de TCP, UDP envia solo los datos que este ha recibido de la aplicación, y no hace ningun control para asegurarse la entrega garantizada o el control de flujo.

Podriamos decir que UDP proporciona un servicio de entrega sin conexión y no confiable (con sus problemas de confiabilidad incluyendo la perdida, duplicacion, retraso, entrega fuera de orden y perdida de conectividad.

Utiliza IP para trasnportar el mensaje entre maquinas.
Es parecido a IP pero agrega la capacidad para distinguir entre varios procesos de un mismo ordenador(puertos).

El programa de aplicación que recibe estos paquetes se hace cargo de dichos problemas de confiabilidad.

Este protocolo funciona bien en ambientes seguros(redes locales) pero falla en red de redes.
Es usado generalmente para tranporte de video y voz.(Donde no hay tiempo para retransmitir un dato perdido debido que se trabaja en tiempo real).

Formato del mensaje UDP.











La cabecera UDP consta de 4 campos de los cuales 2 son opcionales . Los campos de los puertos fuente y destino son campos de 16 bits que identifican el proceso de origen y recepción.

GRAFICO GENERICO DE PROTOCOLOS

Vamos a empezar con Direccionamiento IP

Un sistema proporciona un servicio universal de comunicaciones si permite que cualquier computadora anfitrion se comunique con cualquier otro anfitrion.
Los identificadores de anfitrion se clasifican con nombres, direcciones o rutas.Un nombre identifica lo que un objetos es, una direccion donde esta y una ruta indica como llegar haste ahi.

En una red de redes, una direccion que tiene todos los bits del campo host id igual a cero, se reserva para referirse a la red en si misma.Por ejemplo 192.168.1.0 .

Y una direccion de difusion tiene todos los bits del campo host id asignado como uno. Entonces todos los rangos intermedios se utilizan para direccionar host o subredes. Cuando se dividen en subredes, se pierden 2 direcciones para la red y para el broadcast.
De aquí que esta division se realiza con la mascara de red, la cual brinda una division virtual de la red: es un numero binario de 32 bits que actua como filtro cuando es aplicado a la direccion ip.

El gran espectro de direccionamiento ip xxx.xxx.xxx.xxx existen algunas redes reservadas para ip privadas, lo que nos dice que nigun proveedor del ISP, le otorgara a un host esa direccion conectarse a internet.

Estos rangos son:



Clase Rango de Direcciones

A Alguna direccion en 10.x.x.x

B Direcciones en el rango de 172.16.x.x hasta 172.31.x.x

C Direcciones en el rango de 192.168.0.x hasta 192.168.255.0


Clasificacion de las direcciones IP.

Bueno podriamos decir que la IP es un numero unico que identifica a una computadora o dispositivo conectado a una red que se comunica a traves del protocolo TCP.

Conceptualmente cada direccion es un par (netid, hostid) en donde:

Netid: identifica la red.
Hostid: identifica un anfitrion dentro de una red.

En las redes de clase A los primeros 8 bits de la dirección son usados para identificar la red, mientras los otros tres segmentos de 8 bits cada uno son usados para identificar a las computadoras.

Una dirección IP de clase A permite la existencia de 126 redes y 16.777.214 computadoras por red. Esto pasa porque para las redes de clase A fueron reservados por la IANA (Internet Assigned Numbers Authority) los IDs de "0" hasta "126".






En las redes de clase B los primeros dos segmentos de la dirección son usados para identificar la red y los últimos dos segmentos identifican las computadoras dentro de estas redes.

Una dirección IP de clase B permite la existencia de 16.384 redes y 65.534 computadoras por red. El ID de estas redes comienza con "128.0" y va hasta "191.255".

Direcciones IP Clase B
Redes de clase C utilizan los tres primeros segmentos de dirección como identificador de red y sólo el último segmento para identificar la computadora.
Una dirección IP de clase C permite la existencia de 2.097.152 redes y 254 computadoras por red. El ID de este tipo de red comienza en "192.0.1" y termina en "223.255.255".

Direcciones IP Clase C

Category: 0 comments