[Внешний словарь] Сетевая основа необходима для продвинутых (1)

внешний интерфейс JavaScript

предисловие

Еще несколько лет назад фронтовику, гуляющему по рекам и озерам, достаточно было знать «Трех мушкетеров фронтенда», чтобы устроиться на работу. Многие интерфейсы ограниченыCSS,HTML、JS, сетевая основа, структуры данных и тому подобное не совсем понятны. Тем не менее, интерфейс этого периода также является самым презираемым периодом, большая часть работы над интерфейсом в этот период опирается на серверную часть и не требует анимационных эффектов и интерактивных эффектов.

Теперь передний круг претерпел потрясающие изменения.Vue,React,ES6,HTML5,CSS3,Webpack, PostCssи другие технологии появляются бесконечным потоком. Как клиент с шаблоном, вы должны иметь четкое представление об основах сети.

Если вы мало знаете об основах Интернета, следующий контент может дать вам идею; если вы уже это понимаете, раскритикуйте и исправьте следующий контент.

Введите вопрос

Рождение чего-либо изначально должно служить очень небольшому числу людей. Постепенно он популяризировался этими очень немногими людьми, и его стала понимать широкая публика.Интернет таков, как и Маджонг. Будь то Интернет или маджонг, они улучшили общение между людьми. Далее я расскажу о следующем:

  1. Пятиуровневый стек интернет-протокола
  2. Разница между HTTP и HTTPS
  3. протокол TCP/IP
  4. Три рукопожатия и четыре волны
  5. Разрешение доменного имени DNS
  6. Пять типов IP-адресов
  7. Причины кроссдоменности и как с ними бороться
  8. Прямой прокси и обратный прокси
  9. Оптимизация производительности благодаря CDN
  10. HTTP Strong Cache и кэш согласования

Об этом я расскажу 1 ~ 5, 6 ~ 10 я расскажу о следующем.

Пятиуровневый стек интернет-протокола TOP

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

1. Прикладной уровень

Задача прикладного уровня (application-layer) состоит в том, чтобы выполнить конкретное сетевое приложение посредством взаимодействия между прикладными процессами. Протокол прикладного уровня определяет правила связи и взаимодействия между прикладными процессами (процессами: программами, работающими на хосте). Для разных сетевых приложений требуются разные протоколы прикладного уровня. В Интернете существует множество протоколов прикладного уровня, таких как система доменных имен DNS, протокол HTTP, поддерживающий приложения World Wide Web, протокол SMTP, поддерживающий электронную почту, и так далее.

Мы называем блок данных, с которым взаимодействует прикладной уровень, сообщением.

система доменных имен

Система доменных имен (Domain Name System) — этоосновные услуги, как распределенная база данных, которая может сопоставлять доменные имена и IP-адреса друг с другом, она может упростить доступ людей в Интернет без необходимости запоминать строки IP, которые могут быть напрямую прочитаны машинами.

http-протокол

Протокол передачи гипертекста (HyperText Transfer Protocol) — наиболее широко используемый сетевой протокол в Интернете. Все документы WWW (World Wide Web) должны соответствовать этому стандарту.

Во-вторых, транспортный уровень

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

Два протокола, обычно используемые на транспортном уровне

  1. Протокол управления передачей-TCP: Предоставляет надежные услуги передачи данных, ориентированные на соединение.
  2. Протокол пользовательских данных — UDP: обеспечивает передачу данных без установления соединения с максимальной эффективностью (надежность передачи данных не гарантируется).

TCP (протокол управления передачей)

  1. TCP ориентирован на соединение (сначала необходимо установить соединение);
  2. Каждое соединение TCP может иметь только две конечные точки, и каждое соединение TCP может быть только взаимно-однозначным;
  3. TCP обеспечивает надежную доставку услуг. Данные, передаваемые по TCP-соединению, безошибочны, не теряются, не дублируются и поступают последовательно;
  4. TCP обеспечивает полнодуплексную связь. TCP позволяет приложениям на обеих сторонах связи отправлять данные в любое время. Оба конца соединения TCP оснащены буфером отправки и буфером приема, которые используются для временного хранения данных, передаваемых между двумя сторонами;
  5. Ориентирован на байтовые потоки. «Поток» в TCP относится к последовательности байтов, поступающих в процесс или исходящих из него.

UDP (протокол пользовательских дейтаграмм)

  1. UDP не требует установления соединения;
  2. UDP — это доставка с наилучшими усилиями, т. е. надежная доставка не гарантируется, поэтому хосту не нужно поддерживать сложное состояние канала;
  3. UDP ориентирован на сообщения;
  4. UDP не контролирует перегрузку, поэтому перегрузка сети не снизит скорость отправки хоста-источника (полезно для приложений реального времени, таких как прямые трансляции, видеоконференции в реальном времени и т. д.);
  5. UDP поддерживает интерактивную связь «один к одному», «один ко многим», «многие к одному» и «многие ко многим»;
  6. Заголовок UDP имеет небольшие служебные данные, всего 8 байтов, что короче 20-байтового заголовка TCP.
  1. Симплексная передача данных поддерживает передачу данных только в одном направлении
  2. Полудуплексная передача данных позволяет передавать данные в обоих направлениях, но в определенный момент позволяет передавать данные только в одном направлении, что на самом деле является симплексной связью, которая переключает направления;
  3. Полнодуплексная передача данных позволяет передавать данные в обоих направлениях одновременно, поэтомуПолнодуплексная связь представляет собой комбинацию двух методов симплексной связи, которая требует, чтобы и передающее, и принимающее устройства имели независимые возможности приема и отправки.

3. Сетевой уровень

Задачей сетевого уровня является выбор соответствующих узлов маршрутизации и коммутации между сетями для обеспечения своевременной передачи данных компьютерной связи. При отправке данных сетевой уровень инкапсулирует сегменты или пользовательские дейтаграммы, сгенерированные транспортным уровнем, в пакеты и пакеты для передачи. В архитектуре TCP/IP, поскольку сетевой уровень использует протокол IP, пакеты также называются дейтаграммами IP или дейтаграммами для краткости.

Интернет состоит из большого количества разнородных сетей, соединенных между собой маршрутизаторами. Протокол сетевого уровня, используемый в Интернете, представляет собой Интернет-протокол без установления соединения (Intert Prococol) и множество протоколов маршрутизации, поэтому сетевой уровень Интернета также называют Интернет-уровнем или IP-уровнем.

В-четвертых, канальный уровень

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

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

5. Физический уровень

Единицей данных, передаваемых на физическом уровне, является бит. Роль физического уровня заключается в реализации прозрачной передачи битовых потоков между соседними компьютерными узлами и максимально возможном устранении различий между конкретными средами передачи и физическими устройствами. Уровень канала передачи данных выше него не должен учитывать, что является конкретной средой передачи сети. «Прозрачная передача потока битов» означает, что поток битов, передаваемый реальной схемой, не изменился, и цепь кажется невидимой для передаваемого потока битов. Наиболее важным и известным из различных протоколов, используемых в Интернете, является TCP/IP.

Отличие от модели семиуровневого протокола OSI и четырехуровневой модели TCP/IP

  1. Семиуровневая модель OSI
    Семиуровневая модель протокола OSI в основном состоит из:
    Прикладной уровень (Application), уровень представления (Presentation), сеансовый уровень (Session), транспортный уровень (Transport), сетевой уровень (Network), канальный уровень (Data Link), физический уровень (Physical).

  2. Четырехуровневая модель TCP/IP
    TCP/IP представляет собой четырехуровневую архитектуру, которая в основном включает:
    Прикладной уровень, транспортный уровень, сетевой уровень и канальный уровень.

Соответствующий каждому слою

Следующая картинка хорошо иллюстрирует разницу между этими тремя протоколами.

Разница между HTTP и HTTPS TOP

разница HTTP HTTPS
протокол Работа поверх TCP, передача открытого текста,Ни клиент, ни сервер не могут аутентифицировать личность друг друга. HTTP с оболочкой SSL (Secure Socket Layer) работает на SSL, SSL работает на TCP,HTTP с добавлением шифрования и аутентификации.
порт 80 443
НЧ меньше Из-за обработки шифрования и дешифрования он будет потреблять больше ресурсов ЦП и памяти.
над головой Сертификат не требуется Требуется сертификат, который обычно необходимо приобретать в органе по сертификации.
механизм шифрования никто Гибридный механизм шифрования с использованием шифрования с общим ключом и шифрования с открытым ключом
безопасность слабый Высокая безопасность благодаря механизму шифрования

Симметричное и асимметричное шифрование

Шифрование с симметричным ключом относится к способу шифрования и дешифрования с использованием одного и того же ключа.Самая большая проблема с этим методом — это проблема отправки ключа, то есть, как безопасно отправить ключ другой стороне;
Под асимметричным шифрованием понимается использование пары асимметричных ключей, то есть открытого ключа и закрытого ключа.Открытый ключ может быть выпущен по желанию, но закрытый ключ известен только вам. Сторона, отправляющая зашифрованный текст, использует открытый ключ другой стороны для обработки шифрования, и после того, как другая сторона получит зашифрованную информацию, она расшифрует ее, используя свой собственный закрытый ключ.
Поскольку метод асимметричного шифрования не требует отправки закрытого ключа для расшифровки, он может обеспечить безопасность, но по сравнению с симметричным шифрованием он очень медленный.

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

HTTP2

HTTP2 может улучшить производительность веб-страниц.

В HTTP1 браузер ограничивает количество запросов под одним доменным именем (обычно шесть в Chrome), когда запрашивается много ресурсов, когда браузер достигает максимального количества запросов из-за блокировки заголовка, оставшиеся ресурсы должны дождаться текущего запроса. Не может быть инициирован, пока шесть запросов не будут выполнены.

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

протокол TCP/IP TOP

IP-протокол, отвечающий за транспорт

Согласно уровням, Интернет-протокол (IP) расположен на сетевом уровне, и функция протокола IP заключается в передаче различных пакетов данных другой стороне. Чтобы убедиться, что он действительно передан другой стороне, должны быть выполнены различные условия, два из которых — это IP-адрес и MAC-адрес (адрес управления доступом к среде).

IP-адрес и MAC-адрес: укажите адрес, которому назначен узел, MAC-адрес относится к фиксированному адресу, которому принадлежит сетевая карта, и IP-адрес может быть связан с MAC-адресом.IP-адрес можно изменить, но MAC-адрес принципиально не меняется.

Связь по MAC-адресу с использованием протокола ARP

  1. Связь между IP-адресами зависит от MAC-адресов.
  2. ARP — это протокол интерпретации адресов, по IP-адресу общающейся стороны можно узнать MAC-адрес соответствующей стороны.

Как протокол TCP поддерживает надежность передачи

TCP предоставляет надежную службу потока байтов, ориентированную на соединение.
1. Ориентированность на подключение
Это означает, что два приложения, использующие TCP (обычно клиент и сервер), должны установить TCP-соединение перед обменом данными друг с другом. В TCP-соединении только две стороны взаимодействуют друг с другом;
2. Служба байтового потока
Это означает, что два приложения обмениваются потоком 8-битных байтов через TCP-соединение, и TCP не вставляет идентификаторы записей в поток байтов.

Причина, по которой TCP надежен, обычно связана со следующими причинами:

  1. Проверка пакета: Цель состоит в том, чтобы обнаружить любые изменения в данных во время передачи. Если при проверке пакета возникает ошибка, пакет будет отброшен, и ответ не будет дан. В это время TCP повторно передаст данные после время ожидания терминала данных истекло;
  2. Переупорядочивание неупорядоченных пакетов: поскольку сегменты TCP передаются как дейтаграммы IP, а дейтаграммы IP могут поступать не по порядку, сегменты TCP также могут приходить не по порядку. TCP переупорядочивает неупорядоченные данные перед передачей их на прикладной уровень;
  3. Отбросить дубликаты данных: для повторяющихся данных можно удалить повторяющиеся данные;
  4. Механизм подтверждения: когда TCP получает данные с другого конца соединения TCP, он отправляет подтверждение. Это подтверждение не отправляется немедленно, обычно оно задерживается на долю секунды;
  5. Тайм-аут повторной передачи: когда TCP отправляет сегмент, он запускает таймер и ожидает, пока пункт назначения подтвердит получение сегмента. Если подтверждение не может быть получено вовремя, сегмент будет отправлен повторно;
  6. Управление потоком: каждая сторона TCP-соединения имеет буферное пространство фиксированного размера. Принимающая сторона TCP позволяет другой стороне отправлять столько данных, сколько может вместить буфер получателя.Это предотвращает переполнение буферов более медленных узлов более быстрыми узлами.Это управление потоком.

Транспортный поток связи TCP/IP

Чтобы позаимствовать изображения из книги HTTP в иллюстрациях:

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

Трехстороннее рукопожатие TCP и четырехсторонняя волна TOP

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

трехстороннее рукопожатие

Первое рукопожатие:
Когда соединение установлено, на сервер отправляется сообщение с запросом на соединение, которое является той же частью в заголовке сообщения SYN = 1, и выбирается начальный порядковый номер seq = x, и клиентский процесс входит в SYN-SENT ( синхронизированное отправленное состояние) состояние, дождитесь подтверждения сервера;
Второе рукопожатие:
После того, как сервер получит син-пакет, если он согласен на подключение, он отправит подтверждающее сообщение; подтверждающее сообщение ACK = 1, SYN = 1, номер подтверждения ack = x + 1, а также инициализирует порядковый номер seq = y для себя. В этот момент серверный процесс перешел в состояние SYN-RCVD (синхронный прием);
Третье рукопожатие:
Клиент получает пакет SYN+ACK от сервера и должен передать серверу подтверждение. Подтвердите, что ACK сообщения = 1, ack = y + 1 и его собственный порядковый номер seq = x + 1. В это время устанавливается TCP-соединение, и клиент переходит в состояние ESTABLISHED (соединение установлено).

После завершения трехэтапного рукопожатия клиент и сервер начинают передавать данные.

Примечание:
seq:порядковый номер "sequence";
ack: «подтвердить» номер подтверждения;
SYN: флаг синхронизации запроса «синхронизировать»;
ACK: флаг подтверждения «подтверждения»;
FIN: флаг окончания "Наконец-то".

Нескрыванная очередь
В протоколе трехэтапного рукопожатия сервер поддерживает несвязанную очередь, которая открывает запись для каждого SYN-пакета клиента (syn=j), что указывает на то, что сервер получил SYN-пакет, и отправляет подтверждение клиенту, ожидая пакет подтверждения клиента. Соединение, идентифицируемое этими записями, находится на сервере в состоянии SYN_RECV.Когда сервер получает пакет подтверждения от клиента, запись удаляется, и сервер переходит в состояние ESTABLISHED.

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

помахал четыре раза

Первая волна:
Клиентский процесс отправляет сообщение об освобождении соединения и прекращает отправку данных. Освободить заголовок информационного сообщения FIN=1, а его порядковый номер равен seq=u (равен порядковому номеру последнего байта ранее переданных данных плюс 1), в это время клиент вводит FIN-WAIT-1 (прекращение ожидания 1 )состояние.

Вторая волна:
Сервер получает сообщение об освобождении соединения, отправляет подтверждающее сообщение, ACK=1, ack=u+1 и выводит свой серийный номер seq=v. В это время сервер входит в состояние CLOSE-WAIT (ожидание закрытия).

Сервер TCP уведомляет высокоуровневый процесс приложения, и клиент освобождается в сторону сервера, в это время он находится в полузакрытом состоянии, то есть у клиента нет данных для отправки, но если сервер отправляет данные, клиент все равно должен их принять. Это состояние будет продолжаться в течение определенного периода времени, то есть продолжительности всего состояния CLOSE-WAIT.
После того, как клиент получает запрос подтверждения от сервера, в это время клиент входит в состояние FIN-WAIT-2 (ожидание завершения 2), ожидая отправки сервером сообщения об освобождении соединения (перед этим ему необходимо принять последние данные, отправленные сервером).

Третья волна:
После того, как сервер отправил последние данные, он отправит клиенту сообщение об освобождении соединения, FIN = 1, ack = u + 1, поскольку он находится в полузакрытом состоянии, сервер, скорее всего, отправит какие-то данные, предполагая серийный номер в это время Для seq = w, в это время сервер входит в состояние LAST-ACK (последнее подтверждение), ожидая подтверждения клиента.

Четвертая волна:
После того, как клиент получит от сервера сообщение об освобождении соединения, он должен отправить подтверждение, ACK = 1, ack = w + 1, а его собственный серийный номер — seq = u + 1. В это время клиент входит в режим TIME-WAIT. ( время ожидания) состояние.

Обратите внимание, что в настоящее время TCP-соединение не было разорвано.По истечении 2MSL (максимального времени жизни сегмента) клиент перейдет в состояние CLOSED после отзыва соответствующего TCB.

Сервер переходит в состояние CLOSED, как только получает подтверждение от клиента. Точно так же после отзыва TCB это TCP-соединение завершается.

Как видите, сервер завершает TCP-соединение раньше, чем клиент.

четыре причины

Это связано с тем, что когда SOCKET в состоянии LISTEN сервера получает запрос на установление соединения сообщения SYN, он может отправить ACK и SYN (ACK действует как ответ, а SYN действует как синхронизация) в одном пакете для отправки. Но при закрытии соединения, когда вы получаете уведомление о FIN-сообщении другой стороны, это означает только то, что у другой стороны нет данных для отправки вам; но не все ваши данные отправляются другой стороне, поэтому вы не можете сразу закрыть SOCKET. , а также То есть вам все еще может потребоваться отправить некоторые данные другой стороне, а затем отправить другой стороне сообщение FIN, чтобы указать, что вы согласны с тем, что соединение может быть закрыто сейчас, поэтому сообщение ACK и сообщение FIN здесь отправляются отдельно в большинстве случаев.

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

Разрешение доменного имени DNS TOP

При вводе в адресной строке браузераhttps://juejin.cnЧто будет в будущем, у всех должно быть общее представление в душе, здесь яРазрешение доменного имени DNSЭтот шаг подробно описан. Прежде чем я расскажу о концепции, я поставлю классическую картинку и текст, чтобы все подумали минутку.

Конкретный процесс поиска IP-адреса, соответствующего доменному имени

  1. Браузер ищет в собственном кэше DNS (браузер ведет таблицу соответствий между доменными именами и IP-адресами), если совпадений нет, переходим к следующему шагу;
  2. Поиск DNS-кэша в операционной системе, если совпадения нет, переходим к следующему шагу;
  3. Поиск в файле hosts операционной системы (в среде Windows вести таблицу соответствий между доменными именами и IP-адресами), если совпадения нет, переходим к следующему шагу;
  1. Операционная система отправляет доменное имя на LDNS (локальный сервер имен зон), а LDNS запрашивает свой собственный DNS-кэш (как правило, процент совпадений составляет около 80%). Если поиск успешен, он возвращает результат. , он инициирует повторяющийся запрос разрешения DNS:
  2. LDNS инициирует запрос к корневому серверу имен (корневой сервер имен доменов, например, адрес сервера доменных имен верхнего уровня com, net, im и т. д.), где корневой сервер имен возвращает адрес верхнего уровня. сервер доменных имен -уровня домена im;
  3. LDNS инициирует запрос к серверу доменных имен верхнего уровня домена im и возвращает адрес сервера доменных имен juejin.im;
  4. LDNS инициирует запрос к серверу доменных имен juejin.im для получения IP-адреса juejin.im;
  5. LDNS возвращает полученный IP-адрес операционной системе, а также кэширует сам IP-адрес, операционная система возвращает IP-адрес браузеру, а также кэширует сам IP-адрес.

DNS Prefetch

То есть предварительная выборка DNS, которая является частью внешней оптимизации. Вообще говоря, есть два момента, связанных с DNS во внешней оптимизации:

  1. Уменьшить DNS-запросы
  2. Выполнить предварительную выборку DNS

Типичное разрешение DNS занимает 20–120 миллисекунд, что является хорошей оптимизацией для сокращения времени и времени разрешения DNS. Предварительная выборка DNS позволяет разрешать доменное имя с этим атрибутом в фоновом режиме без нажатия пользователем ссылки, а разрешение доменного имени и загрузка содержимого являются последовательными сетевыми операциями, поэтому этот метод может сократить время ожидания пользователя и улучшить взаимодействие с пользователем. .

Пять типов IP-адресов TOP

смотрите подробностиСледующий

Причины кроссдоменности и как с ними бороться TOP

смотрите подробностиСледующий

Прямой прокси и обратный прокси TOP

смотрите подробностиСледующий

Оптимизация производительности благодаря CDN TOP

смотрите подробностиСледующий

HTTP Strong Cache и кэш согласования TOP

смотрите подробностиСледующий

Если вы дочитали ее, этого недостаточно, я рекомендую вам прочитать две статьи, которые я написал о наследовании, После прочтения у вас должно появиться новое понимание.
[Внешний словарь] Наследование (1) - Вы знаете, что спросил интервьюер?
[Внешний словарь] Наследование (2) - Восемь способов написать ответ · Вопросы для интервью

Ссылаться на

  1. «Иллюстрированный HTTP»
  2. «Основы компьютерной сети».
  3. blog.CSDN.net/where overspeed/art IC…
  4. сегмент fault.com/ah/119000001…
  5. developer.Mozilla.org/this-cn/docs/…

Серия интерфейсных словарей

Серия «Front-end Dictionary» будет постоянно пополняться, и в каждом выпуске я буду рассказывать о точке знаний, которая появляется все чаще. Надеюсь, что в процессе прочтения в тексте будут неточности или ошибки, буду очень признательна, если что-то почерпну из этой серии, тоже буду очень рада.

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

Вы также можете добавить мой WeChat wqhhsd, добро пожаловать в общение.

следующее уведомление

[Внешний словарь] Сетевая основа необходима для продвинутых (ниже)

портал

  1. [Интерфейсный словарь] Неожиданная удача после разговора с невесткой об агентстве
  2. [Front-end Dictionary] Решение проблемы проникновения прокрутки
  3. Наследование (1) — Вы действительно понимаете цепочку прототипов?
  4. [Внешний словарь] Наследование (2) - Восемь способов написать ответ · Вопросы для интервью
  5. [Внешний словарь] Сетевая основа необходима для продвинутых (ниже)