Why the Sequence number in an ACK packet is incremented?Big IP orphaned connectionsHelp! Cisco VOIP phone are flooding my PC with network trafficTCP Window Size going to 0 / Wget stops downloading?syn/ack sequence number confusionIs my TCP connections sabotaged by my country's government?TCP Sequence & Acknowledgment numbersNFS stuck in ack loopserver stops sending SYN ACK after several normal connectionsHTTP 502 response generated by a proxy after it tries to send data upstream to a partially closed connection (reset packet)Can a TCP packet don't reach the 7th OSI layer
Has Ursula Le Guin ever admitted to be influenced by Kibbutz for the Dispossessed?
Why is the Eisenstein ideal paper so great?
Are runways booked by airlines to land their planes?
If I arrive in the UK, and then head to mainland Europe, does my Schengen visa 90 day limit start when I arrived in the UK, or mainland Europe?
Can a ring of spell storing and access to Find spells produce an endless menagerie?
On San Andreas Speedruns, why do players blow up the Picador in the mission Ryder?
Why is this integration method not valid?
Burned out due to current job, Can I take a week of vacation between jobs?
Are there any German nonsense poems (Jabberwocky)?
What would prevent living skin from being a good conductor for magic?
How can I properly write this equation in Latex?
Testing using real data of the customer
Why is unzipped directory exactly 4.0k (much smaller than zipped file)?
Expected maximum number of unpaired socks
Interpretation of ROC AUC score
How to keep consistency across the application architecture as a team grows?
Why did Jon Snow admit his fault in S08E06?
Is it legal to have an abortion in another state or abroad?
Why does splatting create a tuple on the rhs but a list on the lhs?
Why did other houses not demand this?
“For nothing” = “pour rien”?
Is "vegetable base" a common term in English?
How did NASA Langley end up with the first 737?
USPS Back Room - Trespassing?
Why the Sequence number in an ACK packet is incremented?
Big IP orphaned connectionsHelp! Cisco VOIP phone are flooding my PC with network trafficTCP Window Size going to 0 / Wget stops downloading?syn/ack sequence number confusionIs my TCP connections sabotaged by my country's government?TCP Sequence & Acknowledgment numbersNFS stuck in ack loopserver stops sending SYN ACK after several normal connectionsHTTP 502 response generated by a proxy after it tries to send data upstream to a partially closed connection (reset packet)Can a TCP packet don't reach the 7th OSI layer
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;
I was wondering if there is any particular reason to increment the ACK sequence number instead of acknowledging the received sequence number. Why the RFC designed it this way?
Actual:
[SYN] SEQ=100
[SYN, ACK] Seq=300 Ack=101
[ACK] Seq=101 Ack=301
Why not:
[SYN] Seq=100
[SYN/ACK] Seq=300 Ack=100
[ACK] Seq=101 Ack=300
Naturally it would make sense to acknowledge the sequence number you just received instead of the sequence number you received + 1?
networking tcp
add a comment |
I was wondering if there is any particular reason to increment the ACK sequence number instead of acknowledging the received sequence number. Why the RFC designed it this way?
Actual:
[SYN] SEQ=100
[SYN, ACK] Seq=300 Ack=101
[ACK] Seq=101 Ack=301
Why not:
[SYN] Seq=100
[SYN/ACK] Seq=300 Ack=100
[ACK] Seq=101 Ack=300
Naturally it would make sense to acknowledge the sequence number you just received instead of the sequence number you received + 1?
networking tcp
add a comment |
I was wondering if there is any particular reason to increment the ACK sequence number instead of acknowledging the received sequence number. Why the RFC designed it this way?
Actual:
[SYN] SEQ=100
[SYN, ACK] Seq=300 Ack=101
[ACK] Seq=101 Ack=301
Why not:
[SYN] Seq=100
[SYN/ACK] Seq=300 Ack=100
[ACK] Seq=101 Ack=300
Naturally it would make sense to acknowledge the sequence number you just received instead of the sequence number you received + 1?
networking tcp
I was wondering if there is any particular reason to increment the ACK sequence number instead of acknowledging the received sequence number. Why the RFC designed it this way?
Actual:
[SYN] SEQ=100
[SYN, ACK] Seq=300 Ack=101
[ACK] Seq=101 Ack=301
Why not:
[SYN] Seq=100
[SYN/ACK] Seq=300 Ack=100
[ACK] Seq=101 Ack=300
Naturally it would make sense to acknowledge the sequence number you just received instead of the sequence number you received + 1?
networking tcp
networking tcp
asked Mar 27 '18 at 9:13
L.S.L.S.
1132
1132
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
In TCP, the protocol keeps track of what has been sent by using a Sequence number. Effectively it's a counter of everything that was sent+1.
More details on https://tools.ietf.org/html/rfc793#section-3.3
ACK is incremented by 1 because the packet is carrying a SYN, it's not empty.
SYNs contribute to incrementing the SEG.LEN, as explained in the rfc:
SEG.LEN = the number of octets occupied by the data in the segment
(counting SYN and FIN)
Had the packet been empty and without SYN/FIN, the counter would have not been incremented.
This is also contemplated in the rfc where it states that the next sequence number to be sent must be greater or equal than the one indicated in the ACK:
A new acknowledgment (called an "acceptable ack"), is one for which the inequality below holds:
SND.UNA < SEG.ACK =< SND.NXT
where SND.UNA is the oldest unacknowledged sequence number and SND.NXT is the next sequence number to be sent.
By incrementing the seq. number the packet is basically asking the other party "I expect you to send me the first byte of data now"
1
Yes. But why is it +1? The RFC states: "The acknowledgment mechanism[...]indicates that all octets up to but not including X have been received." Why not including X? This is the source of the need to ack the last received octet +1.
– L.S.
Mar 27 '18 at 12:47
added some clarification. Bottom line: the rfc says SEG.LEN must count amount of data in the payload, SYN and FIN.
– Luca Gibelli
Mar 27 '18 at 14:31
Ok thanks, i have read some more about the topic and came to the conclusion that the ACK is stating "I expect you to send me <this> Segment next." instead of "I received the segments up to <this>". I think both ways would be possible but this is how it was done. Maybe there is some indication that it had programmatic reasons to do it, maybe the implementation is easier if the sending host just has to start streaming from the ACK number he received in case of a retransmission. However your answer was useful to clarify, thus i marked it as valid. Thanks.
– L.S.
Mar 28 '18 at 10:36
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "2"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fserverfault.com%2fquestions%2f904756%2fwhy-the-sequence-number-in-an-ack-packet-is-incremented%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
In TCP, the protocol keeps track of what has been sent by using a Sequence number. Effectively it's a counter of everything that was sent+1.
More details on https://tools.ietf.org/html/rfc793#section-3.3
ACK is incremented by 1 because the packet is carrying a SYN, it's not empty.
SYNs contribute to incrementing the SEG.LEN, as explained in the rfc:
SEG.LEN = the number of octets occupied by the data in the segment
(counting SYN and FIN)
Had the packet been empty and without SYN/FIN, the counter would have not been incremented.
This is also contemplated in the rfc where it states that the next sequence number to be sent must be greater or equal than the one indicated in the ACK:
A new acknowledgment (called an "acceptable ack"), is one for which the inequality below holds:
SND.UNA < SEG.ACK =< SND.NXT
where SND.UNA is the oldest unacknowledged sequence number and SND.NXT is the next sequence number to be sent.
By incrementing the seq. number the packet is basically asking the other party "I expect you to send me the first byte of data now"
1
Yes. But why is it +1? The RFC states: "The acknowledgment mechanism[...]indicates that all octets up to but not including X have been received." Why not including X? This is the source of the need to ack the last received octet +1.
– L.S.
Mar 27 '18 at 12:47
added some clarification. Bottom line: the rfc says SEG.LEN must count amount of data in the payload, SYN and FIN.
– Luca Gibelli
Mar 27 '18 at 14:31
Ok thanks, i have read some more about the topic and came to the conclusion that the ACK is stating "I expect you to send me <this> Segment next." instead of "I received the segments up to <this>". I think both ways would be possible but this is how it was done. Maybe there is some indication that it had programmatic reasons to do it, maybe the implementation is easier if the sending host just has to start streaming from the ACK number he received in case of a retransmission. However your answer was useful to clarify, thus i marked it as valid. Thanks.
– L.S.
Mar 28 '18 at 10:36
add a comment |
In TCP, the protocol keeps track of what has been sent by using a Sequence number. Effectively it's a counter of everything that was sent+1.
More details on https://tools.ietf.org/html/rfc793#section-3.3
ACK is incremented by 1 because the packet is carrying a SYN, it's not empty.
SYNs contribute to incrementing the SEG.LEN, as explained in the rfc:
SEG.LEN = the number of octets occupied by the data in the segment
(counting SYN and FIN)
Had the packet been empty and without SYN/FIN, the counter would have not been incremented.
This is also contemplated in the rfc where it states that the next sequence number to be sent must be greater or equal than the one indicated in the ACK:
A new acknowledgment (called an "acceptable ack"), is one for which the inequality below holds:
SND.UNA < SEG.ACK =< SND.NXT
where SND.UNA is the oldest unacknowledged sequence number and SND.NXT is the next sequence number to be sent.
By incrementing the seq. number the packet is basically asking the other party "I expect you to send me the first byte of data now"
1
Yes. But why is it +1? The RFC states: "The acknowledgment mechanism[...]indicates that all octets up to but not including X have been received." Why not including X? This is the source of the need to ack the last received octet +1.
– L.S.
Mar 27 '18 at 12:47
added some clarification. Bottom line: the rfc says SEG.LEN must count amount of data in the payload, SYN and FIN.
– Luca Gibelli
Mar 27 '18 at 14:31
Ok thanks, i have read some more about the topic and came to the conclusion that the ACK is stating "I expect you to send me <this> Segment next." instead of "I received the segments up to <this>". I think both ways would be possible but this is how it was done. Maybe there is some indication that it had programmatic reasons to do it, maybe the implementation is easier if the sending host just has to start streaming from the ACK number he received in case of a retransmission. However your answer was useful to clarify, thus i marked it as valid. Thanks.
– L.S.
Mar 28 '18 at 10:36
add a comment |
In TCP, the protocol keeps track of what has been sent by using a Sequence number. Effectively it's a counter of everything that was sent+1.
More details on https://tools.ietf.org/html/rfc793#section-3.3
ACK is incremented by 1 because the packet is carrying a SYN, it's not empty.
SYNs contribute to incrementing the SEG.LEN, as explained in the rfc:
SEG.LEN = the number of octets occupied by the data in the segment
(counting SYN and FIN)
Had the packet been empty and without SYN/FIN, the counter would have not been incremented.
This is also contemplated in the rfc where it states that the next sequence number to be sent must be greater or equal than the one indicated in the ACK:
A new acknowledgment (called an "acceptable ack"), is one for which the inequality below holds:
SND.UNA < SEG.ACK =< SND.NXT
where SND.UNA is the oldest unacknowledged sequence number and SND.NXT is the next sequence number to be sent.
By incrementing the seq. number the packet is basically asking the other party "I expect you to send me the first byte of data now"
In TCP, the protocol keeps track of what has been sent by using a Sequence number. Effectively it's a counter of everything that was sent+1.
More details on https://tools.ietf.org/html/rfc793#section-3.3
ACK is incremented by 1 because the packet is carrying a SYN, it's not empty.
SYNs contribute to incrementing the SEG.LEN, as explained in the rfc:
SEG.LEN = the number of octets occupied by the data in the segment
(counting SYN and FIN)
Had the packet been empty and without SYN/FIN, the counter would have not been incremented.
This is also contemplated in the rfc where it states that the next sequence number to be sent must be greater or equal than the one indicated in the ACK:
A new acknowledgment (called an "acceptable ack"), is one for which the inequality below holds:
SND.UNA < SEG.ACK =< SND.NXT
where SND.UNA is the oldest unacknowledged sequence number and SND.NXT is the next sequence number to be sent.
By incrementing the seq. number the packet is basically asking the other party "I expect you to send me the first byte of data now"
edited Mar 27 '18 at 16:49
answered Mar 27 '18 at 11:47
Luca GibelliLuca Gibelli
2,11611424
2,11611424
1
Yes. But why is it +1? The RFC states: "The acknowledgment mechanism[...]indicates that all octets up to but not including X have been received." Why not including X? This is the source of the need to ack the last received octet +1.
– L.S.
Mar 27 '18 at 12:47
added some clarification. Bottom line: the rfc says SEG.LEN must count amount of data in the payload, SYN and FIN.
– Luca Gibelli
Mar 27 '18 at 14:31
Ok thanks, i have read some more about the topic and came to the conclusion that the ACK is stating "I expect you to send me <this> Segment next." instead of "I received the segments up to <this>". I think both ways would be possible but this is how it was done. Maybe there is some indication that it had programmatic reasons to do it, maybe the implementation is easier if the sending host just has to start streaming from the ACK number he received in case of a retransmission. However your answer was useful to clarify, thus i marked it as valid. Thanks.
– L.S.
Mar 28 '18 at 10:36
add a comment |
1
Yes. But why is it +1? The RFC states: "The acknowledgment mechanism[...]indicates that all octets up to but not including X have been received." Why not including X? This is the source of the need to ack the last received octet +1.
– L.S.
Mar 27 '18 at 12:47
added some clarification. Bottom line: the rfc says SEG.LEN must count amount of data in the payload, SYN and FIN.
– Luca Gibelli
Mar 27 '18 at 14:31
Ok thanks, i have read some more about the topic and came to the conclusion that the ACK is stating "I expect you to send me <this> Segment next." instead of "I received the segments up to <this>". I think both ways would be possible but this is how it was done. Maybe there is some indication that it had programmatic reasons to do it, maybe the implementation is easier if the sending host just has to start streaming from the ACK number he received in case of a retransmission. However your answer was useful to clarify, thus i marked it as valid. Thanks.
– L.S.
Mar 28 '18 at 10:36
1
1
Yes. But why is it +1? The RFC states: "The acknowledgment mechanism[...]indicates that all octets up to but not including X have been received." Why not including X? This is the source of the need to ack the last received octet +1.
– L.S.
Mar 27 '18 at 12:47
Yes. But why is it +1? The RFC states: "The acknowledgment mechanism[...]indicates that all octets up to but not including X have been received." Why not including X? This is the source of the need to ack the last received octet +1.
– L.S.
Mar 27 '18 at 12:47
added some clarification. Bottom line: the rfc says SEG.LEN must count amount of data in the payload, SYN and FIN.
– Luca Gibelli
Mar 27 '18 at 14:31
added some clarification. Bottom line: the rfc says SEG.LEN must count amount of data in the payload, SYN and FIN.
– Luca Gibelli
Mar 27 '18 at 14:31
Ok thanks, i have read some more about the topic and came to the conclusion that the ACK is stating "I expect you to send me <this> Segment next." instead of "I received the segments up to <this>". I think both ways would be possible but this is how it was done. Maybe there is some indication that it had programmatic reasons to do it, maybe the implementation is easier if the sending host just has to start streaming from the ACK number he received in case of a retransmission. However your answer was useful to clarify, thus i marked it as valid. Thanks.
– L.S.
Mar 28 '18 at 10:36
Ok thanks, i have read some more about the topic and came to the conclusion that the ACK is stating "I expect you to send me <this> Segment next." instead of "I received the segments up to <this>". I think both ways would be possible but this is how it was done. Maybe there is some indication that it had programmatic reasons to do it, maybe the implementation is easier if the sending host just has to start streaming from the ACK number he received in case of a retransmission. However your answer was useful to clarify, thus i marked it as valid. Thanks.
– L.S.
Mar 28 '18 at 10:36
add a comment |
Thanks for contributing an answer to Server Fault!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fserverfault.com%2fquestions%2f904756%2fwhy-the-sequence-number-in-an-ack-packet-is-incremented%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown