GNU/Linux >> Belajar Linux >  >> Linux

perintah ip vs ifconfig pro dan kontra

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 inetutils
    jdebp % 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-tools
    jdebp % 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 toolset
    jdebp % 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.


Linux
  1. Tonton perintah dan tugas dengan perintah jam tangan Linux

  2. Pengantar perintah Linux chgrp dan newgrp

  3. Perintah Linux:pekerjaan, bg, dan fg

  1. Cara Menonaktifkan Perintah Shutdown dan Reboot di Linux

  2. 11 Perintah "ssh" dan "scp" yang berguna di Linux

  3. Perbedaan antara ${} dan $() di Bash

  1. Pelajari Perbedaan Antara Perintah "su" dan "su -" di Linux

  2. Menjalankan Perintah Linux di Latar Belakang dan Latar Depan

  3. Temukan File dengan Perintah Temukan dan Temukan di Linux