SlideShare uma empresa Scribd logo
1 de 45
OpenBSD.
Сетевая подсистема в деталях
   Сергей Присяжный apelsin@atmnis.com
Почему OpenBSD? (goals)




                                SECURE
SMP         ?       HW
Вместо содержания

• Заглянем немного в историю
• Оценим нынешнее состояние сетевого стека
• Перейдём от теории к практике
• Рассмотрим OpenBSD made stuff (pf, bgpd, ospfd, carp, etc)
Ты помнишь, как всё начиналось ?
    Создание MULTICS (ARPA)


    • первый сетевой стек (MIT, 1970)
    • стек MULTICS – основа большинства иных стеков
    Первый TCP/IP стек (MULTICS, 1980)



    Первая UNIX реализация (Berkeley, 1983)



    Основа стека OpenBSD – стек 4.4BSD


    • TCP/IP Illustrated, vol. 2 всё ещё руководство № 1
Краткий обзор
    Socket API


    • взаимодействие с userland
    mbuf “API”


    • управление памятью
    Сетевой стек


    • реализации протоколов
    Маршрутизация


    • независимая реализация на уровне ядра
Socket API
    Используется userland-ом для осуществления


    сетевого взаимодействия
    • IPC де факто стандарт
    • socket(), bind(), connect(), accept()
    • recv(), send(), …
    • setsockopt(), getsockopt()
    Тема отдельного разговора (выходит далеко за


    рамки данного доклада)
    • косвенное упоминание для полноты «картины»
mbufs
mbufs
    Аллокация памяти для пакетов (256 байт каждый)


    • иногда используются для иных данных
    Могут образовывать цепочки и расширяться за счёт


    внешних буферов (кластер - 2K)
    Формируются посредством системного pool(9)



    Неформальный API == набор функций


    • 1-я причина сетевых багов – неправильная работа с mbuf!
mbuf tags
    Ядро может имплементировать метаданные в пакет


    • чаще всего для предотвращения петлей
      (IPsec, gif(4), gre(4))

    Структура


    • TLV – type, length, value
       • динамический размер, выделяемый malloc(9)
    • элементы формируют линейный список
mbuf tags
mbuf tags – хак pf(4)
    pf(4) – активный пользователь mbuf tags



    Каждый пакет получал tag до того, пока …



    Метаданные pf не были имплементированы


    непосредственно в заголовок пакета
    • заголовок немного увеличился
    • отсутствие «холостого хода» malloc(9)
    • оставшегося места достаточно для малых пакетов
    Пример – x2 прирост сквозь SOEKRIS коробку

Сетевой стек
Сетевой стек (обзор)
    4-х уровневая система


    •   интерфейс: драйвера устройств (OSI 1+2)
    •   сеть: IP, IPv6, ICMP (OSI 3)
    •   транспорт: TCP, UDP (OSI 4)
    •   приложение: userland приложения (OSI 5+7)
    В основном – код определения пакетов и выяснения


    их «дальнейшей судьбы»
    • устойчив к наличию багов со стороны-участника процесса
Уровень интерфейса (input)
Уровень интерфейса (input)
    Обработчик RX прерывания драйвера «достаёт» пакет из


    DMA кольца
    Данные попадают на канальный уровень


    • пример - ether_input()
    • определение сетевого протокола
    Пакет передаётся во входящую протокольную очередь с


    последующим планированием программного прерывания
    • пример - schednetisr(NETISR_IP); inq = &ipintrq;
    • netisr – splnet() vs. splsoftnet() (зона демаркации прерываний)
    • оставшиеся части стека выполняются на более низком уровне
Сетевой уровень (input)
Сетевой уровень (input)
    Netisr вызывает сетевой обработчик


    • пример – ipintr() == программное прерывание
    • при условии наличия данных
    Входящие pf(4) фильтрации


    Назначение пакета не локально?


    • перенаправить (if enabled), иначе drop
    • восстановление пакета (TTL, checksum)
    • передать на обработку ip_output()
    Переход на следующий уровень


    • посредством protosw / inetsw [] структуры
    • каждый протокол уровня содержит структуру protosw
Транспортный уровень (input)
Транспортный уровень (input)
    Определение блока контроля протокола (PCB)


    • каждое открытое соединение имеет PCB
    • вмещает всю необходимую информацию для установления
      соединения
    Надёжным протоколам – сложный код


    (TCP – целая философия)
    •  управление потоком
    •  повторная передача
    •  логика повторной сборки
    •  подтверждения
    •  SYN кеш
    Передача в очередь буфера сокета и активизация userland

Транспортный уровень (output)
Транспортный уровень (output)
    Userland: write(), send(), …



    Уровень сокета использует структуру protows для передачи


    данных
    • каждая операция сокета в контексте – вызов функции pr_usrreq(), где
      pr – конкретный протокол (например, tcp_usrreq())
    pr_usrreq() вызывает output функцию



    управление потоком, повторная передача, … для TCP



    вызов сетевой output функции напрямую (без protosw)


    • специфика работы UDP (псевдо IP == PIP)
    • причина необходимости использования udp_output() и udp6_output()
Сетевой уровень (output)
Сетевой уровень (output)
    Формирование сетевого (IP, IPv6) заголовка




    Поиск маршрута (route lookup)


    • В большинстве случаев – маршруты из кеша

    Исходящие pf(4) фильтрации




    Вызов output функции интерфейса


    • интерфейс определяется на стадии поиска маршрута
    • структура интерфейса содержит указатели на функцию
        • подобно protosw структуре
Уровень интерфейса (output)
Уровень интерфейса (output)
    Формирование канального заголовка (Ethernet заголовка) или


    произведение специфических инкапсуляций (natm, ppp)
    Может быть цепью виртуальных интерфейсов


    Пакет готов к передаче в интерфейсную очередь


    • hint: альтернативная организация очереди (ALTQ) происходит на
      данном этапе
    • необходим splnet() уровень
    По факту вызова ifp -> if_start


    • драйвер направляет пакет в кольцо передачи (TX DMA ring)
    • Подобно всему драйвероспецифичному 
    • TX прерывание или иное подобное действие высвободит пакет сквозь
      трансивер
Маршрутизация
Маршрутизация (обзор)
    Форвард данные (forwarding info)




    Адреса канального уровня в этом же дереве




    Адресная группа (aka Address Family) независима


    • каждая AF имеет отдельное дерево

    «Там чудеса: там леший бродит, … »


    • не там, чудеса начинаются здесь! 
Маршрутизация (обзор)
Маршрутизация (рассмотрим)

    Метки




    Домены aka VRF




    Приоритеты

Маршрутизация (метки)
    Маршрут может быть оттагированным ядром



    Метка заменяется на integer в ядре 


    • мысли? (идея: сравнение строк) == скорость, память

    pf «умеет» фильтровать или тагировать трафик на основе


    rtlabels
    bgpd может помечать маршруты посредством BGP path


    атрибутов
    ospfd в состоянии устанавливать метки маршрута,


    основанные на внешних маршрутных тагах
Маршрутизация (домены)
    Расширенная версия множественных маршрутных таблиц


    • максимум 256 таблиц
    • таблица по умолчанию – ID 0

    Набору интерфейсов определяется специфическая таблица


    • одна и та же сеть может быть определена множество раз

    Маршрутный сокет маркирует сообщения различными ID


    таблиц
Маршрутизация (приоритеты)
    Маршрутные демоны должны содержать свои таблицы «в


    чистоте» (синхронизированными)
    Разные приоритеты на случай конфликтов


    • OSPF более предпочтителен системой чем BGP

    Синхронизация в userland – это тяжело


    • «ресурсные войны»
    • маршрутный сокет – потери

    Необходимо лучшее решение

Маршрутизация (приоритеты)
    Дополнительная маршрутная преференция – метрика





    Каждый маршрутный источник имеет свой тип


    •   #define RTP_STATIC   8    /* static routes */
    •   #define RTP_OSPF     16   /* OSPF routes */
    •   #define RTP_RIP      24   /* RIP routes */
    •   #define RTP_BGP      32   /* BGP routes */
    •   иные
Маршрутизация (приоритеты)
От теории к практике
От теории к практике
    Применение sysctl(8)


    •   kern.maxclusters                        управление mbuf(9)
    •   net.inet.ip.ifq.maxlen                  управление очередью
    •   net.inet.ip.maxqueue                    управление очередью
    •   net.inet.{tcp,udp}.{send,recv}space размер окна
    •   net.{inet,inet6}.{ip,ip6}.{forwarding,mforwarding}
    В большинстве случаев достаточно системного



    ifconfig(8) + pfctl(8)
OpenBSD made stuff
OpenBSD made stuff
    OpenSSH     http://www.openssh.com/



    OpenBGPD    http://www.openbgpd.org/



    OpenOSPFD   http://www.openbgpd.org/



    OpenNTPD    http://www.openntpd.org/



    OpenCVS     http://www.opencvs.org/



    иные        http://www.openbsd.org/

Большое спасибо
    Компании ATMNIS http://www.atmnis.com/



    Друзьям


    • konstantyn@atmnis.com
    • gregor@atmnis.com
    Отдельно, Claudio Jeker claudio@openbsd.org



    Организаторам RootConf – 2009

Вопросы?

Mais conteúdo relacionado

Mais procurados

04 Cvc2009 Yekaterinburg Xa5 Fp1 Sergey Kh
04 Cvc2009 Yekaterinburg Xa5 Fp1 Sergey Kh04 Cvc2009 Yekaterinburg Xa5 Fp1 Sergey Kh
04 Cvc2009 Yekaterinburg Xa5 Fp1 Sergey KhLiudmila Li
 
Платформы Java и .NET. Современные концепции ООП
Платформы Java и .NET. Современные концепции ООППлатформы Java и .NET. Современные концепции ООП
Платформы Java и .NET. Современные концепции ООПBoris Volfson
 
Amplifying Reduction Non Approx
Amplifying Reduction Non ApproxAmplifying Reduction Non Approx
Amplifying Reduction Non ApproxStas Fomin
 
02 Citrus Systems S Pb
02 Citrus Systems S Pb02 Citrus Systems S Pb
02 Citrus Systems S PbLiudmila Li
 
Firebird Security (in Russian) at Ansoft'2008 conference
Firebird Security (in Russian) at Ansoft'2008 conferenceFirebird Security (in Russian) at Ansoft'2008 conference
Firebird Security (in Russian) at Ansoft'2008 conferenceAlexey Kovyazin
 
Интерактивный терминал: Perl, XML и Firefox‎
Интерактивный терминал: Perl, XML и Firefox‎Интерактивный терминал: Perl, XML и Firefox‎
Интерактивный терминал: Perl, XML и Firefox‎Anatoly Sharifulin
 
HighLoad Sites, Oleg Bunin
HighLoad Sites, Oleg BuninHighLoad Sites, Oleg Bunin
HighLoad Sites, Oleg BuninOntico
 
Sergey Kh Citrix Systems 4 Smb
Sergey Kh Citrix Systems 4 SmbSergey Kh Citrix Systems 4 Smb
Sergey Kh Citrix Systems 4 SmbLiudmila Li
 
Sergey Ch Hp Citrix Keynote 2009
Sergey Ch Hp Citrix Keynote 2009Sergey Ch Hp Citrix Keynote 2009
Sergey Ch Hp Citrix Keynote 2009Liudmila Li
 

Mais procurados (14)

proxi nastr.
proxi nastr.proxi nastr.
proxi nastr.
 
04 Cvc2009 Yekaterinburg Xa5 Fp1 Sergey Kh
04 Cvc2009 Yekaterinburg Xa5 Fp1 Sergey Kh04 Cvc2009 Yekaterinburg Xa5 Fp1 Sergey Kh
04 Cvc2009 Yekaterinburg Xa5 Fp1 Sergey Kh
 
Платформы Java и .NET. Современные концепции ООП
Платформы Java и .NET. Современные концепции ООППлатформы Java и .NET. Современные концепции ООП
Платформы Java и .NET. Современные концепции ООП
 
Gate 4000
Gate 4000Gate 4000
Gate 4000
 
video hostings architecture
video hostings architecturevideo hostings architecture
video hostings architecture
 
Amplifying Reduction Non Approx
Amplifying Reduction Non ApproxAmplifying Reduction Non Approx
Amplifying Reduction Non Approx
 
Sapka Contest 2009 (RU)
Sapka Contest 2009 (RU)Sapka Contest 2009 (RU)
Sapka Contest 2009 (RU)
 
07 Ws08 R2 Virt
07 Ws08 R2 Virt07 Ws08 R2 Virt
07 Ws08 R2 Virt
 
02 Citrus Systems S Pb
02 Citrus Systems S Pb02 Citrus Systems S Pb
02 Citrus Systems S Pb
 
Firebird Security (in Russian) at Ansoft'2008 conference
Firebird Security (in Russian) at Ansoft'2008 conferenceFirebird Security (in Russian) at Ansoft'2008 conference
Firebird Security (in Russian) at Ansoft'2008 conference
 
Интерактивный терминал: Perl, XML и Firefox‎
Интерактивный терминал: Perl, XML и Firefox‎Интерактивный терминал: Perl, XML и Firefox‎
Интерактивный терминал: Perl, XML и Firefox‎
 
HighLoad Sites, Oleg Bunin
HighLoad Sites, Oleg BuninHighLoad Sites, Oleg Bunin
HighLoad Sites, Oleg Bunin
 
Sergey Kh Citrix Systems 4 Smb
Sergey Kh Citrix Systems 4 SmbSergey Kh Citrix Systems 4 Smb
Sergey Kh Citrix Systems 4 Smb
 
Sergey Ch Hp Citrix Keynote 2009
Sergey Ch Hp Citrix Keynote 2009Sergey Ch Hp Citrix Keynote 2009
Sergey Ch Hp Citrix Keynote 2009
 

Destaque

использование Share Point Server для решения задач документооборта и группово...
использование Share Point Server для решения задач документооборта и группово...использование Share Point Server для решения задач документооборта и группово...
использование Share Point Server для решения задач документооборта и группово...Liudmila Li
 
Asterroid презентация
Asterroid презентацияAsterroid презентация
Asterroid презентацияLiudmila Li
 
Expatriate; local remuneration differences across six countries,Ishbel McWha
Expatriate; local remuneration differences across six countries,Ishbel McWhaExpatriate; local remuneration differences across six countries,Ishbel McWha
Expatriate; local remuneration differences across six countries,Ishbel McWhaNZ Psychological Society
 
ильичев Windows 7
ильичев Windows 7ильичев Windows 7
ильичев Windows 7Liudmila Li
 
Cvc2009 Moscow Repeater+Ica Fabian Kienle Final
Cvc2009 Moscow Repeater+Ica  Fabian Kienle FinalCvc2009 Moscow Repeater+Ica  Fabian Kienle Final
Cvc2009 Moscow Repeater+Ica Fabian Kienle FinalLiudmila Li
 
G Sutton, NZDF response to Christchurch eq feb 2011
G Sutton, NZDF response to Christchurch eq feb 2011G Sutton, NZDF response to Christchurch eq feb 2011
G Sutton, NZDF response to Christchurch eq feb 2011NZ Psychological Society
 
Deventer ziekenhuis 18 februari 2013
Deventer ziekenhuis 18 februari 2013Deventer ziekenhuis 18 februari 2013
Deventer ziekenhuis 18 februari 2013Jeanet Bathoorn ✓
 
Ha Cluster Svoimi Rukami
Ha Cluster Svoimi RukamiHa Cluster Svoimi Rukami
Ha Cluster Svoimi RukamiLiudmila Li
 
Transforming Museums With Technology
Transforming Museums With TechnologyTransforming Museums With Technology
Transforming Museums With TechnologySteveVirgin
 
TAISlim Opportunity Presentation
TAISlim Opportunity PresentationTAISlim Opportunity Presentation
TAISlim Opportunity Presentationgojihive
 
тупицын Ec2 Rootconf2009
тупицын Ec2 Rootconf2009тупицын Ec2 Rootconf2009
тупицын Ec2 Rootconf2009Liudmila Li
 
сергей рыжиков
сергей рыжиковсергей рыжиков
сергей рыжиковLiudmila Li
 

Destaque (20)

использование Share Point Server для решения задач документооборта и группово...
использование Share Point Server для решения задач документооборта и группово...использование Share Point Server для решения задач документооборта и группово...
использование Share Point Server для решения задач документооборта и группово...
 
Asterroid презентация
Asterroid презентацияAsterroid презентация
Asterroid презентация
 
Wijnhandel 20 maart 2013
Wijnhandel 20 maart 2013Wijnhandel 20 maart 2013
Wijnhandel 20 maart 2013
 
Expatriate; local remuneration differences across six countries,Ishbel McWha
Expatriate; local remuneration differences across six countries,Ishbel McWhaExpatriate; local remuneration differences across six countries,Ishbel McWha
Expatriate; local remuneration differences across six countries,Ishbel McWha
 
ильичев Windows 7
ильичев Windows 7ильичев Windows 7
ильичев Windows 7
 
Cvc2009 Moscow Repeater+Ica Fabian Kienle Final
Cvc2009 Moscow Repeater+Ica  Fabian Kienle FinalCvc2009 Moscow Repeater+Ica  Fabian Kienle Final
Cvc2009 Moscow Repeater+Ica Fabian Kienle Final
 
08 Xenserver Dg
08 Xenserver Dg08 Xenserver Dg
08 Xenserver Dg
 
G Sutton, NZDF response to Christchurch eq feb 2011
G Sutton, NZDF response to Christchurch eq feb 2011G Sutton, NZDF response to Christchurch eq feb 2011
G Sutton, NZDF response to Christchurch eq feb 2011
 
Deventer ziekenhuis 18 februari 2013
Deventer ziekenhuis 18 februari 2013Deventer ziekenhuis 18 februari 2013
Deventer ziekenhuis 18 februari 2013
 
Virtuan Box
Virtuan BoxVirtuan Box
Virtuan Box
 
Estado 2010
Estado 2010Estado 2010
Estado 2010
 
Ha Cluster Svoimi Rukami
Ha Cluster Svoimi RukamiHa Cluster Svoimi Rukami
Ha Cluster Svoimi Rukami
 
Term And Virt2
Term And Virt2Term And Virt2
Term And Virt2
 
Hone Tuwhare, R Nairn
Hone Tuwhare, R NairnHone Tuwhare, R Nairn
Hone Tuwhare, R Nairn
 
Transforming Museums With Technology
Transforming Museums With TechnologyTransforming Museums With Technology
Transforming Museums With Technology
 
TAISlim Opportunity Presentation
TAISlim Opportunity PresentationTAISlim Opportunity Presentation
TAISlim Opportunity Presentation
 
тупицын Ec2 Rootconf2009
тупицын Ec2 Rootconf2009тупицын Ec2 Rootconf2009
тупицын Ec2 Rootconf2009
 
сергей рыжиков
сергей рыжиковсергей рыжиков
сергей рыжиков
 
S Carr Addup
S Carr AddupS Carr Addup
S Carr Addup
 
Powerdag 17 januari 2013
Powerdag 17 januari 2013Powerdag 17 januari 2013
Powerdag 17 januari 2013
 

Mais de Liudmila Li

11 Ban Net Scaler Xa
11 Ban Net Scaler Xa11 Ban Net Scaler Xa
11 Ban Net Scaler XaLiudmila Li
 
09 Ban Branch Repeater1
09 Ban Branch Repeater109 Ban Branch Repeater1
09 Ban Branch Repeater1Liudmila Li
 
07 Ibm System X And Blade Center For Citrix Forum(Ekatirenburg)
07 Ibm System X And Blade Center For Citrix Forum(Ekatirenburg)07 Ibm System X And Blade Center For Citrix Forum(Ekatirenburg)
07 Ibm System X And Blade Center For Citrix Forum(Ekatirenburg)Liudmila Li
 
05 чэс описание решения V3
05  чэс описание решения V305  чэс описание решения V3
05 чэс описание решения V3Liudmila Li
 
01 Ap еKaterinburg
01 Ap еKaterinburg01 Ap еKaterinburg
01 Ap еKaterinburgLiudmila Li
 
11 Net Scaler Xa1
11 Net Scaler Xa111 Net Scaler Xa1
11 Net Scaler Xa1Liudmila Li
 
09 Branch Repeater1
09 Branch Repeater109 Branch Repeater1
09 Branch Repeater1Liudmila Li
 
06 03 Gazprombank Success Story
06 03 Gazprombank Success Story06 03 Gazprombank Success Story
06 03 Gazprombank Success StoryLiudmila Li
 
06 02 C I S Citrix Final
06 02 C I S Citrix Final06 02 C I S Citrix Final
06 02 C I S Citrix FinalLiudmila Li
 
06 01 сертифицированные продукты
06 01 сертифицированные продукты06 01 сертифицированные продукты
06 01 сертифицированные продуктыLiudmila Li
 
05 Bykov Citrix Last
05 Bykov Citrix Last05 Bykov Citrix Last
05 Bykov Citrix LastLiudmila Li
 
01 Sk Cvc 2009 Key Note St P
01 Sk   Cvc 2009 Key Note St P01 Sk   Cvc 2009 Key Note St P
01 Sk Cvc 2009 Key Note St PLiudmila Li
 
Digital Design Проект Xen Server Метрополитен
Digital  Design Проект  Xen Server МетрополитенDigital  Design Проект  Xen Server Метрополитен
Digital Design Проект Xen Server МетрополитенLiudmila Li
 

Mais de Liudmila Li (20)

11 Ban Net Scaler Xa
11 Ban Net Scaler Xa11 Ban Net Scaler Xa
11 Ban Net Scaler Xa
 
10 Dg Xd
10 Dg Xd10 Dg Xd
10 Dg Xd
 
09 Ban Branch Repeater1
09 Ban Branch Repeater109 Ban Branch Repeater1
09 Ban Branch Repeater1
 
07 Ibm System X And Blade Center For Citrix Forum(Ekatirenburg)
07 Ibm System X And Blade Center For Citrix Forum(Ekatirenburg)07 Ibm System X And Blade Center For Citrix Forum(Ekatirenburg)
07 Ibm System X And Blade Center For Citrix Forum(Ekatirenburg)
 
06 [хост]
06 [хост]06 [хост]
06 [хост]
 
05 чэс описание решения V3
05  чэс описание решения V305  чэс описание решения V3
05 чэс описание решения V3
 
03 Bcc суэк
03 Bcc суэк03 Bcc суэк
03 Bcc суэк
 
01 Ap еKaterinburg
01 Ap еKaterinburg01 Ap еKaterinburg
01 Ap еKaterinburg
 
11 Net Scaler Xa1
11 Net Scaler Xa111 Net Scaler Xa1
11 Net Scaler Xa1
 
09 Branch Repeater1
09 Branch Repeater109 Branch Repeater1
09 Branch Repeater1
 
10 Xs Dg
10 Xs Dg10 Xs Dg
10 Xs Dg
 
08 Dg Xd
08 Dg Xd08 Dg Xd
08 Dg Xd
 
06 03 Gazprombank Success Story
06 03 Gazprombank Success Story06 03 Gazprombank Success Story
06 03 Gazprombank Success Story
 
06 02 C I S Citrix Final
06 02 C I S Citrix Final06 02 C I S Citrix Final
06 02 C I S Citrix Final
 
06 01 сертифицированные продукты
06 01 сертифицированные продукты06 01 сертифицированные продукты
06 01 сертифицированные продукты
 
05 Bykov Citrix Last
05 Bykov Citrix Last05 Bykov Citrix Last
05 Bykov Citrix Last
 
03 Bcc снг
03 Bcc снг03 Bcc снг
03 Bcc снг
 
01 Sk Cvc 2009 Key Note St P
01 Sk   Cvc 2009 Key Note St P01 Sk   Cvc 2009 Key Note St P
01 Sk Cvc 2009 Key Note St P
 
Digital Design Проект Xen Server Метрополитен
Digital  Design Проект  Xen Server МетрополитенDigital  Design Проект  Xen Server Метрополитен
Digital Design Проект Xen Server Метрополитен
 
X S Cloud N R 5
X S  Cloud  N R 5X S  Cloud  N R 5
X S Cloud N R 5
 

Open Bsd. сетевая подсистема в деталях

  • 1. OpenBSD. Сетевая подсистема в деталях Сергей Присяжный apelsin@atmnis.com
  • 3. Вместо содержания • Заглянем немного в историю • Оценим нынешнее состояние сетевого стека • Перейдём от теории к практике • Рассмотрим OpenBSD made stuff (pf, bgpd, ospfd, carp, etc)
  • 4. Ты помнишь, как всё начиналось ? Создание MULTICS (ARPA)  • первый сетевой стек (MIT, 1970) • стек MULTICS – основа большинства иных стеков Первый TCP/IP стек (MULTICS, 1980)  Первая UNIX реализация (Berkeley, 1983)  Основа стека OpenBSD – стек 4.4BSD  • TCP/IP Illustrated, vol. 2 всё ещё руководство № 1
  • 5.
  • 6. Краткий обзор Socket API  • взаимодействие с userland mbuf “API”  • управление памятью Сетевой стек  • реализации протоколов Маршрутизация  • независимая реализация на уровне ядра
  • 7. Socket API Используется userland-ом для осуществления  сетевого взаимодействия • IPC де факто стандарт • socket(), bind(), connect(), accept() • recv(), send(), … • setsockopt(), getsockopt() Тема отдельного разговора (выходит далеко за  рамки данного доклада) • косвенное упоминание для полноты «картины»
  • 9. mbufs Аллокация памяти для пакетов (256 байт каждый)  • иногда используются для иных данных Могут образовывать цепочки и расширяться за счёт  внешних буферов (кластер - 2K) Формируются посредством системного pool(9)  Неформальный API == набор функций  • 1-я причина сетевых багов – неправильная работа с mbuf!
  • 10.
  • 11. mbuf tags Ядро может имплементировать метаданные в пакет  • чаще всего для предотвращения петлей (IPsec, gif(4), gre(4)) Структура  • TLV – type, length, value • динамический размер, выделяемый malloc(9) • элементы формируют линейный список
  • 13. mbuf tags – хак pf(4) pf(4) – активный пользователь mbuf tags  Каждый пакет получал tag до того, пока …  Метаданные pf не были имплементированы  непосредственно в заголовок пакета • заголовок немного увеличился • отсутствие «холостого хода» malloc(9) • оставшегося места достаточно для малых пакетов Пример – x2 прирост сквозь SOEKRIS коробку 
  • 15. Сетевой стек (обзор) 4-х уровневая система  • интерфейс: драйвера устройств (OSI 1+2) • сеть: IP, IPv6, ICMP (OSI 3) • транспорт: TCP, UDP (OSI 4) • приложение: userland приложения (OSI 5+7) В основном – код определения пакетов и выяснения  их «дальнейшей судьбы» • устойчив к наличию багов со стороны-участника процесса
  • 16.
  • 18. Уровень интерфейса (input) Обработчик RX прерывания драйвера «достаёт» пакет из  DMA кольца Данные попадают на канальный уровень  • пример - ether_input() • определение сетевого протокола Пакет передаётся во входящую протокольную очередь с  последующим планированием программного прерывания • пример - schednetisr(NETISR_IP); inq = &ipintrq; • netisr – splnet() vs. splsoftnet() (зона демаркации прерываний) • оставшиеся части стека выполняются на более низком уровне
  • 20. Сетевой уровень (input) Netisr вызывает сетевой обработчик  • пример – ipintr() == программное прерывание • при условии наличия данных Входящие pf(4) фильтрации  Назначение пакета не локально?  • перенаправить (if enabled), иначе drop • восстановление пакета (TTL, checksum) • передать на обработку ip_output() Переход на следующий уровень  • посредством protosw / inetsw [] структуры • каждый протокол уровня содержит структуру protosw
  • 22. Транспортный уровень (input) Определение блока контроля протокола (PCB)  • каждое открытое соединение имеет PCB • вмещает всю необходимую информацию для установления соединения Надёжным протоколам – сложный код  (TCP – целая философия) • управление потоком • повторная передача • логика повторной сборки • подтверждения • SYN кеш Передача в очередь буфера сокета и активизация userland 
  • 23.
  • 25. Транспортный уровень (output) Userland: write(), send(), …  Уровень сокета использует структуру protows для передачи  данных • каждая операция сокета в контексте – вызов функции pr_usrreq(), где pr – конкретный протокол (например, tcp_usrreq()) pr_usrreq() вызывает output функцию  управление потоком, повторная передача, … для TCP  вызов сетевой output функции напрямую (без protosw)  • специфика работы UDP (псевдо IP == PIP) • причина необходимости использования udp_output() и udp6_output()
  • 27. Сетевой уровень (output) Формирование сетевого (IP, IPv6) заголовка  Поиск маршрута (route lookup)  • В большинстве случаев – маршруты из кеша Исходящие pf(4) фильтрации  Вызов output функции интерфейса  • интерфейс определяется на стадии поиска маршрута • структура интерфейса содержит указатели на функцию • подобно protosw структуре
  • 29. Уровень интерфейса (output) Формирование канального заголовка (Ethernet заголовка) или  произведение специфических инкапсуляций (natm, ppp) Может быть цепью виртуальных интерфейсов  Пакет готов к передаче в интерфейсную очередь  • hint: альтернативная организация очереди (ALTQ) происходит на данном этапе • необходим splnet() уровень По факту вызова ifp -> if_start  • драйвер направляет пакет в кольцо передачи (TX DMA ring) • Подобно всему драйвероспецифичному  • TX прерывание или иное подобное действие высвободит пакет сквозь трансивер
  • 31.
  • 32. Маршрутизация (обзор) Форвард данные (forwarding info)  Адреса канального уровня в этом же дереве  Адресная группа (aka Address Family) независима  • каждая AF имеет отдельное дерево «Там чудеса: там леший бродит, … »  • не там, чудеса начинаются здесь! 
  • 34. Маршрутизация (рассмотрим) Метки  Домены aka VRF  Приоритеты 
  • 35. Маршрутизация (метки) Маршрут может быть оттагированным ядром  Метка заменяется на integer в ядре   • мысли? (идея: сравнение строк) == скорость, память pf «умеет» фильтровать или тагировать трафик на основе  rtlabels bgpd может помечать маршруты посредством BGP path  атрибутов ospfd в состоянии устанавливать метки маршрута,  основанные на внешних маршрутных тагах
  • 36. Маршрутизация (домены) Расширенная версия множественных маршрутных таблиц  • максимум 256 таблиц • таблица по умолчанию – ID 0 Набору интерфейсов определяется специфическая таблица  • одна и та же сеть может быть определена множество раз Маршрутный сокет маркирует сообщения различными ID  таблиц
  • 37. Маршрутизация (приоритеты) Маршрутные демоны должны содержать свои таблицы «в  чистоте» (синхронизированными) Разные приоритеты на случай конфликтов  • OSPF более предпочтителен системой чем BGP Синхронизация в userland – это тяжело  • «ресурсные войны» • маршрутный сокет – потери Необходимо лучшее решение 
  • 38. Маршрутизация (приоритеты) Дополнительная маршрутная преференция – метрика  Каждый маршрутный источник имеет свой тип  • #define RTP_STATIC 8 /* static routes */ • #define RTP_OSPF 16 /* OSPF routes */ • #define RTP_RIP 24 /* RIP routes */ • #define RTP_BGP 32 /* BGP routes */ • иные
  • 40. От теории к практике
  • 41. От теории к практике Применение sysctl(8)  • kern.maxclusters управление mbuf(9) • net.inet.ip.ifq.maxlen управление очередью • net.inet.ip.maxqueue управление очередью • net.inet.{tcp,udp}.{send,recv}space размер окна • net.{inet,inet6}.{ip,ip6}.{forwarding,mforwarding} В большинстве случаев достаточно системного  ifconfig(8) + pfctl(8)
  • 43. OpenBSD made stuff OpenSSH http://www.openssh.com/  OpenBGPD http://www.openbgpd.org/  OpenOSPFD http://www.openbgpd.org/  OpenNTPD http://www.openntpd.org/  OpenCVS http://www.opencvs.org/  иные http://www.openbsd.org/ 
  • 44. Большое спасибо Компании ATMNIS http://www.atmnis.com/  Друзьям  • konstantyn@atmnis.com • gregor@atmnis.com Отдельно, Claudio Jeker claudio@openbsd.org  Организаторам RootConf – 2009 