Откуда ответ получает данные, кеш из ОС или данные
прямо с сайта? Я не изучал операционные системы, которые
затрудняет мне комплексный процесс буферизации.
Пакеты TCP принимаются от сетевого устройства (карта Ethernet, адаптер Wi-Fi и т. Д.), А их полезные данные помещаются во временный буфер внутри стека TCP / IP. Когда ваша программа вызывает recv()
, некоторые или все эти данные копируются из временного буфера в буфер вашей программы (response
).
Стек TCP / IP не выполняет никакого кэширования данных, кроме описанного выше. (например, если веб-браузер хочет кэшировать локальную копию веб-страницы, чтобы ему не приходилось загружать ее второй раз, это будет зависеть от самого веб-браузера, чтобы сделать это на уровне приложения; TCP / Стек IP и ОС не будут делать это самостоятельно)
Кроме того, теоретически TCP будет проверять потери при передаче, причем
это случилось? Когда я делаю программирование сокетов, я не видел
обработчики относительно потери передачи, это автоматически обрабатывается
гнездо
Он прозрачно обрабатывается внутри стека TCP. В частности, каждый пакет TCP имеет контрольную сумму и порядковый номер, включенные в его заголовок, а стек TCP проверяет этот порядковый номер каждого полученного пакета, чтобы убедиться, что он соответствует следующему номеру в последовательности (относительно предыдущий пакет он получил из того же потока TCP). Если это не ожидаемый номер следующего пакета, то стек TCP знает, что пакет каким-то образом потерян, и отвечает, отправляя запрос на удаленный компьютер о повторной отправке отброшенных пакетов. Обратите внимание, что стек TCP может отбрасывать последующие пакеты по мере необходимости, пока не будет возобновлена первоначально ожидаемая последовательность, поскольку требуется доставлять данные полезной нагрузки в ваше приложение в точном порядке, в котором они были отправлены (т. Е. Это не так. разрешено доставлять «более поздние» байты до «более ранних» байтов, даже если некоторые из «более ранних» байтов были потеряны и должны были быть повторно переданы).