programacion principiantes para lenguaje funciones ejemplos descargar comandos codigos basicos c++ network-programming network-protocols

principiantes - ¿Todo lo que un desarrollador de C++ debe saber sobre la programación de redes?



lenguaje c++ ejemplos (1)

Algunos puntos de viñeta en la parte superior de mi cabeza de cosas que debes saber:

  • Cómo y por qué funciona el TCP ... Apretones de manos de 3 vías, acuse de recibo, acuse de recibo retrasado, protocolo de ventana deslizante. Hay una razón concreta para cada una de esas características ... y todas pueden destruir el rendimiento de su aplicación si se manejan de forma incorrecta.
  • Multidifusión UDP ... incluso si nunca piensa que la usará, necesita saber por qué existe para que pueda tomar decisiones informadas al diseñar sistemas.
  • La fragmentación de IP y el impacto de MTU.
  • Serialización binaria y ordenamiento de bytes de red (incluso si va a utilizar búfers de proto Google, es bueno entender por qué son eficientes).
  • Serialización Ascii y enmarcado de mensajes (¿qué significa /r/n/r/n en HTTP?)
  • Diferentes modelos de despacho de E / S: preforking al estilo Apache, thread-per-connection, single-threaded basado en eventos, basado en eventos con hilos de trabajo, etc.
  • El impacto de las vulnerabilidades de desbordamiento de búfer en una aplicación en red
  • Diseño basado en protocolo, a diferencia de API o diseño basado en biblioteca
  • asíncrono vs protocolos síncronos. Muchos sistemas de alto rendimiento son asincrónicos. HTTP es sincrónico a menos que use pipelining, e incluso entonces, hay muchas restricciones sobre lo que es posible ... no hay respuestas fuera de orden, por ejemplo.

Actualización: ¿Qué significa el diseño basado en protocolo?

Considere HTTP, el protocolo de la web. Apache, IIS, Lighttpd, Firefox, Opera, WebKit, etc. Todas estas piezas de software hablan HTTP. Es muy posible que ninguno de ellos esté compartiendo el código para hacerlo. La desventaja, por supuesto, es la mayor probabilidad de errores debido al volumen neto de código. Hay numerosos aspectos positivos:

  • Cualquier programa puede comunicarse a través de HTTP, independientemente del lenguaje de implementación
  • Los entornos livianos / incrustados pueden seleccionar y elegir un subconjunto del protocolo, en lugar de utilizar todo
  • Es posible optimizar un manejador de protocolo para situaciones particulares. No es posible optimizar una biblioteca sin sacrificar la generalidad.
  • Una variedad de implementaciones diferentes obliga a los proveedores de bibliotecas a solucionar los errores (en lugar de simplemente expulsarlos porque, bueno, todos usan la misma biblioteca).
  • No existe una carga organizacional o contractual para los usuarios de HTTP, no hay tarifas de licencia.

Cuando diseña un protocolo de red, puede compilar varias API, cada una adaptada a casos de uso específicos. O puedes construir uno, depende de ti. Los componentes de software en red se pueden actualizar de forma independiente. Básicamente, todo lo que escuchas es bueno sobre las interfaces Java / C # y las clases abstractas de C ++, pero se aplica en la capa de red en lugar de en la capa de lenguaje de programación.

Así que estoy haciendo una gran cantidad de programación en red de alto rendimiento usando Boost :: Asio (o solo Asio si lo deseas), y tengo una comprensión bastante sólida de los elementos esenciales de los protocolos TCP y UDP. Sin embargo, me pregunto, porque aún no me considero un experto en redes, a pesar de mi conocimiento, ¿cuál es una buena forma de enmarcar lo esencial de lo que los programadores de redes deberían saber, especialmente para aquellos que intentan impulsar el rendimiento de sus grandes redes basadas en redes? aplicaciones?

Hay un gran ensayo sobre programadores y lo que deberían saber sobre la memoria (ver más abajo), así que me pregunto si alguien ha creado algo similar para la creación de redes.

Lo que todo programador debería saber sobre la memoria