Newsgroup: it.comp.os.linux.sys
Titolo: Due schede di rete

Ciao a tutti,
scusate il subject poco esplicativo ma non sapevo
spiegarmi meglio con qualche carattere.
Ho un solo computer con Linux (ma va?), due schede
di rete ed un hub.
Connetto le due schede allo stesso hub ed assegno
192.168.1.1 ad eth0, 192.168.1.2 ad eth1,
abilitando le schede con ifconfig.
Non mi chiedete perche', ma vorrei spedire
realmente un pacchetto destinato a 192.168.1.2 da
eth0, in pratica vorrei che venga spedito verso
l'hub e torni indietro sull'altra scheda (eth1).
Ho fatto alcuni tentativi ma non riesco, come
posso fare???
Non mi dite che e' impossibile perche' non ci
credo!!!!
Sent via Deja.com 
http://www.deja.com/
Before you buy.

 writes:
pozzugno> Ciao a tutti, scusate il subject poco esplicativo ma non
pozzugno> sapevo spiegarmi meglio con qualche carattere.
Eh, meglio di "Aiuuuutooo" o "chi mi da una mano".
pozzugno> Non mi chiedete perche', ma vorrei spedire realmente un
pozzugno> pacchetto destinato a 192.168.1.2 da eth0, in pratica vorrei
pozzugno> che venga spedito verso l'hub e torni indietro sull'altra
pozzugno> scheda (eth1).
Il punto è che tutti i sistemi operativi hanno il una parte della
gestione della rete che non implica l'uso dei driver delle periferiche
(eth, ppp, ...): il loopback. Questo implica che se anche non usi
l'interfaccia lo (127.0.0.1) il kernel usa un'altra "interna" invece
che spedire il pacchetto al livello fisico della ethernet.
pozzugno> Ho fatto alcuni tentativi ma non riesco, come posso fare???
pozzugno> Non mi dite che e' impossibile perche' non ci credo!!!!
Si può fare tutto, visto che ci sono i sorgenti. Senza andare a
toccare i sorgenti sono moderatamente convinto che si possa fare
mettendo mano al pacchetto iproute2, e sicuramente con una piccola
pezza al kernel. Una cosa simile l'ho vista usare nel
http://www.linuxvirtualserver.org/
Ciao
Marco

 credo!!!!
...guarda, un asino che vola!!!!

,

Che vuol dire tutto ciň?


 
http://www.linuxvirtualserver.org/
Supponendo invece di collegare la eth0 (192.168.1.1) ad un router,
quindi ad una rete complessa che ha anche un collegamento, da qualche
parte, ad eth1 della stessa macchina (ovviamente con indirizzo di rete
diverso, diciamo 192.168.10.1), la cosa è fattibile più facilmente
oppure no?



no, ci vogliono i network monitor

 Che vuol dire tutto ciň?
che quello che hai detto non si puň fare....
Si posso fare altre cose...ma quello che vuoi fare tu č veramente un
asino che vola....

 writes:
pozzugno> collegamento, da qualche parte, ad eth1 della stessa
pozzugno> macchina (ovviamente con indirizzo di rete diverso, diciamo
pozzugno> 192.168.10.1), la cosa è fattibile più facilmente oppure no?
No; ma per curiosità, mica per altro, a che ti serve 'sta cosa: è
abbastanza strana. Comunque puoi mettere un router -anche linux- che
fa NAT per uno degli indirizzi delle interfacce, ma AFAIK non puoi
farlo il livello fisico (ethernet), al massimo con tcp/udp.
Ciao
Marco

> No; ma per curiosit=E0, mica per altro, a che ti serve 'sta cosa
Okay, l'avete voluta voi.
Sto facendo la tesi in Reti di Telecomunicazioni e sto studiando il
comportamento di una rete IP con un traffico particolare, di tipo
frattale (o autosimilare, qualcuno di voi conosce?).
Bene, ho costruito un generatore di traffico frattale, un semplice host
che genera pacchetti quando gli dico io, all'istante t1, t2, ecc. di
lunghezza l1, l2, ecc.
Sti pacchetti devono attraversare una rete sperimentale più o meno
complessa e dovrei fare delle misure sulle prestazioni della rete.
La prima cosa che mi è venuta in mente di fare è quella di generare
da una macchina il traffico frattale e raccoglierlo su un'altra,
sullo stesso segmento ethernet.
Una banalità, volevo solo capire come si comportava il tutto, avrei
dovuto ottenere lo stesso traffico generato in ricezione.
Pur utilizzando un traffico non frattale ma costante (trasmettevo
1 pacchetto al secondo) ricevevo, invece, pacchetti ad una velocità
inferiore o superiore (anche se di poco, dell'ordine di 1.0002 secondi
oppure 0.9998 secondi). Le ho provate di tutto, la mia conclusione è
che i clock dei due processori sono sfasati, cioè ogni secondo di uno,
l'altro si prende qualche centinaio di microsecondi.
Ciò mi sembra molto plausibile poichè scambiando generatore e
ricevitore, la velocità da maggiore di 1 pacchetto al secondo, diventa
minore ed il tempo medio di interarrivo nei due casi è l'inverso l'uno
dell'altro.
Per risolvere il problema potrei:
1. misurare lo sfasamento fra i clock e compensarlo (come faccio?)
2. utilizzo lo stesso computer per trasmettere e ricevere
contemporaneamente, quindi con due schede di rete, ecc. ecc.
Ecco svelato il motivo. Se è così stupido, qualcuno mi può consigliare
qualche altro modo di procedere?
E' ovvio che fra una scheda di rete e l'altra potrei collegarci tutto
quello che voglio, anche l'intera Internet!!!
Devo fare solo degli esperimenti, nella realtà ciò sono convinto che
non ha senso.
Eppure mi sembra strano che 'sta cosa non si possa fare.
Voglio dire, quando faccio un ping con l'indirizzo di eth1, la prima
cosa che fa linux qual è?
Consulta la tabella di routing? In questo caso potrei modificarla in
modo da mandare il traffico destinato ad eth1 su eth0, cosa tra l'altro
che ho fatto, ma niente. Anche scollegando i cavi, il ping funziona, si
vede che si usa il loopback.
Non è che posso risolvere qualcosa con ARP? Magari è proprio durante la
richiesta di indirizzo fisico che linux si accorge di essere già la
destinazione.
Ovviamente ci sono altre soluzioni più o meno complesse: IP Tunnelling,
modifica dell'indirizzo IP da qualche parte, ma sono operazioni che
potrebbero modificare il tipo di traffico (frattale) e invalidare il
mio esperimento.
Scusate la mail lunga, ma mi ripeto: l'avete voluta voi :)
Ora datevi da fare con i consigli ;)


 Ora datevi da fare con i consigli ;)
Se ti interessa solo il protocollo IP, non ti basta il loopback? O
deve entrare anche l'hw delle schede nella simulazione? 
-- 
Stefano

 deve entrare anche l'hw delle schede nella simulazione?
Purtroppo no, ho bisogno di lanciare pacchetti in una rete reale,
poiche' devo misurare le prestazioni dei router sottoposti a stress.
Non mi dite qual e' l'utilita', devo farlo e basta, ora voglio solo
laurearmi.


 Prego?
Si produce uno sfasamento temporale tra i due sistemi di riferimento
(relatività ristretta).
-- 
Stefano





---


pozz...@my-deja.com
 wrote:




Pur utilizzando un traffico non frattale ma costante (trasmettevo 1 pacchetto al secondo) ricevevo, invece, pacchetti ad una velocità inferiore o superiore (anche se di poco, dell'ordine di 1.0002 secondi oppure 0.9998 secondi). Le ho provate di tutto, la mia conclusione è che i clock dei due processori sono sfasati, cioè ogni secondo di uno, l'altro si prende qualche centinaio di microsecondi. Ciò mi sembra molto plausibile poichè scambiando generatore e ricevitore, la velocità da maggiore di 1 pacchetto al secondo, diventa minore ed il tempo medio di interarrivo nei due casi è l'inverso l'uno dell'altro. 


---




I clock dei due processori sono _sicuramente_ sfasati ma il problema e' che facendo la misura sul singolo sistema devi ottenere sempre un secondo spaccato da un pacchetto all'altro. Nel tuo caso devi considerare che linux standard NON e' un kernel Real-Time e quindi non garantisce che il pacchetto venga instradato e ricevuto sempre con gli stessi tempi da livello utente a livello utente dell'altro sistema. Per fare una misurazione precisa devi usare un sistema operativo realtime (esistono varie implementazioni del kernel linux realtime) e devi costruirti un modulo nel kernel space che sfrutti le basse latenze di gestione dei pacchetti di rete (in particolare nel rispondere agli interrupt provenienti dalle schede di rete). Normalmente questa precisione e' dell'ordine di grandezza dei microsecondi (o centinaia di nanosec. in certi casi).


Ciao.






Piergiorgio Trubini


R&D - Firmware Departement - Orsi Automazione S.p.A.


mailto://tru...@it.orsigroup.com


Key Fingerprint: B451 7811 B243 90EE  D7F9 B1B7 9792 A81C







 (relatività ristretta).
Okay, ho capito che non si può fare, almeno a livello generale, cioè
sperando che tutte le applicazioni di rete seguano le mie intenzioni.
Però, forse, è possibile fare quello che voglio all'interno di un mio
programma dove creo dei pacchetti e voglio instradarli come dico io.
Ma per questo, sposto la discussione su icol.development.
Grazie comunque.

 Ma per questo, sposto la discussione su icol.development.
Scusa, arrivo da perfetto neofita: non basta tirare giù l'interfaccia di
loopback?
-- 
Non importa dove vuoi andare oggi, sei già lì.
ICQ 61259284

 writes:
Silvio> Scusa, arrivo da perfetto neofita: non basta tirare giù
Silvio> l'interfaccia di loopback?
No, in questo modo non funzionerà il loopback, il che non implica che
ogni pacchetto andrà alla scheda di rete, anzi semplicemente non va da
nessuna parte. Il (suo) problema è che il routing di indirizzi locali
prende vie traverse - il loopback, appunto - rispetto a quelle che
prende quando è destinato a altri ip/reti; AFAIK questo instradamento
è hard coded nel kernel.
Ciao
Marco

 è hard coded nel kernel.
Chiarissimo, grazie.
-- 
Registered user at 
http://counter.li.org
 # 170453
ICQ 61259284