IP(7) IP(7)
NAME
IP - Internet Protocol
SYNOPSIS
ip
DESCRIPTION
IP is the internetwork datagram delivery protocol that is
central to the Internet protocol family. Programs may use IP
through higher-level protocols such as the Transmission
Control Protocol (TCP) or the User Datagram Protocol (UDP), or
may interface directly to IP. See TCP(7) and UDP(7). Direct
access may be via the socket interface (using a raw socket) or
the Transport Level Interface (TLI). The protocol options
defined in the IP specification may be set in outgoing
datagrams.
The STREAMS driver /dev/rawip is the TLI transport provider
that provides raw access to IP. The device /dev/ip is the
multiplexing STREAMS driver that implements the protocol
processing of IP. The latter connects below to datalink
providers [interface drivers, see if(7)], and above to
transport providers such as TCP and UDP.
Raw IP sockets are connectionless and are normally used with
the sendto and recvfrom calls, [see send(3N) and recv(3N)]
although the connect(3N) call may also be used to fix the
destination for future datagrams (in which case the read(2) or
recv(3N) and write(2) or send(3N) calls may be used). If
proto is zero, the default protocol, IPPROTO_RAW, is used. If
proto is non-zero, that protocol number will be set in
outgoing datagrams and will be used to filter incoming
datagrams. An IP header will be generated and prepended to
each outgoing datagram; received datagrams are returned with
the IP header and options intact.
A single socket option, IP_OPTIONS, is supported at the IP
level. This socket option may be used to set IP options to be
included in each outgoing datagram. IP options to be sent are
set with setsockopt [see getsockopt(3N)]. The getsockopt(3N)
call returns the IP options set in the last setsockopt call.
IP options on received datagrams are visible to user programs
only using raw IP sockets. The format of IP options given in
setsockopt matches those defined in the IP specification with
one exception: the list of addresses for the source routing
options must include the first-hop gateway at the beginning of
Copyright 1994 Novell, Inc. Page 1
IP(7) IP(7)
the list of gateways. The first-hop gateway address will be
extracted from the option list and the size adjusted
accordingly before use. IP options may be used with any
socket type in the Internet family.
At the socket level, the socket option SO_DONTROUTE may be
applied. This option forces datagrams being sent to bypass
the routing step in output. Normally, IP selects a network
interface to send the datagram, and possibly an intermediate
gateway, based on an entry in the routing table. See
routing(4). When SO_DONTROUTE is set, the datagram will be
sent using the interface whose network number or full IP
address matches the destination address. If no interface
matches, the error ENETUNRCH will be returned.
Raw IP datagrams can also be sent and received using the TLI
connectionless primitives.
Datagrams flow through the IP layer in two directions: from
the network up to user processes, and from user processes down
to the network. Using this orientation, IP is layered above
the network interface drivers and below the transport
protocols
such as UDP and TCP. The Internet Control Message Protocol
(ICMP) is logically a part of IP. See ICMP(7).
IP provides for a checksum of the header part, but not the
data part of the datagram. The checksum value is computed and
set in the process of sending datagrams and checked when
receiving datagrams. IP header checksumming may be disabled
for debugging purposes by patching the kernel variable ipcksum
to have the value zero.
IP options in received datagrams are processed in the IP layer
according to the protocol specification. Currently recognized
IP options include: security, loose source and record route
(LSRR), strict source and record route (SSRR), record route,
stream identifier, and Internet timestamp.
The IP layer will normally forward received datagrams that are
not addressed to it. Forwarding is under the control of the
kernel variable ipforwarding. If ipforwarding is zero, IP
datagrams will not be forwarded; if ipforwarding is one, IP
datagrams will be forwarded. ipforwarding is usually set to
one only in machines with more than one network interface
(internetwork routers). This kernel variable can be tuned to
Copyright 1994 Novell, Inc. Page 2
IP(7) IP(7)
enable or disable forwarding using the idtune(1M) command.
The IP layer will send an ICMP message back to the source host
in many cases when it receives a datagram that can not be
handled. A time exceeded ICMP message will be sent if the
time to live field in the IP header drops to zero in the
process of forwarding a datagram. A destination unreachable
message will be sent if a datagram can not be forwarded
because there is no route to the final destination, or if it
can not be fragmented. If the datagram is addressed to the
local host but is destined for a protocol that is not
supported or a port that is not in use, a destination
unreachable message will also be sent. The IP layer may send
an ICMP source quench message if it is receiving datagrams too
quickly. ICMP messages are only sent for the first fragment
of a fragmented datagram and are never returned in response to
errors in other ICMP messages.
The IP layer supports fragmentation and reassembly. Datagrams
are fragmented on output if the datagram is larger than the
maximum transmission unit (MTU) of the network interface.
Fragments of received datagrams are dropped from the
reassembly queues if the complete datagram is not
reconstructed within a short time period.
Errors in sending discovered at the network interface driver
layer are passed by IP back up to the user process.
REFERENCES
connect(3N), getsockopt(3N), ICMP(7), if(7), inet(7), read(2),
recv(3N), routing(4), send(3N), TCP(7), UDP(7), write(2)
RFC 791
NOTICES
Raw sockets should receive ICMP error packets relating to the
protocol; currently such packets are simply discarded.
Users of higher-level protocols such as TCP and UDP should be
able to see received IP options.
Copyright 1994 Novell, Inc. Page 3