Компьютерная сеть является основой собеседований по компьютерной и программной инженерии.Будь то разработка программного/аппаратного обеспечения, техническая поддержка или тестирование позиций, будут задействованы базовые знания компьютерной сети.Эта статья основана на предыдущей подготовке автора к собеседованию. Основное содержание этой статьи:
- OSI и модель TCP/IP
- Семиуровневая модель OSI
- Недостатки ОСИ
- Пятиуровневая модель TCP/IP
- Трехстороннее рукопожатие TCP и четырехсторонняя волна
- TCP устанавливает соединение
- Трехстороннее рукопожатие TCP, что, если рукопожатий два?
- TCP закрыть соединение
- Почему для установления соединения требуется трехстороннее рукопожатие, а для закрытия — четырехстороннее?
- Зачем нужно состояние TIME_WAIT?
- Как протокол TCP гарантирует надежную передачу
- HTTP и HTTPS
- Базовые концепты
- Разница между HTTPS и HTTP
- Код состояния для ответа HTTP
- Длинное соединение HTTP, короткое соединение
OSI и модель TCP/IP
Семиуровневая модель OSI
OSI (Open System Interconnect), открытое межсистемное соединение. Обычно известная как эталонная модель OSI, это модель сетевого взаимодействия, изученная организацией ISO (Международная организация по стандартизации) в 1985 году.
OSI определяет семиуровневую структуру сетевого взаимодействия (физический уровень, канальный уровень, сетевой уровень, транспортный уровень, сеансовый уровень, уровень представления, прикладной уровень), которая является эталонной моделью открытой системы межсоединений ISO.
Функции каждого слоя вводятся сверху вниз:
- Прикладной уровень: Ближайший к пользователю уровень в эталонной модели OSI предназначен для предоставления интерфейсов приложений для пользователей компьютеров, а также для непосредственного предоставления пользователям различных сетевых услуг. Наши общие протоколы сетевых служб прикладного уровня: HTTP, HTTPS, FTP, POP3, SMTP и т. д.
- Уровень представления. Уровень представления предоставляет различные функции кодирования и преобразования для данных прикладного уровня, чтобы гарантировать, что данные, отправленные прикладным уровнем одной системы, могут быть распознаны прикладным уровнем другой системы. При необходимости этот уровень обеспечивает стандартное представление для преобразования различных форматов данных в компьютере в стандартное представление, используемое в коммуникациях. Сжатие и шифрование данных также входят в число возможностей преобразования, которые может обеспечить уровень представления.
- Уровень сеанса: отвечает за установление, управление и завершение сеансов связи между объектами уровня представления. Коммуникация на этом уровне состоит из служебных запросов и ответов между приложениями на разных устройствах.
- Транспортный уровень: транспортный уровень устанавливает сквозную связь хоста. Роль транспортного уровня заключается в предоставлении сквозных надежных и прозрачных услуг передачи данных для протоколов верхнего уровня, включая решение таких вопросов, как контроль ошибок и контроль потока. Этот уровень скрывает подробности передачи данных нижнего уровня от верхнего уровня, так что пользователь верхнего уровня видит только надежный путь передачи данных между двумя объектами передачи от хоста к хосту, который может контролироваться и устанавливаться пользователем. Обычно мы говорим, что TCP UDP находится на этом уровне. Номер порта здесь является "концом".
- Сетевой уровень: этот уровень устанавливает соединение между двумя узлами посредством IP-адресации, выбирает соответствующие узлы маршрутизации и коммутации для пакетов, отправляемых транспортным уровнем на стороне источника, и передает их на транспортный уровень на стороне назначения в соответствии с правильным адресом. . Обычно его называют уровнем IP. Этот уровень мы часто называем уровнем протокола IP. Протокол IP является основой Интернета.
- Канальный уровень: объединение битов в байты и байтов в кадры, использование адресов канального уровня (Ethernet использует MAC-адреса) для доступа к среде и обнаружение ошибок. Уровень канала передачи данных далее делится на два подуровня: подуровень управления логическим каналом (LLC) и подуровень управления доступом к среде (MAC).
- Подуровень MAC обрабатывает алгоритмы CSMA/CD, проверку ошибок данных, кадрирование и т. д.;
- Подуровень LLC определяет поля, которые позволяют последнему протоколу совместно использовать канальный уровень. При фактическом использовании подуровень LLC не нужен.
- физический слой
Передача фактического конечного сигнала осуществляется через физический уровень. Битовый поток передается через физическую среду. Уровень, скорость и распиновка кабеля указаны. Обычно используемыми устройствами являются (различные физические устройства) концентраторы, повторители, модемы, сетевые кабели, витые пары и коаксиальные кабели. Это средства передачи физического уровня.
Недостатки ОСИ
Семиуровневая архитектура OSI имеет четкую концепцию и законченную теорию, но она более сложна и непрактична. Вот краткое упоминание причин провала OSI, которую ранее поддерживали некоторые крупные компании и даже некоторые национальные правительства:
- Экспертам OSI не хватает практического опыта и коммерческого стремления завершить стандарт OSI.
- Протокол OSI слишком сложен для реализации и работает неэффективно.
- Цикл нормотворчества OSI слишком долог, чтобы оборудование, произведенное по стандарту OSI, не могло вовремя выйти на рынок (в начале 1990-х годов, хотя весь набор международных стандартов OSI был сформулирован, Интернет на базе TCP/ ИП уже заняла лидирующие позиции на мировом рынке.Большой ассортимент сработал успешно)
- Разделение по уровням OSI нецелесообразно, и некоторые функции повторяются на нескольких уровнях.
Пятиуровневая модель TCP/IP
Соответствие между пятиуровневым протоколом TCP/IP и семиуровневым протоколом OSI следующее:
- прикладной уровень
Задача прикладного уровня состоит в том, чтобы завершить конкретное сетевое приложение посредством взаимодействия между прикладными процессами. Протокол прикладного уровня определяет правила связи и взаимодействия между прикладными процессами (процессами: программами, работающими на хосте). Для разных сетевых приложений требуются разные протоколы прикладного уровня. В Интернете существует множество протоколов прикладного уровня, таких как система доменных имен DNS, протокол HTTP, поддерживающий приложения World Wide Web, протокол SMTP, поддерживающий электронную почту, и так далее. Мы называем блок данных, с которым взаимодействует прикладной уровень, сообщением. - транспортный уровень
Основная задача транспортного уровня — предоставить общие службы передачи данных для связи между двумя хост-процессами. Прикладной процесс использует эту службу для передачи пакетов прикладного уровня. «Универсальный» означает, что он не нацелен на конкретное сетевое приложение, но несколько приложений могут использовать одну и ту же службу транспортного уровня. Поскольку хост может запускать несколько потоков одновременно, транспортный уровень имеет функцию мультиплексирования и демультиплексирования. Так называемое мультиплексирование означает, что несколько процессов прикладного уровня могут одновременно использовать услуги нижнего транспортного уровня.В отличие от демультиплексирования и мультиплексирования, транспортный уровень доставляет полученную информацию соответствующим процессам на прикладном уровне выше. Транспортный уровень в основном использует следующие два протокола:- Протокол управления передачей TCP (протокол управления передачей) — предоставляет услуги надежной передачи данных, ориентированные на установление соединения.
- Протокол пользовательских дейтаграмм UDP (протокол пользовательских дейтаграмм) — предоставляет услугу передачи данных без установления соединения с максимальной эффективностью (без гарантии надежности передачи данных).
- сетевой уровень
Сетевой уровень отвечает за предоставление коммуникационных услуг для различных узлов в сети с коммутацией пакетов. При отправке данных сетевой уровень инкапсулирует сегменты или пользовательские дейтаграммы, сгенерированные транспортным уровнем, в пакеты и пакеты для передачи. В архитектуре TCP/IP, поскольку сетевой уровень использует протокол IP, пакеты также называются дейтаграммами IP или дейтаграммами для краткости. Обратите внимание: не путайте «пользовательскую дейтаграмму UDP» транспортного уровня с «IP-дейтаграммой» сетевого уровня. Кроме того, независимо от того, какой уровень единицы данных, он обычно может быть представлен как «пакет». Другой задачей сетевого уровня является выбор подходящего маршрута, чтобы пакеты, передаваемые с транспортного уровня узла-источника, могли найти узел-получатель через маршрутизаторы на сетевом уровне.
Интернет состоит из большого количества разнородных сетей, соединенных между собой маршрутизаторами. Протокол сетевого уровня, используемый в Интернете, представляет собой Интернет-протокол без установления соединения (Intert Prococol) и множество протоколов маршрутизации, поэтому сетевой уровень Интернета также называют Интернет-уровнем или IP-уровнем. - канальный уровень
Канальный уровень часто называют просто канальным уровнем. Передача данных между двумя хостами всегда осуществляется по сегментному каналу, что требует использования специального протокола канального уровня. Когда данные передаются между двумя соседними узлами, канальный уровень собирает кадр IP-датаграммы с сетевого уровня и передает этот кадр по каналу связи между двумя соседними узлами. Каждый кадр включает в себя данные и необходимую управляющую информацию (такую как информация о синхронизации, адресная информация, контроль ошибок и т. д.). При приеме данных управляющая информация позволяет приемнику узнать, с какого бита кадр начинается и где он заканчивается. Таким образом, после получения кадра канальный уровень может извлечь из него часть данных и передать ее сетевому уровню. Управляющая информация также позволяет приемнику обнаруживать ошибки в принятом кадре. Если обнаружена ошибка, канальный уровень просто отбрасывает ошибочный кадр, чтобы не тратить ресурсы сети впустую, продолжая передачу по сети. Если необходимо исправить ошибки при передаче данных на канальном уровне (то есть канальный уровень должен не только обнаруживать, но и исправлять ошибки), то для исправления ошибок используется надежный протокол передачи. Такой подход усложняет протокол на канальном уровне. - физический слой
Единицей данных, передаваемых на физическом уровне, является бит. Роль физического уровня заключается в реализации прозрачной передачи битовых потоков между соседними компьютерными узлами и максимально возможном устранении различий между конкретными средами передачи и физическими устройствами. Уровень канала передачи данных выше него не должен учитывать, что является конкретной средой передачи сети. «Прозрачный битовый поток передачи» означает, что битовый поток, передаваемый реальной схемой, не изменился, и эта схема кажется невидимой для передаваемого битового потока.
Среди различных протоколов, используемых в Интернете, наиболее важными и наиболее известными являются протоколы TCP/IP. Термин TCP/IP, который сейчас часто упоминают, не обязательно относится к двум конкретным протоколам TCP и IP, но часто относится ко всему семейству протоколов TCP/IP, используемых в Интернете.
Трехстороннее рукопожатие TCP и четырехсторонняя волна
Процесс создания TCP и процесс переноса ссылок автоматически создаются стеком протоколов TCP/IP. Таким образом, разработчикам не нужно контролировать этот процесс, но это очень помогает понять основной механизм работы TCP.
TCP устанавливает соединение
Установление TCP-соединения, так называемое трехстороннее рукопожатие (Three-way Handshake), означает, что при установлении TCP-соединения клиенту и серверу необходимо отправить в общей сложности 3 пакета. Конкретный процесс выглядит следующим образом:
- Клиент отправляет пакет с флагом SYN - рукопожатие - сервер;
- Сервер отправляет пакет данных с флагом SYN/ACK – два рукопожатия – клиент;
- Клиент отправляет пакет с флагом ACK — трехстороннее рукопожатие — сервер.
Трехстороннее рукопожатие TCP, что, если рукопожатий два?
Если это двустороннее рукопожатие, то возникает такая ситуация, когда А отправляет сообщение Б, но по сетевым причинам сообщение блокируется на определенном узле, и тогда время блокировки превышает установленное время, А будет думайте, что сообщение потеряно. , затем отправьте сообщение повторно. Когда связь между A и B завершена, сообщение о том, что A считает недействительным, достигает B.
Для B, думая, что это новое сообщение ссылки на запрос, отправляет подтверждение A. Для A он считает, что не отправил сообщение B снова (поскольку последний вызов закончился), поэтому A проигнорирует это подтверждение от B, но B всегда будет ждать сообщения от A. Это приводит к тому, что время B тратится впустую (для сервера такие ресурсы, как ЦП, являются пустой тратой), что невыполнимо, поэтому невозможно дважды пожать друг другу руки.
Поэтому с пересмотром трехэтапного рукопожатия третье рукопожатие может показаться избыточным, но это не так.В основном это сделано для предотвращения внезапной передачи на сервер сбоя сегмента запроса, что приводит к неправильной оценке соединения .
TCP закрыть соединение
Для разрыва соединения TCP требуется отправить четыре пакета, отсюда и название «четырехстороннее рукопожатие». Либо клиент, либо сервер могут активно инициировать действие «махание рукой».
- Клиент отправляет FIN, чтобы закрыть передачу данных от клиента к серверу;
- Сервер получает этот FIN и отправляет обратно ACK, подтверждая, что порядковый номер равен полученному порядковому номеру плюс 1. Как и SYN, FIN занимает порядковый номер;
- Сервер закрывает соединение с клиентом и отправляет клиенту FIN;
- Клиент отправляет обратно подтверждение сообщения ACK и устанавливает порядковый номер подтверждения равным полученному порядковому номеру плюс 1.
Почему для установления соединения требуется трехстороннее рукопожатие, а для закрытия — четырехстороннее?
Когда соединение установлено, поскольку сервер находится в состоянии LISTEN, после получения сообщения SYN для запроса на установление соединения он помещает ACK и SYN в одно сообщение и отправляет его клиенту.
При закрытии соединения, при получении сообщения FIN от другой стороны, это означает только то, что другая сторона больше не отправляет данные, но может получить квитанцию.Мы не можем отправлять все данные другой стороне, поэтому мы можем немедленно закрыть или отправить некоторые данные.После отправки другой стороне отправьте сообщение FIN другой стороне, чтобы выразить согласие закрыть соединение. Поэтому наши ACK и FIN обычно отправляются отдельно.
Зачем нужно состояние TIME_WAIT?
Из отношения перехода состояния при закрытии TCP-соединения видно, что сторона, которая активно закрылась, войдет в состояние TIME_WAIT после отправки сообщения ACK на сообщение FIN другой стороны. Состояние TIME_WAIT также известно как состояние 2MSL.
Что такое 2МСЛ? MSL означает «Максимальное время жизни сегмента», которое является максимальным временем жизни сообщения, цитируя слова в «Подробном объяснении TCP/IP»: это (MSL) — это самое продолжительное время в сети до того, как какой-либо сегмент сообщения будет отброшен. Тогда 2MSL на этот раз в 2 раза больше. В конце концов, сторона, которая считается активно закрытой, будет продолжать ждать в течение определенного периода времени (2-4 минуты), чтобы завершить приложения на обоих концах.
Зачем нужно состояние TIME_WAIT:
- Для реализации надежного выпуска TCP это полнодуплексное соединение
Это позволяет TCP снова отправить последний ACK в случае потери ACK (другая сторона истечет время ожидания и повторно отправит последний FIN).Другим последствием этого ожидания 2MSL является то, что TCP-соединение во время ожидания 2MSL определяет сокет для соединения ( IP-адрес и номер порта клиента, IP-адрес сервера и номер порта) больше нельзя использовать. Это соединение можно использовать только после истечения срока действия 2MSL. - Для того, чтобы старые пакеты пропадали в сети из-за истечения срока действия
Каждая конкретная реализация TCP ДОЛЖНА выбрать максимальное время жизни сегмента MSL. Это максимальное время в сети, прежде чем какой-либо сегмент будет отброшен.
Эффекты статуса TIME_WAIT:
Когда один конец соединения находится в состоянии TIME_WAIT, соединение больше нельзя использовать. На самом деле для нас более реально, что этот порт больше не будет использоваться. Когда порт находится в состоянии TIME_WAIT (на самом деле это должно быть это соединение), это означает, что TCP-соединение не разорвано (полностью разъединено), тогда, если вы привяжете этот порт, произойдет сбой. Что касается сервера, то, если сервер внезапно выйдет из строя, он не сможет перезапуститься в течение 2MSL, поскольку привязка завершится ошибкой. Одним из способов решения этой проблемы является установка параметра сокета SO_REUSEADDR. Эта опция означает, что вы можете повторно использовать адрес.
Как протокол TCP гарантирует надежную передачу
Основными методами протокола TCP для обеспечения надежности передачи данных являются следующие:
- Контрольная сумма: TCP будет хранить контрольную сумму своего заголовка и данных. Это сквозная контрольная сумма для обнаружения любых изменений в передаваемых данных. Если в контрольной сумме полученного сегмента есть ошибка, TCP отбрасывает сегмент и не подтверждает получение сегмента.
- Подтверждающий ответ + порядковый номер (кумулятивное подтверждение + последовательность). Когда получатель получает сообщение, он подтверждает (кумулятивное подтверждение: подтверждение всех данных, полученных последовательно), TCP нумерует каждый отправленный пакет, получатель сортирует пакеты данных и передает упорядоченные данные на прикладной уровень. Принимающая сторона TCP отбрасывает повторяющиеся данные.
- Управление потоком: каждая сторона соединения TCP имеет буферное пространство фиксированного размера, и получатель TCP позволяет отправителю отправлять только те данные, которые может вместить буфер получателя. Когда получатель слишком поздно обрабатывает данные отправителя, он может предложить отправителю снизить скорость отправки, чтобы предотвратить потерю пакетов. Протокол управления потоком, используемый TCP, представляет собой протокол скользящего окна переменного размера. (TCP использует скользящее окно для управления потоком)
- Контроль перегрузки: когда сеть перегружена, уменьшите отправку данных.
- Протокол остановки-ожидания также предназначен для обеспечения надежной передачи, его основной принцип заключается в том, чтобы прекращать отправку каждый раз, когда отправляется пакет, и ждать подтверждения другой стороны. Отправить следующий пакет после получения подтверждения.
- Тайм-аут повторной передачи: когда TCP отправляет сегмент, он запускает таймер и ожидает, пока пункт назначения подтвердит получение сегмента. Если подтверждение не может быть получено вовремя, сегмент будет отправлен повторно.
HTTP и HTTPS
Базовые концепты
HTTP: это наиболее широко используемый сетевой протокол в Интернете. Это клиентский и серверный стандарт запросов и ответов (TCP). Он используется для передачи гипертекста с WWW-сервера в локальный браузер. более эффективным, что приводит к меньшему количеству сетевых передач.
HTTPS: это HTTP-канал, предназначенный для обеспечения безопасности. Короче говоря, это безопасная версия HTTP, то есть к HTTP добавляется слой SSL. Основой безопасности HTTPS является SSL, поэтому для подробного содержания шифрования требуется SSL. Основные функции протокола HTTPS можно разделить на два типа: одна — установление канала защиты информации для обеспечения безопасности передачи данных, другая — подтверждение подлинности веб-сайта.
Разница между HTTPS и HTTP
- Протокол https должен идти в центр сертификации, чтобы подать заявку на сертификат.Как правило, бесплатных сертификатов мало, поэтому требуется определенная плата.
- http — это протокол передачи гипертекста, информация передается в виде открытого текста, а https — безопасный протокол передачи с шифрованием ssl.
- http и https используют совершенно разные методы подключения и используют разные порты: первый — 80, а второй — 443.
- Соединение http очень простое и без сохранения состояния; протокол HTTPS — это сетевой протокол, созданный протоколом SSL + HTTP для зашифрованной передачи и аутентификации, который более безопасен, чем протокол http.
Код состояния для ответа HTTP
Как разработчик программы, вы должны очень хорошо знать значение HTTP-статуса, возвращаемого некоторыми серверами, и только разъясняя эти коды состояния один за другим, вы сможете с легкостью справиться с различными проблемами, возникающими в работе. Итак, давайте взглянем на более распространенные коды состояния HTTP!
-
1xx - Информационная подсказка Эти коды состояния указывают на предварительные ответы. Клиенты должны быть готовы получить один или несколько ответов 1xx перед получением обычного ответа. как:
- 100: Продолжить. Первоначальный запрос принят, и клиент должен продолжить отправку остальной части запроса. (Новое в HTTP 1.1)
- 101: Переключение протоколов Сервер выполнит запрос клиента на преобразование в другой протокол (HTTP 1.1 новый)
-
2хх - успех Этот тип кода состояния указывает, что сервер успешно принял запрос клиента.
- 200 - OK Все в порядке, следуют документы ответа на запросы GET и POST. - 201 - Created Сервер создал документ, и в заголовке Location указан его URL-адрес.
- 202 - Accepted Запрос принят, но обработка еще не завершена.
-
3xx - перенаправление Браузер клиента должен предпринять дополнительные действия для выполнения запроса. Например, браузеру может потребоваться запросить другую страницу на сервере или повторить запрос через прокси-сервер. Например, 304 не изменено
-
4xx — ошибка клиента Произошла ошибка, и у клиента возникла проблема. Например, клиент запрашивает несуществующую страницу, и клиент не предоставил действительные данные для проверки подлинности. как:
- 400 - Bad Request В запросе есть синтаксическая ошибка.
- 401 - Отказано в несанкционированном доступе, Клиент попытался получить несанкционированный доступ к защищенной паролем странице.
-
5xx - ошибка сервера Сервер не смог выполнить запрос из-за ошибки. как:
- 500 — Внутренняя ошибка сервера Сервер обнаружил непредвиденное состояние и не смог выполнить запрос клиента.
- 502 — Bad Gateway Когда сервер работал в качестве шлюза или прокси-сервера, он достиг следующего сервера, чтобы выполнить запрос, но сервер вернул неверный ответ.
Длинное соединение HTTP, короткое соединение
Короткие соединения используются по умолчанию в HTTP/1.0. То есть каждый раз, когда клиент и сервер выполняют HTTP-операцию, устанавливается соединение, которое разрывается при завершении задачи. Когда веб-страница определенного HTML или другого типа, к которой обращается клиентский браузер, содержит другие веб-ресурсы (такие как файлы JavaScript, файлы изображений, файлы CSS и т. д.), каждый раз, когда встречается такой веб-ресурс, браузер будет заново создавать сеанс HTTP. Начиная с HTTP/1.1, постоянные соединения используются по умолчанию для поддержания характеристик соединения. Используя протокол HTTP с длинным подключением, эта строка кода будет добавлена в заголовок ответа:
Connection:keep-alive
В случае использования длительного соединения при открытии веб-страницы TCP-соединение, используемое для передачи HTTP-данных между клиентом и сервером, не будет закрыто, при повторном обращении клиента к серверу он продолжит использовать установленное связь. . Keep-Alive не сохраняет соединение навсегда, у него есть время удержания, которое можно установить в другом серверном программном обеспечении (например, в Apache). Реализация постоянного соединения требует, чтобы и клиент, и сервер поддерживали постоянные соединения.