Heim  >  Artikel  >  php教程  >  Einfaches Verständnis von Socket

Einfaches Verständnis von Socket

高洛峰
高洛峰Original
2016-12-13 09:53:011277Durchsuche

Einfaches Verständnis von Socket

Um Socket zu verstehen, müssen Sie sich zunächst mit der Einfaches Verständnis von Socket-Protokollfamilie vertraut machen. Einfaches Verständnis von Socket (Transmission Control Protocol/Internet Protocol) ist das Transmission Control Protocol/Internet Protocol Definiert, wie der Host Der Standard für die Verbindung zum Internet und wie Daten zwischen ihnen übertragen werden.

Wörtlich genommen ist Einfaches Verständnis von Socket die Sammelbezeichnung der TCP- und IP-Protokolle, in Wirklichkeit aber Einfaches Verständnis von Socket Unter Protokoll versteht man das gesamte Einfaches Verständnis von Socket-Protokoll der Internet-IP-Protokollfamilie. Im Gegensatz zu den sieben Schichten des ISO-Modells klassifiziert das Einfaches Verständnis von Socket-Protokollreferenzmodell alle Protokolle der Einfaches Verständnis von Socket-Serie in vier abstrakte Schichten

Anwendungsschicht: TFTP, HTTP, SNMP, FTP, SMTP, DNS, Telnet usw.

Transportschicht: TCP, UDP

Netzwerkschicht: IP, ICMP, OSPF, EIGRP, IGMP

Datenverbindungsschicht: SLIP, CSLIP, PPP, MTU

Jede Abstraktionsschicht baut auf den von der unteren Schicht bereitgestellten Diensten auf und stellt Dienste für die höhere Schicht bereit. Es sieht so aus

Einfaches Verständnis von Socket

Einfaches Verständnis von Socket

Es wird geschätzt, dass Studierende, die diesen Artikel lesen möchten, ein gewisses Verständnis dafür haben. Darüber hinaus habe ich auch ein wenig Wissen, sodass ich es nicht im Detail erläutern werde. Interessierte Studierende können online nach Informationen suchen .

Im Einfaches Verständnis von Socket-Protokoll sind zwei Internet-Hosts über zwei Router und entsprechende Schichten verbunden. Die Anwendungen auf jedem Host führen über einige Datenkanäle miteinander Lesevorgänge aus

Einfaches Verständnis von Socket协议

Socket

Wir kennen die grundlegendste Voraussetzung für die Kommunikation zwischen zwei Prozessen In der lokalen Prozesskommunikation können wir PID verwenden, um einen Prozess eindeutig zu identifizieren. Die Wahrscheinlichkeit eines PID-Konflikts zwischen zwei Prozessen im Netzwerk ist jedoch sehr hoch Jetzt wissen wir, dass die IP-Adresse der IP-Schicht den Host eindeutig identifizieren kann und dass das TCP-Schichtprotokoll und die Portnummer einen Prozess des Hosts eindeutig identifizieren können. Auf diese Weise können wir die IP-Adresse + verwenden Protokoll + Portnummer zur eindeutigen Identifizierung eines Prozesses im Netzwerk.

Nachdem sie Prozesse im Netzwerk eindeutig identifizieren konnten, können sie über Sockets kommunizieren. Was ist ein Socket? Wir übersetzen Socket oft als Socket, eine Abstraktionsschicht zwischen der Anwendungsschicht und der Transportschicht. Sie abstrahiert die komplexen Operationen der Einfaches Verständnis von Socket-Schicht in mehrere einfache Schnittstellen, damit die Anwendungsschicht den implementierten Prozess im Netzwerk aufruft Kommunikation.

Einfaches Verständnis von Socket

Socket stammt von UNIX. Unter der Unix-Philosophie, dass alles eine Datei ist, ist Socket eine Implementierung des „Open-Read/Write-Close“-Modus Jeder Client verwaltet eine „Datei“. Nachdem die Verbindung hergestellt und geöffnet wurde, kann er Inhalte in seine eigene Datei schreiben, damit die andere Partei sie lesen kann. Die Datei wird geschlossen, wenn die Kommunikation endet.

Socket-Kommunikationsprozess

Socket ist die Implementierung des „Open-Read/Write-Close“-Modus. Am Beispiel eines Sockets, der die TCP-Protokollkommunikation verwendet, ist der Interaktionsprozess ungefähr so Dies

Einfaches Verständnis von Socket

Der Server erstellt einen Socket basierend auf dem Adresstyp (IPv4, IPv6), dem Socket-Typ und dem Protokoll

Der Server bindet die IP-Adresse und Portnummer zum Socket

Der Server-Socket wartet auf Portnummernanfragen und ist jederzeit bereit, Verbindungen vom Client zu empfangen. Zu diesem Zeitpunkt ist der Socket des Servers nicht geöffnet

Der Client erstellt den Socket

Der Client öffnet den Socket und versucht gemäß der IP-Adresse und der Portnummer des Servers, eine Verbindung zum Server-Socket herzustellen

Der Server-Socket empfängt die Client-Socket-Anfrage und öffnet sie passiv und beginnt mit dem Empfang von Client-Anfragen, bis der Client Verbindungsinformationen zurückgibt. Zu diesem Zeitpunkt tritt der Socket in den Blockierungszustand ein. Das sogenannte Blockieren bedeutet, dass die Methode „accept()“ erst zurückkehrt, wenn der Client die Verbindungsinformationen zurückgibt und beginnt, die nächste Client-Verstehensanforderung zu empfangen.

Der Client stellt erfolgreich eine Verbindung her und sendet die Verbindungsstatusinformationen an den Server

Die Server-Akzeptanzmethode kehrt zurück und die Verbindung ist erfolgreich

Der Client schreibt Informationen in den Socket

Der Server liest die Informationen

Der Client wird geschlossen

Serverseitiges Herunterfahren

Drei-Wege-Handshake

Im Einfaches Verständnis von Socket-Protokoll stellt das TCP-Protokoll eine zuverlässige Verbindung durch Drei-Wege-Handshake her

Einfaches Verständnis von Socket

Erster Handshake: Client Versuchen Sie, eine Verbindung zum Server herzustellen und ein Syn-Paket an den Server zu senden (Sequenznummern synchronisieren), syn = j, der Client wechselt in den Status SYN_SEND und wartet auf die Bestätigung des Servers

Der zweite Handshake: der Server empfängt das Client-Syn-Paket und bestätigt (ack=j+1) und sendet gleichzeitig ein SYN-Paket (syn=k), also ein SYN+ACK-Paket, an den Client. Zu diesem Zeitpunkt wechselt der Server in den SYN_RECV-Status

Dritter Handshake: Dritter Handshake: Client Der Client empfängt das SYN+ACK-Paket vom Server und sendet das Bestätigungspaket ACK (ack=k+1) an den Server. Nachdem das Paket gesendet wurde, werden der Client und der Der Server wechselt in den ESTABLISHED-Status und schließt den Drei-Wege-Handshake ab

Schauen Sie genauer hin. Der Teil, der die Verbindung zwischen dem Server-Socket und dem Client-Socket herstellt, ist eigentlich der berühmte Drei-Wege-Handshake

 Einfaches Verständnis von Socket编程API

Socket-Programmier-API

Wie bereits erwähnt, ist der Socket „Open-Read“. Um den „Write-Close“-Modus zu implementieren, wollen wir kurz verstehen, welche APIs der Socket für Anwendungen bereitstellt Nehmen wir als Beispiel das TCP-Protokoll und schauen wir uns die Socket-API unter Unix an (PHP und sogar die Namen sind fast gleich). Hier erkläre ich kurz die Funktion und die Parameter der Methode. Studenten, die an der spezifischen Verwendung interessiert sind, können den Link in der Blog-Referenz überprüfen oder online suchen

int Einfaches Verständnis von Socket (int domain, int type, int Protocol);

Weisen Sie einen Socket-Deskriptor und die von ihm verwendeten Ressourcen basierend auf der angegebenen Adressfamilie, dem Datentyp und dem Protokoll zu.

Domäne: Protokollfamilie, häufig verwendete sind AF_INET, AF_INET6, AF_LOCAL, AF_ROUTE, wobei AF_INET die Verwendung der IPv4-Adresse darstellt

Typ: Socket-Typ, häufig verwendete Socket-Typen sind SOCK_STREAM, SOCK_DGRAM, SOCK_RAW, SOCK_PACKET, SOCK_SEQPACKET usw.

Protokoll: Protokoll. Zu den häufig verwendeten Protokollen gehören IPPROTO_TCP, IPPTOTO_UDP, IPPROTO_SCTP, IPPROTO_TIPC usw.

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

Geben Sie eine Adressfamilie ein Dem Socket wird eine bestimmte Adresse zugewiesen

sockfd:Socket-Deskriptor, also die Socket-Referenz

addr: die an sockfd zu bindende Protokolladresse

addrlen: die Länge der Adresse

Normalerweise wird der Server zu Beginn der Bereitstellung von Diensten an eine bekannte Adresse (z. B. IP-Adresse + Portnummer) gebunden, und Kunden können über diese eine Verbindung zum Server herstellen Sie müssen es nicht angeben, das System weist Ihnen automatisch eine Kombination aus Portnummer und Ihrer eigenen IP-Adresse zu. Aus diesem Grund ruft der Server normalerweise bind() auf, bevor er lauscht, aber der Client ruft es nicht auf. Stattdessen generiert das System zufällig eines, wenn connect().

int listen(int sockfd, int backlog);

Listening Einfaches Verständnis von Socket

sockfd: Socket-Deskriptor zum Abhören

backlog: entsprechendes The maximale Anzahl von Verbindungen, die ein Socket in die Warteschlange stellen kann

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

Mit einem Socket verbinden

sockfd: Socket-Deskriptor des Clients

addr: Socket-Adresse des Servers

addrlen: Länge der Socket-Adresse

int Accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen ; Ende Socket-Adresse

addrlen: Länge der Socket-Adresse

ssize_t read(int fd, void *buf, size_t count);

Socket-Inhalt lesen

fd: Socket-Deskriptor

buf: Puffer

Anzahl: Pufferlänge

ssize_t write(int fd, const void *buf, size_t count) ;

Das Schreiben von Inhalten in den Socket bedeutet eigentlich das Senden von Inhalten

fd: Einfaches Verständnis von Socket descriptor

buf: buffer

count: buffer Area length

int close(int fd);

Socket wird als geschlossen markiert, sodass der Referenzzähler des entsprechenden Socket-Deskriptors -1 ist. Der TCP-Client wird ausgelöst sendet eine Beendigungsanforderung an den Server.

Referenz

Linux-Socket-Programmierung (nicht beschränkt auf Linux)

Aufdecken der Socket-Programmierung


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn