SlideShare une entreprise Scribd logo
1  sur  158
Télécharger pour lire hors ligne
Сетевой стек
Дмитрий Самсонов
Содержание
● Модель 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
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/LAG/LAG
Vlan
34DATAIP TCPEthernet frame
SOC
KS
MIME
Layer 2
ARP
35DATAIP TCPEthernet frame
# arp -an
141.23.56.23 at
a4:6e:f4:59:83:ab
on eth1
SOC
KS
MIME
Layer 2
VLAN
36DATAIP TCPEthernet frame
SOC
KS
MIME
Layer 2 37DATAIP TCPEthernet frame
Bond
failover
Bond
load-balancing
SOC
KS
MIME
https://ok.ru
Запрос от клиента (1.1.1.2):
1. Dns » IP
Ok.ru » 5.61.23.11
38
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)
39
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
40
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
41
На каждом маршрутизаторе
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
42
Содержание
● Модель OSI
● Сетевая карта (NIC)
● Сетевой стек Linux
○ Пакеты
○ Соединения
○ User-space network stack
● TCP
○ Cumulative acknowledgment
○ Selective acknowledgment
○ Flow control
○ Congestion control
● DNS
● HTTP
● HTTPS
43
Сетевая карта (NIC)
Что умеют сетевые карты?
ethtool -k eth0 - offload CPU work to NIC
TSO, GSO, GRO...
44
Сетевая карта (NIC)
Что умеют сетевые карты?
ethtool -s eth0 - ethernet speed
auto, 10, 100, 1000...
45
Сетевая карта (NIC)
Что умеют сетевые карты?
ethtool -a eth0 - ethernet flow control
Свитч/NIC могут отправить друг-другу pause frame, если ring buffer
заполнен и новые данные не могут быть приняты. В этом случае
вторая сторона может попытаться временно сохранить пакет у себя
в буффере.
46
Сетевая карта (NIC)
Что умеют сетевые карты?
ethtool -c eth0 - interrupt coalescing
Частота hw interrupt.
47
Сетевая карта (NIC)
Что умеют сетевые карты?
ethtool -g eth0 - ring buffer size
48
Сетевая карта (NIC)
Что умеют сетевые карты?
ethtool -n eth0 - RSS hash settings and NIC “firewall”
Позволяет фильтровать трафик на уровне NIC, не задействуя CPU.
49
Сетевая карта (NIC)
Что умеют сетевые карты?
ethtool -l eth0 - multiqueue
Количество очередей.
50
Сетевая карта (NIC)
Что умеют сетевые карты?
ethtool -x eth0 - receive flow hash indirection table.
Можно отправлять полученные пакеты не во все очереди (и
соответственно ядра процессора) или отправлять разное количество
пакетов в разные очереди.
51
Сетевая карта (NIC)
Что умеют сетевые карты?
ethtool --show-priv-flags eth0 - manufacturer specific settings
Всё что выходит за рамки стандартного функционала сетевых карт.
52
Сетевая карта (NIC)
Что умеют сетевые карты?
ethtool -m eth0 - port module specific settings.
Настройки модульного порта сетевой карты (SFP+, QSFP).
53
Содержание
● Модель OSI
● Сетевая карта (NIC)
● Сетевой стек Linux
○ Пакеты
○ Соединения
○ User-space network stack
● TCP
○ Cumulative acknowledgment
○ Selective acknowledgment
○ Flow control
○ Congestion control
● DNS
● HTTP
● HTTPS
54
Сетевой стек Linux 55
Сетевой стек Linux
Что умеет сетевой стек Linux?
56
Сетевой стек Linux
Что умеет сетевой стек Linux?
Много всего!
57
# uname -r
4.12.10-1.el7.elrepo.x86_64
# sysctl -a | awk '/^net./ && !/(eth|lo)[0-9]*./ {count++}
END {print count}'
396
Содержание
● Модель OSI
● Сетевая карта (NIC)
● Сетевой стек Linux
○ Пакеты
○ Соединения
○ User-space network stack
● TCP
○ Cumulative acknowledgment
○ Selective acknowledgment
○ Flow control
○ Congestion control
● DNS
● HTTP
● HTTPS
58
Сетевой стек Linux: пакеты 59
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 60
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 61
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
62
Сетевой стек Linux: соединения 63
Что умеют соединения?
● SO_SNDBUF
● SO_RCVBUF
Сетевой стек Linux: соединения 64
Что умеют соединения?
● 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: соединения 65
Что умеют соединения?
● SO_KEEPALIVE - поддерживать соединение открытым, отсылая
keepalive пакеты (уменьшает latency)
● SO_REUSEADDR (net.ipv4.tcp_tw_reuse) - переиспользовать TIME_WAIT
соединения (меньше шансов, что закончаться доступные сокеты)
● SO_REUSEPORT - разрешить слушать порт нескольким
процессам/тридам (быстрое открытие большого количества соединений)
● TCP_CORK - отсылать данные пачками (увеличивает throughput)
● TCP_NODELAY - отсылать данные как можно быстрее (уменьшает
latency)
● TCP_DEFER_ACCEPT - не будить приложение, пока не придут
реальные данные
Сетевой стек Linux: соединения 66
Моё приложение слушает порт и обслуживает соединения!
Я всё контролирую!
Сетевой стек Linux: соединения 67
Моё приложение слушает порт и обслуживает соединения!
Я всё контролирую!
Всё делает ядро:
● слушает порт
● устанавливает соединения
● поддерживает tcp keepalive
● закрывает соединения
Приложение только отдаёт распоряжения (и то не всегда).
Сетевой стек Linux: соединения 68
Лимиты соединений
● net.ipv4.tcp_max_syn_backlog - SYN received, SYNACK sent
● net.core.somaxconn or listen(sockfd,SOMAXCONN) - ACK received,
ожидает обработки приложением
Сетевой стек Linux 69
И всё?
Сетевой стек Linux 70
Неа
Сетевой стек Linux 71
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
72
Сетевой стек Linux: User space network stack 73
Сетевой стек Linux: User space network stack 74
DPDK
Netmap
mTCP
Snabbswitch
OpenOnload
Сетевой стек Linux: User space network stack 75
DPDK
Netmap
mTCP
Snabbswitch
OpenOnload
DPDK L4 Load Balancer by NFWare
http://www.highload.ru/2017/abstracts/2858.html
Сетевой стек Linux: XDP 76
Сетевой стек Linux: XDP 77
Устройства не монополизированы:
● Работают стандартные утилиты
● Работают стандартный мониторинг
● Работает стандартно
Содержание
● Модель OSI
● Сетевая карта (NIC)
● Сетевой стек Linux
○ Пакеты
○ Соединения
○ User-space network stack
● TCP
○ Cumulative acknowledgment
○ Selective acknowledgment
○ Flow control
○ Congestion control
● DNS
● HTTP
● HTTPS
78
TCP 79
Терминология: RTT 80
Терминология: RTT 81
Терминология: RTT 82
Терминология: RTT 83
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 84
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 85
Терминология: RTT 86
Терминология: MTU, MSS 87
TCP: подтверждение получения каждого пакета 88
TCP: пропускная способность 89
С какой максимальной скоростью можно передавать данные через 1
TCP соединение при MTU=1500byte и RTT=20ms?
TCP: пропускная способность 90
С какой максимальной скоростью можно передавать данные через 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
91
TCP: Cumulative acknowledgment 92
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 93
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
94
TCP: Selective acknowledgment and retransmit 95
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 96
Bandwidth-delay product - количество битов информации, получение
которых ещё не подтверждено.
Нужно ли ограничивать?
TCP: Bandwidth-delay product 97
С какой максимальной скоростью можно передавать данные через 1
TCP соединение при Bandwidth=1Gbit/s?
TCP: Bandwidth-delay product 98
С какой максимальной скоростью можно получать данные через 1 TCP
соединение при Bandwidth=1Gbit/s?
TCP: Bufferbloat 99
Packet queue (Bufferbloat)
Gateway1 Gateway3
Server Gateway2 Client
TCP: Bufferbloat 100
Больше BDP » больше queue » больше latency » больше packet drop »
больше retransmit » меньше throughput
Packet queue (Bufferbloat)
Gateway
Server Client
TCP: Bandwidth-delay product 101
С какой максимальной скоростью можно принимать/отправлять
данные через 1 TCP соединение при Bandwidth=1Gbit/s?
Со скоростью самого медленного участка пути.
Сетевой стек Linux: пакеты 102
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 103
Сколько данных можно отправить, чтобы принимающее приложение
не захлебнулось и не переполнились буферы?
TCP: Flow control 104
Сколько данных можно отправить, чтобы принимающее приложение
не захлебнулось и не переполнились буферы?
Хватает ли ресурсов приложению на принимающей стороне?
TCP: Flow control 105
Сколько данных можно отправить, чтобы принимающее приложение
не захлебнулось и не переполнились буферы?
Хватает ли ресурсов приложению на принимающей стороне?
Не занято ли приложение чем-то другим?
Содержание
● Модель OSI
● Сетевая карта (NIC)
● Сетевой стек Linux
○ Пакеты
○ Соединения
○ User-space network stack
● TCP
○ Cumulative acknowledgment
○ Selective acknowledgment
○ Flow control
○ Congestion control
● DNS
● HTTP
● HTTPS
106
Сетевой стек Linux: пакеты 107
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 108
min( free space in client socket buffer - in flight traffic,
free space in server socket buffer)
TCP: Flow control: TCP Window 109
"640K ought to be enough for anybody" ©
TCP: Flow control: TCP Window 110
С какой максимальной скоростью можно передавать данные через 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 111
Windows scale TCP option max 2^14
Window size = win * 2^window scale
Maximal window = 1GB
TCP: Congestion control 112
Application
Socket buffer
Kernel queue
NIC Driver ring buffer
NIC internal buffer
Почему пропадают пакеты?
Почему растёт latency?
Где bufferbloat?
На сколько нам снизить скорость
отсылки данных?
Как узнать, что скорость можно
увеличить опять?
TCP: Congestion control 113
Почему у меня тормозит habrahabr.ru, когда я качаю легальный контент
через торренты?
Почему у меня тормозит torrent по WiFi из спальни?
Содержание
● Модель OSI
● Сетевая карта (NIC)
● Сетевой стек Linux
○ Пакеты
○ Соединения
○ User-space network stack
● TCP
○ Cumulative acknowledgment
○ Selective acknowledgment
○ Flow control
○ Congestion control
● DNS
● HTTP
● HTTPS
114
TCP: Congestion avoidance algorithms 115
Входные данные:
● Latency
● Loss
Если пакеты теряются и latency растёт, то возможно надо снизить
скорость передачи.
TCP: Congestion avoidance algorithms 116
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 117
Входные данные:
● Latency
● Loss
Если пакеты теряются и latency растёт, то возможно надо снизить
скорость передачи.
А может и нет.
TCP: Congestion avoidance algorithms: BBR 118
TCP: RTT 119
RTT=0?
TCP: TFO 120
RTT=0!
Edge
Chrome
UDP 121
UDP?
Содержание
● Модель OSI
● Сетевая карта (NIC)
● Сетевой стек Linux
○ Пакеты
○ Соединения
○ User-space network stack
● TCP
○ Cumulative acknowledgment
○ Selective acknowledgment
○ Flow control
○ Congestion control
● DNS
● HTTP
● HTTPS
122
DNS: архитектура 123
DNS: виды записей 124
● 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 125
# 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 126
DNS: Global Server Load Balancing 127
А если клиент использует Google DNS 8.8.8.8?
DNS: EDNS 128
Псевдо-запись типа OPT, которой нет в зоне и которая существует
только в DNS пакетах участников обмена данными.
Примеры использования:
● DNSSEC: EDNS header flag “DO”
● GSLB DNS: EDNS Option “edns-client-subnet”
DNS: EDNS edns-client-subnet 129
Содержание
● Модель OSI
● Сетевая карта (NIC)
● Сетевой стек Linux
○ Пакеты
○ Соединения
○ User-space network stack
● TCP
○ Cumulative acknowledgment
○ Selective acknowledgment
○ Flow control
○ Congestion control
● DNS
● HTTP
● HTTPS
130
HTTP 131
# 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 132
HTTP 133
Как ускорить?
● Keepalive - сокращает количество roundtrip для получения каждого
файла.
● HTTP 2 - параллельное получение файлов [и push].
HTTP: HTTP 2 Multiplexing 134
HTTP: HTTP 2 Push 135
HTTP 136
< 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 137
TCP соединение, которое устанавливается с вебсервером, при этом
после установки внутри соединения могут ходить данные любого вида
в обоих направлениях - никакого оверхеда связанного с HTTP
протоколом нет.
Содержание
● Модель OSI
● Сетевая карта (NIC)
● Сетевой стек Linux
○ Пакеты
○ Соединения
○ User-space network stack
● TCP
○ Cumulative acknowledgment
○ Selective acknowledgment
○ Flow control
○ Congestion control
● DNS
● HTTP
● HTTPS
138
HTTPS: Handshake 139
HTTPS: Handshake 140
● Долго для клиента
● Тяжело для серверного CPU
HTTPS: Handshake 141
CPU
HTTPS: Handshake: Elliptic curve certificate 142
ECDSA
● быстрее/легче
● Не все поддерживают
Nginx умеет работать
сразу с 2 сертификатами.
HTTPS: Handshake: TLS ticket 143
HTTPS: Handshake: TLS ticket 144
Содержание
● Модель OSI
● Сетевая карта (NIC)
● Сетевой стек Linux
○ Пакеты
○ Соединения
○ User-space network stack
● TCP
○ Cumulative acknowledgment
○ Selective acknowledgment
○ Flow control
○ Congestion control
● DNS
● HTTP
● HTTPS
145
Содержание
● Модель OSI
● Сетевая карта (NIC)
● Сетевой стек Linux
○ Пакеты
○ Соединения
○ User-space network stack
● TCP
○ Cumulative acknowledgment
○ Selective acknowledgment
○ Flow control
○ Congestion control
● DNS
● HTTP
● HTTPS
● QUIC
146
UDP 147
UDP?
UDP 148
Туннелирование (VPN)
UDP 149
Туннелирование (VPN)
Сколько RTT надо для установки TCP соединения внутри TCP
туннеля?
Сколько RTT надо для пересылки пакета, если первый раз он пропал?
Quic 150
TLS handshake
TLS ticket
“TFO”
Congestion control
Multiplexed connections
Speculative retransmission
Compression
Fallback to TCP
Quic 151
TCP 152
TCP handshake = 1.5 RTT
TLS handshake = 2 RTT
Quic 153
TCP handshake = 1.5 RTT
TLS handshake = 2 RTT
Quic 154
TCP handshake
TLS handshake
Первое подключение: RTT=1
Повторное подключение: RTT=0
Quic 155
RTT = 0!
Содержание
● Модель OSI
● Сетевая карта (NIC)
● Сетевой стек Linux
○ Пакеты
○ Соединения
○ User-space network stack
● TCP
○ Cumulative acknowledgment
○ Selective acknowledgment
○ Flow control
○ Congestion control
● DNS
● HTTP
● HTTPS
● QUIC
156
dmitry.samsonov@corp.mail.ru
157
Спасибо за внимание!
Полезные ссылки
https://www.cubrid.org/blog/understanding-tcp-ip-network-stack
https://blog.packagecloud.io/eng/2016/06/22/monitoring-tuning-linux-netwo
rking-stack-receiving-data/
https://blog.packagecloud.io/eng/2017/02/06/monitoring-tuning-linux-netwo
rking-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
158
dmitry.samsonov@corp.mail.ru

Contenu connexe

Tendances

Обратная разработка бинарных форматов с помощью Kaitai Struct
Обратная разработка бинарных форматов с помощью Kaitai StructОбратная разработка бинарных форматов с помощью Kaitai Struct
Обратная разработка бинарных форматов с помощью Kaitai StructPositive Hack Days
 
Get inside stage2 new
Get inside stage2 newGet inside stage2 new
Get inside stage2 newInfoTeCS
 
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.2016S-Terra CSP
 
Антон Карпов - Обзорная лекция по безопасности
Антон Карпов - Обзорная лекция по безопасностиАнтон Карпов - Обзорная лекция по безопасности
Антон Карпов - Обзорная лекция по безопасностиYandex
 
Вебинар С-Терра по DMVPN, 21.02.2017
Вебинар С-Терра по DMVPN, 21.02.2017Вебинар С-Терра по DMVPN, 21.02.2017
Вебинар С-Терра по DMVPN, 21.02.2017S-Terra CSP
 

Tendances (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)
 
Вебинар С-Терра по DMVPN, 21.02.2017
Вебинар С-Терра по DMVPN, 21.02.2017Вебинар С-Терра по DMVPN, 21.02.2017
Вебинар С-Терра по DMVPN, 21.02.2017
 

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

20201021 Технополис: Сетевой стек
20201021 Технополис: Сетевой стек20201021 Технополис: Сетевой стек
20201021 Технополис: Сетевой стекDmitry Samsonov
 
Алексей Лапаев - Протоколы межкомпонентного взаимодействия
Алексей Лапаев - Протоколы межкомпонентного взаимодействияАлексей Лапаев - Протоколы межкомпонентного взаимодействия
Алексей Лапаев - Протоколы межкомпонентного взаимодействияYandex
 
МАИ, Сети ЭВМ, Лекция №2
МАИ, Сети ЭВМ, Лекция №2МАИ, Сети ЭВМ, Лекция №2
МАИ, Сети ЭВМ, Лекция №2Dima Dzuba
 
Сетевая диагностика: новый взгляд сквозь старые щели / Евгений Усков (Qrator ...
Сетевая диагностика: новый взгляд сквозь старые щели / Евгений Усков (Qrator ...Сетевая диагностика: новый взгляд сквозь старые щели / Евгений Усков (Qrator ...
Сетевая диагностика: новый взгляд сквозь старые щели / Евгений Усков (Qrator ...Ontico
 
Оптимизации поисковой выдачи Яндекса / Иван Хватов, Сергей Ляджин (Яндекс)
Оптимизации поисковой выдачи Яндекса / Иван Хватов, Сергей Ляджин (Яндекс)Оптимизации поисковой выдачи Яндекса / Иван Хватов, Сергей Ляджин (Яндекс)
Оптимизации поисковой выдачи Яндекса / Иван Хватов, Сергей Ляджин (Яндекс)Ontico
 
Архитектура Segment Routing
Архитектура Segment RoutingАрхитектура Segment Routing
Архитектура Segment RoutingCisco Russia
 
Основные уязвимости и методы защиты оборудования и ПО видеоконференцсвязи
Основные уязвимости и методы защиты оборудования и ПО видеоконференцсвязиОсновные уязвимости и методы защиты оборудования и ПО видеоконференцсвязи
Основные уязвимости и методы защиты оборудования и ПО видеоконференцсвязиCisco Russia
 
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)Ontico
 
краткий, неполный и в основном неверный обзор сетевой подсистемы в Windows. а...
краткий, неполный и в основном неверный обзор сетевой подсистемы в Windows. а...краткий, неполный и в основном неверный обзор сетевой подсистемы в Windows. а...
краткий, неполный и в основном неверный обзор сетевой подсистемы в Windows. а...rit2011
 
SDN: Что это? Что оно нам дает и как его использовать
SDN: Что это? Что оно нам дает и как его использоватьSDN: Что это? Что оно нам дает и как его использовать
SDN: Что это? Что оно нам дает и как его использоватьCisco Russia
 
Сравнение 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 2003Andrey Beshkov
 
Инфрраструктура ЦОД - интерконнект от Qlogik
Инфрраструктура ЦОД - интерконнект от QlogikИнфрраструктура ЦОД - интерконнект от Qlogik
Инфрраструктура ЦОД - интерконнект от QlogikExpolink
 
Intel DPDK в решениях для противодействия DDoS-атакам
Intel DPDK в решениях для противодействия DDoS-атакамIntel DPDK в решениях для противодействия DDoS-атакам
Intel DPDK в решениях для противодействия DDoS-атакамГлеб Хохлов
 
Оверлейные сети ЦОД Технологии VXLAN и EVPN
Оверлейные сети ЦОД Технологии VXLAN и EVPN Оверлейные сети ЦОД Технологии VXLAN и EVPN
Оверлейные сети ЦОД Технологии VXLAN и EVPN Cisco Russia
 
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchip
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchipРазработка OpenFlow-коммутатора на базе сетевого процессора EZchip
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchipARCCN
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeIosif Itkin
 
Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...
Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...
Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...Ontico
 
Технология Cisco Instant Access для упрощения структуры кампусных сетей.
Технология Cisco Instant Access для упрощения структуры кампусных сетей. Технология Cisco Instant Access для упрощения структуры кампусных сетей.
Технология Cisco Instant Access для упрощения структуры кампусных сетей. Cisco Russia
 

Similaire à Технополис: Сетевой стек (20)

20201021 Технополис: Сетевой стек
20201021 Технополис: Сетевой стек20201021 Технополис: Сетевой стек
20201021 Технополис: Сетевой стек
 
Алексей Лапаев - Протоколы межкомпонентного взаимодействия
Алексей Лапаев - Протоколы межкомпонентного взаимодействияАлексей Лапаев - Протоколы межкомпонентного взаимодействия
Алексей Лапаев - Протоколы межкомпонентного взаимодействия
 
МАИ, Сети ЭВМ, Лекция №2
МАИ, Сети ЭВМ, Лекция №2МАИ, Сети ЭВМ, Лекция №2
МАИ, Сети ЭВМ, Лекция №2
 
Rc uskov
Rc uskovRc uskov
Rc uskov
 
RootConf 2015
RootConf 2015RootConf 2015
RootConf 2015
 
Сетевая диагностика: новый взгляд сквозь старые щели / Евгений Усков (Qrator ...
Сетевая диагностика: новый взгляд сквозь старые щели / Евгений Усков (Qrator ...Сетевая диагностика: новый взгляд сквозь старые щели / Евгений Усков (Qrator ...
Сетевая диагностика: новый взгляд сквозь старые щели / Евгений Усков (Qrator ...
 
Оптимизации поисковой выдачи Яндекса / Иван Хватов, Сергей Ляджин (Яндекс)
Оптимизации поисковой выдачи Яндекса / Иван Хватов, Сергей Ляджин (Яндекс)Оптимизации поисковой выдачи Яндекса / Иван Хватов, Сергей Ляджин (Яндекс)
Оптимизации поисковой выдачи Яндекса / Иван Хватов, Сергей Ляджин (Яндекс)
 
Архитектура Segment Routing
Архитектура Segment RoutingАрхитектура Segment Routing
Архитектура Segment Routing
 
Основные уязвимости и методы защиты оборудования и ПО видеоконференцсвязи
Основные уязвимости и методы защиты оборудования и ПО видеоконференцсвязиОсновные уязвимости и методы защиты оборудования и ПО видеоконференцсвязи
Основные уязвимости и методы защиты оборудования и ПО видеоконференцсвязи
 
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
 
краткий, неполный и в основном неверный обзор сетевой подсистемы в Windows. а...
краткий, неполный и в основном неверный обзор сетевой подсистемы в Windows. а...краткий, неполный и в основном неверный обзор сетевой подсистемы в Windows. а...
краткий, неполный и в основном неверный обзор сетевой подсистемы в Windows. а...
 
SDN: Что это? Что оно нам дает и как его использовать
SDN: Что это? Что оно нам дает и как его использоватьSDN: Что это? Что оно нам дает и как его использовать
SDN: Что это? Что оно нам дает и как его использовать
 
Сравнение 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
 
Инфрраструктура ЦОД - интерконнект от Qlogik
Инфрраструктура ЦОД - интерконнект от QlogikИнфрраструктура ЦОД - интерконнект от Qlogik
Инфрраструктура ЦОД - интерконнект от Qlogik
 
Intel DPDK в решениях для противодействия DDoS-атакам
Intel DPDK в решениях для противодействия DDoS-атакамIntel DPDK в решениях для противодействия DDoS-атакам
Intel DPDK в решениях для противодействия DDoS-атакам
 
Оверлейные сети ЦОД Технологии VXLAN и EVPN
Оверлейные сети ЦОД Технологии VXLAN и EVPN Оверлейные сети ЦОД Технологии VXLAN и EVPN
Оверлейные сети ЦОД Технологии VXLAN и EVPN
 
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchip
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchipРазработка OpenFlow-коммутатора на базе сетевого процессора EZchip
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchip
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: Genode
 
Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...
Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...
Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...
 
Технология Cisco Instant Access для упрощения структуры кампусных сетей.
Технология Cisco Instant Access для упрощения структуры кампусных сетей. Технология Cisco Instant Access для упрощения структуры кампусных сетей.
Технология Cisco Instant Access для упрощения структуры кампусных сетей.
 

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

  • 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
  • 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 ARP 35DATAIP TCPEthernet frame # arp -an 141.23.56.23 at a4:6e:f4:59:83:ab on eth1 SOC KS MIME
  • 37. Layer 2 37DATAIP TCPEthernet frame Bond failover Bond load-balancing SOC KS MIME
  • 38. https://ok.ru Запрос от клиента (1.1.1.2): 1. Dns » IP Ok.ru » 5.61.23.11 38
  • 39. 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) 39
  • 40. 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 40
  • 41. 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 41 На каждом маршрутизаторе
  • 42. 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 42
  • 43. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS 43
  • 44. Сетевая карта (NIC) Что умеют сетевые карты? ethtool -k eth0 - offload CPU work to NIC TSO, GSO, GRO... 44
  • 45. Сетевая карта (NIC) Что умеют сетевые карты? ethtool -s eth0 - ethernet speed auto, 10, 100, 1000... 45
  • 46. Сетевая карта (NIC) Что умеют сетевые карты? ethtool -a eth0 - ethernet flow control Свитч/NIC могут отправить друг-другу pause frame, если ring buffer заполнен и новые данные не могут быть приняты. В этом случае вторая сторона может попытаться временно сохранить пакет у себя в буффере. 46
  • 47. Сетевая карта (NIC) Что умеют сетевые карты? ethtool -c eth0 - interrupt coalescing Частота hw interrupt. 47
  • 48. Сетевая карта (NIC) Что умеют сетевые карты? ethtool -g eth0 - ring buffer size 48
  • 49. Сетевая карта (NIC) Что умеют сетевые карты? ethtool -n eth0 - RSS hash settings and NIC “firewall” Позволяет фильтровать трафик на уровне NIC, не задействуя CPU. 49
  • 50. Сетевая карта (NIC) Что умеют сетевые карты? ethtool -l eth0 - multiqueue Количество очередей. 50
  • 51. Сетевая карта (NIC) Что умеют сетевые карты? ethtool -x eth0 - receive flow hash indirection table. Можно отправлять полученные пакеты не во все очереди (и соответственно ядра процессора) или отправлять разное количество пакетов в разные очереди. 51
  • 52. Сетевая карта (NIC) Что умеют сетевые карты? ethtool --show-priv-flags eth0 - manufacturer specific settings Всё что выходит за рамки стандартного функционала сетевых карт. 52
  • 53. Сетевая карта (NIC) Что умеют сетевые карты? ethtool -m eth0 - port module specific settings. Настройки модульного порта сетевой карты (SFP+, QSFP). 53
  • 54. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS 54
  • 56. Сетевой стек Linux Что умеет сетевой стек Linux? 56
  • 57. Сетевой стек Linux Что умеет сетевой стек Linux? Много всего! 57 # uname -r 4.12.10-1.el7.elrepo.x86_64 # sysctl -a | awk '/^net./ && !/(eth|lo)[0-9]*./ {count++} END {print count}' 396
  • 58. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS 58
  • 59. Сетевой стек Linux: пакеты 59 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
  • 60. Сетевой стек Linux: TX 60 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
  • 61. Сетевой стек Linux: RX 61 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
  • 62. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS 62
  • 63. Сетевой стек Linux: соединения 63 Что умеют соединения? ● SO_SNDBUF ● SO_RCVBUF
  • 64. Сетевой стек Linux: соединения 64 Что умеют соединения? ● 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
  • 65. Сетевой стек Linux: соединения 65 Что умеют соединения? ● SO_KEEPALIVE - поддерживать соединение открытым, отсылая keepalive пакеты (уменьшает latency) ● SO_REUSEADDR (net.ipv4.tcp_tw_reuse) - переиспользовать TIME_WAIT соединения (меньше шансов, что закончаться доступные сокеты) ● SO_REUSEPORT - разрешить слушать порт нескольким процессам/тридам (быстрое открытие большого количества соединений) ● TCP_CORK - отсылать данные пачками (увеличивает throughput) ● TCP_NODELAY - отсылать данные как можно быстрее (уменьшает latency) ● TCP_DEFER_ACCEPT - не будить приложение, пока не придут реальные данные
  • 66. Сетевой стек Linux: соединения 66 Моё приложение слушает порт и обслуживает соединения! Я всё контролирую!
  • 67. Сетевой стек Linux: соединения 67 Моё приложение слушает порт и обслуживает соединения! Я всё контролирую! Всё делает ядро: ● слушает порт ● устанавливает соединения ● поддерживает tcp keepalive ● закрывает соединения Приложение только отдаёт распоряжения (и то не всегда).
  • 68. Сетевой стек Linux: соединения 68 Лимиты соединений ● net.ipv4.tcp_max_syn_backlog - SYN received, SYNACK sent ● net.core.somaxconn or listen(sockfd,SOMAXCONN) - ACK received, ожидает обработки приложением
  • 71. Сетевой стек Linux 71 Traffic shaping (десятки алгоритмов) Policy routing Firewall (десятки расширений) Bridging TLS (!)
  • 72. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS 72
  • 73. Сетевой стек Linux: User space network stack 73
  • 74. Сетевой стек Linux: User space network stack 74 DPDK Netmap mTCP Snabbswitch OpenOnload
  • 75. Сетевой стек Linux: User space network stack 75 DPDK Netmap mTCP Snabbswitch OpenOnload DPDK L4 Load Balancer by NFWare http://www.highload.ru/2017/abstracts/2858.html
  • 77. Сетевой стек Linux: XDP 77 Устройства не монополизированы: ● Работают стандартные утилиты ● Работают стандартный мониторинг ● Работает стандартно
  • 78. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS 78
  • 83. Терминология: RTT 83 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
  • 84. Терминология: RTT 84 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
  • 88. TCP: подтверждение получения каждого пакета 88
  • 89. TCP: пропускная способность 89 С какой максимальной скоростью можно передавать данные через 1 TCP соединение при MTU=1500byte и RTT=20ms?
  • 90. TCP: пропускная способность 90 С какой максимальной скоростью можно передавать данные через 1 TCP соединение при MTU=1500byte и RTT=20ms? throughput=MTU/RTT throughput=1500/20=75byte/ms=75*8*1000/1024/1024=0.57Mbit/s Маловато будет!
  • 91. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS 91
  • 92. TCP: Cumulative acknowledgment 92 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
  • 93. TCP: Cumulative acknowledgment 93 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
  • 94. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS 94
  • 95. TCP: Selective acknowledgment and retransmit 95 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
  • 96. TCP: Bandwidth-delay product 96 Bandwidth-delay product - количество битов информации, получение которых ещё не подтверждено. Нужно ли ограничивать?
  • 97. TCP: Bandwidth-delay product 97 С какой максимальной скоростью можно передавать данные через 1 TCP соединение при Bandwidth=1Gbit/s?
  • 98. TCP: Bandwidth-delay product 98 С какой максимальной скоростью можно получать данные через 1 TCP соединение при Bandwidth=1Gbit/s?
  • 99. TCP: Bufferbloat 99 Packet queue (Bufferbloat) Gateway1 Gateway3 Server Gateway2 Client
  • 100. TCP: Bufferbloat 100 Больше BDP » больше queue » больше latency » больше packet drop » больше retransmit » меньше throughput Packet queue (Bufferbloat) Gateway Server Client
  • 101. TCP: Bandwidth-delay product 101 С какой максимальной скоростью можно принимать/отправлять данные через 1 TCP соединение при Bandwidth=1Gbit/s? Со скоростью самого медленного участка пути.
  • 102. Сетевой стек Linux: пакеты 102 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
  • 103. TCP: Flow control 103 Сколько данных можно отправить, чтобы принимающее приложение не захлебнулось и не переполнились буферы?
  • 104. TCP: Flow control 104 Сколько данных можно отправить, чтобы принимающее приложение не захлебнулось и не переполнились буферы? Хватает ли ресурсов приложению на принимающей стороне?
  • 105. TCP: Flow control 105 Сколько данных можно отправить, чтобы принимающее приложение не захлебнулось и не переполнились буферы? Хватает ли ресурсов приложению на принимающей стороне? Не занято ли приложение чем-то другим?
  • 106. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS 106
  • 107. Сетевой стек Linux: пакеты 107 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
  • 108. TCP: Flow control: TCP Window 108 min( free space in client socket buffer - in flight traffic, free space in server socket buffer)
  • 109. TCP: Flow control: TCP Window 109 "640K ought to be enough for anybody" ©
  • 110. TCP: Flow control: TCP Window 110 С какой максимальной скоростью можно передавать данные через 1 TCP соединение при BDP=65KB, RTT=20ms, Bandwidth=1Gbit/s? throughput=BDP/RTT throughput=65/0.02=3250KB/s=3250*8/1024=25Mbit/s Маловато будет!
  • 111. TCP: Flow control: TCP Window scaling 111 Windows scale TCP option max 2^14 Window size = win * 2^window scale Maximal window = 1GB
  • 112. TCP: Congestion control 112 Application Socket buffer Kernel queue NIC Driver ring buffer NIC internal buffer Почему пропадают пакеты? Почему растёт latency? Где bufferbloat? На сколько нам снизить скорость отсылки данных? Как узнать, что скорость можно увеличить опять?
  • 113. TCP: Congestion control 113 Почему у меня тормозит habrahabr.ru, когда я качаю легальный контент через торренты? Почему у меня тормозит torrent по WiFi из спальни?
  • 114. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS 114
  • 115. TCP: Congestion avoidance algorithms 115 Входные данные: ● Latency ● Loss Если пакеты теряются и latency растёт, то возможно надо снизить скорость передачи.
  • 116. TCP: Congestion avoidance algorithms 116 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
  • 117. TCP: Congestion avoidance algorithms 117 Входные данные: ● Latency ● Loss Если пакеты теряются и latency растёт, то возможно надо снизить скорость передачи. А может и нет.
  • 118. TCP: Congestion avoidance algorithms: BBR 118
  • 122. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS 122
  • 124. DNS: виды записей 124 ● 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
  • 125. DNS: RTT 125 # 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
  • 126. DNS: Global Server Load Balancing 126
  • 127. DNS: Global Server Load Balancing 127 А если клиент использует Google DNS 8.8.8.8?
  • 128. DNS: EDNS 128 Псевдо-запись типа OPT, которой нет в зоне и которая существует только в DNS пакетах участников обмена данными. Примеры использования: ● DNSSEC: EDNS header flag “DO” ● GSLB DNS: EDNS Option “edns-client-subnet”
  • 130. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS 130
  • 131. HTTP 131 # 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">
  • 133. HTTP 133 Как ускорить? ● Keepalive - сокращает количество roundtrip для получения каждого файла. ● HTTP 2 - параллельное получение файлов [и push].
  • 134. HTTP: HTTP 2 Multiplexing 134
  • 135. HTTP: HTTP 2 Push 135
  • 136. HTTP 136 < 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
  • 137. HTTP: WebSocket 137 TCP соединение, которое устанавливается с вебсервером, при этом после установки внутри соединения могут ходить данные любого вида в обоих направлениях - никакого оверхеда связанного с HTTP протоколом нет.
  • 138. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS 138
  • 140. HTTPS: Handshake 140 ● Долго для клиента ● Тяжело для серверного CPU
  • 142. HTTPS: Handshake: Elliptic curve certificate 142 ECDSA ● быстрее/легче ● Не все поддерживают Nginx умеет работать сразу с 2 сертификатами.
  • 143. HTTPS: Handshake: TLS ticket 143
  • 144. HTTPS: Handshake: TLS ticket 144
  • 145. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS 145
  • 146. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS ● QUIC 146
  • 149. UDP 149 Туннелирование (VPN) Сколько RTT надо для установки TCP соединения внутри TCP туннеля? Сколько RTT надо для пересылки пакета, если первый раз он пропал?
  • 150. Quic 150 TLS handshake TLS ticket “TFO” Congestion control Multiplexed connections Speculative retransmission Compression Fallback to TCP
  • 152. TCP 152 TCP handshake = 1.5 RTT TLS handshake = 2 RTT
  • 153. Quic 153 TCP handshake = 1.5 RTT TLS handshake = 2 RTT
  • 154. Quic 154 TCP handshake TLS handshake Первое подключение: RTT=1 Повторное подключение: RTT=0
  • 156. Содержание ● Модель OSI ● Сетевая карта (NIC) ● Сетевой стек Linux ○ Пакеты ○ Соединения ○ User-space network stack ● TCP ○ Cumulative acknowledgment ○ Selective acknowledgment ○ Flow control ○ Congestion control ● DNS ● HTTP ● HTTPS ● QUIC 156