inet(7) inet(7)
NAME
inet - Internet-Protokollfamilie
SYNTAX
#include <sys/types.h>
#include <netinet/in.h>
BESCHREIBUNG
Die Internet-Protokollfamilie umfaßt eine Reihe von Protokollen, in
deren Mittelpunkt das Internet-Protokoll (IP) [siehe ip(7)] steht und
die ein gemeinsames Adreßformat benutzen. Auf die Protokolle der
Internet-Familie kann über die Socket-Schnittstelle oder die
Transport-Schnittstelle TLI (Transport Level Interface) zugegriffen
werden. Die Socket-Schnittstelle unterstützt die Socket-Typen
SOCKSTREAM, SOCKDGRAM und SOCKRAW. TLI unterstützt die verbindungs-
losen (TCLTS) und die verbindungsorientierten (TCOTSORD) Dienst-
Typen.
PROTOKOLLE
Die Internet-Protokolfamilie enthält das Internet-Protokoll IP, das
Adressenumsetzungsprotokoll ARP (Address Resolution Protocol), das
Internet-Protokoll für Steuerungsmeldungen (ICMP), das Protokoll zur
Übertragungssteuerung (TCP) und das Benutzer-Datagrammprotokoll (UDP).
IP IP ist das netzwerkübergreifende, zentrale Übertragungsprotokoll
für Datagramme der Internet-Protokollfamilie [siehe ip(7)].
TCP Unterstützt die SOCKSTREAM-Abstraktion der Socket-
Schnittstellen und den TLI-Service-Typ TCOTSORD [siehe
tcp(7)].
UDP Unterstützt die Socket-Abstraktion SOCKDGRAM und den TLI-
Service-Typ TCLTS [siehe udp(7)]. Eine direkte Schnittstelle zu
IP steht sowohl über TLI als auch über die Socket-Schnittstelle
zur Verfügung.
ICMP Wird vom Kern benutzt, um Fehler bei der Protokollverarbeitung
zu bearbeiten und zu melden. Benutzerprogramme können ebenfalls
mit ICMP arbeiten [siehe icmp(7)].
ARP Wird benutzt, um 32-Bit IP-Adressen in 48-Bit MAC-Adressen zu
übersetzen [siehe arp(7)].
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
inet(7) inet(7)
Die 32-Bit IP-Adresse besteht aus einer Netzwerknummer und einer Rech-
nernummer. Bei Adressen der Klasse A ist das höchstwertige Bit Null,
wobei die 8 höherwertigen Bits die Netzwerknummer darstellen. Bei
Adressen der Klasse B sind die beiden höchstwertigen Bits auf 10
gesetzt; in diesem Fall dienen die 16 höherwertigen Bits als Netzwerk-
nummernfeld. Bei Adressen der Klasse C ist der Netzwerknummernteil 24
Bit lang, wobei die drei höchstwertigen Bits 110 enthalten. Anlagen
mit einem IP-Netzwerk-Cluster können wahlweise eine einzige Netzwerk-
nummer für den Cluster benutzen. Dies geschieht mittels Subnetzadres-
sierung. Der Rechnernummernteil der Adresse wird weiter unterteilt in
einen Subnetznummernteil und einen Rechnernummernteil. Innerhalb eines
Clusters erscheint jedes Subnetz wie ein individuelles Netzwerk. Nach
außen erscheint die gesamte Gruppe wie ein einziges, einheitliches
Netzwerk, das nur einen einzigen Routing-Eintrag benötigt. Die Adres-
sierung von Subnetzen wird durch die folgenden ioctl(2)-Aufrufe ermög-
licht und geprüft; sie haben das gleiche Format wie der SIOCSIFADDR-
Aufruf [siehe if(7)].
SIOCSIFNETMASK Netzwerkmaske für die Schnittstelle setzen. Die
Netzwerkmaske gibt den Netzwerkteil der Adresse
an. Falls sie mehr enthält als durch den Adressen-
typ angezeigt ist, bedeutet dies, daß mit Subnet-
zen gearbeitet wird.
SIOCGIFNETMASK Netzwerkmaske für Schnittstelle einlesen.
ADRESSIERUNG
IP-Adressen sind vier Byte lange Größen, die in der Reihenfolge der
Netzwerkbytes abgespeichert sind. IP-Adressen sollten unter Verwendung
der Routinen zur Umsetzung der Byte-Reihenfolge [siehe byteorder(3N)]
bearbeitet werden.
Adressen der Internet-Protokollfamilie verwenden folgende Struktur:
struct sockaddrin {
short sinfamily;
ushort sinport;
struct inaddr sinaddr;
char sinzero[8];
};
Es stehen Bibliotheksroutinen zur Verfügung, um Strukturen dieser Art
zu bearbeiten [siehe inet(3N)].
Das sinaddr-Feld der sockaddrin-Struktur enthält eine lokale oder
ferne IP-Adresse. Jede Netzwerkschnittstelle hat ihre eigene eindeu-
tige IP-Adresse. Der Sonderwert INADDRANY kann in diesem Feld angege-
ben werden, um "Wildcard"-Umsetzung anzustoßen. Wird dieser Sonderwert
in einem bind(3N)-Aufruf angegeben, so bleibt die IP-Adresse des Sok-
kets frei, so daß der Socket alle Verbindungswünsche oder Pakete emp-
fängt, die an irgendeine gültige IP-Adresse des Systems geschickt wur-
den. Dies kann sich als nützlich erweisen, wenn ein Prozeß die lokale
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
inet(7) inet(7)
IP-Adresse nicht kennt oder wenn ein Prozeß zum Empfang von Anforde-
rungen alle seine Netzwerkschnittstellen ausnutzen möchte. In der
Struktur sockaddrin, die im bind(3N)-Aufruf angegeben wird, muß für
inaddr entweder der Wert INADDRANY oder eine im System gültige IP-
Adresse angegeben werden. Anforderungen, den Endpunkt an eine andere
Adresse anzubinden, ergeben den Fehler EADDRNOTAVAI. Wird ein
connect(3N)-Aufruf für einen Socket abgesetzt, der in einer lokalen
Adresse Wildcards enthält, so setzt das System das sinaddr-Feld des
Sockets auf die IP-Adresse der Netzwerkschnittstelle, über die die
Pakete dieser Verbindung geleitet werden.
Das sinport-Feld der sockaddrin-Struktur spezifiziert eine Portnum-
mer, die von TCP oder UDP benutzt wird. Die lokale Portnummer, die im
bind(3N)-Aufruf angegeben wird, muß größer sein als IPPORTRESERVED
(definiert in <netinet/in.h>), es sei denn, der erzeugende Prozeß
läuft mit Superuser-Privilegien. Auf diese Weise wird ein Bereich mit
geschützten Anschlußnummern zur Verfügung gestellt. Darüber hinaus
darf die lokale Portadresse nicht von einem Socket der gleichen Adreß-
familie und des gleichen Typs benutzt werden. Anforderungen, Sockets
mit Portnummern zu verbinden, die bereits von anderen Sockets benutzt
werden, ergeben den Fehler EADDRINUSE. Wenn die lokale Portadresse mit
Null angegeben wird, verwendet das System eine eindeutige Portadresse,
die größer als IPPORTRESERVED ist. Ebenso wird eine eindeutige lokale
Portadresse vom System ausgewählt, wenn ein nicht gebundener Socket in
einem connect(3N)- oder sendto-Aufruf [siehe send(3N)] verwendet wird.
Auf diese Weise können Programme, die sich nicht darum kümmern, welche
lokale Portnummer benutzt wird, TCP Verbindungen aufbauen, indem sie
einfach socket(3N) und danach connect(3N) aufrufen. Außerdem können
sie UDP-Datagramme absenden, indem sie nacheinander socket(3N) und
sendto(3N) aufrufen.
Obwohl diese Implementierung nur eindeutige lokale Portnummern für
Sockets zuläßt, erlaubt TCP mehrfache simultane Verbindungen für die
gleiche lokale Portnummer, solange die fernen IP-Adressen oder Port-
nummern für jede Verbindung unterschiedlich sind. Programme können die
Socketeinschränkungen explizit außer Kraft setzen, indem sie die
Socket-Option SOREUSEADDR mittels setsockopt setzen [siehe
getsockopt(3N)].
TLI wendet leicht unterschiedliche Semantik-Regeln beim Binden von
lokalen Portnummern an. Diese Semantik-Regeln treffen dann zu, wenn
Protokolle der Internet Familie über TLI benutzt werden.
HINWEISE
Die Unterstützung des Internet-Protokolls wird geändert, wenn dies
nötig wird.
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
inet(7) inet(7)
SIEHE AUCH
ioctl(2), bind(3N), byteorder(3N), connect(3N), getsockopt(3N),
gethostent(3N), getnetent(3N), getprotoent(3N), getservent(3N),
send(3N), socket(3N), arp(7), icmp(7), if(7), ip(7), tcp(7), udp(7).
Network Information Center, DDN Protocol Handbook (3 vols.), Network
Information Center, SRI International, Menlo Park, Calif., 1985.
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98