Kirim TCP dengan checksum yang salah

2

Saya mengalami masalah dalam mengirim file besar ke mesin OpenStack.

Koneksi internet kami lebih dari LTE sehingga paket buruk diharapkan. Namun, bahkan mengirim data melalui TCP menghasilkan data yang rusak saat mengirim beberapa MB.

Saya ingin menguji apakah checksum TCP benar-benar diverifikasi, jadi saya memerlukan alat untuk mengirim paket TCP dengan checksum yang tidak valid.

Ada beberapa program yang memungkinkan saya mengirim paket IP yang sewenang-wenang, tetapi saya lebih suka alat yang juga memulai koneksi (melakukan jabat tangan tiga arah, dll.) Untuk saya.

Saya kemudian bisa menggunakan tcpdump untuk memeriksa apakah server ACK paket atau meminta dikirim ulang. (Jika alat bisa melakukan ini juga, lebih baik lagi.)

Beberapa pemikiran dan catatan:

  • Saya telah mencoba berbagai versi Linux pada klien dan server.
  • Kami tidak lagi memiliki paket yang rusak saat beralih ke saluran DSL (lebih lambat).
  • Kami tidak memiliki paket yang rusak saat mengirim ke server lain dari host yang berbeda.
  • Saya memiliki tcpdumps dari transmisi TCP dari klien dan server tetapi host OpenStack tidak ingin melihatnya, itulah sebabnya saya ingin mencari tahu apakah checksum adalah masalah dan juga memiliki program pengujian untuk host .
  • Server adalah sebuah instance dalam lingkungan OpenStack.
  • Yang terbaru veth Bug korupsi checksum TCP dalam kernel Linux akan menjelaskan bug ini.

Gagasan lain bagaimana men-debug ini juga diterima.

close2
sumber

Jawaban:

1

https://github.com/kubernetes/kubernetes/issues/18898

menjelaskan cara melakukan ini.

Berikut versi (singkat):

Pada mesin penerima dijalankan nc -l -p 12345

Di mesin pengirim jalankan (i=0; while true; do echo aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa $i; i=$((i+1)); sleep 1; done) | netcat IP_OF_RECEIVING_MACHINE 12345

Untuk merusak paket, jalankan perintah berikut pada mesin pengirim:

sudo tc qdisc add dev eth0 root netem corrupt 100%; sleep 10; sudo tc qdisc del dev eth0 root netem

Perhatikan bahwa selama 10 detik semua paket di eth0 akan rusak!

Jika checksumming berfungsi dengan benar, Anda tidak akan menerima teks apa pun selama 10 detik dan kemudian menerimanya sekaligus. Namun jika checksumming tidak berfungsi, Anda akan mendapatkan teks yang rusak.

close2
sumber
0
  • Anda bisa menggunakan a pembuatan paket alat seperti hping, hping3. Periksa tautan di bawah, ini sangat berguna;

    contoh hping3

    Dari tautan di atas, saya pikir inilah yang Anda cari;

    -b --badcksum (mencoba) mengirim paket dengan IP checksum yang buruk banyak sistem akan memperbaiki checksum IP yang mengirim paket sehingga Anda akan mendapatkan yang buruk   Sebaliknya, checksum UDP / TCP.

  • Jika Anda memiliki keterampilan pemrograman (pemrograman soket, soket BSD di linux, Anda dapat menggunakan google), Anda dapat mengirim paket dummy tcp menggunakan soket mentah , buat paket Transport Layer Anda sendiri.

Levent Divilioglu
sumber
Saya tidak dapat membuat hping3 bekerja, tetapi ini mungkin salah saya.
close2
Bisakah Anda menjelaskan masalah Anda secara detail?
Levent Divilioglu