Полное руководство по решению общих вопросов о компьютерных сетях на технических собеседованиях.

«Вы готовы к интервью?»

"Да, конечно. Пожалуйста, начинайте."

"Здорово. Не могли бы вы рассказать о своем понимании компьютерных сетей? Может быть, мы можем начать с того, что такое TCP и как он работает. ”

«Умм… Умм… Умм ……»

«Хорошо, спасибо, что уделили время сегодня. Пожалуйста, дождитесь нашего дальнейшего уведомления в ближайшие несколько дней ».

Вам это кажется похожим?

Не сдавайся. У тебя определенно получится лучше.

Вот некоторые общие проблемы компьютерной сети, с которыми вы можете столкнуться во время технических собеседований. Большинство из них относятся к прикладному, транспортному и сетевому уровням. Вы можете следовать этому руководству, чтобы изучить компьютерные сети с нуля и четко объяснить их интервьюеру.

1. Какова архитектура компьютерной сети?

В целом концепции компьютерных сетей часто делятся на 5 основных уровней. Это комбинация модели OSI (Open System Interconnection) и модели TCP / IP, которые имеют 7 уровней и 4 уровня соответственно.

2. Каковы функции каждого слоя?

Следующее введение будет основано на сетевой модели OSI:

  1. Приложение: задача прикладного уровня - указать протоколы связи или интерфейсы между прикладными процессами, выполняемыми хостом. На уровне приложений есть несколько общих протоколов, например HTTP (протокол передачи гипертекста), DNS (система доменных имен) и SMTP.
  2. Представление: этот уровень в основном отвечает за перевод данных с уровня приложения в требуемый формат (например, ASCII). Здесь выполняется некоторая работа, такая как шифрование / дешифрование и сжатие данных.
  3. Сеанс: этот уровень отвечает за установление и поддержание соединения или сеанса между двумя процессами. Это также позволяет процессам добавлять контрольные точки для синхронизации.
  4. Транспорт: предоставляет услугу сквозной передачи данных (сегментов) между приложениями по сети. Наиболее известными протоколами транспортного уровня являются TCP (протокол управления передачей) и UDP (протокол дейтаграмм пользователя).
  5. Сеть: сетевой уровень отвечает за маршрутизацию пакетов (блоков данных). В частности, сетевой уровень выбирает подходящие маршруты для передачи, а также отправляет и принимает пакеты IP (Интернет-протокола) из других сетей.
  6. Канал передачи данных: этот уровень инкапсулирует IP-пакеты сетевого уровня в кадры и отправляет их через узлы связи. Передача кадра зависит от MAC-адреса (управления доступом к сообщениям). MAC-адрес получателя можно получить, отправив запросы ARP (протокол разрешения адресов), чтобы узнать, есть ли у какого-либо узла требуемый IP-адрес.
  7. Физический: он отвечает за передачу битов между узлами, которая является физическим соединением (по физическому каналу передачи данных), и максимально устраняет разницу между устройствами.

3. Что такое TCP и UDP на транспортном уровне? В чем их отличия?

TCP (протокол управления передачей) - это служба, ориентированная на соединение, что означает, что она устанавливает соединение перед передачей данных и закрывает соединение после передачи.

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

TCP часто используется для передачи файлов, отправки и получения почты, а также для удаленного входа в систему.

UDP (протокол дейтаграмм пользователя) не требует установления соединения перед передачей данных, что означает, что удаленный хост не обязан подтверждать после получения сегментов UDP.

Хотя UDP не может обеспечить надежную передачу, это наиболее эффективная услуга в определенных ситуациях (обмен мгновенными сообщениями в целом), например, потоковая передача аудио и видео в реальном времени.

4. Как TCP устанавливает и завершает соединение?

Сначала мы рассмотрим, как TCP устанавливает соединение в модели клиент / сервер, что обычно называется трехсторонним рукопожатием:

  1. Клиент: он отправляет сегмент SYN, который просит сервер синхронизировать его порядковый номер с порядковым номером клиента.
  2. Сервер: после получения пакета от клиента сервер вернет сегменты SYN и ACK, которые информируют клиентскую сторону о том, что пакет был получен, и запрашивают у нее ожидаемый порядковый номер для подтверждения.
  3. Клиент: он отправляет обратно пакет с сегментом ACK, который информирует сервер о том, что возвращенный пакет был правильно получен.

Сегменты SYN подтверждают, что маршрут от отправителя к получателю не имеет проблем, но маршрут от получателя к отправителю должен подтверждаться сегментами ACK.

Далее мы собираемся обсудить, как TCP завершает соединение в модели клиент / сервер, которая представляет собой четырехэтапный процесс установления связи:

  1. Клиент: после принятия решения о закрытии соединения клиент отправит на сервер сегмент FIN. Затем клиент перейдет в состояние FIN_WAIT_1, ожидая подтверждения от сервера.
  2. Сервер: он отправляет обратно сегмент ACK после получения сегмента FIN от клиента.
  3. Клиент: он переходит в состояние FIN_WAIT_2 после получения сегмента ACK от сервера, который ожидает сегмента FIN, отправленного с другой стороны.
  4. Сервер: он также закрывает соединение с клиентом и отправляет сегмент FIN после того, как он отправил сегмент ACK.
  5. Клиент: после получения сегмента ACK от сервера клиент отправляет последний сегмент ACK для подтверждения. После этого клиент перейдет в состояние TIME_WAIT, которое клиент формально закрывает через некоторое время в случае, если последний сегмент ACK не получен другой стороной.

5. Что такое ARQ (автоматический запрос на повторение)?

ARQ - это метод контроля ошибок для передачи данных на транспортном уровне и уровне канала данных.

Подтверждения и тайм-ауты используются для обеспечения надежной передачи данных. Если получатель не получит подтверждения в течение заданного времени, он будет повторно отправлять тот же пакет до тех пор, пока подтверждение не будет возвращено или не превысит заранее заданное время повторной передачи.

Есть два типа ARQ, в том числе:

  • ARQ с остановкой и ожиданием: основная идея ARQ с остановкой и ожиданием заключается в том, что отправитель прекращает передачу данных после каждой отправки пакета. Передача будет считаться неудачной, если по истечении заданного времени не будет получено подтверждения от получателя. Это означает, что данные должны быть переданы повторно до получения подтверждения. Если получатель получает дублированный пакет, он должен отказаться от этого пакета и одновременно отправить обратно подтверждение.
  • Go-Back-N ARQ: отправитель поддерживает скользящее окно, в котором пакеты в этом окне можно отправлять непрерывно, и нет необходимости ждать подтверждения. Получатель обычно принимает только пакеты в порядке очереди и отправляет обратно совокупный ACK после прибытия последнего пакета.

6. Как TCP обеспечивает управление потоком?

Целью управления потоком является управление скоростью отправки пакета, которая гарантирует, что получатель сможет получить его вовремя.

TCP может управлять потоком с помощью скользящих окон. Размер скользящего окна на стороне отправителя можно контролировать с помощью сегментов ACK, возвращаемых получателем, что также может влиять на скорость отправки.

7. Как TCP обеспечивает контроль перегрузки?

Перегрузка сети возникает, когда количество запросов к сетевому ресурсу превышает объем данных, который он может обработать.

Контроль перегрузки предназначен для предотвращения чрезмерного ввода данных в сеть, чтобы сетевые ссылки или узлы не были перегружены.

Контроль перегрузки TCP использует различные стратегии, а именно:

  1. Медленный запуск: вместо того, чтобы загружать большой объем данных в сеть, TCP определяет допустимый объем ресурсов, сначала отправляя небольшой фрагмент данных и постепенно увеличивая размер окна перегрузки (cwnd) экспоненциально после каждого RTT ( Время туда и обратно).
  2. Предотвращение перегрузки: после того, как размер окна перегрузки (cwnd) достигает порогового значения, он начинает аддитивно увеличиваться во избежание перегрузки сети.
  3. Обнаружение перегрузки: это происходит, когда возникает перегрузка, размер окна перегрузки увеличивается в несколько раз. Предполагается, что перегрузка возникает, когда требуется повторная передача пакета.
  4. Быстрая повторная передача и восстановление (FRR): это алгоритм управления перегрузкой, который может быстро восстановить потерянные пакеты. Без FRR TCP приостановит передачу по таймеру. Во время паузы новые пакеты передаваться не будут. При использовании FRR, если получатель получает сегмент, он немедленно возвращает дублированный сегмент ACK. Отправитель будет считать, что сегмент потерян после получения трех повторяющихся сегментов ACK. FRR уменьшает задержку повторной передачи.

8. Как проходит процесс от ввода URL-адреса до отображения веб-страницы?

Этот процесс можно разделить на несколько этапов:

  1. Разрешение DNS.
  2. Создайте TCP-соединение.
  3. Отправить HTTP-запрос.
  4. Сервер обрабатывает запрос и возвращает HTTP-ответ.
  5. Браузер отображает веб-страницу.
  6. Закрыть соединение.

8. Как HTTP сохраняет статус пользователя?

HTTP - это протокол без состояния, что означает, что он не сохраняет статус соединения между запросами и ответами.

Так как же нам сохранить статус пользователя?

Сеансы решают эту проблему. Основная особенность сессий - запись статуса пользователя со стороны сервера.

Например, когда вы кладете товары в корзину на Amazon и думаете о том, чтобы купить их позже. Система фактически не может знать, кто сохраняет эти элементы через HTTP, поскольку она не имеет состояния. Таким образом, сервер создаст и будет поддерживать для вас конкретный сеанс, который позволяет отслеживать вашу информацию о покупках.

9. Что такое файлы cookie в компьютерной сети? В чем разница между файлами cookie и сеансами?

И файлы cookie, и сеансы могут отслеживать и сохранять личность пользователя, но они часто используются в разных сценариях.

Файлы cookie обычно используются для хранения информации о пользователях. Например, после входа на веб-сайт в следующий раз нам не нужно будет снова входить в систему, поскольку наши данные безопасности были сохранены в виде токена в файле cookie. Система просто должна найти пользователя по значению токена.

Сеансы записывают статус пользователя через сервер. Типичный сценарий использования сессий - тележки онлайн-покупок. Поскольку HTTP не имеет состояния, сервер будет отслеживать статус пользователя, отмечая его сеансом.

Данные cookie хранятся на стороне клиента (в браузере), тогда как данные сеанса хранятся на стороне сервера. Это означает, что сеансы имеют более высокий уровень безопасности по сравнению с файлами cookie.

10. В чем разница между HTTP и HTTPS?

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

HTTPS (защищенный протокол передачи гипертекста) - это протокол HTTP, который работает за пределами SSL / TLS, а SSL / TLS - за пределами TCP. Весь передаваемый контент зашифрован.

Следовательно, безопасность HTTPS выше, чем HTTP, но HTTPS требует больше ресурсов, чем HTTP.

использованная литература

  1. Уровни модели OSI
  2. Модель TCP / IP
  3. Протокол управления передачей - Википедия
  4. Установление TCP-соединения
  5. Завершение TCP-соединения
  6. Остановка и ожидание ARQ
  7. Go-Back-N ARQ
  8. Как протоколы TCP / IP обрабатывают передачу данных
  9. Разница между Stop и Wait, GoBackN и Selective Repeat
  10. Контроль перегрузки TCP

Чтобы было ясно, есть еще много знаний, связанных с компьютерными сетями. Поскольку обычные технические собеседования, особенно собеседования с младшим инженером-программистом, часто сосредоточены на верхней половине сетевых уровней, те проблемы, которые мы наблюдали, - лишь небольшая часть этой области.

Надеюсь, оно будет вам полезно, и удачи в следующем интервью!