Wenn wir einen Listening-Socket erstellen, gibt er uns einen Deskriptor zurück (sagen wir Root-Deskriptor) und wir binden diesen Deskriptor an eine Adresse. Immer wenn eine neue Client-Verbindung verfügbar ist, informiert uns der Root-Deskriptor und wir akzeptieren diese neue Verbindung und erhalten für jeden Client einen eindeutigen Deskriptor (sagen wir Client-Deskriptor). Von nun an können wir mit diesem Client über diesen Deskriptor kommunizieren. Client-Informationen werden in dem separaten Inode gespeichert, auf den der Client-Deskriptor verweist. Dadurch konnte Linux die jeweiligen Client-Daten an einen jeweiligen Deskriptor übermitteln.
Wenn das oben Gesagte richtig ist (korrigieren Sie mich bitte, wenn ich es falsch verstanden habe), dann habe ich Zweifel. Welche Client-Informationen werden im Inode gespeichert? Wie wird der Client von Linux eindeutig identifiziert?
Antwort1
Die Protokolle TCP/IP und UDP/IP kennen eine "Sitzung", die durch lokale und entfernte IP-Adressen sowie Ports definiert ist [1]. Ein TCP/IP-Paket enthält beispielsweise Quell- und Ziel-IP-Adressen sowie Ports [2]. Ein Server oder Client (zum Beispiel Firefox), der mehr als eine Verbindung offen hat, unterscheidet auf der OSI-Sitzungsschicht [3] nach Adresse und Port.
Bitte öffnen Sie eine Shell und führen Sie sie als Root aus, während Sie einen Webbrowser verwenden
netstat -tulpan
um aktuelle und aktive Verbindungen anzuzeigen [4].
Beispielausgabe:
# netstat -tulpan
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1966/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1902/cupsd
tcp 0 0 192.168.1.16:57374 172.217.23.165:443 ESTABLISHED 4730/firefox-bin
tcp 0 0 192.168.1.16:55478 104.26.11.30:443 ESTABLISHED 4730/firefox-bin
udp 0 0 127.0.0.1:53 0.0.0.0:* 1996/named
Die Zeilen zeigen „HERGESTELLTE“ Verbindungen von Firefox mit unterschiedlichen lokalen Ports, sodass Firefox erkennen kann, welches Paket die Antwort auf welche Anfrage ist.
Andere Zeilen mit dem Status LISTEN sind lokale Programme, die als Serverprozess ausgeführt werden, darunter sshd
(Secure Shell Server), cupsd
(Drucker-Daemon) und named
(Bind-Nameserver). Diese akzeptieren eingehende Verbindungen.
Referenzen für weitere Informationen:
[1]https://en.wikipedia.org/wiki/Port_(Computernetzwerk)
[2]https://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_segment_structuresowiehttps://en.wikipedia.org/wiki/IPv4_header#Header
Antwort2
Wenn Sie dies tun, listen
geben Sie einen Port an, da der Port bekannt sein muss. Dieses Ende hat eine IP (oder mehrere) und einen Port.
Wenn Sie dies tun, connect
geben Sie die IP und den Port des Remote- listen
Servers an. Die lokale IP wird vom Betriebssystem bestimmt und ein Port wird zugewiesen (es kann eine beliebige Nummer sein).
Die Verbindung kann wie folgt identifiziert werden: ( (remote IP, remote port), (local IP, local port) )
Dadurch wird eine Obergrenze von 64.000 Verbindungen zu jedem Remote-Port von einer beliebigen IP-Adresse aus festgelegt.