Я разработчик приложений, который хочет узнать больше о транспортном уровне моих запросов, которые я делал все эти годы. Я также узнал больше о бэкэнде и строю свой собственный сервис данных с веб-сокетами, что меня интересует, как на самом деле движутся данные.
Таким образом, я узнал о TCP и понимаю как это работает, но есть еще один термин, который меня смущает - «TCP-соединение». Я видел это повсюду, и на самом деле там была тема, открытая с тем же вопросом ... но, как сказал в комментариях OP, никто на самом деле не ответил на вопрос: TCP против UDP - Что такое TCP-соединение?
", когда мы говорим, что между двумя хостами установлено соединение, что это значит? Если бы я мог получить микроскоп magi c и осмотреть сервер или клиента, и - a-ha! - найти соединение, на что бы я посмотрел? Какая переменная выделена кодом ОС? Какая-то запись в какой-то таблице? Как и когда она туда попадает, и как и когда она оттуда удаляется? "
Я читал, чтобы попытаться выяснить это самостоятельно,
Вот хороший ресурс, который детализирует поток HTTP, также упоминает «TCP-соединение» https://blog.catchpoint.com/2010/09/17/anatomyhttp/
Вот еще одна тема о HTTP Keep-alive, то же самое «TCP-соединение»: HTTP Keep Alive и TCP поддерживают активность
My понимание:
Когда клиент Требуются данные с сервера, происходит рукопожатие SYN / ACK, устанавливается это «соединение», и обе стороны согласовывают начальный порядковый номер, максимальный размер пакета и т. д. c.
до тех пор, пока это «соединение» "все еще открыт, клиент может запрашивать / получать данные, не делая другого рукопожатия. TCP Keep-alive посылает пульс, чтобы сохранить это «соединение» открытым
1) Каким-то образом HTTP-заголовок «Keep-alive» также сохраняет это TCP-соединение открытым, хотя HTTP-заголовки являются частью полезная нагрузка пакета, и, кажется, не имеет смысла, что уровень TCP будет анализировать заголовки HTTP?
Мне кажется, что «соединение» между двумя машинами в буквальном смысле никогда не может быть закрыт, потому что клиент всегда может поразить сервер пакетами (например, первый пакет SYN)
2) Является ли TCP-соединение только клиентом и сервером, сохраняя порядковый номер с другого IP-адреса? может быть, это просто флаг, который говорит: «Эй, этот клиент классный, принимай сообщения от него без рукопожатия»? Так что закрытие соединения будет просто стирать эти данные из памяти?