Saya sangat penasaran, tetapi mengapa antarmuka jaringan tidak ada di /dev?
Apakah ada jenis perangkat lain yang tidak direpresentasikan sebagai simpul di bawah /dev?
Jawaban yang Diterima:
Pada banyak perangkat, operasi utama adalah mengirim byte dari komputer ke periferal, atau menerima byte dari periferal di komputer. Perangkat semacam itu mirip dengan pipa dan berfungsi dengan baik sebagai perangkat karakter. Untuk operasi yang tidak membaca dan menulis (seperti kontrol aliran pada saluran serial), perangkat menyediakan perintah ad-hoc yang disebut ioctl.
Beberapa perangkat sangat mirip dengan file biasa:mereka terbuat dari jumlah byte yang terbatas, dan apa yang Anda tulis pada posisi tertentu nantinya dapat dibaca dari posisi yang sama. Perangkat ini disebut perangkat blok.
Antarmuka jaringan lebih kompleks:apa yang mereka baca dan tulis bukanlah byte tetapi paket. Meskipun masih dimungkinkan untuk menggunakan antarmuka biasa dengan read
dan write
, itu akan menjadi canggung:mungkin setiap panggilan ke write
akan mengirim paket, dan setiap panggilan ke read
akan menerima sebuah paket (dan jika buffer terlalu kecil untuk memuat paket tersebut, paket tersebut akan hilang).
Antarmuka jaringan bisa ada karena perangkat hanya menyediakan ioctl
. Sebenarnya, inilah yang dilakukan beberapa varian unix, tetapi tidak untuk Linux. Ada beberapa keuntungan dari pendekatan ini; misalnya, di Linux, antarmuka jaringan dapat memanfaatkan udev. Tetapi keuntungannya terbatas, sehingga belum dilakukan.
Sebagian besar aplikasi terkait jaringan tidak peduli dengan antarmuka jaringan individual, mereka bekerja pada tingkat yang lebih tinggi. Misalnya, browser web ingin membuat koneksi TCP, dan server web ingin mendengarkan koneksi TCP. Untuk tujuan ini, yang akan berguna adalah perangkat untuk protokol jaringan tingkat tinggi, mis.
{ echo $'GET http://www.google.com/ HTTP/1.0r';
echo $'Host: www.google.comr';
echo $'r' >&0; cat; } <>/dev/tcp/www.google.com/80
Sebenarnya ksh dan bash menyediakan antarmuka seperti itu untuk klien TCP dan UDP. Namun, secara umum, aplikasi jaringan lebih kompleks daripada aplikasi pengakses file. Sementara sebagian besar pertukaran data dilakukan dengan panggilan analog dengan read
dan write
, membuat koneksi membutuhkan lebih banyak informasi daripada hanya nama file. Misalnya, mendengarkan koneksi TCP membutuhkan dua langkah:satu dilakukan saat server mulai mendengarkan, dan satu lagi dilakukan setiap kali klien terhubung. Langkah ekstra seperti itu tidak cocok dengan API file, yang merupakan alasan utama mengapa jaringan memiliki API sendiri.
Kelas perangkat lain yang biasanya tidak memiliki entri di /dev
di Linux (tetapi tidak pada beberapa varian unix lainnya) adalah adaptor video. Pada prinsipnya, adaptor video sederhana dapat diekspos sebagai perangkat framebuffer, yang dapat berupa perangkat blok yang terbuat dari blok yang mewakili warna setiap piksel. Adaptor video yang dipercepat dapat direpresentasikan sebagai perangkat karakter tempat aplikasi mengirim perintah. Di sini, kelemahan antarmuka perangkat adalah lambat:aplikasi yang menampilkan (dalam praktiknya, server X) perlu melakukan panggilan kernel setiap kali menampilkan sesuatu. Yang terjadi adalah server X kebanyakan menulis langsung ke memori adaptor video, karena lebih cepat.