GNU/Linux >> Znalost Linux >  >> Linux

Proč nejsou síťová rozhraní v /dev jako jiná zařízení?

Hlavně mě to zajímá, ale proč nejsou síťová rozhraní v /dev?
Existují nějaké další druhy zařízení, která nejsou reprezentována jako uzel pod /dev?

Přijatá odpověď:

Na mnoha zařízeních jsou hlavní operace odesílání bajtů z počítače do periferie nebo přijímání bajtů z periferie v počítači. Taková zařízení jsou podobná dýmkám a fungují dobře jako znaková zařízení. Pro operace, které nejsou čtením a zápisem (jako je řízení toku na sériové lince), zařízení poskytuje ad-hoc příkazy zvané ioctl.

Některá zařízení jsou velmi podobná běžným souborům:skládají se z konečného počtu bajtů a to, co zapíšete na danou pozici, lze později číst ze stejné pozice. Tato zařízení se nazývají bloková zařízení.

Síťová rozhraní jsou složitější:to, co čtou a zapisují, nejsou bajty, ale pakety. I když by stále bylo možné používat obvyklé rozhraní s read a write , bylo by to nepříjemné:pravděpodobně každé volání write pošle paket a každé volání read přijme paket (a pokud je vyrovnávací paměť příliš malá na to, aby se do ní vešel, paket by byl ztracen).

Síťová rozhraní mohou existovat jako zařízení poskytující pouze ioctl . Ve skutečnosti to dělají některé varianty unixu, ale ne Linux. Tento přístup má určitou výhodu; například v Linuxu by síťová rozhraní mohla využívat udev. Ale výhody jsou omezené, a proto to nebylo provedeno.

Většina síťových aplikací se nestará o jednotlivá síťová rozhraní, pracují na vyšší úrovni. Například webový prohlížeč chce vytvářet TCP spojení a webový server chce naslouchat TCP spojením. Pro tento účel by byla užitečná zařízení pro vysokoúrovňové síťové protokoly, např.

{ echo $'GET http://www.google.com/ HTTP/1.0r';
  echo $'Host: www.google.comr';
  echo $'r' >&0; cat; } <>/dev/tcp/www.google.com/80

Ksh a bash ve skutečnosti poskytují takové rozhraní pro klienty TCP a UDP. Obecně jsou však síťové aplikace složitější než aplikace pro přístup k souborům. Zatímco většina výměn dat se provádí pomocí volání analogických k read a write , navázání připojení vyžaduje více informací než jen název souboru. Například naslouchání připojení TCP má dva kroky:jeden se provede, když server začne naslouchat, a druhý se provede pokaždé, když se klient připojí. Takové dodatečné kroky se do souborového API nehodí, což je hlavní důvod, proč má síť vlastní API.

Související:AC vazební kondenzátory pro vysokorychlostní diferenciální rozhraní?

Další třída zařízení, která obvykle nemá položky v /dev na Linuxu (ale na některých jiných unixových variantách) jsou grafické adaptéry. V principu by jednoduché video adaptéry mohly být vystaveny jako framebuffer zařízení, což by mohla být bloková zařízení vyrobená z bloků reprezentujících barvu každého pixelu. Akcelerované grafické adaptéry by mohly být reprezentovány jako znaková zařízení, do kterých aplikace posílají příkazy. Zde je nevýhodou rozhraní zařízení, že je pomalé:zobrazovací aplikace (v praxi X server) by musela provádět volání jádra, kdykoli něco zobrazuje. Místo toho se stane, že X server většinou zapisuje přímo do paměti grafického adaptéru, protože je rychlejší.


Linux
  1. Linux – proč `/dev/ptmx` a `/dev/pts/ptmx` nejsou soubory zařízení?

  2. Kdy použít /dev/random vs /dev/urandom?

  3. Kdy mám použít /dev/shm/ a kdy /tmp/?

  1. Proč je v Linuxu tolik /dev/tty?

  2. Proč se obsah /dev/shm/ automaticky odstraňuje

  3. Proč dávat věci jiné než /home do samostatného oddílu?

  1. Jak Linux používá /dev/tty a /dev/tty0

  2. echo nebo print /dev/stdin /dev/stdout /dev/stderr

  3. Proč jsou < nebo > vyžadovány pro použití /dev/tcp