Pregunta

Estoy considerando usar SCTP en lugar de TCP para una aplicación p2p escrita en C. Debería ¿Lo hago? Además, ¿cómo se compara la velocidad de SCTP con la velocidad de TCP?

EDITAR: Descubrí que SCTP se puede tunelizar sobre UDP con el único problema que es el SCTP tunelizado no es interoperable con el SCTP sin túnel.

¿Fue útil?

Solución

Si es para una red de área local, asegúrese de hacerlo.

Sin embargo, tenga en cuenta que si planea usarlo en Internet abierto, muchos firewalls de grado de consumidor no son lo suficientemente flexibles como para permitir protocolos IP no reconocidos a través de ellos.

Otros consejos

¿Ha considerado si todos sus sistemas de destino tendrán SCTP preinstalado en ellos o si su aplicación necesitará incluir SCTP? En mi experiencia, no esperaría que todos los sistemas tengan instalado SCTP en ellos, y esperaría que no lo hicieran si fuera Windows.

Si incluye SCTP en la propia aplicación, eso aumentará más del doble el número de mensajes que se pasan al Kernel, lo que afectará el rendimiento en comparación con el uso del TCP preinstalado.

¿Ha considerado qué beneficios desea de SCTP? Usted mencionó la tolerancia a fallas, pero para que esto funcione con SCTP requiere que la aplicación tenga múltiples puertos Ethernet y direcciones IP. ¿Es esto probable en tu aplicación?

Por mucho que me encante SCTP (!) Consideraría seriamente seguir con TCP a menos que esté seguro de que se necesita SCTP o que controle los hosts en los que está implementada su aplicación.

Saludos

¿Cómo te ayuda?

Eres P2P, por lo que cada par debe tener al menos un socket abierto para todos los demás pares.

Si tienes un socket abierto, entonces puedes hacer todo lo que necesites hacer sobre eso. Si ha adoptado el enfoque de un socket por archivo y tiene varios archivos transferidos simultáneamente entre dos pares dados, entonces SCTP le ahorrará un socket por archivo. Sin embargo, en una red P2P normal de cualquier tamaño, casi nunca se transferirán varios archivos simultáneamente entre dos pares.

Solo tenga un socket y tenga su propio protocolo pequeño; envía un paquete con un encabezado, el encabezado indica el tipo de contenido, p. un comando, o parte un archivo, y si es así, qué archivo y qué rango de bytes.

Por supuesto, obtienes un poco de sobrecarga para eso, mientras que si tienes un socket para comandos y uno por archivo, eres más eficiente. ¿Merece la pena el tiempo / molestia / complejidad de usar SCTP para ahorrar un socket por par (suponiendo una descarga a la vez)?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top