ip(7) Miscellaneous Information Manual ip(7) NOMBRE ip - Implementacion del protocolo IPv4 en Linux SINOPSIS #include #include #include /* contiene a los anteriores */ tcp_socket = socket(AF_INET, SOCK_STREAM, 0); udp_socket = socket(AF_INET, SOCK_DGRAM, 0); raw_socket = socket(AF_INET, SOCK_RAW, protocolo); DESCRIPCION Linux implementa el Protocolo de Internet (Internet Protocol, IP), version 4, descrito en RFC 791 y RFC 1122. ip contiene una implementacion de multidestino del Nivel 2 segun el RFC 1112. Tambien contiene un enrutador IP incluyendo un filtro de paquetes. La interfaz del programador es compatible con la de los conectores BSD. Consulte socket(7) para mas informacion sobre conectores. Los conectores IP se generan mediante socket(2): socket(AF_INET, socket_type, protocolo); Los tipos de conector validos serian SOCK_STREAM para un conector de flujo, SOCK_DGRAM para abrir un conector de datagrama y SOCK_RAW para abrir un conector raw(7) que accede al protocolo IP directamente. protocol representa el protocolo IP en el encabezado IP que se envia o recibe. Valores validos para protocol serian: o 0 y IPPROTO_TCP para conectores de flujo tcp(7); o 0 y IPPROTO_UDP para conectores de datagrama udp(7); o IPPROTO_SCTP para conectores de flujo sctp(7); y o IPPROTO_UDPLITE para conectores de datagrama udplite(7). Para SOCK_RAW puede definir un protocolo IP valido segun el IANA tal como se define en el RFC 1700. Cuando un proceso quiere recibir nuevos paquetes de entrada o conexiones, debe enlazar un conector a una direccion de la interfaz local usando bind(2). Solo se puede ligar un conector IP a un par (direccion, puerto) dado. Cuando en la llamada a bind se especifica INADDR_ANY, el conector sera ligado a todas las interfaces locales. Cuando se llama a connect(2) con un conector no enlazado, el conector sera automaticamente ligado a un puerto aleatorio libre cuya direccion local sea INADDR_ANY. Una direccion local de conector TCP que haya sido enlazada, no estara disponible durante un cierto tiempo despues de que se cierre, a menos que se haya activado la opcion SO_REUSEADDR. Se debe tener cuidado al usar esta opcion ya que hace que TCP sea menos fiable. Formato de las direcciones An IP socket address is defined as a combination of an IP interface address and a 16-bit port number. The basic IP protocol does not supply port numbers, they are implemented by higher level protocols like udp(7) and tcp(7). On raw sockets .sin_port is set to the IP protocol. See sockaddr_in(3type). .sin_family is always set to AF_INET. This is required; in Linux 2.2 most networking functions return EINVAL when this setting is missing. .sin_port contains the port in network byte order. The port numbers below 1024 are called privileged ports (or sometimes: reserved ports). Only a privileged process (on Linux: a process that has the CAP_NET_BIND_SERVICE capability in the user namespace governing its network namespace) may bind(2) to these sockets. Note that the raw IPv4 protocol as such has no concept of a port, they are implemented only by higher protocols like tcp(7) and udp(7). .sin_addr is the IP host address. The .s_addr member of the in_addr(3type) structure contains the host interface address in network byte order. in_addr(3type) should be assigned one of the INADDR_* values (e.g., INADDR_LOOPBACK) using htonl(3) or set using the inet_aton(3), inet_addr(3), inet_makeaddr(3) library functions or directly with the name resolver (see gethostbyname(3)). Las direcciones IPv4 se dividen en direcciones unidestino, de difusion y multidestino. Las direcciones unidestino especifican una unica interfaz de un anfitrion, las direcciones de difusion especifican todos los anfitriones de una red y las direcciones multidestino identifican a todos los anfitriones de un grupo multidestino. Solo se pueden enviar datagramas a o recibir datagramas de direcciones de difusion cuando esta activa la opcion de conector SO_BROADCAST. En la implementacion actual, los conectores orientados a conexion solo pueden usar direcciones unidestino. Dese cuenta que la direccion y el puerto se almacenan siempre en orden de red. En particular, esto significa que necesita llamar a htons(3) con el numero que se ha asignado al puerto. Todas las funciones de manipulacion de direccion/puerto en la biblioteca estandar trabajan en orden de red. Direcciones especiales y reservadas Hay varias direcciones especiales: INADDR_LOOPBACK (127.0.0.1) siempre hace referencia al equipo local a traves del dispositivo loopback; INADDR_ANY (0.0.0.0) representa direccion para vinculacion de sockets; INADDR_BROADCAST (255.255.255.255) A packet addressed to INADDR_BROADCAST through a socket which has SO_BROADCAST set will be broadcast to all hosts on the local network segment, as long as the link is broadcast-capable. Direccion con el numero mas alto Direccion con el numero mas bajo En cualquier subred IP conectada localmente no punto a punto con un tipo de enlace que admita transmisiones, la direccion con el numero mas alto (por ejemplo, la direccion .255 en una subred con mascara de red 255.255.255.0) se designara como direccion de transmision. No es practica asignarla a una interfaz individual y solo se podra direccionar con un socket en el que se haya configurado la opcion SO_BROADCAST. Historicamente, los estandares de Internet tambien han reservado la direccion con el numero mas bajo (por ejemplo, la direccion .0 en una subred con mascara de red 255.255.255.0) para transmision, aunque suele considerarse 'obsoleta' para este proposito. Algunas fuentes tambien se refieren a esto como 'direccion de red'. A partir de la version 5.14 de Linux , se trata como una direccion de unidifusion ordinaria y se puede asignar a una interfaz. Los estandares de Internet tradicionalmente tambien han reservado varias direcciones para usos particulares, aunque Linux ya no las trata de manera especial. [0.0.0.1, 0.255.255.255] [240.0.0.0, 255.255.255.254] Las direcciones en estos intervalos (0/8 y 240/4) estan reservadas globalmente. Desde Linux 5.3 y Linux 2.6.25, respectivamente, las direcciones 0/8 y 240/4, distintas de INADDR_ANY y INADDR_BROADCAST, se tratan como direcciones de unidifusion ordinarias. Estas direcciones se consideraron siempre reservadas y, tradicionalmente, los equipos no pueden interoperar con ellas. [127.0.0.1, 127.255.255.254] Las direcciones en este intervalo (127/8) se tratan como direcciones de loopback similares a la direccion loopback local estandarizada INADDR_LOOPBACK (127.0.0.1); [224.0.0.0, 239.255.255.255] Las direcciones en este rango (224/4) estan dedicadas al uso de multidifusion. Opciones de los conectores See IPPROTO_IP(2const). Interfaces /proc See proc_sys_net_ipv4(5). Ioctls Todas las ioctls descritas en socket(7) se aplican a ip. Las ioctls para configurar los parametros de los dispositivos genericos se describen en netdevice(7). ERRORES EACCES El usuario intento ejecutar una operacion sin los permisos necesarios. Estos incluyen: enviar un paquete a una direccion de transmision sin tener configurado el indicador SO_BROADCAST; enviar un paquete a traves de una ruta prohibida; modificar la configuracion del firewall sin privilegios de administrador (la capacidad CAP_NET_ADMIN); enlazar a un puerto privilegiado sin privilegios de administrador (la capacidad CAP_NET_BIND_SERVICE). EADDRINUSE Se ha intentado el enlace a una direccion ya en uso. EADDRNOTAVAIL Se ha solicitado una interfaz inexistente o la direccion fuente solicitada no es local. EAGAIN La operacion se bloquearia sobre un conector bloqueante. EALREADY Ya se esta realizando una operacion de conexion sobre un conector no bloqueante. ECONNABORTED Se ha cerrado la conexion durante un accept(2). EHOSTUNREACH Ninguna entrada valida de la tabla de enrutamiento coincide con la direccion de destino. Este error puede ser provocado por un mensaje ICMP procedente de un enrutador remoto o por la tabla local de enrutamiento. EINVAL Se ha pasado un argumento invalido. Para las operaciones de envio, este se puede producir al enviar a una ruta blackhole. EISCONN Se ha llamado a connect(2) sobre un conector ya conectado. EMSGSIZE El datagrama es mayor que una MTU de la ruta y no puede ser fragmentado. ENOBUFS ENOMEM No hay suficiente memoria libre. Esto a menudo significa que la reserva de memoria esta limitada por los limites del bufer de conectores, no por la memoria del sistema, aunque esto no es coherente al 100%. ENOENT Se ha llamado a SIOCGSTAMP sobre un conector en donde no han llegado paquetes. ENOPKG No se ha configurado un subsistema del nucleo. ENOPROTOOPT EOPNOTSUPP Se han pasado opciones de conector invalidas. ENOTCONN La operacion solo esta definida en un conector conectado pero el conector no esta conectado. EPERM El usuario no tiene permiso para establecer una prioridad alta, cambiar la configuracion o enviar senales al proceso o grupo solicitado. EPIPE La conexion ha sido cerrada o cancelada por el otro extremo. ESOCKTNOSUPPORT El conector no esta configurado o se ha solicitado un tipo de conector desconocido. Los protocolos superpuestos pueden generar otros errores. Vea tcp(7), raw(7), udp(7) y socket(7). NOTAS Debe tenerse especial precaucion con la opcion SO_BROADCAST: no tiene privilegios en Linux y es facil sobrecargar la red con transmisiones descuidadas. Para nuevos protocolos de aplicacion, es preferible utilizar un grupo de multidifusion en lugar de transmision. Se desaconseja la radiodifusion. Consulte RFC 6762 para ver un ejemplo de un protocolo (mDNS) que utiliza el enfoque de multidifusion mas moderno para comunicarse con un grupo abierto de hosts en la red local. El empleo de la opcion de nivel SOL_IP en conectores no es portable. Las pilas basadas en BSD emplean el nivel IPPROTO_IP INADDR_ANY (0.0.0.0) y INADDR_BROADCAST (255.255.255.255) son neutrales en el orden de bytes. Esto hace que htonl(3) no tenga ningun efecto sobre ellos. Compatibilidad Por compatibilidad con Linux 2.0, todavia se soporta la sintaxis obsoleta socket(AF_INET, SOCK_PACKET, protocol) para abrir un conector de paquetes (packet(7)). Se recomienda no usar esta sintaxis y deberia reemplazarse por socket(AF_PACKET, SOCK_RAW, protocol). La principal diferencia es la nueva estructura de direcciones sockaddr_ll para la informacion generica de la capa de enlace en lugar de la antigua sockaddr_pkt. ERRORES Hay demasiados valores de error inconsistentes. El error utilizado para diagnosticar el agotamiento del intervalo de puertos efimeros difiere entre las distintas llamadas al sistema que pueden asignar puertos efimeros (connect(2), bind(2), listen(2), sendto(2). No se han descrito las ioctls para configurar las opciones de interfaz especificas de IP y las tablas ARP. Recibir la direccion de destino original con MSG_ERRQUEUE en msg_name mediante recvmsg(2) no funciona en algunos nucleos de Linux 2.2. VEASE TAMBIEN IPPROTO_IP(2const), recvmsg(2), sendmsg(2), byteorder(3), capabilities(7), icmp(7), ipv6(7), netdevice(7), netlink(7), raw(7), socket(7), tcp(7), udp(7), ip(8) The kernel source file Documentation/networking/ip-sysctl.rst. RFC 791 para la especificacion IP original. RFC1122 para los requerimientos IPv4 para lo anfitriones. RFC 1812 para los requeremientos IPv4 para los enrutadores. TRADUCCION La traduccion al espanol de esta pagina del manual fue creada por Juan Piernas , Miguel Perez Ibars y Marcos Fouces Esta traduccion es documentacion libre; lea la GNU General Public License Version 3 o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD. Si encuentra algun error en la traduccion de esta pagina del manual, envie un correo electronico a . Linux man-pages 6.18 8 Febrero 2026 ip(7)