написать впереди
Как программисты, мы каждый день имеем дело с сетевыми запросами, а программисты переднего плана больше всего подвержены HTTP-запросам. В обычной работе таких операций, как обработка сетевых запросов, больше всего. Тем не менее, основные детали замкнутого цикла, в котором запрос отправляется от клиента для обработки сервером, отправки обратно и получения клиентом, возможно, не были подробно изучены.Эта статья является моей заметкой для прочтения. процесс, я надеюсь, что он может вдохновить всех.
Если какие-то моменты в тексте неверны, укажите на них, буду очень признателен.
Начните с классического вопроса интервью
Процесс от ввода URL до представления страницы
- После ввода URL сначала будет выполнено разрешение доменного имени. Сначала проверьте, имеет ли локальный файл хоста соответствующий IP-адрес. Если нет, перейдите на локальный DNS-сервер, чтобы найти его. Если нет, локальный DNS-сервер найдет корневой DNS-сервер и запросит адрес доменного сервера для запроса , и сервер домена запросит разрешение доменного имени. Адрес сервера возвращается в локальный DNS, и локальный DNS может запросить здесь.
- После того, как браузер получает IP-адрес сервера, он отправляет ему HTTP-запрос. После того, как HTTP-запрос обработан, инкапсулирован и отправлен слой за слоем, он, наконец, достигает сервера по сети, устанавливает соединение TCP/IP, и сервер получает запрос и начинает обработку.
- Сервер формирует ответ, и после послойной обработки, инкапсуляции и отправки он достигает клиента, а браузер обрабатывает запрос.
- Браузер начинает рендерить страницу, анализирует HTML, строит дерево рендеринга, компонует и рисует страницу в соответствии с соответствующей взаимосвязью между узлами дерева рендеринга и CSS.
Эти 4 шага охватывают полный жизненный цикл HTTP-запроса. В статье основное внимание уделяется шагам 2 и 3, которые определяют, как запрос передается между двумя физическими конечными точками. Отправка и получение данных неизбежно будут проходить через некоторые процессы обработки и разбора, и эти процессы выполняются на разных уровнях системы.
Слоистый
Процесс обработки HTTP-запроса от источника до приема на терминале проходит через следующие четыре уровня. Каждый из этих уровней имеет свой собственный протокол.
Давайте сначала разберемся, что такое соглашение.Соглашение — это правило, согласованное, признанное обеими сторонами, которое необходимо соблюдать. Каждый из вышеперечисленных уровней имеет свой собственный протокол, и исполнителем протокола является соответствующий уровень на обоих концах канала связи. Каждый уровень понимает данные через протоколы и обрабатывает их.
На приведенном выше рисунке показаны только наиболее распространенные протоколы, фактически каждый уровень подразделяется на несколько протоколов:
- Прикладной уровень: приложение отвечает за упаковку данных с соответствующими правилами (протоколами) и отправку их на транспортный уровень.
- HTTP: протокол передачи гипертекста
- FTP: протокол передачи файлов
- SMTP: простой протокол передачи почты
- SNMP: простой протокол управления сетью
- Транспортный уровень: отвечает за группировку данных, передаваемых с прикладного уровня.Чтобы обеспечить порядок и целостность данных, полученных терминалом, каждая группа будет помечена и передана сетевому уровню.
- TCP: протокол управления передачей
- UDP: протокол пользовательских данных
- Сетевой уровень: отвечает за отправку пакетов данных с транспортного уровня на целевой терминал.
- IP: интернет-протокол
- ICMP: Интернет-протокол управления сообщениями в Интернете
- IGMP: протокол управления группами Интернета
- IP: интернет-протокол
- Канальный уровень: отправка и получение блоков данных для сетевого уровня.
- ARP: протокол разрешения адресов
- RARP: протокол обратного разрешения адресов
Упаковка и дозирование
Когда данные проходят через каждый уровень, они должны быть упакованы соответствующим протоколом, а когда они достигают терминала, их нужно распаковывать слой за слоем. Эти два процесса называются инкапсуляцией и выводом из эксплуатации.
При отправке пользовательские данные инкапсулируются в сообщение по HTTP, и каждый уровень будет использовать сообщение от верхнего уровня как блок данных этого уровня, и добавлять свой заголовок, который содержит идентификатор протокола, и все это используется как сообщение этого слоя.
При приеме данные идут снизу вверх, и заголовок сообщения удаляется при прохождении через каждый уровень, и правильный протокол верхнего уровня определяется в соответствии с идентификатором сообщения, и, наконец, он обрабатывается прикладной программой на уровне приложения. слой.
упаковка
Когда источник отправляет HTTP-сообщение, сообщение будет передано последовательно через открытое TCP-соединение в виде потока данных.После получения потока данных TCP разделит его на небольшие блоки данных, и каждый небольшой блок будет добавлен. Заголовок TCP и блок данных вместе образуют пакет TCP. Пакет отправляется через сетевой уровень. Сетевой уровень следует протоколу IP. Когда получен запрос на отправку пакета, он помещает пакет в дейтаграмму IP, заголовок и отправить дейтаграмму по цепочке.Дорожный уровень отправляется.
Когда этот процесс проходит через каждый уровень, будет добавлена некоторая информация заголовка, а иногда необходимо добавить информацию хвоста.Каждый уровень будет инкапсулировать данные в свое собственное сообщение. И добавьте идентификатор протокола в заголовок сообщения, этот процесс называется инкапсуляцией.
доля
Когда терминал получает кадр данных Ethernet, данные передаются вверх от нижнего уровня, а заголовок сообщения, добавленный протоколами каждого уровня, удаляется.При правильной обработке этот процесс называется разделением.
После того, как терминал получает запрос данных от канального уровня, он переходит на сетевой уровень для анализа данных и передает их на транспортный уровень для проверки порядка и целостности пакетов, извлечения данных из блока данных и получения HTTP-сообщение, которое передается на прикладной уровень для обработки. Этот процесс удаляет заголовок слой за слоем, чтобы восстановить данные.
Послойный анализ
Мы уже знаем, что данные обрабатываются слой за слоем от исходного конца до конца снизу вверх Теперь давайте посмотрим, что делает каждый слой.
HTTP
HTTP относится к прикладному уровню.Данные о поведении, сгенерированные взаимодействием, инициируемым пользователем, и ответ сервера на него инкапсулируются в пакеты HTTP, а затем передаются протоколу нижнего уровня для обработки. Роль сообщения — это коммуникационный носитель между клиентом и сервером.Оба стороны должны следовать единым правилам обработки информации.Это правило называется HTTP.
Взаимодействие между клиентом и сервером часто бывает очень сложным.Чтобы обе стороны могли эффективно, четко и безопасно общаться (например, передавать намерения и статус, передавать данные, передавать информацию об аутентификации, управлять поведением соединения и кэшировать), необходимо полагаться на структуру в сообщении.Для достижения, давайте начнем со структуры.
структура сообщения
Структура HTTP-сообщения делится на два типа: запрос и ответ.Сообщение запроса инкапсулирует действие, сгенерированное операцией пользователя, и сообщает серверу, какое действие следует предпринять, а сообщение ответа информирует клиента о результате запроса.
Запросить формат пакета:
<method> <request-url> <version> // 起始行格式
<headers> // 首部
<body> // 实体
Формат сообщения ответа:
<method> <status> <reason-phrase> // 起始行格式
<headers> // 首部
<body> // 实体
стартовая линия
Стартовая строка сообщения указывает на начало сообщения, и формат стартовой строки запроса и ответа также различается.
Начальная строка сообщения запроса описывает, что делать. Структура: метод + URL-адрес запроса + версия протокола, разделенные пробелами:
GET /api/nht/blog/example HTTP/1.1
Начальная строка заголовка ответа описывает, что произошло, структура — версия протокола + код состояния + текст описания, разделенные пробелами:
HTTP/1.1 200 OK
Методы и коды состояния
Метод сообщает серверу, что делать в сообщении запроса, а код состояния информирует клиента о примерном результате после того, как сервер завершит действие согласно сообщению запроса. Общие методы HTTP следующие:
| метод | имея в виду | с предметом или без |
|---|---|---|
| GET | Получить ресурсы с сервера | без |
| HEAD | Получить только заголовок ресурса | без |
| POST | Отправить данные на сервер | имеют |
| PUT | Сохраните данные, отправленные клиентом на сервер, сценарий приложения в основном модифицируется | имеют |
| OPTIONS | Предварительно проверьте сервер, например, какие методы поддерживает сервер. | без |
| DELETE | Удалить ресурс с сервера | без |
Когда запрос будет выполнен, в ответном сообщении будет код состояния, который используется для указания статуса запроса, был ли он успешным или неудачным, или его необходимо перенаправить. Коды состояния варьируются от 100 до 599, Некоторые из них уже определены. Разные диапазоны имеют разные значения:
| Объем | определенный диапазон | имея в виду |
|---|---|---|
| 100~199 | 100~101 | уведомление о сообщении |
| 200~299 | 200~206 | успех |
| 300~399 | 300~305 | перенаправить |
| 400~499 | 400~415 | ошибка клиента |
| 500~599 | 500~505 | Ошибка сервера |
столица
Заголовок — это некоторая информация в сообщениях запроса и ответа в виде пар ключ-значение, каждая пара ключ-значение заканчивается новой строкой CRLF, которая определяет атрибуты сообщения запроса или ответа, например Content-Type указывает тип данных тела запроса , Дата указывает, когда был создан запрос. Клиент и сервер согласовывают определенное поведение через заголовки. Заголовок можно разделить на пять типов в соответствии с запросом, ответом, структурой и т. д.
- Заголовок запроса: это заголовок, помещаемый в сообщение запроса, который используется для передачи серверу некоторой информации.
- Заголовок ответа: Предоставляет некоторую информацию, которая может использоваться клиентом.
- Общие заголовки: заголовки, включенные как в сообщения запроса, так и в ответные сообщения, такие как заголовок даты.
- Заголовок объекта: описание основной части объекта сообщения, например Content-Type, с указанием его типа данных.
- Расширенный заголовок: разработчик добавляет первое поле для удовлетворения потребностей настройки.
организация
HTTP/1.0 200 OK
Server: xxxxxxx
Date: Sun,17 Sep 2019 02:01:16 GMT
--------------------------------实体首部
Content-Type: text/plain
Content-length: 18
--------------------------------实体主体
Hi! I'm a message!
--------------------------------
Часть сущности не является обязательной. Она используется для передачи данных запроса или ответа. Сущность состоит из заголовка сущности и тела сущности. Заголовок сущности описывает тело сущности. HTTP/1.1 определяет следующие основные поля заголовка объекта:
- Content-Type: тип данных в теле сущности.
- Content-Length: длина или размер тела сущности.
- Content-Language: язык, который лучше всего соответствует передаваемым данным.
- Content-Encoding: для определения метода кодирования, используемого сервером для кодирования.
- Content-Location: адрес возвращаемых данных.
- Content-Range: если это неполный объект, он используется для обозначения того, какой частью объекта он является.
- Content-MD5: контрольная сумма содержимого тела объекта.
- Last-Modified: дата и время создания или последнего изменения переданного контента на сервере.
- Истекает: дата и время, когда данные объекта были опробованы.
- Разрешить: методы запроса, разрешенные для запрошенного ресурса.
- ETag: идентификатор конкретной версии ресурса. Это может сделать кэширование более эффективным и сэкономить пропускную способность.
- Cache-Control: Директивы, управляющие механизмом кэширования.
Выше приведена основная структура, содержащаяся в HTTP-сообщении.Когда сообщение с запросом поступает на сервер, сервер анализирует содержимое сообщения, обрабатывает запрос в соответствии с методом, путем к ресурсу, заголовком и телом, а затем обращается к запрошенный ресурс через В результате создается ответ и отправляется обратно клиенту.
Транспортный уровень — TCP
Соединения HTTP строятся поверх соединений TCP, которые обеспечивают надежные соединения для передачи данных. Когда сообщение HTTP должно быть передано, данные сообщения будут передаваться последовательно через открытое TCP-соединение в виде потока, а TCP разделит полученные данные на небольшие блоки, каждый из которых представляет собой TCP-пакет.
Поскольку данные отправляются небольшими блоками, полная и надежная передача данных в основном отражается на: является ли пакет полным, является ли последовательность пакетов нормальной, поврежден ли пакет и повторяются ли данные пакета. Они могут контролироваться контрольными суммами TCP, порядковыми номерами, подтверждениями, контролем повторной передачи, управлением соединениями и механизмами работы с окнами.
TCP — это протокол управления передачей, и управление передачей в основном зависит от шести флагов, содержащихся в заголовке, которые контролируют состояние передачи сообщения и действия, которые отправитель и получатель предпринимают над данными. Когда их значение равно 1, разрешается выполнение соответствующих функций, соответствующих флагам.Например, когда URG равно 1, часть указателя срочности в заголовке сообщения действительна.
- URG срочный указатель
- ACK подтверждает, что серийный номер действителен
- Получатель PSH ДОЛЖЕН доставить этот сегмент на прикладной уровень как можно скорее.
- повторное подключение RST
- Порядковый номер синхронизации SYN используется для инициации соединения.
- Отправитель FIN завершает задачу отправки
Порты источника и назначения:Номера портов, которые идентифицируют отправителя и получателя, TCP-соединение подтверждается 4 значениями:源IP、源端口、目的IP、目的端口, где IP-адрес источника и IP-адрес назначения включены в IP-пакет.
Длина заголовка:Указывает длину заголовка TCP в байтах, а также может указывать количество байтов для начала, то есть данные, которые необходимо передать.
Порядковый номер сегмента TCP:Порядковый номер первого байта данных, отправляемых в этом сегменте сообщения, каждый байт данных в каждом сегменте сообщения имеет порядковый номер, порядковый номер первого байта начинается с 0, по очереди увеличивается на 1 , и прибавляет к 2. Снова начните с 0 после вычитания 1 в степени 32.
Порядковый номер подтверждения сегмента TCP: 当首部标志ACK为1时чтобы убедиться, что серийный номер действителен. После того, как сегмент TCP будет получен получателем, номер подтверждения будет отправлен обратно отправителю, добавляя 1 к последнему порядковому номеру байта, полученному в последний раз.
Контрольная сумма:Рассчитывается отправителем и проверяется получателем. Если получатель обнаруживает, что контрольная сумма неверна, это указывает на то, что сегмент TCP может быть поврежден и будет отброшен. Номер подтверждения передачи повторяется), указывая на то, что полученный сегмент TCP ошибается и сообщает себе порядковый номер, который он ожидает получить. В это время отправителю необходимо немедленно повторно передать ошибочный TCP-сегмент.
Аварийный указатель: 当首部标志URG为1时, указатель срочности действителен, указывая на то, что отправитель хочет отправить получателю срочные данные. Указатель срочности — это положительное смещение, которое добавляется к порядковому номеру TCP-сегмента для вычисления порядкового номера последнего байта срочных данных. Например, получатель получает данные и начинает чтение с байта с порядковым номером 1000, а срочный указатель равен 1000, тогда срочные данные — это байты с порядковым номером от 1000 до 2000. Получатель сам решает, что делать с этими данными.
Размер окна:Определяет пропускную способность разделенного потока данных TCP за раз. Следует отметить, что он указывает объем данных, который отправитель разрешает отправить другой стороне.Например, если размер окна в заголовке отправителя равен 1000, это означает, что отправитель может принять до 1000 байт данных из другая вечеринка. Это связано с объемом буфера данных отправителя и влияет на производительность TCP.
Флаг заголовка PSH:Если вам нужно указать получателю немедленно отправить все данные принимающему процессу, отправителю необходимо установить для PSH значение 1, где данные — это данные, переданные с помощью PSH, и все данные, полученные ранее. Если получатель получает флаг, указывающий, что PSH равен 1, он должен немедленно отправить данные принимающему процессу, не дожидаясь поступления других данных.
Сбросить флаг RST:Когда RST равен 1, это означает, что соединение ненормальное, получатель разорвет соединение и уведомит прикладной уровень о необходимости восстановить соединение.
Порядковый номер синхронизации SYN:Используется для установления соединения, включающего трехэтапное рукопожатие TCP.
-
Когда соединение установлено, клиент отправляет TCP-пакет на сервер, SYN заголовка пакета равен 1 и содержит начальный порядковый номер, указывающий, что это запрос на соединение.
-
Если сервер принимает соединение, он отправит пакет TCP на клиента. Пакет будет содержать SYN и ACK, оба из которых являются 1, так и номер последовательности подтверждения. Значение является начальным порядковым числом из клиента + 1, указывает на то, что соединение было принято.
-
После того, как клиент получит пакет из предыдущего шага, он отправит другой пакет подтверждения на сервер. ACK равен 1, и он снова будет содержать порядковый номер подтверждения. Значение представляет собой порядковый номер подтверждения от клиента на втором шаге. + 1. После того, как сервер получит подтверждающее сообщение, он переходит в состояние подключения.
Пакет подтверждения на третьем этапе может содержать данные для отправки.
Флаг завершения соединения FIN:Он используется для закрытия соединения.Когда один конец завершит задачу передачи данных, он отправит флаг FIN для завершения соединения, но поскольку TCP будет иметь передачу данных в обоих направлениях (CS, SC), каждое направление имеет свою отправку FIN & подтверждает процесс закрытия, поэтому будет четыре взаимодействия, также известные как четыре волны.
-
Если данные уровня клиентского приложения отправлены, это приведет к тому, что TCP-сообщение клиента отправит FIN, чтобы сообщить серверу, что он готов закрыть передачу данных.
-
После того, как сервер получает этот флаг, он отправляет обратно ACK, подтверждая, что порядковый номер равен полученному порядковому номеру плюс 1, а TCP также отправляет приложению конец файла.
-
В этот момент сервер закрывает соединение в этом направлении, в результате чего его TCP также отправляет FIN.
-
После того, как клиент его получает, он отправляет обратно подтверждение ACK, порядковый номер равен полученному порядковому номеру + 1, и соединение полностью закрывается.
Порядковый номер сегмента TCP и порядковый номер подтверждения обеспечивают порядок данных, проверку и целостность данных, а указатель срочности гарантирует, что срочные данные могут быть обработаны вовремя. Кроме того, TCP также имеет некоторые повторные передачи по тайм-ауту, Механизмы предотвращения перегрузки и медленного старта могут гарантировать, что пакетные данные полностью последовательно передаются на целевой конец.
Сетевой уровень — IP
Если TCP-пакеты — это контейнеры, в которых упаковываются товары, то IP — это грузовики, доставляющие контейнеры. Протокол IP обеспечивает соединение между двумя узлами и гарантирует максимально быструю отправку данных TCP от источника к терминалу, но не может гарантировать надежность передачи.
IP-уровень инкапсулирует TCP-пакет, отправленный с верхнего уровня, приносит свой собственный заголовок, а затем выполняет маршрутизацию, фрагментацию и реорганизацию и, наконец, достигает пункта назначения.В этом процессе IP-заголовок играет важную роль. в структуре заголовка.
IP-заголовок
Версия:Указывает версию текущего IP-протокола.Текущий номер версии — 4, а другой — 6, то есть IPV4 и IPV6.Если версии передающей и принимающей сторон несовместимы, текущая IP-датаграмма будет отброшена.
Длина заголовка:Длина всего заголовка, до 60 байт.
Тип услуги (ТОС):Он используется для различения типа услуги, но на самом деле уровень IP никогда не использовался при его работе.Существующий TOS имеет только 4-битное подполе и 1-битный неиспользуемый бит. Неиспользуемые биты должны быть установлены в 0. Только один из 4 битов TOS может быть установлен в 1, чтобы указать текущий тип службы. Четыре типа услуг, соответствующие 4 битам: минимальная задержка, максимальная пропускная способность, максимальная надежность и минимальная стоимость.
Полная длина:Указывает общую длину текущей дейтаграммы в байтах и может быть объединена с длиной заголовка для расчета размера и начальной позиции данных в сообщении.
Следующие три поля заголовка связаны с процессом фрагментации и повторной сборки дейтаграмм IP.Поскольку сетевой уровень обычно ограничивает максимальную длину каждого фрейма данных, уровень IP будет запрашивать текущий сетевой уровень устройства при отправке дейтаграмм.Максимальная длина передачи данных кадра, после превышения дейтаграмма будет фрагментирована, а затем реорганизована после достижения пункта назначения.В это время следующие три поля будут использоваться в качестве основы для реорганизации. Следует отметить, что из-за процесса маршрутизации максимальная длина передачи кадра данных различна для каждого уровня устройств маршрутизации, через которые проходит датаграмма, поэтому фрагментация может происходить в любом процессе маршрутизации.
Идентификатор группы:Этот идентификатор эквивалентен идентификатору. Каждый раз, когда фрагмент успешно отправляется, уровень IP добавляет 1 к идентификатору пакета.
Флаги:Всего занято три, а именно R, D, M, R еще не использовалось, полезны D и M. Это поле указывает поведение фрагментации дейтаграммы. Если D равно 1, это означает, что данные не нужно фрагментировать, и они передаются за один раз, если M равно 1, это означает, что данные фрагментированы, и за ними есть данные. это означает, что текущая дейтаграмма является последним фрагментом или только этим одним осколком.
Смещение среза:Он определяет положение текущего фрагмента от начала исходной дейтаграммы.После фрагментации общая длина каждого фрагмента будет изменена на длину этого фрагмента, а не на длину всей дейтаграммы.
Время жизни: (TTL)Можно решить, следует ли отбрасывать дейтаграмму. Поскольку IP отправляет данные шаг за шагом, данные могут пересылаться между различными уровнями IP с установленными функциями маршрутизации, поэтому время жизни указывает, сколько маршрутов может пройти дейтаграмма максимум, и каждый уровень проходит через нее. , значение минус 1, когда значение равно 0, дейтаграмма отбрасывается, а источнику отправляется пакет с сообщением об ошибке (ICMP, часть уровня IP, используемая для передачи некоторой информации об ошибке). Время жизни может эффективно решить проблему, связанную с тем, что дейтаграммы всегда пересылаются в цикле маршрутизации.
Первая контрольная сумма:Проверяем целостность дейтаграммы, отправитель суммирует заголовки, сохраняет результат в контрольной сумме, а получатель снова его вычисляет.Если результат расчета согласуется с результатом в контрольной сумме, процесс передачи в порядке, в противном случае дейтаграмма будет быть отброшены.
Протокол верхнего уровня:Определяет протокол верхнего уровня, которому получатель отправляет данные для обработки, например TCP или UDP.
Исходный IP-адрес:Записывает IP-адрес отправителя, который используется при отправке сообщений об ошибках.
IP-адрес назначения:Указывает IP-адрес назначения, который используется для принятия решений каждый раз при выборе маршрута.
маршрутизация
Поскольку заголовок IP содержит только IP-адрес назначения и не отражает полный путь, при отправке данных уровень IP будет принимать решение о маршрутизации на основе результата запроса IP-адреса назначения в локальной таблице маршрутизации, а дейтаграмма будет быть отправлены один за другим.Прыжок транспортируется к месту назначения, и каждый переход здесь является выбором маршрута.
Уровень IP может быть настроен либо как маршрутизатор, либо как хост. Когда функция маршрутизации настроена, дейтаграмма может быть перенаправлена.Если он настроен как хост, если IP-адрес назначения не является локальным IP-адресом, дейтаграмма будет отброшена.
Уровень IP с функцией маршрутизации решает, на какую станцию перенаправлять, если целевой IP-адрес не является локальным адресом? Чтобы понять эту проблему, вам нужно сначала понять структуру таблицы маршрутизации.Ниже приведена таблица маршрутизации, поддерживаемая уровнем IP (система Windows может ввести netstat -r в консоли, чтобы просмотреть таблицу маршрутизации)
| Destination | Gateway | Flags | Refcnt | Use | Interface |
|---|---|---|---|---|---|
| 140.252.13.65 | 140.252.13.35 | UGH | 0 | 0 | emd0 |
| 127.0.0.1 | 127.0.0.1 | UH | 1 | 0 | lo0 |
| default | 140.252.13.33 | UG | 0 | 0 | emd0 |
| 140.252.13.32 | 140.252.13.34 | U | 4 | 25043 | emd0 |
(Данные таблицы маршрутизации взяты из "Подробное объяснение TCP/IP, том 1: протокол").
- Destination (IP-адрес назначения): указывает сетевой адрес или адрес хоста, который IP-датаграмма в конечном итоге достигнет или пройдет.
- Шлюз (адрес следующего перехода): адрес соседнего маршрутизатора, который в настоящее время поддерживает устройство таблицы маршрутизации.
- Флаги: указывает атрибуты текущей записи маршрутизации, представленные пятью различными флагами:
- U: Этот маршрут можно использовать
- G: Если есть этот флаг, значит, следующий хоп является шлюзом, если нет, значит, следующий хоп находится в том же сегменте сети, что и текущее устройство, то есть дейтаграмму можно отправить напрямую.
- H: Является ли следующий переход хостом или сетью, если есть этот флаг, это означает хост, если нет, это означает, что маршрут следующего перехода является сетью.
- D: Маршрут создается пакетами перенаправления
- M: Маршрут изменен пакетами перенаправления
- Интерфейс: физический порт текущей записи маршрутизации.
Каждый раз, когда дейтаграмма получена, уровень IP будет запрашивать таблицу маршрутизации в соответствии с IP-адресом назначения и приведет к трем результатам в соответствии со статусом запроса:
- Найдите запись маршрутизации, которая точно соответствует IP-адресу назначения, и отправьте пакет на следующий маршрут (шлюз) или сетевой интерфейс (интерфейс) записи маршрутизации.
- Найдите элемент маршрутизации, который соответствует сетевому номеру IP-адреса назначения и отправляет пакет на следующий маршрут (Gateway) или сетевой интерфейс (интерфейс) элемента маршрутизации.
- Если первые два не обнаружены, это зависит от того, находится ли запись маршрута по умолчанию (по умолчанию) в таблице маршрутизации, и если это так, он будет отправлен на следующий остановок (Gateway), указанный им.
Если ни один из трех приведенных выше результатов не дал результатов, дейтаграмма не может быть отправлена. Дейтаграммы IP отправляются на хост-получатель таким образом, но дейтаграмма имеет присущую длину: как только она превысит MTU хоста-получателя, она будет фрагментирована.
Концепция фрагментации дейтаграмм
Когда TCP рукопожатия, он будет определять максимальный объем данных (MSS), которые данные TCP могут передавать каждый раз в соответствии с максимальным блоком передачи (MTU) IP-уровня пункта назначения.После этого TCP группирует данные в соответствии с MSS. Будет упакован в дейтаграмму IP. Когда дейтаграмма IP проходит через любой уровень маршрутизации в процессе маршрутизации, она может быть ограничена MTU и, таким образом, быть фрагментирована.В это время флаг M в 3-битном флаге заголовка IP устанавливается в 1, указывая что требуется фрагментация. Заголовок каждого фрагмента в основном одинаков, но смещение фрагмента отличается. В соответствии со смещением фрагмента эти фрагменты повторно собираются в полную дейтаграмму IP (пакет TCP) в пункте назначения. IP-передача неупорядочена, поэтому результирующая дейтаграмма также неупорядочена, но если данные полны, TCP упорядочивает их в соответствии с полями в заголовке. Как только фрагмент IP потерян, уровень IP не может составить полную дейтаграмму, он сообщит об этом уровню TCP, и TCP повторит передачу.
Когда уровень IP инкапсулирует данные, остается только IP-адрес целевого хоста. Один только IP-адрес не может отправить дейтаграмму напрямую, потому что каждое аппаратное устройство имеет свой собственный MAC-адрес, который представляет собой 48-битное значение. Теперь, когда вы знаете адрес целевого IP, вам нужно найти MAC-адрес, соответствующий этому IP. В этом процессе MAC-адрес, соответствующий целевому IP-адресу, окончательно получается путем запроса таблицы маршрутизации и объединения с протоколом ARP канального уровня.
Протокол разрешения адресов: ARP
IP может разрешать передачу данных только между логическими конечными точками, но ниже IP также находится уровень сетевого интерфейса, который также имеет свой собственный адрес (MAC-адрес: используется для уникальной идентификации сетевой карты в сети), от IP-адреса к MAC-адресу. Требуется процесс преобразования, и ARP предоставляет эту услугу.
Протокол ARP реализует сопоставление IP-адресов с MAC-адресами. Вначале отправная точка не знает MAC-адреса цели, только целевой IP-адрес, и получение этого адреса включает запросы и ответы ARP. Точно так же ARP также имеет свою собственную группировку.Давайте сначала рассмотрим формат группировки.
Формат ARP-пакета
Адрес назначения Ethernet:MAC-адрес пункта назначения. При отсутствии кэш-таблицы ARP это широковещательный адрес.
Адрес источника Ethernet:MAC-адрес отправителя.
Тип кадра:Различные типы фреймов имеют разные форматы и значения MTU, а разные типы имеют разные номера.Здесь номер, соответствующий ARP, равен 0x0806.
Тип оборудования:Относится к типу сети канального уровня, 1 соответствует Ethernet.
тип соглашения:Относится к типу адреса, который необходимо преобразовать, 0x0800 — это IP-адрес. Например, преобразование адреса Ethernet в IP-адрес.
оп (тип операции):Существует четыре типа: запрос ARP (1), ответ ARP (2), запрос RARP (3) и ответ RARP (4).
MAC-адрес источника:Указывает MAC-адрес отправителя.
Исходный IP-адрес:Указывает IP-адрес отправителя.
Ethernet-адрес назначения:Указывает физический MAC-адрес целевого устройства.
IP-адрес получателя:Указывает IP-адрес целевого устройства.
Прежде чем два устройства отправят сообщение, канальный уровень исходной стороны будет использовать протокол ARP для запроса MAC-адреса конечной стороны.ARP отправит широковещательный запрос, и каждый хост в сети Ethernet получит широковещательную рассылку. широковещательная передача предназначена для запроса MAC-адреса целевого IP-адреса, содержание в основном состоит в том, чтобы ввести ваш собственный IP-адрес и MAC-адрес, а затем спросить, есть ли у вас целевой IP-адрес, пожалуйста, ответьте на ваш аппаратный адрес. Если хост увидит, что у него есть этот IP-адрес после получения широковещательной рассылки, а запрос содержит исходный IP-адрес и MAC-адрес, он ответит исходному хосту ответом ARP. Если нет целевого IP, запрос будет отброшен. Видно, что запрос транслируется наружу, а ответ передается отдельно.
Однако невозможно выполнить процесс запроса-ответа перед каждым сеансом связи.После успешного получения ответа сопоставление между IP-адресами и MAC-адресами будет кэшировано в таблице кэша ARP, а период действия обычно составляет 20 минут. , что удобно для сетевого уровня в следующий раз.Инкапсулируйте напрямую, поэтому полный процесс должен быть таким:
После того, как уровень IP получает TCP-пакет, он запрашивает таблицу маршрутизации перед его отправкой или инкапсуляцией:
- Когда целевой IP и он сам находятся в одном сегменте сети, сначала перейдите к таблице кэша ARP, чтобы узнать, существует ли MAC-адрес, соответствующий целевому IP, и если да, отправьте его на канальный уровень для инкапсуляции и отправки. Если нет кэш-таблицы, выполните широковещательную рассылку, получите MAC-адрес и кэшируйте его, затем уровень IP инкапсулирует TCP, а затем передаст его канальному уровню для инкапсуляции и отправки.
- Когда IP-адрес назначения не находится в том же сегменте сети, что и он сам, пакет необходимо отправить на шлюз по умолчанию. Если в таблице кэша ARP есть MAC-адрес, соответствующий IP-адресу шлюза, он будет инкапсулирован и отправлен на канальный уровень. Если нет, выполните широковещательную рассылку, получите адрес и кэшируйте его, затем уровень IP инкапсулирует TCP, а затем передаст его канальному уровню для инкапсуляции и отправки.
Кадр данных Ethernet
Все вышеперечисленное готово, и инкапсуляция фактически представляет собой кадр данных Ethernet. Адрес назначения Ethernet, адрес источника Ethernet и тип кадра составляют заголовок кадра. Преамбула и разделитель начала кадра также вставляются перед заголовком, чтобы сообщить получателю о необходимости некоторой подготовки. Последовательность проверки кадра FCS добавляется в конце для обнаружения ошибок кадра.
структура
Преамбула:Согласуйте тактовую частоту приемного адаптера терминала так, чтобы она совпадала с частотой передающей стороны.
Разделитель начала кадра:Флаг начала кадра, указывающий, что информация о кадре идет и готова к приему.
Адрес назначения:MAC-адрес сетевого адаптера, который получает кадр. Когда получатель получает кадр, он сначала проверяет, совпадает ли адрес назначения с локальным адресом. Если нет, он будет отброшен.
адрес источника:MAC-адрес отправляющего устройства.
Типы:Решите, какой протокол использовать для обработки данных после получения кадра.
данные:данные на верхний уровень. Относится к дейтаграммам IP в контексте этого документа.
Последовательность проверки кадра:Чтобы определить, является ли кадр ошибочным, отправитель вычисляет значение проверки циклическим избыточным кодом (CRC) кадра и записывает это значение в кадр. Компьютер-получатель пересчитывает CRC и сравнивает его со значением поля FCS. Если два значения не совпадают, это указывает на то, что данные были потеряны или изменены во время передачи. В это время кадр необходимо повторно передать.
передача и прием
- Получив дейтаграмму от верхнего уровня, он решает, разделить ли ее на мелкие части в соответствии с MTU и размером дейтаграммы, то есть процессом фрагментации IP-дейтаграммы.
- Дейтаграмма (блок) инкапсулируется во фрейм и передается базовому компоненту, который преобразует фрейм в битовый поток и отправляет его.
- Устройство в сети Ethernet получает фрейм, проверяет адрес назначения в фрейме, и, если он совпадает с локальным адресом, фрейм будет обработан и передан вверх слой за слоем (процесс демультиплексирования).
наконец
Сетевой запрос инкапсулируется слой за слоем с исходной стороны, а затем разделяется слой за слоем на терминале.Конечный процесс в основном разбирается.Статья просто кратко разбирает общий процесс и передает его только через IP через TCP протокола в HTTP-пакетах.В качестве примера возьмем процесс, есть еще много нераскрытых концепций, таких как хвостовая инкапсуляция канального уровня, Для концепций, связанных с динамической IP-маршрутизацией, протоколом обратного разрешения адресов RARP и протоколом UDP, рекомендуется прочитать справочные материалы, перечисленные ниже, и я полагаю, что это принесет больше пользы.
Справочная статья:
Полное руководство по HTTP
«Подробное объяснение TCP / IP, том 1: протокол»