현재 802.11 프레임에 대해 최상의 전송 성능을 얻으려고하고 있는데 libpcap을 사용하고 있지만 원시 소켓 (또는 다른 가능한 방법)을 사용하여 속도를 높일 수 있는지 궁금합니다. Raw Sockets 대 Libpcap의 성능 전송
이미 이전에 생성 된 디바이스의 libpcap 핸들이 간단한 예 코드를 고려char ourPacket[60][50] = { {0x01, 0x02, ... , 0x50}, ... , {0x01, 0x02, ... , 0x50} };
for(; ;)
{
for(int i; i = 0; i < 60; ++i)
{
pcap_sendpacket(deviceHandle, ourPacket[i], 50);
}
}
이 코드 세그먼트는 각각 별개의 CPU 코어를위한 스레드에서 수행된다. 어레이에 저장된 Radiotap 헤더가 포함 된 원시 802.11 프레임/패킷에 대해 이렇게하는 더 빠른 방법이 있습니까?
pcap_inject
(동일한 기능이지만 다른 반환 값)에 대한 pcap의 소스 코드를 보면 패킷을 보내기 위해 원시 소켓을 사용하지 않는 것 같습니까? 실마리 없음.
다른 질문에 대한 답변이 많아서 성능 캡처에 신경 쓰지 않습니다. 레이어 2 패킷/프레임을 전송하기위한 원시 소켓이 있습니까?
사용중인 OS를 지정하지 않았습니다. libpcap은 큰 차이를 만드는 크로스 플랫폼이기 때문에. 내가 가장 익숙한 리눅스를 가정하면, 이미 원시 소켓을 사용하고있다. 그러나, 당신은'PACKET_TX_RING'을 조사 할 수 있습니다. 나는 당신이 단일 시스템 호출 (그리고 AFAIK는 현재 libpcap에 의해 지원되지 않습니다 *)로 패킷의 전체 배열을 보낼 수 있다고 믿습니다.이 설정을하는 데 상당한 학습 곡선이 있습니다. –
저는 리눅스를 사용하고 있습니다. 위의 예제에서 원시 소켓 구현을 수용하기 위해 몇 가지 변경을해야합니까? 나는 많이 추측합니까? 구조체와 같은 다른 프레임 레이아웃을 사용해야하거나 이미 배열에 저장된 프레임을 성공적으로 보낼 수 있습니까? 나는 libpcap이 그걸 처리 할 때 체크섬 만 빠져 있다고 믿는다. – RSS
프레임 구조는 다르지 않습니다. 단지 바이트 배열입니다. 그러나,이를 생성하거나 tx_ring 메모리에 복사해야합니다. –