

C/C++のパケットスニファライブラリlibpcapで使えるパケット送信用APIのpcap_sendpacketが全てのパケットにおいて正常に送信されない問題が起きており、困っております…

### 実際に起きたこと:

  * tcpreplayでpcapファイルのトラフィック（パケット数14261個）をマシン1から流す(通信速度1Mbpsです)
  * マシン2がパケットをNIC1(デバイス名：enp2s0)で受け取り、NIC2(デバイス名：enp3s0) からpcap_sendpacket()でマシン3へ転送する
  * マシン3のNICをtcpdumpで観測し、パケット数を調べる

上記のような実験を行ったのですが、結果として

  * マシン2: 受信パケット数 14261
  * マシン3: 受信パケット数 12700前後

1500近くのパケットがロスしてしまいます。

通信速度を0.247Mbpsの場合でも流してみたのですが同様にパケットロスが同じぐらいの数だけマシン3で生じてしまいます（そもそもこんなに遅くてもパケロスが発生しているのが謎です）  
これは転送処理に問題があるのでしょうか？

### 調べたこと:

pcap_sendpacketが失敗している(-1を返す)訳ではありませんでした。

マシン2ではNIC1のパケットをpcap_loop()で監視しており、pcap_loop()のコールバック関数では、以下のようなコードを書いています↓

[code]

    pcap_loop_callback(u_char *args, const struct pcap_pkthdr *header, const u_char *packet){
    
      //送信用にメモリを動的確保
      u_char* forward_packet;
      forward_packet = (u_char *)malloc(header->len);
      memcpy(forward_packet, packet, header->len);
    
      //args[0]には転送するNIC2(enp3s0)のハンドラを渡しています
      pcap_sendpacket((pcap_t *)&(args[0]), forward_packet, header->len);
    
      //送信用に確保したメモリの解放
      free(forward_packet);
    }
    
[/code]

どなたか、pcap_sendpacket()で転送を行うとパケットロスが起きてしまう原因について教えていただけますと幸いでございます  
よろしくお願い申し上げます


CC BY-SA 4.0
2021-01-18T09:30:33.230
73387
2021-01-18T12:43:16.330
2021-01-18T12:43:16.330
3060
43570
question
c++ c
libpcapのpcap_sendpacket()でパケットロスが発生する原因について