Was ist, wenn 2 Sitzungsebenen denselben Quellport generieren?

388
Lewis Kelsey

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 geeignet ist, deren Funktionen sie aufrufen können, oder zumindest die Verwaltung des Quellportports. Ist dies der Fall?

0

1 Antwort auf die Frage

3
grawity

TCP arbeitet auf der Transportschicht . 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 universell mithilfe der BSD Sockets-API oder einer ähnlichen Funktion durchgeführt.

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

Der Remote- Port muss nicht eindeutig sein (dh Sie können mehrere HTTP-Clients gleichzeitig verwenden) - nur das Tupel muss eindeutig sein.

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




Randbemerkung: Es gibt tatsächlich eine Funktion, die als " Raw Sockets " bezeichnet wird und auf privilegierte Anwendungen beschränkt ist, die es ihnen ermöglicht, IP-Pakete mit einer beliebigen Protokoll-ID und beliebigen Kopfzeilen zu generieren.

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 eine von Hand gefertigte TCP SYN senden und eine SYN / ACK empfangen - aber das OS auch erhält die gleiche TCP SYN / ACK, und weil es zu einer unbekannten Verbindung gehört, wird das OS ein TCP RST zur Einstellung des Handshake senden.