Есть ли различия в производительности между ping и ping6?

Я заметил ping6 Команда была значительно медленнее, чем ping на MacOS 10.12.

С помощью ping6 команда:

  ❯ ping6 localhost
  PING6(56=40+8+8 bytes) ::1 --> ::1
  16 bytes from ::1, icmp_seq=0 hlim=64 time=0.088 ms
  16 bytes from ::1, icmp_seq=1 hlim=64 time=0.092 ms
  16 bytes from ::1, icmp_seq=2 hlim=64 time=0.137 ms
  16 bytes from ::1, icmp_seq=3 hlim=64 time=0.117 ms
  16 bytes from ::1, icmp_seq=4 hlim=64 time=0.116 ms
  16 bytes from ::1, icmp_seq=5 hlim=64 time=0.112 ms
  16 bytes from ::1, icmp_seq=6 hlim=64 time=0.149 ms
  16 bytes from ::1, icmp_seq=7 hlim=64 time=0.116 ms
  16 bytes from ::1, icmp_seq=8 hlim=64 time=0.119 ms
  16 bytes from ::1, icmp_seq=9 hlim=64 time=0.125 ms
  ^C
  --- localhost ping6 statistics ---
  10 packets transmitted, 10 packets received, 0.0% packet loss
  round-trip min/avg/max/std-dev = 0.088/0.117/0.149/0.017 ms

Используя регулярные ping команда:

  ❯ ping localhost
  PING localhost (127.0.0.1): 56 data bytes
  64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.048 ms
  64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.040 ms
  64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.070 ms
  64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.071 ms
  64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.077 ms
  64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.083 ms
  64 bytes from 127.0.0.1: icmp_seq=6 ttl=64 time=0.109 ms
  64 bytes from 127.0.0.1: icmp_seq=7 ttl=64 time=0.076 ms
  64 bytes from 127.0.0.1: icmp_seq=8 ttl=64 time=0.040 ms
  64 bytes from 127.0.0.1: icmp_seq=9 ttl=64 time=0.068 ms
  ^C
  --- localhost ping statistics ---
  10 packets transmitted, 10 packets received, 0.0% packet loss
  round-trip min/avg/max/stddev = 0.040/0.068/0.109/0.020 ms

Я не могу понять, почему использование IPv6 будет медленнее, чем IPv4, поэтому есть ли причина, почему ping6 будет медленнее, чем при использовании ping?

обновленный

Я удалил пример проверки связи с удаленным именем хоста. Это не имело значения, так как я не могу быть уверен, что машины, которые были достигнуты, одинаковы в обоих тестах. Это также может привести к ответам, не касающимся моего основного вопроса.

3 ответа

Решение

Реализация ping а также ping6 двоичные файлы не совсем то же самое.

Кроме того, ни один не сообщает tcpdump измеренное время

Вот один пример, хотя я сделал несколько для себя. Вот tcpdump Команда, которую я использовал:

tcpdump -i lo0 -t 5 -nqK

 00: 00: 00.000000 IP6:: 1>:: 1: ICMP6, эхо-запрос, seq 0, длина 16
 00:00:00.000033 IP6::1 >::1: ICMP6, эхо-ответ, seq 0, длина 16

Это показывает дельту временной отметки 0,033 мс между первым пакетом IPV6 и ответом.

ping6 однако сообщается, что время приема-передачи составляет 0,109 мс.

 00: 00: 00.000000 IP 127.0.0.1> 127.0.0.1: эхо-запрос ICMP, id 17569, seq 0, длина 64
 00:00:00.000034 IP 127.0.0.1 > 127.0.0.1: эхо-ответ ICMP, id 17569, seq 0, длина 64

это tcpdump показывает фактическое RTT 0,034 мс, но ping сообщает RTT 0,080 мс.

ping а также ping6 два разных двоичных файла; По своей более длинной адресации IPv6 потребует немного больше тактов ЦПУ, чтобы справиться с ними, даже если они были идентичными двоичными файлами во всех других отношениях (это не так).

Тем не менее, захват пакетов предполагает, что сетевые стеки моего Mac mini сравнительно быстрые; это ping а также ping6 расчеты времени в оба конца, которые выключены, ping6 больше, чем то, что я ожидаю, будет намного проще ping,

У IPv6, как протокола, нет веских оснований для того, чтобы быть значительно быстрее или медленнее, чем IPv4. Я думаю, что IPv6 может быть немного медленнее из-за его более длинных адресов, вызывающих немного больше накладных расходов, но это все.

Быстрее ли IPv4 или IPv6 в данном потоке трафика, почти всегда из-за различий в топологии / пути сети и относительного качества реализаций IPv4 и IPv6 на конечных точках и промежуточных блоках.

Несколько лет назад IPv6 часто был медленнее, чем IPv4, поскольку путь обработки IPv4 в большинстве маршрутизаторов часто оптимизировался аппаратно ("быстрый путь"), в то время как путь обработки IPv6 был выполнен программно.

В настоящее время IPv6 часто быстрее, чем IPv4, поскольку он не проходит через NAT, тогда как IPv4 часто должен проходить через шлюзы NAT, которые могут быть перегружены. Но сегодня все еще существуют сетевые пути, где IPv4 будет быстрее, чем IPv6. Это действительно во многом зависит от топологии сети и качества аппаратного и программного обеспечения конечных точек и промежуточных блоков.

Помните, что когда вы запрашиваете у DNS адреса IPv4 и IPv6 для заданного имени хоста, нет никакой гарантии, что все эти адреса будут находиться в одном физическом окне. Это особенно верно, когда имеешь дело с известными веб-сайтами, которые используют CDN. И даже если они переходят в один и тот же физический блок, нет гарантии, что IPv4 и IPv6 будут использовать один и тот же маршрут через сеть. На самом деле, довольно распространено, чтобы в пути IPv4 были шлюзы NAT, а не путь IPv6.

Случай, который вы задокументировали, когда петлевые эхо-запросы macOS отличаются в случае IPv4 и IPv6, интересен. Кажется, что эти два случая должны быть намного ближе по скорости, чем то, что вы видите.

Вы пингуете 2 разных сервера, попробуйте пинговать эти 2 сервера google для сравнения, так как вы можете видеть, что IPv6 намного быстрее, когда он правильно поддерживается.

IPv6: 2001: 4860: 4860 :: 8888

IPv4: 8.8.8.8

64 bytes from 2001:4860:4860::8888: icmp_seq=1 ttl=61 time=3.71 ms
64 bytes from 2001:4860:4860::8888: icmp_seq=2 ttl=61 time=1.67 ms
64 bytes from 2001:4860:4860::8888: icmp_seq=3 ttl=61 time=1.62 ms
64 bytes from 2001:4860:4860::8888: icmp_seq=4 ttl=61 time=3.34 ms
64 bytes from 2001:4860:4860::8888: icmp_seq=5 ttl=61 time=2.63 ms

Reply from 8.8.8.8: bytes=32 time=23ms TTL=59
Reply from 8.8.8.8: bytes=32 time=24ms TTL=59
Reply from 8.8.8.8: bytes=32 time=8ms TTL=59
Reply from 8.8.8.8: bytes=32 time=12ms TTL=59
Другие вопросы по тегам