servidor - ¿Cómo puedo comparar TCP y UDP usando C?
socket udp c (4)
Quiero medir la latencia y el rendimiento del mensaje tanto para TCP como para UDP usando sockets de C. Estoy escribiendo un client.c y server.c (Pregunta 1: ¿Tengo que hacerlo?) Que se ejecutan en diferentes servidores para lograr esto. Tengo que tomar varias medidas usando diferentes tamaños de paquetes y pruebas múltiples y graficar mis resultados.
Para la latencia del mensaje: envíe un paquete de tamaño variable y mida el tiempo de ida y vuelta y divida por 2 para obtener la latencia. Pregunta 2: Envío un paquete de tamaño x, y luego desde el servidor. Devuelvo el paquete. Entonces, en el cliente, comienzo el temporizador, envío el paquete y luego espero a recibir el paquete y luego detengo el temporizador. El temporizador / 2 es mi latencia? ¿Cuáles son los pasos a seguir para medir esto?
Para el rendimiento: Pregunta 3: ¿Cómo mediría el rendimiento de ambos? ¿Cuáles son los pasos a seguir para hacer esto?
Soy un principiante de la programación de socket Unix en C así que los detalles serían útiles, con énfasis en el aspecto de la marca.
EDITAR: No puedo usar herramientas que ya existen. Necesito escribir el mío.
¡Gracias!
Ya existe un programa llamado ttcp que prueba el rendimiento de TCP y UDP:
DESCRIPCIÓN
Ttcp veces la transmisión y recepción de datos entre dos sistemas utilizando los protocolos UDP o TCP.
No calcula la latencia, pero puede echarle un vistazo al código fuente de ese programa para examinar cómo hace otros cálculos. Y también puede usarlo como cliente o servidor en caso de que no desee escribir ambos.
Actualización: otros programas de prueba TCP similares
así como también programas relacionados
Es posible que desee ver las herramientas que ya existen para este tipo de cosas. Tal vez D-ITG o iperf
combinado con tcpdump
o wireshark
? A menos que la intención sea aprender más acerca de la programación del zócalo.
Pregunta 1: Probablemente pueda encontrar casos de prueba existentes con algún uso de Google. Pero si hay situaciones especiales con las que debe lidiar, entonces probablemente tenga sentido escribir las suyas propias para que las tenga en cuenta.
Pregunta 2: Tal vez haya una definición oficial de "latencia" en términos de operaciones de red, pero creo que lo realmente importante es el costo de ida y vuelta. Entonces no dividiría entre 2. El costo total de ida y vuelta es lo que el usuario (cliente) experimenta. Esa será la latencia que ven.
Pregunta 3: Creo que su plan de usar diferentes tamaños de paquetes es bueno para medir el rendimiento. Hay otra pregunta SO relacionada con esto. Publiqué una respuesta a esa pregunta y proporcioné algunos números de mi propia prueba de UDP versus TCP. Esos podrían ser de interés como un punto de control de "cordura".
Ah, olvidé una cosa que iba a mencionar. Si escribe un caso de prueba realmente simple con UDP, podría ser algo poco realista. Si usa UDP directamente, necesitará agregar su propio manejo de errores, verificación de paquetes, etc. Eso agregará costos. En última instancia, encontramos que UDP es más rápido en la mayoría de las situaciones para nosotros porque lo hemos adaptado a nuestro propio uso. Pero ciertamente requiere MUCHO más código para que todo funcione correctamente.
También podría estar interesado en esta pregunta relacionada: "Cómo medir el rendimiento de la red (cómo comparar el protocolo de red)" .