ifconfig
perintah pada sistem operasi seperti FreeBSD dan OpenBSD telah diperbarui sejalan dengan sistem operasi lainnya. Saat ini dapat mengonfigurasi semua jenis pengaturan antarmuka jaringan pada sistem operasi tersebut, dan menangani berbagai protokol jaringan. BSD menyediakan ioctl()
dukungan untuk hal-hal ini.
Ini tidak terjadi di dunia Linux. Saat ini, ada tiga ifconfig
perintah:
ifconfig
dari GNU inetutilsjdebp % inetutils-ifconfig -l enp14s0 enp15s0 lo jdebp % inetutils-ifconfig lo lo Link encap:Local Loopback inet addr:127.0.0.1 Bcast:0.0.0.0 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:9087 errors:0 dropped:0 overruns:0 frame:0 TX packets:9087 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:51214341 TX bytes:51214341 jdebp %
-
ifconfig
dari NET-3 net-toolsjdebp % ifconfig -l ifconfig: option
-l' not recognised. ifconfig:
--help' gives usage information. jdebp % ifconfig lo lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> inet6 ::2 prefixlen 128 scopeid 0x80<compat,global> inet6 fe80:: prefixlen 10 scopeid 0x20<link> loop txqueuelen 1000 (Local Loopback) RX packets 9087 bytes 51214341 (48.8 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 9087 bytes 51214341 (48.8 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 jdebp % -
ifconfig
dari (versi 1.40 dari) nosh toolsetjdebp % ifconfig -l enp14s0 enp15s0 lo jdebp % ifconfig lo lo link up loopback running link address 00:00:00:00:00:00 bdaddr 00:00:00:00:00:00 inet4 address 127.0.0.1 prefixlen 8 bdaddr 127.0.0.1 inet4 address 127.53.0.1 prefixlen 8 bdaddr 127.255.255.255 inet6 address ::2 scope 0 prefixlen 128 inet6 address fe80:: scope 1 prefixlen 10 inet6 address ::1 scope 0 prefixlen 128 jdebp % sudo ifconfig lo inet4 127.1.0.2 alias jdebp % sudo ifconfig lo inet6 ::3/128 alias jdebp % ifconfig lo lo link up loopback running link address 00:00:00:00:00:00 bdaddr 00:00:00:00:00:00 inet4 address 127.0.0.1 prefixlen 8 bdaddr 127.0.0.1 inet4 address 127.1.0.2 prefixlen 32 bdaddr 127.1.0.2 inet4 address 127.53.0.1 prefixlen 8 bdaddr 127.255.255.255 inet6 address ::3 scope 0 prefixlen 128 inet6 address ::2 scope 0 prefixlen 128 inet6 address fe80:: scope 1 prefixlen 10 inet6 address ::1 scope 0 prefixlen 128 jdebp %
Seperti yang Anda lihat, inetutils GNU dan NET-3 net-tools ifconfig
s memiliki beberapa kekurangan yang nyata, sehubungan dengan IPv6, sehubungan dengan antarmuka yang memiliki banyak alamat, dan sehubungan dengan fungsionalitas seperti -l
.
Masalah IPv6 sebagian adalah beberapa kode yang hilang di alat itu sendiri. Tetapi pada dasarnya disebabkan oleh fakta bahwa Linux tidak (seperti sistem operasi lain) menyediakan fungsionalitas IPv6 melalui ioctl()
antarmuka. Itu hanya memungkinkan program melihat dan memanipulasi alamat IPv4 melalui jaringan ioctl()
s.
Sebaliknya, Linux menyediakan fungsionalitas ini melalui antarmuka yang berbeda, send()
dan recv()
pada keluarga soket khusus, dan agak aneh, AF_NETLINK
.
GNU dan NET-3 ifconfig
s bisa telah disesuaikan untuk menggunakan API baru ini. Argumen yang menentang hal itu adalah bahwa itu tidak portabel untuk sistem operasi lain, tetapi program-program ini dalam praktiknya sudah bukan portabel pokoknya jadi itu tidak banyak argumen.
Tapi mereka tidak disesuaikan, dan tetap seperti yang diramalkan sampai hari ini. (Beberapa orang mengerjakannya di berbagai titik selama bertahun-tahun, tetapi sayangnya, perbaikannya tidak pernah berhasil masuk ke dalam program. Misalnya:Bernd Eckenfels tidak pernah menerima tambalan yang menambahkan beberapa kemampuan netlink API ke NET-3 net-tools ifconfig
, 4 tahun setelah tambalan ditulis.)
Malahan, beberapa orang benar-benar menemukan kembali kumpulan alat sebagai ip
perintah, yang menggunakan API Linux baru, memiliki sintaks yang berbeda, dan menggabungkan beberapa fungsi lain di belakang command subcommand
yang modis -gaya antarmuka.
Saya membutuhkan ifconfig
yang memiliki sintaks baris perintah dan gaya keluaran FreeBSD ifconfig
(yang bukan GNU maupun NET-3 ifconfig
miliki, dan ip
yang mana pasti tidak punya). Jadi saya menulis satu. Sebagai bukti bahwa seseorang dapat menulis ifconfig
yang menggunakan API netlink di Linux, benar.
Jadi kebijaksanaan yang diterima tentang ifconfig
, seperti yang Anda kutip, tidak lagi benar. Itu sekarang tidak benar untuk mengatakan bahwa "ifconfig
tidak menggunakan netlink.". Selimut yang menutupi dua tidak menutupi tiga.
Itu selalu begitu tidak benar mengatakan bahwa "netlink lebih efisien". Untuk tugas yang dilakukan dengan ifconfig
, sebenarnya tidak ada banyak hal tentang efisiensi antara netlink API dan ioctl()
API. Seseorang membuat jumlah panggilan API yang hampir sama untuk setiap tugas yang diberikan.
Memang, setiap panggilan API adalah dua panggilan sistem dalam kasus netlink, berlawanan dengan yang ada di ioctl()
sistem. Dan bisa dibilang netlink API memiliki kelemahan bahwa pada sistem yang banyak digunakan, secara eksplisit menyertakan kemungkinan alat tidak pernah menerima pesan pemberitahuan yang menginformasikannya tentang hasil panggilan API.
Lebih jauh lagi, tidak benar untuk mengatakan bahwa ip
adalah "lebih serbaguna" daripada GNU dan NET-3 ifconfig
s karena menggunakan netlink . Ini lebih serbaguna karena melakukan lebih banyak tugas, melakukan hal-hal dalam satu program besar yang akan dilakukan dengan program terpisah selain ifconfig
. Itu tidak lebih fleksibel hanya karena API yang digunakan secara internal untuk melakukan tugas-tugas tambahan tersebut. Tidak ada yang melekat pada API tentang ini. Seseorang dapat menulis alat all-in-one yang menggunakan FreeBSD ioctl()
API, misalnya, dan juga menyatakan bahwa itu "lebih fleksibel" daripada ifconfig
individual , route
, arp
, dan ndp
perintah.
Seseorang dapat menulis route
, arp
, dan ndp
perintah untuk Linux yang juga menggunakan netlink API.
Bacaan lebih lanjut
- Jonathan de Boyne Pollard (2019).
ifconfig
. Panduan nosh . Perangkat lunak. - Eduardo Ferro (16-04-2009). ifconfig:melaporkan alamat ip / tambalan awal yang salah . Bug Debian #359676.
ifconfig
standar yang kami miliki di banyak distribusi sudah tidak digunakan lagi karena beberapa alasan. Berbicara dengan cara yang ketinggalan jaman dan terbatas dengan kernel, dan pada kenyataannya, tidak memahami lagi semua konfigurasi jaringan. Anda tidak akan dapat memanipulasi beberapa konfigurasi jaringan seperti ifconfig
versi yang dapat Anda lakukan dengan ip
. Selain itu, ifconfig
dukungan untuk ruang nama jaringan terbatas.
Sebagai cerita anekdot, saya menemukan alias IP antarmuka yang hanya terlihat di ip
dan bukan di SuSE ifconfig
.
Adapun perbedaan di balik layar:Dari ifconfig vs ip:Apa Perbedaan dan Membandingkan Konfigurasi Jaringan
Meskipun
ip
mungkin tampak agak rumit di situs pertama tetapi fungsinya jauh lebih luas daripada ifconfig. Ini secara fungsional diatur pada dua lapisan Networking Stack yaitu Layer 2 (Link Layer), Layer 3(IP Layer) dan melakukan pekerjaan semua perintah yang disebutkan di atas dari paket net-tools.Sedangkan
ifconfig
sebagian besar menampilkan atau memodifikasi antarmuka sistem, perintah ini mampu melakukan tugas-tugas berikut:
Menampilkan atau Memodifikasi properti Antarmuka.
Menambahkan, Menghapus entri Cache ARP bersamaan dengan membuat entri ARP Statis baru untuk host.
Menampilkan alamat MAC yang terkait dengan semua antarmuka.
Menampilkan dan memodifikasi tabel perutean kernel.
Salah satu sorotan utama yang memisahkannya dari ifconfig rekan kunonya adalah bahwa yang terakhir menggunakan ioctl untuk konfigurasi jaringan, yang merupakan cara interaksi yang kurang dihargai dengan kernel sementara yang pertama memanfaatkan mekanisme soket netlink untuk hal yang sama yang merupakan penerus ioctl yang jauh lebih fleksibel untuk antar- komunikasi antara kernel dan ruang pengguna menggunakan rtnetlink(yang menambahkan kemampuan manipulasi lingkungan jaringan).
Tentang penggunaan/keuntungan netlink:Dari LJ - Kernel Korner - Mengapa dan Cara Menggunakan Soket Netlink
Soket Netlink adalah IPC khusus yang digunakan untuk mentransfer informasi antara proses kernel dan ruang pengguna. Ini menyediakan tautan komunikasi dupleks penuh antara keduanya melalui API soket standar untuk proses ruang pengguna dan API kernel khusus untuk modul kernel. Soket Netlink menggunakan keluarga alamat AF_NETLINK.
.....
Mengapa fitur di atas menggunakan netlink alih-alih panggilan sistem, ioctls atau sistem file proc untuk komunikasi antara dunia pengguna dan kernel? Ini adalah tugas yang tidak sepele untuk menambahkan panggilan sistem, file ioctls atau proc untuk fitur baru; kami berisiko mencemari kernel dan merusak stabilitas sistem. Soket Netlink sederhana, meskipun:hanya konstanta, jenis protokol, yang perlu ditambahkan ke netlink.h. Kemudian, modul kernel dan aplikasi dapat langsung berbicara menggunakan API bergaya soket.
....
Soket Netlink adalah antarmuka yang fleksibel untuk komunikasi antara aplikasi ruang pengguna dan modul kernel. Ini menyediakan API soket yang mudah digunakan untuk aplikasi dan kernel. Ini memberikan fitur komunikasi lanjutan, seperti dupleks penuh, I/O buffer, multicast, dan komunikasi asinkron, yang tidak ada di IPC kernel/ruang pengguna lain.