[{"data":1,"prerenderedAt":1122},["ShallowReactive",2],{"$f_TiAUByewuRkbYu-9OIVdmQP96pir15e0ARLhXuWLL8":3,"$fMMUdSFktwQFqMVGPrTtt3EC5yheBp7PzwIqznamFcMo":67,"$fc0LoAJgqXDLbKKd2JS_NpM4SuzBK8EycUXINSg09CKU":70,"$fM3ea55k6lKMPOTM84llDB26VSQDVVbxiQuSBFQw9P_c":75,"$f1Prj1xEczHja_-L7FyIGgRHd5_cSWHo7r6AE5aheAik":420,"$fI5fDmvm-5tr9wcH0eHaKZa1j3y_FQIQaHHPqbZxAHJE":642,"mdc--hfjtts-key":662,"mdc--dqvsre-key":674,"mdc--6o24uo-key":682,"mdc--r92pi0-key":691,"mdc-b5fp2-key":700,"mdc--qe062s-key":709,"mdc--yo6eb6-key":717,"mdc-522k7k-key":732,"mdc-445cax-key":781,"mdc--16e1zd-key":789,"mdc--2yrnny-key":1029,"mdc--81arbt-key":1059},{"content":4,"quizQuestionContent":37,"type":56,"pageMeta":57},[5,9,13,16,20,24,27,30,34],{"id":6,"value":7,"isTypeH1":8},"1861","Роль TCP и IP в термине «TCP/IP»",true,{"id":10,"value":11,"anchor":12,"isTypeH2":8},"4228","Теория: что такое TCP/IP","theory-what-is-tcp-ip",{"id":14,"value":15,"isTypeParagraph":8},"9753","В термине «TCP/IP» обычно имеются в виду два разных протокола стека: TCP и IP, работающие на разных уровнях и решающие разные задачи передачи данных.\n\nТермин «TCP/IP» исторически используется как сокращение для набора протоколов Интернета и одновременно как «пара» самых известных протоколов — TCP и IP.  \nФормально TCP и IP — это именно протоколы (набор правил формата и обработки данных), а не «программы» и не «железо».\n\nIP (в классическом смысле IPv4) проектировался как протокол доставки «датаграмм» (datagrams) от источника к назначению на основе адресов, без механизмов надёжности, управления потоком и упорядочивания.  \nДля IP характерно ограничение задачей «доставить пакет битов от источника к назначению», без добавления end-to-end надёжности, sequencing или flow control.\n\nTCP описывается как transport-layer протокол, предоставляющий приложениям надёжный, упорядоченный, двунаправленный `byte-stream`.  \nБайтовый поток приложений переносится по сети в виде TCP-сегментов, и каждый сегмент отправляется как IP-датаграмма.",{"id":17,"description":18,"titleAlert":19,"isTypeAlertInfo":8},"592","В современном Web встречаются варианты поверх IP без TCP (например, HTTP/3 поверх QUIC/UDP), но IP при этом остаётся базовой «службой доставки» между узлами, а роль TCP остаётся типичной для HTTP/1.1 и HTTP/2.",null,{"id":21,"value":22,"anchor":23,"isTypeH2":8},"4229","Уровни и инкапсуляция","layers-and-encapsulation",{"id":25,"value":26,"isTypeParagraph":8},"9754","Классическая модель TCP/IP обычно описывается 4 уровнями: `link` → `internet` → `transport` → `application`.  \nIP относится к `internet layer` (часто также говорят «сетевой уровень»), а TCP относится к `transport layer`.\n\nНиже показана идея инкапсуляции (каждый уровень «упаковывает» данные вышестоящего уровня):\n\n```\nДанные приложения (например, HTTP)\n        ↓\nTCP:  добавляется TCP-заголовок  → получается TCP segment\n        ↓\nIP:   добавляется IP-заголовок   → получается IP datagram (packet)\n        ↓\nLink: добавляется заголовок/трейлер канального уровня → frame\n```\n\nСвязь TCP и IP описывается напрямую: модуль TCP передаёт TCP-сегмент модулю IP как «данную часть» IP-датаграммы, а IP обеспечивает продвижение датаграммы к следующему узлу/шлюзу.  \nЭто же формулируется как то, что TCP-сегменты отправляются как интернет-датаграммы, при этом IP-заголовок несёт адреса хостов, а TCP-заголовок содержит TCP-специфичную информацию.\n\nТаблица ниже помогает соотнести роли (практически полезно для Web-разработки при диагностике сетевых проблем):\n\n| Уровень (TCP/IP) | Ключевая задача | Тип данных | Пример идентификаторов |\n|---|---|---|---|\n| Application | Логика приложения и форматы сообщений | Сообщения/данные приложения | URL, HTTP-заголовки |\n| Transport (TCP) | Надёжная доставка, порядок, поток байт, мультиплексирование | TCP segment | Порты (например `443`), `seq/ack` |\n| Internet (IP) | Адресация и доставка датаграмм между сетями, маршрутизация | IP datagram | IP-адреса, TTL, поле `Protocol` |\n| Link | Доставка в пределах одного канала/сегмента сети | Frame | MAC-адреса (в Ethernet) |\n",{"id":28,"description":29,"titleAlert":19,"isTypeAlertInfo":8},"593","Смешение терминов «сетевой уровень» (OSI L3) и `internet layer` (TCP/IP) часто приводит к ошибкам в ответах: корректнее привязывать TCP к `transport layer`, а IP к `internet layer` и подтверждать это через инкапсуляцию «TCP segment внутри IP datagram».",{"id":31,"value":32,"anchor":33,"isTypeH2":8},"4230","На практике","practice",{"id":35,"value":36,"isTypeParagraph":8},"9755","На практике TCP проявляется как «соединение» (`connection`) между двумя сокетами (IP-адрес + порт), поверх которого идут HTTP/1.1 и HTTP/2, а IP проявляется как «адресация/маршрут» до удалённого узла.  \nСвязь с IP-адресами видна даже на уровне состояния соединения: в структуре состояния хранятся локальные и удалённые IP-адреса и номера портов.\n\nПример на Node.js показывает, что приложение работает с TCP-сокетом (transport), а адрес назначения представлен хостом/IP и портом (internet + transport):\n\n```\nconst net = require('net');\n\nconst server = net.createServer((socket) => {\n  console.log('client connected from', socket.remoteAddress, socket.remotePort);\n\n  socket.on('data', (buf) => {\n    console.log('got bytes:', buf.length);\n    socket.write('HTTP/1.1 200 OK\\r\\nContent-Length: 2\\r\\n\\r\\nOK');\n  });\n\n  socket.on('end', () => console.log('client disconnected'));\n});\n\nserver.listen(8080, '0.0.0.0', () => {\n  console.log('listening on 0.0.0.0:8080');\n});\n```\n\nСетевой путь «браузер → сервер» при HTTP/1.1 упрощённо выглядит так: HTTP (application) → TCP (transport) → IP (internet) → link.  \nКлючевой диагностический вывод: проблемы вида «соединение не устанавливается» часто относятся к TCP (таймауты, этапы установки соединения), а проблемы вида «не находится маршрут/не тот адрес/TTL» относятся к IP/маршрутизации.\n\nДля самопроверки удобно удерживать в голове две фразы: IP не добавляет end-to-end надёжность и sequencing, а TCP предоставляет надёжный, упорядоченный `byte-stream` и отправляет сегменты как IP-датаграммы.\n\nКратко: корректная трактовка «TCP/IP» — TCP является транспортным протоколом (надёжный упорядоченный поток байт), а IP является протоколом интернет/сетевого уровня (адресация и доставка датаграмм без надёжности end-to-end).",{"id":38,"options":39,"hint":53,"solution":54,"description":55},"1108",[40,44,47,50],{"id":41,"label":42,"isCorrect":43},"4560","TCP — общее название всего стека протоколов Интернета, а IP — прикладной протокол, внутри которого работает, например, HTTP и другие протоколы приложений.",false,{"id":45,"label":46,"isCorrect":43},"4561","TCP — «физический интерфейс» передачи сигналов по среде (кабелю/радио), а IP — «канальный протокол», который формирует кадры и управляет доступом к среде.  ",{"id":48,"label":49,"isCorrect":8},"4562","TCP — протокол транспортного уровня (обеспечивает надёжную доставку потока байт), а IP — протокол интернет/сетевого уровня (адресация и доставка датаграмм между сетями). ",{"id":51,"label":52,"isCorrect":43},"4563","TCP — протокол интернет/сетевого уровня (маршрутизирует пакеты по адресам), а IP — транспортный протокол (обеспечивает надёжность, порядок и контроль доставки данных).  ","Подсказка: следует определить, на каком уровне работает каждый протокол, и проверить инкапсуляцию «TCP segment внутри IP datagram»; TCP отвечает за надёжность/порядок, IP — за адресацию/доставку датаграмм между сетями.","**Правильный ответ: 3** - TCP — протокол транспортного уровня (обеспечивает надёжную доставку потока байт), а IP — протокол интернет/сетевого уровня (адресация и доставка датаграмм между сетями). ","\"TCP/IP\" - кем является TCP, а кем IP в данном случае?","quizQuestion",{"title":58,"description":59,"ogTitle":7,"ogDescription":59,"ogImageUrl":60,"canonical":19,"ogLocale":61,"ogSiteName":62,"ogImageType":63,"ogImageWidth":64,"ogImageHeight":65,"ogType":66,"ogUrl":19},"TCP/IP - кем является TCP, а кем IP в данном случае?","Разбор: TCP — транспорт (над IP), IP — сеть/маршрутизация; слои, инкапсуляция, примеры для Web-разработки.","/og-image.png","ru_RU","goodwebjob.ru","image_jpeg","1200","630","article",{"siteName":68,"siteUrl":69},"GOOD WEB JOB!","https://goodwebjob.ru",[71],{"label":72,"slug":73,"to":74},"Подготовка к тех.интервью","technical-interview","/technical-interview/where-to-begin",{"navigationList":76,"navigationSublist":84},[77,80],{"path":74,"isActive":43,"name":78,"icon":79,"isNavbarMobileDisabled":8},"С чего начать?","material-symbols:visibility-outline-rounded",{"path":81,"isActive":8,"name":82,"icon":83,"isNavbarMobileDisabled":43},"/technical-interview/tasks","Сборник задач","material-symbols:task-outline",[85,94,121,133,139,280,304,313,319,381,402,408],{"title":86,"list":87,"isOpened":43},"Bash",[88,91],{"name":89,"path":90,"isActive":43},"Дан фрагмент bash-скрипта: cd ~; mkdir foo... Что в нем происходит?","/technical-interview/tasks/here-is-a-fragment-of-a-bash-script-cd-mkdir-foo-what-is-happening-in-this-script",{"name":92,"path":93,"isActive":43},"Дан фрагмент bash-скрипта: target=$(ps -Af | grep $1 | head -n 1)...","/technical-interview/tasks/here-is-a-fragment-of-a-bash-script-target-ps-af-grep-1-head-n-1",{"title":95,"list":96,"isOpened":43},"CSS",[97,100,103,106,109,112,115,118],{"name":98,"path":99,"isActive":43},"Дан HTML-код. Какой будет цвет у текста «Some dummy text»?","/technical-interview/tasks/the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":101,"path":102,"isActive":43},"Есть шаблон HTML и CSS кода. Какой будет цвет у текста «Таким образом, постоянное»?","/technical-interview/tasks/there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":104,"path":105,"isActive":43},"Есть шаблон вложенного HTML кода. Какой будет цвет у текста «One more dummy text»?","/technical-interview/tasks/there-is-a-template-for-embedded-html-code-what-will-be-the-color-of-the-one-more-dummy-text",{"name":107,"path":108,"isActive":43},"Есть шаблон вложенного HTML кода. Будет ли display:block у body влиять на span?","/technical-interview/tasks/there-is-a-template-for-embedded-html-code-will-there-be-a-display-does-bodys-block-affect-span",{"name":110,"path":111,"isActive":43},"Есть HTML код. Будет ли font-weight на span влиять?","/technical-interview/tasks/there-is-an-html-code-will-font-weight-affect-span",{"name":113,"path":114,"isActive":43},"Flexbox и Grid, чем отличаются друг от друга?","/technical-interview/tasks/what-are-the-differences-between-flexbox-and-grid",{"name":116,"path":117,"isActive":43},"Заменяют ли Flexbox и Grid друг друга?","/technical-interview/tasks/do-flexbox-and-grid-replace-each-other",{"name":119,"path":120,"isActive":43},"Есть CSS и JS анимация. Какая между ними разница, что быстрее, что более удобно?","/technical-interview/tasks/there-are-css-and-js-animations-what-is-the-difference-between-them-and-which-is-faster-and-more-convenient",{"title":122,"list":123,"isOpened":43},"Git",[124,127,130],{"name":125,"path":126,"isActive":43},"Разрабатывал, взял закоммитил, запушил. Оказалось, что запушил не в ту ветку, точнее, коммит не в ту ветку. Какие действия?","/technical-interview/tasks/developed-it-committed-it-and-launched-it-it-turned-out-that-i-had-pushed-it-to-the-wrong-branch-or-rather-the-commit-was-in-the-wrong-branch-what-actions",{"name":128,"path":129,"isActive":43},"В git есть несколько вариантов слияния веток, какие? Чем отличаются?","/technical-interview/tasks/git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":131,"path":132,"isActive":43},"Какие существуют стратегии ветвления для работы команды? Что это такое?","/technical-interview/tasks/what-are-the-branching-strategies-for-the-team-what-is-it",{"title":134,"list":135,"isOpened":43},"HTML",[136],{"name":137,"path":138,"isActive":43},"Что такое HTML?","/technical-interview/tasks/what-is-html",{"title":140,"list":141,"isOpened":43},"JavaScript",[142,145,148,151,154,157,160,163,166,169,172,175,178,181,184,187,190,193,196,199,202,205,208,211,214,217,220,223,226,229,232,235,238,241,244,247,250,253,256,259,262,265,268,271,274,277],{"name":143,"path":144,"isActive":43},"Какие логические значения в console.log будут получены?","/technical-interview/tasks/prototype-what-logical-values-will-be-received-in-console-log",{"name":146,"path":147,"isActive":43},"Почему опасно писать прямо в прототипы базовых типов?","/technical-interview/tasks/why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":149,"path":150,"isActive":43},"Что вернёт следующий код? Object.create(null).hasOwnProperty('toString')","/technical-interview/tasks/what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":152,"path":153,"isActive":43},"Какое значение выведет консоль с object.property?","/technical-interview/tasks/what-value-will-the-console-output-with-object-property",{"name":155,"path":156,"isActive":43},"Что выведется в console.log([arr[0](), arr[0]()])?","/technical-interview/tasks/what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":158,"path":159,"isActive":43},"Что выведет console.log в результате выполнения цикла while?","/technical-interview/tasks/what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":161,"path":162,"isActive":43},"Есть функция и объект. Напишите все известные вам способы, чтобы вывести в консоли значение x из объекта, используя функцию","/technical-interview/tasks/there-is-a-function-and-an-object-write-all-the-ways-you-know-to-output-the-value-of-x-from-an-object-in-the-console-using-the-function",{"name":164,"path":165,"isActive":43},"Что вернёт метод book.getUpperName()?","/technical-interview/tasks/what-will-the-book-get-upper-name-method-return",{"name":167,"path":168,"isActive":43},"Переменные объявлены следующим образом: a=3; b=«hello»;. Укажите правильное утверждение","/technical-interview/tasks/variables-are-declared-as-follows-specify-the-correct-statement",{"name":170,"path":171,"isActive":43},"Что выведет консоль в случае присвоения свойства массиву по строковому положительному индексу?","/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":173,"path":174,"isActive":43},"Что выведет консоль в случае присвоения свойства массиву по строковому отрицательному индексу?","/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":176,"path":177,"isActive":43},"Что выведет консоль в случае удаления элемента массива с помощью оператора delete?","/technical-interview/tasks/what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":179,"path":180,"isActive":43},"Что вернёт этот код: typeof (function(){})()","/technical-interview/tasks/what-this-code-will-return-typeof-function",{"name":182,"path":183,"isActive":43},"Что получится в результате передачи объекта как аргумента в функцию и выполнения кода?","/technical-interview/tasks/what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":185,"path":186,"isActive":43},"Какие способы объявления функции есть в JavaScript?","/technical-interview/tasks/what-are-the-ways-to-declare-a-function-in-javascript",{"name":188,"path":189,"isActive":43},"Что такое this в JavaScript?","/technical-interview/tasks/what-is-this-in-javascript",{"name":191,"path":192,"isActive":43},"Что такое Event Loop, как работает?","/technical-interview/tasks/what-is-an-event-loop-and-how-does-it-work",{"name":194,"path":195,"isActive":43},"Что будет, если вызвать typeof на необъявленной переменной?","/technical-interview/tasks/what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":197,"path":198,"isActive":43},"Что показывает оператор typeof в JavaScript?","/technical-interview/tasks/what-does-the-typeof-operator-show-in-javascript",{"name":200,"path":201,"isActive":43},"Какие типы данных существует в JavaScript?","/technical-interview/tasks/what-types-of-data-exist-in-javascript",{"name":203,"path":204,"isActive":43},"Какую структуру использовать для хранения упорядоченного списка строк в JavaScript?","/technical-interview/tasks/what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":206,"path":207,"isActive":43},"Что вернет typeof для массива?","/technical-interview/tasks/what-will-typeof-return-for-an-array",{"name":209,"path":210,"isActive":43},"Почему оператор typeof, применённый к массиву, возвращает объект?","/technical-interview/tasks/why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":212,"path":213,"isActive":43},"Если нужно хранить список уникальных строк, какую структуру данных выбрать?","/technical-interview/tasks/if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":215,"path":216,"isActive":43},"Что возвращает typeof для new Set в JavaScript?","/technical-interview/tasks/what-does-typeof-return-for-new-set-in-javascript",{"name":218,"path":219,"isActive":43},"Почему в JavaScript два объекта с одинаковым содержимым при сравнении возвращают false?","/technical-interview/tasks/why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":221,"path":222,"isActive":43},"В чем разница между микро- и макро-тасками в JavaScript?","/technical-interview/tasks/what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":224,"path":225,"isActive":43},"arr.push(0) повлияет на массив так же, как если бы мы выполнили...","/technical-interview/tasks/arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":227,"path":228,"isActive":43},"Вернуть массив от 1 до n, где числа, кратные 3, заменены на 'fizz', кратные 5 - на 'buzz', а кратные и 3, и 5 одновременно - на 'fizzbuzz'","/technical-interview/tasks/returns-an-array-from-1-to-n-replacing-numbers-that-are-multiples-of-3-with-fizz-numbers-that-are-multiples-of-5-with-buzz-and-numbers-that-are-multiples-of-both-3-and-5-with-fizzbuzz",{"name":230,"path":231,"isActive":43},"Дана строка: 'one.two.three.four.five'. Необходимо из строки сделать вложенный объект","/technical-interview/tasks/the-string-one-two-three-four-five-is-given-it-is-necessary-to-make-a-nested-object-out-of-the-string",{"name":233,"path":234,"isActive":43},"Дано дерево (вложенный объект), надо найти сумму всех вершин","/technical-interview/tasks/given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":236,"path":237,"isActive":43},"Для каждого вложенного объекта нужно добавить свойство level, которое равняется числу - номер вложенности","/technical-interview/tasks/for-each-nested-object-you-need-to-add-the-level-property-which-is-equal-to-a-number-the-nesting-number",{"name":239,"path":240,"isActive":43},"Для каждой ветви дерева записать номер вложенности данной ветви","/technical-interview/tasks/for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":242,"path":243,"isActive":43},"Есть массив, в котором лежат объекты с датами, необходимо отсортировать даты по возрастанию","/technical-interview/tasks/there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":245,"path":246,"isActive":43},"Есть слова в массиве, необходимо определить, состоят ли они из одних и тех же букв","/technical-interview/tasks/there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":248,"path":249,"isActive":43},"Есть строка, состоящая из разных скобок, необходимо проверить, закрыты ли все","/technical-interview/tasks/there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":251,"path":252,"isActive":43}," Найти в массиве неповторяющиеся числа","/technical-interview/tasks/find-non-repeating-numbers-in-an-array",{"name":254,"path":255,"isActive":43},"Напишите функцию, который сделает из массива объект","/technical-interview/tasks/write-a-function-that-will-make-an-object-out-of-an-array",{"name":257,"path":258,"isActive":43},"Необходимо проверить, являются ли две строки анаграммами друг друга","/technical-interview/tasks/checks-whether-two-strings-are-anagrams-of-each-other",{"name":260,"path":261,"isActive":43},"Нечётные числа должны отсортироваться по возрастанию, а чётные должны остаться на своих местах","/technical-interview/tasks/odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":263,"path":264,"isActive":43},"Определить, является ли слово палиндромом","/technical-interview/tasks/determines-whether-a-word-is-a-palindrome",{"name":266,"path":267,"isActive":43},"«Расплющивание» массива","/technical-interview/tasks/flattening-the-array",{"name":269,"path":270,"isActive":43},"Реализовать функцию, принимающую аргументы \"*\", \"1\", \"b\", \"1c\" и возвращающую строку \"1*b*1c\"","/technical-interview/tasks/implement-a-function-that-accepts-arguments-1-b-1c-and-the-return-string-1-b-1c",{"name":272,"path":273,"isActive":43},"Сжатие строк","/technical-interview/tasks/string-compression",{"name":275,"path":276,"isActive":43},"Уникализация значений в массиве","/technical-interview/tasks/unifying-values-in-an-array",{"name":278,"path":279,"isActive":43},"Числа от 1 до 100 находятся в массиве, они хаотично перемешанные, но в нём не хватает одного числа из этой последовательности. Необходимо найти его","/technical-interview/tasks/the-numbers-from-1-to-100-are-in-the-array-they-are-randomly-mixed-but-it-lacks-one-number-from-this-sequence-it-is-necessary-to-find-him",{"title":281,"list":282,"isOpened":43},"React",[283,286,289,292,295,298,301],{"name":284,"path":285,"isActive":43},"Для чего нужен React, какие он решает проблемы?","/technical-interview/tasks/what-is-react-used-for-and-what-problems-does-it-solve",{"name":287,"path":288,"isActive":43},"Какой механизм лежит в основе оптимизации обновлений DOM в React?","/technical-interview/tasks/what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":290,"path":291,"isActive":43},"Если убрать в React VDOM/Fiber, и вручную изменять DOM, разве это не оптимально?","/technical-interview/tasks/if-you-remove-the-vdom-fiber-in-react-and-manually-change-the-dom-isn-t-that-optimal",{"name":293,"path":294,"isActive":43},"Есть блок кода. Что в реальном DOM изменится после нажатия на кнопку?","/technical-interview/tasks/there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":296,"path":297,"isActive":43},"Есть код, в котором список и кнопка. Что в реальном DOM изменится после нажатия на кнопку?","/technical-interview/tasks/there-is-a-code-in-which-there-is-a-list-and-a-button-what-will-change-in-the-real-dom-after-clicking-on-the-button",{"name":299,"path":300,"isActive":43},"Зачем нужен Redux (Mobx/Effector)? Зачем нужен менеджер состояния? Какие проблемы решает?","/technical-interview/tasks/why-do-we-need-redux-mobx-effector-why-do-we-need-a-state-manager-what-problems-does-it-solve",{"name":302,"path":303,"isActive":43},"Что мешает организовать централизованное состояние без менеджера состояния? Если организовать состояние механизмами реакта: контекстом, стейтом, в чем проблема? Что менеджеры состояния привносят?","/technical-interview/tasks/what-prevents-you-from-organizing-a-centralized-state-without-a-state-manager-if-you-organize-the-state-using-react-context-and-state-mechanisms-what-is-the-problem-what-do-state-managers-add",{"title":305,"list":306,"isOpened":43},"Алгоритмы",[307,310],{"name":308,"path":309,"isActive":43},"Что такое алгоритмическая сложность?","/technical-interview/tasks/what-is-algorithmic-complexity",{"name":311,"path":312,"isActive":43},"Какая алгоритмическая сложность у \"быстрой сортировки\"?","/technical-interview/tasks/what-is-the-algorithmic-complexity-of-quick-sort",{"title":314,"list":315,"isOpened":43},"Дебаггинг",[316],{"name":317,"path":318,"isActive":43},"Как диагностировать и исправить нежелательное изменение цвета фона по клику на кнопку, если исходный код сайта запутан и недоступен для прямого чтения?","/technical-interview/tasks/how-can-diagnose-and-fix-unwanted-background-color-changes-when-clicking-on-a-button-if-the-source-code-of-the-site-is-confusing-and-inaccessible-to-direct-reading",{"title":320,"list":321,"isOpened":43},"Компьютерные сети",[322,325,328,331,334,337,339,342,345,348,351,354,357,360,363,366,369,372,375,378],{"name":323,"path":324,"isActive":43},"Как браузер после ввода домена понимает, откуда брать сайт?","/technical-interview/tasks/how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":326,"path":327,"isActive":43},"Что такое DNS, как DNS находит нужный IP-адрес?","/technical-interview/tasks/what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":329,"path":330,"isActive":43},"Как домен попадает в DNS в таблицу соответствия: домен – ip","/technical-interview/tasks/how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":332,"path":333,"isActive":43},"Как браузер решает, какое соединение ему открывать, TCP или UDP?","/technical-interview/tasks/how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":335,"path":336,"isActive":43},"Ключевые отличия TCP и UDP","/technical-interview/tasks/key-differences-between-tcp-and-udp",{"name":55,"path":338,"isActive":43},"/technical-interview/tasks/tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":340,"path":341,"isActive":43},"Что такое HTTP и из чего состоит?","/technical-interview/tasks/what-is-http-and-what-does-it-consist-of",{"name":343,"path":344,"isActive":43},"Что такое заголовки в HTTP и зачем они нужны?","/technical-interview/tasks/what-are-http-headers-and-why-do-we-need-them",{"name":346,"path":347,"isActive":43},"Что такое параметры в HTTP?","/technical-interview/tasks/what-are-http-parameters",{"name":349,"path":350,"isActive":43},"Где находится HTML-код в структуре HTTP-ответа?","/technical-interview/tasks/where-is-the-html-code-located-in-the-http-response-structure",{"name":352,"path":353,"isActive":43},"Чем отличаются 1.0, 1.1, 2.0, 3.0 версии HTTP?","/technical-interview/tasks/what-are-the-differences-between-http-versions-1-0-1-1-2-0-and-3-0",{"name":355,"path":356,"isActive":43},"Пользователь авторизован на сайте. Как сервер узнает об этом с последующими другими заходами, что «я – авторизованный пользователь»?","/technical-interview/tasks/the-user-is-logged-in-on-the-website-how-does-the-server-know-that-i-am-an-authorized-user-when-the-user-logs-in-again",{"name":358,"path":359,"isActive":43},"Что такое cookie?","/technical-interview/tasks/what-is-a-cookie",{"name":361,"path":362,"isActive":43},"Кто является инициатором записи cookie в браузере?","/technical-interview/tasks/who-initiates-the-cookie-recording-in-the-browser",{"name":364,"path":365,"isActive":43},"Есть ли возможность с клиента (с браузера) управлять cookie?","/technical-interview/tasks/is-it-possible-to-manage-cookies-from-the-client-browser",{"name":367,"path":368,"isActive":43},"Верно ли утверждение, что злоумышленник, контролирующий роутер и прослушивающий трафик, может получить логины и пароли от сайтов, на которые заходит клиент?","/technical-interview/tasks/is-it-true-that-an-attacker-who-controls-a-router-and-listens-to-traffic-can-obtain-logins-and-passwords-from-websites-that-a-client-visits",{"name":370,"path":371,"isActive":43},"Всё, что идет по HTTPS – оно защищено?","/technical-interview/tasks/is-everything-that-goes-through-https-secure",{"name":373,"path":374,"isActive":43},"Все данные зашифрованы, используется https. Хакер взламывает dns и делает подмену одного ip на другой, на фишинговый сайт. В этом случае, злоумышленник может получить данные (логин \\ пароль)?","/technical-interview/tasks/all-data-is-encrypted-https-is-used-let-s-assume-a-hacker-hacks-the-dns-and-makes-a-substitution-of-one-ip-for-another-a-phishing-site",{"name":376,"path":377,"isActive":43},"Есть веб-приложение. Помимо HTTP, какие протоколы того же уровня (Application Layer) можно дополнительно использовать в веб-приложении в браузере?","/technical-interview/tasks/there-is-a-web-application-in-addition-to-http-what-other-protocols-of-the-same-level-application-layer-can-be-used-in-the-web-application-in-browser",{"name":379,"path":380,"isActive":43},"Каким способом может выполняться авторизация пользователя на сайте?","/technical-interview/tasks/how-can-a-user-be-authorized-on-a-website",{"title":382,"list":383,"isOpened":43},"Отрисовка в браузере",[384,387,390,393,396,399],{"name":385,"path":386,"isActive":43},"Что происходит, когда HTTP прислал HTML? Что браузер дальше делает c HTML с учетом того, что она валидная?","/technical-interview/tasks/what-happens-when-http-sends-html-what-does-the-browser-do-with-this-html-given-that-it-is-valid",{"name":388,"path":389,"isActive":43},"Как браузер парсит JavaScript и изображения при рендеринге?","/technical-interview/tasks/how-the-browser-parses-javascript-and-images-when-rendering",{"name":391,"path":392,"isActive":43},"Что в браузере блокирует рендеринг страницы?","/technical-interview/tasks/what-is-blocking-the-page-rendering-in-the-browser",{"name":394,"path":395,"isActive":43},"Что такое DOM в браузере? Что такое CSSOM?","/technical-interview/tasks/what-is-dom-in-a-browser-what-is-cssom",{"name":397,"path":398,"isActive":43},"Что является узлами в DOM?","/technical-interview/tasks/what-are-nodes-in-the-dom",{"name":400,"path":401,"isActive":43},"Из чего состоит CSSOM?","/technical-interview/tasks/what-does-cssom-consist-of",{"title":403,"list":404,"isOpened":43},"Ревью кода",[405],{"name":406,"path":407,"isActive":43},"По каким характеристикам, ревьюер понимает, что данный код - хороший, а этот код - плохой?","/technical-interview/tasks/how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"title":409,"list":410,"isOpened":43},"Теория вероятности",[411,414,417],{"name":412,"path":413,"isActive":43},"В комнате три человека. Какова вероятность того, что хотя бы двое из них одного пола? То есть два и более.","/technical-interview/tasks/there-are-three-people-in-the-room-what-is-the-probability-that-at-least-two-of-them-are-of-the-same-sex-that-is-two-or-more",{"name":415,"path":416,"isActive":43},"Есть монета. Ее подбрасывают пять раз подряд. Каждый раз записывается, что выпало - орел или решка. Сколько разных последовательностей орлов и решек может при этом получиться?","/technical-interview/tasks/there-is-a-coin-it-is-tossed-five-times-in-a-row-each-time-it-is-recorded-whether-it-lands-on-heads-or-tails-how-many-different-sequences-of-heads-and-tails-can-be-obtained",{"name":418,"path":419,"isActive":43},"Как гарантированно найти лёгкую фальшивую монету среди 8 за минимальное число взвешиваний на чашечных весах?","/technical-interview/tasks/how-can-you-guarantee-to-find-an-easy-fake-coin-among-8-in-the-minimum-number-of-weighings-on-a-balance-scale",{"slugs":421},[422,425,427,429,431,434,437,439,441,443,445,447,450,452,454,456,458,460,462,464,466,468,470,472,474,476,478,480,482,484,486,488,490,492,494,496,498,500,502,504,506,508,510,512,514,516,518,520,522,524,526,528,531,533,535,537,539,541,543,545,547,549,551,553,555,557,559,561,563,565,567,569,571,573,575,577,579,581,583,585,587,589,591,593,595,597,599,601,603,605,607,609,611,613,615,617,619,621,623,625,627,629,631,632,634,636,638,640],{"name":423,"value":424},"Теоретические задания","theoretical-tasks",{"name":179,"value":426},"what-this-code-will-return-typeof-function",{"name":78,"value":428},"where-to-begin",{"name":146,"value":430},"why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":432,"value":433},"Backend","backend",{"name":435,"value":436},"Frontend","frontend",{"name":143,"value":438},"prototype-what-logical-values-will-be-received-in-console-log",{"name":260,"value":440},"odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":251,"value":442},"find-non-repeating-numbers-in-an-array",{"name":224,"value":444},"arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":230,"value":446},"the-string-one-two-three-four-five-is-given-it-is-necessary-to-make-a-nested-object-out-of-the-string",{"name":448,"value":449},"Реализовать функцию, похоже как в Jquery","implement-a-function-similar-to-jquery",{"name":236,"value":451},"for-each-nested-object-you-need-to-add-the-level-property-which-is-equal-to-a-number-the-nesting-number",{"name":152,"value":453},"what-value-will-the-console-output-with-object-property",{"name":155,"value":455},"what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":227,"value":457},"returns-an-array-from-1-to-n-replacing-numbers-that-are-multiples-of-3-with-fizz-numbers-that-are-multiples-of-5-with-buzz-and-numbers-that-are-multiples-of-both-3-and-5-with-fizzbuzz",{"name":257,"value":459},"checks-whether-two-strings-are-anagrams-of-each-other",{"name":263,"value":461},"determines-whether-a-word-is-a-palindrome",{"name":242,"value":463},"there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":269,"value":465},"implement-a-function-that-accepts-arguments-1-b-1c-and-the-return-string-1-b-1c",{"name":233,"value":467},"given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":239,"value":469},"for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":245,"value":471},"there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":278,"value":473},"the-numbers-from-1-to-100-are-in-the-array-they-are-randomly-mixed-but-it-lacks-one-number-from-this-sequence-it-is-necessary-to-find-him",{"name":248,"value":475},"there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":254,"value":477},"write-a-function-that-will-make-an-object-out-of-an-array",{"name":158,"value":479},"what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":161,"value":481},"there-is-a-function-and-an-object-write-all-the-ways-you-know-to-output-the-value-of-x-from-an-object-in-the-console-using-the-function",{"name":173,"value":483},"what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":176,"value":485},"what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":275,"value":487},"unifying-values-in-an-array",{"name":266,"value":489},"flattening-the-array",{"name":164,"value":491},"what-will-the-book-get-upper-name-method-return",{"name":272,"value":493},"string-compression",{"name":170,"value":495},"what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":182,"value":497},"what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":323,"value":499},"how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":329,"value":501},"how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":332,"value":503},"how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":335,"value":505},"key-differences-between-tcp-and-udp",{"name":55,"value":507},"tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":340,"value":509},"what-is-http-and-what-does-it-consist-of",{"name":343,"value":511},"what-are-http-headers-and-why-do-we-need-them",{"name":346,"value":513},"what-are-http-parameters",{"name":349,"value":515},"where-is-the-html-code-located-in-the-http-response-structure",{"name":137,"value":517},"what-is-html",{"name":352,"value":519},"what-are-the-differences-between-http-versions-1-0-1-1-2-0-and-3-0",{"name":355,"value":521},"the-user-is-logged-in-on-the-website-how-does-the-server-know-that-i-am-an-authorized-user-when-the-user-logs-in-again",{"name":358,"value":523},"what-is-a-cookie",{"name":361,"value":525},"who-initiates-the-cookie-recording-in-the-browser",{"name":364,"value":527},"is-it-possible-to-manage-cookies-from-the-client-browser",{"name":529,"value":530},"Лайвкодинг","livecoding",{"name":149,"value":532},"what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":370,"value":534},"is-everything-that-goes-through-https-secure",{"name":373,"value":536},"all-data-is-encrypted-https-is-used-let-s-assume-a-hacker-hacks-the-dns-and-makes-a-substitution-of-one-ip-for-another-a-phishing-site",{"name":376,"value":538},"there-is-a-web-application-in-addition-to-http-what-other-protocols-of-the-same-level-application-layer-can-be-used-in-the-web-application-in-browser",{"name":388,"value":540},"how-the-browser-parses-javascript-and-images-when-rendering",{"name":385,"value":542},"what-happens-when-http-sends-html-what-does-the-browser-do-with-this-html-given-that-it-is-valid",{"name":391,"value":544},"what-is-blocking-the-page-rendering-in-the-browser",{"name":394,"value":546},"what-is-dom-in-a-browser-what-is-cssom",{"name":397,"value":548},"what-are-nodes-in-the-dom",{"name":400,"value":550},"what-does-cssom-consist-of",{"name":98,"value":552},"the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":101,"value":554},"there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":104,"value":556},"there-is-a-template-for-embedded-html-code-what-will-be-the-color-of-the-one-more-dummy-text",{"name":107,"value":558},"there-is-a-template-for-embedded-html-code-will-there-be-a-display-does-bodys-block-affect-span",{"name":110,"value":560},"there-is-an-html-code-will-font-weight-affect-span",{"name":113,"value":562},"what-are-the-differences-between-flexbox-and-grid",{"name":116,"value":564},"do-flexbox-and-grid-replace-each-other",{"name":119,"value":566},"there-are-css-and-js-animations-what-is-the-difference-between-them-and-which-is-faster-and-more-convenient",{"name":82,"value":568},"tasks",{"name":185,"value":570},"what-are-the-ways-to-declare-a-function-in-javascript",{"name":188,"value":572},"what-is-this-in-javascript",{"name":191,"value":574},"what-is-an-event-loop-and-how-does-it-work",{"name":194,"value":576},"what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":197,"value":578},"what-does-the-typeof-operator-show-in-javascript",{"name":200,"value":580},"what-types-of-data-exist-in-javascript",{"name":203,"value":582},"what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":206,"value":584},"what-will-typeof-return-for-an-array",{"name":209,"value":586},"why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":212,"value":588},"if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":215,"value":590},"what-does-typeof-return-for-new-set-in-javascript",{"name":284,"value":592},"what-is-react-used-for-and-what-problems-does-it-solve",{"name":290,"value":594},"if-you-remove-the-vdom-fiber-in-react-and-manually-change-the-dom-isn-t-that-optimal",{"name":293,"value":596},"there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":296,"value":598},"there-is-a-code-in-which-there-is-a-list-and-a-button-what-will-change-in-the-real-dom-after-clicking-on-the-button",{"name":299,"value":600},"why-do-we-need-redux-mobx-effector-why-do-we-need-a-state-manager-what-problems-does-it-solve",{"name":317,"value":602},"how-can-diagnose-and-fix-unwanted-background-color-changes-when-clicking-on-a-button-if-the-source-code-of-the-site-is-confusing-and-inaccessible-to-direct-reading",{"name":125,"value":604},"developed-it-committed-it-and-launched-it-it-turned-out-that-i-had-pushed-it-to-the-wrong-branch-or-rather-the-commit-was-in-the-wrong-branch-what-actions",{"name":128,"value":606},"git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":131,"value":608},"what-are-the-branching-strategies-for-the-team-what-is-it",{"name":406,"value":610},"how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"name":89,"value":612},"here-is-a-fragment-of-a-bash-script-cd-mkdir-foo-what-is-happening-in-this-script",{"name":92,"value":614},"here-is-a-fragment-of-a-bash-script-target-ps-af-grep-1-head-n-1",{"name":308,"value":616},"what-is-algorithmic-complexity",{"name":311,"value":618},"what-is-the-algorithmic-complexity-of-quick-sort",{"name":218,"value":620},"why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":379,"value":622},"how-can-a-user-be-authorized-on-a-website",{"name":221,"value":624},"what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":412,"value":626},"there-are-three-people-in-the-room-what-is-the-probability-that-at-least-two-of-them-are-of-the-same-sex-that-is-two-or-more",{"name":415,"value":628},"there-is-a-coin-it-is-tossed-five-times-in-a-row-each-time-it-is-recorded-whether-it-lands-on-heads-or-tails-how-many-different-sequences-of-heads-and-tails-can-be-obtained",{"name":418,"value":630},"how-can-you-guarantee-to-find-an-easy-fake-coin-among-8-in-the-minimum-number-of-weighings-on-a-balance-scale",{"name":72,"value":73},{"name":367,"value":633},"is-it-true-that-an-attacker-who-controls-a-router-and-listens-to-traffic-can-obtain-logins-and-passwords-from-websites-that-a-client-visits",{"name":326,"value":635},"what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":167,"value":637},"variables-are-declared-as-follows-specify-the-correct-statement",{"name":287,"value":639},"what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":302,"value":641},"what-prevents-you-from-organizing-a-centralized-state-without-a-state-manager-if-you-organize-the-state-using-react-context-and-state-mechanisms-what-is-the-problem-what-do-state-managers-add",{"cooperation":643,"copyright":646,"reportError":647,"socialNetwork":649},{"link":644,"title":645},"https://t.me/baurinanton","Сотрудничество","© “GOOD WEB JOB!”",{"label":648,"link":644},"Сообщить об ошибке",{"label":650,"socialNetworkList":651},"Мы в соцсетях:",[652,655,658],{"icon":19,"link":653,"title":654},"https://max.ru/u/f9LHodD0cOKMaukdnnahTeL5pwvjrPfUaZ4S8_1rsNy9I9qsmc9Ar3kP_y8","Max",{"icon":656,"link":644,"title":657},"ic:baseline-telegram","Telegram",{"icon":659,"link":660,"title":661},"ri:vk-fill","https://vk.com/baurinanton","VK",{"data":663,"body":664},{},{"type":665,"children":666},"root",[667],{"type":668,"tag":669,"props":670,"children":671},"element","p",{},[672],{"type":673,"value":55},"text",{"data":675,"body":676},{},{"type":665,"children":677},[678],{"type":668,"tag":669,"props":679,"children":680},{},[681],{"type":673,"value":42},{"data":683,"body":684},{},{"type":665,"children":685},[686],{"type":668,"tag":669,"props":687,"children":688},{},[689],{"type":673,"value":690},"TCP — «физический интерфейс» передачи сигналов по среде (кабелю/радио), а IP — «канальный протокол», который формирует кадры и управляет доступом к среде.",{"data":692,"body":693},{},{"type":665,"children":694},[695],{"type":668,"tag":669,"props":696,"children":697},{},[698],{"type":673,"value":699},"TCP — протокол транспортного уровня (обеспечивает надёжную доставку потока байт), а IP — протокол интернет/сетевого уровня (адресация и доставка датаграмм между сетями).",{"data":701,"body":702},{},{"type":665,"children":703},[704],{"type":668,"tag":669,"props":705,"children":706},{},[707],{"type":673,"value":708},"TCP — протокол интернет/сетевого уровня (маршрутизирует пакеты по адресам), а IP — транспортный протокол (обеспечивает надёжность, порядок и контроль доставки данных).",{"data":710,"body":711},{},{"type":665,"children":712},[713],{"type":668,"tag":669,"props":714,"children":715},{},[716],{"type":673,"value":53},{"data":718,"body":719},{},{"type":665,"children":720},[721],{"type":668,"tag":669,"props":722,"children":723},{},[724,730],{"type":668,"tag":725,"props":726,"children":727},"strong",{},[728],{"type":673,"value":729},"Правильный ответ: 3",{"type":673,"value":731}," - TCP — протокол транспортного уровня (обеспечивает надёжную доставку потока байт), а IP — протокол интернет/сетевого уровня (адресация и доставка датаграмм между сетями).",{"data":733,"body":734},{},{"type":665,"children":735},[736,741,752,762],{"type":668,"tag":669,"props":737,"children":738},{},[739],{"type":673,"value":740},"В термине «TCP/IP» обычно имеются в виду два разных протокола стека: TCP и IP, работающие на разных уровнях и решающие разные задачи передачи данных.",{"type":668,"tag":669,"props":742,"children":743},{},[744,746,750],{"type":673,"value":745},"Термин «TCP/IP» исторически используется как сокращение для набора протоколов Интернета и одновременно как «пара» самых известных протоколов — TCP и IP.",{"type":668,"tag":747,"props":748,"children":749},"br",{},[],{"type":673,"value":751},"\nФормально TCP и IP — это именно протоколы (набор правил формата и обработки данных), а не «программы» и не «железо».",{"type":668,"tag":669,"props":753,"children":754},{},[755,757,760],{"type":673,"value":756},"IP (в классическом смысле IPv4) проектировался как протокол доставки «датаграмм» (datagrams) от источника к назначению на основе адресов, без механизмов надёжности, управления потоком и упорядочивания.",{"type":668,"tag":747,"props":758,"children":759},{},[],{"type":673,"value":761},"\nДля IP характерно ограничение задачей «доставить пакет битов от источника к назначению», без добавления end-to-end надёжности, sequencing или flow control.",{"type":668,"tag":669,"props":763,"children":764},{},[765,767,774,776,779],{"type":673,"value":766},"TCP описывается как transport-layer протокол, предоставляющий приложениям надёжный, упорядоченный, двунаправленный ",{"type":668,"tag":768,"props":769,"children":771},"code",{"className":770},[],[772],{"type":673,"value":773},"byte-stream",{"type":673,"value":775},".",{"type":668,"tag":747,"props":777,"children":778},{},[],{"type":673,"value":780},"\nБайтовый поток приложений переносится по сети в виде TCP-сегментов, и каждый сегмент отправляется как IP-датаграмма.",{"data":782,"body":783},{},{"type":665,"children":784},[785],{"type":668,"tag":669,"props":786,"children":787},{},[788],{"type":673,"value":18},{"data":790,"body":791},{},{"type":665,"children":792},[793,847,852,864,874,879],{"type":668,"tag":669,"props":794,"children":795},{},[796,798,804,806,812,813,819,820,826,827,830,832,838,840,846],{"type":673,"value":797},"Классическая модель TCP/IP обычно описывается 4 уровнями: ",{"type":668,"tag":768,"props":799,"children":801},{"className":800},[],[802],{"type":673,"value":803},"link",{"type":673,"value":805}," → ",{"type":668,"tag":768,"props":807,"children":809},{"className":808},[],[810],{"type":673,"value":811},"internet",{"type":673,"value":805},{"type":668,"tag":768,"props":814,"children":816},{"className":815},[],[817],{"type":673,"value":818},"transport",{"type":673,"value":805},{"type":668,"tag":768,"props":821,"children":823},{"className":822},[],[824],{"type":673,"value":825},"application",{"type":673,"value":775},{"type":668,"tag":747,"props":828,"children":829},{},[],{"type":673,"value":831},"\nIP относится к ",{"type":668,"tag":768,"props":833,"children":835},{"className":834},[],[836],{"type":673,"value":837},"internet layer",{"type":673,"value":839}," (часто также говорят «сетевой уровень»), а TCP относится к ",{"type":668,"tag":768,"props":841,"children":843},{"className":842},[],[844],{"type":673,"value":845},"transport layer",{"type":673,"value":775},{"type":668,"tag":669,"props":848,"children":849},{},[850],{"type":673,"value":851},"Ниже показана идея инкапсуляции (каждый уровень «упаковывает» данные вышестоящего уровня):",{"type":668,"tag":853,"props":854,"children":858},"pre",{"className":855,"code":857,"language":673},[856],"language-text","Данные приложения (например, HTTP)\n        ↓\nTCP:  добавляется TCP-заголовок  → получается TCP segment\n        ↓\nIP:   добавляется IP-заголовок   → получается IP datagram (packet)\n        ↓\nLink: добавляется заголовок/трейлер канального уровня → frame\n",[859],{"type":668,"tag":768,"props":860,"children":862},{"__ignoreMap":861},"",[863],{"type":673,"value":857},{"type":668,"tag":669,"props":865,"children":866},{},[867,869,872],{"type":673,"value":868},"Связь TCP и IP описывается напрямую: модуль TCP передаёт TCP-сегмент модулю IP как «данную часть» IP-датаграммы, а IP обеспечивает продвижение датаграммы к следующему узлу/шлюзу.",{"type":668,"tag":747,"props":870,"children":871},{},[],{"type":673,"value":873},"\nЭто же формулируется как то, что TCP-сегменты отправляются как интернет-датаграммы, при этом IP-заголовок несёт адреса хостов, а TCP-заголовок содержит TCP-специфичную информацию.",{"type":668,"tag":669,"props":875,"children":876},{},[877],{"type":673,"value":878},"Таблица ниже помогает соотнести роли (практически полезно для Web-разработки при диагностике сетевых проблем):",{"type":668,"tag":880,"props":881,"children":882},"table",{},[883,912],{"type":668,"tag":884,"props":885,"children":886},"thead",{},[887],{"type":668,"tag":888,"props":889,"children":890},"tr",{},[891,897,902,907],{"type":668,"tag":892,"props":893,"children":894},"th",{},[895],{"type":673,"value":896},"Уровень (TCP/IP)",{"type":668,"tag":892,"props":898,"children":899},{},[900],{"type":673,"value":901},"Ключевая задача",{"type":668,"tag":892,"props":903,"children":904},{},[905],{"type":673,"value":906},"Тип данных",{"type":668,"tag":892,"props":908,"children":909},{},[910],{"type":673,"value":911},"Пример идентификаторов",{"type":668,"tag":913,"props":914,"children":915},"tbody",{},[916,940,977,1006],{"type":668,"tag":888,"props":917,"children":918},{},[919,925,930,935],{"type":668,"tag":920,"props":921,"children":922},"td",{},[923],{"type":673,"value":924},"Application",{"type":668,"tag":920,"props":926,"children":927},{},[928],{"type":673,"value":929},"Логика приложения и форматы сообщений",{"type":668,"tag":920,"props":931,"children":932},{},[933],{"type":673,"value":934},"Сообщения/данные приложения",{"type":668,"tag":920,"props":936,"children":937},{},[938],{"type":673,"value":939},"URL, HTTP-заголовки",{"type":668,"tag":888,"props":941,"children":942},{},[943,948,953,958],{"type":668,"tag":920,"props":944,"children":945},{},[946],{"type":673,"value":947},"Transport (TCP)",{"type":668,"tag":920,"props":949,"children":950},{},[951],{"type":673,"value":952},"Надёжная доставка, порядок, поток байт, мультиплексирование",{"type":668,"tag":920,"props":954,"children":955},{},[956],{"type":673,"value":957},"TCP segment",{"type":668,"tag":920,"props":959,"children":960},{},[961,963,969,971],{"type":673,"value":962},"Порты (например ",{"type":668,"tag":768,"props":964,"children":966},{"className":965},[],[967],{"type":673,"value":968},"443",{"type":673,"value":970},"), ",{"type":668,"tag":768,"props":972,"children":974},{"className":973},[],[975],{"type":673,"value":976},"seq/ack",{"type":668,"tag":888,"props":978,"children":979},{},[980,985,990,995],{"type":668,"tag":920,"props":981,"children":982},{},[983],{"type":673,"value":984},"Internet (IP)",{"type":668,"tag":920,"props":986,"children":987},{},[988],{"type":673,"value":989},"Адресация и доставка датаграмм между сетями, маршрутизация",{"type":668,"tag":920,"props":991,"children":992},{},[993],{"type":673,"value":994},"IP datagram",{"type":668,"tag":920,"props":996,"children":997},{},[998,1000],{"type":673,"value":999},"IP-адреса, TTL, поле ",{"type":668,"tag":768,"props":1001,"children":1003},{"className":1002},[],[1004],{"type":673,"value":1005},"Protocol",{"type":668,"tag":888,"props":1007,"children":1008},{},[1009,1014,1019,1024],{"type":668,"tag":920,"props":1010,"children":1011},{},[1012],{"type":673,"value":1013},"Link",{"type":668,"tag":920,"props":1015,"children":1016},{},[1017],{"type":673,"value":1018},"Доставка в пределах одного канала/сегмента сети",{"type":668,"tag":920,"props":1020,"children":1021},{},[1022],{"type":673,"value":1023},"Frame",{"type":668,"tag":920,"props":1025,"children":1026},{},[1027],{"type":673,"value":1028},"MAC-адреса (в Ethernet)",{"data":1030,"body":1031},{},{"type":665,"children":1032},[1033],{"type":668,"tag":669,"props":1034,"children":1035},{},[1036,1038,1043,1045,1050,1052,1057],{"type":673,"value":1037},"Смешение терминов «сетевой уровень» (OSI L3) и ",{"type":668,"tag":768,"props":1039,"children":1041},{"className":1040},[],[1042],{"type":673,"value":837},{"type":673,"value":1044}," (TCP/IP) часто приводит к ошибкам в ответах: корректнее привязывать TCP к ",{"type":668,"tag":768,"props":1046,"children":1048},{"className":1047},[],[1049],{"type":673,"value":845},{"type":673,"value":1051},", а IP к ",{"type":668,"tag":768,"props":1053,"children":1055},{"className":1054},[],[1056],{"type":673,"value":837},{"type":673,"value":1058}," и подтверждать это через инкапсуляцию «TCP segment внутри IP datagram».",{"data":1060,"body":1061},{},{"type":665,"children":1062},[1063,1081,1086,1095,1105,1117],{"type":668,"tag":669,"props":1064,"children":1065},{},[1066,1068,1074,1076,1079],{"type":673,"value":1067},"На практике TCP проявляется как «соединение» (",{"type":668,"tag":768,"props":1069,"children":1071},{"className":1070},[],[1072],{"type":673,"value":1073},"connection",{"type":673,"value":1075},") между двумя сокетами (IP-адрес + порт), поверх которого идут HTTP/1.1 и HTTP/2, а IP проявляется как «адресация/маршрут» до удалённого узла.",{"type":668,"tag":747,"props":1077,"children":1078},{},[],{"type":673,"value":1080},"\nСвязь с IP-адресами видна даже на уровне состояния соединения: в структуре состояния хранятся локальные и удалённые IP-адреса и номера портов.",{"type":668,"tag":669,"props":1082,"children":1083},{},[1084],{"type":673,"value":1085},"Пример на Node.js показывает, что приложение работает с TCP-сокетом (transport), а адрес назначения представлен хостом/IP и портом (internet + transport):",{"type":668,"tag":853,"props":1087,"children":1090},{"className":1088,"code":1089,"language":673},[856],"const net = require('net');\n\nconst server = net.createServer((socket) => {\n  console.log('client connected from', socket.remoteAddress, socket.remotePort);\n\n  socket.on('data', (buf) => {\n    console.log('got bytes:', buf.length);\n    socket.write('HTTP/1.1 200 OK\\r\\nContent-Length: 2\\r\\n\\r\\nOK');\n  });\n\n  socket.on('end', () => console.log('client disconnected'));\n});\n\nserver.listen(8080, '0.0.0.0', () => {\n  console.log('listening on 0.0.0.0:8080');\n});\n",[1091],{"type":668,"tag":768,"props":1092,"children":1093},{"__ignoreMap":861},[1094],{"type":673,"value":1089},{"type":668,"tag":669,"props":1096,"children":1097},{},[1098,1100,1103],{"type":673,"value":1099},"Сетевой путь «браузер → сервер» при HTTP/1.1 упрощённо выглядит так: HTTP (application) → TCP (transport) → IP (internet) → link.",{"type":668,"tag":747,"props":1101,"children":1102},{},[],{"type":673,"value":1104},"\nКлючевой диагностический вывод: проблемы вида «соединение не устанавливается» часто относятся к TCP (таймауты, этапы установки соединения), а проблемы вида «не находится маршрут/не тот адрес/TTL» относятся к IP/маршрутизации.",{"type":668,"tag":669,"props":1106,"children":1107},{},[1108,1110,1115],{"type":673,"value":1109},"Для самопроверки удобно удерживать в голове две фразы: IP не добавляет end-to-end надёжность и sequencing, а TCP предоставляет надёжный, упорядоченный ",{"type":668,"tag":768,"props":1111,"children":1113},{"className":1112},[],[1114],{"type":673,"value":773},{"type":673,"value":1116}," и отправляет сегменты как IP-датаграммы.",{"type":668,"tag":669,"props":1118,"children":1119},{},[1120],{"type":673,"value":1121},"Кратко: корректная трактовка «TCP/IP» — TCP является транспортным протоколом (надёжный упорядоченный поток байт), а IP является протоколом интернет/сетевого уровня (адресация и доставка датаграмм без надёжности end-to-end).",1775735660356]