Получатель может послать квитанцию, подтверждающую получение сразу нескольких сегментов, если они образуют непрерывный поток байтов. Например (рис. 19.12, а), если в буфер, плотно без пропусков заполненный потоком байтов до 2354 включительно, поочередно поступили сегменты (2355-3816), (3817-5275) и (5276-8400), где цифры в скобках означают номера первых и последних байтов каждого сегмента, то получателю достаточно отправить только одну квитанцию на все три сегмента, указав в ней в качестве номера квитанции значение 8401. Таким образом, процесс квитирования является накопительным.
2354 2355 3816 2355 5275 5276 8400
Ш:.Ш'<$А>'.......
t3 |
\2 |
t4 а
10567 12430 |
2354 2355 3816 2355 5275 5276 8400
щ^/f ^ *' | ff
t5 |
t2 |
t4 |
t3
Рис. 19.12. Накопительный принцип квитирования: а — плотное заполнение буфера, в момент t4 передается квитанция, б — неплотное заполнение буфера, в момент t5 снова передается квитанция 8401
Однако сегменты могут прийти к получателю не в том порядке, в котором были посланы, то есть в приемном буфере может образоваться «прогалина» (рис. 19.12, б). Пусть, к примеру, после указанных выше трех сегментов вместо следующего по порядку сегмента (8401-10566) пришел сегмент (10567-12430). Очевидно, что послать в качестве номера квитанции значение 12431 нельзя, потому что это бы означало, что получены все байты вплоть до 12430. Поскольку в потоке байтов
образовался разрыв, получатель может только еще раз повторить квитанцию 8401, говоря тем самым, что все еще ожидает поступления потока байтов, начиная с 8401. Из этого примера видно, что, в отличие от многих других протоколов, протокол TCP подтверждает получение не отдельных блоков данных, а непрерывной последовательности байтов.