Let's say that C is TCP client and S is TCP server.
C sent a TCP segment to S containing bytes 10, 11, 12 ... 20 (seq = 10). Segment reached S (it is not lost along the way). Is it possible that S send eg. ack 15, and that he drops all other bytes (15, 16, 17, 18, 19, 20), so that C must send another segment this time seq = 15.
In another words, is a "segment split" possible: that server accepts first part of bytes of one segment and drop the second part (due to eg. full buffer or something like that), and later take the second part of bytes from next segment? Or are segments always accepted completely?
I know that window size should prevent that type of situations: during the three way handshake, server will send his window size and client will not send segment that is greather than that. Server will later update his window size and client would continue to respect that.
But what about this: during three way handshake, server sends his window size eg 65000. By the time this client sends his segment, another client starts three way handshake and sends something big to server which gets server window size smaller. The second client gets notified about that, but the first don't. The first may send a segment which would fit into old window size but not the new one. So what happens then?