Статья была впервые опубликована в публичном аккаунте: Эдемский сад мистера Ву.
В этой статье в основном рассказывается о контенте, связанном с компьютерными сетями.Для получения дополнительных знаний требуются определенные базовые знания о компьютерных сетях. Конечно, вы можете понять это без фундамента, и у вас будет базовое представление о компьютерных сетях. В этом введении я максимально подробно рассмотрю некоторые вопросы интервью.Благодаря этой статье, независимо от того, разрабатываете ли вы на самом деле или готовитесь к интервью, вы можете получить относительно глубокое понимание компьютерных сетей.
Время от времени содержание статьи будет задаваться в нижней строке, например, каков процесс трехстороннего рукопожатия, и более глубокий вопрос, почему трехсторонние рукопожатия необходимы вместо двусторонних рукопожатий, и так далее. на. Статья может быть длинной, но чтение этой статьи за полчаса-час позволит вам разобраться в соответствующих знаниях о компьютерных сетях.
В этой статье будет говориться только о сетевом уровне, канальном уровне и физическом уровне ниже сетевого уровня.В этой статье не будет подробного обсуждения.В конце концов, это относится к контенту, связанному с оборудованием, а не к контенту, связанному с разработкой программного обеспечения. . . .
Основное содержание статьи:
обзор компьютерной сети
прикладной уровень
HTTP
Socket
транспортный уровень
TCP
UDP
Сетевой уровень
- IP
- DHCP
- ICMP
Обзор компьютерных сетей:
Компьютерная сеть является продуктом сочетания коммуникационных и компьютерных технологий, то есть компьютерная сеть предназначена для решения проблемы связи между компьютерами. В чем проблема общения, то есть проблема обмена данными, но и проблема обмена информацией. В реальном мире мы используем информацию для описания того, чем обмениваемся, в компьютерном мире вместо этого мы используем слово «данные». Эти слова являются абстрактными обобщениями содержания, потому что содержание, которым необходимо обмениваться в реальном мире, слишком сложное.Кусок текста называется информацией, а картинка также называется информацией. Поэтому эти слова являются абстрактным обобщением этого содержания.На самом деле они совсем не такого высокого уровня.Просто поймите их.
Продолжая, мы знаем, что есть вещи, связанные с компьютерными сетями, и вы можете перечислить многое, например, сетевые кабели, сетевые карты, маршрутизаторы и IP-адреса в компьютерах. Профессионалы знают TCP UDP, HTTP, FTP. Эти вещи соответствуют разным уровням в компьютерной сети. Существуют разные способы деления уровней.Модель OSI (сетевая) делит компьютерную сеть на семь уровней (ищите по ключевому слову семиуровневая модель OSI).Поскольку разделение слишком большое и слишком тонкое, есть некоторые несоответствия с операции в реальной жизни, что называется нами.Для теоретических результатов рынок не годится, но это хороший инструмент для нас, чтобы изучить компьютерные сети.
Успешным способом на рынке является разделение компьютерной сети на пять или четыре слоя. Мне нравится делить на пять слоев. В только что перечисленном содержании компьютерной сети сетевой кабель относится к физическому уровню, сетевая карта относится к канальному уровню, маршрутизатор относится к сетевому уровню, а соответствующие протоколы — IP, ICMP и т. д. Последняя буква P означает протокол.Из-за несовместимости собачьей крови мы до сих пор время от времени называем его IP-протоколом, HTTP-протоколом и т. д. Акцент делается на понимании, и неважно, как он называется.
Кроме того, компьютерная сеть имеет архитектуру.Она разделена на такое количество слоев, потому что система компьютерной сети слишком сложна и включает в себя различные компоненты.Нереально стандартизировать такое количество контента одновременно, поэтому мы используем разные устройства. на разные уровни в зависимости от функции. Преимущество этого заключается в том, что каждый слой прозрачен для других слоев, что в большей степени способствует стандартизации. Изменение слоя не влияет на работу других слоев.
Идея многослойности до сих пор широко используется в компьютерной сфере. Преимущество многослойности заключается в прозрачности, что упрощает установление стандартов. Как понять понятие прозрачности, смысл прозрачности в том, что мне не нужно знать, как ты работаешь, ты можешь дать то, что я хочу. Самый простой пример, мне не нужно знать, как работает телефон, когда я играю с ним, мне просто нужно иметь возможность нажимать на экран, и я могу обрабатывать то, что вы мне показываете. Контент, отображаемый на экране, — это контент, предоставленный нам мобильным телефоном. Но то, как внутренняя батарея обеспечивает питание и какой ток она обеспечивает, нам не нужно рассматривать. Вот что значит прозрачность.
То же самое и в компьютерных сетях. Мне не нужно понимать, как работают верхний и нижний уровни. Мне нужно только принять данные, данные мне нижним слоем, и я могу понять. Пройдя через свой слой, я следуйте данным, стандартизированным верхним уровнем в начале.Отформатируйте, отправьте их на верхний уровень, и верхний уровень сможет правильно получить данные, которые я отправляю. После создания слоев изменения одного слоя не повлияют на другие слои. Как понять, IPv4 и IPv6 находятся на сетевом уровне и относятся к разным версиям протокола, но переключение с IPv4 на IPv6 ничем не отличается для HTTP на прикладном уровне.HTTP не нужно заботиться, используете ли вы IPv4 или IPv6.Я просто загружаю данные в формате HTTP. Это то, что я имею в виду.
прикладной уровень
Прикладной уровень имеет разные протоколы, и каждый протокол также имеет разные функции и способы использования.Протоколы на этом уровне являются наиболее распространенными, но также и более специфичными. Например, HTTP используется для передачи нашего веб-контента. FTP используется для передачи файлов. Для передачи почты используется SMTP, а также TELNET и так далее. Каждый протокол более сложный и имеет подробный регламент, описание протокола также более подробное, и реализованных функций больше, поэтому я не буду его здесь писать. Если вам это нужно, вы можете ориентировочно разобраться в деталях определенного протокола.
Socket
Существует интерфейс между прикладным уровнем и транспортным уровнем, который называется Socket. Сокет не принадлежит определенному уровню, он подобен конвейеру между уровнем приложения и транспортным уровнем, который используется для соединения операционной системы и конкретного процесса приложения на уровне приложения. Приложения могут манипулировать сокетами, чтобы использовать сетевые возможности операционной системы. Socket переводится как «гнездо». Странное имя. Поскольку транспортный уровень обычно контролируется операционной системой, а некоторые протоколы уровня приложений контролируются процессом приложения, нам нужен интерфейс для установления моста между процессом приложения и нижележащим протоколом.Этот интерфейс называется API (API). интерфейс прикладного программирования). UNIX определяет конкретную реализацию под названием Socket.
Большинство операционных систем теперь поддерживают сокеты. Microsoft также сделала улучшенный API под названием winSock. По сути, это API, заточенный под разработку API под разные операционные системы, не знаю, понимаете ли вы. Еще одна вещь, на которую следует обратить внимание, — это популярный сейчас WebSocket. WebSocket — это протокол прикладного уровня. Хотя Socket не принадлежит к определенному уровню, он реализует конкретную реализацию интерфейса между процессом и операционной системой с точки зрения сетевого взаимодействия. Поскольку интерфейс относится к API, конкретная реализация относится к сокету. Мы можем запрограммировать для Socket, то есть самостоятельно определить протокол передачи, чтобы реализовать связь между двумя сторонами компьютера.
Например, вы считаете, что HTTP слишком сложен, а кэш кодов состояния слишком раздут. Мне нужно самому написать программу. На самом деле вам нужно использовать Socket только для отправки и получения данных и использовать код для обработки передаваемых данных. Чтобы решить проблему связи между компьютерами, вообще не нужно следовать протоколам других прикладных уровней. Создаваемые вами правила обработки данных можно назвать пользовательскими протоколами.
Когда программа, которую вы написали, запускается, операционная система автоматически присваивает вам номер порта. После добавления IP-адреса машины вы можете однозначно определить процесс вашей программы. Когда операционная система получает программу и отправляет ее вам data, адрес IP: назначенный номер порта, он найдет ваш процесс, отправит вам данные, и процесс обработает данные согласно логике программы. Номер порта присваивается вам автоматически, когда вы используете некоторые функции Socket или настраиваете его вручную. Тогда вы все знаете, откуда столько номеров портов, просто для того, чтобы различать разные процессы и использовать их для связи. Как и некоторые веб-серверы, такие как Nginx, они также должны использовать Socket для привязки порта 80.
транспортный уровень
Двумя наиболее типичными протоколами на транспортном уровне являются TCP и UDP. Конечно, есть и другие, если вам интересно, вы можете о них узнать, такие как DCCP, SCTP и т.д. Транспортный уровень обеспечивает механизм логической связи между процессами приложений. Как это понять, мы знаем, что на компьютере запущены разные процессы, и на транспортном уровне необходимо различать, в какой процесс отправляются данные. От чего зависит?Зависит от номера порта. Сетевой процесс обязательно будет использовать Socket, который будет случайным образом назначать номер порта, или использовать функцию привязки Socket для ручной привязки определенного номера порта к этому процессу.
Мультиплексирование, транспортный уровень имеет утверждение мультиплексирования TCP и UDP, которое не совпадает с мультиплексированием на физическом уровне.Мультиплексирование физического уровня относится к методу мультиплексирования на физической линии, включая мультиплексирование с частотным разделением, мультиплексирование с временным разделением. мультиплексирование, мультиплексирование с кодовым разделением, мультиплексирование с разделением по длине волны (разновидность мультиплексирования с частотным разделением, длина волны и частота связаны) и мультиплексирование на транспортном уровне Несколько дейтаграмм принимаются одновременно, как компьютер обрабатывает эти пакеты данных, как это распределено, и по каким принципам распределено, мультиплексирование транспортного уровня об этом. На транспортном уровне все пакеты данных обрабатываются одинаково, но на транспортном уровне передачи разных дейтаграмм различны. «Все» дейтаграммы UDP, отправленные мне «всеми» другими хостами, отправляются на один и тот же порт. В зависимости от соединения дейтаграммы TCP распределяются по разным портам. Поскольку соединения TCP являются однозначными, каждый порт соответствует только одному соединению, а также соответствует уникальному порту на другом хосте. Даже если другой хост хочет установить со мной два TCP-соединения одновременно, ему нужно создать два процесса или потока и два номера порта.
Поговорим о UDP подробнее.
UDP — это простое расширение протокола IP. Очень простое расширение. Это так же просто, как то, что нужно сделать, то есть данные, передаваемые сетевым уровнем, различают номер порта, а затем доставляют его в процесс.Если вы хотите, вы выберете обнаружение ошибок. Кроме них он ничего не делал. Это простое расширение дает много преимуществ.Из-за его простоты его легче настроить.Вы можете добавить некоторые функции в соответствии с вашими потребностями.Где настроить? на прикладном уровне. Прикладной уровень может обрабатывать дейтаграммы UDP, а затем изменять конкретные требования сетевой передачи в соответствии со своими собственными идеями. В дополнение к тому, что UDP легко расширяется на прикладном уровне, он также имеет следующие преимущества:
- По сравнению с TCP нет необходимости устанавливать соединение, поэтому задержка отправки данных небольшая.
- Реализация относительно проста и не требует ответственного процесса внедрения. Например, поддержание связи и т. д.
- Накладные расходы на заголовок относительно невелики. Помимо содержимого данных, UDP добавит к данным дополнительные данные, чтобы различать номер порта и поле обнаружения ошибки.Эти данные называются заголовком UDP. будет описано ниже.
- Прикладной уровень может контролировать время отправки и отправляемые данные. Если вы хотите реализовать сложные функции с помощью UDP, это дает вам свободу настройки.
Вышеуказанные функции в основном сравниваются с TCP.
Давайте посмотрим, как выглядит дейтаграмма UDP.
Как видите, дейтаграмма UDP добавляет некоторые дополнительные данные (заголовки) в дополнение к конкретным данным для передачи. Всего эти данные составляют 8 байт. Таким образом, заголовок UDP составляет 8 байт. Первые два указывают, с какого порта приходит дейтаграмма и на какой порт другого компьютера она направляется. Он также описывает длину данных, которая включает 8 байтов заголовка, поэтому для того, чтобы поле длины данных правильно представляло ограниченную длину дейтаграммы, длина части данных ограничена. На самом деле в нормальных условиях часть данных не слишком велика. UDP — это одно слово, простое из-за компактного заголовка.
В заголовке UDP можно даже опустить номер порта источника, смысл опущения в том, что мне нужно только отправить эти данные, и никакого ответа не требуется, потому что даже если я захочу ответить, я не знаю, какой у вас порт является. Поле контрольной суммы можно не заполнять, то есть никаких работ по проверке данных не производится, но в целом проверка будет. Проверка данных предназначена для предотвращения некоторых ошибок в процессе передачи данных, в результате чего данные становятся непригодными для использования, неполными или неупорядоченными.Если неполные данные принудительно отображаются на компьютере, они будут искажены и не могут быть использованы. Если в дейтаграмме есть ошибка, она будет отброшена на транспортном уровне.После отбрасывания на хост, потерявший данные, будет отправлена ICMP-дейтаграмма, сообщающая ему, что данные неверны, а затем процесс передачи данных прерывается. над! Повторной передачи не будет, а UDP не предоставляет механизма повторной передачи. Даже если они передаются повторно, они контролируются прикладным уровнем, а прикладной уровень восстанавливает данные и отправляет их повторно. UDP не обеспечивает повторной передачи! Затем дейтаграмма ICMP изначально предназначалась для описания позже, но не может быть записана. . . в следующий раз.
Продолжать.
Когда дело доходит до проверки ошибок, в UDP есть некоторые неудобства для понимания. Метод проверки ошибок здесь не упоминается, в Интернете есть много информации, аналогичной методу проверки ошибок в IP-протоколе. Проверка ошибок UDP — это механизм обнаружения, который обеспечивает правильную передачу данных между портами. Также можно проверить, не произошла ли ошибка в части данных. Таким образом, обнаружение ошибок UDP является единственным процессом обнаружения части данных в процессе передачи (TCP также будет обнаруживать). При обнаружении ошибок будут добавлены некоторые дополнительные данные для участия в расчете обнаружения ошибок. Просто используйте его некоторое время.После расчета контрольной суммы он вам не нужен, а затем отправьте данные на следующий уровень.Формат отправленных данных такой же, как на картинке выше, и это реальный отправленный контент . Что добавлено, смотрите на картинке ниже.
Красная часть называется псевдозаголовком, пусть вас не смущает название, она просто используется для участия в вычислении, аналогично паролю в процессе шифрования, вам нужно использовать его при вычислении шифротекста, и верните его после расчета, он не будет зажат в тайне.Текст передается вместе. Здесь обнаружение ошибок реализует очень эффективную функцию, которая может различать, правильный ли порт для передачи данных, и используется ли протокол UDP или нет.Значение протокола UDP в поле номера протокола равно 17 (восьмеричное). Часть красного поля в протоколе IPv6 отличается от этого тем, что выявляются ошибки, которые не обнаружены на уровне IP.Эта контрольная сумма обеспечивает правильность всех представленных данных.
Ну вот со сложностями UDP покончено.Про использование UDP говорить не буду.По поводу содержания псевдозаголовка я обнаружил,что в интернете нет очень подробной информации,и нет точной констатации.Наконец, Я проверил RFC-документ UDP, просто понял.
Разговор о TCP
TCP — отличный протокол, предоставляющий множество богатых функций, это протокол «точка-точка», то есть протокол «порт-порт». является надежным, упорядоченным протоколом потока байтов. протокол, ориентированный на соединение.
И получатель, и отправитель будут иметь определенное пространство для хранения данных для кэширования, которое обычно используется для повторной передачи, повторной сборки пакетов и других функций.
Ориентированное на соединение значение: соединение должно быть установлено перед общением. Два конца поддерживают состояние соединения, а промежуточный узел его не поддерживает.
Функции, реализованные TCP, включают обеспечение надежной передачи данных, управление потоком и контроль перегрузки.
Функция TCP для обеспечения надежной передачи данных основана на механизме подтверждения (подтверждение: подтверждение, сокращенно ACK), то есть, если я отправлю вам пакет данных, если вы хотите его получить, вы должны сказать мне, что Вы получили его. Если вы не сообщите мне, я буду считать его неполученным и пошлю его вам снова, пока вы не скажете мне, что получили его. Именно такая логика обеспечивает надежную передачу данных.
В конкретном процессе реализации надежной передачи TCP использует кумулятивное подтверждение, подтверждая количество байтов в данных, а не подтверждая количество полученных блоков данных.Из-за этого TCP называется последовательным словом.Протокол регулирования.
После того, как дейтаграмма TCP была отправлена, я долго ждал, не дождавшись вашего ответа, и я отправлю ее вам снова. Сколько мне ждать?Это нужно тщательно обдумать.Существует алгоритм расчета времени ожидания.Самая важная переменная в нем это RTT(Время задержки туда и обратно).RTT относится к началу отправляемого сообщения, и время, когда я его получил Время, прошедшее после сообщения подтверждения (ACK). В соответствии со средним количеством исторических значений и значением RTT предыдущего пакета данных значение после взвешенного расчета устанавливается как время ожидания текущего пакета данных. Таким образом, после объединения текущего состояния сети и исторического состояния сети расчетное значение является более разумным. Если я отправлю пакет и период тайм-аута превышен, дейтаграмма только что будет передана повторно. В другом случае TCP имеет механизм скользящего окна, поскольку отправка байта и ожидание подтверждения серьезно повлияют на эффективность передачи данных, поэтому он отправляется сегмент за сегментом, при подтверждении он основывается только на количестве байтов. получил для подтверждения. При этом возникнет ситуация, когда пятый абзац потерян, шестой, седьмой и восьмой абзацы переданы и получены, а получатель не получил пятый абзац. пятый сегмент, он отправит сообщение подтверждения серийного номера (ACK), сообщая мне, что я не получил этот байт, а затем я немедленно получаю седьмой сегмент.Порядковый номер первого байта подтверждает сообщение, а затем немедленно получает седьмой сегмент. Пока отправляются три последовательных подтверждающих сообщения с одинаковым порядковым номером, отправитель немедленно повторно отправит пятый сегмент сообщения, не дожидаясь истечения таймера. Этот механизм называется быстрой повторной передачей. Почему он настроен на повторение подтверждающего сообщения 3 раза, а затем его немедленную повторную передачу?Ууху. Call.com/question/21…Здесь есть четкий ответ, и теоретически доказано, что 3 раза лучше.
TCP также реализует функцию управления потоком.Как реализовать управление потоком?Только упомянул, что TCP имеет механизм скользящего окна. Приемник также имеет буферное окно. Если данные приложения очень медленно считывают данные, но скорость сети очень высока, данные сконцентрированы в больших количествах и превышают размер буфера приемника, даже если данные неприемлемы, они могут только продолжать возвращаться последние данные, поступившие в буферную область.Если сообщение подтверждения сегмента превышает три раза, отправитель будет повторно отправлять одни и те же данные, что приведет к пустой трате сетевых ресурсов. Поэтому предлагается механизм управления потоком: каждый раз, когда возвращается подтверждающее сообщение, к сообщению будет добавляться оставшийся объем кэша. Отправитель отправляет данные в зависимости от того, насколько маленький буфер может получить ваш получатель, потому что он знает, что даже если вы отправите больше, вы не сможете их получить. Следует отметить, что если отправитель получает подтверждающее сообщение от получателя и обнаруживает, что размер буфера равен 0, что ему следует делать? Остановить отправку абсолютно невозможно.Если вы остановите ее, вы больше не сможете получить оставшееся количество окон другой стороны.Даже если у другой стороны уже есть большой объем кеша, если я не отправлю данные ему, я не смогу вернуть оставшийся кэш другой стороны. Следовательно, если запас кэша другой стороны равен 0, отправитель косвенно и предварительно отправит набор пробных пакетов ( ZWP ), чтобы определить, сколько кэшировано другой стороной, потому что независимо от того, получен этот пакет или отброшен, он будет сообщение с подтверждением получено от получателя, и сообщение с подтверждением содержит информацию о разрешении буфера, которая реализует принцип управления потоком TCP.
Еще одна функция, реализуемая TCP, — контроль перегрузки.TCP использует сквозной метод контроля, то есть компьютеры на обоих концах контролируются, а промежуточное устройство маршрутизации не обеспечивает явного контроля. Существует несколько алгоритмов управления перегрузкой TCP. Текущий поток управления потоком TCP, вероятно, такой. В самом начале используется алгоритм медленного старта, а размеры окна отправки последовательно равны 1, 2, 4, 8, 16, 32 и 64. Когда это окно достигает определенного порога, оно начинает медленно увеличиваться, здесь порог установлен на 64. Начните использовать алгоритм аддитивного увеличения, то есть добавляйте окно отправки по одному, 65, 66, 67..., когда оно увеличится до 80, в пакете будут получены три повторных ACK, мы думаем, что сообщение 80 теряется, и сразу умножается Пол уменьшается (удваивается), а окно падает до 40. Затем он увеличивается постепенно, один за другим. Если его увеличить до 50, то обнаруживается, что время ожидания дейтаграммы истекло.В это время размер окна непосредственно уменьшается до 1, потому что сетевое окружение в это время крайне плохое.Почему мы знаем, что когда три сообщения подтверждения получены, это означает, что другая сторона получила по крайней мере три пакета данных, но пакеты данных не по порядку, и отправителю могут быть возвращены три идентичных подтверждающих сообщения.В это время сеть относительно гладкая, потому что потерян только один, а остальные три пришли, и таймаут истекает.Это значит, что отправленные пакеты могут быть не получены отправителем, а отброшены в промежуточном маршруте.Поэтому сетевое окружение на этом очень плохое время, и скорость отправки должна быть уменьшена, чтобы предотвратить перегрузку. Почему существует механизм перегрузки?Вы можете себе представить,что без этого механизма промежуточные маршруты уже перегружены,отправитель продолжает отправлять данные после таймаута,а все хосты продолжают отправлять данные,потому что у всех истек таймаут. будет ретранслироваться, что однозначно увеличит ситуацию с заторами.Это как пробка.Он явно перекрыт,и сзади постоянно выстраиваются новые машины.Конечно он будет становиться все более и более перегруженным,поэтому есть механизм контроля заторов . Однако другие протоколы не имеют управления перегрузкой, такие как UDP, ICMP и UDP, которые вообще не ограничены сетью.Если вы хотите отправить, сеть блокируется.Это нормально.В любом случае, мне это не нужно чтобы гарантировать, что данные должны поступить. Более того, скорость передачи UDP не ограничена, поэтому в текущей сетевой среде большое количество дейтаграмм UDP окажет серьезное влияние на сеть. В управлении перегрузкой TCP использует алгоритмы медленного старта, аддитивного увеличения, мультипликативного уменьшения и быстрого восстановления. Если вам это нужно, вы можете узнать об этом подробнее.Этот контент немного сложен.В обычных сетях будут использоваться эти алгоритмы, а конкретный алгоритм не будет использоваться отдельно.
Что ж, с некоторыми функциями TCP покончено, давайте взглянем на заголовок TCP.
- 1. Номер исходного порта: номер порта инициатора данных, 16 бит.
- 2. Номер порта назначения: номер порта приемника данных, 16 бит.
- 3. Серийный номер: 32-битный серийный номер, используемый при фактической отправке данных, чтобы сообщить серийный номер первого байта фрагмента данных, отправляемого в данный момент.Если отправленное сообщение не содержит данных (например, сообщение подтверждения ), это поле не меняется. Считается, что дейтаграмма с SYN=1 или FIN=1 содержит один байт данных.
- 4. Порядковый номер подтверждения: 32-битный номер подтверждения — это порядковый номер, который принимающая сторона ожидает получить от отправителя следующего сегмента, поэтому порядковый номер подтверждения должен быть значением поля порядкового номера в сообщении TCP, которое другая сторона только что отправила вам.Добавление 1 является вашим серийным номером подтверждения.Вы должны ответить ему, что я получил ваши данные, поэтому серийный номер другой стороны должен быть подтвержден.
- 5. Длина заголовка: 4 бита, максимальное число, которое может быть представлено, равно 15. Световой заголовок имеет 20 байт, поэтому здесь оговорено, что каждый 1 представляет 4 байта, что является строкой на рисунке выше Значение этого поля — количество строк. Максимум может представлять 15*4 = 60 байт.
- 6. Зарезервировано: 6 бит, все 0
- 7. Срочный URG: когда URG=1, это означает, что в сегменте сообщения есть срочные данные, которые должны быть переданы как можно скорее, и поле указателя срочности допустимо.
- 8. Бит подтверждения ACK: Когда ACK = 1, это означает, что это подтверждающее сообщение, а значение 0 не является подтверждающим сообщением;
- 9. Вставить бит PSH: когда отправитель PSH=1, получатель доставит его в процесс приложения как можно скорее;
- 10. Бит сброса (RST): когда RST=1, это указывает на серьезную ошибку в TCP-соединении, и соединение должно быть разорвано и восстановлено;
- 11. Бит синхронизации SYN: используется для синхронизации серийного номера при установлении соединения. Когда SYN=1, ACK=0 в сообщении, это означает этот сегмент запроса соединения. SYN=1, ACK=1 означает, что получатель согласен установить соединение.
- 12. Бит завершения FIN: Когда FIN=1, это указывает, что данные отправителя этого сегмента были отправлены, и требуется разорвать соединение для передачи.
- 13. Окно: предназначено для обеспечения функции управления потоком, указывающего количество байтов, которые можно кэшировать.
- 14. Контрольная сумма: область проверки поля включает заголовок и данные. Рассчитывается и сохраняется отправителем и проверяется получателем.
- 15. Указатель срочности: Указатель срочности действителен только при URG=1, он указывает количество байтов срочных данных в этом сегменте.
- 16. Опции: Переменная длина, до 40 байт. Подавляющее большинство не применяют это поле, что означает, что подавляющее большинство TCP составляет 20 байт.
Следует отметить, что контрольная сумма TCP также требует добавления псевдозаголовка для участия в операции.Значение поля протокола в псевдозаголовке TCP равно 6, а UDP равно 17, помните. Проверка ошибок транспортного уровня — это единственный момент во всем процессе передачи для проверки правильности данных.
Поговорим о механизме соединения TCP.
Мы знаем, что TCP ориентирован на соединение. Соединение должно быть установлено до того, как две стороны смогут обмениваться данными. Механизм соединения TCP представляет собой хорошо известное 3-стороннее рукопожатие и 4-стороннюю волну. Помахивание четырьмя пальцами — это процесс отключения TCP. Поговорим об этом подробно ниже.
Процесс трехстороннего рукопожатия.
Прежде чем говорить о механизме рукопожатия, необходимо закрепить некоторые понятия. Порядковый номер, используемый для определения порядкового номера первого байта данных, которые я отправил. При установлении соединения серийный номер будет инициализирован в соответствии с информацией о часах компьютера, например, 5433, что предусмотрено операционной системой.Некоторые данные говорят, что он увеличивается на 1 каждые 4us.Я еще не понял нижележащий уровень . На данный момент я просто хочу установить соединение и не отправлять никаких данных. Таким образом, серийный номер в моей информации заголовка является начальным значением
1. Одна из сторон инициирует запрос на установление соединения: отправляет сообщение об установлении соединения на целевой компьютер. В то же время инициализируйте порядковый номер (sequence = seq) X, в это время SYN=1. Инициализация серийного номера определяется в соответствии со временем запуска системы, в основном для предотвращения подделки соединений посредником.
2. Целевой компьютер получает запрос на установление, решает согласиться с запросом на установление и возвращает сообщение. СИН=1, ПОДТВЕРЖДЕНИЕ=1. Поскольку SYN=1, целевому компьютеру также необходимо инициализировать серийный номер Y . ACK=1 означает, что серийный номер подтверждения действителен. Значение порядкового номера подтверждения равно X+1, сокращенно ACK=X+1.
3. Получив от целевого компьютера сообщение с запросом на подтверждение установления, отправьте сообщение с подтверждением на целевой компьютер. Среди них ACK=1 представляет сообщение подтверждения, а серийный номер подтверждения установлен на Y+1;
Следует отметить, что номер подтверждения подтверждает, что я получил данные, отправленные другой стороной, поэтому номер подтверждения получается из серийного номера, соответствующего дейтаграмме, отправленной другой стороной, плюс длина данных.
Серийные номера двух компьютеров различны, когда соединение установлено. Процесс установления соединения трехстороннего рукопожатия заключается в общении и обмене порядковыми номерами обеих сторон.
Поговорим о серийном номере подробнее. Инициализация заключается в инициализации значения информацией о времени системы. Каждый раз, когда отправляется байт данных, порядковый номер +1. Когда SYN = 1 или когда FIN = 1, серийный номер также равен +1. Смещение серийного номера относительно начального серийного номера равно количеству отправленных байтов и -1. Потому что при установлении соединения добавляется лишняя 1. Номер подтверждения — это порядковый номер, соответствующий отправленной дейтаграмме, плюс значение длины данных. Каждый конец имеет свой серийный номер. Хорошо, давайте внесем ясность.
Почему три рукопожатия вместо двух?
Так как может быть такая ситуация, я хочу установить с вами соединение, SYN=1 seq=4444, но этот пакет данных вам давно не передавался. Я думал, что эта датаграмма была потеряна. Таким образом, запрос на установление соединения повторно инициируется SYN=1, ACK=0, seq=5555. Но сообщение с seq=4444 пришло к вам раньше, и вы ответили просьбой дать согласие на создание (SYN=1, ACK=4445). Это двустороннее рукопожатие, что-то пошло не так, мои последовательности не совпадают. Если я хочу отправить данные, значение seq рассчитывается относительно 5555, а не 4444, и при обмене данными между двумя сторонами будет ошибка. Таким образом, вы должны пожать друг другу руки три раза. Вы получаете подтверждающее сообщение с ACK = 4445. Вы знаете, что это просроченный запрос. Не обрабатывайте его, продолжайте ждать подтверждающего сообщения с ACK = 5556, а затем ответьте с помощью ACK=Y+1 В этот момент вы обменялись значением последовательности и можете начать передачу данных.
Ниже представлена механика четырехсторонней волны.
Я готов отключиться, отправить FIN=1 seq = 2222 ACK=1 (независимо от того, было ли подтверждено предыдущее сообщение, ACK здесь должен быть 1. В официальном документе указано, что за исключением случаев, когда соединение установлено, ACK равен 0 , другое ACK всех сообщений равен 1, включая сообщение об отключении канала.Поскольку сеть не гарантирует стабильную доставку подтверждающего сообщения, здесь просто добавляется ACK.В любом случае, не использовать это поле - пустая трата времени . )
1 После того, как я отправлю сообщение FIN, я не буду отправлять вам никаких сообщений с данными.
2 Вы получили мое сообщение FIN. Ответьте подтверждающим сообщением (ACK=2222+1).
На данный момент, хотя вы и ответили на мое сообщение об отключении, вы все еще можете продолжать передачу данных. Например, я отправлю вам сообщение об отключении до того, как ваши данные будут переданы.Если вы не закончили передачу данных, вы можете продолжить их передачу.
Вы передаете данные, я возвращаю подтверждающее сообщение, вы передаете одно, я возвращаю одно. Когда передача наконец закончилась, вы думаете, что пришло время отключиться.
Итак, 3 вы отправляете мне сообщение FIN.
Я получил ваше сообщение FIN, и 4 возвращает вам подтверждающее сообщение. Если вы получили сообщение с подтверждением, вы можете немедленно отключиться. А я не могу.Боюсь,что сообщение с подтверждением потеряется в дороге.Если потеряется,вы повторно передадите сообщение FIN. Если я не получу ваше повторно переданное сообщение FIN через некоторое время (в 2 раза превышающее максимальное время жизни дейтаграммы), я также отключусь.
Причина четырех волн в том, что TCP полнодуплексный, то есть вы можете отправлять данные мне, а я могу отправлять данные вам. Причина четырех волн заключается в том, что любой из сторон необходимо отключиться, что представляет собой запись двух волн: A отправляет FIN, а B возвращает ACK, что означает, что A определил, что B получил свой собственный запрос на отключение. Точно так же B также необходимо получить сообщение с подтверждением отключения. Таким образом, всего четыре волны.
Следует также отметить, что даже если A запрашивает отключение, B может продолжать отправлять данные. Также следует отметить, что четыре взмаха рук можно упростить до трех взмахов рук, то есть А подает заявку на подключение к порту, В не имеет данных для отправки и напрямую возвращает подтверждающее сообщение с FIN. сообщение, обе стороны будут отключены. На самом деле тоже четыре раза, но два средних помещаются в одно сообщение.
Зачем махать четыре раза?
Причин не так уж и много, должно быть четыре раза, при отправке FIN-сообщения и подтверждающего сообщения в сумме получается четыре. Три нормально, хорошо, разве это не упоминалось выше? Я имею в виду, может ли быть на одно подтверждение меньше, конечно, нет, как я узнаю, что мое отключенное сообщение получено одним подтверждением меньше? В порядке. Вот и все.
На самом деле, более значимый вопрос заключается в том, почему стороне, которая активно отключает запрос, необходимо ждать в два раза больше максимального времени жизни сегмента (MSL) в TCP, что составляет 2MSL (максимальное время жизни сегмента).
Основная цель ожидания времени 2MSL - опасаться, что другая сторона не получит последнее сообщение ACK, тогда другая сторона повторно отправит пакет FIN третьей волны после ожидания истечения времени ожидания вашего сообщения ACK и активно закроется. терминал после получения повторно отправленного пакета FIN.Отправить еще один ответный пакет ACK. В состоянии TIME_WAIT порты на обоих концах не могут использоваться и могут продолжать использоваться, пока не истечет время 2MSL. Все просроченные сегменты будут отброшены, пока соединение находится в фазе ожидания 2MSL. TTL и MSL связаны, но не просто равны, MSL должен быть больше или равен TTL.
Сетевой уровень
Основные функции сетевого уровня:转发与路由
. Сетевой уровень содержит много протоколов.Поскольку сетевому уровню необходимо реализовать функции маршрутизации и пересылки, на этом уровне используется много протоколов маршрутизации.Если мы хотим реализовать функцию пересылки, мы должны знать, куда пересылать, то есть у нас должен быть адрес к протоколу IP. Протокол IP предусматривает некоторые правила адресации, как разрезать дейтаграмму на мелкие части, если дейтаграмма слишком велика. Кроме того, сетевой уровень также включает в себя важный протокол ICMP.Данные, основанные на этом протоколе, подобны инструкциям в сети.Компьютерное или промежуточное оборудование маршрутизации становится ролью офицеров и солдат и выполняет соответствующие действия в соответствии с содержанием инструкции.
Поговорим об IP-адресах.
Мы знаем, что длина IP-адреса ограничена, всего 32 бита, и количество тоже ограничено, поэтому его нужно разделить, например, одна часть используется США, а другая часть используется Китаем. . После разделения на большие блоки его необходимо разделить на более мелкие провинции и города, или предприятия, или государственные учреждения. Этот процесс деления называетсяПодсети. Таким образом, предусмотрено, что IP-адрес состоит из двух частей.网络号和主机号
. Однако количество цифр в номере сети является неопределенным.Если подсеть очень большая, количество цифр в ее номере сети очень мало, поэтому количество хостов немного больше, а количество хостов в подсети может быть много. Например, China Unicom владеет большой подсетью, поэтому в ее сетевом номере будет очень мало цифр. Например, если цифр 4, то в номере хоста останется только 28 цифр, поэтому можно идентифицировать почти 2^28 хостов. Тогда розетки в различных городах China Unicom, роутеры на обочине и все устройства, использующие сеть Unicom для выхода в Интернет, принадлежат хостам в подсети Unicom. конечно такое описание极其不准确
, в основном для удобства всех, чтобы понять концепцию номера сети и номера хоста.
Давным-давно мы разделили сетевые адреса на пять типов сетевых адресов, сетевые адреса A, B, C, D и E, но на данный момент они больше не используются, и этот метод разделения приводит к большой трате IP. Так что теперь классовые адреса редко используются для подсетей. Теперь IP-адрес IPv4 уже выделен, но с помощью технологии NAT (технология преобразования сетевых адресов) он также может гарантировать, что каждое интернет-устройство может иметь IP-адрес. NAT обсуждать не будем, это немного сложно. . В связи со стремительным развитием интернета вещей, популяризацией сетевых ресурсов и появлением все большего количества интернет-устройств в стране активно продвигается развитие IPv6. Многие люди описывают IPv6 как количество адресов, которые могут присвоить IP-адрес каждой песчинке на планете, не говоря уже об устройстве. Забавно, продвижение IPv6 хорошо для системы реального имени. Упс, продолжай говорить.
Теперь способ разделения подсетей — CIDR (бесклассовая междоменная маршрутизация) в виде xxxx/n, например 202.113.132.45/24, что означает первые 24 цифры номера сети, затем последние 8 цифр — это номер хоста. Разделение подсети осуществляется в соответствии с приведенными выше правилами. Заинтересованные студенты могут узнать о конкретном процессе создания подсетей самостоятельно.
Разделение подсетей основано на личных интересах.Я надеюсь, что каждый может понять следующий контент, который очень полезен.Некоторые специальные сетевые адреса:
Эти специальные адреса могут быть поняты в первую очередь, и они будут часто встречаться в проекте в будущем, а конкретные значения и концепции будут поняты в то время.
Ниже приведены некоторые частные сетевые адреса, которые обычно не используются для регистрации в общедоступной сети, то есть общий доступ к следующим URL-адресам означает доступ к данным в вашей собственной небольшой локальной сети:
RFC1918 определяет имена блоков | Диапазон IP-адресов | Количество IP-адресов | Описание сети классификации | Максимальный блок CIDR (маска подсети) | Длина конечного бита хоста |
---|---|---|---|---|---|
24-битный блок | 10.0.0.0 – 10.255.255.255 | 16,777,216 | Единая сеть класса А | 10.0.0.0/8 (255.0.0.0) | 24 бит |
Shared Address Space | 100.64.0.0 - 100.127.255.255 | 4,194,304 | 64 последовательных сети класса B | 100.64.0.0/10 (255.192.0.0) | 22 бит |
20-битный блок | 172.16.0.0 — 172.31.255.255 | 1,048,576 | 16 последовательных сетей класса B | 172.16.0.0/12 (255.240.0.0) | 20 |
16-битный блок | 192.168.0.0 — 192.168.255.255 | 65,536 | 256 последовательных сетей класса C | 192.168.0.0/16 (255.255.0.0) | 16 бит |
Просто пойми.
Что ж, популяризация сетевых знаний закончилась, давайте взглянем на требования к формату данных. Сегмент TCP или UDP с транспортного уровня должен добавить заголовок на сетевом уровне, а затем отправить его на канальный уровень. Что сетевой уровень делает с данными?Прежде всего, сетевой уровень имеет функцию пересылки, а для пересылки необходимо знать пункт назначения, поэтому сетевой уровень добавляет к данным адрес назначения.Адрес назначения – это IP-адрес, который однозначно идентифицирует хост. Сетевой уровень также будет фрагментировать пакеты, которые превышают MTU (максимальная единица передачи). MTU Ethernet составляет 1500 байт.Если это значение слишком мало, пакет данных будет разделен на множество блоков.Если это значение слишком велико, увеличится задержка передачи, а также увеличится частота ошибок пакета данных. Окончательный выбор 1500 байт, он принадлежит прописанному. Хорошо, если данные, которые должны быть переданы транспортным уровнем, больше, чем MTU, то данные будут фрагментированы на сетевом уровне. Давайте взглянем на заголовок дейтаграммы IP:
Версия 4битОтносится к версии протокола IP. В настоящее время номер версии широко используемого IP-протокола — 4.IPv6, номер версии 6 .
длина заголовка 4bitЕдиница измерения составляет 4 байта (32-битная строка выше. Поскольку максимальное значение описания 4-битной строки равно 15, самая короткая длина заголовка также требует 20 байтов, чего недостаточно для описания, поэтому единица измерения изменена на 4 байта), тогда значение здесь обычно равно 5. Длина заголовка также составляет 20 байт. Длина заголовка варьируется от 20 байтов до 60 (4*15) байтов, а длина заголовка обычно составляет 20 байтов. Если длина заголовка IP-пакета не является целым кратным 4 байтам, он должен быть заполнен последним полем заполнения. Таким образом, раздел данных всегда начинается с целого числа, кратного 4 байтам.
Дифференцированные услуги 8bitВ настоящее время он почти не используется.Для поддержки DiffServ все маршрутизаторы в середине должны поддерживать DiffServ, но большинство текущих маршрутизаторов его не поддерживают, поэтому DiffServ почти не используется.
Общая длина 16 битДлина заголовка + длина данных в байтах. Максимальная длина дейтаграммы 2^16-1 = 65535 байт. Однако, поскольку максимальная единица передачи MTU канального уровня
Логотип 16 битПрограммное обеспечение поддерживает счетчик в памяти, и каждый раз, когда генерируется дейтаграмма, счетчик увеличивается на 1, и это значение присваивается полю идентификации. Но эта «идентификация» не является порядковым номером, потому что IP — это служба без установления соединения, и проблем с получением дейтаграмм по порядку не возникает. Когда дейтаграмму необходимо фрагментировать, поскольку ее длина превышает MTU сети, значение этого поля идентификатора копируется в поле идентификатора всех дейтаграмм. Одно и то же значение поля идентификации позволяет правильно собрать каждую фрагментированную дейтаграмму в исходную дейтаграмму в конце.
-
Логотип 3битВ настоящее время имеют смысл только 2 бита.
Средний бит поля флага обозначается как DF (Don’t Fragment), что означает «не может быть фрагментирован». Фрагментация разрешена только при DF=0, если 1, фрагментации нет.
Младший бит в поле флага обозначается как MF (More Fragment). MF=1 означает, что позади есть "фрагментированные" дейтаграммы. MF=0 указывает, что это последний из нескольких фрагментов дейтаграммы.
Смещение чипа 13 битКогда длинная дейтаграмма IP фрагментирована, относительное положение первого бита фрагмента после фрагментации в исходном пакете. То есть, когда слайс был усечен относительно начала части данных дейтаграммы транспортного уровня. Смещение среза находится в 8-байтовых единицах смещения. Это означает, что длина каждого фрагмента также должна быть целым числом, кратным 8 байтам (64 бита). Так почему же слайс ipv4 смещен в 8-байтовых битах? Если единица непосредственно используется в байтах, общая длина составляет 16 бит, а смещение среза составляет всего 13 бит, описание будет недостаточным. Таким образом, смещение указывается в единицах по 8 байт.
Время выживания 8битTTL (время жизни) относится к максимальному количеству маршрутизаторов, через которые может пройти IP-датаграмма (каждый раз, когда она проходит через маршрутизатор, TTL уменьшается на 1). Не допускайте, чтобы дейтаграммы вызывали бесконечные циклы в сети из-за некоторых ошибок, тратя сетевые ресурсы впустую. Тогда вы можете знать, что маршрутизатор уменьшит значение этого поля на 1 при пересылке и пересчитает контрольную сумму заголовка.
Протокол 8 битУказывает, что данные, переносимые этой дейтаграммой, используют тип протокола (например, TCP, UDP и т. д.), так что уровень IP хоста-получателя знает, какому процессу должна быть передана часть данных.
первая контрольная сумма 16bitОбратите внимание, что это поле проверяет только заголовок дейтаграммы, а не часть данных. Это связано с тем, что каждый раз, когда дейтаграмма проходит через маршрутизатор, маршрутизатор должен пересчитывать контрольную сумму заголовка (поскольку время жизни, флаги и смещения фрагментов могут измениться, т. фрагментирован.), Отсутствие проверки части данных снижает объем вычислений.
исходный IP-адрес32.
IP-адрес получателя32.
Выше приведен заголовок дейтаграммы IP.
Давайте поговорим о DHCP (протокол динамической конфигурации хоста).
Мы знаем, что есть два способа установить IP-адрес вашего компьютера.Первый — напрямую установить фиксированный IP-адрес, и вам необходимо настроить ряд сложных данных, таких как маска подсети, адрес DNS-сервера и так далее. Это хлопотно и требует соответствующих знаний. Раньше я смотрел туториал по настройке, но ничего не понял, а после настройки долго не мог подключиться к интернету, поэтому просто выбрал автоматическое получение IP-адреса.
DHCP (протокол динамической конфигурации хоста) используется для автоматического получения IP-адреса. Отправив запрос на сервер DHCP в этой сети, сервер DHCP проверит наличие еще не назначенных IP-адресов, а затем выберет один для вас. У вас есть IP-адрес. DHCP-сервер не только предоставляет вам IP-адрес, но также отправляет вам маску подсети, адрес шлюза по умолчанию и адрес DNS-сервера в пакете при назначении IP-адреса.
Каковы преимущества динамического получения IP-адреса?Во-первых, это простота и возможность использования путем подключения интернет-кабеля без необходимости самостоятельной настройки пользователями. Во-вторых, IP-адрес можно использовать повторно.Если ваш компьютер выключится, я передам этот IP-адрес другим.
Давайте поговорим о том, как связаться с DHCP-сервером, чтобы запросить IP-адрес.
- Устройство, которое хочет получить доступ к Интернету, сначала передает сообщение DHCP в сеть, и тот, кто ответит, будет сервером DHCP. Этот процесс называется отправкойсообщение обнаружения
- DHCP-сервер находит подходящий IP-адрес в своем собственном теле, а затем передаетпредоставить сообщение.
- отправит еще один на устройство, подключенное к Интернетусообщение запроса, перейдите к трансляции, чтобы узнать, можно ли использовать определенный IP-адрес.
- DHCP-сервер отправляетсообщение подтверждения, чтобы ответить, можно ли использовать этот IP-адрес или нет.
Почему это так сложно? Основная причина в том, что в сети может быть несколько DHCP-серверов. Когда устройство запрашивает IP-адрес, все DHCP-серверы получают широковещательную рассылку и отправляют им IP-адрес, который они считают подходящим. Когда устройство доступа в Интернет получает много IP-адресов, оно случайным образом выбирает IP-адрес и снова передает его. Можно ли использовать этот IP-адрес? Просто укажите IP-адрес. Все DHCP подтвердят, является ли IP-адрес вашим собственным. является вашим собственным, ответьте сообщением с подтверждением, а затем обновите свою собственную базу данных, этот IP-адрес был кем-то использован. Если это не ваш собственный IP-адрес, он вернет ошибку и вернет IP-адрес, который вы только что назначили.
Конкретный процесс общения выглядит следующим образом:
- Порт по умолчанию для DHCP-сервера — 67.
- Порт по умолчанию для сетевых устройств для отправки DHCP-сообщений — 68.
- Пакет обнаружения: IP-адрес источника 0.0.0.0:68 IP-адрес назначения 255.255.255.255:67 Обе стороны не знают IP-адреса друг друга, поэтому все они являются широковещательными.
- Предоставление пакетов: IP-адрес источника x.x.x.x: 67 IP-адрес назначения 255.255.255.255: 67
- Далее следует отправить еще одно сообщение с запросом и сообщение с подтверждением.
Убедитесь, что сообщение содержит IP-адрес, маску подсети и другую информацию, а также некоторые данные, такие как время истечения срока действия IP-адреса, чтобы упростить восстановление IP-адреса. Поскольку его невозможно выделить и не использовать повторно, по истечении срока действия IP-адреса интернет-устройство будет использовать DHCP для обновления IP-адреса.
Пакеты DHCP имеют следующие характеристики:
- Реализуется на прикладном уровне и реализуется через прикладной процесс
- Использовать UDP
- IP-вещание используется
Похоже, этот протокол прост и забавен.
Глядя на интересный протокол ICMP (Internet Control Message Protocol).
ICMP — это протокол управляющих сообщений Интернета.
тесно связаны с ИП. Его основными функциями являются отчеты об ошибках и обнаружение сети. Сообщения об ошибках означают, что при пересылке данных в сети могут возникать некоторые ошибки, например, когда дейтаграмма проходит через маршрутизатор и обнаруживает, что TTL=0, маршрутизатор отбрасывает пакет и отправляет ICMP-пакет отправителю. Наиболее часто используемой функцией обнаружения сети является инструмент ping.Этот инструмент ping основан на ответном сообщении эхо-запроса ICMP, которое относится к формату сообщения в ICMP. В соответствии с функцией ICMP пакеты ICMP также делятся на две категории.
Сообщение об ошибке:
Сообщение о недоступности пункта назначения: например, сеть назначения недоступна, порт назначения недоступен и т. д., будет отправлено сообщение этого типа.
Подавление источника: когда кэш маршрутизатора заполнен, маршрутизатор отправляет сообщение исходному узлу, чтобы подавить скорость отправки для управления перегрузкой.Однако в настоящее время используются другие методы управления перегрузкой, и это сообщение используется редко.
Пакет тайм-аута/истечения срока действия: наиболее типичное количество промежуточных устройств маршрутизации превышает значение TTL.
Ошибка параметра: если есть проблема с заголовком дейтаграммы, будет отправлено сообщение этого типа.
Перенаправление: когда сетью назначения является не адрес, пересылаемый моим маршрутизатором, а адрес, пересылаемый другим маршрутизатором рядом со мной, такое сообщение будет отправлено хосту-источнику.
Вторая категория — это пакеты, которые ищет сеть:
Эхо-запрос и ответное сообщение: ping
Пакеты запросов и ответов с метками времени: используются для получения меток времени.
На самом деле существует множество типов ICMP пакетов, и разобраться в них непросто. Всем полезно попробовать. Не углубляйтесь в это слишком глубоко. Просто запомните много информации отчета в процессе передачи на сети, которая обычно основана на протоколе ICMP.
Вот несколько ситуаций, когда пакеты ICMP не отправляются:
- Если исходное ICMP-сообщение отправлено, а в дейтаграмме есть ошибка, оно не будет отправлено в это время, а если отправлено, то легко зациклиться.
- Фрагментация дейтаграмм IP отправляет пакеты ICMP только к первому фрагменту и не отправляет другие фрагменты. Например, если есть ошибка, что целевая сеть недоступна, первая проблема заключается в том, что все последующие пакеты отправляются в одну и ту же сеть.Чтобы уменьшить дублирование и потребление сети, обычно отправляется только первый фрагмент.
- Дейтаграммы, использующие многоадресный IP-адрес, не отправляют пакеты ICMP.Поскольку это широковещательная рассылка, отправляемая на все хосты, легко вызвать широкий спектр пакетов ошибок.Поэтому предусмотрено, что дейтаграммы этого типа не отправляют пакеты ICMP.
- Дейтаграммы для специальных IP-адресов, таких как 127.0.0.0 или 0.0.0.0, не отправляются;
В настоящее время, с развитием Интернета, все еще есть несколько ICMP-пакетов, которые больше не используются, например:
Информационные запросы находятся в ответных пакетах.
Пакеты запросов и ответов на маску подсети.
Запрос маршрутизатора и рекламные сообщения
Давайте взглянем на волшебное использование ICMP Tracerout, которое используется для обнаружения информации о маршрутизаторе, через который дейтаграмма отправляется на хост-получатель.
путь маршрутизации зонда traceroute
Первая группа IP-дейтаграмм устанавливает TTL в 1, затем следующий маршрут обязательно будет отброшен, маршрутизатор отправит ICMP-сообщение, а затем замерит время приема-передачи.
Второй набор IP-датаграмм TTL=2
...
….
…….
Условие остановки: traceroute использует номер порта, который редко используется при инкапсуляции UDP-пакетов.Когда он достигает узла назначения, узел назначения возвращает сообщение об ошибке, что порт недоступен. . Это проверяет полный путь маршрутизации. При измерении маршрутов группа будет отправлять три дейтаграммы для предотвращения проблем.
Ну, соответствующие знания о сетевом уровне также закончены. Я не знаю, нравится вам это или нет. Вы можете просматривать его и читать снова и снова. Если у вас есть какие-либо вопросы, вы можете общаться со мной больше. WeChat WytheHard.
Добро пожаловать в публичный аккаунт: Эдемский сад мистера Ву