Ich habe zwei Netzwerkkarten auf der Serverseite, eth0? 192.168.8.140 und eth1? 192.168.8.142. Der Client sendet Daten an 192.168.8.142, und ich erwarte iftop
, dass der Datenverkehr für eth1 angezeigt wird, dies ist jedoch nicht der Fall. Alle Netzwerke durchlaufen eth0. Wie kann ich die beiden Netzwerkkarten testen?
Warum läuft der gesamte Datenverkehr über eth0 anstelle von eth1? Ich habe erwartet, ich könnte 1 Gbit / s pro Schnittstelle bekommen. Was stimmt nicht mit meinem Setup oder meiner Konfiguration?
Server
ifconfig
eth0 Link encap:Ethernet HWaddr 00:00:00:19:26:B0
inet addr:192.168.8.140 Bcast:0.0.0.0 Mask:255.255.252.0
inet6 addr: 0000::0000:0000:fe19:26b0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:45287446 errors:0 dropped:123343 overruns:2989 frame:0
TX packets:3907747 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:66881007720 (62.2 GiB) TX bytes:261053436 (248.9 MiB)
Memory:f7e00000-f7efffff
eth1 Link encap:Ethernet HWaddr 00:00:00:19:26:B1
inet addr:192.168.8.142 Bcast:0.0.0.0 Mask:255.255.255.255
inet6 addr: 0000::0000:0000:fe19:26b1/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:19358 errors:0 dropped:511 overruns:0 frame:0
TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1772275 (1.6 MiB) TX bytes:1068 (1.0 KiB)
Memory:f7c00000-f7cfffff
Serverseite
# Listen for incomming from 192.168.8.142
nc -v -v -n -k -l 192.168.8.142 8000 | pv > /dev/null
Listening on [192.168.8.142] (family 0, port 8000)
Connection from 192.168.8.135 58785 received!
Klient
# Send to 192.168.8.142
time yes | pv |nc -s 192.168.8.135 -4 -v -v -n 192.168.8.142 8000 >/dev/null
Connection to 192.168.8.142 8000 port [tcp/*] succeeded!
Serverseite
$ iftop -i eth0
interface: eth0
IP address is: 192.168.8.140
TX: cumm: 6.34MB peak: 2.31Mb rates: 2.15Mb 2.18Mb 2.11Mb
RX: 2.55GB 955Mb 874Mb 892Mb 872Mb
TOTAL: 2.56GB 958Mb 877Mb 895Mb 874Mb
$ iftop -i eth1
interface: eth1
IP address is: 192.168.8.142
TX: cumm: 0B peak: 0b rates: 0b 0b 0b
RX: 4.51KB 3.49Kb 3.49Kb 2.93Kb 2.25Kb
TOTAL: 4.51KB 3.49Kb 3.49Kb 2.93Kb 2.25Kb
$ ip link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 00:00:00:19:26:b0 brd ff:ff:ff:ff:ff:ff
$ ip link show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 00:00:00:19:26:b1 brd ff:ff:ff:ff:ff:ff
Antworten:
Es gibt zwei mögliche Entwurfsmodelle für einen TCP / IP-Netzwerkstapel: ein starkes Hostmodell und ein schwaches Hostmodell. Sie erwarten ein Verhalten, das dem starken Hostmodell entspricht. Linux ist so konzipiert, dass es das schwache Hostmodell verwendet. Im Allgemeinen tritt das schwache Hostmodell häufiger auf, da es die Komplexität des Routing-Codes verringert und somit möglicherweise eine bessere Leistung bietet. Ansonsten sind die beiden Host-Modelle nur unterschiedliche Konstruktionsprinzipien: keines ist von Natur aus besser als das andere.
Grundsätzlich bedeutet das schwache Hostmodell, dass ausgehender Datenverkehr unabhängig von der Quell-IP über die erste in der Routing-Tabelle aufgeführte Schnittstelle gesendet wird, die der IP-Adresse des Ziels (oder des ausgewählten Gateways, wenn das Ziel nicht direkt erreichbar ist) entspricht Adresse .
Aus diesem Grund ist es im Allgemeinen nicht ratsam, zwei separate physische Schnittstellen zu verwenden, wenn Sie zwei IP-Adressen im selben Netzwerksegment benötigen. Weisen Sie stattdessen zwei IP-Adressen für eine Schnittstelle zu (IP-Aliase: z. B. eth1 = 192.168.8.142 und eth1: 0 = 192.168.8.140). Wenn Sie mehr Bandbreite benötigen, als eine einzelne Schnittstelle zur Verfügung stellen kann, verbinden (oder teamen, falls zutreffend) Sie zwei oder mehr Schnittstellen miteinander und führen dann beide IPs für die Verbindung / das Team aus.
Indem Sie eine Reihe von sysctl-Einstellungen anpassen und die "Advanced Routing" -Funktionalität verwenden, um unabhängige Routing-Tabellen für jede Netzwerkkarte einzurichten, können Sie Linux dazu bringen, sich wie ein System mit starkem Host-Modell zu verhalten. Aber das ist eine sehr spezielle Konfiguration, und ich würde empfehlen, vor der Implementierung zweimal darüber nachzudenken.
Siehe die Antworten unter Linux Source Routing, Strong End System Model / Strong Host Model? wenn du es wirklich brauchst.
quelle
Ein weiterer zu berücksichtigender Punkt ist, dass die eth1-Schnittstelle mit einer Subnetzmaske von 255.255.255.255 konfiguriert ist.
Dies bedeutet, dass die eth1-Schnittstelle so konfiguriert ist, dass sie keine anderen Geräte (Hosts) auf ihrer Netzwerkschnittstelle erwartet. Dies bedeutet, dass es nicht mit Ihrem 192.168.8.142-Client kommunizieren kann.
quelle
Nach langem Suchen habe ich herausgefunden, warum netcat nicht die richtige Schnittstelle für die IP verwendet. , und das ist das gleiche Problem. Wie @telcoM sagte, wird ausgehender Datenverkehr an die erste Schnittstelle gesendet, und das ist das Problem. Der einfachste Weg, dies zu lösen, ist:
Diese Route gibt
ip route get 192.168.8.135 from 192.168.8.142
eth1 anstelle von eth0 zurück. Dann funktioniert alles wie erwartet.quelle