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
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
13. UDP vs TCP 13
UDP TCP
Данные могут теряться Гарантия доставки
Порядок пакетов может перемешиваться Гарантия сохранения последовательности
Мало проверок Много проверок
Максимальный объём данных - 1 пакет Максимальный объём данных - любой
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
46. Сетевая карта (NIC)
Что умеют сетевые карты?
ethtool -a eth0 - ethernet flow control
Свитч/NIC могут отправить друг-другу pause frame, если ring buffer
заполнен и новые данные не могут быть приняты. В этом случае
вторая сторона может попытаться временно сохранить пакет у себя
в буффере.
46
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
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,
ожидает обработки приложением
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
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
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?
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)
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
Маловато будет!
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 растёт, то возможно надо снизить
скорость передачи.
А может и нет.
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
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”
133. HTTP 133
Как ускорить?
● Keepalive - сокращает количество roundtrip для получения каждого
файла.
● HTTP 2 - параллельное получение файлов [и push].
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
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