59
Сетевые протоколы Дмитрий Смаль

Web осень 2012 лекция 2

Embed Size (px)

Citation preview

Page 1: Web осень 2012 лекция 2

Сетевые протоколы

Дмитрий Смаль

Page 2: Web осень 2012 лекция 2

ISO - OSI

Page 3: Web осень 2012 лекция 2

Назначение уровней

●Физический: управление средой, сигналом, кодирование потока битов

●Канальный: физическая адресация, передача между двумя интерфейсами

●Сетевой: логическая адресация, передача между двумя хостами, передача в гетерогенных сетях

●Транспортный: надежная доставка, передача между двумя приложениями, управление потоком байтов

Page 4: Web осень 2012 лекция 2

Ethernet

Ethernet

Page 5: Web осень 2012 лекция 2

Ethernet

Page 6: Web осень 2012 лекция 2

Ethernet – формат кадра

●Преамбула (7 байт) – стабилизация среды

●SFD (0xab) – начало кадра

●MAC адреса (broadcast, interface)

●Протокол верхнего уровня

●Данные – до 1500 байт

●CRC-32 – контрольная сумма

●EFD – конец кадра

Page 7: Web осень 2012 лекция 2

Hub, Switch, ARP

Page 8: Web осень 2012 лекция 2

Ограничения ЛВС

●Физические ограничения

– Затухание

– Коллизии

●Ограничение числа хостов

– Сложность топологии

– Огромные таблицы коммутации

●Несовместимость различных архитектур

Page 9: Web осень 2012 лекция 2

IP

Internet Protocol

Page 10: Web осень 2012 лекция 2

Схема IP сети

Page 11: Web осень 2012 лекция 2

Задачи IP протокола

●Глобальная адресация

●Передача в гетерогенной сети (сегментация)

●Маршрутизация пакетов

Page 12: Web осень 2012 лекция 2

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

Page 13: Web осень 2012 лекция 2

Иерархия IP адресов

Page 14: Web осень 2012 лекция 2

IP дейтограмма

Page 15: Web осень 2012 лекция 2

Алгоритм роутера

●Получение сегмента, определение ip получателя

●Поиск в таблице маршрутизации

●Не найдено отбрасываем пакет→

●Выбор наиболее приоритетного маршрута (по префиксу, по дистанции, по ширине канала)

●Передача сегмента через нужный интерфес

Page 16: Web осень 2012 лекция 2

Маршрутизация

Статическая: конфиг

Внутренняя: RIP и OSPF

●Работает в небольших сетях

●Каждый марштизатор вычис полную таблицу маршрутов

Внешняя: BGP и EGP

●Обмен маршрутами на уровне автономных систем (АС)

●Маршрутные политики

Page 17: Web осень 2012 лекция 2

DNS

Domain Name System

Page 18: Web осень 2012 лекция 2

●/etc/hosts – локальные DNS записи, имеют приоритет

●Домен – поддерево в пространстве доменных имен, домены обладают иерархией

●DNS зона (сегмент) – часть базы DNS, хранящаяся по единым административным управлением, зоны не перекрываются

●RR – resource record – данные связанные с доменом

DNS и BIND -Крикет Ли, Пол Альбитц

DNS

Page 19: Web осень 2012 лекция 2

DNS – domain vs zone

Page 20: Web осень 2012 лекция 2

DNS – domain vs zone

Page 21: Web осень 2012 лекция 2
Page 22: Web осень 2012 лекция 2

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

Page 23: Web осень 2012 лекция 2

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

Page 24: Web осень 2012 лекция 2

DNS – что еще ?

●Authoritative vs Cache

●Primary vs Slave, перенос зоны

●Negative caching, TTL

●in-addr.arpa

Page 25: Web осень 2012 лекция 2

Что НЕ решает IP ?

●Невозможно адресовать конкретное приложение

●Нет надежной доставки данных

●Нет порядка дейтограмм

●Нет контроля потока

Page 26: Web осень 2012 лекция 2

TCP

Transmission Control Protocol

Page 27: Web осень 2012 лекция 2

●Адресация приложения в пределах хоста

●Последовательное двустороннее соединение

●Надежная доставка

●Управление потоком

Задачи протокола TCP

Page 28: Web осень 2012 лекция 2

●Порты

– Well-known: SSH=20, FTP=21,22, HTTP=80, SMTP=25, POP3=110

– Привилегированные (<1024)

– Остальные (>=1024)

●Сокеты (sockets)

– Серверные (bind, listen, accept)

– Клиентские (connect, send, recv)

TCP

Page 29: Web осень 2012 лекция 2

TCP сегмент

Page 30: Web осень 2012 лекция 2

TCP handshake

Round Trip Time (0.5ms / 150ms)

Page 31: Web осень 2012 лекция 2

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()

Page 32: Web осень 2012 лекция 2

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()

Page 33: Web осень 2012 лекция 2

Как правильно читать данные из сокета

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 ?

Page 34: Web осень 2012 лекция 2

Как правильно писать данные в сокет

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

Page 35: Web осень 2012 лекция 2

HTTP

HyperText Transfer Protocol

Page 36: Web осень 2012 лекция 2

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)

Page 37: Web осень 2012 лекция 2

●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

Page 38: Web осень 2012 лекция 2

OPTIONS – запрос методов сервера (Allow)

GET – запрос документа (Условный GET)

HEAD – аналог GET, но без тела запроса

POST – передача данных клиент

PUT – размещение файла по URI

DELETE – удаление файла по URI

TRACE, LINK, UNLINK, CONNECT - редко

Методы HTTP

Page 39: Web осень 2012 лекция 2

1xx – Информационные

2xx – Успешное выполнение

200 – OK

204 – NoContent (только заголовки)

206 – PartitialContent (часть ответа)

3xx – Перенаправления

301 – Moved Pemanently (SEO, кеширование)

302 – Found (логика работы сайта)

304 – Not Modified (при условном GET)

Коды состояния HTTP

Page 40: Web осень 2012 лекция 2

4xx – Ошибка клиента

400 – Bad Request (размер, формат..)

401 – Unauthorized (запрос авторизации)

403 – Forbidden (allow, deny)

404 – Not Found

408 – Request Timeout (на чтение)

418 – I'm teapot

Коды состояния HTTP

Page 41: Web осень 2012 лекция 2

5xx – Ошибка сервера

500 – Internal Server Error

502 – Bad Gateway (проксирование)

503 – Service Unavailable

504 – Gateway Timeout

505 – HTTP version not supported

507 – Insufficient Storage

Коды состояния HTTP

Page 42: Web осень 2012 лекция 2

Host – указание домена, вирт. Хостинг

User-Agent – описание клиента

Accept-* - поддержка MIME типов, кодировок, языков и т.п.

Cookie – куки для данной страницы

Referer – текущая страница

If-Modified-Since – условный GET

Connection – управление соединением

Заголовки HTTP запросов

Page 43: Web осень 2012 лекция 2

Content-Type – MIME тип документа

Content-Length – размер документа

Content-Encoding – кодирование документа

Date – текущее время сервера

Expires – время актуальности документа

Last-Modified – время изменения файла

Set-Cookie – установка кук для данного URI

Connection – управление соединением

Заголовки HTTP ответов

Page 44: Web осень 2012 лекция 2

Email

Page 45: Web осень 2012 лекция 2

Формат 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!

Page 46: Web осень 2012 лекция 2

Заголовки Email

● From, To – от кого и кому письмо

● Subject – тема письма

● Date – дата отправки

● Сс – “копия”, аналогичен To, но означает, что получатель – не главный

● Bcc – “скрытая копия”, аналогиче Сс, но получатели не увидят email указанный в Bcc

● Reply-To – email адрес, на который нужно отвечать

Page 47: Web осень 2012 лекция 2

Multipurpose Internet Message Extensions

Page 48: Web осень 2012 лекция 2

MIME

Задачи:

● Передача не-ASCII текста через ASCII канал

● Передача не-текстовых приложений

● Передача сообщений из нескольких частей (multipart body messages)

● Передача не-ASCII заголовков

Page 49: Web осень 2012 лекция 2

MIME

Заголовки:

● Content-ID – уникальный ID части, для ссылок

● Content-Type – MIME тип сообщения или части

● Content-Disposition – расположение части

● Content-Transfer-Encoding – кодирование части

Page 50: Web осень 2012 лекция 2

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--

Page 51: Web осень 2012 лекция 2

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

Page 52: Web осень 2012 лекция 2

Процесс передачи Email

Page 53: Web осень 2012 лекция 2

Агенты

MUA – Mail User Agent – программа, предоставляющая пользовательский интерфейс, например MS Outlook, sendmail

MTA – Mail Transfer Agent (relay) – программа (почтовый сервер), отвечающая за пересылку почты к по сети. SMTP протокол.

MDA – Mail Delivery Agent – программа, отвечающая за доставку почты конечному пользователю. POP3 и IMAP

Page 54: Web осень 2012 лекция 2

Агенты

Page 55: Web осень 2012 лекция 2

SMTP – отправка почты

● Работает поверх TCP, порт 25

● Текстовый протокол

Команды: MAIL FROM, RCPT TO, DATA, QUIT

Статусы ответа: 2xx – команды выполнена

3xx – ожидаются доп. данные

4xx – временная ошибка

5xx – неисправимая ошибка

● ESMTP – набор расширений для SMTP:

TLS, Авторизация, Pipelining

Page 56: Web осень 2012 лекция 2

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

Page 57: Web осень 2012 лекция 2

Полезные утилиты

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

Page 58: Web осень 2012 лекция 2

Домашнее задание

●Настройка nginx для отдачи статики

●Настройка apache для запуска WSGI скриптов

●“Hello world” приложение на Django

●Настройка проксирования в nginx

Подробности: http://tp.mail.ru/blog/Web

Page 59: Web осень 2012 лекция 2

Спасибо за вниманиеДмитрий Смаль, [email protected]