2015-02-21 2 views
3

TCP отправляет ACK при получении сетевого пакета. Он также повторно передает пакеты, когда происходит тайм-аут. Теперь мой вопрос: в каком потоке работает TCP? Есть ли секретный поток TCP, который прослушивает принятые пакеты и тайм-ауты и запускает отправку ACK и повторно отправляет? Или это происходит только синхронно, когда я звоню, например, receive на сокете? Или может быть, есть собственный процесс демона TCP из ОС, который обрабатывает это?Использует ли TCP собственный поток?

Хотя мой вопрос относится к .net, я считаю, что он применим в целом к ​​любой реализации TCP на любом языке.

+1

Ответ на этот вопрос - это найти хорошую книгу или курс по этой теме - это огромный вопрос. TCP - один уровень в сетевом стеке; он управляется операционной системой в драйвере режима ядра (естественно, поскольку ОС должна сортировать пакеты и решать, к какому приложению их направлять), и операционная система может использовать не только мультилирование потоков, но часто несколько процессов для выполнения всего этого , –

+0

@J ...: Ну, ваш комментарий уже почти ответ :). – gexicide

+0

@gexicide Я просто понял, что вы имели в виду под своим вопросом ... Ну, я согласен с J ... (: –

ответ

3

TCP и сокеты в целом не зависят от языка, а скорее от системы и ее архитектуры.

адресация вопросы:

В какой теме это TCP сделать это? Определенно, ни на какую прикладную нить. Обычно вы не можете это определить, так как на уровне ядра там может быть быть не такой, как «нить».

Существует ли секретный поток TCP-фона, который прослушивает принятые пакеты и тайм-ауты и запускает отправку ACK и повторно отправляется? Если вы считаете ОС «секретной фоновой нитью», то ... да.

Или это происходит синхронно только тогда, когда я звоню, например, в приемник? Когда вы вызываете метод приема, система проверяет наличие входящих пакетов в своем буфере. Но опять же, это может быть более или менее зависящим от системы.

Возможно, есть собственный процесс демона TCP из ОС, который обрабатывает это? Более или менее это.

Для получения дополнительной информации вы можете проверить следующие ссылки: http://en.wikipedia.org/wiki/Protocol_stack http://www.ece.virginia.edu/cheetah/documents/papers/TCPlinux.pdf

PS. Я не мог быстро найти подробную информацию о реализации Windows TCP/IP, но так как winsocks на основе сокетов BSD, я полагаю, что это похоже.

1

Короткий ответ: это волшебство происходит, и вам не нужно беспокоиться об этом. Но это не значит, что вы хотите знать.

ОС выполняет это. Входящие сетевые пакеты вызывают проблемы с прерываниями сетевого адаптера. Это прерывание обрабатывается драйверами и в конечном итоге передается компоненту TCP в ОС. Затем компонент TCP выполняет то, что необходимо для доставки пакета в приложение. Это может означать завершение выдающегося запроса ввода-вывода для данных или очередность данных, которые будут получены позже.

1

В большинстве современных универсальных ОС, включая Linux, другие Unix и Windows, это делается на земле ядра, а не на земле пользователя. На земле ядра это можно сделать с использованием разных механизмов, включая потоки ядра, но чаще всего это делается с отложенными запросами таймаута и короткими задачами, выполняемыми специальным пулом потоков для таких исполнений.

Например, в классической книге «Разработка и внедрение операционной системы 4.4BSD» McKusick & Co., в которой описана реализация сокетов BSD, клонированных практически всеми поставщиками ОС, для таймера TCP описаны два таймера, «быстрый» и «медленный». Когда таймер запускается, действие запланировано на так называемом «мягком прерывании» уровне, вне конкретного контекста процесса. Эта версия не придавала такой активности объявленному процессу, в отличие от современных версий. Вы должны прочитать эту книгу (или ее современный аналог), или некоторые другие классические серии - Р. Стивенса по сетевому программированию. Я не знаю хорошего аналога для Windows с глубоким объяснением работы стека TCP/IP.