orm@doc-tcpip.org

Erstellt: Mai 2000 - Letzte Modifikation: November 2003

[ Main | Local ]


Tuning des TCP/IP Stacks

Parameter und Werkzeuge unter AIX, Linux, FreeBSD und Solaris

Allgemeines zum Ändern der Parameter

Zuallererst sollte man wissen, woran warum gedreht werden soll - das ist wichtig und sollte eigentlich klar sein. Trotzdem will ich nochmal darauf hinweisen...

Auf den verschiedenen Unix-Derivaten gibt es ebensoviele Arten und Wege, solche Parameter zu verändern. Einige der Parameter greifen tief in Kernel-Routinen ein, es muß also neu gebootet werden, damit die Änderung wirkt. Andere Einstellungen sind dynamisch und gelten ab dem Punkt der Änderung für neue TCP-Verbindungen. Bestehende Verbindungen werden nicht angetastet (Beim Öffnen eines Socket werden Datenstrukturen angelegt, es gibt pro Verbindung einen TCB (Transmission Control BLock) und einen PCB (Protocol Control Block). Dort sind die Parameter entsprechend initialisiert, und werden nicht neu eingelesen, wenn sie sich ändern). Das bedeutet, daß alle Sockets, die auf dem Netz lauschen, nach Änderungen neu gestartet werden müssen - und natürlich auch der inetd.

Es ist mit einer einfachen Änderung meist nicht getan, den diese gelten nur bis zum Reboot. Je nach Unix-Derivat muß man einmal gemachte Einstellungen in verschiedenen Files oder Datenbanken hinterlegen, damit ein Reboot die entsprechenden Parameter wieder einstellt. Und, wieder je nach Unix-Derivat unterschiedlich, es gibt verschieden viele Parameter, die man per Interface einstellen kann.

Als letztes sei noch erwähnt, das es sehr viele Parameter gibt, einige sehr sinnvoll, andere ein bisschen unverständlich bzw. überholt. Und das Ganze ist im steten Fluß, mit jedem Release kann man neue Einstellmöglichkeiten entdecken.

Die Werkzeuge - AIX, FreeBSD, Linux, Solaris

AIX - IBMs Unix Derivat
Hier wird zum Setzen der Netzwerk-Parameter das Kommando no (network options) benutzt. Man kann alle möglichen Parameter abfragen, einen Parameter setzen und einen Parameter auf den Default-Wert zurücksetzen. Die Benutzung ist einfach, man muß allerdings beachten, ob der Parameter einen Reboot bzw. einen Neustart des Kommunikations-Subsystems braucht, oder ob der Parameter dynamisch angezogen wird. Will man die gemachte Änderung über einen Reboot beibehalten, so muß die Änderung in das File /etc/rc.net eintragen. Dabei gilt, daß dynamische Parameter nach den Aufrufen der defif/cfgif Methoden eingetragen werden müssen, nicht-dynamische aber vorher! Ab der AIX Versionen 5.2 wird für diesen Zweck das File /etc/tuning/nextboot benutzt. Außerdem wurden die Klassen der Parameter erweitert. Es gibt jetzt zu den bekannten dynamischen- und reboot-Parametern noch statische (festgelegte Parameter), bosboot (der Parameter erfordert einen bosboot zum reboot), mount (zieht beim nächsten Mount), incremental (kann ab dem Booten nur noch inkrementell verändert werden und connect (zieht mit der nächsten Socket Verbindung). Je nach Klasse werden die Parameter aktiviert bzw. der User auf nötige Aktionen (bosboot) hingewiesen. Ein Log-File (/etc/tunables/lastboot.log) loggt Probleme mit einzelnen Parametern beim Boot, das File /etc/tunables/lastlog listet alle während des Bootes gesetzten Parameter. Um das Ganze noch etwas weiter zu komplizieren: Einige Parameter sind Interface-Spezifisch und landen in der ODM (Object Data Manager). Die einzelnen Parameter werden hier beschrieben.

Zum Kommando selbst (Stand AIX V5.2):

Die Interface-Spezifischen Parameter werden mit dem ifconfig-Kommando gesetzt (bis zum Booten) und mit dem chdev -Kommando gesetzt und in die ODM geschrieben (werden also nach dem Booten angezogen. Dazu mehr mehr hier). Die einzelen no-Parameter sind hier ausführlich besprochen.

FreeBSD - Ein BSD-Unix
Der Befehl sysctl erfüllt hier die Aufgabe. Allerdings ist der Befehl bei weitem nicht auf das Netzwerk beschränkt - sämtliche System- und Kernel-Variablen lassen sich hier einstellen. Aktuelle Informationen liefern die entsprechenden Header-Files im Sourcecode und die sysctl man-Page: man 3 sysctl .

Zum Kommando selbst:

Linux - Unix unter der GPL
Hier finden sich wieder leichte Unterschiede von Distribution zu Distribution .... Jedenfalls ist hier der Ansatz etwas anders, alle Kernel-Parameter haben im /proc/sys-Filesystem einen Eintrag, der den gesetzten Wert darstellt. Man kann diese Werte dann zur Laufzeit mit einem einfachen echo-Kommando verändern. Je nach Distribution ist das bekannte sysctl als Interface implementiert. Hier wird wieder nur auf die Netzwerk-Parameter eingegangen; diese liegen in /proc/sys/net.
.

Änderungen mit dem echo-Kommando:
Hier anhand eines Beispieles abgefackelt. Ich möchte meine Maschine dazu bringen, das sie Pakete weitergibt, also ip-forwarding macht. Schlauerweise weiss ich schon, das es da irgendeinen Parameter gibt, der das bewerkstelligt. Und der wird wohl irgendwo bei den Netzeinstellungen, Internet (inet) oder IPv4 zu finden sein. Also los:

 
[root@elpequeno /root]# cd /proc/sys/net

[root@elpequeno net]# ls
802 core ethernet  ipv4  token-ring  unix

[root@elpequeno net]# cd ipv4

[root@elpequeno ipv4]# ls *forw*
ip_forward

[root@elpequeno ipv4]# cat ip_forward
0

[root@elpequeno ipv4]# echo 1 > ip_forward

[root@elpequeno ipv4]# cat ip_forward
1
 
Nun forwarded die Maschine - es sei nicht verschwiegen, das man diese Einstellung unter Linux pro Interface vornehmen kann.

Änderungen mit dem sysctl-Kommando:
Das geht im großen und ganzen wie unter *BSD. Zusätzlich gibt es noch den Schalter -p, der es erlaubt, ein File zu spezifizieren und einzulesen (Standard ist /etc/sysctl.conf).

Solaris - Unix von SUN
Ich habe noch nie verstanden, warum alle Leute so heiss auf Solaris sind - für mich ist es wie Traktorfahren. Jedenfalls wird der TCP/IP Stack mit dem ndd-Kommando getuned. Man kann sich die Parameter anzeigen lassen und sie mit dem Schalter set setzen: ndd
ndd -set
Es gibt eine Reihe von Devices (Module), meist in /dev, die man mit ndd tunen kann. Ein Beispiel:
ndd /dev/tcp
Alle Parameter eines Modules:
ndd /dev/icmp ?
oder mit dem ganzen Namen:
ndd /dev/udp xxx_xx yy_yyy
ändern mit
ndd -set xxx_xx Wert


[ Main | Local ]

[ Allgemein | UNIX | AIX | TCP-IP | TCP | ROUTING | DNS | NTP | NFS | FreeBSD | Linux | SMTP | Tracing | GPS ]

Copyright 2001-2014 by Orm Hager - Es gilt die GPL
Feedback bitte an: Orm Hager (orm@doc-tcpip.org )