Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Windows Phone
  • Çfarë është NFS? Sistemi i skedarëve të rrjetit. Protokolli i qasjes në sistemin e skedarëve të rrjetit

Çfarë është NFS? Sistemi i skedarëve të rrjetit. Protokolli i qasjes në sistemin e skedarëve të rrjetit

NFS ju lejon të ndani drejtoritë në një makinë Unix. Pasiguria e NFS, dhe në veçanti NIS, është e lidhur me RPC - për sa i përket numrit të shfrytëzimeve të ndryshme, RPC duket të jetë lideri jozyrtar (përveç Sendmail). Meqenëse këto protokolle janë të destinuara për rrjete të brendshme, ato do të duhet të mbrohen nga përdoruesit "e tyre". Edhe pse para përdorimit të tyre duhet të vendosni nëse ato janë vërtet të nevojshme.

Në një rrjet shtëpiak, ato mund të jenë mjaft të dobishme, por në një rrjet të korporatës, për arsye sigurie, është më mirë të gjeni një alternativë më të sigurt.

Sistemi i skedarëve NFS.

Sistemi i skedarëve të rrjetit (NFS) u zhvillua nga Sun si një mjet për të aksesuar skedarët e vendosur në makina të tjera Unix brenda një rrjeti lokal. NFS nuk u krijua fare me sigurinë në mendje, gjë që ka çuar në shumë dobësi gjatë viteve.

NFS mund të ekzekutohet mbi TCP ose UDP dhe përdor një sistem RPC, që do të thotë se aplikacionet e mëposhtme zakonisht të cenueshme duhet të ekzekutohen: portmapper, nfs, nlockmgr (i kyçur), rquotad, statd dhe mountd.

Nuk ka nevojë të ekzekutoni NFS - duhet të gjeni një zgjidhje alternative. Nëse NFS është ende i nevojshëm, këtu do të flasim se si të minimizojmë rrezikun e përdorimit të tij.

/etj/eksportet

Hapi i parë është të zgjidhni makinat që do të eksportojnë sistemet e tyre të skedarëve. Pastaj mund të përcaktoni se cilat makina lejohen të lidhen me serverët NFS (ose serverin, nëse ka një të tillë) në rrjet. Nuk ka nevojë të përdoret NFS në makineritë e lidhura drejtpërdrejt (direkt) në internet. Pasi të përzgjidhen makinat, duhet të zgjidhni drejtoritë në këto makina që do të eksportohen.

Drejtoritë e eksportit përcaktohen në skedarin /etc/exports. Formati i çdo hyrjeje është i thjeshtë: emri i drejtorisë, lista e përdoruesve të lejuar qasja dhe mënyra e hyrjes. P.sh.

Qasja e plotë (lexo/shkruaj) në drejtorinë /home/user lejohet në makinë me adresën IP 10.0.0.6. Gjëja më e mirë nuk është të jepni akses të plotë, por ta kufizoni atë në akses vetëm për lexim (ro). Përveç kësaj, ju gjithashtu mund të specifikoni opsionet e mëposhtme:

  • Sigurt- Kërkesa për montim duhet të vijë nga një port i privilegjuar (i numëruar deri në 1024). Kjo do të thotë që komanda mount është futur nga një përdorues me privilegje rrënjësore.
  • Root_kungull- një kërkesë nga përdoruesi rrënjë do të konsiderohet si një kërkesë nga një përdorues anonim. Kjo ju lejon të shkaktoni më pak dëm në sistem. Ky opsion duhet të aktivizohet.
  • Gjith_kungull- të gjitha kërkesat (jo vetëm nga përdoruesi rrënjë) do të konsiderohen se vijnë nga një përdorues anonim. I dobishëm për drejtoritë e eksportuara publikisht.

Nëse një cracker me qasje rrënjësore fiton akses në një makinë të cilës i jepet akses rw në drejtorinë e specifikuar në /etc/exports, ai do të fitojë kontrollin e plotë të sistemit të skedarëve, kështu që nuk mund të eksportojë direktoriumin rrënjë (/), dhe sistemi- direktori të rëndësishme, për shembull /usr, /bin, /sbin, /lib, /opt dhe /etc. Drejtoritë kryesore të përdoruesve janë të mira për eksport.

Në anën e klientit, montimi i një sistemi skedar të përbashkët duhet të bëhet duke specifikuar opsionin -o nosuid:

# montoj -t nfs -o nosuid 10.0.0.3:/home/user/files /mnt/home/frank

Kjo do të parandalojë që një cracker që ka akses në serverin NFS të fitojë qasje rrënjësore te klientët.

Kufizimi i aksesit.

Pavarësisht nga shërbimi, IPTables duhet të përdoren për të kufizuar aksesin në makinë. Në rastin e një serveri NFS, kjo është veçanërisht e rëndësishme. Kur përdorni IPTables, duhet të mbani mend se daemon NFS përdor portin 2049/TCP/UDP.

Disa shërbime RPC, si portmapper dhe NFS, përdorin porte të vazhdueshme (113 dhe 2049/tcp/udp, respektivisht), por shërbime të tjera RPC kanë porte jo të qëndrueshme, gjë që e bën të vështirë filtrimin e paketave duke përdorur IPTables. E vetmja gjë që dihet është se RPC-të përdorin porte në rangun 32768-65535.

Nëse jeni duke përdorur kernel 2.4.13 ose më të ri, atëherë përdorni opsionin -p<порт>ju mund të specifikoni portin e saktë për çdo shërbim RPC.

Le të shohim funksionin start() nga /etc/rc.d/init.d/nfslock, i cili përdoret për të nisur nsflock:

start()(

#. Filloni demonët.

nëse [ "$USERLAND_LOCKD" ]; pastaj

echo -n $"Fillimi i kyçjes së NFS: "

daemon rpc.bllokuar

echo -n $"Nisja e NFS statd: "

daemon rpc.statd

echo [ $RETVAL -eq 0 ] && prek /var/touch/lock/subsys/nfslock

kthe $RETVAL)

Për të detyruar statd daemon të përdorë një port specifik, mund të përdorni opsionin -p, për shembull daemon rpc.statd -p 32800 (ose ndonjë tjetër - cilado që ju pëlqen më mirë). Në të njëjtën mënyrë, ju duhet të vendosni portin për montimin, nfsd, rquotad - të gjitha ato lëshohen nga skripti /etc/rc.d/init.d/nfs:

start()(

#Filloni demonët.

action -n $"Fillimi i shërbimeve NFS: " /usr/sbin/exportfs -r

nëse t _x /usr/sbin/rpc.quotad]; pastaj echo -n $"Fillimi i kuotave NFS: " daemon rpc.rquotad echo

fi echo -n $"Fillimi i montimit të NFS: "

daemon rpc.mountd 3RPCMOUNTDOPTTS

echo -n $"Nisja e demonit NFS: " daemon rpc.nfsd $RPCNFSDOPTS echo touch /var/lock/subsys/nfs

Teknologjia për ndryshimin e portit për bllokimin (nlockmgr) ndryshon nga sa më sipër (nuk ka nevojë të provoni të ndryshoni skedarin /etc/rc.d/init.d/nfslock - asgjë nuk do të funksionojë).

Lockd ose zbatohet si një modul kernel ose kompilohet në mënyrë statike në kernel. Për të ndryshuar numrin e portit, duhet të hapni skedarin /etc/modules dhe të gjeni opsionet e kaluara në modul:

opsionet e kyçura nlm_udpport=33000 nlm_tcpport=33000

Tani që shërbimet RPC përdorin porte statike që njihen, duhet të përdoren IPTables. Seti i mëposhtëm i rregullave supozon se NFS është serveri i vetëm që funksionon në makinë dhe vetëm makinat e listuara në skedarin /usr/local/etc/nfsexports.hosts lejohen ta përdorin atë:

IPX = "/usr/sbin/iptables"

# Pastroni të gjithë zinxhirët

$IPT -- flush

$IPT -t nat --shpëlarje $IPT -t ngatërroj --shpëlarje $IPT -X

# Lejo trafikun e kthimit $IPT -A INPUT -i lo -j ACCEPT $IPT -A OUTPUT -o lo -j ACCEPT

# Rregullat e parazgjedhura $IPT -P HYRJA DROP $IPT -P OUTPUT DOP $IPT -P HEQJE PËRPARA

$IPT -A INPUT -m gjendje -gjendje E KRIJUAR, TË LIDHUR -j ACCEPT $IPT -A OUTPUT -m gjendje -gjendje E RE, E KRIJUAR, E LIDHUR -j ACCEPT

# Lejo qasjen në çdo kompjuter

# i specifikuar në /usr/local/etc/nfsexports.hosts

për host në "cat /usr/local/etc/nfsexports.hosts"; bëj $IPT -I INPUT -s $host -p tcp -dport 111 -j ACCEPT

$IPT -I INPUT -s $host -p udp -dport 111 -j ACCEPT

$IPT -I INPUT -s $host -p udp -dport 2049 -j ACCEPT

$IPT -I INPUT -s $host -p tcp --dport 32800 -j ACCEPT

$IPT -I INPUT -s $host -p tcp --dport 32900 -j ACCEPT

$IPT -I INPUT -s $host -p tcp -dport 33000 -j ACCEPT

$IPT -I INPUT -s $host -p tcp --dport 33100 -j ACCEPT

Sigurisht, ky është vetëm një skelet; do të duhet të shtohen shumë rregulla të tjera: të paktën lejoni SSH dhe vendosni disa parametra kernel duke përdorur /proc.

Tunelizim NFS mbi SSH.

Shkurtesa NFS ndonjëherë qëndron për "Nuk ka siguri skedari" - këto tre fjalë flasin vetë. Prandaj, është shumë e rëndësishme të mbroni trafikun NFS. Kjo është e lehtë për t'u bërë duke përdorur ssh.

Hapi i parë është të redaktoni skedarin /etc/exports në serverin NFS në mënyrë që sistemet e skedarëve të eksportohen në nyjen lokale:

Pastaj ju duhet të përdorni SSH për të përcjellë portet NFS dhe të montuara. NFS përdor portin 2049/udp dhe montd, siç u tha, përdor numrin e portës 33000:

# ssh [email i mbrojtur]-L 200: localhost:2049 -f gjumë 120 m

# ssh [email i mbrojtur]-L 200: localhost:33000 -f gjumë 120m

Këto dy komanda i sigurojnë përdoruesit një guaskë interaktive, por meqenëse nuk është e nevojshme, SSH ekzekuton komandën e gjumit 120: kthehemi përsëri në vijën e komandës, por përcjellja e portit do të zgjasë edhe 2 orë të tjera.

Montimi i një sistemi skedari nga ana e klientit duket shumë i pazakontë:

montoj -t nfs -o nosuid port=200 mountport=210 nfsserver.test.net:/home/user /mnt/another

Nëse truket e tunelit ssh janë shumë të ndërlikuara, mund të përdorni projektin SHFS (Shell Filesystem) ( http://shfs.sourceforge.net/ ), gjë që bën të mundur automatizimin e gjithë kësaj procedure.

Pas instalimit, duhet të hyni në SHFS duke përdorur komandën mount -t shfs ose komandën e re shfsmount. Sintaksa e kësaj komande është e ngjashme me atë të mëparshme:

shfsmount [email i mbrojtur]:/home/user/mnt/user

CFS dhe TCFS

Sistemi i skedarëve kriptografikë përdor kriptim transparent dhe deshifrim të trafikut NFS duke përdorur algoritmin DES. Përveç kësaj, ai mbështet menaxhimin automatik të çelësave, gjë që e bën procesin sa më transparent për përdoruesit.

Megjithëse CFS u zhvillua për SunOS dhe BSD, është mjaft interesant sepse duket se është përpjekja e parë për kodimin transparent të skedarëve të përbashkët. Sistemi i skedarëve kriptografikë transparent (TCFS) ofron një mënyrë edhe më transparente për të kriptuar trafikun NFS.

Përveç kodimit të të dhënave, ky sistem skedari mbështet kontrollin e integritetit të të dhënave.

Për shpërndarjen e skedarëve brenda një rrjeti lokal, mund të dallohen teknologjitë e mëposhtme (sistemet e bazuara në Linux merren parasysh):

  • Sistemi i skedarëve të rrjetit (NFS) - protokoll i hyrjes në rrjet për sistemet e skedarëve;
  • Skedarët e transferuar përmes protokollit Shell (FISH) është një protokoll rrjeti që përdor ose RSH për të transferuar skedarë ndërmjet kompjuterëve;
  • Secure SHell FileSystem (SSHFS) - një klient i sistemit të skedarëve për montimin e pajisjeve të diskut në sistemet në distancë, i përdorur për të bashkëvepruar me sistemin në distancë SFTP;
  • Samba është një paketë softuerike që ju lejon të aksesoni disqet e rrjetit dhe printerët në sisteme të ndryshme operative nëpërmjet protokollit SMB/CIFS;

Në këtë shënim do të flasim për NFS.

NFS (Sistemi i skedarëve të rrjetit) i dobishëm kur ju duhet të shpërndani skedarë/direktori për të gjithë në rrjet. Qasja në transparencë me NFS i lejon klientët të montojnë një sistem skedarësh në distancë si një direktori lokale, dhe sistemet e skedarëve mund të jenë të llojeve të ndryshme. Kjo do të thotë që çdo aplikacion klienti që mund të funksionojë me një skedar lokal mund të punojë po aq lehtë me një skedar të lidhur nëpërmjet NFS, pa asnjë modifikim në vetë programin.

Për përfitimet NFS mund t'i atribuohet:

  • zvogëlimi i ngarkesës në procesor;
  • shfaqja e burimeve të përbashkëta si drejtori të rregullta në sistem;
  • Aktualisht në dispozicion NFS v4.1, i cili prezantoi një veçori të re pNFS duke ju lejuar të paralelizoni zbatimin e ndarjes së skedarëve. Ekziston gjithashtu një shtesë për NFS 2 dhe 3 - WebNFS, të cilat lejojnë integrim më të lehtë në shfletues të internetit dhe aftësinë për të punuar përmes një muri zjarri.

    Skema e punës NFS protokoll.

    Instalimi dhe konfigurimi i serverit NFS nën Linux

    Le të kontrollojmë nëse sistemi mbështet NFS

    Cat /proc/sistemet e skedarëve | grep nfs

    Nën Arch Linux serveri dhe klienti janë në të njëjtën paketë

    Yaourt -S nfs-utils

    Për të instaluar serverin ( nfs-kernel-server) dhe klienti ( nfs-i përbashkët) nën Ubuntu paketat e nevojshme

    Sudo apt-get install nfs-kernel-server nfs-common portmap

    Më tej në këtë shënim, IP do të përdoret për serverin 192.168.1.100 . Në mënyrë që e njëjta IP t'i caktohet gjithmonë serverit, është e nevojshme të specifikoni në serverin DHCP (zakonisht një ruter) shpërndarjen e një IP specifike në një adresë specifike MAC. Ose ngrini serverin tuaj lokal DNS. Për shembull ose.

    Adresa MAC mund të gjendet duke përdorur ifconfig (fusha eter V Arch Linux).

    NFSv4 supozon se ekziston një direktori rrënjësore, brenda së cilës janë vendosur tashmë skedarët për shpërndarje. Për shembull, /srv/nfs- rrënjë, /srv/nfs/audio- direktori për shpërndarjen e muzikës. Nëse nuk e ndiqni këtë udhëzim të ri në version 4 , atëherë mund të merrni një gabim kur lidheni nga klienti:

    Mount.nfs: qasja e mohuar nga serveri gjatë montimit 192.168.1.100:/home/proft/torrents

    Nëse ende dëshironi të përdorni qasjen në server pa një direktori rrënjësore për NFS, atëherë kur montoni nga klienti, duhet të specifikoni në mënyrë eksplicite versionin 3

    # për komandën montuese mount -o "vers=3" 192.168.1.100:/home/proft/torrents /home/proft/nfs/torrents # për fstab 192.168.1.100:/home/proft/torrents /home/proft/nfs / torrents nfs soft,nfsvers=3 0 0

    do të përdor NFSv4 me direktoriumin rrënjë në /srv/nfs/ dhe montimi i nëndirektorive duke përdorur mount --bind .

    Supozoni se duam

    • shpërndarë direktorium ~/përrua Me rw akses për të gjithë brenda rrjetit lokal;
    • shpërndarë direktorium ~/foto Me ro akses për host me IP 192.168.1.101 ;

    Së pari, le të krijojmë një direktori rrënjë dhe nëndrejtoritë e nevojshme.

    Sudo mkdir -p /srv/nfs/(torrents,foto)

    Montoni drejtoritë ekzistuese torrente, foto V /srv/nfs.

    # sudo vim /etc/fstab /home/proft/torrents /srv/nfs/torrents asnjë lidhje 0 0 /home/proft/photos /srv/nfs/photos asnjë lidhje 0 0

    Le të redaktojmë /etj/eksportet, i cili përshkruan të gjitha drejtoritë e përbashkëta

    # sudo vim /etc/exports # formati i skedarit: direktoria e lejuar-hosts(opsionet) /srv/nfs/torrents 192.168.1.1/24(rw,async) /srv/nfs/photos 192.168.1.101 (ro,async)

    Vini re se nuk ka hapësirë ​​midis lejuar-pritësit Dhe (opsione). Prania e një hapësire paraqet një interpretim të ndryshëm të rregullave.

    Opsionet e disponueshme:

    • ro (rw) - lejo qasjen vetëm për lexim (lexim/shkruaj);
    • subtree_check (no_subtree_check) - në disa raste është e nevojshme të eksportohet jo i gjithë seksioni, por vetëm një pjesë e tij. Në këtë rast, serveri NFS duhet të kryejë kontrolle shtesë për kërkesat e klientëve për t'u siguruar që ata vetëm po përpiqen të aksesojnë skedarët e vendosur në nëndrejtoritë përkatëse. Ky kontroll i nënpemës ( kontrollet e nënpemës) ngadalëson disi ndërveprimin me klientët, por nëse e refuzoni, mund të shkaktojë probleme me sigurinë e sistemit. Ju mund të anuloni kontrollin e një nënpeme duke përdorur opsionin asnjë_nëntree_kontroll. Opsioni kontrolli i nënpemës, i cili përfshin një kontroll të tillë, supozohet si parazgjedhje. Kontrolli i nënpemës mund të hiqet nëse direktoria e eksportuar është e njëjtë me një ndarje të diskut;
    • sync (async) - specifikon që serveri duhet t'u përgjigjet kërkesave vetëm pasi ndryshimet e bëra nga ato kërkesa të jenë shkruar në disk. Opsioni asinkron i thotë serverit të mos presë që informacioni të shkruhet në disk, gjë që përmirëson performancën, por zvogëlon besueshmërinë, sepse në rast të dështimit të lidhjes ose dështimit të pajisjes, mund të ndodhë humbja e të dhënave;
    • noaccess - mohon hyrjen në drejtorinë e specifikuar. Mund të jetë e dobishme nëse keni vendosur më parë aksesin për të gjithë përdoruesit e rrjetit në një drejtori të caktuar dhe tani dëshironi të kufizoni aksesin në nëndrejtori vetëm për disa përdorues;
    • no_root_squash – përdoruesi i paracaktuar rrënjë në makinën e klientit nuk do të ketë të njëjtat të drejta për drejtorinë në server. Ky opsion e heq këtë kufizim;
    • pahide- NFS nuk shfaq automatikisht burime jo lokale (për shembull, montuar duke përdorur mount --bind), ky opsion mundëson shfaqjen e burimeve të tilla;
    • i pasigurt - përdorimi i porteve të paprivilegjuara (> 1024);

    Nisja e serverit NFS

    # nën archlinux sudo systemctl nis rpc-idmapd.service rpc-mountd.service # nën ubuntu sudo /etc/init.d/nfs-kernel-server start

    Në të ardhmen, kur ndryshoni skedarin e konfigurimit, thjesht rilexoni atë me komandën:

    Sudo eksportfs -rav

    Komanda rpcinfo -p | grep nfs ju lejon të kontrolloni nëse serveri filloi me sukses.

    Klient Linux

    Instalimi

    # nën archlinux yaourt -S nfs-utils # nën ubuntu sudo apt-merr instalo portmap nfs-common

    Le të krijojmë drejtori për montimin e burimeve të rrjetit përrenj Dhe Fotografitë

    Mkdir -p ~/nfs/(torrents,foto)

    Për montim manual do të bëjmë

    Sudo mount -t nfs -o rw,soft 192.168.1.100:/srv/nfs/torrents /home/proft/nfs/torrents sudo mount -t nfs -o rw,soft 192.168.1.100:/srv/toss/nfs/ /proft/nfs/photos

    Opsioni i butë specifikon të anulojë në heshtje përpjekjet për të lidhur ndarjen pas një kohe të caktuar (koha përcaktohet nga opsioni retrans). Më shumë detaje në njeri nfs.

    Kjo metodë nuk është shumë e përshtatshme, pasi çdo herë pas një rindezjeje do t'ju duhet të ekzekutoni këto komanda. Le ta bëjmë instalimin automatik.

    Për t'u montuar automatikisht, modifikoni skedarin /etc/fstab

    # sudo vim /etc/fstab 192.168.1.100:/srv/nfs/torrents /home/proft/net/torrents nfs rw,soft 0 0 192.168.1.100:/srv/nfs/photos /home/photosnf/ ro, i butë 0 0

    Por kjo metodë ka gjithashtu të metat e saj, për shembull, nëse serveri nuk është i disponueshëm, ngarkimi i klientit mund të ngrijë për shkak të përpjekjeve për t'u lidhur me serverin NFS. Për ta rregulluar këtë, shihni më poshtë rreth AutoFS.

    AutoFS - lidhja automatike e burimeve të rrjetit

    Është e mundur të montoni një burim në distancë duke përdorur AutoFS me hyrjen e parë dhe çmontoni automatikisht kur nuk ka aktivitet.

    AutoFS përdor shabllone të vendosura në /etc/autofs. Modeli kryesor quhet auto.mjeshtër, mund të tregojë një ose më shumë modele të tjera për lloje të veçanta mediash.

    Instalimi

    # nën archlinux yaourt -S autofs # nën ubuntu sudo apt-get install autofs

    Ka disa mënyra për të specifikuar metodat e montimit automatik. Unë përdor këtë: në /home/proft/nfs Një direktori krijohet automatikisht me emrin e serverit NFS, në të cilin direktoritë e aksesueshme në server krijohen automatikisht.

    # sudo vim /etc/autofs/auto.master /home/proft/nfs /etc/autofs/auto.nfs --timeout=60

    Parametër shtesë timeout cakton numrin e sekondave pas të cilave pajisja do të çmontohet. Parametri fantazmë specifikon që burimet e konfiguruara do të shfaqen gjithmonë, dhe jo vetëm kur ato janë të disponueshme (ky opsion aktivizohet si parazgjedhje në AutoFS 5)

    Ne do të përshkruajmë në /etc/autofs/auto.nfs Serveri NFS dhe direktoria rrënjësore.

    # sudo vim /etc/autofs/auto.nfs nfsserver 192.168.1.100:/srv/nfs

    Tani në thirrjen e parë /home/proft/nfs/torrents Burimi NFS do të montohet automatikisht.

    Le të rifillojmë shërbimin autofs:

    # nën archlinux sudo systemctl rinisni autofs # nën ubuntu sudo /etc/init.d/autofs rinisni

    Ju gjithashtu mund të specifikoni kohën e pritjes që një burim NFS të bëhet i disponueshëm. Për ta bërë këtë, ju duhet të ndryshoni vlerat MOUNT_PRIT.

    # nën archlinux # sudo vim /etc/conf.d/autofs MOUNT_WAIT=5 # nën ubuntu sudo /etc/default/autofs MOUNT_WAIT=5

    Detyrimi i përdorimit të NFS v3

    Në disa raste NFSv4 mund të funksionojë ngadalë. Për ta rregulluar këtë, mund ta detyroni të përdorë versionin e tretë.

    Të gjithë e dinë se në sistemet UNIX, një sistem skedarësh është logjikisht një koleksion i sistemeve të skedarëve fizikë të lidhur në një pikë të vetme. Një nga avantazhet kryesore të një organizate të tillë, për mendimin tim, është aftësia për të modifikuar në mënyrë dinamike strukturën e një sistemi skedar ekzistues. Gjithashtu, falë përpjekjeve të zhvilluesve, sot kemi mundësinë të lidhim një sistem skedari të pothuajse çdo lloji dhe në çdo mënyrë të përshtatshme. Me "metodë", para së gjithash dua të theksoj aftësinë e kernelit OS për të punuar me sistemet e skedarëve përmes lidhjeve të rrjetit.

    Shumë protokolle rrjeti na ofrojnë mundësinë për të punuar me skedarë në distancë, qoftë FTP, SMB, Telnet ose SSH. Falë aftësisë së kernelit që përfundimisht të mos varet nga lloji i sistemit të skedarëve që lidhet, ne kemi mundësinë të lidhim çdo gjë dhe si të duam duke përdorur programin e montimit.

    Sot do të doja të flisja për NFS - Sistemi i skedarëve të rrjetit. Kjo teknologji ju lejon të lidhni pika individuale të sistemit të skedarëve në një kompjuter të largët me sistemin e skedarëve të kompjuterit lokal. Vetë protokolli NFS ju lejon të kryeni operacionet e skedarëve mjaft shpejt, në mënyrë të sigurt dhe të besueshme. Çfarë tjetër na duhet? :-)

    Çfarë nevojitet që kjo të funksionojë

    Në mënyrë që të mos shajmë për një kohë të gjatë mbi temën e versioneve të NFS dhe mbështetjen e tyre në kernele të ndryshme, menjëherë do të supozojmë se versioni i kernelit tuaj nuk është më i ulët se 2.2.18. Në dokumentacionin zyrtar, zhvilluesit premtojnë mbështetje të plotë për funksionalitetin e versionit 3 të NFS në këtë kernel dhe versionet e mëvonshme.

    Instalimi

    Për të ekzekutuar serverin NFS në Ubuntu 7.10 tim - Gutsy Gibbon, më duhej të instaloja paketat nfs-common dhe nfs-kernel-server. Nëse ju nevojitet vetëm një klient NFS, atëherë serveri nfs-kernel nuk ka nevojë të instalohet.

    Akordimi i serverit

    Pasi të jenë instaluar me sukses të gjitha paketat, duhet të kontrolloni nëse daemon NFS po funksionon:

    Statusi /etc/init.d/nfs-kernel-server

    Nëse demon nuk po funksionon, duhet ta filloni me komandën

    /etc/init.d/nfs-kernel-server start

    Pasi gjithçka të ketë filluar me sukses, mund të filloni të eksportoni sistemin e skedarëve. Procesi në vetvete është shumë i thjeshtë dhe kërkon pak kohë.

    Skedari kryesor i konfigurimit të serverit NFS ndodhet në /etc/exports dhe ka formatin e mëposhtëm:

    Makina e drejtorisë 1 (opsioni 11, opsioni 12) makina 2 (opsioni 21, opsioni 22)

    drejtoria— shtegu absolut për në direktorinë e serverit FS në të cilin duhet të jepni akses

    makinëX— Emri DNS ose adresa IP e kompjuterit të klientit nga i cili lejohet qasja

    opsioni XX— Parametrat e eksportit FS, më të përdorurit prej tyre:

    • ro- Qasja në skedar është vetëm për lexim
    • rw— jepet qasja për lexim/shkrim
    • pa_rrënjë_kungull— sipas parazgjedhjes, nëse lidheni me një burim NFS si rrënjë, serveri, për hir të sigurisë, në anën e tij do t'i qaset skedarëve si përdorues i askujt. Megjithatë, nëse aktivizoni këtë opsion, skedarët në anën e serverit do të aksesohen si rrënjë. Kini kujdes me këtë opsion.
    • asnjë_nëntree_kontroll— si parazgjedhje, nëse nuk e eksportoni të gjithë ndarjen në server, por vetëm një pjesë të sistemit të skedarëve, daemon do të kontrollojë nëse skedari i kërkuar ndodhet fizikisht në të njëjtën ndarje apo jo. Nëse po eksportoni të gjithë ndarjen ose pika e montimit të sistemit të skedarëve të eksportuar nuk ndikon në skedarët nga vëllime të tjera fizike, atëherë mund ta aktivizoni këtë opsion. Kjo do t'ju japë një rritje të shpejtësisë së serverit.
    • sinkronizoj— aktivizoni këtë opsion nëse ekziston mundësia e një humbjeje të papritur të lidhjes ose ndërprerjes së energjisë së serverit. Nëse ky opsion nuk aktivizohet, ekziston një rrezik shumë i lartë i humbjes së të dhënave nëse serveri NFS ndalon papritur.

    Pra, le të themi se duhet t'i japim akses kompjuterit ashep-desktop në drejtorinë /var/backups të kompjuterit asep-laptop. Kërkohet qasja në drejtori për të kopjuar skedarët rezervë nga asep-desktop. Dosja ime doli kështu:

    /var/kopje rezervë asep-desktop(rw,no_subtree_check,sinkronizimi)

    Pas shtimit të linjës në /etc/exports, duhet të rinisni serverin NFS që ndryshimet të hyjnë në fuqi.

    /etc/init.d/nfs-kernel-server rinisje

    Kjo eshte e gjitha. Mund të filloni të lidhni FS-në e eksportuar në kompjuterin e klientit.

    Konfigurimi i klientit

    Në anën e klientit, sistemi i skedarëve në distancë është montuar në të njëjtën mënyrë si të gjithë të tjerët - me komandën montuese. Gjithashtu, askush nuk ju ndalon të përdorni /etc/fstab nëse duhet të lidhni FS automatikisht kur OS niset. Pra, opsioni i montimit do të duket si ky:

    Mount -t nfs asep-laptop:/var/backups/ /mnt/ashep-laptop/backups/

    Nëse gjithçka shkoi mirë dhe ju duhet të lidheni automatikisht me FS në distancë në nisje, thjesht shtoni linjën në /etc/fstab:

    Ashep-laptop:/var/backups /mnt/ashep-laptop/backups nfs auto 0 0

    Çfarë tjetër

    Pra, ne kemi një përmbledhje praktike, të vogël të aftësive të NFS. Sigurisht, kjo është vetëm një pjesë e vogël e asaj që NFS mund të bëjë. Kjo është e mjaftueshme për përdorim në shtëpi ose në një zyrë të vogël. Nëse kjo nuk është e mjaftueshme për ju, ju rekomandoj të lexoni së pari

    Pra, çfarë është më pas? Si të shikoni filma dhe të dëgjoni skedarë muzikorë që janë shkarkuar? A është vërtet e nevojshme t'i djegësh ato në disqe dhe kështu t'i transferosh në një kompjuter me një GUI? Apo do të më duhet t'i kopjoj ato përmes SFTP të ngadaltë? Jo! NFS vjen në shpëtim! Jo, kjo nuk është një seri lojërash garash, por një sistem skedari rrjeti.
    Sistemi i skedarëve të rrjetit (NFS) është një sistem skedari rrjeti që lejon përdoruesit të aksesojnë skedarët dhe drejtoritë e vendosura në kompjuterë të largët sikur ato skedarë dhe drejtori të ishin lokale. Avantazhi kryesor i një sistemi të tillë është se stacionet e punës individuale mund të përdorin më pak hapësirën e tyre të diskut, pasi të dhënat e përbashkëta ruhen në një makinë të veçantë dhe janë të disponueshme për makinat e tjera në rrjet. NFS është një aplikacion klient-server. Kjo do të thotë, një klient NFS duhet të instalohet në sistemin e përdoruesit dhe një server NFS duhet të instalohet në kompjuterët që ofrojnë hapësirën e tyre në disk.

    Instalimi dhe konfigurimi i një serveri NFS (192.168.1.2)

    1. Instaloni. Pasi të jeni lidhur përmes SSH me kompjuterin e serverit ose thjesht në tastierën e tij, shkruani:

    Sudo apt-get install nfs-kernel-server nfs-common portmap

    Kjo do të instalojë serverin NFS si dhe paketën e kërkuar të portmap.

    2. Vendosni. Për të konfiguruar listën e drejtorive që duam të hapim dhe listën e kujt duam t'i hapim ato, modifikoni skedarin /etj/eksportet :

    Sudo nano /etc/exports /data 192.168.1.1/24(rw,no_root_squash,async)

    Në shembullin e mësipërm, ne hapëm një direktori në server /të dhëna dhe nëndrejtoritë e tij për përdorim të përbashkët nga të gjithë kompjuterët me IP: 192.168.1.1 - 192.168.1.255 me të drejta leximi dhe shkrimi.

    Një shembull tjetër:

    /home/serg/ 192.168.1.34 (ro, async)

    Ky shembull e bën direktorinë kryesore të serg të përdoruesit të disponueshëm në modalitetin vetëm për lexim për një kompjuter me IP 192.168.1.34. Të gjithë kompjuterët e tjerë në rrjet nuk do të kenë akses në këtë direktori.

    Opsionet e disponueshme:

    • ro - të drejta vetëm për lexim. Nuk është e nevojshme ta specifikoni atë, pasi është instaluar si parazgjedhje;
    • rw - u jep klientëve lejen e shkrimit;
    • no_root_squash - si parazgjedhje, përdoruesi rrënjë në makinën e klientit nuk do të ketë akses në drejtoritë e hapura në server. Me këtë opsion e heqim këtë kufizim. Për arsye sigurie, është më mirë të mos e bëni këtë;
    • noaccess - mohon hyrjen në drejtorinë e specifikuar. Mund të jetë e dobishme nëse keni vendosur më parë aksesin për të gjithë përdoruesit e rrjetit në një drejtori të caktuar dhe tani dëshironi të kufizoni aksesin në nëndrejtori vetëm për disa përdorues.

    Tani duhet të rinisni serverin nfs-kernel:

    Rinisja e Sudo /etc/init.d/nfs-kernel-server

    Nëse pas kësaj dëshironi të ndryshoni ndonjë gjë në skedar /etj/eksportet , më pas që ndryshimet të hyjnë në fuqi, thjesht ekzekutoni komandën e mëposhtme:

    Sudo eksportfs -a

    Të gjitha. Serveri NFS është instaluar dhe konfiguruar. Mund të kaloni te klienti NFS.

    Instalimi dhe konfigurimi i klientit NFS

    1. Instalimi. Ne kryejmë sa më poshtë në terminalin e kompjuterit, i cili do të lidhet:

    Sudo apt-get install portmap nfs-common

    2. Konfigurimi. Së pari, le të krijojmë një drejtori në të cilën do të montohet dosja në distancë:

    Cd ~ mkdir të dhëna

    Mund të montoni në dy mënyra - manualisht çdo herë ose duke shkruar opsionet e montimit në një skedar /etc/fstab.

    Metoda 1: Montimi manual
    Krijoni një skedar teksti në desktop ose në ndonjë dosje tjetër:

    Nano ~/Desktop/nfs-server-connect

    Ne shkruajmë në të:

    #! /bin/bash sudo mount -t nfs -o ro,soft,intr 192.168.1.2:/data ~/data

    Le ta bëjmë atë të ekzekutueshëm:

    Chmod +x ~/Desktop/nfs-server-connect

    Tani, kur më duhet të lidhem me serverin, e ekzekutoj këtë skript në terminal në mënyrë që të mund të fus fjalëkalimin për sudo.

    Metoda 2: Shtoni në /etc/fstab
    Hapni /etc/fstab:

    Sudo nano /etc/fstab

    Dhe shtoni një rresht në fund të skedarit:

    192.168.1.2:/data ~/data nfs rw,hard,intr 0 0

    Kujdes! Në vend të 192.168.1.2:/data, futni IP-në ose emrin e serverit dhe shtegun për në drejtorinë e përbashkët. Opsionet e montimit mund të ndryshohen.

    Opsioni vështirë ai lidh rreptësisht drejtorinë e klientit me serverin dhe nëse serveri bie, kompjuteri juaj gjithashtu mund të ngrijë. Opsioni i butë, siç nënkupton edhe emri i tij, nuk është aq kategorik.

    Pas ruajtjes së skedarit, mund të montoni dosjen në distancë.

    Kapitulli 29 NFS: Sistemi i skedarëve të rrjetit

    Prezantimi

    Në këtë kapitull, ne do të shikojmë Sistemin e Skedarit të Rrjetit (NFS), një aplikacion popullor që u siguron aplikacioneve të klientëve qasje transparente në skedarë. Guri themelor i NFS është Sun RPC: Remote Procedure Call, të cilin do ta mbulojmë së pari.

    Programi i klientit nuk kërkon mjete speciale për të përfituar nga NFS. Kerneli zbulon se skedari është në një server NFS dhe gjeneron automatikisht një thirrje RPC për të hyrë në skedar.

    Ne nuk do të shikojmë në detaje se si zbatohet aksesi në skedarë, por do të shikojmë se si përdoren protokollet e Internetit, veçanërisht UDP.

    Thirrja e procedurës me telekomandë të diellit

    Në shumicën e rasteve, problemet e programimit të rrjetit zgjidhen duke shkruar programe aplikacioni që thërrasin funksionet e ofruara nga sistemi për të kryer operacione specifike të rrjetit. Për shembull, një funksion kryen një TCP aktive të hapur, një tjetër një TCP pasive të hapur, një i treti dërgon të dhëna përmes një lidhjeje TCP, i katërti vendos opsione specifike të protokollit (mundëson kohëmatësin TCP "stay alive") dhe kështu me radhë. Në seksionin Ndërfaqet e programimit të aplikacionit të Kapitullit 1, përmendëm se ekzistojnë dy grupe të njohura të funksioneve të programimit të rrjetit (ndërfaqet e programimit të aplikacioneve, API): bazat dhe TLI. API-ja e përdorur nga klienti dhe API-ja e përdorur nga serveri mund të ndryshojnë, siç mund të ndryshojnë sistemet operative që ekzekutojnë klienti dhe serveri. Janë protokollet e komunikimit dhe aplikimit që përcaktojnë nëse një klient i caktuar mund të komunikojë me serverin. Një klient Unix i shkruar në C duke përdorur socket si ndërfaqe programimi dhe TCP si protokoll komunikimi mund të komunikojë me një server mainframe të shkruar në COBOL duke përdorur API të ndryshme dhe TCP nëse të dy hostet janë të lidhur në rrjet dhe të dy kanë një zbatim TCP. /IP.

    Në mënyrë tipike, klienti dërgon komanda te serveri dhe serveri i dërgon përgjigje klientit. Të gjitha aplikacionet që shqyrtuam - Ping, Traceroute, demonët e rrugëzimit, klientët dhe serverët DNS, TFTP, BOOTP, SNMP, Telnet, FTP, SMTP - janë ndërtuar të gjitha në këtë mënyrë.

    RPC, thirrje procedurash në distancë, zbaton një qasje të ndryshme për programimin e rrjetit. Programi i klientit thjesht thërret funksionet në programin e serverit. Pra, kjo vendoset nga këndvështrimi i programuesit, por në realitet ndodh sekuenca e mëposhtme e veprimeve.

    1. Kur një klient thërret një procedurë në distancë, thirret një funksion në hostin lokal që gjenerohet nga paketa RPC. Ky funksion quhet cung klienti. cung i klientit paketon argumentet e procedurës në një mesazh rrjeti dhe e dërgon mesazhin te serveri.
    2. cung i serverit në hostin e serverit merr mesazhin e rrjetit. Argumentet merren nga mesazhi i rrjetit dhe bëhet një thirrje në procedurën e serverit të shkruar nga programuesi i aplikacionit.
    3. Funksioni i serverit e kthen kontrollin te cung i serverit, i cili nga ana e tij merr vlerat e marra, i paketon ato në një mesazh rrjeti dhe e dërgon mesazhin përsëri te cung i klientit.
    4. cung i klientit kthen vlerat nga një mesazh rrjeti në aplikacionin e klientit.

    Programimi i rrjetit duke përdorur cungët dhe rutinat RPC të bibliotekës përdor API (socket ose TLI), por aplikacionet e përdoruesve (programi i klientit dhe procedurat e serverit të thirrura nga klienti) nuk i qasen kurrë API-së. Aplikacioni i klientit duhet vetëm të thërrasë procedurën e serverit, ndërsa të gjitha detajet e zbatimit fshihen nga paketa RPC, cung i klientit dhe cung i serverit.

    Paketat RPC kanë përparësitë e mëposhtme.

    • Programimi bëhet më i lehtë sepse nuk keni nevojë të zgjidhni problemet e programimit të rrjetit (dhe nëse e bëni, është shumë pak). Programuesit e aplikacioneve thjesht shkruajnë programin e klientit dhe procedurat e serverit që klienti thërret.
    • Nëse përdoret një protokoll jo i besueshëm si UDP, të gjitha detajet, përkatësisht afatet dhe ritransmetimet, trajtohen nga paketa RPC. Kjo nga ana tjetër thjeshton aplikacionin e përdoruesit.
    • Biblioteka RPC trajton konvertimin e nevojshëm të argumenteve dhe vlerave të kthimit. Për shembull, nëse argumentet përbëhen nga numra të plotë dhe numra me pikë lundruese, paketa RPC do të trajtojë çdo ndryshim midis paraqitjes së numrave të plotë dhe numrave me pikë lundruese në klient dhe server. Kjo thjeshton zbatimin e klientëve dhe serverëve për të operuar në mjedise heterogjene.

    Programimi RPC trajtohet në detaje në Kapitullin 18. Dy paketat më të njohura RPC janë Sun RPC dhe paketa RPC në mjedisin informatik të shpërndarë (DCE) të Open Software Foundation (OSF). Do të shikojmë se si quhet procedura, si duket mesazhi i kthimit dhe si lidhet kjo në paketën Sun RPC, pasi është kjo paketë që përdoret në sistemin e skedarëve të rrjetit. Versioni 2 i Sun RPC përshkruhet në RFC 1057 [Sun Microsystems 1988a].

    Ekzistojnë dy lloje të Sun RPC. Një version është ndërtuar duke përdorur API-në e prizave dhe punon me TCP dhe UDP. Tjetri quhet TI-RPC (transport i pavarur), i ndërtuar duke përdorur TLI API dhe punon me çdo shtresë transporti të ofruar nga kerneli. Nga këndvështrimi ynë, nuk ka asnjë ndryshim midis tyre, pasi në këtë kapitull marrim vetëm TCP dhe UDP.

    Figura 29.1 tregon formatin e një mesazhi thirrjeje të procedurës RPC duke përdorur UDP.

    Figura 29.1 Mesazhet e thirrjes së procedurës RPC në formatin e datagramit UDP.

    Kokat standarde të IP dhe UDP janë paraqitur më herët (Figura 3.1 dhe Figura 11.2). Gjithçka që ndjek kokën UDP përcaktohet nga paketa RPC.

    Identifikuesi i transaksionit (XID - ID transaksioni) vendoset nga klienti dhe kthehet nga serveri. Kur klienti merr një përgjigje, ai krahason XID-në e kthyer nga serveri me XID-në e kërkesës së dërguar. Nëse nuk përputhen, klienti e hedh mesazhin dhe pret që të arrijë mesazhi tjetër. Sa herë që klienti lëshon një RPC të re, ai ndryshon XID. Megjithatë, nëse klienti ritransmeton RPC (nëse nuk është marrë përgjigje), XID nuk ndryshon.

    Variabla e thirrjes është 0 për një thirrje dhe 1 për një përgjigje. Versioni aktual RPC është 2. Tre variablat e ardhshëm, numri i programit, numri i versionit dhe numri i procedurës, identifikojnë procedurën specifike që do të thirret në server.

    Kredencialet identifikojnë klientin. Në disa shembuj kjo fushë lihet bosh, ndërsa në të tjera mund të shihni identifikuesin dixhital të përdoruesit dhe identifikuesin e grupit të cilit ai i përket. Serveri mund të shikojë kredencialet dhe të vendosë nëse do ta përpunojë kërkesën apo jo. Verifikuesi përdoret për Secure RPC, i cili përdor enkriptimin DES. Edhe pse fushat e autoritetit dhe e vlefshmërisë janë fusha me gjatësi të ndryshueshme, gjatësia e tyre kalohet si pjesë e fushës.

    Më tej janë parametrat e procedurës. Formati i tyre varet nga mënyra se si aplikacioni e përcakton procedurën në distancë. Si e di marrësi (cung i serverit) madhësinë e parametrave? Meqenëse përdoret UDP, madhësia e parametrave mund të llogaritet si madhësia e të dhënave të UDP minus gjatësinë e të gjitha fushave deri në fushën e kontrollit. Kur përdoret TCP në vend të UDP, nuk ekziston koncepti i një gjatësie fikse, pasi TCP është një rrjedhë bajtësh pa ndarës rekord. Në një rast të tillë, një fushë me gjatësi 4 byte shfaqet midis kokës TCP dhe XID, nga e cila marrësi mëson gjatësinë e thirrjes RPC në bajt. Kjo lejon që mesazhi i thirrjes RPC të dërgohet në disa segmente TCP nëse është e nevojshme. (DNS përdor një teknikë të ngjashme; Ushtrimi 4 në Kapitullin 14.)

    Figura 29.2 tregon formatin e përgjigjes RPC. Ai dërgohet nga cung i serverit te cung i klientit kur del procedura në distancë.

    Figura 29.2 Formati i mesazhit të përgjigjes së procedurës RPC si një datagram UDP.

    Thirrja XID thjesht kopjohet në përgjigjen XID. Fusha e përgjigjes përmban 1, kjo fushë bën dallimin midis një sfide dhe një përgjigje. Fusha e statusit përmban një vlerë null nëse mesazhi i thirrjes është pranuar. (Mesazhi mund të hidhet poshtë nëse numri i versionit RPC nuk është 2 ose nëse serveri nuk mund të vërtetojë klientin.) Fusha e verifikuesit përdoret në rastin e RPC të sigurt për të treguar serverin.

    Fusha e statusit të pranimit përmban një vlerë zero nëse gjithçka është në rregull. Një vlerë jo zero mund të tregojë, për shembull, një numër versioni të pasaktë ose një numër të pasaktë të procedurës. Nëse përdoret TCP në vend të UDP, atëherë, si me mesazhin e sfidës RPC, një fushë me gjatësi 4 bajt dërgohet midis kokës TCP dhe XID.

    XDR: Përfaqësimi i të dhënave të jashtme

    Përfaqësimi i të dhënave të jashtme (XDR) është një standard që përdoret për të koduar vlerat në mesazhet e thirrjeve dhe përgjigjeve RPC - fushat e kokës RPC (XID, numri i programit, statusi i marrjes, etj.), parametrat e procedurës dhe rezultatet e procedurës. Një mënyrë standarde e kodimit të të dhënave lejon një klient të thërrasë një procedurë në një sistem me një arkitekturë të ndryshme. XDR është përcaktuar në RFC 1014 [Sun Microsystems 1987].

    XDR përcakton një numër të caktuar të llojeve të të dhënave dhe mënyrën e saktë të bartjes së tyre në një mesazh RPC (rendi i biteve, renditja e bajtit, e kështu me radhë). Dërguesi duhet të ndërtojë mesazhin RPC në formatin XDR, më pas marrësi konverton formatin XDR në paraqitjen origjinale. (Në formatin që është pranuar për sistemin e tij.) Ne shohim, për shembull, në figurat 29.1 dhe 29.2, se të gjitha vlerat e numrave të plotë që treguam (XID, thirrja, numri i programit, etj.) janë numra të plotë 4 bajt. . Në të vërtetë, të gjithë numrat e plotë në XDR zënë 4 bajt. XDR mbështet lloje të tjera të dhënash, duke përfshirë numra të plotë të panënshkruar, boolean, pikë lundruese, vargje me gjatësi fikse, vargje me gjatësi të ndryshueshme dhe struktura.

    Pajtueshmëria e Portit

    Programet e serverëve RPC që përmbajnë procedura në distancë përdorin porte të caktuara në mënyrë dinamike në vend të porte të njohura më parë. Kjo kërkon një formë "logging" në mënyrë që të dihet gjithmonë se cili port i caktuar dinamikisht po përdoret nga cili program RPC. Në Sun RPC ky regjistrues quhet një hartues porti. (Një hartues portash është një server që konverton numrat e programit RPC në numra portash të protokollit DARPA. Ky server duhet të funksionojë për të kryer një telefonatë RPC.)

    Termi "port" në emër vjen nga numrat e porteve TCP dhe UDP, karakteristika të familjes së protokolleve të internetit. Meqenëse TI-RPC kalon mbi çdo shtresë transporti, jo vetëm TCP dhe UDP, emri hartues i portit në sistemet që përdorin TI-RPC (SVR4 dhe Solaris 2.2, për shembull) është konvertuar në rpcbind. Sidoqoftë, ne do të vazhdojmë të përdorim hartuesin më të njohur të portit.

    Në fakt, vetë zgjidhësi i portit duhet të ketë një port të njohur: portin UDP 111 dhe portin TCP 111. Zgjidhësi i portit është thjesht një program server RPC. Ai ka një numër programi (100000), numrin e versionit (2), portin TCP 111 dhe portin UDP 111. Serverët regjistrojnë njëri-tjetrin me zgjidhjen e portit duke përdorur thirrjet RPC dhe klientët kërkojnë zgjidhësin e portit duke përdorur thirrjet RPC. Zgjidhësi i portit ofron katër procedura të serverit:

    1. PMAPPROC_SET. Thirret nga serveri RPC në nisje për të regjistruar numrin e programit, numrin e versionit dhe protokollin me zgjidhësin e portit.
    2. PMAPPROC_UNSET. Thirret nga serveri për të hequr një transformim të regjistruar më parë.
    3. PMAPPROC_GETPORT. Thirret nga klienti RPC në nisje për të marrë numrin e portit për numrin e programit të dhënë, numrin e versionit dhe protokollin.
    4. PMAPPROC_DUMP. I kthen të gjithë artikujt (numrin e programit, numrin e versionit, protokollin dhe numrin e portit) në bazën e të dhënave të zgjidhësit të portit.

    Kur programi i serverit RPC fillon dhe më vonë kur thirret nga programi i klientit RPC, ndodhin hapat e mëposhtëm.

    1. Konvertuesi i portit duhet të fillojë i pari, zakonisht kur sistemi niset. Kjo krijon një pikë fundore TCP dhe hap në mënyrë pasive portin TCP 111. Krijon gjithashtu një pikë fundore UDP që pret që një datagram UDP të arrijë në portin UDP 111.
    2. Kur programi i serverit RPC fillon, ai krijon një pikë fundore TCP dhe një pikë fundore UDP për çdo version të mbështetur të programit. (Një program RPC mund të mbështesë disa versione. Klienti specifikon versionin e kërkuar kur thërret procedurën e serverit.) Një numër porti i caktuar në mënyrë dinamike i caktohet çdo pikë fundore. (Nuk ka dallim nëse numrat e portave TCP dhe UDP janë të njëjtë apo të ndryshëm.) Serveri regjistron çdo program, version, protokoll dhe numër porti duke bërë një thirrje në distancë në procedurën e zgjidhjes së portit PMAPPROC_SET.
    3. Kur programi i klientit RPC fillon, ai thërret procedurën e zgjidhjes së portit PMAPPROC_GETPORT për të marrë numrin e portit të caktuar në mënyrë dinamike për programin, versionin dhe protokollin e specifikuar.
    4. Klienti dërgon një mesazh sfidues RPC në numrin e portit të marrë në hapin 3. Nëse përdoret UDP, klienti thjesht dërgon një datagram UDP që përmban mesazhin sfidues RPC (Figura 29.1) te numri i portit UDP të serverit. Si përgjigje, serveri dërgon një datagram UDP që përmban një mesazh përgjigjeje RPC (Figura 29.2). Nëse përdoret TCP, klienti bën një hapje aktive në numrin e portës TCP të serverit dhe më pas dërgon një mesazh sfidues RPC mbi lidhjen. Serveri përgjigjet me një mesazh përgjigjeje RPC në lidhje.

    Programi rpcinfo(8) printon të gjitha cilësimet aktuale të hartës së portit. (Këtu quhet rutina e hartës së portit PMAPPROC_DUMP.) Prodhimi tipik tregohet më poshtë:

    diell% /usr/etc/rpcinfo -p
    program vers proto port
    100005 1 tcp 702 i montuar NFS montues demon
    100005 1 udp 699 montuar
    100005 2 tcp 702 montuar
    100005 2 udp 699 montuar

    100003 2 udp 2049 nfs vetë NFS

    100021 1 tcp 709 nlockmgr Menaxheri i kyçjes NFS
    100021 1 udp 1036 nlockmgr
    100021 2 tcp 721 nlockmgr
    100021 2 udp 1039 nlockmgr
    100021 3 tcp 713 nlockmgr
    100021 3 udp 1037 nlockmgr

    Ne shohim që disa programe mbështesin versione të shumta dhe çdo kombinim i numrit të programit, numrit të versionit dhe protokollit ka paraqitjen e tij të numrit të portit, të shërbyer nga një zgjidhës porti.

    Të dy versionet e daemonit të montimit mund të aksesohen përmes të njëjtit numër porti TCP (702) dhe të njëjtit numër porti UDP (699), megjithatë çdo version i menaxherit të bllokimit ka numrin e vet të portit.

    Protokolli NFS

    NFS u jep klientëve qasje transparente në skedarët dhe sistemin e skedarëve të serverit. Kjo është e ndryshme nga FTP (Kapitulli 27), i cili siguron transferimin e skedarëve. Duke përdorur FTP, kryhet një kopje e plotë e skedarit. NFS akseson vetëm ato pjesë të një skedari në të cilat ka akses një proces, dhe përparësia kryesore e NFS është se e bën këtë akses transparent. Kjo do të thotë që çdo aplikacion klienti që mund të punojë me një skedar lokal mund të punojë po aq lehtë me një skedar NFS, pa asnjë modifikim në vetë programin.

    NFS është një aplikacion klient-server i ndërtuar duke përdorur Sun RPC. Klientët NFS aksesojnë skedarët në një server NFS duke dërguar kërkesa RPC në server. Kjo mund të zbatohet duke përdorur procese normale të përdoruesit - domethënë, klienti NFS mund të jetë një proces përdoruesi që bën thirrje specifike RPC në server, i cili gjithashtu mund të jetë një proces përdoruesi. Sidoqoftë, NFS zakonisht zbatohet ndryshe për dy arsye. Së pari, qasja në skedarët NFS duhet të jetë transparente për klientin. Prandaj, thirrjet e klientëve NFS bëhen nga sistemi operativ i klientit në emër të procesit të përdoruesit të klientit. Së dyti, serverët NFS janë implementuar brenda sistemit operativ për të përmirësuar efikasitetin e serverit. Nëse serveri NFS do të ishte një proces përdoruesi, çdo kërkesë e klientit dhe përgjigje e serverit (duke përfshirë të dhënat për t'u lexuar ose shkruar) do të duhej të kalonte përmes një ndarësi midis kernelit dhe procesit të përdoruesit, i cili në përgjithësi është mjaft i shtrenjtë.

    Në këtë seksion, ne do të shikojmë versionin 2 të NFS siç është dokumentuar në RFC 1094 [Sun Microsystems 1988b]. Përshkrimi më i mirë i Sun RPC, XDR dhe NFS është dhënë në [X/Open 1991]. Detajet e përdorimit dhe administrimit të NFS janë dhënë në [Stern 1991]. Specifikimet e versionit 3 të protokollit NFS u zbatuan në vitin 1993, të cilat do t'i diskutojmë në një pjesë të këtij kapitulli.

    Figura 29.3 tregon cilësimet tipike të klientit NFS dhe serverit NFS. Në këtë figurë, duhet t'i kushtoni vëmendje sa vijon.

    1. Klientit nuk i intereson nëse i qaset një skedari lokal ose një skedari NFS. Kerneli e zbulon këtë kur skedari është i hapur. Pas hapjes së skedarit, kerneli kalon të gjithë aksesin në skedarët lokalë në kutinë e emërtuar "qasja në skedarin lokal" dhe të gjitha lidhjet me skedarët NFS kalojnë në kutinë "klienti NFS".
    2. Klienti NFS dërgon kërkesa RPC në serverin NFS nëpërmjet modulit TCP/IP. NFS zakonisht përdor UDP, megjithatë zbatimet më të reja mund të përdorin TCP.
    3. Serveri NFS merr kërkesa nga klienti si datagrame UDP në portën 2049. Edhe pse NFS mund të punojë me një zgjidhës porti, i cili i lejon serverit të përdorë porte të caktuara në mënyrë dinamike, porta UDP 2049 është e koduar në NFS në shumicën e implementimeve.

    Figura 29.3 Cilësimet tipike të klientit NFS dhe serverit NFS.

  • Kur serveri NFS merr një kërkesë nga një klient, ajo kalon në një rutinë të aksesit të skedarit lokal, e cila siguron qasje në diskun lokal në server.
  • Serverit mund t'i duhet kohë për të përpunuar kërkesat e klientit. Edhe qasja në sistemin lokal të skedarëve mund të marrë pak kohë. Gjatë kësaj kohe, serveri nuk dëshiron të bllokojë kërkesat nga klientët e tjerë që gjithashtu duhet të shërbehen. Për të përballuar këtë situatë, shumica e serverëve NFS nisen disa herë, që do të thotë se ka shumë serverë NFS brenda kernelit. Metodat specifike të zgjidhjes varen nga sistemi operativ. Shumica e kerneleve Unix nuk "live" serverë të shumtë NFS, por në vend të kësaj nisin procese të shumta përdoruesish (zakonisht të quajtur nfsd) që bëjnë një thirrje të vetme sistemi dhe mbeten brenda kernelit si një proces kernel.
  • Në mënyrë të ngjashme, një klient NFS kërkon kohë për të përpunuar një kërkesë nga një proces përdoruesi në hostin e klientit. RPC i lëshohet hostit të serverit, pas së cilës pritet një përgjigje. Për të siguruar që proceset e përdoruesit në hostin e klientit mund të përfitojnë nga NFS në çdo kohë, ka disa klientë NFS që funksionojnë brenda kernelit të klientit. Zbatimi specifik varet gjithashtu nga sistemi operativ. Sistemet Unix zakonisht përdorin një teknikë që të kujton një server NFS: një proces përdoruesi i quajtur biod bën një thirrje të vetme sistemi dhe mbetet brenda kernelit si një proces kernel.
  • Shumica e hosteve Unix mund të funksionojnë si një klient NFS dhe një server NFS, ose të dyja në të njëjtën kohë. Shumica e implementimeve të PC (MS-DOS) kanë vetëm implementime të klientit NFS. Shumica e sistemeve kryesore të IBM ofrojnë vetëm funksionalitetin e serverit NFS.

    NFS është në fakt më shumë se thjesht protokolli NFS. Figura 29.4 tregon programet e ndryshme RPC që përdoren me NFS.

    Aplikacion

    Numri i programit

    Numri i versionit

    Numri i procedurave

    konverteri i portit
    NFS
    programi i montimit
    menaxher bllokues
    monitor i gjendjes

    Figura 29.4 Programe të ndryshme RPC të përdorura në NFS.

    Versionet që kemi treguar në këtë figurë si njësi gjenden në sisteme të tilla si SunOS 4.1.3. Implementimet e reja ofrojnë versione më të reja të disa programeve. Solaris 2.2, për shembull, mbështet gjithashtu versionet 3 dhe 4 të zgjidhësit të portit dhe versionin 2 të mount daemon. SVR4 gjithashtu mbështet versionin 3 të konvertuesit të portit.

    Mount daemon thirret në hostin NFS të klientit përpara se klienti të mund të hyjë në sistemin e skedarëve të serverit. Ne e përshkruajmë këtë proces më poshtë.

    Menaxheri i bllokimit dhe monitori i statusit lejojnë klientin të bllokojë disa skedarë që ndodhen në serverin NFS. Këto dy programe janë të pavarura nga protokolli NFS sepse bllokimi kërkon vërtetimin e klientit si për hostin e klientit ashtu edhe për serverin, dhe vetë NFS është "neutral". (Ne do të flasim për indiferencën e NFS në më shumë detaje më poshtë.) Kapitujt 9, 10 dhe 11 [X/Open 1991] dokumentojnë procedurat që përdoren nga menaxheri i bllokimit dhe monitoruesi i statusit për kyçjen në NFS.

    Përshkruesit e skedarëve

    Një nga bazat e NFS zbatohet nga përshkruesit e skedarëve. Për të hyrë në një skedar ose drejtori në serverin e objektit, përdoret opaque. Termi opaque do të thotë që serveri krijon një dorezë skedari, ia kalon atë klientit, të cilin klienti e përdor më pas kur hyn në skedar. Klienti nuk shikon kurrë përmbajtjen e përshkruesit të skedarit - përmbajtja e tij është vetëm me interes për serverin.

    Klienti NFS merr një dorezë skedari sa herë që hap një skedar që aktualisht ndodhet në serverin NFS. Kur një klient NFS lexon ose shkruan në këtë skedar (në emër të një procesi përdoruesi), një dorezë në skedar i kalohet përsëri serverit. Kjo tregon që skedari është aksesuar.

    Zakonisht procesi i përdoruesit nuk funksionon me përshkruesit e skedarëve. Përshkruesit e skedarëve shkëmbehen midis klientit NFS dhe serverit NFS. Në versionin 2 të NFS, përshkruesi i skedarit është 32 bajt dhe në versionin 3 është rritur në 64 bajt.

    Serverët Unix zakonisht ruajnë informacionin e mëposhtëm në përshkruesin e skedarit: identifikuesin e sistemit të skedarëve (numrat kryesorë dhe të vegjël të pajisjes së sistemit të skedarëve), numrin inode (i-node) (një numër unik brenda sistemit të skedarëve), numrin e gjenerimit inode (një numër që ndryshon sa herë që inode ripërdoret për një skedar tjetër).

    Protokolli i montimit

    Klienti përdor protokollin e montimit NFS për të montuar sistemin e skedarëve të serverit përpara se të hyjë në skedarët NFS. Kjo zakonisht ndodh kur klienti është duke ngarkuar. Si rezultat, klienti merr një dorezë skedari në sistemin e skedarëve të serverit.

    Figura 29.5 përshkruan sekuencën e veprimeve të një klienti Unix gjatë ekzekutimit të komandës mount(8).

    Figura 29.5 Protokolli i montimit i përdorur nga komanda Unix mount.

    Në këtë rast, kryhen hapat e mëposhtëm.

    1. Kur serveri niset, konvertuesi i portit fillon në të.
    2. Pas zgjidhjes së portit, mount daemon (mountd) fillon në server. Ai krijon një pikë fundore TCP dhe një pikë fundore UDP dhe i cakton secilit një numër porti të caktuar në mënyrë dinamike. Më pas i regjistron këta numra me hartuesin e portit.
    3. Klienti ekzekuton komandën montuese, e cila lëshon një thirrje RPC te zgjidhësi i portit të serverit për të marrë një numër porti nga daemon i montimit në server. Të dy TCP dhe UDP mund të përdoren për komunikim midis klientit dhe zgjidhësit të portit, por zakonisht përdoret UDP.
    4. Zgjidhësi i portit raporton numrin e portit.
    5. Komanda mount lëshon një thirrje RPC te mount daemon për të montuar sistemin e skedarëve të serverit. Përsëri, mund të përdoret ose TCP ose UDP, megjithatë zakonisht përdoret UDP. Serveri tani mund të vërtetojë një klient bazuar në adresën e tij IP dhe numrin e portit për të parë nëse klienti mund të montojë sistemin e skedarëve të specifikuar.
    6. Mount daemon i përgjigjet me një dorezë skedari në sistemin e skedarëve të specifikuar.
    7. Komanda e montimit të klientit lëshon thirrjen e sistemit të montimit për të lidhur dorezën e skedarit të marrë në hapin 5 me pikën lokale të montimit në hostin e klientit. Doreza e skedarit ruhet në kodin NFS të klientit dhe tani e tutje çdo akses nga proceset e përdoruesit në skedarët në sistemin e skedarëve të serverit do të përdorë dorezën e skedarit si pikënisje.

    Ky implementim ia lë të gjithë procesin e montimit, përveç thirrjes së sistemit të montimit në klient, proceseve të përdoruesit dhe jo kernelit. Tre programet që treguam - komanda mount, zgjidhësi i portit dhe mount daemon - janë procese të përdoruesit.

    Në këtë shembull, në hostin diell (klienti NFS), komanda u ekzekutua

    dielli # montoj -t nfs bsdi:/usr /nfs/bsdi/usr

    Kjo komandë monton direktoriumin /usr në hostin bsdi (serverin NFS) si sistemin lokal të skedarëve /nfs/bsdi/usr. Figura 29.6 tregon rezultatin.

    Figura 29.6 Montimi i drejtorisë bsdi:/usr si /nfs/bsdi/usr në diellin pritës.

    Pas kësaj, kur hyni në skedarin /nfs/bsdi/usr/rstevens/hello.c në klientin Sun, aksesohet skedari /usr/rstevens/hello.c në serverin bsdi.

    Procedurat NFS

    Serveri NFS ofron 15 procedura, të cilat do t'i përshkruajmë tani. (Numrat e përdorur në këtë përshkrim nuk janë të njëjtë me numrat e procedurës NFS, pasi i kemi grupuar sipas funksionalitetit.) Edhe pse NFS është krijuar për të punuar në të gjithë sistemet operative, jo vetëm në sistemet Unix, disa nga procedurat bazohen në mënyrë specifike në funksionimin e Unix , të cilat, nga ana tjetër, mund të mos mbështeten nga sisteme të tjera operative (për shembull, lidhjet e forta, lidhjet simbolike, përdorimi në grup, të drejtat e aksesit në ekzekutim, etj.). Kapitulli 4 përmban më shumë informacion rreth karakteristikave të sistemeve të skedarëve, disa prej të cilave përdor NFS.

    1. GETATTR. Kthen atributet e skedarit: llojin e skedarit (skedar i rregullt, drejtori, etj.), të drejtat e aksesit, madhësinë e skedarit, zotëruesin e skedarit, kohën e hyrjes së fundit, etj.
    2. SETATTR. Vendos atributet e skedarit. Mund të vendoset vetëm një grup specifik atributesh: të drejtat e aksesit, pronari, pronësia e grupit, madhësia, koha e hyrjes së fundit dhe koha e modifikimit të fundit.
    3. STATFS. Rikthen statusin e sistemit të skedarëve: sasinë e hapësirës së lirë, madhësinë optimale për transferim, etj. Përdoret, për shembull, nga komanda Unix df.
    4. KËRKONI. "Vlerëson" skedarin. Kjo procedurë thirret nga klienti sa herë që një proces përdoruesi hap një skedar që ndodhet në serverin NFS. Kthehet një dorezë skedari, së bashku me atributet e skedarit.
    5. LEXO. Lexohet nga një skedar. Klienti specifikon një dorezë skedari, një zhvendosje të bajtit fillestar dhe numrin maksimal të bajteve për t'u lexuar (deri në 8192).
    6. SHKRUAJ. Shkruan në një skedar. Klienti specifikon dorezën e skedarit, kompensimin fillestar në bajt, numrin e bajteve për të shkruar dhe të dhënat për t'u shkruar.

      Shkrimet NFS kërkohet të jenë sinkron (me një pritje). Serveri nuk mund të përgjigjet në rregull derisa të dhënat të jenë shkruar me sukses (dhe çdo informacion tjetër skedari që duhet përditësuar) në disk.

    7. KRIJONI. Krijon një skedar.
    8. HIQ. Fshin një skedar.
    9. RIEMËROJ. Riemërton skedarin.
    10. LIDHJE. Krijon një lidhje të fortë me skedarin. Një lidhje e fortë është një koncept Unix që specifikon se një skedar i caktuar në disk mund të ketë çdo numër pikash hyrjeje (emra, të quajtur edhe lidhje të forta) që tregojnë për atë skedar.
    11. SYMLINK. Krijon një lidhje simbolike në një skedar. Një lidhje simbolike është një skedar që përmban emrin e një skedari tjetër. Shumica e operacioneve që kryhen në një lidhje simbolike (për shembull, hapja) në të vërtetë kryhen në skedarin ku tregon lidhja simbolike.
    12. LEXO LINK. Leximi i një lidhjeje simbole kthen emrin e skedarit të treguar nga lidhja simboliste.
    13. MKDIR. Krijon një direktori.
    14. RMDIR. Fshin një drejtori.
    15. READDIR. Lexon drejtorinë. Përdoret, për shembull, nga komanda Unix ls.

    Në fakt, emrat e procedurave të paraqitura fillojnë me prefiksin NFSPROC_, të cilin e kemi lënë jashtë.

    UDP apo TCP?

    NFS fillimisht u shkrua për të përdorur UDP, dhe të gjithë shitësit e ofrojnë këtë aftësi. Megjithatë, implementimet më të reja gjithashtu mbështesin TCP. Mbështetja TCP përdoret për të operuar mbi rrjetet globale, të cilat po bëhen më të shpejta. Prandaj, përdorimi i NFS nuk është më i kufizuar në rrjetet lokale.

    Kufijtë midis rrjeteve lokale dhe globale po mjegullohen dhe e gjithë kjo po ndodh shumë shpejt. Kohët e kthimit ndryshojnë në një gamë shumë të gjerë dhe tejmbushja ndodh gjithnjë e më shpesh. Këto karakteristika të rrjeteve globale çojnë në faktin se ato përdorin gjithnjë e më shumë algoritmet që kemi konsideruar për TCP - fillimi i ngadaltë dhe shmangia e mbingarkesës. Meqenëse UDP nuk ofron asgjë të ngjashme me këto algoritme, ata ose të ngjashëm duhet të ndërtohen në klientin dhe serverin NFS, përndryshe duhet të përdoret TCP.

    NFS mbi TCP

    Zbatimi i Berkeley Net/2 NFS mbështet UDP dhe TCP. [Macklem 1991] përshkruan këtë zbatim. Le të shohim se si përdorimi i NFS ndryshon kur ekzekutohet mbi TCP.

    1. Kur serveri nis, ai nis serverin NFS, i cili hapet në mënyrë aktive në portin TCP 2049, duke pritur që të arrijë një kërkesë për lidhje nga klienti. Kjo zakonisht bëhet përveç UDP-së së rregullt NFS, e cila dëgjon për datagramet hyrëse në portin UDP 2049.
    2. Kur një klient monton sistemin e skedarëve të një serveri duke përdorur TCP, ai bën një hapje aktive në portin TCP 2049 në server. Kjo krijon një lidhje TCP midis klientit dhe serverit për këtë sistem skedarësh. Nëse i njëjti klient monton një sistem skedar tjetër në të njëjtin server, krijohet një lidhje tjetër TCP.
    3. Si klienti ashtu edhe serveri vendosin opsionin TCP "stay alive" në skajet e tyre të lidhjes (Kapitulli 23). Kjo ju lejon të përcaktoni momentin e dështimit ose rindezjes së një ose një pjesëmarrësi tjetër të shkëmbimit.
    4. Të gjitha aplikacionet në klient që përdorin sistemin e skedarëve të serverit ndajnë të njëjtën lidhje TCP me atë sistem skedarësh. Për shembull, nëse do të kishte në figurën 29.6, do të kishte një drejtori tjetër në bsdi, me emrin smith, poshtë drejtorisë /usr, akseset në skedarë në /nfs/bsdi/usr/rstevens dhe /nfs/bsdi/usr/smith do të ndaheshin e njëjta gjë e njëjta lidhje TCP.
    5. Nëse klienti përcakton që serveri është rrëzuar ose është rindezur (pas marrjes së një gabimi TCP "koha e lidhjes mbaroi" ose "lidhja u mbyll nga hosti"), ai përpiqet të rilidhet me serverin. Klienti kryen një tjetër hapje aktive për të rivendosur lidhjen TCP për këtë sistem skedarësh. Çdo kërkesë nga një klient që ka skaduar në një lidhje të mëparshme ribotohet në një lidhje të re.
    6. Nëse një klient dështon, po ashtu edhe aplikacionet që funksiononin përpara dështimit. Kur klienti riniset, ai mund të rimontojë sistemin e skedarëve të serverit duke përdorur TCP, duke përdorur një lidhje tjetër TCP me serverin. Lidhja e mëparshme ndërmjet klientit dhe serverit për këtë sistem skedarësh është në një gjendje gjysmë të hapur (serveri mendon se është ende i hapur), megjithatë, meqenëse serveri ka vendosur opsionin "stay alive", kjo lidhje gjysmë e hapur do të jetë mbyllet kur serveri TCP dërgon hetimin tjetër." qëndro gjallë."

    Me kalimin e kohës, shitësit e tjerë planifikojnë të mbështesin NFS mbi TCP.

    Shembuj NFS

    Le të përdorim tcpdump për të parë se cilat rutina NFS thirren nga klienti për operacionet normale të skedarëve. Kur tcpdump përcakton që një datagram UDP përmban një thirrje RPC (thirrja është 0 në Figurën 29.1) me portin e destinacionit 2049, ai dekodon datagramin si një kërkesë NFS. Në mënyrë të ngjashme, nëse një datagram UDP përmban një përgjigje RPC (përgjigja është 1 në Figurën 29.2) me një port burim të vitit 2049, ai dekodon datagramin si një përgjigje NFS.

    Shembull i thjeshtë: leximi i një skedari

    Në shembullin e parë, ne do të kopjojmë një skedar të vendosur në serverin NFS në terminal duke përdorur komandën cat(1):

    diell% cat /nfs/bsdi/usr/rstevens/hello.c kopjimi i një skedari në terminal
    kryesore ()
    {
    printf ("përshëndetje, botë\n");
    }

    Sistemi i skedarëve /nfs/bsdi/usr në host sun (klienti NFS) është në fakt sistemi i skedarëve /usr në host bsdi (serveri NFS), siç tregohet në figurën 29.6. Kerneli i diellit e zbulon këtë kur cat hap një skedar dhe përdor NFS për të hyrë në skedar. Figura 29.7 tregon daljen e komandës tcpdump.

    1 0.0 diell.7aa6 > bsdi.nfs: 104 getattr
    2 0.003587 (0.0036) bsdi.nfs > sun.7aa6: përgjigju në rregull 96

    3 0.005390 (0.0018) diell.7aa7 > bsdi.nfs: 116 kërko "rstevens"
    4 0.009570 (0.0042) bsdi.nfs > sun.7aa7: përgjigju në rregull 128

    5 0.011413 (0.0018) diell.7aa8 > bsdi.nfs: 116 kërko "hello.c"
    6 0.015512 (0.0041) bsdi.nfs > sun.7aa8: përgjigju në rregull 128

    7 0.018843 (0.0033) diell.7aa9 > bsdi.nfs: 104 getattr
    8 0.022377 (0.0035) bsdi.nfs > sun.7aa9: përgjigju në rregull 96

    9 0.027621 (0.0052) diell.7aaa > bsdi.nfs: 116 lexim 1024 byte @ 0
    10 0.032170 (0.0045) bsdi.nfs > sun.7aaa: pergjigju ne rregull 140

    Figura 29.7 Operacioni NFS gjatë leximit të një skedari.

    Komanda tcpdump deshifron kërkesën ose përgjigjen NFS, dhe gjithashtu printon fushën XID për klientin në vend të numrit të portit. Fusha XID në rreshtat 1 dhe 2 është 0x7aa6.

    Emri i skedarit /nfs/bsdi/usr/rstevens/hello.c përpunohet nga funksioni i hapur në kernelin e klientit një element emër në të njëjtën kohë. Kur funksioni i hapur arrin /nfs/bsdi/usr, ai përcakton se kjo është një pikë montimi në sistemin e skedarëve NFS.

    Në linjën 1, klienti thërret GETATTR për të marrë atributet e drejtorisë së serverit që klienti ka montuar (/usr). Kjo kërkesë RPC përmban 104 bajtë të dhëna, përveç titujve IP dhe UDP. Përgjigja në rreshtin 2 kthehet në rregull dhe përmban 96 bajt të dhëna, përveç titujve IP dhe UDP. Ne mund të shohim në këtë figurë se mesazhi minimal NFS përmban afërsisht 100 bajt të dhëna.

    Në linjën 3, klienti thërret LOOKUP në skedarin rstevens dhe merr një përgjigje OK në rreshtin 4. LOOKUP specifikon emrin e skedarit rstevens dhe një dorezë për skedarin që është ruajtur nga kerneli kur është montuar sistemi i skedarëve në distancë. Përgjigja përmban një dorezë të re skedari që përdoret në hapin tjetër.

    Në rreshtin 5, klienti kërkon skedarin hello.c duke përdorur dorezën e skedarit nga rreshti 4. Ai merr një dorezë tjetër skedari në rreshtin 6. Ky dorezë e re e skedarit është pikërisht ajo që klienti përdor në rreshtat 7 dhe 9 për të hyrë në skedar / nfs /bsdi/usr/rstevens/hello.c. Ne shohim që klienti kryen një KËRKIM në secilin komponent të emrit në rrugën drejt skedarit që hapet.

    Në rreshtin 7, klienti ekzekuton përsëri GETATTR, i ndjekur nga READ në rreshtin 9. Klienti kërkon 1024 bajt duke filluar nga kompensimi 0, por merr më pak se 1024 bajt të dhëna. (Pas zbritjes së madhësive të fushave RPC dhe vlerave të tjera të kthyera me procedurën READ, 38 bajt të dhëna kthehen në rreshtin 10. Kjo është pikërisht madhësia e skedarit hello.c.)

    Në këtë shembull, procesi i përdoruesit nuk di asgjë për këto kërkesa dhe përgjigje NFS që kryhen nga kerneli. Aplikacioni thjesht thërret funksionin kryesor të hapur, i cili shkakton shkëmbimin e 3 kërkesave dhe 3 përgjigjeve (linjat 1-6), dhe më pas thërret funksionin e leximit thelbësor, i cili thërret 2 kërkesa dhe 2 përgjigje (rreshtat 7-10). Për aplikacionin e klientit, skedari i vendosur në serverin NFS është transparent.

    Shembull i thjeshtë: krijimi i një drejtorie

    Si një shembull tjetër, le të ndryshojmë drejtorinë e punës në një drejtori që ndodhet në serverin NFS dhe më pas të krijojmë një drejtori të re:

    diell% cd /nfs/bsdi/usr/rstevens ndryshoni drejtorinë e punës
    diell % mkdir Mail krijoni një drejtori

    Figura 29.8 tregon daljen e komandës tcpdump.

    1 0.0 diell.7ad2 > bsdi.nfs: 104 getattr
    2 0.004912 (0.0049) bsdi.nfs > sun.7ad2: përgjigju në rregull 96

    3 0.007266 (0.0024) diell.7ad3 > bsdi.nfs: 104 getattr
    4 0.010846 (0.0036) bsdi.nfs > sun.7ad3: përgjigju në rregull 96

    5 35.769875 (35.7590) diell.7ad4 > bsdi.nfs: 104 getattr
    6 35.773432 (0.0036) bsdi.nfs > sun.7ad4: përgjigju në rregull 96

    7 35.775236 (0.0018) sun.7ad5 > bsdi.nfs: 112 kërko "Mail"
    8 35.780914 (0.0057) bsdi.nfs > sun.7ad5: përgjigju në rregull 28

    9 35.782339 (0.0014) sun.7ad6 > bsdi.nfs: 144 mkdir "Mail"
    10 35.992354 (0.2100) bsdi.nfs > sun.7ad6: përgjigju në rregull 128

    Figura 29.8 Operacioni NFS kur ndryshon direktoriumin (cd) në direktoriumin NFS dhe më pas krijon direktorinë (mkdir).

    Kur ndryshon direktoriumin, klienti thërret GETATTR dy herë (linjat 1-4). Kur krijojmë një direktori të re, klienti thërret GETATTR (rrenjat 5 dhe 6), pastaj LOOKUP (rreshtat 7 dhe 8 për të kontrolluar që drejtoria nuk ekziston), pastaj MKDIR për të krijuar direktoriumin (rreshtat 9 dhe 10). Përgjigja OK në rreshtin 8 nuk do të thotë që drejtoria ekziston. Thjesht do të thotë që procedura ktheu një vlerë. tcpdump nuk interpreton vlerën e kthyer nga procedurat NFS. Komanda thjesht printon OK dhe numrin e bajteve të të dhënave në përgjigje.

    Indiferenca

    Një nga karakteristikat e NFS (kritikët e NFS e quajnë atë një lez, jo një veçori) është se serveri NFS është indiferent. Serverit nuk i intereson se cilët klientë hyjnë në cilët skedarë. Vini re se lista e procedurave NFS e treguar më parë nuk përfshin një procedurë të hapur ose të mbyllur. Procedura LOOKUP është e ngjashme me një hapje, por serveri nuk e di kurrë nëse klienti ka aksesuar skedarin pasi është bërë KËRKIMI.

    Arsyeja për këtë "sjellje mos u intereson" është për ta bërë më të lehtë rikuperimin nga një dështim i serverit pasi ai rrëzohet dhe rindizet.

    Shembull: dështimi i serverit

    Në shembullin e mëposhtëm, ne po lexojmë një skedar nga një server NFS kur serveri rrëzohet dhe rindizet. Kjo do të tregojë se si "indiferenca" e serverit i lejon klientit të "mos e di" se serveri ka dështuar. Gjatë gjithë kohës që serveri rrëzohet dhe rindizet, klienti nuk është në dijeni të problemit dhe aplikacioni i klientit funksionon njësoj si më parë.

    Në klientin sun, ne ekzekutuam cat me një skedar shumë të madh si argument (/usr/share/lib/termcap në serverin svr4 NFS), shkëputëm kabllon Ethernet në mes të transferimit, mbyllëm dhe rindizëm serverin dhe më pas rilidhëm kabllon . Klienti është konfiguruar të lexojë 1024 bajt për NFS të lexuar. Figura 29.9 tregon daljen e tcpdump.

    Rreshtat 1-10 korrespondojnë me klientin që hap skedarin. Ky operacion është i ngjashëm me atë të paraqitur në figurën 29.7. Në rreshtin 11 shohim leximin e parë (READ) nga skedari prej 1024 bajte të dhënash; përgjigja u kthye në rreshtin 12. Kjo vazhdon deri në rreshtin 129 (duke lexuar 1024 bajt READ dhe më pas duke iu përgjigjur OK).

    Në rreshtat 130 dhe 131 shohim dy kërkesa që skadojnë dhe ridorëzohen në rreshtat 132 dhe 133. Pyetja e parë: shohim dy kërkesa të lexuara, njëra fillon me kompensimin 65536 dhe tjetra fillon me kompensimin 73728, pse? Kerneli i klientit përcaktoi që aplikacioni i klientit po lexonte në mënyrë sekuenciale dhe u përpoq të merrte blloqe të dhënash paraprakisht. (Shumica e kerneleve Unix e bëjnë këtë lexim përpara.) Kerneli i klientit ekzekuton gjithashtu disa demonë hyrje/dalje (I/O) të bllokut NFS (proceset biodike) që përpiqen të gjenerojnë kërkesa të shumta RPC në emër të klientit. Një demon lexon 8192 bajte, duke filluar nga 65536 (në zinxhirë 1024 bajte), dhe të tjerët lexojnë përpara 8192 byte, duke filluar nga 73728.

    Ritransmetimet e klientëve shfaqen në linjat 130-168. Në rreshtin 169 shohim që serveri është rindezur dhe ka dërguar një kërkesë ARP përpara se t'i përgjigjet kërkesës NFS të klientit në linjën 168. Përgjigja në rreshtin 168 dërgohet në linjën 171. Kërkesat READ të klientit vazhdojnë.

    1 0.0 sun.7ade > svr4.nfs: 104 getattr
    2 0.007653 (0.0077) svr4.nfs > sun.7ade: përgjigju në rregull 96

    3 0.009041 (0.0014) diell.7adf > svr4.nfs: 116 kërko "share"
    4 0.017237 (0.0082) svr4.nfs > sun.7adf: përgjigju në rregull 128

    5 0.018518 (0.0013) diell.7ae0 > svr4.nfs: 112 kërko "lib"
    6 0.026802 (0.0083) svr4.nfs > sun.7ae0: përgjigju në rregull 128

    7 0.028096 (0.0013) sun.7ae1 > svr4.nfs: 116 kërko "termcap"
    8 0.036434 (0.0083) svr4.nfs > sun.7ae1: përgjigju në rregull 128

    9 0.038060 (0.0016) diell.7ae2 > svr4.nfs: 104 getattr
    10 0.045821 (0.0078) svr4.nfs > sun.7ae2: përgjigju në rregull 96

    11 0.050984 (0.0052) diell.7ae3 > svr4.nfs: 116 lexim 1024 byte @ 0
    12 0.084995 (0.0340) svr4.nfs > sun.7ae3: përgjigju në rregull 1124

    Leximi

    128 3.430313 (0.0013) diell.7b22 > svr4.nfs: 116 lexim 1024 byte @ 64512
    129 3.441828 (0.0115) svr4.nfs > sun.7b22: përgjigju në rregull 1124

    130 4.125031 (0.6832) diell.7b23 >
    131 4.868593 (0.7436) diell.7b24 >

    132 4.993021 (0.1244) diell.7b23 > svr4.nfs: 116 lexim 1024 bajte @ 65536
    133 5.732217 (0.7392) diell.7b24 > svr4.nfs: 116 lexim 1024 byte @ 73728

    134 6.732084 (0.9999) diell.7b23 > svr4.nfs: 116 lexim 1024 bajte @ 65536
    135 7.472098 (0.7400) diell.7b24 > svr4.nfs: 116 lexim 1024 bajte @ 73728

    136 10.211964 (2.7399) diell.7b23 >
    137 10.951960 (0.7400) diell.7b24 >

    138 17.171767 (6.2198) diell.7b23 > svr4.nfs: 116 lexim 1024 byte @ 65536
    139 17.911762 (0.7400) diell.7b24 > svr4.nfs: 116 lexim 1024 bajte @ 73728

    140 31.092136 (13.1804) diell.7b23 > svr4.nfs: 116 lexim 1024 byte @ 65536
    141 31.831432 (0.7393) diell.7b24 > svr4.nfs: 116 lexim 1024 bajte @ 73728

    142 51.090854 (19.2594) diell.7b23 > svr4.nfs: 116 lexim 1024 byte @ 65536
    143 51.830939 (0.7401) diell.7b24 > svr4.nfs: 116 lexim 1024 byte @ 73728

    144 71.090305 (19.2594) diell.7b23 > svr4.nfs: 116 lexim 1024 bajte @ 65536
    145 71.830155 (0.7398) diell.7b24 > svr4.nfs: 116 lexim 1024 bajte @ 73728

    Ritransmetimet

    167 291.824285 (0.7400) diell.7b24 > svr4.nfs: 116 lexim 1024 byte @ 73728
    168 311.083676 (19.2594) diell.7b23 > svr4.nfs: 116 lexim 1024 bajte @ 65536

    Serveri u rindez

    169 311.149476 (0.0658) arp kush-ka diell tregoj svr4
    170 311.150004 (0.0005) përgjigje arp dielli është-në 8:0:20:3:f6:42

    171 311.154852 (0.0048) svr4.nfs > sun.7b23: përgjigju në rregull 1124

    172 311.156671 (0.0018) diell.7b25 > svr4.nfs: 116 lexim 1024 bajte @ 66560
    173 311.168926 (0.0123) svr4.nfs > sun.7b25: përgjigju në rregull 1124
    duke lexuar

    Figura 29.9 Klienti lexon një skedar kur serveri NFS prishet dhe rindizet.

    Aplikacioni i klientit nuk do ta dijë kurrë se serveri u rrëzua dhe u rindez, përveç që pati një pauzë 5 minutash midis rreshtave 129 dhe 171, kështu që prishja e serverit është transparente për klientin.

    Për të vlerësuar gjatësinë e afateve të ritransmetimit në këtë shembull, imagjinoni se ka dy demonë klientësh, secili me afatet e veta. Intervalet për demonin e parë (duke lexuar nga kompensimi 65536) janë afërsisht si më poshtë (të rrumbullakosura në dy shifra dhjetore): 0.68; 0,87; 1,74; 3,48; 6,96; 13,92; 20.0; 20.0; 20.0 e kështu me radhë. Intervalet për demonin e dytë (duke lexuar nga kompensimi 73728) janë saktësisht të njëjta. Kjo do të thotë që këta klientë NFS përdorin afate kohore që janë shumëfish të 0,875 sekondave, me një kufi të sipërm prej 20 sekondash. Pas çdo kohe, intervali i ritransmetimit dyfishohet: 0,875; 1,75; 3.5; 7.0 dhe 14.0.

    Sa kohë do t'i duhet klientit për të bërë ritransmetime? Klienti ka dy opsione që mund të ndikojnë në këtë. Së pari, nëse sistemi i skedarëve të serverit është i montuar fort, klienti do të ritransmetojë përgjithmonë, por nëse sistemi i skedarëve të serverit është i montuar në mënyrë të butë, klienti do të ndalojë së provuari pas një numri fiks ritransmetimesh. Gjithashtu, në rastin e një montimi të fortë, klienti ka mundësinë të lejojë përdoruesin të ndërpresë ritransmetimet e dështuara ose të mos ndërpresë. Nëse, gjatë montimit të sistemit të skedarëve të serverit, hosti i klientit tregon se ai mund të ndërpritet dhe nëse nuk duam të presim 5 minuta që serveri të rindizet pas përplasjes, mund të vendosim një simbol të ndërprerjes për të përfunduar aplikacionin e klientit.

    Disa procedura të njëjta

    Procedurat RPC mund të ekzekutohen nga serveri disa herë, por gjithsesi kthejnë të njëjtin rezultat. Për shembull, procedura e leximit të NFS. Siç e pamë në Figurën 29.9, klienti thjesht rilëshon thirrjen READ për sa kohë që merr një përgjigje. Në shembullin tonë, arsyeja e ritransmetimit ishte se serveri nuk funksiononte. Nëse serveri nuk ka dështuar dhe mesazhet që përmbajnë përgjigje RPC kanë humbur (pasi UDP është një protokoll jo i besueshëm), klienti thjesht ritransmeton dhe serveri bën të njëjtin READ përsëri. E njëjta pjesë e të njëjtit skedar lexohet përsëri dhe i dërgohet klientit.

    Kjo funksionon sepse çdo kërkesë për lexim READ përmban një kompensim fillestar. Nëse procedura NFS i kërkon serverit të lexojë N bajt të ardhshëm të skedarit, nuk do të funksiononte. Nëse serveri nuk do të ishte indiferent (kjo është e kundërta e indiferentit) dhe përgjigja do të humbiste dhe klienti do të ribotonte READ për N bajtet e ardhshme, rezultati do të ishte i ndryshëm. Kjo është arsyeja pse procedurat NFS READ dhe WRITE kanë një kompensim fillestar. Është klienti që ruan gjendjen (kompensimin aktual për çdo skedar), jo serveri.

    Fatkeqësisht, jo të gjitha operacionet e sistemit të skedarëve mund të kryhen disa herë. Për shembull, imagjinoni hapat e mëposhtëm: klienti NFS lëshon një kërkesë REMOVE për të hequr një skedar; Serveri NFS fshin skedarin dhe përgjigjet OK; përgjigja e serverit ka humbur; Klienti NFS skadon dhe ritransmeton kërkesën; Serveri NFS nuk mund ta gjejë skedarin dhe kthen një gabim; Aplikacioni i klientit merr një gabim që thotë se skedari nuk ekziston. Ky gabim kthehet në aplikacionin e klientit dhe ky gabim përmban informacion të pasaktë - skedari nuk ekzistonte dhe u fshi.

    Më poshtë është një listë e procedurave NFS që mund të ekzekutohen disa herë: GETATTR, STATFS, LOOKUP, READ, WRITE, READLINK dhe READDIR. Procedurat që nuk mund të ekzekutohen disa herë: CREATE, REMOVE, REEMRO, LINK, SYMLINK, MKDIR dhe RMDIR. SETATTR zakonisht ekzekutohet disa herë, përveç nëse është përdorur për të shkurtuar një skedar.

    Për shkak se përgjigjet jetime ka gjithmonë gjasa të ndodhin kur përdorni UDP, serverët NFS duhet të kenë një mënyrë për të trajtuar operacione që nuk mund të kryhen disa herë. Shumica e serverëve kanë një cache të përgjigjeve të fundit në të cilën ata ruajnë përgjigjet e marra më së fundi për operacione të tilla. Sa herë që serveri merr një kërkesë, ai fillimisht shikon përmes cache-it të tij dhe nëse gjendet një përputhje, kthen përgjigjen e mëparshme në vend që të thërrasë përsëri procedurën NFS. [Juszczak 1989] përshkruan detajet e këtyre llojeve të cache.

    Kjo qasje ndaj procedurave të serverit zbatohet për të gjitha aplikacionet e bazuara në UDP, jo vetëm për NFS. DNS, për shembull, ofron një shërbim që mund të përdoret shumë herë pa dhimbje. Serveri DNS mund të kërkojë analizuesin çdo herë, gjë që nuk do të çojë në rezultate negative (ndoshta, përveç se burimet e rrjetit do të jenë të zëna).

    Versioni 3 i NFS

    Gjatë vitit 1994, u lëshuan specifikimet për versionin 3 të protokollit NFS [Sun Microsystems 1993]. Zbatimet pritet të bëhen të disponueshme gjatë vitit 1994.

    Këtu është një përmbledhje e shpejtë e ndryshimeve kryesore midis versioneve 2 dhe 3. Ne do t'i quajmë ato V2 dhe V3.

    1. Përshkruesit e skedarëve në V2 janë një grup me madhësi fikse prej 32 bajt. Në V3 është një grup me madhësi të ndryshueshme me një madhësi deri në 64 bajt. Një grup me gjatësi të ndryshueshme në XDR përcaktohet nga një numërues 4 bajt i ndjekur nga bajtë realë. Kjo zvogëlon madhësinë e përshkruesit të skedarit në implementime të tilla si Unix, ku kërkohen vetëm rreth 12 bajt, por lejon që zbatimet jo-Unix të shkëmbejnë informacion shtesë.
    2. V2 kufizon numrin e bajteve për procedurë READ ose WRITE RPC në 8192 byte. Ky kufizim nuk zbatohet në V3, që nga ana tjetër do të thotë se përdorimi i UDP kufiri do të jetë vetëm madhësia e datagramit IP (65535 byte). Kjo lejon që paketat e mëdha të përdoren për lexim dhe shkrim në rrjete të shpejta.
    3. Madhësitë e skedarëve dhe zhvendosjet fillestare të bajtit për procedurat READ dhe WRITE janë zgjeruar nga 32 në 64 bit, duke lejuar trajtimin e madhësive më të mëdha të skedarëve.
    4. Atributet e skedarit kthehen në çdo thirrje që mund të ndikojë në atributet. Kjo zvogëlon numrin e thirrjeve GETATTR të kërkuara nga klienti.
    5. Shkrimet (WRITEs) mund të jenë asinkrone, ndërsa në V2 ata supozohej të ishin sinkron. Kjo mund të përmirësojë performancën e procedurës WRITE.
    6. Një procedurë u hoq (STATFS) dhe shtatë u shtuan: ACCESS (kontrolloni lejet e skedarit), MKNOD (krijoni një skedar të veçantë Unix), READDIRPLUS (kthimin e emrave të skedarëve në një direktori së bashku me atributet e tyre), FSINFO (kthimin e informacionit statistikor rreth sistemi i skedarëve ), FSSTAT (kthehet informacioni i sistemit dinamik të skedarëve), PATHCONF (kthehet informacioni i skedarit POSIX.1) dhe COMMIT (kryen shkrime asinkrone të bëra më parë në ruajtje të vazhdueshme).

    Përfundime të shkurtra

    RPC është një mënyrë për të ndërtuar një aplikacion klient-server në mënyrë të tillë që klienti thjesht të thërrasë procedurat në server. Të gjitha detajet e rrjetit janë të fshehura në cungët e klientit dhe serverit, të cilat krijohen për aplikacione nga paketa RPC dhe në rutinat e bibliotekës RPC. Ne treguam formatin e mesazheve të thirrjeve dhe përgjigjeve RPC dhe përmendëm se XDR përdoret për të koduar vlerat, duke lejuar klientët dhe serverët RPC të funksionojnë në arkitektura të ndryshme makinerie.

    Një nga aplikacionet RPC më të përdorura është Sun NFS, një protokoll heterogjen i aksesit të skedarëve që përdoret gjerësisht në host të pothuajse të gjitha madhësive. Ne shikuam NFS dhe si përdor UDP ose TCP. Protokolli NFS Version 2 përcakton 15 procedura.

    Qasja e klientit në një server NFS fillon me një protokoll montimi, pas së cilës një dorezë skedari i kthehet klientit. Klienti më pas mund t'i qaset skedarëve në sistemin e skedarëve të serverit duke përdorur këtë dorezë skedari. Emrat e skedarëve kërkohen në server një element emri në të njëjtën kohë, duke kthyer një dorezë të re skedari për secilin element. Rezultati përfundimtar është një dorezë për skedarin që është aksesuar dhe që përdoret për lexime dhe shkrime të njëpasnjëshme.

    NFS përpiqet t'i bëjë të gjitha procedurat e tij të pavarura nga numri i ekzekutimeve në mënyrë që klienti thjesht të mund të ribotojë kërkesën nëse përgjigja humbet. Ne kemi parë shembuj të kësaj ku një klient po lexonte një skedar ndërsa serveri u rrëzua dhe rindizej.

    Ushtrime

    Në figurën 29.7, pamë që tcpdump interpreton paketat si kërkesa dhe përgjigje NFS dhe printon XID. A mund ta bëjë tcpdump këtë për çdo kërkesë ose përgjigje RPC?
  • Pse mendoni se programi i serverit RPC në sistemet Unix përdor porte të caktuara në mënyrë dinamike në vend të atyre të njohura më parë?
  • Klienti RPC thirri dy procedura serveri. Procedura e parë zgjati 5 sekonda për të përfunduar, dhe e dyta - 1 sekondë. Klienti ka një kohëzgjatje prej 4 sekondash. Vizatoni një diagram kohor të asaj që shkëmbehet midis klientit dhe serverit. (Imagjinoni që nuk kishte kohë për të kaluar një mesazh nga klienti në server dhe anasjelltas.)
  • Në shembullin në figurën 29.9, çfarë do të ndodhte nëse karta Ethernet e serverit NFS hiqej ndërsa serveri NFS ishte i fikur?
  • Kur serveri u rindez në Figurën 29.9, ai e përpunoi kërkesën duke filluar nga offset 65536 (rreshtat 168 dhe 171), dhe më pas përpunoi kërkesën tjetër duke filluar nga offset 66560 (rreshtat 172 dhe 173). Çfarë ndodh me pyetjen që fillon me offset 73728 (rreshti 167)?
  • Kur përshkruam procedura të pavarura nga numri i ekzekutimeve NFS, ne treguam një shembull të një përgjigjeje REMOVE që humbi në rrjet. Çfarë ndodh në këtë rast nëse TCP përdoret në vend të UDP?
  • Nëse serveri NFS përdor një port të caktuar në mënyrë dinamike në vend të portit 2049, çfarë ndodh me klientin NFS kur serveri prishet dhe rindizet?
  • Ka shumë, shumë pak numra portash të rezervuar (Kapitulli 1, seksioni "Numrat e portit"), me një maksimum prej 1023 për host. Nëse një server NFS kërkon që klientët e tij të kenë porte të rezervuara (që zakonisht e bëjnë) dhe një klient NFS që përdor TCP monton N sisteme skedarësh në N serverë të ndryshëm, a duhet klienti të ketë numra të ndryshëm portash të rezervuara për secilën lidhje?
  • Artikujt më të mirë mbi këtë temë