2010-01-14 9 views

risposta

15

(seconda volta Ok fortunato ..)

FYI c'è un'altra domanda qui perform connect() on specific network adapter lungo le stesse linee ...

Secondo The Cable Guy

Windows XP e Windows Server® 2003 utilizzare il modello host debole per le mandate e riceve per tutte le interfacce IPv4 e il modello di host forte per le mandate e riceve per tutto IPv6 interfacce. non è possibile configurare questo comportamento. Lo stack TCP/IP Next Generation in Windows Vista e Windows Server 2008 supporta forte ospite invia e riceve sia per IPv4 e IPv6 per default su tutte le interfacce tranne l' Teredo interfaccia di tunneling per un relè Teredo host-specifica.

Quindi per rispondere alla domanda (correttamente, questa volta) in Windows XP e Windows Server 2003 IP4 no, ma per IP6 sì. E per Windows Vista e Windows 2008 sì (tranne alcune circostanze).

anche da http://www.codeguru.com/forum/showthread.php?t=487139

In Windows, una chiamata a bind() colpisce selezione carta solo il traffico in entrata, traffico non in uscita. Così, su un client in esecuzione in un sistema multi-homed (cioè, più di una scheda di interfaccia), è lo stack di rete che seleziona la carta da usare, e fa la sua selezione basata esclusivamente sulla IP di destinazione , che a sua volta è basato su nella tabella di routing. Una chiamata a bind() non influisce in alcun modo sulla scelta della carta .

Ha qualcosa a che fare con qualcosa chiamato "Sistema di fine debole" ("Debole E/S") modello. Vista modificata in un modello E/S forte , pertanto il problema potrebbe essere non presente in Vista. Ma tutte le versioni precedenti di di Windows utilizzavano il modello E/S debole .

Con un modello debole E/S, è la tabella di routing che decide quale carta viene utilizzato per il traffico in uscita in un sistema multihomed .

Vedere se questi fili offrono alcuni intuizione:

"presa locale vincolante per multihomed host di Windows XP non funziona" a http://www.codeguru.com/forum/showthread.php?t=452337

"Come collegare una porta a un determinato networkcard ?" a http://www.codeguru.com/forum/showthread.php?t=451117. Questo thread menziona la funzione CreateIpForwardEntry(), che (credo) può essere utilizzato per creare un voce nella tabella di routing in modo che tutto il traffico IP in uscita con un server specificato viene instradato attraverso un adattatore specificato.

"Lavorare con le schede 2 Ethernet" a http://www.codeguru.com/forum/showthread.php?t=448863

"comportamento legano Strano il multihomed sistema " presso http://www.codeguru.com/forum/showthread.php?t=452368

Speranza che aiuta!

+0

Grazie, A meno che non manchi qualcosa, nessuna risposta è pertinente, poiché SO_BINDTODEVICE non è rilevante per Windows. Sospetto che il tuo riassunto sia corretto, anche se non ho le prove. – Ofir

+0

Oops right you are! Aggiornato la mia risposta sopra con informazioni migliori - scusa! – Ezz

+0

Si noti che i modelli host deboli e forti non influiscono sul modo in cui il traffico inviato da un socket viene instradato. Cioè il robusto modello host garantisce che il traffico in uscita da una scheda di rete utilizzi l'indirizzo IP assegnato dall'adattatore, ma non influisce sul modo in cui lo stack di rete nell'host seleziona automaticamente l'adattatore in uscita. Questo è in realtà spiegato nel link "The Cable Guy" sopra, così come su Wikipedia: https://en.wikipedia.org/wiki/Host_model –

Problemi correlati