Upload
technopark
View
204
Download
2
Embed Size (px)
Citation preview
Сетевые протоколы
Дмитрий Смаль
ISO - OSI
Назначение уровней
●Физический: управление средой, сигналом, кодирование потока битов
●Канальный: физическая адресация, передача между двумя интерфейсами
●Сетевой: логическая адресация, передача между двумя хостами, передача в гетерогенных сетях
●Транспортный: надежная доставка, передача между двумя приложениями, управление потоком байтов
Ethernet
Ethernet
Ethernet
Ethernet – формат кадра
●Преамбула (7 байт) – стабилизация среды
●SFD (0xab) – начало кадра
●MAC адреса (broadcast, interface)
●Протокол верхнего уровня
●Данные – до 1500 байт
●CRC-32 – контрольная сумма
●EFD – конец кадра
Hub, Switch, ARP
Ограничения ЛВС
●Физические ограничения
– Затухание
– Коллизии
●Ограничение числа хостов
– Сложность топологии
– Огромные таблицы коммутации
●Несовместимость различных архитектур
IP
Internet Protocol
Схема IP сети
Задачи IP протокола
●Глобальная адресация
●Передача в гетерогенной сети (сегментация)
●Маршрутизация пакетов
IP – адресация
●94.100.191.201 – один из адресов Mail.Ru
●127.0.0.1 – всегда адрес лок. Компьютера
●94.100.190.0/23 – адрес подсети
●10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 – private ip (не уникальные адреса)
●224.0.0.0 – 239.255.255.255 – multicast ip
Иерархия IP адресов
IP дейтограмма
Алгоритм роутера
●Получение сегмента, определение ip получателя
●Поиск в таблице маршрутизации
●Не найдено отбрасываем пакет→
●Выбор наиболее приоритетного маршрута (по префиксу, по дистанции, по ширине канала)
●Передача сегмента через нужный интерфес
Маршрутизация
Статическая: конфиг
Внутренняя: RIP и OSPF
●Работает в небольших сетях
●Каждый марштизатор вычис полную таблицу маршрутов
Внешняя: BGP и EGP
●Обмен маршрутами на уровне автономных систем (АС)
●Маршрутные политики
DNS
Domain Name System
●/etc/hosts – локальные DNS записи, имеют приоритет
●Домен – поддерево в пространстве доменных имен, домены обладают иерархией
●DNS зона (сегмент) – часть базы DNS, хранящаяся по единым административным управлением, зоны не перекрываются
●RR – resource record – данные связанные с доменом
DNS и BIND -Крикет Ли, Пол Альбитц
DNS
DNS – domain vs zone
DNS – domain vs zone
DNS zone file
example.com. IN SOA ns.example.com. username.example.com. (
2007120710 ; serial number of this zone file
1d ; slave refresh (1 day)
2h ; slave retry time in case of a problem (2 hours)
4w ; slave expiration time (4 weeks)
1h ; maximum caching time in case of failed lookups (1 hour)
)
example.com. NS ns ; ns.example.com is a nameserver
example.com. NS ns.somewhere.example. ; backup nameserver
example.com. MX 10 mail.example.com. ; mailserver for example.com
@ MX 20 mail2.example.com. ; equivalent to above line
DNS zone file
example.com. A 192.0.2.1 ; IPv4 address for example.com
AAAA 2001:db8:10::1 ; IPv6 address for example.com
ns A 192.0.2.2 ; IPv4 address for ns.example.com
AAAA 2001:db8:10::2 ; IPv6 address for ns.example.com
www CNAME example.com. ; www.example.com is an alias
; for example.com
wwwtest CNAME www ; wwwtest.example.com is an alias
; for www.example.com
mail A 192.0.2.3 ; IPv4 address for mail.example.com,
mail2 A 192.0.2.4 ; IPv4 address for mail2.example.com
mail3 A 192.0.2.5 ; IPv4 address for mail3.example.com
DNS – что еще ?
●Authoritative vs Cache
●Primary vs Slave, перенос зоны
●Negative caching, TTL
●in-addr.arpa
Что НЕ решает IP ?
●Невозможно адресовать конкретное приложение
●Нет надежной доставки данных
●Нет порядка дейтограмм
●Нет контроля потока
TCP
Transmission Control Protocol
●Адресация приложения в пределах хоста
●Последовательное двустороннее соединение
●Надежная доставка
●Управление потоком
Задачи протокола TCP
●Порты
– Well-known: SSH=20, FTP=21,22, HTTP=80, SMTP=25, POP3=110
– Привилегированные (<1024)
– Остальные (>=1024)
●Сокеты (sockets)
– Серверные (bind, listen, accept)
– Клиентские (connect, send, recv)
TCP
TCP сегмент
TCP handshake
Round Trip Time (0.5ms / 150ms)
TCP сервер
import sockets = socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.bind(('127.0.0.1', 8080))s.listen(10)while True: conn, addr = s.accept() data = conn.recv(1024) conn.send(data) conn.close()
TCP клиент
import sockets = socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.connect(('127.0.0.1', 8080))s.send('Hello world')print s.recv(1024)s.close()
Как правильно читать данные из сокета
def myreceive(sock, msglen): msg = '' while len(msg) < msglen: chunk = self.sock.recv(msglen-len(msg)) if chunk == '': raise RuntimeError("broken") msg = msg + chunk return msg
http://docs.python.org/2/howto/sockets.html
Вопрос: откуда получить msglen ?
Как правильно писать данные в сокет
def mysend(sock, msg): totalsent = 0 while totalsent < len(msg): sent = sock.send(msg[totalsent:]) if sent == 0: raise RuntimeError("broken") totalsent = totalsent + sent
http://docs.python.org/2/howto/sockets.html
HTTP
HyperText Transfer Protocol
HTTP – передача гипертекста
GET /wiki/страница HTTP/1.1Host: ru.wikipedia.orgAccept: text/htmlConnection: close(пустая строка)
HTTP/1.1 200 OKServer: ApacheContent-Language: ruContent-Type: text/html; charset=utf-8Content-Length: 1234Connection: close(пустая строка)(HTML)
●URI – идентификатор (mailto:[email protected], tel:02, urn:isbn:0-395-36341-1)
●URL – определяет положение ресурса (http://tom:[email protected]/h/1.html?a=b)
http – протокол
tom:abc – логин / пароль
host.com – адрес сервера
/h/1.html – путь к ресурсу
a=b – параметры (query string)
URI vs URL
OPTIONS – запрос методов сервера (Allow)
GET – запрос документа (Условный GET)
HEAD – аналог GET, но без тела запроса
POST – передача данных клиент
PUT – размещение файла по URI
DELETE – удаление файла по URI
TRACE, LINK, UNLINK, CONNECT - редко
Методы HTTP
1xx – Информационные
2xx – Успешное выполнение
200 – OK
204 – NoContent (только заголовки)
206 – PartitialContent (часть ответа)
3xx – Перенаправления
301 – Moved Pemanently (SEO, кеширование)
302 – Found (логика работы сайта)
304 – Not Modified (при условном GET)
Коды состояния HTTP
4xx – Ошибка клиента
400 – Bad Request (размер, формат..)
401 – Unauthorized (запрос авторизации)
403 – Forbidden (allow, deny)
404 – Not Found
408 – Request Timeout (на чтение)
418 – I'm teapot
Коды состояния HTTP
5xx – Ошибка сервера
500 – Internal Server Error
502 – Bad Gateway (проксирование)
503 – Service Unavailable
504 – Gateway Timeout
505 – HTTP version not supported
507 – Insufficient Storage
Коды состояния HTTP
Host – указание домена, вирт. Хостинг
User-Agent – описание клиента
Accept-* - поддержка MIME типов, кодировок, языков и т.п.
Cookie – куки для данной страницы
Referer – текущая страница
If-Modified-Since – условный GET
Connection – управление соединением
Заголовки HTTP запросов
Content-Type – MIME тип документа
Content-Length – размер документа
Content-Encoding – кодирование документа
Date – текущее время сервера
Expires – время актуальности документа
Last-Modified – время изменения файла
Set-Cookie – установка кук для данного URI
Connection – управление соединением
Заголовки HTTP ответов
Формат Email
From: Dmitry Smal <[email protected]>To: Pupkin <[email protected]>Subject: party for everybody discussDate: Fri, 18 May 2012 08:17:59 -0700
Hi there!Can't stop writing!Bye bye!
Заголовки Email
● From, To – от кого и кому письмо
● Subject – тема письма
● Date – дата отправки
● Сс – “копия”, аналогичен To, но означает, что получатель – не главный
● Bcc – “скрытая копия”, аналогиче Сс, но получатели не увидят email указанный в Bcc
● Reply-To – email адрес, на который нужно отвечать
Multipurpose Internet Message Extensions
MIME
Задачи:
● Передача не-ASCII текста через ASCII канал
● Передача не-текстовых приложений
● Передача сообщений из нескольких частей (multipart body messages)
● Передача не-ASCII заголовков
MIME
Заголовки:
● Content-ID – уникальный ID части, для ссылок
● Content-Type – MIME тип сообщения или части
● Content-Disposition – расположение части
● Content-Transfer-Encoding – кодирование части
Multipart Messages
To: =?UTF-8?B?0JTQuNC80LA=?= <[email protected]>Content-Type: multipart/mixed; boundary="----4MNjdUkz-ZBcPvpoGwPsUtn9u:1338241794"
------4MNjdUkz-ZBcPvpoGwPsUtn9u:1338241794Content-Type: text/plain; charset=utf-8Content-Transfer-Encoding: base64
Ym9keQ==
------4MNjdUkz-ZBcPvpoGwPsUtn9u:1338241794Content-Type: application/octet-stream; name="=?UTF-8?B?ZmF2aWNvbi5pY28=?="Content-Disposition: attachmentContent-Transfer-Encoding: base64
AAABAAEAEBAAAAEAIABoBA..........AAAAAAAA==
------4MNjdUkz-ZBcPvpoGwPsUtn9u:1338241794--
Multipart HTTP POST
POST /send-message.html HTTP/1.1Host: mail.example.comReferer: http://mail.example.com/send-message.htmlContent-Type: multipart/form-data; boundary=Asrf456BGe4hContent-Length: (суммарный объём включая дочерние заголовки)
--Asrf456BGe4hContent-Disposition: form-data; name="DestAddress"
[email protected]: form-data; name="MessageTitle"
Hello world
Процесс передачи Email
Агенты
MUA – Mail User Agent – программа, предоставляющая пользовательский интерфейс, например MS Outlook, sendmail
MTA – Mail Transfer Agent (relay) – программа (почтовый сервер), отвечающая за пересылку почты к по сети. SMTP протокол.
MDA – Mail Delivery Agent – программа, отвечающая за доставку почты конечному пользователю. POP3 и IMAP
Агенты
SMTP – отправка почты
● Работает поверх TCP, порт 25
● Текстовый протокол
Команды: MAIL FROM, RCPT TO, DATA, QUIT
Статусы ответа: 2xx – команды выполнена
3xx – ожидаются доп. данные
4xx – временная ошибка
5xx – неисправимая ошибка
● ESMTP – набор расширений для SMTP:
TLS, Авторизация, Pipelining
SMTP Пример
C:HELOS:250 domain name should be qualifiedC:MAIL FROM: <[email protected]>S:250 [email protected] sender acceptedC:RCPT TO:<[email protected]>S:250 [email protected] okC:DATAS:354 Enter mail, end with "." on a line by itselfC:from: [email protected]:to: [email protected] C:subject: tema C: C:Hi!C:.S:250 769947 message accepted for deliveryC:QUIT
Полезные утилиты
ifconfig – узнать IP и MAC адреса
http://whatismyip.com - узнать внешний IP
ping 8.8.8.8 – проверить доступность хоста
tracerout 8.8.8.8 – показать путь к хосту
nmap 8.8.8.8 – поиск открытых портов
host mail.ru – DNS запросы (nslookup, dig)
telnet 127.0.0.1 11211 – подключиться к порту
ab -n 10000 -c 500 http://localhost/index.html
Домашнее задание
●Настройка nginx для отдачи статики
●Настройка apache для запуска WSGI скриптов
●“Hello world” приложение на Django
●Настройка проксирования в nginx
Подробности: http://tp.mail.ru/blog/Web
Спасибо за вниманиеДмитрий Смаль, [email protected]