Linux - статьи




Реализация сети в операционной - часть 8


Функции

Socket Проверяем ошибки Выделяем память Ложим сокет в список inode Устанавливаем указатели на протокольно зависмые части Сохраняем данные про тип и параметры сокета Устанавливаем сокет в положение закрыт Инициализируем очереди пакетов

Connect Проверяем ошибки Определяем Маршрут Проверяем кэш Смотрим в FIB Создаем новую запись в таблице маршрутизации Заполняем её и вощвращаем Сохраняем указатель на запись маршрутишации в сокете Вызываем протокольно зависимую функцию connect Устанавливаем сокет в соединенный

Также надо не забыть закрыть сокет

Close вызывает sock_close in socket.c void sock_release(struct socket *sock) { if (sock->ops) sock->ops->release(sock);

........................... }

а та через цепочку вызовов протокольнозависимую функцию

Дополнительные функции

void inet_sock_release(struct sock *sk) -net/ipv4/af_inet.c назвние говорит за себя + хороший комментарий Алана Коха fib_lookup() - include/net/ip_fib.h возвращает маршрут .Написана русским -Кузнецов! fn_hach_lookup net/fib_hash.c возвращает маршрут по адресу inet_create net/ipv4/af_inet.c создает сокет inet_release <> ip_route_connect вызывает ip_route_output для определени адреса назначения ip_route_output ip_route_output_slow rt_intern_hash полезные для маршрутизации функции sock_close() sock_create() sock_init_data net/core/sock.c инициализирует основные поля сокета sock_release net/socket.c sys_socket tcp_close net/ipv4/tcp.c устанавливает флаг FYN tpc_connect net/ipv4/tpc_output.c сохдает пакеты для соединения с установленым размером окна и соответствующими битами,ложит пакет в очередь и выpывает tcp_transmit_skb чтоб послать пакет tcp_transmit_skb -заполняет заголовок пакета и передает его на уроветь IP tcp_v4_connect() вызывает ip_route_connect создает соединительный пакет и вызывает tcp_connect udp_close udp_connect

Обмен данными

Эта часть описывает процесс обмена данными между различными уровнями ядра и сети Когда приложение отправляет данные то оно пишет в сокет тот в своб оуередь определяет свой тип и вызывает соответствующую функцию,та передает данные протоколу транспортного уровня(tcp,udp) функции етого уровня создают структуру sk_buff,копируют в неё данные заполняют заголовок своего уровня,считают контрольную сумму и шлют на уровень IP.Там дописывается заголовок ip,checksum,возможно пакет фраг менторуется и шлётся на xmit очередь сетевого девайса ,тот посылает пакет в сеть.




Содержание  Назад  Вперед