Проводит ли Wireshark (libpcap) пакеты, когда они все еще находятся в NIC или когда они были переданы ядру?
Я запускаю тестовую программу, которая ожидает сообщения от TCP-соединения с помощью функции recv
а затем немедленно отвечает с помощью функции send
. Затем я измеряю задержку между полученным и отправленным пакетом, которая измеряется метками времени, показанными в Wireshark. Я обнаружил, что эта задержка сильно варьируется при использовании разных сетевых карт. Похоже, это говорит о том, что Wireshark перехватывает пакеты, когда они все еще находятся в NIC, так что скорость, с которой NIC обрабатывает пакет, отражается в указанной задержке. Если захват происходит в ядре, я не могу объяснить, почему задержка отличается при использовании разных сетевых карт, поскольку все они используют (один и тот же) сетевой стек ядра.
Однако, если захват действительно происходит в NIC, как это возможно? Как libpcap может как-то добавить некоторые функции самой сетевой карты?