Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Сетевые протоколы
Дмитрий Смаль
ISO - OSI
Назначение уровней
●

●

●

●

Физический: управление средой, сигналом,
кодирование потока битов
Канальный: физическая адр...
Ethernet

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

●

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

●

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

●

MAC адреса (broadcas...
Hub, Switch, ARP
Ограничения ЛВС

●

Физические ограничения
– Затухание
– Коллизии

●

Ограничение числа хостов
– Сложность топологии
– Огр...
IP

Internet Protocol
Схема IP сети
Задачи IP протокола

●

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

●

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

●

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

94.100.191.201 – один из адресов Mail.Ru

●

127.0.0.1 – всегда адрес лок. Компьютера

●

94.100.190.0/2...
Иерархия IP адресов
IP дейтограмма
Алгоритм роутера
●

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

●

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

●

Не найдено → от...
Маршрутизация
Статическая: конфиг
Внутренняя: RIP и OSPF
●

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

●

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

Domain Name System
DNS
●

●

●

●

/etc/hosts – локальные 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
...
DNS zone file
example.com. A

192.0.2.1

; IPv4 address for example.com

AAAA 2001:db8:10::1
ns

; IPv6 address for exampl...
DNS – что еще ?
●

Authoritative vs Cache

●

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

●

Negative caching, TTL

●

in-addr.arpa
Что НЕ решает IP ?

●

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

●

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

●

Нет порядка дейтог...
TCP

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

●

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

●

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

●

Надежная д...
TCP
●

Порты
– Well-known: SSH=20, FTP=21,22, HTTP=80, SMTP=25,
POP3=110
– Привилегированные (<1024)
– Остальные (>=1024)
...
TCP сегмент
TCP handshake

Round Trip Time (0.5ms / 150ms)
TCP сервер
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(('127.0.0.1', 8080))
s.listen(10)
whi...
TCP клиент
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(('127.0.0.1', 8080))
s.send('Hello...
Как правильно читать данные из
сокета
http://docs.python.org/2/howto/sockets.html
def myreceive(sock, msglen):
msg = ''
wh...
Как правильно писать данные в
сокет
http://docs.python.org/2/howto/sockets.html
def mysend(sock, msg):
totalsent = 0
while...
HTTP

HyperText Transfer Protocol
HTTP – передача гипертекста
GET /wiki/страница HTTP/1.1
Host: ru.wikipedia.org
Accept: text/html
Connection: close
(пустая...
URI vs URL
●

●

URI – идентификатор (mailto:me@tut.ru, tel:02, urn:isbn:0395-36341-1)
URL – определяет положение ресурса
...
Методы HTTP
OPTIONS – запрос методов сервера (Allow)
GET – запрос документа (Условный GET)
HEAD – аналог GET, но без тела ...
Коды состояния HTTP
1xx – Информационные
2xx – Успешное выполнение
200 – OK
204 – NoContent (только заголовки)
206 – Parti...
Коды состояния HTTP
4xx – Ошибка клиента
400 – Bad Request (размер, формат..)
401 – Unauthorized (запрос авторизации)
403 ...
Коды состояния HTTP
5xx – Ошибка сервера
500 – Internal Server Error
502 – Bad Gateway (проксирование)
503 – Service Unava...
Заголовки HTTP запросов
Host – указание домена, вирт. Хостинг
User-Agent – описание клиента
Accept-* - поддержка MIME типо...
Заголовки HTTP ответов
Content-Type – MIME тип документа
Content-Length – размер документа
Content-Encoding – кодирование ...
Email
Формат Email
From: Dmitry Smal <smal@corp.mail.ru>
To: Pupkin <v.pupkin@gmail.com>
Subject: party for everybody discuss
Da...
Заголовки Email
●

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

●

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

●

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

Сс – “копия”, анал...
Multipurpose Internet Message
Extensions
MIME
Задачи:

●

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

●

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

Передача сообщений из не...
MIME
Заголовки:

●

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

●

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

●

Conte...
Multipart Messages
To: =?UTF-8?B?0JTQuNC80LA=?= <mialinx@gmail.com>
Content-Type: multipart/mixed;
boundary="----4MNjdUkz-...
Multipart HTTP POST
POST /send-message.html HTTP/1.1
Host: mail.example.com
Referer: http://mail.example.com/send-message....
Процесс передачи Email
Агенты
MUA – Mail User Agent – программа, предоставляющая
пользовательский интерфейс, например MS Outlook,
sendmail

MTA –...
Агенты
SMTP – отправка почты
●

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

●

Текстовый протокол
Команды: MAIL FROM, RCPT TO, DATA, QUIT
Стату...
SMTP Пример
C:HELO
S:250 domain name should be qualified
C:MAIL FROM: <someusername@somecompany.ru>
S:250 someusername@som...
Полезные утилиты
ifconfig – узнать IP и MAC адреса
http://whatismyip.com - узнать внешний IP
ping 8.8.8.8 – проверить дост...
Домашнее задание
●

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

●

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

●

“Hello world” пр...
Спасибо за внимание
Дмитрий Смаль, smal@corp.mail.ru
Web весна 2013 лекция 2
Upcoming SlideShare
Loading in …5
×

Web весна 2013 лекция 2

477 views

Published on

  • Be the first to comment

Web весна 2013 лекция 2

  1. 1. Сетевые протоколы Дмитрий Смаль
  2. 2. ISO - OSI
  3. 3. Назначение уровней ● ● ● ● Физический: управление средой, сигналом, кодирование потока битов Канальный: физическая адресация, передача между двумя интерфейсами Сетевой: логическая адресация, передача между двумя хостами, передача в гетерогенных сетях Транспортный: надежная доставка, передача между двумя приложениями, управление потоком байтов
  4. 4. Ethernet Ethernet
  5. 5. Ethernet
  6. 6. Ethernet – формат кадра ● Преамбула (7 байт) – стабилизация среды ● SFD (0xab) – начало кадра ● MAC адреса (broadcast, interface) ● Протокол верхнего уровня ● Данные – до 1500 байт ● CRC-32 – контрольная сумма ● EFD – конец кадра
  7. 7. Hub, Switch, ARP
  8. 8. Ограничения ЛВС ● Физические ограничения – Затухание – Коллизии ● Ограничение числа хостов – Сложность топологии – Огромные таблицы коммутации ● Несовместимость различных архитектур
  9. 9. IP Internet Protocol
  10. 10. Схема IP сети
  11. 11. Задачи IP протокола ● Глобальная адресация ● Передача в гетерогенной сети (сегментация) ● Маршрутизация пакетов
  12. 12. 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
  13. 13. Иерархия IP адресов
  14. 14. IP дейтограмма
  15. 15. Алгоритм роутера ● Получение дейтограммы, определение ip получателя ● Поиск в таблице маршрутизации ● Не найдено → отбрасываем пакет ● ● Выбор наиболее приоритетного маршрута (по префиксу, по дистанции, по ширине канала) Передача дейтограммы через нужный интерфес
  16. 16. Маршрутизация Статическая: конфиг Внутренняя: RIP и OSPF ● Работает в небольших сетях ● Каждый марштизатор вычис полную таблицу маршрутов Внешняя: BGP и EGP ● Обмен маршрутами на уровне автономных систем (АС) ● Маршрутные политики
  17. 17. DNS Domain Name System
  18. 18. DNS ● ● ● ● /etc/hosts – локальные DNS записи, имеют приоритет Домен – поддерево в пространстве доменных имен, домены обладают иерархией DNS зона (сегмент) – часть базы DNS, хранящаяся по единым административным управлением, зоны не перекрываются RR – resource record – данные связанные с доменом DNS и BIND -Крикет Ли, Пол Альбитц
  19. 19. DNS – domain vs zone
  20. 20. DNS – domain vs zone
  21. 21. 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 example.com. NS ns.somewhere.example. ; backup nameserver example.com. MX 10 mail.example.com. ; mailserver for example.com @ 20 mail2.example.com. ; equivalent to above line MX ; ns.example.com is a nameserver
  22. 22. DNS zone file example.com. A 192.0.2.1 ; IPv4 address for example.com AAAA 2001:db8:10::1 ns ; IPv6 address for example.com A ; IPv4 address for ns.example.com 192.0.2.2 AAAA 2001:db8:10::2 www ; IPv6 address for ns.example.com 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
  23. 23. DNS – что еще ? ● Authoritative vs Cache ● Primary vs Slave, перенос зоны ● Negative caching, TTL ● in-addr.arpa
  24. 24. Что НЕ решает IP ? ● Невозможно адресовать конкретное приложение ● Нет надежной доставки данных ● Нет порядка дейтограмм ● Нет контроля потока
  25. 25. TCP Transmission Control Protocol
  26. 26. Задачи протокола TCP ● Адресация приложения в пределах хоста ● Последовательное двустороннее соединение ● Надежная доставка ● Управление потоком
  27. 27. TCP ● Порты – Well-known: SSH=20, FTP=21,22, HTTP=80, SMTP=25, POP3=110 – Привилегированные (<1024) – Остальные (>=1024) ● Сокеты (sockets) – Серверные (bind, listen, accept) – Клиентские (connect, send, recv)
  28. 28. TCP сегмент
  29. 29. TCP handshake Round Trip Time (0.5ms / 150ms)
  30. 30. TCP сервер import socket s = 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()
  31. 31. TCP клиент import socket s = 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()
  32. 32. Как правильно читать данные из сокета http://docs.python.org/2/howto/sockets.html def myreceive(sock, msglen): msg = '' while len(msg) < msglen: chunk = sock.recv(msglen-len(msg)) if chunk == '': raise RuntimeError("broken") msg = msg + chunk return msg Вопрос: откуда получить msglen ?
  33. 33. Как правильно писать данные в сокет http://docs.python.org/2/howto/sockets.html def mysend(sock, msg): totalsent = 0 while totalsent < len(msg): sent = sock.send(msg[totalsent:]) if sent == 0: raise RuntimeError("broken") totalsent = totalsent + sent
  34. 34. HTTP HyperText Transfer Protocol
  35. 35. HTTP – передача гипертекста GET /wiki/страница HTTP/1.1 Host: ru.wikipedia.org Accept: text/html Connection: close (пустая строка) HTTP/1.1 200 OK Server: Apache Content-Language: ru Content-Type: text/html; charset=utf-8 Content-Length: 1234 Connection: close (пустая строка) (HTML)
  36. 36. URI vs URL ● ● URI – идентификатор (mailto:me@tut.ru, tel:02, urn:isbn:0395-36341-1) URL – определяет положение ресурса (http://tom:abc@host.com/h/1.html?a=b) http – протокол tom:abc – логин / пароль host.com – адрес сервера /h/1.html – путь к ресурсу a=b – параметры (query string)
  37. 37. Методы HTTP OPTIONS – запрос методов сервера (Allow) GET – запрос документа (Условный GET) HEAD – аналог GET, но без тела запроса POST – передача данных клиент PUT – размещение файла по URI DELETE – удаление файла по URI TRACE, LINK, UNLINK, CONNECT - редко
  38. 38. Коды состояния HTTP 1xx – Информационные 2xx – Успешное выполнение 200 – OK 204 – NoContent (только заголовки) 206 – PartitialContent (часть ответа) 3xx – Перенаправления 301 – Moved Pemanently (SEO, кеширование) 302 – Found (логика работы сайта) 304 – Not Modified (при условном GET)
  39. 39. Коды состояния HTTP 4xx – Ошибка клиента 400 – Bad Request (размер, формат..) 401 – Unauthorized (запрос авторизации) 403 – Forbidden (allow, deny) 404 – Not Found 408 – Request Timeout (на чтение) 418 – I'm teapot
  40. 40. Коды состояния HTTP 5xx – Ошибка сервера 500 – Internal Server Error 502 – Bad Gateway (проксирование) 503 – Service Unavailable 504 – Gateway Timeout 505 – HTTP version not supported 507 – Insufficient Storage
  41. 41. Заголовки HTTP запросов Host – указание домена, вирт. Хостинг User-Agent – описание клиента Accept-* - поддержка MIME типов, кодировок, языков и т.п. Cookie – куки для данной страницы Referer – текущая страница If-Modified-Since – условный GET Connection – управление соединением
  42. 42. Заголовки HTTP ответов Content-Type – MIME тип документа Content-Length – размер документа Content-Encoding – кодирование документа Date – текущее время сервера Expires – время актуальности документа Last-Modified – время изменения файла Set-Cookie – установка кук для данного URI Connection – управление соединением
  43. 43. Email
  44. 44. Формат Email From: Dmitry Smal <smal@corp.mail.ru> To: Pupkin <v.pupkin@gmail.com> Subject: party for everybody discuss Date: Fri, 18 May 2012 08:17:59 -0700 Hi there! Can't stop writing! Bye bye!
  45. 45. Заголовки Email ● From, To – от кого и кому письмо ● Subject – тема письма ● Date – дата отправки Сс – “копия”, аналогичен To, но означает, что получатель – не главный ● Bcc – “скрытая копия”, аналогиче Сс, но получатели не увидят email указанный в Bcc ● ● Reply-To – email адрес, на который нужно отвечать
  46. 46. Multipurpose Internet Message Extensions
  47. 47. MIME Задачи: ● Передача не-ASCII текста через ASCII канал ● Передача не-текстовых приложений Передача сообщений из нескольких частей (multipart body messages) ● ● Передача не-ASCII заголовков
  48. 48. MIME Заголовки: ● Content-ID – уникальный ID части, для ссылок ● Content-Type – MIME тип сообщения или части ● Content-Disposition – расположение части ● Content-Transfer-Encoding – кодирование части
  49. 49. Multipart Messages To: =?UTF-8?B?0JTQuNC80LA=?= <mialinx@gmail.com> Content-Type: multipart/mixed; boundary="----4MNjdUkz-ZBcPvpoGwPsUtn9u:1338241794" ------4MNjdUkz-ZBcPvpoGwPsUtn9u:1338241794 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 Ym9keQ== ------4MNjdUkz-ZBcPvpoGwPsUtn9u:1338241794 Content-Type: application/octet-stream; name="=?UTF-8?B?ZmF2aWNvbi5pY28=?=" Content-Disposition: attachment Content-Transfer-Encoding: base64 AAABAAEAEBAAAAEAIABoBA..........AAAAAAAA== ------4MNjdUkz-ZBcPvpoGwPsUtn9u:1338241794--
  50. 50. Multipart HTTP POST POST /send-message.html HTTP/1.1 Host: mail.example.com Referer: http://mail.example.com/send-message.html Content-Type: multipart/form-data; boundary=Asrf456BGe4h Content-Length: (суммарный объём включая дочерние заголовки) --Asrf456BGe4h Content-Disposition: form-data; name="DestAddress" brutal-vasya@example.com --Asrf456BGe4h Content-Disposition: form-data; name="MessageTitle" Hello world
  51. 51. Процесс передачи Email
  52. 52. Агенты MUA – Mail User Agent – программа, предоставляющая пользовательский интерфейс, например MS Outlook, sendmail MTA – Mail Transfer Agent (relay) – программа (почтовый сервер), отвечающая за пересылку почты к по сети. SMTP протокол. MDA – Mail Delivery Agent – программа, отвечающая за доставку почты конечному пользователю. POP3 и IMAP
  53. 53. Агенты
  54. 54. SMTP – отправка почты ● Работает поверх TCP, порт 25 ● Текстовый протокол Команды: MAIL FROM, RCPT TO, DATA, QUIT Статусы ответа: 2xx – команды выполнена 3xx – ожидаются доп. данные 4xx – временная ошибка 5xx – неисправимая ошибка ● ESMTP – набор расширений для SMTP: TLS, Авторизация, Pipelining
  55. 55. SMTP Пример C:HELO S:250 domain name should be qualified C:MAIL FROM: <someusername@somecompany.ru> S:250 someusername@somecompany.ru sender accepted C:RCPT TO:<user1@company.tld> S:250 user1@company.tld ok C:DATA S:354 Enter mail, end with "." on a line by itself C:from: someusername@somecompany.ru C:to: user1@company.tld C:subject: tema C: C:Hi! C:. S:250 769947 message accepted for delivery C:QUIT
  56. 56. Полезные утилиты 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
  57. 57. Домашнее задание ● Настройка nginx для отдачи статики ● Настройка apache для запуска WSGI скриптов ● “Hello world” приложение на Django ● Настройка проксирования в nginx Подробности: http://tp.mail.ru/blog/Web
  58. 58. Спасибо за внимание Дмитрий Смаль, smal@corp.mail.ru

×