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 ..
37Campo 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
105Capa 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
219Sobrecarga 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
251PARTE 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 289Programacié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 apropiadoLa 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
375Formas 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,
413Como 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
461Apé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
533java.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,