
Я пытаюсь понять, как iPhone решает, какой IP-адрес использовать из двух IP-адресов, возвращенных в ответе DNS в этом конкретном сценарии ниже.
Сценарий такой:
1- iPhone отправляет DNS-запрос на Arecord типа «bsf.mncxx.mccxx.pub.3gppnetwork.org» и получает в ответ 2 IP-адреса.
2- iPhone отправляет запросы GET на один из IP-адресов для своей аутентификации (неважно, какой BSF IP выбран на этом этапе)
3- BSF возвращает 401 Unauthorized с проблемой аутентификации
4- iPhone вычисляет ответ и отправляет его во втором запросе GET.
Проблема начинается здесь. iPhone выбирает BSF случайным образом. Ожидается, что этот 2-й GET (с рассчитанным ответом) будет отправлен в тот же BSF на шаге 2. Все остальные телефоны (Samsung, Huawei, Sony и т. д.) отправляют его в BSF на шаге 2. Но, похоже, iPhone просто выбирает случайным образом. Если выбран другой BSF, аутентификация не проходит.
В качестве обходного пути мы настроили BSF на отправку Connection:keep-alive в ответе http 401, но, к сожалению, это не помогло. iPhone по-прежнему выбирает его случайным образом.
В нашей настройке IP-адреса BSF находятся в близких подсетях (BSF1 = 172.31.59.165, BSF2 = 172.31.59.181)
Очень странно, что в другой настройке (не совсем те же BSF, что и у нас, но http-запросы и ответы похожи) тот же iPhone всегда выбирает один и тот же BSF на шаге 2 и шаге 4 (BSF1=10.216.138.78, BSF2= 10.210.149.79). Если он выбирает BSF1 на шаге 2, продолжает с BSF1 на шаге 4. То же самое для BSF2.
Возможно ли, что iPhone проверяет подсети во время принятия решения? Любые другие предположения или предложения будут высоко оценены.
Спасибо, Уайт