Vous êtes sur la page 1sur 535
Programacion de Socket Linux Sean Walton Traducci6n Clave Informatica I+D, S.A. indice de contenido Introduccién PARTEI Programacién de red desde la perspectiva del cliente Capitulo 1. Recetario del cliente de red ... Un mundo conectado mediante sockets .... Generalidades del direccionamiento TCP/IP Escucha del servidor: el algoritmo basico del cliente La llamada del sistema socket: procedimientos y advertencias Realizacién de la llamada: conexién al servidor Obtencién de la respuesta del servidor Cierre de la conexién .. Resumen: ¢qué ocurre entre bastidores? Capitulo 2. Elocuencia del lenguaje de red TCP/IP .... Generalidades de la numeracién IP ..... Tdentificacién de la computadora . Organizacién del 1D Internet Mascaras de subredes .. . Routers y resolucién de direcciones ... Direcciones desaprovechadas y especiales Numeros de puertos de host IP Ordenacién de bytes de red Uso de herramientas de transformacién de Internet Aplicaci6n de las herramientas y extensién del cliente . Diferentes clases de sockaddr .. Canales con nombre de UNIX Resumen: aplicacién de herramientas y numeracién IP Capitulo 3. Tipos de paquetes de Internet . El paquete de red fundamental Campo version . Campo header _len .. Campo serve type Campo ID .. Campo frag_offset y flags dont_frag y more_frags . Campo time_to_live (TTL) Campo protocol .. 37 Campo options Campo data .... Anilisis de varios paquetes Cuestiones relacionadas con los paquetes Tipos de paquete .... soo Como encajan los protocolos IP . Como escudrifar la red con Tepdump Escritura de un escudrifiador de red a medida Resumen: eleccién de los mejores paquetes para el envio de mensajes . Capitulo 4. Envio de mensajes entre peers .. éQué son los sockets basados en la conexién? Canales abiertos entre programas Comunicaciones fiables ... Conexiones de protocolo inferior Ejemplo: conexién al demonio HTTP Protocolo HTTP simplificado . Obtencién de una pagina HTTP {Qué son los sockets sin conexién? Configurando la direccién del socket Algunos programas sélo necesitan el mensaje Transaction TCP (T/TCP): un TCP sin conexion Envio de un mensaje directo Asociacién del puerto al socket . Cémo enviar el mensaje Cémo coger el mensaje Garantia de Hegada de un mensaje UDP Como fortalecer la fiabilidad de UDP Secuencia de los paquetes Redundancia de paquete Verificacién de la integridad de los datos Fallos imprevistos del flujo de datos ... Tareas enrevesadas: una introduccién a la multitarea .. Resumen: modelos conectados frente a modelos sin conexién Capitulo 5. Explicacién del modelo de capas de red ....... Solucién del desafio de red... Cuestiones de hardware de red Cuestiones de transmisin de red ... Interaccién de la red con el sistema operativo Interaccion de la red con el programa ... Modelo de red de interconexién de sistemas abiertos (OSI) . Capa 1: 101 102 103 104 105 Capa 2: enlace de datos .. 106 Capa 3: red . 107 Capa 4: transporte 107 Capa 5: sesion 108 Capa 6: presentacién 108 Capa 7: aplicacién ... 109 Paquete de protocolos de Internet 109 Capa 1: capa de acceso de red 109 Capa 2: capa de funcionamiento en Internet (IP) .. 110 Capa 2: extensiones de la gestion de mensajes de error-control (ICMP) .. 111 Capa 3: de host a host (UDP) 111 Capa 3: flujos de host (TCP) 12 Capa 4: capa de aplicacién ... 113 Diferencias fundamentales entre OSI e IP 113 éQué da servicio a qué? 114 Resumen: de la teoria a la practica .. 114 PARTE La perspectiva del servidor y el control de carga Capitulo 6. Generalidades sobre el servidor .. 119 Asignacién del socket: el flujo de programa general del servidor .. 121 Un servidor de eco sencillo ... 123 Asociar puertos a un socket .. 124 Creacion de una cola de espera de sockets .. 126 Aceptar conexiones de clientes 127 Comunicacién con el cliente 129 Reglas generales sobre la definicién de protocolos . 131 {Qué programa habla primero? .. 131 {Qué programa dirige la conversacién? 11 {Qué nivel de certificacién necesita? 132 iQué tipos de datos utilizar? ... 132 ~Como debe manejar los datos binarios’ 132, iCémo saber cuando se produce un interbloqueo? 133 éNecesita sincronizacién horaria? .. 133 Como y cuando reiniciar la conexidn? ... 134 (Cuando ha finalizado? 134 Un ejemplo extenso: un servidor de directorio HTTP 134 Resumen: los elementos basicos de un servidor .... 138 Capitulo 7. Divisién de la carga: multitarea .... 139 Definicién de multitarea: procesos frente a threads 141 Cuando se debe utilizar la multitarea . 143, Caracteristicas de la multitarea Diferencias en las tareas . {Cémo creo un proceso? Como creo un thread? La Hamada del sistema _clone(): la llamada de los valientes Comunicacién entre tareas ... Venciendo al reloj: condiciones de carrera y exclusiones mutuas (mutex) ... Condiciones de carrera Exclusién muitua (mutex) Problemas de exclusién mutua de Pthread .. Prevencion del interbloqueo .. Control de hijos y eliminacién de procesos zombis Preste més atencién a los hijos: prioridad y planificacion . Entierro de los procesos zombis: limpieza tras la finalizacion . Ampliacién de los clientes y servidores actuales ... Llamada de programas externos con el exec del servidor Resumen: distribucidn de la carga del proceso Capitulo 8. Cémo decidir cuando esperar E/S . Bloqueo de la E/S: por qué? . 2Cuiindo debo bloquear? ... Alternativas al bloqueo de la F/S Comparaciin de las diferentes interacciones de programacion de E/S . Sondeo de la E/S .. Un lector de sondeos Escritor de sondeo . Sondeo de las conexiones E/Sasincrona ... Lectura bajo demanda . Escrituras asincronas ... Conexiones bajo demanda . Resolucién de bloqueos de la E/S no deseados con poll() y select. Implementacién de los tiempos de espera .. Resumen: eleccién de las estrategias de E/S Capitulo 9. Cémo romper las barreras del rendimiento .. Creacién de serviets antes de la llegada del cliente ..... Colocacién de un tope en el mimero de conexiones cliente Preduplicacion de sus servidores Ajuste a diferentes niveles de carga Ampliacién del control con 1n select inteligente .. El asalto al planificador. 188, 194 195 198 199 201 202 205 207 211 211 214 216 219 219 Sobrecarga de select() Llegar a un compromiso con un select inteligente Problemas de implementacin Redistribucién de la carga .... Investigacion a fondo del control de sockets Opciones generales .. Opciones de socket especificas de IP Opciones de socket especificas de IPv6 Opciones de socket especificas de TCP Recuperacin del descriptor de socket . Envio antes de la recepcidn: mensajes entrelazados. Apunte sobre los problemas de E/S de archivos Utilizacién de E/S sobre la base de la demanda para recuperar tiempo de CPU Aumento de la velocidad de send( Descarga de recv() .. Envio de mensajes de prioridad alta .. Resumen: discusidn de las caracteristicas de rendimiento Capitulo 10. Disefio de Socket Linux robustos . Utilizacién de herramientas de conversion .. Controle los valores de retorno Captura de sefiales SIGTIPE.... SIGURG SIGCHLD SIGHUP SIGIO... SIGALARM Administracién de recursos Administracién de archivos La pila de la memoria Memoria de datos estaticos . CPU, memoria compartida, y procesos .. Servidores criticos 2Qué se califica como un servidor criti Interrupciones y eventos de comunicacién Cuestiones sobre la recuperacién de la sesion . Técnicas de recuperacién de la sesién .. Cuestiones sobre la concurrencia cliente-servidor Interbloqueo de la red Inanici6n de la red . Ataques de denegacién de servicio .. Resumen: servidores sélidos como una roca .. 246 247 249 249 251 251 251 PARTE IIL Examen objetivo de los sockets Capitulo 11. Cémo ahorrar tiempo con objetos . 263 La evolucién de la ingenieria del software 265 Programacién funcional paso a paso 266 Cémo ocultar detalles de implementacién con la programaci nm modular . 267 Los detalles no son necesarios: programacién abstracta 268 Cémo conseguir un pensamiento més natural mediante la Programacion orientada a objetos ..... 268 Como Hegar a la programacién Nirvana 269 Reusabilidad del trabajo .. 269 Consolidacién de la reusabilidad con la reubicabilidad (phuggability) 270 Presentacién de los fundamentos de los objetos 271 Encapsulacién de la implementacion 272 Herencia de métodos 273 Abstraccién de datos 274 Polimorfismo de métodos 275 Caracteristicas de los objetos 275 La clase 0 el objeto . 275 Atributos .. 276 Propiedades . 276 Métodos 277 Derechos de acceso 277 Relaciones 277 Extensién de los objetos 278 Plantillas ... 278 Persistencia .. 278 Generacién de flujos 279 Sobrecarga 279 Interfaces 279 Eventos y excepciones . 280 Formatos especiales 280 Registro-Estructura 280 Coleccién de funciones 281 Soporte del lenguaje ... 282 Soporte activado frente a soporte orientado 282 Como incluir objetos en los lenguajes no orientados a objetos 283 Resumen: mentalidad orientada a objetos . 285 Capitulo 12. Uso de la API de red de Java .. 287 Exploracion de diferentes sockets Java 289 Programacién de clientes y servidores Implementacion de mensajeros Envio a miiltiples destinos .. Conexién a través de B/S . Clasificacién de las clases de E/S .. Conversién entre clases de E/S ... Configuracién del socket Java Configuraciones compartidas por sockets Java ....... Configuraciones Java especificas de la multidifusién Mulltitarea de los programas Uso de threads en una clase Cémo afiadir threads a una clase Sincronizacién de métodos . Limitaciones de la implementacién Resumen: programacion de redes de tipe Java .. Capitulo 13. Disefio y uso de una estructura de socket en C++ .... ¢Por qué utilizar C++ para la programacién basada en sockets? ... Cémo simplificar la conexién con les sockets Cémo ocultar los detalles de implementacién . Implantacion de componentes reutilizables que faciliten el uso de las interfaces ... Demostracidn de los procesos del disefio del marco de trabajo . Disposicin del marco de trabajo .. Definicién de las caracteristicas generale: Agrupamiento en componentes principales .. Creacién de la jerarquia del marco de trabajo Definicién de las capacidades de cada clase Prueba del marco de trabajo basado en socke El cliente/servidor de eco ... Multitarea de igual a igual Limitaciones de implementacién . Envio de mensajes desconocidos o indefinidos Incorporacién de la multitarea ... Resumen: un marco de trabajo basado en sockets de C++ simplifica la programacién ... Capitulo 14. Limitaciones de los objetos .... Recordatorio sobre objetos Comience con buen pie Un mezclador no es un objeto Separacién entre anilisis y disefio El nivel de detalle apropiado La explosi6n de la herencia . Reutilizacién-Desaprovechamiento Uso correcto de la directiva friend de C++ El operador sobrecargado .... Los objetos no lo resuelven todo Las novedades llegan y evolucionan Infeccién de la herencia .. Cédigo inalcanzable Complejidad dar y tomar Simplificacién de programas con interfaces establecidas . El enigma de la herencia multiple . Incremento del tamaiio del codigo El dilema de la administracién de proyectos Obtencién del personal apropiado en el momento oportuno Fenémeno WISCY (“Whisky”) . Prueba de (des-)integracién .. Resumen: tenga cuidado con las pendientes ... PARTEIV Sockets avanzados: més prestaciones Capitulo 15, Encapsulado de red con Llamadas de procedimiento remoto (RCP) . - Repaso del modelo OSI .. Comparacién de programacién de red y procedimental .. Limitaciones del lenguaje Mantenimiento de sesiones conectadas Suministro de métodos middleware ... Stubbing en las Hamadas de red... Adicién de la implementacion de llamada Implementacién del nivel de presentacién .. je servicio Creacién de RPC con rpegen .... Lenguaje de interfaces de rpegen .. Creacién de Ilamadas con estado con conexiones abiertas Diagnosis del problema del estado Recuerde donde esté ... Seguimiento de una ruta especifica . Recuperacién desde un estado erréneo - Resumen: creacién de una caja de herramientas para RPC . Capitulo 16. Cémo afiadir seguridad a los programas de red y SSL. ........ Asignacién de permisos para trabajar . Niveles de identificacion . 375 375 Formas de intercambio .. El problema de Internet Todo esta visible .. Formas de ataque/ intrusion Pirateo del TCP/IP .. Como garantizar la seguridad en un nodo de red ‘Acceso restringido Firewalls Zonas desmilitarizadas (DMZ) . Cémo garantizar la seguridad del canal Cifrado de mensajes ... gCudles son los tipos de cifrado disponible: Algoritmos de cifrado publicos .. Problemas con el cifrado - Seguridad a nivel de sockets (SSL) ‘Uso de OpenSSL . Creacién de un cliente SSI Creacién de un servidor SSL .. Resumen: el servidor seguro ... Capitulo 17. Cémo no compartir mensajes con multidifusién, difusién y Mbone ... Difusién de mensajes a un dominio . Repaso de la estructura ID ... Programaci6n para activar la difus Limitaciones de la difusion ..... Multidifusion de mensajes a un grupo Uni6n a grupos de multidifusion Envio de mensajes de multidifusién Cémo la red proporciona la multidifus Salida del mensaje de multidifusi6n .. Limitaciones de la multidifusion ... Resumen: comparticion eficiente de los mensajes ... Capitulo 18. La potencia de los sockets raw ..... Cuando se deben usar sockets raw? ..... Explicacién de ICMP... Cémo controlar la cabecera IP Aceleracion a través de la red 4Cuiiles son las limitaciones? . Cémo poner los sockets raw a funcionar Seleccién del protocolo correcto Creacin de un paquete ICMP .. 376 377 377 378 379 379 380 380 381 384 386, 387 387 388 388 389 391 393 411 411 41 A412 412 AI3. 413, 413 Como calcular una suma de comprobacién Cémo controlar la cabecera IP .. Trafico de terceros .... gCémo opera ping? El receptor MyPing .. Elemisor MyPing ...., Cémo opera traceroute Resumen: toma de decisiones raw . Capitulo 19, IPv6: la proxima generacién de IP ... Problemas actuales de direccionamiento saeco Resolucién de la reduccién del espacio de direcciones IPv4 cA qué se parece IPV6? .... Cémo funcionan juntos IPv4 ¢ IPv6? Cémo poner a prueba IPV6 ... Configuracién del niicleo .. . Configuracin de las herramientas Transformacién de las llamadas IPv4 a IPv6 Transformacién de sockets raw a IPV6 .. Transformacién de sockets ICMPV6 a IPV6 EI nuevo protocolo multidifusién . Pros y contras de IPV6 .... Incorporacién esperada de Linux Resumen: traslado del cédigo hacia el futuro PARTEV Apéndices : primer parametro de socket() .. Tipos: segundo parametro de socket) Definiciones de protocolo ... Asignaciones estandar de puertos de Internet (100 primeros puertos) ... Cédigos de estado HTTP 1.1 Opciones de socket (get/setsockopt()) Definiciones de seiales Cédigos ICMP . Asignacién de multidifusion IPv4........ Asignacion de direcciones IPv6 propuesta Cédigos ICMPv6 .... Campo de ambito de multidifusin IPv6 Campo flag de muitidifusion IPv6 ... 44 415 415 416 4lo 417 418 420 437 438 446 447 448 450 455 457 458 459 460 460 461 Apéndice B, API de red .. Conexién a la red .. Comunicacién por un canal .. Terminacién de conexiones Conversiones de datos de re Herramientas de direccionamiento dered .. Controles de socket Apéndice C. Subconjunto API del nicleo Tareas Threads Bloqueo Sefales . Archivos y otros Apéndice D. Clases de objetos ... Excepciones de C++. Exception (Superclase) .. NetException (Clase) Clases de soporte C++ SimpleString (Clase) .. HostAddress (Clase) .. Clases de mensajeria C++ .. Message (Clase abstracta) TextMessage (Clase) Clases de sockets C++ Socket Guperclase) SocketStream (Clase) SocketServer (Clase SocketClient (Clase) Datagram (Clase) Broadcast (Clase) MessageGroup (Clase) . Excepciones de Java ... java.io. IOException (Clase) ... java.net SocketException (Clase Clases de soporte Java .. java.net. DatagramPacket (Clase) java.net.InetAddress (Clase) ... Clases Java de F/S .. java.io.InputStream (Abstract Clas: java.io. ByteArraylnputStream (Clase) java.io.ObjectinputStream (Clase) ... 465 472 483 484 489 493 499 507 511 514 518 531 533 533 533 java.io.OutputStream (Clase abstracta) . java.io. ByteArrayOutputStream (Clase) java.io. ObjectOutputStream (Clase) java.io BufferedReader (Clase) . java.io.PrintWriter (Clase) .. Clases de sockets Java ... java.net.Socket (Clase) . java.net ServerSocket (Clase) .. java.net.DatagramSocket (Clase) . java.net.MulticastSocket (Clase) indice alfabético ... 546 546 547 548 548 550 530 551 552 553, Acerca del autor Sean Walton obtuvo su titulacién en Ciencias de la computacién en 1990 en la Brigham Young University, en la especialidad de teoria de la multitarea y fusiones de lenguajes. En 1988 fue contratado por el departamento de ciencias de la compu- tacién de la BYU como ayudante para el desarrollo de teorfas y métodos para la administracién de procesos transputer, migracién y comunicacién. Comenzé a tra- bajar con sockets BSD cuando trabajé como administrador en el departamento de ciencias de la computacién. Durante su trabajo en Hewlett-Packard, desarrollé el método de deteccién automatica de lenguaje (entre PostScript y PCL), que imple- mentan hoy dia las impresoras LaserJet 4 y superiores. Asimismo, desarrollé un sistema operativo de micro en tiempo real para el microcontrolador 8052 que per- mite emular motores de impresion. Sean posee afios de experiencia profesional en varios tipos de programacién y administracién UNIX, incluido Linux, HPUX, Ultrix, SunOS y System V. Como consecuencia de su trabajo en diferentes sistemas, ha centrado su atencién en esti- los de programacién independientes del sistema, que permiten una facil portabili- dad. En los iiltimos afios, Sean ha trabajado como asistente profesional, autor-disefia- dor de cursos, y profesor de conceptos basicos de computadoras, obtencién de requisitos, OOA/D, Java y C++. A principios de 1998 comenzé a trabajar con sockets Java, integrando esta informacion en su curso de Java. Sus servicios como profesor estén muy solicitados. Durante su trabajo en el equipo Nationwide Finan- cial Process Improvement, definié los procesos de anélisis y disefio para integrar los nuevos desarrollos con los estandares existentes. Ha dirigido y disefiado el pro- ducto Nationwide Insurance Authentication, que incluye politicas y autenticacién divididas. Dedicatoria Al dador de todo bien v principe de la paz perfecta. Agradecimientos Soy consciente de que este libro no habria sido posible sin la colaboracién esen- cial de varias personas. En primer lugar, a mi amada esposa, Susan, que me ha ani- mado constantemente, dandome todo el tiempo que he necesitado para llevar a tér- mino este proyecto. En segundo lugar a Wendel, mi padre, que me enseié la importancia de una buena organizacién y presentacién. En tercer lugar, al movi- miento Linux que, de forma desinteresada, me ha proporcionado un sistema opera- tivo efectivo y fiable sobre el que poder trabajar. En cuarto lugar, a Beverly Scherf,

Vous aimerez peut-être aussi