Apakah nomor urut header paket TCP membungkus?

16

Saya bertanya-tanya, karena nomor urut dalam bidang tajuk TCP dipilih secara acak selama jabat tangan dan secara bertahap bertambah ketika paket dipertukarkan, apa yang terjadi setelah 2 ^ 32 - transmisi initial_seq_no? Apakah nomor urut membungkus dan menjadi 0 atau nilai awal digunakan kembali (atau koneksi baru diinisialisasi dari tempat yang sebelumnya berhenti)?

Sebi
sumber

Jawaban:

19

Itu membungkus akan menjadi 0. Menurut RFC 793 :

Penting untuk diingat bahwa ruang nomor urut sebenarnya terbatas, meskipun sangat besar. Ruang ini berkisar dari 0 hingga 2 ** 32 - 1. Karena ruangnya terbatas, semua aritmatika yang berhubungan dengan nomor urut harus dilakukan modulo 2 ** 32. Aritmatika yang tidak ditandatangani ini menjaga hubungan nomor urut saat mereka berputar dari 2 ** 32 - 1 hingga 0 lagi. Ada beberapa seluk-beluk ke aritmatika modulo komputer, jadi harus sangat hati-hati dalam pemrograman perbandingan nilai-nilai tersebut. Simbol "= <" berarti "kurang dari atau sama" (modulo 2 ** 32).

jcbermu
sumber
3
Setiap angka kurang dari atau sama dengan setiap angka lainnya, modulo 2 ** 32 ...
user20574
2
@ user20574 Itulah sebabnya ukuran jendela TCP tidak dibolehkan tumbuh lebih besar dari 1GB, dan perbandingan nomor urut perlu mengambil jalan terpendek (yaitu perbedaannya harus dalam kisaran -2 ^ 31 hingga 2 ^ 31).
kasperd
17

Apakah nomor urut membungkus dan menjadi 0?

Iya nih. Semua detail dapat ditemukan dalam Spesifikasi TCP RFC 793 - Protokol Kontrol Transmisi .


Nomor Urutan

Penting untuk diingat bahwa ruang nomor urut sebenarnya terbatas, meskipun sangat besar. Ruang ini berkisar dari 0 hingga 2 32 - 1.

Karena ruang terbatas, semua aritmatika yang berhubungan dengan nomor urut harus dilakukan modulo 2 32 . Aritmatika yang tidak ditandatangani ini menjaga hubungan nomor urut saat mereka berganti dari 2 32 - 1 menjadi 0 lagi.

Ada beberapa seluk-beluk ke aritmatika modulo komputer, jadi harus sangat hati-hati dalam pemrograman perbandingan nilai-nilai tersebut. Simbol "= <" berarti "kurang dari atau sama" (modulo 2 32 ).

Sumber RFC 793 - Protokol Kontrol Transmisi

DavidPostill
sumber
1
Saya tidak bermaksud menembak pembawa pesan, tetapi "kurang dari atau sama (modulo N)"? Jelas penulis RFC ketinggalan pada "seluk beluk ke modul komputer aritmatika".
Ben Voigt
Dalam kasus di mana jendela maksimum akan kurang dari 2 ^ 31, dan jika xdan yketik uint32_titu praktis untuk didefinisikan x<=yberarti (uint32_t)(y-x) < 0x80000000.
supercat
@BenVoigt, mungkin mereka menerima begitu saja apa yang kemudian dijelaskan dalam RFC tools.ietf.org/html/rfc1982
Carsten S
@ Karsten itu adalah aritmatika yang berguna tetapi bukan "arithmetic modulo N"
Ben Voigt
1
@ BenVoigt, ya, terserahlah. Btw, saya sangat sadar bahwa kelompok Z / (n) tidak dipesan, tetapi saya juga mampu menafsirkan pernyataan dalam konteks.
Carsten S
7

Ya, itu membungkus. Anda dapat membacanya di Wikipedia atau di RFC1323 , yang menunjukkan cara melindungi terhadap nomor urut yang dibungkus.

Biarkan saya kutip:

Stempel waktu TCP digunakan dalam algoritma yang dikenal sebagai nomor Perlindungan Terhadap Urutan Dibungkus, atau PAWS (lihat RFC 1323 untuk detail). PAWS digunakan ketika jendela penerimaan melintasi batas urutan nomor urut. Dalam kasus di mana suatu paket berpotensi dikirim ulang, ia menjawab pertanyaan: "Apakah nomor urut ini dalam 4 GB pertama atau yang kedua?" Dan cap waktu digunakan untuk mematahkan dasi.

Dan:

PAWS menggunakan opsi Timestamps TCP yang sama seperti mekanisme RTTM yang dijelaskan sebelumnya, dan mengasumsikan bahwa setiap segmen TCP yang diterima (termasuk data dan segmen ACK) berisi SEG timestamp. Ide dasarnya adalah bahwa suatu segmen dapat dibuang sebagai duplikat lama jika diterima dengan SEG timestamp. TSval kurang dari beberapa timestamp yang baru-baru ini diterima pada koneksi ini.

Baik dalam PAWS dan mekanisme RTTM, "cap waktu" adalah bilangan bulat 32-bit yang tidak ditandatangani dalam ruang modular 32-bit. Dengan demikian, "kurang dari" didefinisikan dengan cara yang sama untuk nomor urut TCP, dan teknik implementasi yang sama berlaku. Jika s dan t adalah nilai cap waktu, s <t jika 0 <(t - s) <2 ** 31, dihitung dalam aritmatika 32-bit yang tidak ditandatangani.

MariusMatutiae
sumber