TCP paket başlıklarının sıra numarası değişiyor mu?


16

Bir TCP üstbilgi alanındaki sıra numarası el sıkışma sırasında rasgele seçildiğinden ve paketler değiştikçe kademeli olarak arttığından, 2 ^ 32 - initial_seq_no iletimlerinden sonra ne olur? Sıra numarası etrafa dolanıyor ve 0 oluyor mu veya başlangıç ​​değeri yeniden mi kullanılıyor (veya öncekinin durduğu yerden yeni bir bağlantı mı başlatılıyor)?

Yanıtlar:


19

RFC 793'e göre : 0'a gidiyor.

Gerçek sıra numarası uzayının çok büyük olmasına rağmen sınırlı olduğunu unutmamak gerekir. Bu boşluk 0 ila 2 ** 32-1 arasındadır. Alan sınırlı olduğundan, sıra numaraları ile ilgili tüm aritmetik modulo 2 ** 32 gerçekleştirilmelidir. Bu imzasız aritmetik, tekrar 2 ** 32 - 1'den 0'a geçerken sıra numaralarının ilişkisini korur. Bilgisayar modulo aritmetiğinde bazı incelikler vardır, bu nedenle bu tür değerlerin karşılaştırılmasının programlanmasına büyük özen gösterilmelidir. "= <" Sembolü "küçük veya eşit" anlamına gelir (modulo 2 ** 32).


3
Her sayı diğer tüm
sayılara

2
@ user20574 Bu yüzden TCP pencere boyutunun 1 GB'den daha fazla büyümesine izin verilmez ve sıra numaralarının karşılaştırmasının en kısa yolu alması gerekir (yani fark -2 ^ 31 ila 2 ^ 31 aralığında olmalıdır).
kasperd

17

Sıra numarası sarılıp 0 olur mu?

Evet. Tüm detaylar TCP Spesifikasyonu RFC 793 - Şanzıman Kontrol Protokolü'nde bulunabilir .


Sıra Numaraları

Gerçek sıra numarası uzayının çok büyük olmasına rağmen sınırlı olduğunu unutmamak gerekir. Bu boşluk, 0 ila 2 arasında değişir 32 - 1.

Boşluk sonlu olduğu için sıra numaraları ile ilgili tüm aritmetik modulo 2 32 yapılmalıdır . Bu imzasız aritmetik, tekrar 2 32-1'den 0'a geçerken dizi numaralarının ilişkisini korur .

Bilgisayar modulo aritmetiğinde bazı incelikler vardır, bu nedenle bu tür değerlerin karşılaştırılmasının programlanmasına büyük özen gösterilmelidir. "= <" Sembolü "küçük ya da eşit" anlamına gelir (modulo 2 32 ).

Kaynak RFC 793 - Şanzıman Kontrol Protokolü


1
Elçiyi vurmak istemiyorum, ama "eşit veya daha az (modulo N)"? Açıkçası RFC yazarı "bilgisayar modülü aritmetik inceliklerini" kaçırdı.
Ben Voigt

Maksimum pencerenin 2 ^ 31'den az olacağı xve ytür ve ise , anlamını uint32_ttanımlamak pratiktir . x<=y(uint32_t)(y-x) < 0x80000000
supercat

@BenVoigt, mor olasılıkla için aldı verilmiş bir şeyin ileride RFC açıklanmıştır tools.ietf.org/html/rfc1982
Carsten S

@Karsten yararlı bir aritmetik ama "aritmetik modulo N" değil
Ben Voigt

1
@BenVoigt, evet, her neyse. Btw, Z / (n) gruplarının sıralı olmadığının farkındayım, ama aynı zamanda ifadeleri bağlam içinde yorumlayabiliyorum.
Carsten S

7

Evet, etrafı sarar. Wikipedia'da veya sarılmış sıra numaralarına karşı nasıl korunacağını gösteren RFC1323'te okuyabilirsiniz .

Alıntı yapmama izin verin:

TCP zaman damgaları Sarılmış Sıra numaralarına karşı Koruma veya PAWS olarak bilinen bir algoritmada kullanılır (ayrıntılar için bkz. RFC 1323). PAWS, alma penceresi sıra numarası sarma sınırını geçtiğinde kullanılır. Bir paketin potansiyel olarak yeniden iletilmesi durumunda şu soruya cevap verir: "Bu sıra numarası ilk 4 GB veya ikincisinde mi?" Ve zaman damgası bağı kırmak için kullanılır.

Ve:

PAWS, daha önce açıklanan RTTM mekanizmasıyla aynı TCP Zaman Damgası seçeneğini kullanır ve alınan her TCP segmentinin (veri ve ACK segmentleri dahil) değerleri zaman içinde monoton olmayan monoton olan bir zaman damgası SEG.TSval içerdiğini varsayar. Temel fikir, segmentin yakın zamanda bu bağlantıda alınan bazı zaman damgasından daha az bir zaman damgası SEG.TSval ile alındığında eski bir kopya olarak atılabilmesidir.

Hem PAWS hem de RTTM mekanizmasında, "zaman damgaları" modüler 32 bit alanda 32 bit işaretsiz tamsayılardır. Bu nedenle, "küçüktür", TCP sıra numaraları için olduğu gibi tanımlanır ve aynı uygulama teknikleri uygulanır. S ve t zaman damgası değerleriyse, işaretsiz 32 bit aritmetik olarak hesaplanan 0 <(t - s) <2 ** 31 ise s <t.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.