Цю Чжао познакомился с Tencent Ali Byte, и интервьюеры забросали меня этим бесконечным вопросом. К счастью, я заранее подготовился и отлично с ним справился. Вот что я подытожил, исходя из своего личного опыта. Согласно тому, что я сказал, это в основном стабильный.
трехстороннее рукопожатие
Когда интервьюер спросит вас, зачем нужно три рукопожатия, роль трех рукопожатий и расскажите о трех трехсторонних рукопожатиях, думаю, многие ответят так:
Во-первых, многие сначала расскажут о процессе рукопожатия:
1. Первое рукопожатие: клиент отправляет серверу сообщение SYN.
2. Второе рукопожатие: после того, как сервер получит сообщение SYN, он ответит сообщением SYN+ACK.
3. Третье рукопожатие: после того, как клиент получает сообщение SYN + ACK, он ответит с сообщением ACK.
4. После получения сервером сообщения ACK устанавливается трехстороннее рукопожатие.
Функция состоит в том, чтобы подтвердить, нормальные ли возможности приема и отправки обеих сторон.
Здесь я кстати объясню, почему только три рукопожатия могут подтвердить нормальные возможности приема и отправки обеих сторон, а два раза не могут:
Первое рукопожатие: клиент отправляет сетевой пакет, а сервер его получает. Таким образом, сервер может прийти к выводу, что возможности клиента по отправке и возможности сервера по приему являются нормальными.
Второе рукопожатие: сервер отправляет пакет, а клиент его получает. Таким образом, клиент может прийти к выводу, что возможности приема и отправки сервера и возможности приема и отправки клиента являются нормальными. Однако в настоящее время сервер не может подтвердить, нормальная ли приемная способность клиента.
Третье рукопожатие: клиент отправляет пакет, а сервер его получает. Таким образом, сервер может прийти к выводу, что возможности клиента по приему и отправке являются нормальными, а собственные возможности отправки и получения сервером также являются нормальными.
Следовательно, требуется три рукопожатия, чтобы подтвердить, что возможности приема и отправки обеих сторон в норме.
Такой ответ на самом деле возможен, но я думаю, что нам следует описать этот процесс более подробно, потому что в процессе трехстороннего рукопожатия две стороны меняются многими состояниями, и эти состояния также могут быть заданы интервьюером. Поэтому я думаю, что при ответе на трехстороннее рукопожатие мы должны быть немного более подробными, а немного более подробное описание означает, что это может быть немного длиннее. Описание бонусных баллов, я думаю, должно быть таким:
В начале клиент находится в закрытом состоянии, а сервер в состоянии прослушивания. потом
1. Первое рукопожатие: клиент отправляет SYN-сообщение на сервер и указывает порядковый номер инициализации клиентаSN(c). В этот момент клиент находится вSYN_Sendгосударство.
2. Второе рукопожатие: после того, как сервер получит сообщение SYN от клиента, он ответит своим собственным сообщением SYN, а также укажет свой собственный порядковый номер ISN инициализации, а также будет использовать ISN + 1 клиента в качестве Значение ACK указывает на то, что он получил SYN от клиента, и сервер находится в состоянии*SYN_REVD*статус.
3. Третье рукопожатие: после того, как клиент получит сообщение SYN, он отправит сообщение ACK.Конечно, он также использует ISN + 1 сервера в качестве значения ACK, указывая, что сообщение SYN от сервера было получено , клиент находится вestablisedгосударство.
4. После того, как сервер получит сообщение ACK, он также находится вустановившееся состояние, в это время обе стороны установили связь.
Роль трехстороннего рукопожатия
Функций тройного рукопожатия также много, запомните еще несколько, чтобы не потерять. Например:
1. Подтвердите, являются ли возможности приема и отправки обеих сторон нормальными.
2. Укажите собственный порядковый номер инициализации для подготовки к последующей надежной передаче.
Одного этого недостаточно, чтобы справиться с трехсторонним рукопожатием, интервьюер также может задать некоторые другие вопросы, например:
1. Фиксирован ли (ISN)?
Важная функция трехэтапного рукопожатия заключается в том, что клиент и сервер обмениваются ISN (начальным порядковым номером), чтобы другая сторона знала, как собрать данные в соответствии с порядковым номером при следующем получении данных.
Если ISN фиксирован, злоумышленнику легко угадать последующие номера подтверждения, поэтому ISN генерируется динамически.
2. Что такое очередь полусоединений
После того, как сервер получит SYN от клиента в первый раз, он будет в состоянии SYN_RCVD. В это время две стороны не полностью установили свое соединение. Сервер поместит соединение запроса в этом состоянии в очередь, которую мы называем этой очередью.очередь полуобъединения. Конечно есть ещеполностью подключенная очередь, то есть трехстороннее рукопожатие завершено, и установленное соединение будет помещено в очередь полных соединений. Если очередь заполнена, может произойти потеря пакетов.
Вот еще немного оВремя повторной передачи SYN-ACKПроблема: после того, как сервер отправляет пакет SYN-ACK, если он не получает пакет подтверждения клиента, сервер повторно передает его в первый раз, ждет некоторое время и не получает пакет подтверждения клиента и выполняет вторая повторная передача Если количество повторных передач превышает установленное системой максимальное количество повторных передач, система удаляет информацию о соединении из очереди полусоединений. Обратите внимание, что время ожидания для каждой повторной передачи не обязательно одинаково и обычно увеличивается экспоненциально, например, интервал составляет 1 с, 2 с, 4 с, 8 с, ....
3. Можно ли передавать данные во время трехэтапного рукопожатия?
Многие могут подумать, что трехстороннее рукопожатие не может передавать данные, но на самом деле во время третьего рукопожатия данные могут передаваться. То есть первое и второе рукопожатия не могут передавать данные, а третье рукопожатие может передавать данные.
Почему это так? Вы можете придумать вопрос.Если первое рукопожатие может нести данные, если кто-то хочет злонамеренно атаковать сервер, он будет помещать много данных в пакет SYN при первом рукопожатии каждый раз, потому что злоумышленник просто Если вы проигнорируете ли возможности сервера по приему и отправке в норме, а затем безумно повторять сообщения SYN, серверу потребуется много времени и памяти, чтобы получить эти сообщения. То есть, одна из простых причин того, что первое рукопожатие может поместить данные, заключается в том, что оно делает сервер более уязвимым для атаки.
В третий раз клиент находится уже в установленном состоянии, то есть для клиента он установил соединение и уже знает, что возможности сервера по приему и отправке в норме, поэтому он может Нет ничего плохого в том, чтобы нести страницы данных.
помахал четыре раза
Поскольку трехстороннее рукопожатие является наиболее часто задаваемым вопросом на собеседовании, на этот раз мы начнем синтервьютрехстороннее рукопожатие
То же самое касается четырехкратного махания руками: никогда не отправляйте сообщение FIN с другой стороны, сообщение ACK с нашей стороны, сообщение FIN с нашей стороны и сообщение ACK с нашей стороны. Затем конец, лучше немного подробнее, например, он почти такой же, как следующий.государствоПомните, меня несколько раз спрашивали в моем последнем интервью, ха-ха. Я ответил неправильно и думал, что был прав, но в то время я объяснил это прямо, ха-ха.
В начале обе стороны находятся в установленном состоянии.Если клиент первым инициирует запрос на отключение, то:
1. Первая волна: клиент отправляет сообщение FIN, в сообщении указывается серийный номер. В этот момент клиент находится вFIN_WAIT1государство.
2. Второе рукопожатие: после того, как сервер получит FIN, он отправит сообщение ACK и использует значение серийного номера клиента + 1 в качестве значения серийного номера сообщения ACK, указывая, что он получил сообщение клиента. сервер времени включенCLOSE_WAITгосударство.
3. Третья волна: Если сервер тоже хочет отключиться, как и первая волна клиента, отправьте сообщение FIN и укажите серийный номер. В это время сервер находится вLAST_ACKстатус.
4. Четвертая волна: после того, как клиент получает FIN, он также отправляет сообщение ACK в качестве ответа и использует значение серийного номера сервера + 1 в качестве значения серийного номера своего собственного сообщения ACK. вTIME_WAITгосударство. Потребуется некоторое время, чтобы убедиться, что сервер не перейдет в состояние CLOSED, пока не получит собственное сообщение ACK.
5. После того, как сервер получает сообщение ACK, он закрывает соединение и находится в состоянии CLOSED.
Самое главное тут состояние ****TIME_WAIT****.Это высокочастотный тестовый сайт для интервью.Это для понимания почему клиент не закрывается сразу после отправки ACK,а ждет некоторое время закрывать. Причина этого заключается в том, чтобы убедиться, что сервер получил наше сообщение ACK. Если нет, сервер повторно отправит сообщение FIN клиенту. После того, как клиент снова получит сообщение ACK, он узнает, что предыдущее сообщение ACK потеряно, а затем снова отправляется сообщение ACK.
Что касается длительности TIME_WAIT, то это как минимум время прохождения одного сообщения туда и обратно. Как правило, устанавливается таймер.Если сообщение FIN не получено снова по истечении этого времени, это означает, что другой стороне удалось получить сообщение ACK, и он находится в состоянии CLOSED.
Здесь я даю значение каждого состояния, вы можете посмотреть, если вам интересно.
LISTEN - прослушивать запросы на подключение от удаленных портов TCP;
SYN-SENT — дождаться соответствующего запроса на соединение после отправки запроса на соединение;
SYN-RECEIVED - дождаться подтверждения запроса на соединение после получения и отправки запроса на соединение;
ESTABLISHED - представляет собой открытое соединение, данные могут быть отправлены пользователю;
FIN-WAIT-1 — дождаться запроса на прерывание соединения от удаленного TCP или подтверждения предыдущего запроса на прерывание соединения;
FIN-WAIT-2 - дождаться запроса на прерывание соединения от удаленного TCP;
CLOSE-WAIT - дождаться запроса на разрыв соединения от локального пользователя;
ЗАКРЫТИЕ — ожидание подтверждения разрыва соединения удаленным TCP;
LAST-ACK — дождаться подтверждения запроса на прерывание соединения, первоначально отправленного на удаленный TCP;
TIME-WAIT — выжидает достаточное время, чтобы удаленный TCP получил подтверждение запроса на прерывание соединения;
ЗАКРЫТО - состояние соединения отсутствует;
Наконец, на рисунке трехстороннего рукопожатия и четырех взмахов
Кроме того, вероятность того, что вас спросят о компьютерной сети и операционной системе, все еще очень высока.Я рекомендую всем прочитать эту заметку.В ней легко разобраться, и она в основном стабильна после ее прочтения.
Иллюстрированная операционная система, сеть, компьютерная композиция PDF Скачать!
Есть также несколько хороших статей, написанных здесь, чтобы вы могли найти
1. Введение в пятиуровневую модель компьютерных сетей.
2. Как обе стороны в общении могут гарантировать, что сообщения не будут потеряны?
3. В чем разница между концентратором, коммутатором и маршрутизатором?
4. Что такое контроль перегрузки TCP?
5. Что такое управление потоком TCP
6. Что такое трехстороннее рукопожатие TCP?
7. Что такое четверная волна TCP?
10. Что такое протокол SSL/TLS?
13. Что такое алгоритм маршрутизации широковещательной рассылки?
14. Что такое цифровая подпись?
15. Что такое атака с внедрением SQL?
Если вам нравится смотреть видео, вы также можете посмотреть это видео по основам работы с компьютером, которое я собрал.Видео трех курсов компьютерных основ