В большинстве описаний функции TCP PUSH упоминается, что функция PUSH требует от отправителя не сразу отправлять данные (не дожидаясь заполнения буфера), но также требует, чтобы данные были перенесены в приемное приложение на стороне приемника, без буферизации.
Что я не понимаю, почему данные буфера TCP на принимающей стороне вообще? В конце концов, сегменты TCP перемещаются по IP-датаграммам, которые обрабатываются целиком (т.е. уровень IP обеспечивает только весь сегмент для уровня TCP после выполнения любой необходимой повторной сборки фрагментов IP-дейтаграммы, которые переносят любой данный сегмент). Затем, почему ожидающий приемный уровень TCP будет ждать доставки этих данных в приложение? Один случай может заключаться в том, что приложение не читало данные в этот момент времени. Но тогда, если это так, то принудительное нажатие данных на приложение в любом случае невозможно. Таким образом, мой вопрос заключается в том, почему функция PUSH должна диктовать что-либо о поведении приемника? Учитывая, что приложение считывает данные во время поступления сегмента, этот сегмент должен в любой момент быть доставлен в приложение сразу.
Кто-нибудь может помочь решить мои сомнения?