SlideShare a Scribd company logo
Сетевой стек
Дмитрий Самсонов
Содержание
● Модель OSI
● Сетевая карта (NIC)
● Сетевой стек Linux
○ Пакеты
○ Соединения
○ User-space network stack
● TCP
○ Cumulative acknowledgment
○ Selective acknowledgment
○ Flow control
○ Congestion control
● DNS
● HTTP
● HTTPS
2
Содержание
● Модель OSI
● Сетевая карта (NIC)
● Сетевой стек Linux
○ Пакеты
○ Соединения
○ User-space network stack
● TCP
○ Cumulative acknowledgment
○ Selective acknowledgment
○ Flow control
○ Congestion control
● DNS
● HTTP
● HTTPS
3
Модель OSI 4
Модель OSI 5
DATA
DATA
DATA
DATA
DATA
DATA
DATA7 GET / HTTP/1.1 / HTTP/1.1 200 OK
6 Content-Type
5 IP:PORT
4 SRC/DST Port
3 SRC/DST IP
2 SRC/DST MAC
1
TCP
IP TCP
IP TCP
IP TCP
Ethernet frame
Ethernet packet
HTTP соединение через SOCKS туннель
SOC
KS
MIME
Ethernet frame
SOC
KS
SOC
KS
SOC
KS
SOC
KS
MIME
MIME
MIME
MIME
MIME
Layer 7 6DATA
HTTP
FTP
SMTP
DNS
Ваш протокол
Layer 6
ASCII
MIDI
MPEG
JPEG
MIME
7DATAMIME
Layer 5
Named pipe
NetBIOS
PPTP
SOCKS
SPDY (deprecated)
8DATA
SOC
KS
MIME
OSI model vs Internel protocol suite 9
OSI model vs Internel protocol suite 10
“… Thus, in the OSI model, SSL/TLS must be in layer 6 or 7, and, at the
same time, in layer 4 or below. The conclusion is unescapable: the OSI
model does not work with SSL/TLS. TLS is not in any layer…”
https://security.stackexchange.com/questions/93333/what-layer-is-tls
Layer 4
UDP
● DNS
● SNMP
● SYSLOG
● DHCP
● NTP
● VPN
11DATATCP
SOC
KS
MIME
Layer 4
TCP
● FTP
● SSH
● TELNET
● SMTP
● HTTP
● IMAP
12DATATCP
SOC
KS
MIME
UDP vs TCP 13
UDP TCP
Данные могут теряться Гарантия доставки
Порядок пакетов может перемешиваться Гарантия сохранения последовательности
Мало проверок Много проверок
Максимальный объём данных - 1 пакет Максимальный объём данных - любой
Layer 3
IP
ICMP
IPsec
14DATAIP TCP
SOC
KS
MIME
IP static routing 15DATAIP TCP
SOC
KS
MIME
IP static routing 16DATAIP TCP
SOC
KS
MIME
Destination Gateway Genmask Iface
0.0.0.0 172.16.1.1 0.0.0.0 eth0
172.16.1.0 0.0.0.0 255.255.255.0 eth0
Destination Gateway Genmask Iface
0.0.0.0 172.16.1.1 0.0.0.0 eth0
172.16.1.0 0.0.0.0 255.255.255.0 eth0
netstat -r
ip route
IP static routing 17DATAIP TCP
SOC
KS
MIME
Destination Gateway Genmask Iface
0.0.0.0 172.16.1.1 0.0.0.0 eth0
172.16.1.0 0.0.0.0 255.255.255.0 eth0
IP static routing 18DATAIP TCP
SOC
KS
MIME
Destination Gateway Genmask Iface
0.0.0.0 172.16.1.1 0.0.0.0 eth0
172.16.1.0 0.0.0.0 255.255.255.0 eth0
IP static routing 19DATAIP TCP
SOC
KS
MIME
Destination Gateway Genmask Iface
0.0.0.0 172.16.1.1 0.0.0.0 eth0
172.16.1.0 0.0.0.0 255.255.255.0 eth0
IP static routing 20DATAIP TCP
SOC
KS
MIME
Destination Gateway Genmask Iface
0.0.0.0 172.16.1.1 0.0.0.0 eth0
172.16.1.0 0.0.0.0 255.255.255.0 eth0
IP static routing 21DATAIP TCP
SOC
KS
MIME
Destination Gateway Genmask Iface
0.0.0.0 172.16.1.1 0.0.0.0 eth0
172.16.1.0 0.0.0.0 255.255.255.0 eth0
Destination Gateway Genmask Iface
0.0.0.0 172.16.1.1 0.0.0.0 eth0
172.16.1.0 0.0.0.0 255.255.255.0 eth0
IP static routing 22DATAIP TCP
SOC
KS
MIME
IP static routing 23DATAIP TCP
SOC
KS
MIME
?
IP static routing 24DATAIP TCP
SOC
KS
MIME
ROUTER A
Destination Gateway Genmask Iface
0.0.0.0 192.168.168.1 0.0.0.0 eth2
172.16.3.0 0.0.0.0 255.255.255.0 eth0
172.16.2.0 0.0.0.0 255.255.255.0 eth1
192.168.168.0 0.0.0.0 255.255.255.0 eth2
Destination Gateway Genmask Iface
0.0.0.0 172.16.3.1 0.0.0.0 eth0
172.16.3.0 0.0.0.0 255.255.255.0 eth0
172.16.1.0 0.0.0.0 255.255.255.0 eth1
ROUTER B
IP static routing 25DATAIP TCP
SOC
KS
MIME
ROUTER A
Destination Gateway Genmask Iface
0.0.0.0 192.168.168.1 0.0.0.0 eth2
172.16.3.0 0.0.0.0 255.255.255.0 eth0
172.16.2.0 0.0.0.0 255.255.255.0 eth1
192.168.168.0 0.0.0.0 255.255.255.0 eth2
Destination Gateway Genmask Iface
0.0.0.0 172.16.3.1 0.0.0.0 eth0
172.16.3.0 0.0.0.0 255.255.255.0 eth0
172.16.1.0 0.0.0.0 255.255.255.0 eth1
ROUTER B
IP static routing 26DATAIP TCP
SOC
KS
MIME
?
IP static routing 27DATAIP TCP
SOC
KS
MIME
ROUTER A
Destination Gateway Genmask Iface
0.0.0.0 192.168.168.1 0.0.0.0 eth2
172.16.3.0 0.0.0.0 255.255.255.0 eth0
172.16.2.0 0.0.0.0 255.255.255.0 eth1
192.168.168.0 0.0.0.0 255.255.255.0 eth2
Destination Gateway Genmask Iface
0.0.0.0 172.16.3.1 0.0.0.0 eth0
172.16.3.0 0.0.0.0 255.255.255.0 eth0
172.16.1.0 0.0.0.0 255.255.255.0 eth1
ROUTER B
IP static routing 28DATAIP TCP
SOC
KS
MIME
ROUTER A
Destination Gateway Genmask Iface
0.0.0.0 192.168.168.1 0.0.0.0 eth2
172.16.3.0 0.0.0.0 255.255.255.0 eth0
172.16.2.0 0.0.0.0 255.255.255.0 eth1
192.168.168.0 0.0.0.0 255.255.255.0 eth2
172.16.1.0 172.16.3.2 255.255.255.0 eth0
Destination Gateway Genmask Iface
0.0.0.0 172.16.3.1 0.0.0.0 eth0
172.16.3.0 0.0.0.0 255.255.255.0 eth0
172.16.1.0 0.0.0.0 255.255.255.0 eth1
ROUTER B
IP dynamic routing 29DATAIP TCP
SOC
KS
MIME
OSPF
IP dynamic routing 30DATAIP TCP
SOC
KS
MIME
BGP
IP dynamic routing 31DATAIP TCP
SOC
KS
MIME
BGP AS PATH
IP dynamic routing 32DATAIP TCP
SOC
KS
MIME
BGP AS PATH
Короче - быстрее
IP dynamic routing 33DATAIP TCP
SOC
KS
MIME
Static routes - Offline navigation Dynamic routes - Online navigation
Layer 2
ARP
Bond/Team/LAG
Vlan
34DATAIP TCPEthernet frame
SOC
KS
MIME
Layer 2 35DATAIP TCPEthernet frame
SOC
KS
MIME
ip address
ifconfig
ipconfig
Destination Gateway Genmask Iface
0.0.0.0 172.16.1.1 0.0.0.0 eth0
172.16.1.0 0.0.0.0 255.255.255.0 eth0
PACKET HEADER:
SRC: 172.16.1.1 DST:
192.168.1.1
SRC MAC: AA:AA:AA:AA:AA:AA DST MAC: ?
Layer 2 36DATAIP TCPEthernet frame
SOC
KS
MIME
192.168.1.1
Layer 2 37DATAIP TCPEthernet frame
SOC
KS
MIME
Destination Gateway Genmask Iface
0.0.0.0 172.16.1.1 0.0.0.0 eth0
172.16.1.0 0.0.0.0 255.255.255.0 eth0
PACKET HEADER:
SRC: 172.16.1.1 DST:
192.168.1.1
SRC MAC: AA:AA:AA:AA:AA:AA DST MAC: ?
Layer 2 38DATAIP TCPEthernet frame
SOC
KS
MIME
192.168.1.1
Layer 2
ARP
39DATAIP TCPEthernet frame
# arp -an
141.23.56.23 at
a4:6e:f4:59:83:ab
on eth1
SOC
KS
MIME
Destination Gateway Genmask Iface
0.0.0.0 172.16.1.1 0.0.0.0 eth0
172.16.1.0 0.0.0.0 255.255.255.0 eth0
PACKET HEADER:
SRC: 172.16.1.1 DST:
192.168.1.1
SRC MAC: AA:AA:AA:AA:AA:AA DST MAC:
BB:BB:BB:BB:BB:BB
Layer 2 40DATAIP TCPEthernet frame
SOC
KS
MIME
Destination Gateway Genmask Iface
0.0.0.0 172.16.1.1 0.0.0.0 eth0
172.16.1.0 0.0.0.0 255.255.255.0 eth0
PACKET HEADER:
SRC: 172.16.1.1 DST:
192.168.1.1
SRC MAC: AA:AA:AA:AA:AA:AA DST MAC:
BB:BB:BB:BB:BB:BB
Layer 2 41DATAIP TCPEthernet frame
SOC
KS
MIME
Destination Gateway Genmask Iface
0.0.0.0 172.16.1.1 0.0.0.0 eth0
172.16.1.0 0.0.0.0 255.255.255.0 eth0
PACKET HEADER:
SRC: 172.16.1.1 DST:
192.168.1.1
SRC MAC: ? DST
MAC: ?
Layer 2 42DATAIP TCPEthernet frame
SOC
KS
MIME
Destination Gateway Genmask Iface
0.0.0.0 172.16.1.1 0.0.0.0 eth0
172.16.1.0 0.0.0.0 255.255.255.0 eth0
PACKET HEADER:
SRC: 172.16.1.1 DST:
192.168.1.1
SRC MAC: CC:CC:CC:CC:CC:CC DST MAC:
DD:DD:DD:DD:DD:DD
Layer 2 43DATAIP TCPEthernet frame
SOC
KS
MIME
https://ok.ru
Запрос от клиента (1.1.1.2):
1. Dns » IP
Ok.ru » 5.61.23.11
44
https://ok.ru
Запрос от клиента (1.1.1.2):
1. Dns » IP
Ok.ru » 5.61.23.11
2. IP » route
5.61.23.11 » 1.1.1.1 (default gw)
45
https://ok.ru
Запрос от клиента (1.1.1.2):
1. Dns » IP
Ok.ru » 5.61.23.11
2. IP » route
5.61.23.11 » 1.1.1.1 (default gw)
3. Route IP » MAC
1.1.1.1 » ff:de:fb:1a:94:41
46
https://ok.ru
Запрос от клиента (1.1.1.2):
1. Dns » IP
Ok.ru » 5.61.23.11
2. IP » route
5.61.23.11 » 1.1.1.1 (default gw)
3. Route IP » MAC
1.1.1.1 » ff:de:fb:1a:94:41
47
На каждом маршрутизаторе
https://ok.ru
Запрос от клиента (1.1.1.2):
1. Dns » IP
Ok.ru » 5.61.23.11
2. IP » route
5.61.23.11 » 1.1.1.1 (default gw)
3. Route IP » MAC
1.1.1.1 » ff:de:fb:1a:94:41
Ответ от сервера (5.61.23.11):
1. IP » route
1.1.1.2 » 5.61.23.1 (default gw)
2. Route IP » MAC
5.61.23.1 » ff:00:0c:9f:f0:25
48
Layer 2
VLAN
49DATAIP TCPEthernet frame
SOC
KS
MIME
Layer 2 50DATAIP TCPEthernet frame
Bond
failover
Bond
load-balancing
SOC
KS
MIME
Содержание
● Модель OSI
● Сетевая карта (NIC)
● Сетевой стек Linux
○ Пакеты
○ Соединения
○ User-space network stack
● TCP
○ Cumulative acknowledgment
○ Selective acknowledgment
○ Flow control
○ Congestion control
● DNS
● HTTP
● HTTPS
51
Сетевая карта (NIC)
Что умеют сетевые карты?
ethtool -k eth0 - offload CPU work to NIC
TSO, GSO, GRO...
52
Сетевая карта (NIC)
Что умеют сетевые карты?
ethtool -s eth0 - ethernet speed
auto, 10, 100, 1000...
53
Сетевая карта (NIC)
Что умеют сетевые карты?
ethtool -a eth0 - ethernet flow control
Свитч/NIC могут отправить друг-другу pause frame, если ring buffer
заполнен и новые данные не могут быть приняты. В этом случае
вторая сторона может попытаться временно сохранить пакет у себя
в буффере.
54
Сетевая карта (NIC)
Что умеют сетевые карты?
ethtool -c eth0 - interrupt coalescing
Частота hw interrupt.
55
Сетевая карта (NIC)
Что умеют сетевые карты?
ethtool -g eth0 - ring buffer size
56
Сетевая карта (NIC)
Что умеют сетевые карты?
ethtool -n eth0 - RSS hash settings and NIC “firewall”
Позволяет фильтровать трафик на уровне NIC, не задействуя CPU.
57
Сетевая карта (NIC)
Что умеют сетевые карты?
ethtool -l eth0 - multiqueue
Количество очередей.
58
Сетевая карта (NIC)
Что умеют сетевые карты?
ethtool -x eth0 - receive flow hash indirection table.
Можно отправлять полученные пакеты не во все очереди (и
соответственно ядра процессора) или отправлять разное количество
пакетов в разные очереди.
59
Сетевая карта (NIC)
Что умеют сетевые карты?
ethtool --show-priv-flags eth0 - manufacturer specific settings
Всё что выходит за рамки стандартного функционала сетевых карт.
60
Сетевая карта (NIC)
Что умеют сетевые карты?
ethtool -m eth0 - port module specific settings.
Настройки и статистика модульного порта сетевой карты (SFP+,
QSFP).
61
Содержание
● Модель OSI
● Сетевая карта (NIC)
● Сетевой стек Linux
○ Пакеты
○ Соединения
○ User-space network stack
● TCP
○ Cumulative acknowledgment
○ Selective acknowledgment
○ Flow control
○ Congestion control
● DNS
● HTTP
● HTTPS
62
Сетевой стек Linux 63
Сетевой стек Linux
Что умеет сетевой стек Linux?
64
Сетевой стек Linux
Что умеет сетевой стек Linux?
Много всего!
65
# uname -r
5.2.7-1.el7.elrepo.x86_64
# sysctl -a | awk '/^net./ && !/(eth|lo|lan|wan|bond)[0-9]*./
{count++} END {print count}'
490
Содержание
● Модель OSI
● Сетевая карта (NIC)
● Сетевой стек Linux
○ Пакеты
○ Соединения
○ User-space network stack
● TCP
○ Cumulative acknowledgment
○ Selective acknowledgment
○ Flow control
○ Congestion control
● DNS
● HTTP
● HTTPS
66
Сетевой стек Linux: пакеты 67
TX
Application
Socket TX buffer
Kernel TX queue (qdisc)
NIC Driver TX ring buffer
NIC internal buffer
RX
Application
Socket RX buffer
[Kernel RX queue (backlog)]
NIC Driver RX ring buffer
NIC internal buffer
Сетевой стек Linux: TX 68
TX Как потыкать палкой
Socket TX buffer sysctl net.ipv4.tcp_wmem or SO_SNDBUF
Kernel TX queue (qdisc) ip link | grep "qlen.*" or discipline dependent
NIC Driver TX ring buffer ethtool -g ethX
Сетевой стек Linux: RX 69
RX Как потыкать палкой
Socket RX buffer sysctl net.ipv4.tcp_rmem or SO_RCVBUF
[Kernel RX queue
(backlog)]
sysctl net.core.netdev_max_backlog (non-
NAPI or RPS)
NIC Driver RX ring buffer ethtool -g ethX
Содержание
● Модель OSI
● Сетевая карта (NIC)
● Сетевой стек Linux
○ Пакеты
○ Соединения
○ User-space network stack
● TCP
○ Cumulative acknowledgment
○ Selective acknowledgment
○ Flow control
○ Congestion control
● DNS
● HTTP
● HTTPS
70
Сетевой стек Linux: соединения 71
Что умеют соединения?
● SO_SNDBUF
● SO_RCVBUF
Сетевой стек Linux: соединения 72
Что умеют соединения?
● SO_SNDBUF
● SO_RCVBUF
● SO_ACCEPTCONN
● SO_ATTACH_FILTER
● SO_BINDTODEVICE
● SO_BROADCAST
● SO_BSDCOMPAT
● SO_DEBUG
● SO_DETACH_FILTER
● SO_DOMAIN
● SO_DONTROUTE
● SO_ERROR
● SO_KEEPALIVE
● SO_LINGER
● SO_MARK
● SO_OOBINLINE
● SO_PASSCRED
● SO_PEEK_OFF
● SO_PEERCRED
● SO_PRIORITY
● SO_PROTOCOL
● SO_RCVBUFFORCE
● SO_RCVLOWAT
● SO_RCVTIMEO
● SO_REUSEADDR
● SO_REUSEPORT
● SO_SNDBUFFORCE
● SO_SNDLOWAT
● SO_SNDTIMEO
● SO_TIMESTAMP
● SO_TYPE
● TCP_CA_NAME_MAX
● TCP_CONGESTION
● TCP_CORK
● TCP_DEFER_ACCEPT
● TCP_INFO
● TCP_KEEPCNT
● TCP_KEEPIDLE
● TCP_KEEPINTVL
● TCP_LINGER2
● TCP_MAXSEG
● TCP_NODELAY
● TCP_QUICKACK
● TCP_SYNCNT
● TCP_SYNQ_HSIZE
● TCP_USER_TIMEOUT
● TCP_WINDOW_CLAMP
Сетевой стек Linux: соединения 73
Что умеют соединения?
● SO_KEEPALIVE - поддерживать соединение открытым, отсылая
keepalive пакеты (в Linux по умолчанию 2 часа!)
● SO_REUSEADDR (net.ipv4.tcp_tw_reuse) - переиспользовать TIME_WAIT
соединения (меньше шансов, что закончаться доступные сокеты)
● SO_REUSEPORT - разрешить слушать порт нескольким
процессам/тридам (быстрое открытие входящих соединений)
● TCP_CORK - отсылать данные пачками (увеличивает throughput, для
малоактивных соединений, выключать или использовать вместе с
TCP_QUICKACK)
● TCP_NODELAY - отсылать данные как можно быстрее (уменьшает
latency)
● TCP_DEFER_ACCEPT - не будить приложение, пока не придут
реальные данные
Сетевой стек Linux: соединения 74
Моё приложение слушает порт и обслуживает соединения!
Я всё контролирую!
Сетевой стек Linux: соединения 75
Моё приложение слушает порт и обслуживает соединения!
Я всё контролирую!
Всё делает ядро:
● слушает порт
● устанавливает соединения
● поддерживает tcp keepalive
● закрывает соединения
Приложение только отдаёт распоряжения (и то не всегда).
Сетевой стек Linux: соединения 76
Лимиты соединений
● net.ipv4.tcp_max_syn_backlog - SYN received, SYNACK sent
● net.core.somaxconn or listen(sockfd,SOMAXCONN) - ACK received,
ожидает обработки приложением
Сетевой стек Linux 77
И всё?
Сетевой стек Linux 78
Неа
Сетевой стек Linux 79
Traffic shaping (десятки алгоритмов)
Policy routing
Firewall (десятки расширений)
Bridging
TLS (!)
Содержание
● Модель OSI
● Сетевая карта (NIC)
● Сетевой стек Linux
○ Пакеты
○ Соединения
○ User-space network stack
● TCP
○ Cumulative acknowledgment
○ Selective acknowledgment
○ Flow control
○ Congestion control
● DNS
● HTTP
● HTTPS
80
Сетевой стек Linux: User space network stack 81
Сетевой стек Linux: User space network stack 82
DPDK
Netmap
mTCP
Snabbswitch
OpenOnload
Сетевой стек Linux: User space network stack 83
DPDK
Netmap
mTCP
Snabbswitch
OpenOnload
DPDK L4 Load Balancer by NFWare
http://www.highload.ru/2017/abstracts/2858.html
Сетевой стек Linux: XDP 84
Сетевой стек Linux: XDP 85
Устройства не монополизированы:
● Работают стандартные утилиты
● Работают стандартный мониторинг
● Работает стандартно
Содержание
● Модель OSI
● Сетевая карта (NIC)
● Сетевой стек Linux
○ Пакеты
○ Соединения
○ User-space network stack
● TCP
○ Cumulative acknowledgment
○ Selective acknowledgment
○ Flow control
○ Congestion control
● DNS
● HTTP
● HTTPS
86
TCP 87
Терминология: RTT 88
Терминология: RTT 89
Терминология: RTT 90
Терминология: RTT 91
0 - 100ms Respond to a user action within this time window and users feel like the result is immediate. Any
longer, and the connection between action and reaction is broken.
100 - 300ms Users experience a slight perceptible delay.
300 - 1000 ms Within this window, things feel part of a natural and continuous progression of tasks. For most
users on the web, loading pages or changing views represents a task.
1000+ms Beyond 1 second, the user loses focus on the task they are performing.
10,000+ms The user is frustrated and is likely to abandon the task; they may or may not come back later.
https://developers.google.com/web/fundamentals/performance/rail
Терминология: RTT 92
3G 4G
DNS lookup 200 ms 100 ms
TCP handshake 200 ms 100 ms
TLS handshake 200–400 ms 100–200 ms
HTTP request 200 ms 100 ms
Total latency overhead 200–1000 ms 100–500 ms
Терминология: RTT 93
Терминология: RTT 94
Терминология: MTU, MSS 95
TCP: подтверждение получения каждого пакета 96
TCP: пропускная способность 97
С какой максимальной скоростью можно передавать данные через 1
TCP соединение при MTU=1500byte и RTT=20ms?
TCP: пропускная способность 98
С какой максимальной скоростью можно передавать данные через 1
TCP соединение при MTU=1500byte и RTT=20ms?
throughput=MTU/RTT
throughput=1500/20=75byte/ms=75*8*1000/1024/1024=0.57Mbit/s
Маловато будет!
Содержание
● Модель OSI
● Сетевая карта (NIC)
● Сетевой стек Linux
○ Пакеты
○ Соединения
○ User-space network stack
● TCP
○ Cumulative acknowledgment
○ Selective acknowledgment
○ Flow control
○ Congestion control
● DNS
● HTTP
● HTTPS
99
TCP: Cumulative acknowledgment 100
192.168.168.15.51480 > 80.249.99.148.80: ack 40565
80.249.99.148.80 > 192.168.168.15.51480: seq 40565:41985
80.249.99.148.80 > 192.168.168.15.51480: seq 41985:43405
80.249.99.148.80 > 192.168.168.15.51480: seq 43405:44825
80.249.99.148.80 > 192.168.168.15.51480: seq 44825:46245
80.249.99.148.80 > 192.168.168.15.51480: seq 46245:47665
192.168.168.15.51480 > 80.249.99.148.80: ack 47665
Sequence number
Cumulative acknowledgment
TCP: Cumulative acknowledgment 101
192.168.168.15.51480 > 80.249.99.148.80: ack 40565
80.249.99.148.80 > 192.168.168.15.51480: seq 40565:41985
80.249.99.148.80 > 192.168.168.15.51480: seq 41985:43405
80.249.99.148.80 > 192.168.168.15.51480: seq 43405:44825
80.249.99.148.80 > 192.168.168.15.51480: seq 44825:46245
80.249.99.148.80 > 192.168.168.15.51480: seq 46245:47665
Содержание
● Модель OSI
● Сетевая карта (NIC)
● Сетевой стек Linux
○ Пакеты
○ Соединения
○ User-space network stack
● TCP
○ Cumulative acknowledgment
○ Selective acknowledgment
○ Flow control
○ Congestion control
● DNS
● HTTP
● HTTPS
102
TCP: Selective acknowledgment and retransmit 103
192.168.168.15.51480 > 80.249.99.148.80: ack 40565
80.249.99.148.80 > 192.168.168.15.51480: seq 40565:41985
80.249.99.148.80 > 192.168.168.15.51480: seq 41985:43405
80.249.99.148.80 > 192.168.168.15.51480: seq 43405:44825
80.249.99.148.80 > 192.168.168.15.51480: seq 44825:46245
80.249.99.148.80 > 192.168.168.15.51480: seq 46245:47665
192.168.168.15.51480 > 80.249.99.148.80: ack 40565, options
[sack 1 {41985:40565}]
80.249.99.148.80 > 192.168.168.15.51480: seq 40565:41985
Selective acknowledgment Retransmit
TCP: Bandwidth-delay product 104
Bandwidth-delay product - количество битов информации, получение
которых ещё не подтверждено.
Нужно ли ограничивать?
TCP: Bandwidth-delay product 105
С какой максимальной скоростью можно передавать данные через 1
TCP соединение при Bandwidth=1Gbit/s?
TCP: Bandwidth-delay product 106
С какой максимальной скоростью можно получать данные через 1 TCP
соединение при Bandwidth=1Gbit/s?
TCP: Bufferbloat 107
Больше BDP » больше queue » больше latency » больше packet drop »
больше retransmit » меньше throughput
Packet queue (Bufferbloat)
Gateway
Server Client
TCP: Bandwidth-delay product 108
С какой максимальной скоростью можно принимать/отправлять
данные через 1 TCP соединение при Bandwidth=1Gbit/s?
Со скоростью самого медленного участка пути.
Сетевой стек Linux: пакеты 109
TX
Application
Socket TX buffer
Kernel TX queue (qdisc)
NIC Driver TX ring buffer
NIC internal buffer
RX
Application
Socket RX buffer
[Kernel RX queue (backlog)]
NIC Driver RX ring buffer
NIC internal buffer
TCP: Flow control 110
Сколько данных можно отправить, чтобы принимающее приложение
не захлебнулось и не переполнились буферы?
Хватает ли ресурсов приложению на принимающей стороне?
Не занято ли приложение чем-то другим?
Содержание
● Модель OSI
● Сетевая карта (NIC)
● Сетевой стек Linux
○ Пакеты
○ Соединения
○ User-space network stack
● TCP
○ Cumulative acknowledgment
○ Selective acknowledgment
○ Flow control
○ Congestion control
● DNS
● HTTP
● HTTPS
111
Сетевой стек Linux: пакеты 112
TX
Application
Socket TX buffer
Kernel TX queue (qdisc)
NIC Driver TX ring buffer
NIC internal buffer
RX
Application
Socket RX buffer
[Kernel RX queue (backlog)]
NIC Driver RX ring buffer
NIC internal buffer
TCP: Flow control: TCP Window 113
min( free space in client socket buffer - in flight traffic,
free space in server socket buffer)
TCP: Flow control: TCP Window 114
"640K ought to be enough for anybody" ©
TCP: Flow control: TCP Window 115
С какой максимальной скоростью можно передавать данные через 1
TCP соединение при BDP=65KB, RTT=20ms, Bandwidth=1Gbit/s?
throughput=BDP/RTT
throughput=65/0.02=3250KB/s=3250*8/1024=25Mbit/s
Маловато будет!
TCP: Flow control: TCP Window scaling 116
Windows scale TCP option max 2^14
Window size = win * 2^window scale
Maximal window = 1GB
TCP: Congestion control 117
Application
Socket buffer
Kernel queue
NIC Driver ring buffer
NIC internal buffer
Почему пропадают пакеты?
Почему растёт latency?
Где bufferbloat?
На сколько нам снизить скорость
отсылки данных?
Как узнать, что скорость можно
увеличить опять?
Packet queue (Bufferbloat)
Gateway1 Gateway3
Server Gateway2 Client
TCP: Congestion control 118
Почему у меня тормозит habrahabr.ru, когда я качаю легальный контент
через торренты?
Почему у меня тормозит torrent по WiFi из спальни?
Содержание
● Модель OSI
● Сетевая карта (NIC)
● Сетевой стек Linux
○ Пакеты
○ Соединения
○ User-space network stack
● TCP
○ Cumulative acknowledgment
○ Selective acknowledgment
○ Flow control
○ Congestion control
● DNS
● HTTP
● HTTPS
119
TCP: Congestion avoidance algorithms 120
Входные данные:
● Latency
● Loss
Если пакеты теряются и latency растёт, то возможно надо снизить
скорость передачи.
TCP: Congestion avoidance algorithms 121
Входные данные:
● Latency
● Loss
Если пакеты теряются и latency растёт, то возможно надо снизить
скорость передачи.
А может и нет.
TCP: Congestion avoidance algorithms 122
TCP Tahoe and Reno
TCP Vegas
TCP New Reno
TCP Hybla
TCP BIC
TCP CUBIC
Agile-SD TCP
TCP Westwood+
Compound TCP
TCP Proportional Rate Reduction
TCP BBR
FAST TCP
Generalized FAST TCP
H-TCP
Data Center TCP
High Speed TCP
HSTCP-LP
TCP-Illinois
TCP-LP
TCP SACK
Scalable TCP
TCP Veno
Westwood
XCP
YeAH-TCP
TCP-FIT
TCP: Congestion avoidance algorithms: BBR 123
TCP: To Buffer or not to Buffer 124
Зачем?
● Для пакетной обработки
● Для сглаживания нагрузки
Сколько?
● Не обрабатывать столько времени, сколько вы можете ждать.
Throughput vs Latency
Когда?
● Слишком дорого обрабатывать по одному
● Чтобы избежать блокировок
TCP: RTT 125
RTT=0?
TCP: TFO 126
RTT=0!
Edge
Chrome
UDP 127
UDP?
Содержание
● Модель OSI
● Сетевая карта (NIC)
● Сетевой стек Linux
○ Пакеты
○ Соединения
○ User-space network stack
● TCP
○ Cumulative acknowledgment
○ Selective acknowledgment
○ Flow control
○ Congestion control
● DNS
● HTTP
● HTTPS
128
DNS: архитектура 129
DNS: виды записей 130
● A
● CNAME - games.ok.ru » www.ok.ru
● NS - авторитативные сервера зоны (домена)
● MX - почтовые адреса домена
@ 3600 SOA ns1.odnoklassniki.ru.
hostmaster.odnoklassniki.ru. 2016090700 10800 1800 2419200
3600
@ 3600 NS ns1.odnoklassniki.ru.
@ 3600 NS ns2.odnoklassniki.ru.
@ 3600 NS ns3.odnoklassniki.ru.
@ 3600 NS ns4.odnoklassniki.ru.
@ 3600 A 5.61.236.151
www 3600 CNAME apiok.ru
DNS: RTT 131
# host games.ok.ru
games.ok.ru is an alias for www.ok.ru.
www.ok.ru has address 5.61.23.11
www.ok.ru has address 217.20.147.1
www.ok.ru has address 217.20.155.13
DNS: Global Server Load Balancing 132
DNS: Global Server Load Balancing 133
А если клиент использует Google DNS 8.8.8.8?
DNS: EDNS 134
Псевдо-запись типа OPT, которой нет в зоне и которая существует
только в DNS пакетах участников обмена данными.
Примеры использования:
● DNSSEC: EDNS header flag “DO”
● GSLB DNS: EDNS Option “edns-client-subnet”
DNS: EDNS edns-client-subnet 135
Содержание
● Модель OSI
● Сетевая карта (NIC)
● Сетевой стек Linux
○ Пакеты
○ Соединения
○ User-space network stack
● TCP
○ Cumulative acknowledgment
○ Selective acknowledgment
○ Flow control
○ Congestion control
● DNS
● HTTP
● HTTPS
136
HTTP 137
# curl -v go.com
> GET / HTTP/1.1
> Host: go.com
> User-Agent: curl/7.47.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Wed, 11 Oct 2017 14:40:39 GMT
< Content-Type: text/html;charset=utf-8
< Content-Length: 1341159
{ [2484 bytes data]
<!DOCTYPE html>
<html class="no-js" version="HTML+RDFa 1.1" lang="en">
HTTP 138
HTTP 139
Как ускорить?
● Keepalive - сокращает количество roundtrip для получения каждого
файла.
● HTTP 2 - параллельное получение файлов [и push].
HTTP: HTTP 2 Multiplexing 140
HTTP: HTTP 2 Push 141
HTTP 142
< HTTP/1.1 200 OK
< Server: Apache
< Date: Wed, 11 Oct 2017 15:18:56 GMT
< Content-Type: text/html;charset=UTF-8
< Transfer-Encoding: chunked
< Connection: keep-alive
< Vary: Accept-Encoding
< Set-Cookie: bci=-6985998813908368544; Domain=.ok.ru; Expires=Mon, 29-Oct-2085 18:33:03 GMT;
Path=/; HttpOnly
< Content-Security-Policy: default-src data: 'self' 'unsafe-inline' 'unsafe-eval' ok.ru *.ok.ru ...
< Content-Security-Policy-Report-Only: default-src data: blob: about: 'self' 'unsafe-inline'
'unsafe-eval' https: wss:; report-uri /csp/report?always;
< Cache-Control: no-cache
< Cache-Control: no-store
< Pragma: no-cache
< Expires: Mon, 26 Jul 1997 05:00:00 GMT
< X-XSS-Protection: 1; mode=block
< X-Content-Type-Options: nosniff
< Strict-Transport-Security: max-age=2592000;includeSubdomains
< Rendered-Blocks: HtmlPage
< X-ScT: true
< X-FRAME-OPTIONS: SAMEORIGIN
HTTP: WebSocket 143
TCP соединение, которое устанавливается с вебсервером, при этом
после установки внутри соединения могут ходить данные любого вида
в обоих направлениях - никакого оверхеда связанного с HTTP
протоколом нет.
Содержание
● Модель OSI
● Сетевая карта (NIC)
● Сетевой стек Linux
○ Пакеты
○ Соединения
○ User-space network stack
● TCP
○ Cumulative acknowledgment
○ Selective acknowledgment
○ Flow control
○ Congestion control
● DNS
● HTTP
● HTTPS
144
HTTPS: Handshake 145
HTTPS: Handshake 146
● Долго для клиента
● Тяжело для серверного CPU
HTTPS: Handshake 147
CPU
HTTPS: Handshake: Elliptic curve certificate 148
ECDSA
● быстрее/легче
● Не все поддерживают
Nginx умеет работать
сразу с 2 сертификатами.
HTTPS: Handshake: TLS ticket 149
HTTPS: Handshake: TLS ticket 150
Содержание
● Модель OSI
● Сетевая карта (NIC)
● Сетевой стек Linux
○ Пакеты
○ Соединения
○ User-space network stack
● TCP
○ Cumulative acknowledgment
○ Selective acknowledgment
○ Flow control
○ Congestion control
● DNS
● HTTP
● HTTPS
151
Содержание
● Модель OSI
● Сетевая карта (NIC)
● Сетевой стек Linux
○ Пакеты
○ Соединения
○ User-space network stack
● TCP
○ Cumulative acknowledgment
○ Selective acknowledgment
○ Flow control
○ Congestion control
● DNS
● HTTP
● HTTPS
● QUIC
152
UDP 153
UDP?
UDP 154
Туннелирование (VPN)
UDP 155
Туннелирование (VPN)
Сколько RTT надо для установки TCP соединения внутри TCP
туннеля?
Сколько RTT надо для пересылки пакета, если первый раз он пропал?
Quic 156
TLS handshake
TLS ticket
“TFO”
Congestion control
Multiplexed connections
Speculative retransmission
Compression
Fallback to TCP
Quic 157
TCP 158
TCP handshake = 1.5 RTT
TLS handshake = 2 RTT
Quic 159
TCP handshake = 1.5 RTT
TLS handshake = 2 RTT
Quic 160
TCP handshake = 1.5 RTT
TLS handshake = 2 RTT
Первое подключение: RTT=1
Повторное подключение: RTT=0
Quic 161
RTT = 0!
Quic 162
Было Стало
Что Кто Сколько Что Кто Сколько
SPDY
(deprecated)
Google 7% в 2016 HTTP/2 IETF,
Google
49% из
ТОП 10М
в Августе
2020
QUIC Google 4.2% в
Апреле
2020
HTTP/3
(HTTP
over
QUIC)
(draft)
IETF,
Google
8% из
ТОП 10М
в Августе
2020
Содержание
● Модель OSI
● Сетевая карта (NIC)
● Сетевой стек Linux
○ Пакеты
○ Соединения
○ User-space network stack
● TCP
○ Cumulative acknowledgment
○ Selective acknowledgment
○ Flow control
○ Congestion control
● DNS
● HTTP
● HTTPS
● QUIC
163
dmitry.samsonov@corp.mail.ru
164
Спасибо за внимание!
Полезные ссылки
https://www.cubrid.org/blog/understanding-tcp-ip-network-stack
https://blog.packagecloud.io/eng/2016/06/22/monitoring-tuning-linux-
networking-stack-receiving-data/
https://blog.packagecloud.io/eng/2017/02/06/monitoring-tuning-linux-
networking-stack-sending-data/
https://en.wikipedia.org/wiki/Transmission_Control_Protocol
https://linux.die.net/man/7/tcp
https://linux.die.net/man/7/socket
https://prototype-kernel.readthedocs.io/en/latest/networking/index.html
http://www.brendangregg.com/Perf/linux_observability_tools.png
http://www.brendangregg.com/Perf/linux_tuning_tools.png
165
dmitry.samsonov@corp.mail.ru

More Related Content

What's hot

FlexVPN
FlexVPNFlexVPN
FlexVPN
Cisco Russia
 
Обратная разработка бинарных форматов с помощью Kaitai Struct
Обратная разработка бинарных форматов с помощью Kaitai StructОбратная разработка бинарных форматов с помощью Kaitai Struct
Обратная разработка бинарных форматов с помощью Kaitai Struct
Positive Hack Days
 
Сокеты
СокетыСокеты
Get inside stage2 new
Get inside stage2 newGet inside stage2 new
Get inside stage2 new
InfoTeCS
 
Performance optimization of virtual network infrastructure (RUS, OpenStack Me...
Performance optimization of virtual network infrastructure (RUS, OpenStack Me...Performance optimization of virtual network infrastructure (RUS, OpenStack Me...
Performance optimization of virtual network infrastructure (RUS, OpenStack Me...
Vadim Ponomarev
 
IBM FlexSystem Chassis (October 2013) (RUS)
IBM FlexSystem Chassis (October 2013) (RUS)IBM FlexSystem Chassis (October 2013) (RUS)
IBM FlexSystem Chassis (October 2013) (RUS)
Yury Alexeev
 
More Smoked CTFs для Leet Chicken, пожалуйста!
More Smoked CTFs для Leet Chicken, пожалуйста!More Smoked CTFs для Leet Chicken, пожалуйста!
More Smoked CTFs для Leet Chicken, пожалуйста!
snowytoxa
 
Опенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр ВолковОпенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Yandex
 
Вебинар по криптомаршрутизаторам, 14.12.2016
Вебинар по криптомаршрутизаторам, 14.12.2016Вебинар по криптомаршрутизаторам, 14.12.2016
Вебинар по криптомаршрутизаторам, 14.12.2016
S-Terra CSP
 
Антон Карпов - Обзорная лекция по безопасности
Антон Карпов - Обзорная лекция по безопасностиАнтон Карпов - Обзорная лекция по безопасности
Антон Карпов - Обзорная лекция по безопасностиYandex
 
Веб-сервер
Веб-серверВеб-сервер
Веб-сервер
lectureswww lectureswww
 
Спецификация WSGI (PEP-333)
Спецификация WSGI (PEP-333)Спецификация WSGI (PEP-333)
Спецификация WSGI (PEP-333)
lectureswww lectureswww
 
Оптимизации поисковой выдачи Яндекса / Иван Хватов, Сергей Ляджин (Яндекс)
Оптимизации поисковой выдачи Яндекса / Иван Хватов, Сергей Ляджин (Яндекс)Оптимизации поисковой выдачи Яндекса / Иван Хватов, Сергей Ляджин (Яндекс)
Оптимизации поисковой выдачи Яндекса / Иван Хватов, Сергей Ляджин (Яндекс)
Ontico
 

What's hot (15)

DDOS mitigation software solutions
DDOS mitigation software solutionsDDOS mitigation software solutions
DDOS mitigation software solutions
 
FlexVPN
FlexVPNFlexVPN
FlexVPN
 
Обратная разработка бинарных форматов с помощью Kaitai Struct
Обратная разработка бинарных форматов с помощью Kaitai StructОбратная разработка бинарных форматов с помощью Kaitai Struct
Обратная разработка бинарных форматов с помощью Kaitai Struct
 
Сокеты
СокетыСокеты
Сокеты
 
Get inside stage2 new
Get inside stage2 newGet inside stage2 new
Get inside stage2 new
 
Performance optimization of virtual network infrastructure (RUS, OpenStack Me...
Performance optimization of virtual network infrastructure (RUS, OpenStack Me...Performance optimization of virtual network infrastructure (RUS, OpenStack Me...
Performance optimization of virtual network infrastructure (RUS, OpenStack Me...
 
IBM FlexSystem Chassis (October 2013) (RUS)
IBM FlexSystem Chassis (October 2013) (RUS)IBM FlexSystem Chassis (October 2013) (RUS)
IBM FlexSystem Chassis (October 2013) (RUS)
 
More Smoked CTFs для Leet Chicken, пожалуйста!
More Smoked CTFs для Leet Chicken, пожалуйста!More Smoked CTFs для Leet Chicken, пожалуйста!
More Smoked CTFs для Leet Chicken, пожалуйста!
 
Sysoev Freebsd7
Sysoev Freebsd7Sysoev Freebsd7
Sysoev Freebsd7
 
Опенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр ВолковОпенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр Волков
 
Вебинар по криптомаршрутизаторам, 14.12.2016
Вебинар по криптомаршрутизаторам, 14.12.2016Вебинар по криптомаршрутизаторам, 14.12.2016
Вебинар по криптомаршрутизаторам, 14.12.2016
 
Антон Карпов - Обзорная лекция по безопасности
Антон Карпов - Обзорная лекция по безопасностиАнтон Карпов - Обзорная лекция по безопасности
Антон Карпов - Обзорная лекция по безопасности
 
Веб-сервер
Веб-серверВеб-сервер
Веб-сервер
 
Спецификация WSGI (PEP-333)
Спецификация WSGI (PEP-333)Спецификация WSGI (PEP-333)
Спецификация WSGI (PEP-333)
 
Оптимизации поисковой выдачи Яндекса / Иван Хватов, Сергей Ляджин (Яндекс)
Оптимизации поисковой выдачи Яндекса / Иван Хватов, Сергей Ляджин (Яндекс)Оптимизации поисковой выдачи Яндекса / Иван Хватов, Сергей Ляджин (Яндекс)
Оптимизации поисковой выдачи Яндекса / Иван Хватов, Сергей Ляджин (Яндекс)
 

Similar to 20201021 Технополис: Сетевой стек

Технополис: Сетевой стек
Технополис: Сетевой стекТехнополис: Сетевой стек
Технополис: Сетевой стек
Dmitry Samsonov
 
Михаил Белопухов: OpenBSD: Куда катится крипто?
Михаил Белопухов: OpenBSD: Куда катится крипто?Михаил Белопухов: OpenBSD: Куда катится крипто?
Михаил Белопухов: OpenBSD: Куда катится крипто?
Yandex
 
Кадры решают все, или стриминг видео в «Одноклассниках». Александр Тоболь
Кадры решают все, или стриминг видео в «Одноклассниках». Александр ТобольКадры решают все, или стриминг видео в «Одноклассниках». Александр Тоболь
Кадры решают все, или стриминг видео в «Одноклассниках». Александр Тоболь
odnoklassniki.ru
 
Сравнение TCP/IP стека Windows Vista / Server 2008 и Windows XP / Server 2003
Сравнение TCP/IP стека Windows Vista / Server 2008 и Windows XP / Server 2003Сравнение TCP/IP стека Windows Vista / Server 2008 и Windows XP / Server 2003
Сравнение TCP/IP стека Windows Vista / Server 2008 и Windows XP / Server 2003
Andrey Beshkov
 
Архитектура Segment Routing
Архитектура Segment RoutingАрхитектура Segment Routing
Архитектура Segment Routing
Cisco Russia
 
Анатомия WebRTC
Анатомия WebRTCАнатомия WebRTC
Анатомия WebRTC
Vasilii Vasilev
 
стриминг видео на ок
стриминг видео на окстриминг видео на ок
стриминг видео на ок
Alexander Tobol
 
МАИ, Сети ЭВМ, Лекция №2
МАИ, Сети ЭВМ, Лекция №2МАИ, Сети ЭВМ, Лекция №2
МАИ, Сети ЭВМ, Лекция №2
Dima Dzuba
 
Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)
Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)
Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)
Ontico
 
ETegro: решения для ЦОД
ETegro: решения для ЦОДETegro: решения для ЦОД
ETegro: решения для ЦОД
Mirantis IT Russia
 
Организация защищенной распределенной сети. Примеры использования решений С-Т...
Организация защищенной распределенной сети. Примеры использования решений С-Т...Организация защищенной распределенной сети. Примеры использования решений С-Т...
Организация защищенной распределенной сети. Примеры использования решений С-Т...
Дмитрий Гоголев
 
"Организация защищенной распределенной сети. Примеры использования решений С-...
"Организация защищенной распределенной сети. Примеры использования решений С-..."Организация защищенной распределенной сети. Примеры использования решений С-...
"Организация защищенной распределенной сети. Примеры использования решений С-...
ИЦ РЕГИОНАЛЬНЫЕ СИСТЕМЫ
 
Rc uskov
Rc uskovRc uskov
Rc uskov
QratorLabs
 
RootConf 2015
RootConf 2015RootConf 2015
RootConf 2015
Evgeny Uskov
 
Сетевая диагностика: новый взгляд сквозь старые щели / Евгений Усков (Qrator ...
Сетевая диагностика: новый взгляд сквозь старые щели / Евгений Усков (Qrator ...Сетевая диагностика: новый взгляд сквозь старые щели / Евгений Усков (Qrator ...
Сетевая диагностика: новый взгляд сквозь старые щели / Евгений Усков (Qrator ...
Ontico
 
Основные уязвимости и методы защиты оборудования и ПО видеоконференцсвязи
Основные уязвимости и методы защиты оборудования и ПО видеоконференцсвязиОсновные уязвимости и методы защиты оборудования и ПО видеоконференцсвязи
Основные уязвимости и методы защиты оборудования и ПО видеоконференцсвязи
Cisco Russia
 
Развитие семейства коммутаторов для ЦОД Cisco Nexus 7000
Развитие семейства коммутаторов для ЦОД Cisco Nexus 7000 Развитие семейства коммутаторов для ЦОД Cisco Nexus 7000
Развитие семейства коммутаторов для ЦОД Cisco Nexus 7000 Cisco Russia
 
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchip
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchipРазработка OpenFlow-коммутатора на базе сетевого процессора EZchip
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchip
ARCCN
 
High performance computing принципы проектирования сети
High performance computing принципы проектирования сетиHigh performance computing принципы проектирования сети
High performance computing принципы проектирования сетиMUK Extreme
 
Инфрраструктура ЦОД - интерконнект от Qlogik
Инфрраструктура ЦОД - интерконнект от QlogikИнфрраструктура ЦОД - интерконнект от Qlogik
Инфрраструктура ЦОД - интерконнект от Qlogik
Expolink
 

Similar to 20201021 Технополис: Сетевой стек (20)

Технополис: Сетевой стек
Технополис: Сетевой стекТехнополис: Сетевой стек
Технополис: Сетевой стек
 
Михаил Белопухов: OpenBSD: Куда катится крипто?
Михаил Белопухов: OpenBSD: Куда катится крипто?Михаил Белопухов: OpenBSD: Куда катится крипто?
Михаил Белопухов: OpenBSD: Куда катится крипто?
 
Кадры решают все, или стриминг видео в «Одноклассниках». Александр Тоболь
Кадры решают все, или стриминг видео в «Одноклассниках». Александр ТобольКадры решают все, или стриминг видео в «Одноклассниках». Александр Тоболь
Кадры решают все, или стриминг видео в «Одноклассниках». Александр Тоболь
 
Сравнение TCP/IP стека Windows Vista / Server 2008 и Windows XP / Server 2003
Сравнение TCP/IP стека Windows Vista / Server 2008 и Windows XP / Server 2003Сравнение TCP/IP стека Windows Vista / Server 2008 и Windows XP / Server 2003
Сравнение TCP/IP стека Windows Vista / Server 2008 и Windows XP / Server 2003
 
Архитектура Segment Routing
Архитектура Segment RoutingАрхитектура Segment Routing
Архитектура Segment Routing
 
Анатомия WebRTC
Анатомия WebRTCАнатомия WebRTC
Анатомия WebRTC
 
стриминг видео на ок
стриминг видео на окстриминг видео на ок
стриминг видео на ок
 
МАИ, Сети ЭВМ, Лекция №2
МАИ, Сети ЭВМ, Лекция №2МАИ, Сети ЭВМ, Лекция №2
МАИ, Сети ЭВМ, Лекция №2
 
Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)
Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)
Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)
 
ETegro: решения для ЦОД
ETegro: решения для ЦОДETegro: решения для ЦОД
ETegro: решения для ЦОД
 
Организация защищенной распределенной сети. Примеры использования решений С-Т...
Организация защищенной распределенной сети. Примеры использования решений С-Т...Организация защищенной распределенной сети. Примеры использования решений С-Т...
Организация защищенной распределенной сети. Примеры использования решений С-Т...
 
"Организация защищенной распределенной сети. Примеры использования решений С-...
"Организация защищенной распределенной сети. Примеры использования решений С-..."Организация защищенной распределенной сети. Примеры использования решений С-...
"Организация защищенной распределенной сети. Примеры использования решений С-...
 
Rc uskov
Rc uskovRc uskov
Rc uskov
 
RootConf 2015
RootConf 2015RootConf 2015
RootConf 2015
 
Сетевая диагностика: новый взгляд сквозь старые щели / Евгений Усков (Qrator ...
Сетевая диагностика: новый взгляд сквозь старые щели / Евгений Усков (Qrator ...Сетевая диагностика: новый взгляд сквозь старые щели / Евгений Усков (Qrator ...
Сетевая диагностика: новый взгляд сквозь старые щели / Евгений Усков (Qrator ...
 
Основные уязвимости и методы защиты оборудования и ПО видеоконференцсвязи
Основные уязвимости и методы защиты оборудования и ПО видеоконференцсвязиОсновные уязвимости и методы защиты оборудования и ПО видеоконференцсвязи
Основные уязвимости и методы защиты оборудования и ПО видеоконференцсвязи
 
Развитие семейства коммутаторов для ЦОД Cisco Nexus 7000
Развитие семейства коммутаторов для ЦОД Cisco Nexus 7000 Развитие семейства коммутаторов для ЦОД Cisco Nexus 7000
Развитие семейства коммутаторов для ЦОД Cisco Nexus 7000
 
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchip
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchipРазработка OpenFlow-коммутатора на базе сетевого процессора EZchip
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchip
 
High performance computing принципы проектирования сети
High performance computing принципы проектирования сетиHigh performance computing принципы проектирования сети
High performance computing принципы проектирования сети
 
Инфрраструктура ЦОД - интерконнект от Qlogik
Инфрраструктура ЦОД - интерконнект от QlogikИнфрраструктура ЦОД - интерконнект от Qlogik
Инфрраструктура ЦОД - интерконнект от Qlogik
 

20201021 Технополис: Сетевой стек

  • 2. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS 2
  • 3. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS 3
  • 5. Модель OSI 5 DATA DATA DATA DATA DATA DATA DATA7 GET / HTTP/1.1 / HTTP/1.1 200 OK 6 Content-Type 5 IP:PORT 4 SRC/DST Port 3 SRC/DST IP 2 SRC/DST MAC 1 TCP IP TCP IP TCP IP TCP Ethernet frame Ethernet packet HTTP соединение через SOCKS туннель SOC KS MIME Ethernet frame SOC KS SOC KS SOC KS SOC KS MIME MIME MIME MIME MIME
  • 8. Layer 5 Named pipe NetBIOS PPTP SOCKS SPDY (deprecated) 8DATA SOC KS MIME
  • 9. OSI model vs Internel protocol suite 9
  • 10. OSI model vs Internel protocol suite 10 “… Thus, in the OSI model, SSL/TLS must be in layer 6 or 7, and, at the same time, in layer 4 or below. The conclusion is unescapable: the OSI model does not work with SSL/TLS. TLS is not in any layer…” https://security.stackexchange.com/questions/93333/what-layer-is-tls
  • 11. Layer 4 UDP ● DNS ● SNMP ● SYSLOG ● DHCP ● NTP ● VPN 11DATATCP SOC KS MIME
  • 12. Layer 4 TCP ● FTP ● SSH ● TELNET ● SMTP ● HTTP ● IMAP 12DATATCP SOC KS MIME
  • 13. UDP vs TCP 13 UDP TCP Данные могут теряться Гарантия доставки Порядок пакетов может перемешиваться Гарантия сохранения последовательности Мало проверок Много проверок Максимальный объём данных - 1 пакет Максимальный объём данных - любой
  • 15. IP static routing 15DATAIP TCP SOC KS MIME
  • 16. IP static routing 16DATAIP TCP SOC KS MIME Destination Gateway Genmask Iface 0.0.0.0 172.16.1.1 0.0.0.0 eth0 172.16.1.0 0.0.0.0 255.255.255.0 eth0 Destination Gateway Genmask Iface 0.0.0.0 172.16.1.1 0.0.0.0 eth0 172.16.1.0 0.0.0.0 255.255.255.0 eth0 netstat -r ip route
  • 17. IP static routing 17DATAIP TCP SOC KS MIME Destination Gateway Genmask Iface 0.0.0.0 172.16.1.1 0.0.0.0 eth0 172.16.1.0 0.0.0.0 255.255.255.0 eth0
  • 18. IP static routing 18DATAIP TCP SOC KS MIME Destination Gateway Genmask Iface 0.0.0.0 172.16.1.1 0.0.0.0 eth0 172.16.1.0 0.0.0.0 255.255.255.0 eth0
  • 19. IP static routing 19DATAIP TCP SOC KS MIME Destination Gateway Genmask Iface 0.0.0.0 172.16.1.1 0.0.0.0 eth0 172.16.1.0 0.0.0.0 255.255.255.0 eth0
  • 20. IP static routing 20DATAIP TCP SOC KS MIME Destination Gateway Genmask Iface 0.0.0.0 172.16.1.1 0.0.0.0 eth0 172.16.1.0 0.0.0.0 255.255.255.0 eth0
  • 21. IP static routing 21DATAIP TCP SOC KS MIME Destination Gateway Genmask Iface 0.0.0.0 172.16.1.1 0.0.0.0 eth0 172.16.1.0 0.0.0.0 255.255.255.0 eth0 Destination Gateway Genmask Iface 0.0.0.0 172.16.1.1 0.0.0.0 eth0 172.16.1.0 0.0.0.0 255.255.255.0 eth0
  • 22. IP static routing 22DATAIP TCP SOC KS MIME
  • 23. IP static routing 23DATAIP TCP SOC KS MIME ?
  • 24. IP static routing 24DATAIP TCP SOC KS MIME ROUTER A Destination Gateway Genmask Iface 0.0.0.0 192.168.168.1 0.0.0.0 eth2 172.16.3.0 0.0.0.0 255.255.255.0 eth0 172.16.2.0 0.0.0.0 255.255.255.0 eth1 192.168.168.0 0.0.0.0 255.255.255.0 eth2 Destination Gateway Genmask Iface 0.0.0.0 172.16.3.1 0.0.0.0 eth0 172.16.3.0 0.0.0.0 255.255.255.0 eth0 172.16.1.0 0.0.0.0 255.255.255.0 eth1 ROUTER B
  • 25. IP static routing 25DATAIP TCP SOC KS MIME ROUTER A Destination Gateway Genmask Iface 0.0.0.0 192.168.168.1 0.0.0.0 eth2 172.16.3.0 0.0.0.0 255.255.255.0 eth0 172.16.2.0 0.0.0.0 255.255.255.0 eth1 192.168.168.0 0.0.0.0 255.255.255.0 eth2 Destination Gateway Genmask Iface 0.0.0.0 172.16.3.1 0.0.0.0 eth0 172.16.3.0 0.0.0.0 255.255.255.0 eth0 172.16.1.0 0.0.0.0 255.255.255.0 eth1 ROUTER B
  • 26. IP static routing 26DATAIP TCP SOC KS MIME ?
  • 27. IP static routing 27DATAIP TCP SOC KS MIME ROUTER A Destination Gateway Genmask Iface 0.0.0.0 192.168.168.1 0.0.0.0 eth2 172.16.3.0 0.0.0.0 255.255.255.0 eth0 172.16.2.0 0.0.0.0 255.255.255.0 eth1 192.168.168.0 0.0.0.0 255.255.255.0 eth2 Destination Gateway Genmask Iface 0.0.0.0 172.16.3.1 0.0.0.0 eth0 172.16.3.0 0.0.0.0 255.255.255.0 eth0 172.16.1.0 0.0.0.0 255.255.255.0 eth1 ROUTER B
  • 28. IP static routing 28DATAIP TCP SOC KS MIME ROUTER A Destination Gateway Genmask Iface 0.0.0.0 192.168.168.1 0.0.0.0 eth2 172.16.3.0 0.0.0.0 255.255.255.0 eth0 172.16.2.0 0.0.0.0 255.255.255.0 eth1 192.168.168.0 0.0.0.0 255.255.255.0 eth2 172.16.1.0 172.16.3.2 255.255.255.0 eth0 Destination Gateway Genmask Iface 0.0.0.0 172.16.3.1 0.0.0.0 eth0 172.16.3.0 0.0.0.0 255.255.255.0 eth0 172.16.1.0 0.0.0.0 255.255.255.0 eth1 ROUTER B
  • 29. IP dynamic routing 29DATAIP TCP SOC KS MIME OSPF
  • 30. IP dynamic routing 30DATAIP TCP SOC KS MIME BGP
  • 31. IP dynamic routing 31DATAIP TCP SOC KS MIME BGP AS PATH
  • 32. IP dynamic routing 32DATAIP TCP SOC KS MIME BGP AS PATH Короче - быстрее
  • 33. IP dynamic routing 33DATAIP TCP SOC KS MIME Static routes - Offline navigation Dynamic routes - Online navigation
  • 35. Layer 2 35DATAIP TCPEthernet frame SOC KS MIME ip address ifconfig ipconfig
  • 36. Destination Gateway Genmask Iface 0.0.0.0 172.16.1.1 0.0.0.0 eth0 172.16.1.0 0.0.0.0 255.255.255.0 eth0 PACKET HEADER: SRC: 172.16.1.1 DST: 192.168.1.1 SRC MAC: AA:AA:AA:AA:AA:AA DST MAC: ? Layer 2 36DATAIP TCPEthernet frame SOC KS MIME 192.168.1.1
  • 37. Layer 2 37DATAIP TCPEthernet frame SOC KS MIME
  • 38. Destination Gateway Genmask Iface 0.0.0.0 172.16.1.1 0.0.0.0 eth0 172.16.1.0 0.0.0.0 255.255.255.0 eth0 PACKET HEADER: SRC: 172.16.1.1 DST: 192.168.1.1 SRC MAC: AA:AA:AA:AA:AA:AA DST MAC: ? Layer 2 38DATAIP TCPEthernet frame SOC KS MIME 192.168.1.1
  • 39. Layer 2 ARP 39DATAIP TCPEthernet frame # arp -an 141.23.56.23 at a4:6e:f4:59:83:ab on eth1 SOC KS MIME
  • 40. Destination Gateway Genmask Iface 0.0.0.0 172.16.1.1 0.0.0.0 eth0 172.16.1.0 0.0.0.0 255.255.255.0 eth0 PACKET HEADER: SRC: 172.16.1.1 DST: 192.168.1.1 SRC MAC: AA:AA:AA:AA:AA:AA DST MAC: BB:BB:BB:BB:BB:BB Layer 2 40DATAIP TCPEthernet frame SOC KS MIME
  • 41. Destination Gateway Genmask Iface 0.0.0.0 172.16.1.1 0.0.0.0 eth0 172.16.1.0 0.0.0.0 255.255.255.0 eth0 PACKET HEADER: SRC: 172.16.1.1 DST: 192.168.1.1 SRC MAC: AA:AA:AA:AA:AA:AA DST MAC: BB:BB:BB:BB:BB:BB Layer 2 41DATAIP TCPEthernet frame SOC KS MIME
  • 42. Destination Gateway Genmask Iface 0.0.0.0 172.16.1.1 0.0.0.0 eth0 172.16.1.0 0.0.0.0 255.255.255.0 eth0 PACKET HEADER: SRC: 172.16.1.1 DST: 192.168.1.1 SRC MAC: ? DST MAC: ? Layer 2 42DATAIP TCPEthernet frame SOC KS MIME
  • 43. Destination Gateway Genmask Iface 0.0.0.0 172.16.1.1 0.0.0.0 eth0 172.16.1.0 0.0.0.0 255.255.255.0 eth0 PACKET HEADER: SRC: 172.16.1.1 DST: 192.168.1.1 SRC MAC: CC:CC:CC:CC:CC:CC DST MAC: DD:DD:DD:DD:DD:DD Layer 2 43DATAIP TCPEthernet frame SOC KS MIME
  • 44. https://ok.ru Запрос от клиента (1.1.1.2): 1. Dns » IP Ok.ru » 5.61.23.11 44
  • 45. https://ok.ru Запрос от клиента (1.1.1.2): 1. Dns » IP Ok.ru » 5.61.23.11 2. IP » route 5.61.23.11 » 1.1.1.1 (default gw) 45
  • 46. https://ok.ru Запрос от клиента (1.1.1.2): 1. Dns » IP Ok.ru » 5.61.23.11 2. IP » route 5.61.23.11 » 1.1.1.1 (default gw) 3. Route IP » MAC 1.1.1.1 » ff:de:fb:1a:94:41 46
  • 47. https://ok.ru Запрос от клиента (1.1.1.2): 1. Dns » IP Ok.ru » 5.61.23.11 2. IP » route 5.61.23.11 » 1.1.1.1 (default gw) 3. Route IP » MAC 1.1.1.1 » ff:de:fb:1a:94:41 47 На каждом маршрутизаторе
  • 48. https://ok.ru Запрос от клиента (1.1.1.2): 1. Dns » IP Ok.ru » 5.61.23.11 2. IP » route 5.61.23.11 » 1.1.1.1 (default gw) 3. Route IP » MAC 1.1.1.1 » ff:de:fb:1a:94:41 Ответ от сервера (5.61.23.11): 1. IP » route 1.1.1.2 » 5.61.23.1 (default gw) 2. Route IP » MAC 5.61.23.1 » ff:00:0c:9f:f0:25 48
  • 50. Layer 2 50DATAIP TCPEthernet frame Bond failover Bond load-balancing SOC KS MIME
  • 51. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS 51
  • 52. Сетевая карта (NIC) Что умеют сетевые карты? ethtool -k eth0 - offload CPU work to NIC TSO, GSO, GRO... 52
  • 53. Сетевая карта (NIC) Что умеют сетевые карты? ethtool -s eth0 - ethernet speed auto, 10, 100, 1000... 53
  • 54. Сетевая карта (NIC) Что умеют сетевые карты? ethtool -a eth0 - ethernet flow control Свитч/NIC могут отправить друг-другу pause frame, если ring buffer заполнен и новые данные не могут быть приняты. В этом случае вторая сторона может попытаться временно сохранить пакет у себя в буффере. 54
  • 55. Сетевая карта (NIC) Что умеют сетевые карты? ethtool -c eth0 - interrupt coalescing Частота hw interrupt. 55
  • 56. Сетевая карта (NIC) Что умеют сетевые карты? ethtool -g eth0 - ring buffer size 56
  • 57. Сетевая карта (NIC) Что умеют сетевые карты? ethtool -n eth0 - RSS hash settings and NIC “firewall” Позволяет фильтровать трафик на уровне NIC, не задействуя CPU. 57
  • 58. Сетевая карта (NIC) Что умеют сетевые карты? ethtool -l eth0 - multiqueue Количество очередей. 58
  • 59. Сетевая карта (NIC) Что умеют сетевые карты? ethtool -x eth0 - receive flow hash indirection table. Можно отправлять полученные пакеты не во все очереди (и соответственно ядра процессора) или отправлять разное количество пакетов в разные очереди. 59
  • 60. Сетевая карта (NIC) Что умеют сетевые карты? ethtool --show-priv-flags eth0 - manufacturer specific settings Всё что выходит за рамки стандартного функционала сетевых карт. 60
  • 61. Сетевая карта (NIC) Что умеют сетевые карты? ethtool -m eth0 - port module specific settings. Настройки и статистика модульного порта сетевой карты (SFP+, QSFP). 61
  • 62. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS 62
  • 64. Сетевой стек Linux Что умеет сетевой стек Linux? 64
  • 65. Сетевой стек Linux Что умеет сетевой стек Linux? Много всего! 65 # uname -r 5.2.7-1.el7.elrepo.x86_64 # sysctl -a | awk '/^net./ && !/(eth|lo|lan|wan|bond)[0-9]*./ {count++} END {print count}' 490
  • 66. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS 66
  • 67. Сетевой стек Linux: пакеты 67 TX Application Socket TX buffer Kernel TX queue (qdisc) NIC Driver TX ring buffer NIC internal buffer RX Application Socket RX buffer [Kernel RX queue (backlog)] NIC Driver RX ring buffer NIC internal buffer
  • 68. Сетевой стек Linux: TX 68 TX Как потыкать палкой Socket TX buffer sysctl net.ipv4.tcp_wmem or SO_SNDBUF Kernel TX queue (qdisc) ip link | grep "qlen.*" or discipline dependent NIC Driver TX ring buffer ethtool -g ethX
  • 69. Сетевой стек Linux: RX 69 RX Как потыкать палкой Socket RX buffer sysctl net.ipv4.tcp_rmem or SO_RCVBUF [Kernel RX queue (backlog)] sysctl net.core.netdev_max_backlog (non- NAPI or RPS) NIC Driver RX ring buffer ethtool -g ethX
  • 70. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS 70
  • 71. Сетевой стек Linux: соединения 71 Что умеют соединения? ● SO_SNDBUF ● SO_RCVBUF
  • 72. Сетевой стек Linux: соединения 72 Что умеют соединения? ● SO_SNDBUF ● SO_RCVBUF ● SO_ACCEPTCONN ● SO_ATTACH_FILTER ● SO_BINDTODEVICE ● SO_BROADCAST ● SO_BSDCOMPAT ● SO_DEBUG ● SO_DETACH_FILTER ● SO_DOMAIN ● SO_DONTROUTE ● SO_ERROR ● SO_KEEPALIVE ● SO_LINGER ● SO_MARK ● SO_OOBINLINE ● SO_PASSCRED ● SO_PEEK_OFF ● SO_PEERCRED ● SO_PRIORITY ● SO_PROTOCOL ● SO_RCVBUFFORCE ● SO_RCVLOWAT ● SO_RCVTIMEO ● SO_REUSEADDR ● SO_REUSEPORT ● SO_SNDBUFFORCE ● SO_SNDLOWAT ● SO_SNDTIMEO ● SO_TIMESTAMP ● SO_TYPE ● TCP_CA_NAME_MAX ● TCP_CONGESTION ● TCP_CORK ● TCP_DEFER_ACCEPT ● TCP_INFO ● TCP_KEEPCNT ● TCP_KEEPIDLE ● TCP_KEEPINTVL ● TCP_LINGER2 ● TCP_MAXSEG ● TCP_NODELAY ● TCP_QUICKACK ● TCP_SYNCNT ● TCP_SYNQ_HSIZE ● TCP_USER_TIMEOUT ● TCP_WINDOW_CLAMP
  • 73. Сетевой стек Linux: соединения 73 Что умеют соединения? ● SO_KEEPALIVE - поддерживать соединение открытым, отсылая keepalive пакеты (в Linux по умолчанию 2 часа!) ● SO_REUSEADDR (net.ipv4.tcp_tw_reuse) - переиспользовать TIME_WAIT соединения (меньше шансов, что закончаться доступные сокеты) ● SO_REUSEPORT - разрешить слушать порт нескольким процессам/тридам (быстрое открытие входящих соединений) ● TCP_CORK - отсылать данные пачками (увеличивает throughput, для малоактивных соединений, выключать или использовать вместе с TCP_QUICKACK) ● TCP_NODELAY - отсылать данные как можно быстрее (уменьшает latency) ● TCP_DEFER_ACCEPT - не будить приложение, пока не придут реальные данные
  • 74. Сетевой стек Linux: соединения 74 Моё приложение слушает порт и обслуживает соединения! Я всё контролирую!
  • 75. Сетевой стек Linux: соединения 75 Моё приложение слушает порт и обслуживает соединения! Я всё контролирую! Всё делает ядро: ● слушает порт ● устанавливает соединения ● поддерживает tcp keepalive ● закрывает соединения Приложение только отдаёт распоряжения (и то не всегда).
  • 76. Сетевой стек Linux: соединения 76 Лимиты соединений ● net.ipv4.tcp_max_syn_backlog - SYN received, SYNACK sent ● net.core.somaxconn or listen(sockfd,SOMAXCONN) - ACK received, ожидает обработки приложением
  • 79. Сетевой стек Linux 79 Traffic shaping (десятки алгоритмов) Policy routing Firewall (десятки расширений) Bridging TLS (!)
  • 80. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS 80
  • 81. Сетевой стек Linux: User space network stack 81
  • 82. Сетевой стек Linux: User space network stack 82 DPDK Netmap mTCP Snabbswitch OpenOnload
  • 83. Сетевой стек Linux: User space network stack 83 DPDK Netmap mTCP Snabbswitch OpenOnload DPDK L4 Load Balancer by NFWare http://www.highload.ru/2017/abstracts/2858.html
  • 85. Сетевой стек Linux: XDP 85 Устройства не монополизированы: ● Работают стандартные утилиты ● Работают стандартный мониторинг ● Работает стандартно
  • 86. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS 86
  • 91. Терминология: RTT 91 0 - 100ms Respond to a user action within this time window and users feel like the result is immediate. Any longer, and the connection between action and reaction is broken. 100 - 300ms Users experience a slight perceptible delay. 300 - 1000 ms Within this window, things feel part of a natural and continuous progression of tasks. For most users on the web, loading pages or changing views represents a task. 1000+ms Beyond 1 second, the user loses focus on the task they are performing. 10,000+ms The user is frustrated and is likely to abandon the task; they may or may not come back later. https://developers.google.com/web/fundamentals/performance/rail
  • 92. Терминология: RTT 92 3G 4G DNS lookup 200 ms 100 ms TCP handshake 200 ms 100 ms TLS handshake 200–400 ms 100–200 ms HTTP request 200 ms 100 ms Total latency overhead 200–1000 ms 100–500 ms
  • 96. TCP: подтверждение получения каждого пакета 96
  • 97. TCP: пропускная способность 97 С какой максимальной скоростью можно передавать данные через 1 TCP соединение при MTU=1500byte и RTT=20ms?
  • 98. TCP: пропускная способность 98 С какой максимальной скоростью можно передавать данные через 1 TCP соединение при MTU=1500byte и RTT=20ms? throughput=MTU/RTT throughput=1500/20=75byte/ms=75*8*1000/1024/1024=0.57Mbit/s Маловато будет!
  • 99. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS 99
  • 100. TCP: Cumulative acknowledgment 100 192.168.168.15.51480 > 80.249.99.148.80: ack 40565 80.249.99.148.80 > 192.168.168.15.51480: seq 40565:41985 80.249.99.148.80 > 192.168.168.15.51480: seq 41985:43405 80.249.99.148.80 > 192.168.168.15.51480: seq 43405:44825 80.249.99.148.80 > 192.168.168.15.51480: seq 44825:46245 80.249.99.148.80 > 192.168.168.15.51480: seq 46245:47665 192.168.168.15.51480 > 80.249.99.148.80: ack 47665 Sequence number Cumulative acknowledgment
  • 101. TCP: Cumulative acknowledgment 101 192.168.168.15.51480 > 80.249.99.148.80: ack 40565 80.249.99.148.80 > 192.168.168.15.51480: seq 40565:41985 80.249.99.148.80 > 192.168.168.15.51480: seq 41985:43405 80.249.99.148.80 > 192.168.168.15.51480: seq 43405:44825 80.249.99.148.80 > 192.168.168.15.51480: seq 44825:46245 80.249.99.148.80 > 192.168.168.15.51480: seq 46245:47665
  • 102. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS 102
  • 103. TCP: Selective acknowledgment and retransmit 103 192.168.168.15.51480 > 80.249.99.148.80: ack 40565 80.249.99.148.80 > 192.168.168.15.51480: seq 40565:41985 80.249.99.148.80 > 192.168.168.15.51480: seq 41985:43405 80.249.99.148.80 > 192.168.168.15.51480: seq 43405:44825 80.249.99.148.80 > 192.168.168.15.51480: seq 44825:46245 80.249.99.148.80 > 192.168.168.15.51480: seq 46245:47665 192.168.168.15.51480 > 80.249.99.148.80: ack 40565, options [sack 1 {41985:40565}] 80.249.99.148.80 > 192.168.168.15.51480: seq 40565:41985 Selective acknowledgment Retransmit
  • 104. TCP: Bandwidth-delay product 104 Bandwidth-delay product - количество битов информации, получение которых ещё не подтверждено. Нужно ли ограничивать?
  • 105. TCP: Bandwidth-delay product 105 С какой максимальной скоростью можно передавать данные через 1 TCP соединение при Bandwidth=1Gbit/s?
  • 106. TCP: Bandwidth-delay product 106 С какой максимальной скоростью можно получать данные через 1 TCP соединение при Bandwidth=1Gbit/s?
  • 107. TCP: Bufferbloat 107 Больше BDP » больше queue » больше latency » больше packet drop » больше retransmit » меньше throughput Packet queue (Bufferbloat) Gateway Server Client
  • 108. TCP: Bandwidth-delay product 108 С какой максимальной скоростью можно принимать/отправлять данные через 1 TCP соединение при Bandwidth=1Gbit/s? Со скоростью самого медленного участка пути.
  • 109. Сетевой стек Linux: пакеты 109 TX Application Socket TX buffer Kernel TX queue (qdisc) NIC Driver TX ring buffer NIC internal buffer RX Application Socket RX buffer [Kernel RX queue (backlog)] NIC Driver RX ring buffer NIC internal buffer
  • 110. TCP: Flow control 110 Сколько данных можно отправить, чтобы принимающее приложение не захлебнулось и не переполнились буферы? Хватает ли ресурсов приложению на принимающей стороне? Не занято ли приложение чем-то другим?
  • 111. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS 111
  • 112. Сетевой стек Linux: пакеты 112 TX Application Socket TX buffer Kernel TX queue (qdisc) NIC Driver TX ring buffer NIC internal buffer RX Application Socket RX buffer [Kernel RX queue (backlog)] NIC Driver RX ring buffer NIC internal buffer
  • 113. TCP: Flow control: TCP Window 113 min( free space in client socket buffer - in flight traffic, free space in server socket buffer)
  • 114. TCP: Flow control: TCP Window 114 "640K ought to be enough for anybody" ©
  • 115. TCP: Flow control: TCP Window 115 С какой максимальной скоростью можно передавать данные через 1 TCP соединение при BDP=65KB, RTT=20ms, Bandwidth=1Gbit/s? throughput=BDP/RTT throughput=65/0.02=3250KB/s=3250*8/1024=25Mbit/s Маловато будет!
  • 116. TCP: Flow control: TCP Window scaling 116 Windows scale TCP option max 2^14 Window size = win * 2^window scale Maximal window = 1GB
  • 117. TCP: Congestion control 117 Application Socket buffer Kernel queue NIC Driver ring buffer NIC internal buffer Почему пропадают пакеты? Почему растёт latency? Где bufferbloat? На сколько нам снизить скорость отсылки данных? Как узнать, что скорость можно увеличить опять? Packet queue (Bufferbloat) Gateway1 Gateway3 Server Gateway2 Client
  • 118. TCP: Congestion control 118 Почему у меня тормозит habrahabr.ru, когда я качаю легальный контент через торренты? Почему у меня тормозит torrent по WiFi из спальни?
  • 119. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS 119
  • 120. TCP: Congestion avoidance algorithms 120 Входные данные: ● Latency ● Loss Если пакеты теряются и latency растёт, то возможно надо снизить скорость передачи.
  • 121. TCP: Congestion avoidance algorithms 121 Входные данные: ● Latency ● Loss Если пакеты теряются и latency растёт, то возможно надо снизить скорость передачи. А может и нет.
  • 122. TCP: Congestion avoidance algorithms 122 TCP Tahoe and Reno TCP Vegas TCP New Reno TCP Hybla TCP BIC TCP CUBIC Agile-SD TCP TCP Westwood+ Compound TCP TCP Proportional Rate Reduction TCP BBR FAST TCP Generalized FAST TCP H-TCP Data Center TCP High Speed TCP HSTCP-LP TCP-Illinois TCP-LP TCP SACK Scalable TCP TCP Veno Westwood XCP YeAH-TCP TCP-FIT
  • 123. TCP: Congestion avoidance algorithms: BBR 123
  • 124. TCP: To Buffer or not to Buffer 124 Зачем? ● Для пакетной обработки ● Для сглаживания нагрузки Сколько? ● Не обрабатывать столько времени, сколько вы можете ждать. Throughput vs Latency Когда? ● Слишком дорого обрабатывать по одному ● Чтобы избежать блокировок
  • 128. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS 128
  • 130. DNS: виды записей 130 ● A ● CNAME - games.ok.ru » www.ok.ru ● NS - авторитативные сервера зоны (домена) ● MX - почтовые адреса домена @ 3600 SOA ns1.odnoklassniki.ru. hostmaster.odnoklassniki.ru. 2016090700 10800 1800 2419200 3600 @ 3600 NS ns1.odnoklassniki.ru. @ 3600 NS ns2.odnoklassniki.ru. @ 3600 NS ns3.odnoklassniki.ru. @ 3600 NS ns4.odnoklassniki.ru. @ 3600 A 5.61.236.151 www 3600 CNAME apiok.ru
  • 131. DNS: RTT 131 # host games.ok.ru games.ok.ru is an alias for www.ok.ru. www.ok.ru has address 5.61.23.11 www.ok.ru has address 217.20.147.1 www.ok.ru has address 217.20.155.13
  • 132. DNS: Global Server Load Balancing 132
  • 133. DNS: Global Server Load Balancing 133 А если клиент использует Google DNS 8.8.8.8?
  • 134. DNS: EDNS 134 Псевдо-запись типа OPT, которой нет в зоне и которая существует только в DNS пакетах участников обмена данными. Примеры использования: ● DNSSEC: EDNS header flag “DO” ● GSLB DNS: EDNS Option “edns-client-subnet”
  • 136. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS 136
  • 137. HTTP 137 # curl -v go.com > GET / HTTP/1.1 > Host: go.com > User-Agent: curl/7.47.0 > Accept: */* > < HTTP/1.1 200 OK < Date: Wed, 11 Oct 2017 14:40:39 GMT < Content-Type: text/html;charset=utf-8 < Content-Length: 1341159 { [2484 bytes data] <!DOCTYPE html> <html class="no-js" version="HTML+RDFa 1.1" lang="en">
  • 139. HTTP 139 Как ускорить? ● Keepalive - сокращает количество roundtrip для получения каждого файла. ● HTTP 2 - параллельное получение файлов [и push].
  • 140. HTTP: HTTP 2 Multiplexing 140
  • 141. HTTP: HTTP 2 Push 141
  • 142. HTTP 142 < HTTP/1.1 200 OK < Server: Apache < Date: Wed, 11 Oct 2017 15:18:56 GMT < Content-Type: text/html;charset=UTF-8 < Transfer-Encoding: chunked < Connection: keep-alive < Vary: Accept-Encoding < Set-Cookie: bci=-6985998813908368544; Domain=.ok.ru; Expires=Mon, 29-Oct-2085 18:33:03 GMT; Path=/; HttpOnly < Content-Security-Policy: default-src data: 'self' 'unsafe-inline' 'unsafe-eval' ok.ru *.ok.ru ... < Content-Security-Policy-Report-Only: default-src data: blob: about: 'self' 'unsafe-inline' 'unsafe-eval' https: wss:; report-uri /csp/report?always; < Cache-Control: no-cache < Cache-Control: no-store < Pragma: no-cache < Expires: Mon, 26 Jul 1997 05:00:00 GMT < X-XSS-Protection: 1; mode=block < X-Content-Type-Options: nosniff < Strict-Transport-Security: max-age=2592000;includeSubdomains < Rendered-Blocks: HtmlPage < X-ScT: true < X-FRAME-OPTIONS: SAMEORIGIN
  • 143. HTTP: WebSocket 143 TCP соединение, которое устанавливается с вебсервером, при этом после установки внутри соединения могут ходить данные любого вида в обоих направлениях - никакого оверхеда связанного с HTTP протоколом нет.
  • 144. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS 144
  • 146. HTTPS: Handshake 146 ● Долго для клиента ● Тяжело для серверного CPU
  • 148. HTTPS: Handshake: Elliptic curve certificate 148 ECDSA ● быстрее/легче ● Не все поддерживают Nginx умеет работать сразу с 2 сертификатами.
  • 149. HTTPS: Handshake: TLS ticket 149
  • 150. HTTPS: Handshake: TLS ticket 150
  • 151. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS 151
  • 152. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS ● QUIC 152
  • 155. UDP 155 Туннелирование (VPN) Сколько RTT надо для установки TCP соединения внутри TCP туннеля? Сколько RTT надо для пересылки пакета, если первый раз он пропал?
  • 156. Quic 156 TLS handshake TLS ticket “TFO” Congestion control Multiplexed connections Speculative retransmission Compression Fallback to TCP
  • 158. TCP 158 TCP handshake = 1.5 RTT TLS handshake = 2 RTT
  • 159. Quic 159 TCP handshake = 1.5 RTT TLS handshake = 2 RTT
  • 160. Quic 160 TCP handshake = 1.5 RTT TLS handshake = 2 RTT Первое подключение: RTT=1 Повторное подключение: RTT=0
  • 162. Quic 162 Было Стало Что Кто Сколько Что Кто Сколько SPDY (deprecated) Google 7% в 2016 HTTP/2 IETF, Google 49% из ТОП 10М в Августе 2020 QUIC Google 4.2% в Апреле 2020 HTTP/3 (HTTP over QUIC) (draft) IETF, Google 8% из ТОП 10М в Августе 2020
  • 163. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS ● QUIC 163