20201021 Технополис: Сетевой стек (лекция для студентов)

DmitrijsSamsonovs 3 views 165 slides Oct 28, 2025
Slide 1
Slide 1 of 165
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51
Slide 52
52
Slide 53
53
Slide 54
54
Slide 55
55
Slide 56
56
Slide 57
57
Slide 58
58
Slide 59
59
Slide 60
60
Slide 61
61
Slide 62
62
Slide 63
63
Slide 64
64
Slide 65
65
Slide 66
66
Slide 67
67
Slide 68
68
Slide 69
69
Slide 70
70
Slide 71
71
Slide 72
72
Slide 73
73
Slide 74
74
Slide 75
75
Slide 76
76
Slide 77
77
Slide 78
78
Slide 79
79
Slide 80
80
Slide 81
81
Slide 82
82
Slide 83
83
Slide 84
84
Slide 85
85
Slide 86
86
Slide 87
87
Slide 88
88
Slide 89
89
Slide 90
90
Slide 91
91
Slide 92
92
Slide 93
93
Slide 94
94
Slide 95
95
Slide 96
96
Slide 97
97
Slide 98
98
Slide 99
99
Slide 100
100
Slide 101
101
Slide 102
102
Slide 103
103
Slide 104
104
Slide 105
105
Slide 106
106
Slide 107
107
Slide 108
108
Slide 109
109
Slide 110
110
Slide 111
111
Slide 112
112
Slide 113
113
Slide 114
114
Slide 115
115
Slide 116
116
Slide 117
117
Slide 118
118
Slide 119
119
Slide 120
120
Slide 121
121
Slide 122
122
Slide 123
123
Slide 124
124
Slide 125
125
Slide 126
126
Slide 127
127
Slide 128
128
Slide 129
129
Slide 130
130
Slide 131
131
Slide 132
132
Slide 133
133
Slide 134
134
Slide 135
135
Slide 136
136
Slide 137
137
Slide 138
138
Slide 139
139
Slide 140
140
Slide 141
141
Slide 142
142
Slide 143
143
Slide 144
144
Slide 145
145
Slide 146
146
Slide 147
147
Slide 148
148
Slide 149
149
Slide 150
150
Slide 151
151
Slide 152
152
Slide 153
153
Slide 154
154
Slide 155
155
Slide 156
156
Slide 157
157
Slide 158
158
Slide 159
159
Slide 160
160
Slide 161
161
Slide 162
162
Slide 163
163
Slide 164
164
Slide 165
165

About This Presentation

Обзорная лекция по сетевым технологиям для студентов


Slide Content

Сетевой стек
Дмитрий Самсонов

Содержание
●Модель 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
IPTCP
IPTCP
IPTCP
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
Removed for
slideshare

Layer 5
Named pipe
NetBIOS
PPTP
SOCKS
SPDY (deprecated)
8DATA
SOC
KS
MIME

OSI model vs Internel protocol suite 9
Removed for
slideshare

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

14DATAIPTCP
SOC
KS
MIME

IP static routing

15DATAIPTCP
SOC
KS
MIME

IP static routing

16DATAIPTCP
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

17DATAIPTCP
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

18DATAIPTCP
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

19DATAIPTCP
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

20DATAIPTCP
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

21DATAIPTCP
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

22DATAIPTCP
SOC
KS
MIME

IP static routing

23DATAIPTCP
SOC
KS
MIME
?

IP static routing

24DATAIPTCP
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

25DATAIPTCP
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

26DATAIPTCP
SOC
KS
MIME
?

IP static routing

27DATAIPTCP
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

28DATAIPTCP
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

29DATAIPTCP
SOC
KS
MIME
OSPF

IP dynamic routing

30DATAIPTCP
SOC
KS
MIME
BGP

IP dynamic routing

31DATAIPTCP
SOC
KS
MIME
BGP AS PATH

IP dynamic routing

32DATAIPTCP
SOC
KS
MIME
BGP AS PATH
Короче - быстрее

IP dynamic routing

33DATAIPTCP
SOC
KS
MIME
Static routes - Offline navigation Dynamic routes - Online navigation

Layer 2
ARP
Bond/Team/LAG
Vlan
34DATAIPTCPEthernet frame
SOC
KS
MIME

Layer 2 35DATAIPTCPEthernet 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 36DATAIPTCPEthernet frame
SOC
KS
MIME
192.168.1.1

Layer 2 37DATAIPTCPEthernet 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 38DATAIPTCPEthernet frame
SOC
KS
MIME
192.168.1.1

Layer 2
ARP

39DATAIPTCPEthernet 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 40DATAIPTCPEthernet 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 41DATAIPTCPEthernet 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 42DATAIPTCPEthernet 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 43DATAIPTCPEthernet 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

49DATAIPTCPEthernet frame
SOC
KS
MIME

Layer 2 50DATAIPTCPEthernet 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 buffersysctl net.ipv4.tcp_wmem or SO_SNDBUF
Kernel TX queue (qdisc)ip link | grep "qlen.*" or discipline dependent
NIC Driver TX ring bufferethtool -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 bufferethtool -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)
Google7% в 2016HTTP/2 IETF,
Google
49% из
ТОП 10М в
Августе
2020
QUIC Google4.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

[email protected]
164
Спасибо за внимание!

Полезные ссылки
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
165
[email protected]