Передача файлов через Ethernet-кабель: просто, быстро и без сети
Transfer files over an Ethernet patch cable
Блогер Maurycy показывает, как соединить два компьютера напрямую Ethernet-кабелем и передавать файлы на скорости около 900 Мбит/с (6,7 ГБ/мин) без роутера и интернета. Он сравнивает этот метод с облаком, Wi-Fi и USB-накопителями, отмечая, что Ethernet — единственный распространённый интерфейс, который стабильно достигает гигабитных скоростей с дешёвыми кабелями. Также упоминается недавняя поддержка передачи данных между Linux-устройствами через USB-C.
Я думаю, Ethernet недооценён для не-интернет-приложений и даже не требует локальной сети: соединение точка-точка вполне подходит.
- rmunn
Раньше для этого требовался кроссовер-кабель; я именно так и делал (с кроссовер-кабелем) ещё до того, как https://en.wikipedia.org/wiki/Medium-dependent_interface#Aut... стал повсеместным. С прямым кабелем вы бы соединили контакт передачи (TX) одного адаптера с контактом TX другого, а контакт приёма (RX) одного с контактом RX другого — и ни одно устройство не "услышало" бы сообщения, которые отправляет другое. Кроссовер-кабель переставлял эти провода, так что контакт TX каждого устройства подключался к контакту RX на другом конце, и оба устройства могли "слышать" друг друга.
Но с авто MDI-X каждое устройство замечало: "Эй, я отправляю, но ничего не получаю", и пыталось переключить свои функции передачи и приёма (передавать на контакте RX и принимать на контакте TX). Поскольку каждое устройство ждало случайный период времени перед этим, было очень маловероятно (почти невозможно), что они оба переключатся в один и тот же момент. А если бы и переключились, то второй интервал, скорее всего, тоже не был бы одинаковым.
Я немного упрощаю в объяснении выше, но это в общих чертах. И именно так мои тщательно подписанные кроссовер-кабели начали покрываться пылью. (А потом я понял: "Эй, подождите, теперь я могу просто использовать их как обычные кабели", и достал их обратно из хранилища и смешал с обычными патч-кордами).
- steve1977
Люди открывают для себя, что сетевые кабели можно использовать для соединения устройств в сеть. И называют это "трюком" (удивлён, что не "хаком").
- yjftsjthsd-h
Я на 95% уверен, что на самом деле не нужно назначать IP-адреса. Сделайте так:
# пинг всех link-local устройств на интерфейсе:
ping ff02::1%eth0
А затем выполняйте свой socat/rsync/что угодно на единственный IP, который ответит.
- yitchelle
Это напоминает мне старые добрые времена 8-битных компьютеров, когда я использовал кроссоверный RS-232 кабель для передачи файла с одного компьютера на другой. Даже на скорости 30 бит/с это было гораздо надёжнее, чем записывать данные на кассету на одном компьютере, а затем читать их на другом.
- sgt
На macOS ещё проще.
Что-то вроде этого должно работать:
ifconfig enX inet6 fd42:dead:beef::1 prefixlen 48
Нет необходимости поднимать интерфейс, так как он уже должен быть поднят. enX должен быть вашим USB/Thunderbolt Ethernet адаптером, например, en6.
Затем вы можете передавать файлы с помощью socat на другую машину, даже если это Linux-машина. Я обычно использую nc, но socat определённо будет быстрее.
Почему сеть deadbeef, спросите вы? Это приватное пространство, так что не будет конфликтов с публичными адресами.
Тем не менее, в 99% случаев с большими файлами я просто использую AirDrop!
- 3r7j6qzi9jvnve
tbstream выглядит забавно, но его сложно использовать обычному пользователю — не уверен, станет ли он проще, но я не думаю, что запомню, как возиться с configfs только для передачи файла:
https://git.kernel.org/pub/scm/linux/kernel/git/westeri/thun...
- SillyUsername
Вы также можете пропустить данные через zstd на лету: для хорошо сжимаемых данных вы часто увидите увеличение пропускной способности в 1,5–3 раза, так что гигабитное соединение может эффективно передавать 165–330 МБ/с.
Приёмник:
socat -u TCP6-LISTEN:1234,reuseaddr STDOUT | zstd -d -c | tar -xpf - -C /destination
Отправитель:
tar -C /source -cf - directory | zstd -T0 -6 -c | socat -u STDIN 'TCP6:[fd42:dead:beef::2]:1234'
-T0 использует все ядра. Поднимите уровень выше -6 для большего сжатия, снизьте для большей скорости, но если ваш процессор не справляется, высокие уровни на самом деле замедлят передачу. Уже сжатые данные не получат большой выгоды.
- awruko
Мне однажды буквально пришлось скрестить кабель. Это была какая-то демонстрация, и кроссовер-кабель отсутствовал. В местных компьютерных магазинах его не было, и под давлением времени... я использовал карманный нож и переделал кабель. Это было до 2000 года, так что скорость была ограничена 10/100 Мбит/с — ifconfig не сообщал об ошибках, и демонстрация прошла гладко.