Reproducere simplă - într-o fereastră urmăriți procesele în partea de sus, în cealaltă rulați: nc -lkp 10000 > /dev/null & ( head -50000000 /dev/urandom | nc -N 127.0.0.1 10000 ) & ( head -50000000 /dev/urandom | nc -N 127.0.0.0 1) 1
Observă că numai una cap
și nc
proces utilizează în mod activ CPU.
Atașați strace la cap
care nu este activ - vezi că este blocat la o scriere, de exemplu:
strace: Proces 589084 atasat
scrie(1, „\264\347\270\26\27\24'BRb^\353\302\36@\216\17V\210*n\252`\353\330\351\276\2\250 \330\350\217"..., 4096^Cstrace: Procesul 589084 detașat
<detașat...>
Configurați doi ascultători pe porturi diferite - de ex. 10000 și 10001 și ambele merg la viteză maximă.
Acesta este un exemplu simplu, dar îl pot reproduce cu alte intrări și ieșiri - de ex. zcatting fișiere mari și trimiterea lor către serviciile de producție prin rețea. Nu are legătură cu intrarea și nici cu priza de ascultare.
Așadar, de ce pot avea o singură conexiune tcp la orice gazdă/port care trimite în mod activ date?
Există o sursă de date independentă (simțiți-vă liber să experimentați dacă nu mă credeți) și un proces independent care își deschide propria conexiune tcp (netstat
le va arăta pe amândouă deschise) - singurul lucru în comun este destinația (care nu trebuie neapărat să fie un nc
ascultând mai departe uite
- se întâmplă cu orice).
Având în vedere că destinația poate avea cu siguranță mai multe prize de intrare care primesc date simultan, iar sursa poate trimite cu siguranță date în mai multe prize de rețea simultan, mă chinui să-mi dau seama de unde vine disputa, determinând ca doar o conductă să fie activă la o singura data.