2011-07-24 14 views
5

Dlaczego the TCP three-way handshake uderza w numer sekwencji podczas potwierdzania podczas wstępnego uzgadniania? Jak to jest lepsze niż pozostawienie numeru potwierdzenia równego numerowi porządkowemu?Dlaczego potrójny handshake TCP uderza w numer sekwencji podczas potwierdzania?

Połączenie jest ustalone z

Client sends SYN,A 
Server responds with SYN-ACK,A+1,B 
Client confirms with ACK,B+1 

Jak to lepiej niż

Client sends SYN,A 
Server responds with SYN-ACK,A,B 
Client confirms with ACK,B 
+0

możliwy duplikat [Dlaczego SYN lub FIN bit w segmencie TCP zużywa bajt w przestrzeni numeru sekwencji?] (Http://stackoverflow.com/questions/2352524/why-does-a-syn-or -fin-bit-in-a-tcp-segment-zużyj-a-bajt-w-sekwencji-numeru) –

Odpowiedz

3

To dlatego, że pole ACK oznacza to, gdy flaga ACK jest ustawiona:

numer potwierdzenia (32 bity) - jeśli flaga ACK jest ustawiona, to wartość tego pola jest następna liczba oczekująca, której oczekuje odbiorca.

Jeśli nie jest ustawiony na (przeczuciom numer sekwencji + 1), to będzie oznaczać zarówno ack'ing niezgodnie z SYN (zarówno SYN i ACK flagi muszą być ustawione w tym pakiecie) i mówiąc, że spodziewa się, że numer kolejny ponownie (tzn. go nie otrzymał).

+0

Przepraszam, muszę być gęsta. Nie widzę "niespójności", stąd moje edycje. –

+0

'ACK == n' oznacza" Otrzymałem wszystkie wiadomości do numeru sekwencji 'n-1', więc proszę przesłać mi, co masz na numer sekwencji' n' ". Tak, to byłoby żądanie ponownego wysłania 'SYN' od klienta w twoim przykładzie, który nie ma żadnego sensu. Radzenie sobie z różnymi semantykami numerów sekwencji dla wstępnego uzgadniania sprawiłoby, że cały protokół był trudniejszy do wdrożenia, niż jest to już bez żadnego powodu. – Mat

+0

Myślę, że mówimy tylko o tym, że wstawianie numeru sekwencji nie jest konieczne dla wstępnego uzgadniania połączenia, ale konieczne jest przełączanie dla kolejnych potwierdzeń TCP, więc jest po prostu cały czas używane. Przyjmuję to jako odpowiedź. –