Содержание
Компьютерные сети
Предупреждение. Я рассказываю только некоторый небольшой срез существующих технологий – тот, с которым, как мне кажется, больше всего приходится общаться мне. (На нынешнем уровне бесчинства технологии я не уверен даже в том, чем я на самом деле пользуюсь, а чем нет). И я рассказываю только самую суть, но даже далеко не все полезные свойства про каждый из протоколов и программ, о которых поведу речь. Частично ради краткости, частично ради того, чтобы не вешать вам лапшу на уши.
Протокол и вложенность протоколов
FIXME
Стеки протоколов TCP/IP и ISO/OSI
Интернет эволюционировал из объединения многих разных сетей. В сетях, которые впоследствие объединялись в интернет, были уже каким-нибудь образом решены большинство проблем передачи данных: в конце концов в них можно было от любого заданного компьютера передавать данные любому другому заданному компьютеру. И люди этим пользовались.
Вместо того, чтобы навязывать всем один комплект протоколов (и, соответственно, заставлять всех покупать кучу дорогого оборудования), создатели интернета договорились добавить ещё несколько протоколов, которые бы отвечали за задачи передачи данных между разнородными сетями – таким образом, единственное новое оборудование, которое потребовалось, было маршрутизаторами, которые соединяли несколько разнородных сетей (и, разумеется, новые каналы связи). (Вдобавок, для того, чтобы пользоваться интернетом, участникам нужно было добавить в их системы поддержку новых протоколов, но так как с точки зрения существующих сетей они были лишь данными, котороые эти сети несли, то править нужно было только операционные системы, что снова не столь большая проблема).
Наконец, интернет создавался как среда общего назначения, и сам по себе не нёс описаний того, что в нём можно делать. Эту задачу оставили открытой.
Таким образом сложилась четырёхуровневая модель устройства интернета:
Протоколы канального уровня (link layer) – те самые древние сети, которые объединялись в Интернет – для каждого из них было характерным иметь одну среду передачи данных и как-то решали задачу доставки данных от одного компьютера к другому (иногда очень хорошо, с гарантией доставки, с гарантией правильной последовательности байт и т.п.; иногда очень плохо – с некоторой вероятность некоторые пакеты данных могут быть доставлены)
Протокол сетевого уровня (network layer) – был представлен единственным протоколом IP – он отвечает за то, чтобы доставить пакет от одного компьютера к другому, возможно перебрасывая его по очереди из одной сети в другую
Протоколы транспортного уровня (transport layer) – был представлен протоколами TCP (в первую очередь) и UDP – они решают (или декларативно не решают) задачу гарантии качества доставки: чтобы когда мы отправили какую-нибудь длинную последовательность байт с одной стороны, мы получили бы ту же самую последовательность байт с другой стороны
Протоколы прикладного уровня (application layer) – таким именем называли всё, что использует TCP или UDP
Параллельно для стандартизации в ISO (international standards organization) разрабатывалась теоретическая идеальная модель того, как должен был бы быть интернет, если бы его сделали правильно. К сожалению, пока что интернет не пришёл к такой же модели (поэтому всякий сетевой программист вынужден каждый раз изобретать примерно одинаковые велосипеды, чтобы сделать её из имеющегося устройства интернета; впрочем, некоторые из сложившихся подходов вполне могут в ближайшем будущем стать стандартами). Эта модель выглядит так:
Физический уровень (physical layer) – спецификация того, как должна быть устроена среда передачи данных (например, провод) и как в ней представляется бит
Канальный уровень (data link layer) – когда к одной среде подсоединяется несколько компьютеров, как нам с нашего компьютера доставить данные до заданного, и ещё, как связать несколько кусочков среды через коммутатор
Сетевой уровень (network layer) – отвечает за маршрутизацию между компьютерами, которые подключены к разным локальным сетям (которые связаны между собой), т.е. решает задачу маршрутизации, используя для собственно передачи данных на каждом участке пути соответствующий протокол канального уровня
Транспортный уровень (transport layer) – отвечает за организацию потока байт между двумя компьютерами в интернете (т.е. организует надёжную передачу данных на ненадёжной среде, которой служит протокол сетевого уровня)
Сеансовый уровень (session layer) – отвечает за понятие "сеанса" – т.е. за отслеживание одного диалога одного пользователя с одной стороны и одного экземпляра сервиса с другой – например, он может решать задачи авторизации, управления правами доступа, восстановления состояния случайно прерванного сеанса
Уровень представления (presentaion layer) – отвечает за то, каким образом передаваемые данные представляются в виде последовательностей байт1.
Прикладной уровень (application layer) – отвечает за решение задачи нашего конкретного приложения, какой бы она ни была.
Несмотря на то, что модель ISO/OSI далека от действительности, мне будет удобнее рассказывать о том, как устроен интернет с её точки зрения.
Физический уровень
Физический уровень сейчас представлен в первую очередь тремя носителями: металл (чаще всего – витая пара), оптоволокно и воздух. Иногда в качестве носителя физического уровня используется телефонная линия (модемы и *DSL).
Витая пара (twisted pair).
Основная идея очень простая: четыре пары пары скрученных друг с другом проводов. Даже у такой простой идеи есть много свойств, которые стандартизуют и описывают: как избегать индукции шума с соседних проводов, как избегать образования ощутимого эха сигнала (насколько провода можно сгибать, как соединять несколько проводов), как должен быть устроен разъём для проводов (какой провод соответствует какому пину и какой пин с одной стороны соответствует какому пину с другой), на каких частотах сигнала в проводе не образуется недопустимого уровня помех (чем выше частота, тем выше индуктивное сопротивление – т.е. больше сигнала уходит наружу в виде радиоволны, чем остаётся в проводе в виде тока), как избежать помех от внешних источников, для чего рассчитан провод (для работы внутри этажа, где на него могут случайно поставить стул, где его могут затянуть несколькими узлами – или для работы между этажей, где главное, чтобы провод не растянулся и не порвался под собственным весом). Наконец, частично в спецификации витой пары (а частично в описании протокола, который её испльзует – ethernet) говорится о том, как в ней будет кодироваться сигнал. В ethernet (10BASE-T, 100BASE-T, 1000BASE-T – слово BASE обозначает baseband modulation) сигнал на витой паре как правило кодируется Манчестерским кодом, т.е. 0 и 1 обозначаются не наличием/отсутствием сигнала в линии, а перепадом сигнала в заданной временной рамке.
Оптоволокно (fiberoptics).
Основная идея тоже довольно простая: если мы делаем среду с довольно высоким коэффициентом преломления и достаточно хорошей пропускной способностью для света, то по такой среде мы можем легко передавать сигнал. Со светом нет проблем с наведением сигнала на соседние жилы. Оптоволокно невозможно незаметно подслушать. Включать-выключать свет мы можем почти с любой мыслимой частотой – при этом не возникает индуктивных эффектов. Чем тоньше жила, тем на большее расстояние мы можем передавать сигнал с заданной частотой – т.к. тем под меньшим диапазоном углов лучи будут отражаться. Но тем уже пучок и тем быстрее он затухает. Лучше использовать когеррентный свет (т.к. у него скорость прохождения будет одинаковая и пучок не расширяется). Обычно в отправителе используют светодиоды, а в получателе фотодиоды. С другой стороны, есть много сложностей: жила очень хрупкая, её нельзя изгибать по радиусу меньше порядка полуметра (иначе нарушается полное внутреннее отражение и сигнал теряется вовсе) – поэтому жилы собирают восьмёрками и запихивают в толстый резиновый чехол, очень похожий на силовые кабели; сегменты оптоволокна очень тяжело соединить вместе так, чтобы на соединении не терялся сигнал (обычно для этого волокна сплавляют вместе; при этом их нужно выравнивать с очень большой точностью – порядка мкм); один метр оптоволокна стоит существенно дороже одного метра витой пары. Поэтому оптоволокно используют на участках, где нужно передавать очень большие объёмы данных: на магистралях, между городами, между странами.
Радиоволны (часто используется сокращение RF -- radio frequences).
Основные идеи всем более-менее понятны из названия. С радиоволнами есть много проблем:
- в каждой стране есть свой орган, регулирующий доступ к эфиру; рано или поздно всякому новому протоколу, использующему радиоволны, нужно либо лоббировать в куче стран использование заданных частот под нужды этого протокола, либо использовать уже открытые для свободного доступа частоты (например, потому, что ими пользуется какой-то другой протокол, который во всех странах уже пролоббировали) и уметь сосуществовать с ним в одном эфире
если какой-то протокол, использующий радио в качестве физического уровня, легален в заданной стране, то это значит, что в этой стране этой частотой легально кому угодно пользоваться для чего угодно – следовательно, на этой частоте полно шумов
каждый протокол выбирает свой способ модуляции – амплитудная, частотная, многоканальная (на нескольких соседних частотах передаются какой-нибудь из модуляций биты одного байта)
всегда нужно решать проблему мультиплексирования – разделения эфира между несколькими участниками
Канальный уровень
Ethernet.
Ethernet – это общее имя нескольким протоколам, которые чаще всего используются для локальных сетей. Сейчас чаще всего в качестве физического уровня для ethernet используется витая пара, при этом каждый компьютер соединяется отдельным проводом с концентратором.
Изначально в качестве среды для ethernet использовался коаксиальный кабель, который позволяет к одному проводу подключать несколько компьютеров. Поэтому ethernet рассматривает среду, в которой он организован, как широковещательную. Само слово ethernet – ether net – обозначает "эфирная сеть". Основная идея ethernet такая: когда один из компьютеров хочет что-нибудь сообщить другому, он кричит своё сообщение в эфир, это сообщение слышат все компьютеры в сети, но смотрят, кому сообщение адресовано, и игнорируют чужие сообщения.
Основная проблема в ethernet в том, что несколько компьютеров могут одновременно начать говорить: в этом случае скорее всего по кусочку от каждого сообщения все получат, и ещё все получат много мусора, но все получат в разных пропорциях кусочки сообщений (до разных мест успеют дойти разные куски), и никто не получит сообщения целиком. Это событие называется коллизией. Чтобы коллизии не повторялись, оба отправителя обязаны подождать случайное время (диапазон, из которого выбирается случайное время ожидания, увеличивается экспоненциально в зависимости от номера попытки) и, если линия свободна, попытаться послать сообщение снова.
Из-за этого алгоритма реальная пропускная способность сети очень сильно падает в зависимости от количества активно передающих данные компьютеров в ней. Когда почти весь трафик в сети занят передачей одного длинного файла от одного компьютера к другому, скорость передачи может быть близка к теоретической (всё же она будет ниже из-за кучи вспомогательной информации, которая будет передаваться), но если одновременно два компьютера пытаются передавать длинные файлы, то скорость передачи данных у каждого будет не половиной теоретической, а в разы ниже.
С коллизиями есть одна важная деталь. Предположим, мы хотим передать фрейм длиной 100 бит (такой короткий-короткий фрейм). И предположим, мы используем сеть со скоростью передачи 1 Гбит/с, тогда длительность нашего фрейма окажется 100 / 109 с = 10-7 секунд. Сигнал в проводе идёт примерно со скоростью света: 300000 км/с = 3*108 м/с. Таким образом получается, что наше сообщение имеет длину 10-7 * 3*108 м = 3*10 метров, т.е. 30 метров. Получается, что если в нашей сети стоит три компьютера, между соседними двумя рассторяние 30 метров, при этом первый и последний отправляют сообщение одновременно, то первый и последний компьютеры получат сообщения друг друга чисто и без помех, а компьютер посередине услышит только шум. Поэтому в каждом стандарте Ethernet фиксируют скорость передачи данных, минимальную длину сообщения и максимальнюу длину провода таким образом, чтобы сообщение всегда было длиннее провода – в таком случае мы будем уверены, что либо коллизию услышит и отправитель тоже (рано или поздно), либо коллизия не случится ни у кого.
Каждый компьютер в ethernet идентифицируется уникальным MAC-адресом (media access control address). MAC-адрес – это 48-битное (т.е. 6 байтное) число. У каждого компьютера в пределах локальной сети должен быть уникальный MAC-адрес (иначе два компьютера будут выглядеть как один). Чтобы пользователи не должны были сами настраивать таким образом адреса, производители оборудования и стандартизующая организация IEEE договорились производить сетевые карты таким образом, чтобы у каждой сетевой карты в мире был уникальный MAC-адрес. Для этого MAC-адрес поделили пополам и сказали, что верхние 24 бита – идентификатор производителя, а нижние 24 бита – это серийный номер сетевой карты у производителя. Разумеется, так как некоторые производители произвели или намерены произвести больше 224 = 16млн сетевых карт, то некоторым производителям выдают больше одного идентификатора.
Наконец, к задачам ethernet относится и задача определения, какую полезную нагрузку несёт фрейм. ethernet-фрейм устроен самым простым образом, чтобы решать все эти задачи; он состоит из:
маркера начала – это длинный заранее фиксированный шаблон из 0 и 1 (чтобы отличить шум в канале от данных)
- MAC адрес отправителя
- MAC адрес получателя
- идентификатор протокола полезной нагрузки
- длину полезной нагрузки
- полезную нагрузку (если полезная нагрузка короче необходимой для надёжного обнаружения коллизий, то её дополняют до нужной длины ноликами)
и завершается контрольной суммой всего фрейма (адресов, типа, длины, нагрузки) – так что всегда возможно отличить и коллизию, и помехи в линии)2
Более точное описание стандарта легко находится, например на сайте Cisco.
Разных вариаций ethernet бывает много, наиболее заметные из них: 10BASE-T, 100BASE-T, 1000BASE-T и 10000BASE-T – это описания протокола ethernet поверх витой пары (буква T) с кодированием сигнала напряжением на проводе (слово BASE – сокращение от baseband, т.е., отсутствие модуляции) с разной максимальной частотой передачи данных – 10Mbit, 100Mbit, 1Gbit, 10Gbit соответственно. В них кроме обычных фреймов, есть ещё специальные фреймы autonegotiation (автоматического проведения переговоров) для выбора, какой из этих протоколов использовать.
Ещё одна разновидность ethernet, которую можно встретить, например, в институте Белозерского – это VLAN. Идея состоит в том, что на некоторых участках сети данные из нескольких разных локальных сетей идут по одному и тому же физическому носителю. Чтобы их различать, в сердину фрейма добавляется идентификатор локальной сети. (Такой фрейм перестаёт быть ethenet-фреймом и если его случайно услышит сетевая карточка компьютера, она его выбросит как шум). По разным концам vlan стоят маршрутизаторы, которые знают, на каких портах у них какая локальная сетка и првевращают фреймы обратно в обычные ethernet-фреймы.
Изначально ethernet проектировался для использования с коаксиальным кабелем, который рассчитан на то, что к одной среде подсоединяется несколько компьютеров. Сейчас ethernet используют с витой парой, а витая пара рассчитана на соединение point-to-point – т.е. только пары устройств. Для того, чтобы вернуть ethernet поверх витой пары широковещательные свойства стали применять концентраторы (hub) – это устройство, в которое втыкается несколько витых пар, которое каждый полученный фрейм с каждого порта ретранслируют на каждый воткнутый в него провод.
Это очень примитивные устройства, поэтому они очень дешёвые, но, как я писал в самом начале, за счёт широковещательности у ethernet сильно падает производительность. Поэтому концентраторы стали делать умнее: они стали разбирать, с какими обратными адресами приходят к ним фреймы и по этому признаку запоминать, на каких проводах к ним подсоединены какие компьютеры, и ретранслировать фреймы только туда, где они знают, что есть адресат – либо, если они не знают, где адресат, всё-таки ретранслировать фрейм всем. Такие более умные концентраторы стали называть коммутаторами (switch).
И концентраторы, и коммутаторы могут объединять не только несколько компьютеров в одну локальную сеть, но и несколько локальных сетей, снова в одну локальную сеть, всё по тому же принципу.
Некоторые люди стали даже считать, что коммутатор добавляет к ethernet защиту от подслушивания. (Ведь раньше каждый мог настроить свою сетевую карточку таким образом, чтобы она принимала и чужие фреймы тоже, а с коммутатором он будет получать только свои и широковещательные фреймы). На самом деле, это не так, и коммутатор тоже довольно легко обмануть: для каждого порта на нём хранится ограниченное количество MAC-адресов, и если с этого порта начинают приходить фреймы с большего количества MAC-адресов, то коммутатор начинает считать, что по этому проводу он подсоединён к большой ethernet-подсетке, и начинает ретранслировать туда всё, для чего он не знает адресата. Этот приём применяется для подслушивания в ethernet. (От этого приёма тоже есть защита: на некоторых коммутаторах выделяют один или два гнезда "uplink", и для всех остальных гнёзд считают, что на них может обитать не более одного компьютера).
graph bilink { rankdir=LR; node [shape=record]; subgraph subnet1 { rank=source; n1A [label="computer A"]; n1B [label="computer B"]; n1C [label="computer C"]; } subgraph cluster_switch1 { label="Switch 1"; s1p1 [label="1"]; s1p2 [label="2"]; s1p3 [label="3"]; s1p4 [label="4"]; s1p5 [label="5"]; } subgraph cluster_switch2 { label="Switch 2"; s2p1 [label="1"]; s2p2 [label="2"]; s2p3 [label="3"]; s2p4 [label="4"]; s2p5 [label="5"]; } subgraph subnet2 { rank=sink; n2X [label="computer X"]; n2Y [label="computer Y"]; n2Z [label="computer Z"]; } n1A -- s1p1; n1B -- s1p2; n1C -- s1p3; n2X -- s2p1; n2Y -- s2p2; n2Z -- s2p3; s1p4 -- s2p4; s1p5 -- s2p5; }
Ещё одна забавная ситуация может случиться, если две локальных сети соединить друг с другом двумя каналами между двумя свитчами. (См. схему). FIXME: в этом случае легко проследить, что любой пакет, посланный из одной сети в другую, будет до бесконечности ретранслироваться каждым из свитчей, тем самым полностью забивая сеть и делая её неработоспособной.
Для защиты от этой проблемы придумали протокол STP (spanning tree protocol) – достаточно умный коммутатор может прежде, чем заниматься своими прямыми обязанностями, опросить, какие свитчи доступны через каждое из гнёзд, построить граф связей в локальной сети, выбрать из него какое-нибудь покрывающее дерево и, соответственно, в ситуации дублирующих маршрутов выбирать всегда только один из двух. К сожалению, сейчас stp поддерживают не все, а только достаточно умные свитчи.
Как я уже говорил в начале разговора об ethernet, протокол подразумевает широковещательную среду, и сетевую карту можно настроить таким образом, чтобы она принимала все фреймы в сети, в том числе, и адресованные другим компьютерам. Этот режим сетевой карты называется promisous mode. В нём умеет работать довольно много разных программ, в основном, это либо снифферы (sniffer – от слова sniff – принюхиваться; сниффер – это программа, которая послушивает, что происходит в сети и выдаёт это в каком-нибудь виде пользователю), либо программы для сбора статистики. Наиболее показательная/интересная программа на эту тему – tcpdump.
FIXME: (упражнение на tcpdump)
WiFi
Ещё одно очень родственное семейство протоколов в народе именуется словом WiFi. Это протоколы для беспроводной связи.
Они очень похожи на ethernet (вплоть до того, что они используют такие же MAC адреса, которые раздаются из общего адресного пространства), к которому сверху прикручено много новых трудностей.
Основные трудности, с которыми вынуждены бороться в WiFi:
радиочастоты с юридической точки зрения являются собственностью государства; у каждого государства есть свой орган, который определяет, какие частоты кому и для чего можно использовать; они же определяют, что некоторые частоты можно использовать без лицензирования для любого назначения, но при ограничении мощности передатчика; некоторые из таких частот принято считать открытыми во многих странах, некоторые из открытых частот между странами не пересекаются; это, в частности, значит, что в некоторых странах некоторыми версиями WiFi или даже некоторыми настройками одной и той же версии WiFi пользоваться нельзя, а в некоторых можно; поэтому же в WiFi допускается на одной и той же полосе частот делать несколько логически раздельных локальных сетей;
- в общем случае, на радиосигнал действует больше помех, чем на сигнал в проводе (хотя это зависит от того, какой сигнал и какой провод);
при передаче сигнала по воздуху (особенно из-за ограничения на мощность передатчика) существенную роль играет затухание сигнала; (затухание зависит от двух факторов: сопротивления среды и поверхности волнового фронта; для провода волновой фронт имеет константное сечение, поэтому можно считать, что затухание пропорционально длине провода, а в некоторых случаях и вовсе пренебрежимо мало; в случае радиоволн площадь волнового фронта пропорциональна квадрату расстояния от точки вещания, а если к этому добавить сопротивление среды, то затухание сигнала пропорционально кубу расстояния3 от точки вещания); например, в ситуации, когда у нас есть три участника, расположенные вдоль линии: A – B – C, если A и C начнут одновременно вещать и случится коллизия, может полуиться так, что B не узнал, что кто-нибудь что-нибудь говорил потому, что случилась коллизия, а A и C не узнали о том, что случилась коллизия потому, что до них попросту не дошли сигналы друг от друга;
в случае ethernet, закрыв доступ к проводам, мы можем в значительной степени быть уверенными в безопасности нашей локальной сети, в случае беспроводного сигнала подобные предположения не работают; поэтому в WiFi значительное количество усилий направлено на решение задач достоверной авторизации и шифрования сигнала. (NB для зануд: я не говорю здесь, что эти задачи решены хорошо, я говорю, что к ним прилагалось и прилагается большое количество усилий);
В wifi возникают новые понятия:
канал связи / частота – указывает полосу частот, на которой происходит связь; как правило, соседние полосы частот перекрываются
SSID – service set identifier – название локальной сети (это именно текст, тот текст, который вы видите в окне "список сетей")
точка доступа – access point; в каждой сети может быть ровно одна точка доступа4; она определяет, кому можно
Wifi. FIXME:
- примерно то же, что и ethernet + шифрование + более сложные коллизии
Сандарт IEEE 802.11 довольно читаемый.
FIXME: Wimax & GSM/GPRS/Edge: соревнование за вход в систему, далее назначаются частоты и тайм-слоты, т.о. не бывает конфликтов (если все участники добросовестные)
FIXME: Wimax & GSM/GPRS/Edge – многоуровневые протоколы сами по себе, в каждом из их есть понятие точки доступа и точки выхода в интернет: несколько протоколов и зачастую странноватые схемы подключения отвечают за то, чтобы передавать данные между клиентом и точкой выхода в интернет. С точки зрения протокола IP вся эта инфраструктура служит канальным уровнем. Эти сложности нужны для того, чтобы вне зависимости от того, к какой точке вы присоединены, у вас был один и тот же IP-адрес, и, тем самым, переход от одной точки доступа к другой совершенно незаметен с пользовательской точки зрения. Wifi этим свойством не обладает.
graph routing { "access point 1" -- "gateway"; "access point 2" -- "gateway"; "access point 3" -- "gateway"; "access point 4" -- "gateway"; "client" -- "access point 2" [style=dotted]; }
Сетевой уровень
IP. FIXME:
- задача: маршрутизация между сетями; надёжность вне зависимости от вышибания узлов
- откуда берутся адреса
- как устроена маршрутизация
- понятие маски подсети
- проблема маршрутизации внутри сети
- arp таблица
- протокол arp
- т.е. компьютер сам решает, сколько и каких ip адресов у него есть
- arp spoofing
- arp сильно грузит сеть, если локальная сеть очень большая
- устройство ip пакета
- специальные адреса: адрес сети, широковещательный адрес
IPv6:
- проблема количества адресов в ip (но оно не так фатально, как кажется, см. NAT ниже по тексту)
- несколько основных идей: адрес каждой свистелке
Транспортный уровень
TCP. FIXME:
- задача: на входе поток байт, на выходе поток байт; между двумя компьютерами таких потоков может быть несколько
- беда: ip пакеты могут теряться, приходить в разном порядке, входная очередь может переполняться
несколько потоков => порты
поток => инициализация и завершение
- последовательность, подтверждения и регулировка скорости: алгоритм скользящего окна
- устройство tcp-пакета
- /etc/services; он же в windows
UDP. FIXME:
- это такой tcp без гарантий чего либо
нужен, когда tcp – это слишком дорого, а результаты не так уж и критичны
ICMP. FIXME:
- он по идее не несёт полезной нагрузки
- устройство: type, id, data
- типы:
echo-request, echo-reply – ping
- port-unavailable, destination-unreachable, ...
- всячина: time, ...
Прикладные протоколы
FIXME:
по идее tcp/ip всё, что выше – это прикладной протокол
по идее iso/osi выше – сеанс, представление, приложение
- обе модели не очень верны
DNS
FIXME:
- главный прикладной протокол: без него "ничего не работает"
иерархическое устройство домена => иерархия DNS серверов
- идеальный (медленный) ход запроса: от корня вниз
=> два типа записи NS и A
- бывают и другие типы записи: AAAA, MX
- реальный случай: добавляются кэши на уровне провайдеров
- странное www.domain
почему это так (в домене есть www, mail, ns, jabber – как распределять нагрузку?)
- как поступают: шлюз, балансирующий нагрузку
как хотелось бы: тип записи на каждый протокол, в ответе – адрес и порт
ура: srv – но его никто не применяет (почти только jabber)
- утилиты dig, host, nslookup (почему три, что лучше)
- /etc/hosts
- он же в windows
- его применение для борьбы с вредоносными сайтами
SSH
FIXME:
- основное применение и свойства вы знаете
- (напоминание: ключи, терминал)
- дополнительные возможности:
- запуск одной команды
- -L
- -R
по сути это уровень представления (хотя представление состоит в том, что это просто поток байт) – именно поверх него мы запускаем какой-нибудь прикладной протокол: ssh-terminal, ssh-multiplex, ssh-command, sftp
DHCP/BOOTP
FIXME:
- зачем: узнать, кто я такой
- смешное: оно на прикладном уровне, хотя у нас ещё нет ip адреса
- как оно работает: специальный широковещательный адрес 0.0.0.0
зачем оно на прикладном уровне, а не ниже – ради возможности делать один dhcp сервер на большую сеть, в том числе разнородную
- возможные настройки: адрес, сеть, шлюз, dns, ...
через него и tftp делается загрузка по сети – diskless client
HTTP
FIXME:
- по сути это уровень немножко ниже санса
- напоминание основных идей тем, кто не знает
- поверх него часто делают сессионный уровень: http-auth или cookie
- поверх часто делают уровень представления: json, xml; можно с натяжкой назвать уровнем представления html, css, js
- пример в yaposhiga прикладного уровня
NAT
FIXME:
- ситуация: провайдер, локальная сеть, шлюз, один публичный адрес, сервер в интернете
- мы можем запоминать идентификатор соединения и на что мы его подменили, подменять и подменять обратно
- публичных адресов может быть больше одного, можно ограничить диапазон адресов, портов
- понятие локальных адресов; выделенные блоки ip адресов под эти цели; суть выделения: ни один глобальный маршрутизатор не будет их пересылать, значит в интернете нельзя увидеть машин с таким адресом
- что случится с входными соединениями:
- может быть шлюз скажет, что порта нет, может быть шлюз сам ответит на соединение, может быть, шлюз пробросит соединение внутрь
бывают все три случая – чаще всего, первое или второе; третье нужно всегда специально настраивать
- dmz
Firewall
FIXME:
в той же ситуации мы можем просто выбрасывать некоторые пакеты, которые нам не нравятся по каким-нибудь из простейших заголовков – это не дороже маршрутизации
в win было много вирусов, которые создавали сервер для remote-control => стали требовать обязательно файрволла на локальном компьютере
это антивирусная тема => туда стали вкручивать всякие неуместные функции: фильтрация спама и т.п.
Настройка сети в Linux
FIXME:
- ip v2 vs ...:
- ip r[oute] = route
- ip a[ddr] = ifconfig
- ip l[ink] = ifconfig
- ip n[eighbour] = arp
- iwconfig, ...
- в каждом дистрибутиве есть свои надстройки над ним:
- Debian: /etc/network/interfaces, ifupdown
Gnome: NetworkManager
Работа с сетью в Linux в командной строке
FIXME:
- wget, curl:
- много протоколов (http, https, ftp точно)
- выкачать сайт
- post, get
- сделать зеркало
- ...
- lynx, links, elinks, w3m:
- браузеры текстового режима
- ограниченные, с разными ограничениями
- изредка бывают полезны как средство на крайний случай (или когда не хочется графики)
На удивление, программисты очень любят много и повторно решать одну и ту же тупую и тривиальную задачу -- задачу сериализации -- как наши объекты/структуры/данные представить в виде потока байт из которого потом можно получить наши объекты обратно -- хотя эта задача была ещё в 80-м году прекрасно решена в SmallTalk или того раньше, в 57-м в Lisp. В интернете люди зачастую вместо того, чтобы использовать какой-нибудь существующий способ сериализации и сосредоточиться на решаемой задаче, изобретают новые протоколы и тратят время на возню с ними. (1)
На лекции я говорил, что в конце фрейма идёт маркер конца. Оказывается, это неправда. (2)
Насколько я понимаю, в данном случае сопротивление среды тоже принято считать пренебрежимо малым, т.е. при коэффициент при третьей степени очень близок к нулю. (3)
На самом деле, это очень грубое приближение; например, в режиме работы ad-hoc точек доступа нет. (4)