TUNを介したTCP:SYN / ACKが受信されましたが、ACKは生成されておらず、ソケットはまだSYN_SENT状態です。

TUNを介したTCP:SYN / ACKが受信されましたが、ACKは生成されておらず、ソケットはまだSYN_SENT状態です。

私は私が書いたプログラムによって確立されたTUNインターフェースを介して発信するTCP接続を作成しています。 TUNインターフェイスは、デフォルトで最小限の変更(ソース/ターゲットIP/ポート、TCPチェックサム)でプロキシサーバーとパケットを中継します。

このTUNインターフェースを介してルーティングされたIPでwgetを実行すると、パケットは正しく送信され受信されるように見えますが(トレースを参照)、サーバーから返されたSYN / ACKはTCPスタックに登録されず、ソケットはまだSYN_SENTに存在します。 「netstat -t」にステータスを入力します。その後、偽の再送信が双方向に生成されます(タイムアウトまで)。

設定に使用したコマンドは次のとおりです。

ip link set dev tun0 up
ip addr add 10.0.0.1/24 dev tun0 
ip route add 216.58.197.100/32 dev tun0

続いて

wget http://216.58.197.100

これはWireshark追跡です。ここにあります。:

wget Wireshark トレース

答え1

問題を発見したようです。受信パケットをTUNインターフェイスに書き込む前にIPv4ヘッダーチェックサムを変更したので、それを計算する必要があります。

関連情報