Может ли Winpcap перехватывать все пакеты, проходящие через гигабитный сетевой адаптер, без пропуска пакетов?
Я хочу использовать Winpcap для захвата всех сетевых пакетов, проходящих через Gigabit NIC сервера.
Предполагая, что я могу использовать сетевой канал до 100%, максимальная скорость сети составляет 1000 Мбит / с. Если исключить заголовки TCP/IP, максимальная скорость передачи данных TCP должна составлять примерно 940 Мбит / с.
Допустим, я отправляю файл 1 ГБ через сетевую карту со скоростью 940 Мбит / с, используя целевой порт TCP 6000. Я использую Winpcap для захвата всех сетевых пакетов, проходящих через сетевую карту, и затем выгружаю его в файл pcap. Если я использую Wireshark для анализа файла pcap, а затем проверяю сумму всех пакетов, отправленных на TCP-порт 6000, размером пакета, могу ли я получить ровно 1 ГБ из файла pcap?
Благодарю.
1 ответ
Предполагая, что вы можете использовать сетевой канал до 100%, максимальная скорость сети НЕ составляет 1 Гбит / с. Это меньше из-за межкадровых пробелов и контрольных сумм. Это еще до того, как вы начнете учитывать заголовки пакетов (как вы правильно упомянули в своем первоначальном вопросе).
Также, как следует из приведенного выше комментария, типичная машина будет изо всех сил пытаться генерировать пакеты при скорости соединения, не говоря уже о том, чтобы генерировать и захватывать пакеты одновременно при скорости соединения. Единственный метод, который я использую для генерации пакетов на проводной скорости (на машине с Linux), - это создание 1500-байтовых пакетов и использование tcpreplay. Используя этот метод, я могу приблизиться к скорости передачи данных, но при этом используется процессор ~100%, если только вы не работаете на очень быстрой машине.
Тем не менее, в вашем плане нет ничего плохого в том, чтобы определить объем данных, отправляемых на TCP-порт 6000, путем захвата и просмотра с помощью wireshark. (Убедитесь, что вы ТОЛЬКО перехватываете TCP-порт 6000, а не все пакеты на интерфейсе.) Вам просто нужно убедиться, что ЦП не загружен на 100%, так что захват пакетов не может обрабатывать все пакеты. Но тогда это верно независимо от того, какой метод вы используете.