Skip to content

Latest commit

 

History

History
46 lines (32 loc) · 4.71 KB

lecture9.md

File metadata and controls

46 lines (32 loc) · 4.71 KB

Cеть (продолжение). Пакетная маршрутизация

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

Из чего состоит пакет? Например, мы отправляем HTTP-запрос GET. К GET'у и его параметрам добавляется HTTP заголовок - уровень приложения, TCP-заголовок - транспортный уровень, IP-заголовок - сетевой уровень, и наконец Ethernet-заголовок - канальный уровень. Поэтому всё это дерьмо называется стеком - каждый уровень абстракции лежит под предыдущим.

На уровне TCP пункт назначения определяется адресом и портом, на уровне IP - IP-адресом, на уровне Ethernet - MAC-адресом.

IP-пакет

Состоит из версии (4/6), длины, протокола, адреса назначения/отправления и TTL (Time to live) - на каждом прохождении через промежуточный маршрутизатор это число уменьшается на 1. Если оно стало 0, пакет считается заблудившимся/никому не нужным (как и ты), и выбрасывается. На этом работает TraceRoute и TracePath из протокола ICMP.

Лицензии на программы (ВНЕЗАПНО)

Изначально всем было пофиг. А потом появился Столлман. 4 свободы:

  1. Запускать
  2. Изучать (смотреть исходники)
  3. Распространять
  4. Изменять и делиться.

Это GNU GPL. copyleft - это как копирайт, только наоборот. Если кто-то использует ваш код под GNU GPL, его разработка тоже должна быть под этой лицензией.

В GPLv2 завезли LGPL и AGPL - первая более мягкая, вторая более жесткая по сравнению с обычной GPL. LGPL разрешает не лицензировать под GPL скопированный код, если его не меняли. AGPL требует открывать ваш исходный код, даже если вы не используете сам продукт под AGPL, но даже если взаимодействуете с ним (по сети, например).

GPLv3 содержит ограничения и на железную часть. (В v2 был прецедент с тем, что исходники под какую-то приставку были выложены, но в самой приставке аппаратно были заблокированы сторонние прошивки).

BSD, MIT, Apache - можно использовать код под этой лицензией в своей закрытой разработке.

Creative Commons - лицензии на медиа (картинки, музыку, ...). В наборе есть лицензии и типа "Общественное достояние", и copyleft, и запрет изменений.

Thomson's compiler hack. Допустим, у нас есть компилятор и его исходники. Мы хотим сделать себе бэкдор в систему, для этого нужно заменить программу login. Встроим в компилятор штуку типа "если мы компилируем что-то типа login.c, то встроить бэкдор". Теперь, даже если я прочитал исходник login'а и уверен, что всё в порядке, это не так. Даже если мы захотим скомпилировать заново хороший компилятор, плохой бинарник может скомпилировать его в себя. Мораль: НЕ ДОВЕРЯЙ НИКОМУ