Mastering Swoole PHP: Build High Performance Concurrent System with Async and Coroutines / Осваиваем Swoole PHP: построение высокопроизводительной конкурентной системы с асинхронностью и корутинами: Жизненный цикл TCP-соединения

Оглавление
Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

Жизненный цикл TCP-соединения

bubenok 09.02.22 в 13:41

0

TCP — это протокол, основанный на соединении, есть два важных процесса TCP-соединения: установка соединения и отключение:

bubenok 09.02.22 в 13:42

0

Изображение 7.1 Жизненный цикл TCP-соединения

bubenok 09.02.22 в 13:42

0

Как видно из процесса установления и отключения TCP-соединения, рукопожатия необходимы для установления нового соединения. Когда одна из сторон хочет инициировать процесс закрытия соединения, она переходит на определенное время в состояние TIMEWAIT. И мы можем увидеть множество подключений в состоянии TIMEWAIT на загруженном HTTP-прокси, если прокси-сервер заранее прерывает соединение.

bubenok 09.02.22 в 13:47

0

Мы можем использовать команду CURL для отправки запроса HTTP HEAD на www.google.com:

bubenok 09.02.22 в 13:47

0

curl http://www.google.com -I

bubenok 09.02.22 в 13:47

0

HTTP/1.1 200 OK
Content-Type: text/html; charset=ISO-8859-1
P3P: CP="This is not a P3P policy! See g.co/p3phelp for more info."
Date: Thu, 12 Nov 2020 14:52:50 GMT
Server: gws
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN
Transfer-Encoding: chunked
Expires: Thu, 12 Nov 2020 14:52:50 GMT
Cache-Control: private
Set-Cookie: NID=204=DeE-KL8zAoQ16WXvHSwVQKgKCwH3-FtsIf5An9-fg7lhbIR1YahMKe4AlsNX5w2aAaf0YE3NCpRK7fVBhdzL80x6Ac527HGcDOxJ6DkuqIDh7fOBWze_rr8Cj0TF3GQf83yuRR8aNnl8A0AOkwUUCy4YQDA4-iI54wChGmjJcoE; expires=Fri, 14-May-2021 14:52:50 GMT; path=/; domain=.google.com; HttpOnly

bubenok 09.02.22 в 13:47

0

CURL отображает только данные прикладного уровня, но как мы можем проверить шаги, происходящие на нижнем уровне TCP-соединения? Мы можем использовать Wireshark для проверки жизненного цикла TCP-соединений и данных, передаваемых по TCP-соединению.

bubenok 09.02.22 в 13:48

0

Первым шагом является фильтрация интересующих нас данных TCP путем ввода фильтра tcpdump в поле фильтра:

bubenok 09.02.22 в 13:49

0

http.host matches "google\.com"

bubenok 09.02.22 в 13:49

0

В этом примере нас интересуют только данные, отправляемые и получаемые с google.com. Если хотите, вы также можете фильтровать данные по порту, IP-адресу и т. д. Затем, нажав кнопку «следить за TCP-потоком», мы можем увидеть полный цикл обмена данными между вашим HTTP-клиентом CURL и google.com.

bubenok 09.02.22 в 13:50

0

-

bubenok 09.02.22 в 13:50

0

Изображение 7.2 Использование Wireshark для проверки TCP-соединения

bubenok 09.02.22 в 13:50

0

На изображении 7.2. мы можем видеть пакеты SYN, ACK, FIN. Локальный IP-адрес 192.168.1.6 — это ваш IP-адрес на стороне клиента, 216.58.206.132 — это IP-адрес сервера Google.

bubenok 09.02.22 в 13:51

0

На практике мы можем использовать tcpdump для захвата пакетов уровня TCP на рабочем сервере в файл, а затем открыть и просмотреть его с помощью Wireshark. Это очень удобный рабочий процесс для отладки проблем на уровне сервиса TCP.

bubenok 09.02.22 в 13:52

0
Минутку...