Я пытаюсь отлаживать частые ошибки ETIMEDOUT на api.facebook.com (31.13.95.8) при выполнении HTTP-запросов GET с наших серверов Linux. Чтобы выяснить, проблема ли это на нашем сервере или на стороне Facebook, я выполнил эту команду:
$ mtr -r -c 10 --report-wide 31.13.95.8 -P 443
Start: Fri Mar 24 15:18:54 2017
HOST: lothlorien Loss% Snt Last Avg Best Wrst StDev
1.|-- 108.170.241.35 0.0% 10 12.3 12.4 12.3 12.8 0.0
2.|-- 32934.hkg.equinix.com 0.0% 10 13.6 13.7 13.6 14.0 0.0
3.|-- po102.psw02.hkg3.tfbnw.net 0.0% 10 13.1 13.1 13.0 13.3 0.0
4.|-- 173.252.67.87 0.0% 10 13.2 13.2 13.1 13.4 0.0
5.|-- edge-star-shv-01-hkg3.facebook.com 0.0% 10 13.2 13.2 13.1 13.4 0.0
Однако, когда я запускаю эту команду (обратите внимание на дополнительный -T, который отправляет TCP SYN вместо пакетов ICMP ECHO), мы видим значительную потерю пакетов:
$ mtr -r -c 10 -T --report-wide 31.13.95.8 -P 443
Start: Fri Mar 24 15:20:51 2017
HOST: lothlorien Loss% Snt Last Avg Best Wrst StDev
1.|-- 108.170.241.67 0.0% 10 12.5 15.3 12.5 37.5 7.8
2.|-- 32934.hkg.equinix.com 0.0% 10 14.5 14.4 13.8 15.7 0.3
3.|-- po102.psw03.hkg3.tfbnw.net 0.0% 10 13.8 13.9 13.4 14.6 0.0
4.|-- 173.252.67.5 0.0% 10 14.0 14.2 13.7 14.7 0.0
5.|-- edge-star-shv-01-hkg3.facebook.com 90.0% 10 250.7 250.7 250.7 250.7 0.0
По какой причине вторая команда показывает значительную потерю пакетов, а первая - нет?
Вы используете пул подключений к API? Вероятно, что пакеты SYN регулируются для предотвращения атак типа SYNflood.