
Пусть клиенту необходимо передать серверу порцию полезных данных длиной Q, заполняем
поля Sequence Number (X+1) и Acknowledged Number (Y+1). Пусть сервер получил данный сегмент,
и ему необходимо сгенерировать квитанцию на порцию данных длиной Q байт. Вместе с тем
возможно у сервера тоже есть порция данных длиной V байт для передачи клиенту. Сервер может
послать два сегмента: в одном будет квитанция на полученные данные, в другом – V байт данных
для клиента, однако подчеркнем: ничто не мешает серверу послать ОДИН сегмент, с помощью поля
Acknowledged Number квитировать полученные от клиента байты, с помощью поля Sequence
Number указать номер байта передаваемого первым и передать в сегменте V байт данных.
Рассматриваем поля заголовка сегмента 5: Sequence Number = Y+1, Acknowledged Number =
X+1+Q. Клиент получает данный сегмент и делает вывод о том, что переданные им Q байт данных
получены сервером (так как сервер ожидает от клиента байт номер X+1+Q. Но при этом клиент сам
получил в этом сегменте V байт данных и клиент должен их квитировать. Пусть так же у клиента
самого есть еще W байт данных для передачи серверу. Следовательно, клиент может в одном
сегменте с помощью поля Acknowledged Number = Y+1+V квитировать полученные V байт данных,
с помощью поля Sequence Number = X+1+Q указать номер первого предаваемого в этом сегменте
байта и передать в данном сегменте еще W байт данных. Сервер в свою очередь должен
квитировать эти W байт с помощью Acknowledged Number = X+1+Q+W, но при этом сервер может
передать в том же сегменте и свои R байт данных и т.д.
Главный вывод: TCP позволяет объединять в одном сегменте квитанцию и полезные данные,
так как квитирование и передача данных в протоколе TCP делаются различными полями. Говорят,