Есть ли различия в производительности между 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