Was ist, wenn 2 Sitzungsebenen denselben Quellport generieren?

0

Kann die Session-Layer-Funktion einer Anwendung einen Quellport erzeugen, der bereits von einer anderen Anwendung für eine aktuelle TCP-Verbindung verwendet wird? Wie werden diese einzigartig gehalten? Ich kann mir nur vorstellen, wenn Windows über eine zentrale Sitzungsebene verfügt, die für alle Anwendungen, deren Funktionen sie aufrufen können, universell ist.

Lewis Kelsey
quelle

Antworten:

3

TCP funktioniert am Transport Schicht; nicht Sitzungsebene.

TCP wird tatsächlich vom Betriebssystem gehandhabt. Einzelne Anwendungen (unabhängig davon, ob sie über eine Sitzungsebene verfügen oder nicht) erstellen keine eigenen TCP-Pakete. Anwendungen stellen nur Anforderungen an das Betriebssystem, um einen TCP-Socket zu öffnen, ihn mit einer Remote-Adresse zu verbinden: Port und senden / empfangen Daten über diesen. Heutzutage wird dies fast überall verwendet BSD-Sockets-API oder etwas, das es ähnelt.

Standardmäßig ist die lokal Der Port für TCP-Sockets wird vom Betriebssystem zufällig zugewiesen. Anwendungen können anfordern einen bestimmten lokalen Port (auch als "Binden" bezeichnet), das Betriebssystem kann die Anforderung jedoch ablehnen, wenn der Socket nicht eindeutig ist. Gleiches gilt für "Client" - und "Server" -Anwendungen gleichermaßen.

Das fernbedienung port muss nicht eindeutig sein (dh Sie können viele HTTP-Clients gleichzeitig verwenden) - nur das Tupel {localaddr, localport, remoteaddr, remoteport} muss eindeutig sein.

(Beachten Sie jedoch, dass, obwohl TCP-Verbindungen durch ein 4-Tupel identifiziert werden, das Betriebssystem strengere Regeln hat und die Bindeanforderung ablehnt, wenn der lokale Port bereits von verwendet wird irgendein Verbindung, auch wenn andere Parameter dieser Verbindung unterschiedlich sind.)




Randnotiz: dort ist eigentlich ein Feature, genannt " rohe Steckdosen "und auf privilegierte Anwendungen beschränkt, die es ihnen ermöglichen, IP - Pakete mit einer beliebigen Protokoll - ID und beliebigen Headern zu erzeugen.

Was passiert also, wenn eine Anwendung versucht, ihre eigenen TCP-Pakete über Raw-Sockets zu generieren? Das Betriebssystem verhindert nicht, dass die Pakete gesendet werden. Die Anwendung kann jedoch auch nicht verhindern, dass das Betriebssystem auf eingehende Antworten reagiert.

Zum Beispiel kann die Anwendung ein handgefertigtes TCP-SYN senden und ein SYN / ACK empfangen - aber das Betriebssystem ebenfalls empfängt das gleiche TCP SYN / ACK und da es zu einer unbekannten Verbindung gehört, sendet das Betriebssystem einen TCP-RST, der den Handshake beendet.

grawity
quelle