Поток вызовов TCP в ядре Linux


Я пытаюсь получить поток вызовов TCP внутри ядра Linux с версией 3.8 для различных API пользовательского пространства, таких как connect, bind, listen и accept. Может ли кто-нибудь предоставить мне блок-схему для вызовов потока? Я смог найти для потока данных с помощью API send и recv.

Другой вопрос, когда клиент подключается к серверу, сервер создает новый сокет для этого клиента для этого конкретного соединения, возвращаемого API accept. Мой вопрос поддерживает ли ядро Linux какую-либо связь между прослушивающим сокетом и производным от него сокетом в какой-то хэш-таблице привязки или нет?
2   2   2014-08-06 20:47:49

2 ответа:

1-й вопрос:

Http://www.danzig.jct.ac.il/tcp-ip-lab/ibm-tutorial/3376c210.html

Все лекции в Haifux являются классическими:

Http://www.haifux.org/lectures/172/netLec.pdf

Http://www.haifux.org/lectures/217/netLec5.pdf

И это от оригинального автора / сопровождающего в сети linux сам:

Http://vger.kernel.org/~davem/skb.html

Http://vger.kernel.org/~davem/tcp_output.html

Http://vger.kernel.org/~davem/tcp_skbcb.html

2-й вопрос: Да, все существующие соединения поддерживаются в критической таблице: tcp_hashinfo. Адрес его памяти можно прочитать из файла / proc / kallsyms. "критично", потому что чтение из него требует блокировки, поэтому не пытайтесь ходить по столу, даже если у вас есть адрес. Воспользуйся глобально экспортируемые символы, такие как" inet_lookup_listener "или" inet_lookup_established", чтобы ходить по таблице вместо этого.

Подробнее здесь:

Как определить конкретный сокет между пользовательским пространством и пространством ядра?

Блок-схемы? Блок-схемы? Ни единого шанса. Мы хотели бы иметь их, но они не существуют, но вы можете просмотреть код; патчи с удовольствием пересмотрели.

Сокет возвращает файловый дескриптор; таблица дескрипторов файлов процессов поддерживает связь между сокетом и другими структурами данных ядра. Файловый дескриптор делает это простой операцией индексирования массива, не требующей хэширования.