Apa itu AF_INET, dan mengapa saya membutuhkannya?

201

Saya memulai pemrograman soket, dan saya terus melihat ini AF_INET.

Namun, saya belum pernah melihat benda lain digunakan sebagai gantinya. Dosen saya tidak begitu membantu dan hanya mengatakan "Anda hanya membutuhkannya".

Jadi pertanyaan saya:

  • Apa tujuannya AF_INET?
  • Apakah ada hal lain yang pernah digunakan selain itu?
    • Jika tidak, mengapa ada di sana? Untuk kemungkinan perubahan di masa depan?
    • Jika ya, apa dan mengapa?
Menghancurkan
sumber

Jawaban:

269

AF_INETadalah keluarga alamat yang digunakan untuk menunjuk jenis alamat yang dapat berkomunikasi dengan soket Anda (dalam hal ini, alamat Internet Protocol v4). Saat Anda membuat soket, Anda harus menentukan keluarga alamatnya, dan kemudian Anda hanya bisa menggunakan alamat jenis itu dengan soket. Kernel Linux, misalnya, mendukung 29 keluarga alamat lain seperti AF_UNIXsoket UNIX ( ) dan IPX ( AF_IPX), dan juga komunikasi dengan IRDA dan Bluetooth ( AF_IRDAdan AF_BLUETOOTH, tetapi diragukan Anda akan menggunakannya pada tingkat yang rendah).

Untuk sebagian besar, bertahan dengan AF_INETpemrograman soket melalui jaringan adalah pilihan paling aman. Ada juga AF_INET6untuk alamat Internet Protocol v6.

Semoga ini membantu,

George Shore
sumber
43

Tujuan utama AF_INET adalah untuk memungkinkan kemungkinan protokol jaringan atau keluarga alamat lainnya (AF untuk keluarga alamat; PF_INET adalah untuk keluarga protokol internet (IPv4)). Misalnya, mungkin masih ada beberapa jaringan Netware SPX / IPX; ada sistem jaringan lain seperti DECNet, StarLAN, dan SNA, belum lagi ISO OSI (Open Systems Interconnection) yang tidak diperanakkan, dan ini tidak serta-merta menggunakan alamat IP yang sekarang ada di mana-mana untuk mengidentifikasi host host dalam koneksi jaringan.

Alternatif di mana-mana untuk AF_INET (yang, dalam retrospeksi, seharusnya dinamai AF_INET4) adalah AF_INET6, untuk keluarga alamat IPv6. IPv4 menggunakan alamat 32-bit; IPv6 menggunakan alamat 128-bit.

Anda mungkin melihat beberapa nilai lain - tetapi mereka tidak biasa. Itu ada untuk memungkinkan alternatif dan arah masa depan. Antarmuka soket sebenarnya sangat umum - yang merupakan salah satu alasan ia berkembang di mana antarmuka jaringan lain telah layu.

Hidup (sebagian besar) menjadi lebih sederhana - bersyukur.

Jonathan Leffler
sumber
Terima kasih atas tanggapan Anda - Saya menyimpulkan bahwa jawaban Anda untuk pertanyaan pertama saya adalah bahwa tujuannya adalah untuk menentukan protokol jaringan apa yang digunakan? Bisakah Anda lebih spesifik tentang pertanyaan lain?
Smashery
Poin bagus tentang AF_INET6; keluarga alamat lain didukung pada beberapa OS.
MarkR
15

Anda memerlukan argumen seperti AF_UNIX atau AF_INET untuk menentukan jenis soket yang akan Anda gunakan untuk mengimplementasikan komunikasi soket IPC. AF adalah singkatan dari Family Address.

Seperti pada alamat standar Socket BSD (diadopsi dalam modul soket Python) direpresentasikan sebagai berikut:

  1. Satu string digunakan untuk keluarga alamat AF_UNIX / AF_LOCAL. Opsi ini digunakan untuk IPC pada mesin lokal di mana tidak ada alamat IP yang diperlukan.

  2. Sepasang (host, port) digunakan untuk keluarga alamat AF_INET, di mana host adalah string yang mewakili nama host dalam notasi domain Internet seperti 'daring.cwi.nl' atau alamat IPv4 seperti '100.50.200.5', dan porta adalah bilangan bulat. Digunakan untuk berkomunikasi antar proses melalui Internet.

AF_UNIX, AF_INET6, AF_NETLINK, AF_TIPC, AF_CAN, AF_BLUETOOTH, AF_PACKET, AF_RDS adalah pilihan lain yang bisa digunakan daripada AF_INET .

Utas ini tentang perbedaan antara AF_INET dan PF_INET mungkin juga berguna.

Avi Mehenwal
sumber
14

Socket ditandai oleh domain, jenis dan protokol transportnya. Domain umum adalah:

  1. AF_UNIX: format alamat adalah UNIX pathname

  2. AF_INET: format alamat adalah host dan nomor port

(sebenarnya ada banyak opsi lain yang dapat digunakan di sini untuk tujuan khusus). biasanya kita menggunakan AF_INET untuk pemrograman soket

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

Asish P Mathew
sumber