Mehrere Verbindungen auf einen Server
-
Ich spiele grad ein wenig mit dem TCP/IP Verhalten unter Linux rum. Dabei ist mir folgendes Aufgefallen was ich gerne verstehen möchte. Wenn ich einen ganz simplen echo client und echo server schreibe(ohne fork), kann ich mich mehrmals(zeitgleich) auf den echo server verbinden. Allerdings wird nur der erste "bearbeitet". Beende ich den ersten client, ist automatisch der zweite an der Reihe.
Cached der Kernel automatisch alle weiteren aufgebauten TCP Verbindungen in einer Art Queue? Wie verhält es sich mit Traffic? Sprich der 2. Client sendet fleißig, während der Server noch den ersten abarbeitet?
-
Also ich will jetzt nix falsches erzählen, deshalb alle Angaben ohne Gewähr
Das TCP Protokoll baut ja auf der Schicht von IP auf, d.h. jedes TCP-Segment wird in einem IP-Paket gekapselt. Und soweit ich weiß wird jedes eingehende IP-Paket in einer Puffer-Warteschlange abgelegt wenn es nicht sofort weiter gereicht werden kann an die nächsthöhere Schicht (in deinem Fall also TCP). Ist der Puffer allerdings voll, dann wird das Paket einfach verworfen, was in deinem Fall aber natürlich nicht passieren kann.
Also hast du so gesehen auch recht. Und ja der 2. Client kann schön seine TCP-Anfragen senden, während der Server noch den 1. Client bedient. Die Anfragen werden dann eben wie gesagt im Puffer gespeichert und dann vom Server verarbeitet, wenn er mit dem Bedienen des 1. Clients fertig ist
-
Der listen(2)-Aufruf hat als 2. Parameter den backlog. Das gibt die Anzahl der Verbindungsanforderungen von Clients an, die vom Kernel gesammelt werden, ohne daß der Server accept verwendet. Erst wenn der backlog voll ist, wird eine weitere Verbindung abgelehnt.
Der 2. Client kann senden, bis der Empfangspuffer voll ist.