SQN und ACKs bei TCP

Klausur WS11/12

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

SQN und ACKs bei TCP
Hallo Leute,
ich gehe gerade die Klausur durch und bin bissel verwirrt was die ACKs und SQNs angeht.

Die SQN von Host A ist 50 und von Host B ist 0.

Mein Problem ist das setzen der SQN und des ACKs bei versenden von Daten.

In der Klausur wird beim Handshake ein 5 Byte Payload von Host A mitgeschickt. Heißt das, dass im nächsten Schritt die SQN nicht bei SQN++ ist, sondern bei SQN+5+1?

Wenn nun Host B dieses Segment erhält ist seine SQN dennoch ganz normal SQN = SQN++ aber sein ACK wird entsprechend der SQN von Host A angepasst mit ACK = SQN + 5 + 1 oder?

Gruß

1 „Gefällt mir“

 ___    _   _         ___   
(  _`\ ( ) ( )/'\_/`\(  _`\ 
| (_) )| | | ||     || |_) )
|  _ <'| | | || (_) || ,__/'
| (_) )| (_) || | | || |    
(____/'(_____)(_) (_)(_)    

Im Skript steht 3-Wege-Handshake: SYN-Segment bla, SYNACK-Segment bla, ACK-Segment SQN=client_ISN+1.

und die 5 werden dann glaube ich erst im Schritt darauf dazu gerechnet, weil

SQN = Position des ersten Bytes des Segments im Bytestrom
ACK = Position des nächsten erwarteten Bytes im Bytestrom

Aber eigentlich habe ich keine Ahnung wie das richtig funktioniert, nachdem man auch nirgendswo ein vollständig richtig ausgefülltes Beispiel findet :frowning:

Und wo wir schon bei vermeintlichen faceplam Fragen sind, inkrementiert man eigentlich bei TCP die SQNs von ACKs, weil davon steht eigentlich kein Wort im Skript und in den Beispielen sind bei den Segmenten immer nur ACKs abgebildet aber keine SQNs.
(gut möglich dass es komplett falsch ist btw:)
http://postimage.org/image/vswhd1hmf/


Würde ich auch so machen.


sieht doch so gut aus
nur beim Aufbau und Beendigung einer TCP Verbindung muss man zusätzlich noch 1 auf SQN\ ACK addieren
(laut Wiki aus Sicherheitsgründen)

einzelne Acks ohne zusätzliche Daten (B = 0), die zum Bestätigen eines Packest gesendet werden, haben auch die Größe 0.
Weder Seq noch Ack muss also inkrementiert werden.


Völlig korrekt.


Es gab allerdings ein oder zwei mitschriften aus Lösungen der alten Klausuren, wo die SQN dann dennoch um jeweils eins erhöht wurde. Hat mich auch sehr verwirrt, allerdings macht es ja logisch betrachtet auch keinen Sinn, dass da dann was erhöht wird, im Prinzip würde sich dadurch das Fenster ja verschieben und Lücken entstehen oder?

Naja viel Glück/Erfolg uns allen morgen :slight_smile:

/EDIT: Wieso muss man bei dem einen ACk das CW nicht erhöhen? Ich dachte JEDES ACK macht +1 ?


warum bleibt bei t1 das CW auf 2? Laut Skript wird pro erhaltenes ACK das CW um eins erhoeht


Argh :slight_smile: Das hab ich übersehen und vermute dass CW_t1= 3 sowie CW_t2=4


Beim Slow-Start (also der abschnitt nach dem verbindungsaufbau bis Timeout oder 3 dupacks) steigt das CW exponentiel 1,2,4,8… nach einem 3 dupack singt es auf die hälfte und steigt additiv (AIMD), also immer +1. Nach einem Timout wird das CW wieder auf 1 gesetzt und steigt bis zu der hälfte des letzten CWs mit Slow-Start und dann wieder additiv.


Quelle: Wikipedia, TCP, 2. Absatz


Du musst den Abschnitt schon ganz lesen, nicht nur einen Absatz.


Er hat schon recht imo. Solange Slowstart aktiv ist für jedes ACK CW+=1, sobald additive Increasement läuft wird für jeden Block von empfangenen ACKS das CW um 1 erhöht. So verstehe ich jedenfalls den Wikipedia-Artikel


korrekt


ja stimmt jedes ack erhöht um 1 aber nicht jeder block… verwirrend…


Während man in Congestion Avoidance ist, erhöht sich CW um 1 für jedes Fenster


ja ich bin in meinem beitrag nur von blöcken/fenstern ausgegangen, bei den vorlesungsbeispielen wird es ja auch nur nach abgelaufenem Fenster neu berechnet, macht für mich auch mehr sinn. hab nur deinen beitrag falsch gelesen…