Как происходят изменения состояния TCP? - PullRequest
2 голосов
/ 08 марта 2012

Эта ссылка объясняет конечный автомат TCP . В нем перечислены все переходы состояний на основе событий отправки / получения. Я чувствую, что это описывает только очевидные. Я хотел бы знать, что происходит, когда вы находитесь в состоянии LISTEN и получаете пакет DATA, или когда вы находитесь в состоянии ESTABLISHED и получаете SYN. ​​

Существуют ли какие-либо реализации TCP в c / c ++, библиотека WINSOCK или другие? Документ TCP RFC хорош и все, но реализация была бы намного полезнее, imo.

Ответы [ 3 ]

3 голосов
/ 08 марта 2012

В описании любого сетевого протокола (конечного автомата и т. Д.) Вполне безопасно предположить, что пакеты, которые являются недопустимыми для данного состояния, просто отбрасываются. Если стек получает SYN в середине установленного потока TCP (с IP-адресом источника / назначения: PORT, совпадающим с этим потоком), это, вероятно, какая-то подделка или повреждение, которое контрольная сумма заголовка не уловила. Пакет должен быть брошен на пол без какого-либо обновления состояния.

Я не подозреваю, что было бы полезно явно включить подобные случаи в описание конечного автомата TCP. Это было бы как включение любой возможной синтаксической ошибки в грамматическое описание языка: загроможденный, большой и запутанный.

3 голосов
/ 08 марта 2012

Это отличный ресурс для того, что вы хотите:

1995 - Иллюстрированный TCP / IP, том 2: Реализация (с Гари Р. Райтом) - ISBN 0-201-63354-X

2 голосов
/ 08 марта 2012

Как вы упомянули, TCP RFC - очень информативное прочтение.

Вы спрашивали о реализации, так что вот несколько ресурсов, которые могут вас заинтересовать:

lwIP фокусируется на минимизации использования ресурсов, и опубликована статья (PDF) , в которой подробно описывается, как этого добиться.В документе также подробно описывается реализация, которая может ответить на некоторые из ваших вопросов выше.Ядро Linux обеспечивает полную реализацию и некоторые более конкретные реализации стека.По общему признанию труднее ориентироваться в исходном коде из-за его сложности, но, вероятно, это самая полная реализация с открытым исходным кодом, которую вы можете найти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...