can3p (can3p) wrote,
can3p
can3p

Category:

Из прочитанного. Выпуск 49. Познавательное

Обожаю такие книжки, которые рассеивают мрак над той или иной областью знаний. И в отличие от криптомассонов или психологии в этих областях есть место для объективности, из-за чего читать в два раза приятнее.

1) Computer Networks, 5th ed, Andrew S. Tanenbaum, David J. Wetherall

5 / 5

Фантастическая книжка для тех, кто как я, вообще не понимал, как работают сети. Для меня это всегда было загадкой:

  • Что значит порт?
  • Что значит "установлено соединение"?
  • Что значит, если забит канал?
  • Почему модем - это 56кбс, а потом по нему же adsl позволил прокачивать мегабиты?
  • Если спутник только передает информацию, то как работает TCP, который ожидает обратной связи?
  • Как вообще получается, что поверх физического канала передается информация?

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

Например, на первых же страницах Таненбаум отвечает на вопрос, откуда 56кбс: все просто, телефонная связь искусственно ограничена полосой в 3 кГц, а указанная скорость - это физический предел того, сколько информации можно через эту полосу передать. Отсюда понятно, почему adsl быстрее - используется гораздо больше частот для передачи.

Физический канал - это про один конкретный провод где-то и про передачу информации конкретно по нему, каждый конкретный канал определяет, как биты конвертируются в физически сигнал и обратно.

Data-link уровень строится поверх физического и позволяет переправить конкретный набор бит по заданному каналу. Для этого он определяет свой набор фреймов с маркерам начала и конца, escape-последовательностями и контролем ошибок.

Следующая глава обсуждает Medium access control подуровень, который определяет не авторизацию, а распределение канала (здесь имеется в виду канал общего пользования - например, радиопространство, где несколько устройств должны как-то координироваться, чтобы не глушить передачи друг друга. Еще одна штука, которая просто работает, но если подумать, то понятно, что это не так просто. Из этой главы также можно понять, почему скорость может упасть, если роутер использует популярный канал для Wi-Fi (и что такое канал, кстати)

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

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

Здесь же есть про Ethernet. После прочтения внезапно становится понятно, в чем отличие хаба от bridge от роутера. Если кратко - они действуют на разных уровнях. Хаб - замыкает провода, как будто они спаяны. Бридж - получает и переправляет пакеты, но делает это ниже сетевого уровня. Он работает с ethernet фреймами, в которых адресат определяется с помощью мак адреса, и пересылает его в тот порт, где, по его мнению, находится машина с этим мак адресом.

Вопрос: откуда знает? Обычно просто мониторит трафик, на его основе накапливает информацию, т.к. каждый пакет несет в себе также мак адрес отправителя. Надо понимать, что на этом уровне ни о каких интернетах речь не идет, это про одну связную сеть, где подобную информацию узнать можно.

Следом вопрос: но обычно же пакеты отправляются по ip-адресу? Это снаружи, внутри сетевая карта отправит броадкастом сообщение с просьбой откликнуться владельца ip-адреса. Если такой есть в сети, то он отправит ответ, если нет, то пакет будет отправлен на mac-адрес шлюза по-умолчанию (вот он для чего был нужен).

Следом роутер - он действует на сетевом уровне, сетевом, где операции идут уже с IP пакетами, а не с ethernet-фреймами, по-этому и пакеты он рассылает на этой основе.

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

Между этими двумя уровнями сидит NAT, который позволяет нескольким компьютерам быть представленными в сети в виде одного адреса. Как так получается? Вернее, в целом все понятно - пакеты как-то переадресуются на пути туда и обратно. Но как? IP пакеты знают только об адресе получателя, больше ничего, и этой информации явно недостаточно. Чтобы NAT работал, он залезает в стек уровнем выше - TCP или UDP. Оба протокола для отсылки в пакетах указывают порт отправителя (об этом ниже). На шлюзе подменяется не только адрес отправителя, но и этот порт, а на самом шлюзе сохраняется информация о маппинге этого порта обратно на адрес и порт начального отправителя. Когда прилетает ответный пакет на этот порт, информация опять подменяется и отправляется на исходную машину. Отсюда, опять же, объяснение, почему по-умолчанию компьютеры снаружи не могут ничего послать внутрь, но могли бы, если бы на шлюзе для этого был бы сделан маппинг. Еще один вывод, который нужно сделать - если у вас какой-то третий протокол, то NAT его не поймет, не сможет замапить и никуда ничего вы не пошлете.

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

Был вопрос про загруженность сети - это как? Это если пропусная способность в одной из точек сети недостаточна для переброски всех IP-пакетов. Что происходит при этом? Роутеры начинают кешировать пакеты у себя, в крайнем случае просто их сбрасывать. Понятно, что все заинтересованы, чтобы этого не случилось, по-этому предусмотрены разные механизмы для этого. На сетевом уровне роутеры могут как отправлять пакеты назойливыми источникам, либо могут менять специальный бит в пропускаемых пакетых, чтобы получатель понял, что отправитель перегружает сеть, и сам с ним разобрался. Также у пакетов есть разный приоритет и клас сервиса, который также помогает разобраться, что пропускать в первую очередь, а что можно дропнуть. К книжке вопрос борьбы с перегрузкой канала рассмотрен очень подробно.

Что важно понимать, что т.к. это протокол, то его исполнение находится в доброй воле реализатора. Так что ничего не мешает игнорировать любые сигналы и продолжать флудить сеть, если рассматривать только протокол. В реальности я думаю, что в современных роутерах на таких хитрых давно уже собирается статистика с возможностью бана слишком хитрых ребят.

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

Первый вопрос - зачем нужен UDP, если по факту IP дает ту же гарантию? Тут мы приходим к понятию порта. Порт - исключительно искусственное понятие, оно нужно для того, чтобы было понятно, какие процессы в системе должны получить пакет. Обычно мы знаем только про порт адресата (80 для http), но вообще говоря, он нужен с обеих сторон, т.к. встречные пакеты должны прийти правильному процессу со стороны отправителя. Основная задача UDP - добавить к IP порты.

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

Эта гарантия приводит к появлению такого понятие, как "соединение". Грубо говоря, нужно договориться, что обе стороны онлайн и готовы общаться. С принимающей стороны хранится таблица уже установленных соединений, так что левые пакеты не пройдут. Второе, стороны должны как-то договориться, чтобы стало понятно, то пакеты идут по порядку и не теряются. Во время установления соединения выясняются оба вопроса, после чего в обе стороны могут начать идти пронумерованные пакеты, а обратно идут их подтверждения, которые чаще всего идут в составе пакетов данных, которые отправляются в другую сторону. Установление соединения требует обмена несколькими пакетами, а это время, плюс в TCP есть встроенный механизм борьбы с перегрузкой канала. Если просто - то передача начинается на низкой скорости, которая потом последовательно увеличивается вполть до момента, когда пакеты начинают теряться, либо возникает какой-то друго признак перегрузки. В этот момент скорость сбрасывается вдвое, и все начинается по-новому.

Эти два факта и приводят к тому, что TCP не идеален в случае с http - каждое новое соединение - это пенальты по скорости, отсюда сразу становится кристально ясен пост про http 3.0.

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

Про последние две главы писать не буду, т.к. для меня они были не особо интересными, пробежал мельком.

2) The Power of Babel: A Natural History of Language, John McWhorter

5 / 5

Фантастическая книга. Сразу отмечу пару моментов, что попались на глаза. Автор имеет тенденцию возвращаться к одним и тем же языкам для примеров. Обычно меня это сильно раздражает, т.к. это верный признак того, что автору просто нечего добавить, но тут я его прощал из-за кучи всего интересного, о чем он писал. Второе, примеры на русском были достаточно косолапыми, чтобы это бросалось в глаза. Совсем сильно придраться мне тоже не получилось, поэтому я тоже на это забил.

О чем же книга? Книга о том, как из одного прото языка, на котором общались условные Адам и Ева, получилось то многообразие, которое мы имеем сейчас?

Автор начинает с того, что предлагает взглянуть на современную латынь. Что это такое? Для примера он берет современный французский. Фраза на нем, если знать типичные механизмы изменения языка, позволяет достаточно точно проследить, как латынь в классическом понимании этого термина медленно, но верно превратилась в современный французский, хотя глядя на них сейчас это сложно представить. И это важно, в 20 веке, а тем более в 21 со всеми граммар наци это сложно представить, но язык, на котором говорят люди, постоянно меняется. Как же он меняется? И что такое язык вообще?

На первый вопрос автор отвечает долго и разнообразно. Слова в языке часто теряют звкуки, склеиваются разными способами (например, он утверждает, что все склонения, которые есть в языках, изначально были разными словами, которые потом склеились, или что в старом английском every было ever each), меняют смысл (когда-то silly в английском означало "святой"), заимствуются из других языков. Последнее требует расшифровки. Т.к. языки меняются, делают это постоянно и по-разному в разных местах (см превращение латыни в романские языки), то заимстование = заимстование слова из какого-то диалекта в такой-то исторический период. Это значит, что в современном языке этого слова уже может давно не быть, или, например, что одно и то же слово с разными смыслами может быть импортировано в язык несколько разных в старой и новой формах.

Второй вопрос тоже интересен. Что такое язык? Автор долго рассуждает с разными примерами, которые сводятся к тому, что тот факт, что французский язык вырос из парижского диалекта, современный русский - из московского, современный английский - из Лондона - это просто историческая случайность, нет никаких причин считать другие диалекты недоразвитыми, несовершенными или неполноценными, это просто другие пути развития языка. Где-то не произошли трансформации, которые произошли в других местах, где-то заимстовались другие слова, или не исчезали третьи, где-то грамматика не менялась, так как она менялась где-то еще. Например, автор говорит, что тот факт, что в стандартном английском нет двойного отрицания, но в языке оно есть (ain't nobody's business) - это как раз про то, что в стандартном английском языке кто-то когда-то написал книжку по грамматике таким образом, вот и все.

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

Дальше, почему языки такие сложные? Действительно ли нужна эта сложность? Автор говорит, что бытует мнение, что такая сложность нужна для выражения всех оттенков речи, и начинает с этим утверждением бороться. Например, самые-самые сложные языки - это обычно языки изолированных племен, в которых дети не могут нормально выражаться лет до десяти, так много разных исключений из правил. В мировых языках часто такой сложности нет. Почему?

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

Что же этому противостоит? Обычно это большой приток взрослых людей, для которых этот язык не родной. Они уже не могут освоить все тонкости языка, по-этому все ненужные усложнения в этот момент отбрасывются. Например, суахили - это единственный из языков семьи банту, где нет тонов. Почему? Потому что он очень долго использовался как лингва франка на континенте и для торговли, из-за чего для большинства людей, которые на нем говорили, он не был родным.

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

Если это все просто багаж случайных изменений, тогда должны быть примеры языков, в которых эти изменения не накопились. Есть такие? Да, есть, это креольские языки. Хотя многие утверждают, что это просто испанский/французский/любой другой с примесью новых слов, автор говорит, что это полноценные новые языки, в которых часть старых (на тот момент времени) языков взята за основу. Его любимый пример - это Tok pisin, который образовался от английского, но потом развился в полноценный язык. Креольские языки часто отличаются как раз упрощенной грамматиком, отсутствием сложностей, существующих в языках-донорах, при том, что на них можно выразить все, что и на родительских языках. Это произошло как раз из-за того, что языки создавались людьми с разными родными языками, для которых главное было в понимании, и ненужные детали отваливались.

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

Письменность и фиксация грамматики, говорит автор. Чисто устный или ограниченно письменный язык меняется гораздо быстрее, нет понятия нормы, люди просто на нем говорят. Появление литературного корпуса, да еще и грамматики это понятие нормы устанавливает, национализм поощряет подавление любых диалектов, в результате чего изменение языка замедляется. Но не останавливается заметьте. Мало того, письменная традиция порождает свои приемы, стиль, в результате чего очень часто письменный текст написан так, как никто и никогда не сказал бы в обычной речи. Второй момент - грамматика отрывается от устной речи, и часто люди говорят совершенно иначе, чем пишут. Автор фокусируется на французском, но в русском тоже полно подобных вещей. Чего стоят одни аканья, канеш, че и прочие слова. Можно считать их неграмотность, но вообще это просто изменения языка во времени.

Заканчивает автор вопросом - что почему языки массово вымирают сейчас? Во-первых, это не первое вымирание. Больше всего языков исчезло в тот момент, когда люди перешли к оседлой жизни. Именно тогда кочевники начали исчезать с лица земли, а тогдашние центры цивилизации концетрироваться на каких-то конкретных диалектах. Остальные причины экономические и геополитические. В больших городах чаще всего говорят на одном языке и при высоких темпах урбанизации есть очень маленький шанс, чо носители небольших языков не растоврятся в общей массе. Тот или иной язык может быть синонимом успеха или бесперспективности. Впомните, как Тревор Ноа писал, что в ЮАР знание африканс могло в суде заменить серьезный приговор на оправдание. Какие-то активисты могут предложить всем этим людям вернуться к образу жизни предков для сохранения языка, но сами активисты это сделать никогда бы не соглавились, т.к. обычно будет значит значительное поражение в самых разных аспектах, прежде всего в экономическом.

Т.е. у маленьких языков нет шансов? Шансы есть, но надо понимать, что даже усилия по сохранению языков не сохранят живой язык, как на нем говорили когда-то. Они сохранят какой-то его слепок, который уже дальше будет жить и трансформироваться. Мало того, с хорошей долей вероятности этот язык всегда будет вторым, а родным будет какой-то из болших языков. Ну и ладно, это лучше, чем ничего.

Нунжо ли сохранять языки? Да, конечно. Документировать записывать. Может когда-то потомки этих людей захотят на нем говорить хотя бы на каком-то уровне. Но прежде всего для красоты, чтобы знать, насколько диковинными образом мог изменяться язык.

Эпилог - это критика автора на статью каких-то ученых лингвистов, которые якобы восстановили слова из самого перовго языка. Это невозможно, говорит автор. Невозможно, хотя бы потому что история письменности - это ну может 15 тысяч лет, а история языков - это 150,000 лет. Т.к. устный язык меняется гораздо быстрее, изменения случайные, да и смысл слов меняется, нет никакой возможности с уверенностью утверждать о значении и форме слов.

В резюме добавлю, что кроме очень крутого содержания, книга еще и написана классным языком, чего не ожидаешь от книги лингвиста, где еще и терминов куча, и примеров. МакВортер очень постарался, и текст оказался максимально доступным и приятным. У него еще куча книже, непременно буду читать.

Tags: из прочитанного
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 4 comments