283 Stimmen

Was ist AF_INET, und warum brauche ich es?

Ich fange gerade an, mich mit Socket-Programmierung zu beschäftigen, und ich sehe immer wieder folgendes AF_INET .

Ich habe jedoch noch nie gesehen, dass etwas anderes an seiner Stelle verwendet wurde. Meine Dozenten sind nicht sehr hilfsbereit und sagen nur: "Man braucht es einfach".

Daher meine Fragen:

  • Was ist der Zweck von AF_INET ?
  • Wird stattdessen jemals etwas anderes verwendet?
    • Wenn nicht, warum ist es dort? Für mögliche Änderungen in der Zukunft?
    • Wenn ja, was und warum?

389voto

George Shore Punkte 3731

AF_INET es un a dAdresse f die verwendet wird, um die Art der Adressen zu bestimmen, mit denen Ihr Socket kommunizieren kann (in diesem Fall Internet Protocol v4-Adressen). Wenn Sie einen Socket erstellen, müssen Sie seine Adressfamilie angeben, und dann können Sie nur Adressen dieses Typs mit dem Socket verwenden. Der Linux-Kernel unterstützt zum Beispiel 29 andere Adressfamilien wie UNIX ( AF_UNIX ) Steckdosen und IPX ( AF_IPX ), und auch die Kommunikation mit IRDA und Bluetooth ( AF_IRDA y AF_BLUETOOTH aber es ist zweifelhaft, dass Sie diese auf einer so niedrigen Ebene verwenden werden).

In den meisten Fällen ist das Festhalten an AF_INET für die Socket-Programmierung über ein Netzwerk ist die sicherste Option. Es gibt auch AF_INET6 für Internetprotokoll v6-Adressen.

Ich hoffe, das hilft,

0 Stimmen

Können Sie eine der offiziellen (oder inoffiziellen, aber wirklich guten) Quellen oder Dokumentationen nennen, in denen diese AF_INET , AF_INET6 Normen usw. gefunden werden?

1 Stimmen

Versuchen Sie dies: docs.oracle.com/cd/E19120-01/open.solaris/817-4415/… kann es helfen

54voto

Jonathan Leffler Punkte 694013

Der Hauptzweck von AF_INET war es, andere mögliche Netzwerkprotokolle oder Adressfamilien zu ermöglichen (AF steht für Adressfamilie; PF_INET steht für die (IPv4) Internet-Protokollfamilie). Zum Beispiel gibt es wahrscheinlich immer noch einige Netware SPX/IPX-Netzwerke; es gab andere Netzwerksysteme wie DECNet, StarLAN und SNA, ganz zu schweigen von dem unausgegorenen ISO OSI (Open Systems Interconnection), und diese verwendeten nicht notwendigerweise die jetzt allgegenwärtige IP-Adresse, um den Peer-Host in Netzwerkverbindungen zu identifizieren.

Die allgegenwärtige Alternative zu AF_INET (das rückblickend eigentlich AF_INET4 hätte heißen sollen) ist AF_INET6, für die IPv6-Adressfamilie. IPv4 verwendet 32-Bit-Adressen; IPv6 verwendet 128-Bit-Adressen.

Sie können auch andere Werte sehen - aber die sind ungewöhnlich. Sie sind dazu da, um Alternativen und zukünftige Richtungen zu ermöglichen. Die Socket-Schnittstelle ist in der Tat sehr allgemein - das ist einer der Gründe, warum sie dort gedeiht, wo andere Netzwerkschnittstellen verkümmert sind.

Das Leben ist (meistens) einfacher geworden - seien Sie dankbar.

0 Stimmen

Vielen Dank für Ihre Antwort - ich schließe daraus, dass Ihre Antwort auf meine erste Frage darin besteht, dass es darum geht, das zu verwendende Netzwerkprotokoll zu definieren? Könnten Sie aber bitte die anderen Fragen genauer beantworten?

0 Stimmen

Gutes Argument für AF_INET6; andere Adressfamilien werden von einigen Betriebssystemen unterstützt.

18voto

Asish P Mathew Punkte 171

Sockets sind durch ihren Bereich, ihren Typ und ihr Transportprotokoll gekennzeichnet. Übliche Domänen sind:

  1. AF_UNIX: Adressformat ist UNIX-Pfadname

  2. AF_INET: Adressformat ist Host und Portnummer

(es gibt tatsächlich viele andere Optionen, die hier für spezielle Zwecke verwendet werden können). Normalerweise verwenden wir AF_INET für Socket-Programmierung

Referenz: http://www.cs.uic.edu/~troy/fall99/eecs471/sockets.html

15voto

avimehenwal Punkte 1362

Sie benötigen Argumente wie AF_UNIX oder AF_INET, um anzugeben, welche Art der Socket-Adressierung Sie für die Implementierung der IPC-Socket-Kommunikation verwenden möchten. AF steht für Address Family.

Wie im BSD-Standard Socket (übernommen im Python-Socket-Modul) werden Adressen wie folgt dargestellt:

  1. Für die Adressfamilie AF_UNIX/AF_LOCAL wird eine einzige Zeichenfolge verwendet. Diese Option wird für IPC auf lokalen Rechnern verwendet, für die keine IP-Adresse erforderlich ist.

  2. Für die AF_INET-Adressfamilie wird ein Paar (host, port) verwendet, wobei host eine Zeichenkette ist, die entweder einen Hostnamen in Internet-Domain-Notation wie 'daring.cwi.nl' oder eine IPv4-Adresse wie '100.50.200.5' darstellt, und port eine ganze Zahl ist. Wird für die Kommunikation zwischen Prozessen über das Internet verwendet.

AF_UNIX , AF_INET6 , AF_NETLINK , AF_TIPC , AF_CAN , AF_BLUETOOTH , AF_PACKET , AF_RDS sind andere Optionen, die anstelle der folgenden verwendet werden können AF_INET .

Diese Thread über die Unterschiede zwischen AF_INET und PF_INET könnte ebenfalls nützlich sein.

2voto

chandan Punkte 914

Sie definiert die Adressfamilie des Protokolls. Diese bestimmt die Art des erstellten Sockets. pocket pc unterstützt AF_INET.

der Inhalt der folgenden Seite ist recht anständig http://etutorials.org/Programming/Pocket+pc+Netzwerk+Programmierung/Kapitel+1.+Winsock/Streaming+TCP+Sockets/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X