Пытался понять, как работает TCP (конечно, не в подробностях). Я искал в Интернете понятные блок-схемы, и возник вопрос, на который я не мог найти прямого ответа.
Предположим, у нас есть этот красивый поток, в котором все синхронизировано (игнорируйте конечную часть с FIN и пересекающимися пакетами):
Я хотел бы знать, что произойдет, если и A, и B захотят отправлять пакеты одновременно (насколько я понимаю, TCP является двунаправленным протоколом, поэтому каждый объект может отправлять, когда захочет). В основном, как будут вести себя порядковые номера. Наличие пересекающихся пакетов данных.
Также я читал, что TCP - это SWP (протокол скользящего окна), я хотел бы знать, как формируются ACK в этом случае. TCP отвечает количеством байтов в основном как номер Seq, я не могу себе представить, как это может происходить внутри окна (где вы можете получать в любом порядке). Использует ли реализация два набора порядковых номеров и два окна для получателя и отправителя?
Любые ссылки на спецификации или другие полезные ресурсы более чем приветствуются.
В каждом направлении есть отдельный порядковый номер.
Не думаю, что вопрос здесь по теме. Спецификация, которую вы просите, стандартная - RFC 793. Но в основном TCP представляет собой поток байтов, и ACK отправителя указывает текущую позицию в потоке байтов отправителя (есть некоторое начальное смещение - начальный порядковый номер в подтверждении связи), а ACK указывает последнюю позицию, полученную потоком байтов однорангового узла. Окно к этому не имеет отношения.