Extip что это такое простыми словами
Чем опасен внешний IP-адрес
Рассказываем, что за услуга такая — «внешний IP-адрес», зачем она нужна и чем вы рискуете, если ее подключите.
Практически у каждого интернет-провайдера есть такая услуга: фиксированный внешний IP-адрес. Его же иногда называют «реальным IP», «белым IP» или «прямым IP». Некоторые подключают ее по принципу «чтобы было», некоторые — с вполне осознанной целью. Однако внешний IP-адрес может таить множество опасностей. Что это за услуга, кому она может понадобиться и чем вы рискуете, подключив ее, — расскажем прямо сейчас.
Что такое IP-адрес и как это все работает
Если вы хотите отправить другу открытку из путешествия, вам нужно знать его адрес. Без этого почтовая система никак не сможет узнать, где искать вашего друга. Интернет работает примерно так же: все действия в Интернете, от проверки почты до просмотра смешных видеороликов, требуют обмена данными между вашим устройством и серверами, и у каждого участника должен быть свой адрес, по которому его можно идентифицировать.
Например, чтобы открыть страницу в браузере, компьютер должен обратиться к серверу по его адресу, а тот, в свою очередь, отправит эту страницу обратно — тоже по адресу. Передача и запросов, и ответов происходит при помощи пакетов, которые, как и обычные бумажные письма, содержат адреса отправителя и получателя. Такие адреса называются IP-адресами и записываются в виде четырех чисел от 0 до 255, разделенных точками: например 92.162.36.203. Всего возможных комбинаций немногим более 4 миллиардов, а это гораздо меньше, чем устройств, подключенных к Интернету.
Поэтому IP-адреса решили экономить и придумали механизм NAT (Network address translation) — «трансляцию сетевых адресов». Работает этот механизм следующим образом: интернет-провайдер использует один внешний IP-адрес для всех своих абонентов, а самим им присваивает внутренние.
Это похоже на офисную АТС: когда вам звонят из какой-нибудь фирмы, то всегда определяется один и тот же номер, а телефоны разных сотрудников имеют дополнительные, внутренние номера. Дозвониться до конкретного человека напрямую нельзя, но можно набрать общий номер — и секретарь соединит вас с нужным абонентом.
В роли такого «секретаря» и выступает NAT: получив пакет для внешнего сервера, он запоминает, какое устройство его отправило (чтобы знать, куда передавать ответ), и подставляет вместо его адреса-номера свой, общий для всех, после чего пересылает пакет дальше. Соответственно, при получении ответного пакета, который изначально был отправлен на общий адрес, NAT подставляет в него адрес во внутренней сети провайдера, и «письмо» летит дальше, к тому устройству, которому оно в действительности адресовано.
Механизм NAT может работать по цепочке — например, ваш домашний Wi-Fi-роутер создает локальную сеть со своими IP-адресами и переадресует пакеты, направляемые в сеть провайдера и из нее. При этом он может даже не знать, что сам находится за NAT провайдера. Казалось бы, все прекрасно, зачем тогда внешний IP-адрес?
Дело в том, что с NAT все отлично работает до тех пор, пока все соединения инициируются именно из внутренней сети. То есть если это вы открываете сайты, скачиваете файлы и смотрите видео. Но если к вашему устройству нужно подключиться из Интернета, то через NAT это реализовать невозможно: все пакеты, которые поступят на IP-адрес провайдера, уйдут в никуда, потому что они не являются ответом на чей-то внутренний запрос, и кому их слать дальше — непонятно.
Поэтому для тех случаев, когда к своей сети нужен доступ извне, используют внешний IP-адрес — уникальный и неповторимый. Это примерно как телефону директора в офисе присвоить отдельный прямой городской номер, чтобы те, кто его знает, могли позвонить сразу ему, минуя секретаря.
Зачем нужен внешний IP
Дома это может пригодиться, например, если вы хотите получать доступ к файлам на домашнем компьютере с работы или, скажем, из гостей, вместо того чтобы держать их в облачных хранилищах.
Очень популярны внешние IP-адреса у геймеров: можно создать собственный сервер для многопользовательской игры со своими правилами, модами, картами и приглашать друзей играть. А еще внешний IP-адрес нужен для стриминга игр с удаленных устройств типа Xbox, Playstation или вашего игрового компьютера на ноутбук, когда вы, допустим, решили поиграть в гостях или в поездке.
Иногда внешний IP-адрес требуется для работы сервисов видеонаблюдения и прочих охранных систем, решений для «умного дома» и так далее, однако преимущественно старых. Большинство современных систем — облачные. Это значит, что вы регистрируете свои домашние устройства на специальном доверенном сервере.
После этого все команды устройствам вы отправляете не напрямую им, а на этот сервер. В свою очередь, устройства периодически обращаются к нему и спрашивают, не поступило ли для них команд. При таком подходе реальный IP не требуется — на всех этапах система NAT понимает, куда возвращать пакеты. Заодно через этот же сервер вы можете получать информацию с устройств и управлять ими из любой точки мира.
Чем опасен внешний IP
Главная опасность внешнего IP-адреса заключается в том же, в чем и его преимущество: он позволяет подключиться к вашему устройству напрямую из Интернета. Из любой точки мира, кому угодно — то есть и злоумышленникам тоже. Затем, используя те или иные уязвимости, киберпреступники вполне могут добраться до ваших файлов и украсть какую-нибудь конфиденциальную информацию, которую потом можно или продать, или вас же ею и шантажировать.
Кроме того, злоумышленник может изменить настройки вашего доступа в Интернет, например, заставить роутер вместо некоторых сайтов подсовывать вам их фишинговые копии — тогда у вас очень быстро украдут все логины и пароли.
Как хакеры узнают, на кого нападать? Во-первых, есть общедоступные интернет-сервисы, которые регулярно проверяют все IP-адреса подряд на предмет уязвимостей и позволяют буквально в пару кликов найти тысячи устройств, имеющих ту или иную дырку, через которую их можно взломать. Во-вторых, при желании злоумышленники могут узнать именно ваш IP — например, через запущенный Skype. Еще ваш адрес видно, когда вы просто заходите на страницы сайтов.
Кстати, по реальному IP-адресу можно не только взломать вашу домашнюю сеть, но и устроить на вас DDoS-атаку, отправляя вам одновременно множество пакетов с разных устройств и перегружая интернет-канал и роутер. У вашего интернет-провайдера от этого есть защита, а у вас? Такие атаки часто проводят против геймеров и стримеров — например, чтобы «выкинуть» сильного противника из соревнования, «подвесив» ему Интернет.
Как защититься
Лучший способ защиты — это, конечно, вообще не использовать внешний IP-адрес, особенно если вы не уверены, что он вам необходим. Не ведитесь на рекламу интернет-провайдеров, как бы убедительна она ни была.
Если же уверены, что прямой IP вам нужен, то первым делом поменяйте используемый по умолчанию пароль от роутера. Это не защитит вас от хакеров, эксплуатирующих уязвимости конкретной модели устройства, но спасет от менее квалифицированных злоумышленников. Хорошей идеей будет использовать роутер той модели, в которой меньше известных и популярных среди хакеров дырок — правда, чтобы это понять, придется как следует порыться в Интернете.
Прошивку роутера желательно регулярно обновлять — в более свежих версиях прошивок, как правило, устраняют ошибки, которые были найдены в ранних версиях. И, конечно, в роутере нужно включить все имеющиеся встроенные средства защиты — в домашних моделях это не самые эффективные решения, но хоть что-то.
Кроме того, желательно использовать VPN — например, Kaspersky Secure Connection. Тогда ваш внешний IP-адрес, по крайней мере, не будет виден везде, где вы бываете в Интернете: вместо него будет отображаться адрес VPN-сервера.
Наконец, не пренебрегайте защитными решениями как на компьютерах, так и на мобильных устройствах. Сегодня они не просто ловят зловредов, но и позволяют защититься от другого рода атак вроде перенаправления на зловредные сайты или добавления вредоносной рекламы — а именно такие атаки наиболее вероятны при взломе роутера.
API простым языком: что это и зачем нужен
API (Application Programming Interface или интерфейс программирования приложений) — это совокупность инструментов и функций в виде интерфейса для создания новых приложений, благодаря которому одна программа будет взаимодействовать с другой. Это позволяет разработчикам расширять функциональность своего продукта и связывать его с другими.
Большинство крупных компаний разрабатывают API для клиентов или для внутреннего использования. Обычные пользователи тоже применяют разные API. РБК Тренды объясняют, как это работает.
Когда пользователь посещает любую страницу в интернете, он взаимодействует с API удаленного сервера. Это составляющая сервера, которая получает запросы и отправляет ответы. Кроме того, благодаря API человек может совершать различные действия, не покидая сайт. Именно для этого большинство современных сайтов используют по крайней мере несколько сторонних API, которые предлагают сторонние разработчики. Также компании разрабатывают собственные API и продают их как готовый продукт. К примеру, Weather Underground, которая принадлежит IBM, продает доступ к своему API для получения метеорологических данных. Эту информацию используют погодные приложения и сервисы.
ProgrammableWeb, веб-сайт, посвященный экономике API, в настоящее время отслеживает более 24 тыс. различных программных интерфейсов. Существуют сотни API для финансовых систем, обмена сообщениями в социальных сетях, платежей, электронной коммерции, криптовалют и прочих сфер. Наиболее быстрорастущий сегмент API относится к обмену и анализу данных в различных приложениях.
Как работает API
Интерфейс представляет собой промежуточный слой между двумя приложениями. Он позволяет двум программам обмениваться информацией и выполнять функции, не раскрывая своего внутреннего API. Скрытие части функций называется инкапсуляцией.
Есть три метода взаимодействия с API:
Разработчик имеет полную свободу в выстраивании функций API. Например, отдельный набор функций может определять возможность регистрироваться и авторизоваться в программе.
API бывают публичные и частные. Первые предназначены для совместного использования с внешним миром, например, API YouTube. Сторонние разработчики могут создавать приложения, чтобы воспользоваться возможностями этих интерфейсов. Вторые — это внутренние приложения, разработанные для определенной аудитории или пользовательской базы. Они часто используются на предприятиях и внутри компаний. Для работы с таким API нужно получить доступ.
Для чего используют API
Разработчикам программный интерфейс позволяет:
До появления Windows и других графических операционных систем программистам для создания окон на экране компьютера приходилось писать тысячи строк кода. Когда же Microsoft предоставила разработчикам API Windows, на создание окон стало уходить всего несколько минут работы.
Бизнесу API нужны, чтобы:
В 1990-е годы организация, которая хотела запустить систему управления взаимоотношениями с клиентами (CRM), была вынуждена вкладывать огромные средства в программное обеспечение, оборудование и специалистов. Теперь компании используют облачные службы вроде Salesforce. Доступ на уровне API к функциям Salesforce позволяет бизнесу включить ключевые элементы функциональности CRM-системы — например, возможность просматривать историю клиента.
Правительствам API позволяют:
Уже в 40 городах США используется бесплатный API Open311, который позволяет отслеживать проблемы на основе местоположения пользователя. Человеку достаточно лишь отправить в городскую систему фото с выбоиной на дороге и указанием геолокации.
Примеры API в нашей жизни
Google Календарь. Приложение-календарь на Android разработает на API, позволяющем подключить свой календарь напрямую к сторонним приложениям. Пользователи могут использовать несколько разных программ с встроенными и обновляемыми календарями, где будут все важные события, встречи и т.д. Компании могут встраивать API календаря на свои сайты, чтобы, к примеру, записывать своих клиентов на прием. Встраивание в форму записи Google Календаря позволяет клиентам автоматически создавать событие и вносить детали о предстоящей встрече. Благодаря API сервер сайта напрямую обращается к серверу Google с запросом на создание события, получает ответ Google, обрабатывает его и передает соответствующую информацию в браузер, которая поступает клиенту в виде сообщения с подтверждением.
Заказ авиабилетов. Многие пользуются агрегаторами билетов, такими как Aviasales и SkyScanner. Такие сервисы собирают информацию о стоимости авиабилетов в разных авиакомпаниях и отображают ее в едином окне. Это позволяет реализовать API, встроенный в сайты авиакомпаний, который помогает в реальном времени обновлять информацию о направлениях и стоимости.
Навигация на сайтах и в приложениях. Крупные компании, в том числе Apple, Google, «Яндекс» и другие, разработали API, позволяющие подключить собственный картографический сервис к другим площадкам. Так, в «Яндекс.Карты» встроены сервисы «Транспорт» и «Пробки». Многие приложения на Android, например, по доставке еды или для спорта, используют встроенный в ОС API, чтобы подключить карты Google к своему сервису. На iOS аналогичная ситуация с Apple Maps.
Кнопки авторизации. На многих сайтах есть кнопки, позволяющие зарегистрироваться через уже существующие аккаунты на популярных площадках и в соцсетях. Это возможно благодаря API, которые есть у Google, Facebook, Apple, Twitter, «ВКонтакте» и других компаний.
Простым языком об HTTP
Вашему вниманию предлагается описание основных аспектов протокола HTTP — сетевого протокола, с начала 90-х и по сей день позволяющего вашему браузеру загружать веб-страницы. Данная статья написана для тех, кто только начинает работать с компьютерными сетями и заниматься разработкой сетевых приложений, и кому пока что сложно самостоятельно читать официальные спецификации.
HTTP — широко распространённый протокол передачи данных, изначально предназначенный для передачи гипертекстовых документов (то есть документов, которые могут содержать ссылки, позволяющие организовать переход к другим документам).
Аббревиатура HTTP расшифровывается как HyperText Transfer Protocol, «протокол передачи гипертекста». В соответствии со спецификацией OSI, HTTP является протоколом прикладного (верхнего, 7-го) уровня. Актуальная на данный момент версия протокола, HTTP 1.1, описана в спецификации RFC 2616.
Протокол HTTP предполагает использование клиент-серверной структуры передачи данных. Клиентское приложение формирует запрос и отправляет его на сервер, после чего серверное программное обеспечение обрабатывает данный запрос, формирует ответ и передаёт его обратно клиенту. После этого клиентское приложение может продолжить отправлять другие запросы, которые будут обработаны аналогичным образом.
Задача, которая традиционно решается с помощью протокола HTTP — обмен данными между пользовательским приложением, осуществляющим доступ к веб-ресурсам (обычно это веб-браузер) и веб-сервером. На данный момент именно благодаря протоколу HTTP обеспечивается работа Всемирной паутины.
Также HTTP часто используется как протокол передачи информации для других протоколов прикладного уровня, таких как SOAP, XML-RPC и WebDAV. В таком случае говорят, что протокол HTTP используется как «транспорт».
API многих программных продуктов также подразумевает использование HTTP для передачи данных — сами данные при этом могут иметь любой формат, например, XML или JSON.
Как правило, передача данных по протоколу HTTP осуществляется через TCP/IP-соединения. Серверное программное обеспечение при этом обычно использует TCP-порт 80 (и, если порт не указан явно, то обычно клиентское программное обеспечение по умолчанию использует именно 80-й порт для открываемых HTTP-соединений), хотя может использовать и любой другой.
Как отправить HTTP-запрос?
Самый простой способ разобраться с протоколом HTTP — это попробовать обратиться к какому-нибудь веб-ресурсу вручную. Представьте, что вы браузер, и у вас есть пользователь, который очень хочет прочитать статьи Анатолия Ализара.
Предположим, что он ввёл в адресной строке следующее:
Соответственно вам, как веб-браузеру, теперь необходимо подключиться к веб-серверу по адресу alizar.habrahabr.ru.
Для этого вы можете воспользоваться любой подходящей утилитой командной строки. Например, telnet:
telnet alizar.habrahabr.ru 80
Сразу уточню, что если вы вдруг передумаете, то нажмите Ctrl + «]», и затем ввод — это позволит вам закрыть HTTP-соединение. Помимо telnet можете попробовать nc (или ncat) — по вкусу.
После того, как вы подключитесь к серверу, нужно отправить HTTP-запрос. Это, кстати, очень легко — HTTP-запросы могут состоять всего из двух строчек.
Для того, чтобы сформировать HTTP-запрос, необходимо составить стартовую строку, а также задать по крайней мере один заголовок — это заголовок Host, который является обязательным, и должен присутствовать в каждом запросе. Дело в том, что преобразование доменного имени в IP-адрес осуществляется на стороне клиента, и, соответственно, когда вы открываете TCP-соединение, то удалённый сервер не обладает никакой информацией о том, какой именно адрес использовался для соединения: это мог быть, например, адрес alizar.habrahabr.ru, habrahabr.ru или m.habrahabr.ru — и во всех этих случаях ответ может отличаться. Однако фактически сетевое соединение во всех случаях открывается с узлом 212.24.43.44, и даже если первоначально при открытии соединения был задан не этот IP-адрес, а какое-либо доменное имя, то сервер об этом никак не информируется — и именно поэтому этот адрес необходимо передать в заголовке Host.
Стартовая (начальная) строка запроса для HTTP 1.1 составляется по следующей схеме:
Например (такая стартовая строка может указывать на то, что запрашивается главная страница сайта):
Метод (в англоязычной тематической литературе используется слово method, а также иногда слово verb — «глагол») представляет собой последовательность из любых символов, кроме управляющих и разделителей, и определяет операцию, которую нужно осуществить с указанным ресурсом. Спецификация HTTP 1.1 не ограничивает количество разных методов, которые могут быть использованы, однако в целях соответствия общим стандартам и сохранения совместимости с максимально широким спектром программного обеспечения как правило используются лишь некоторые, наиболее стандартные методы, смысл которых однозначно раскрыт в спецификации протокола.
URI (Uniform Resource Identifier, унифицированный идентификатор ресурса) — путь до конкретного ресурса (например, документа), над которым необходимо осуществить операцию (например, в случае использования метода GET подразумевается получение ресурса). Некоторые запросы могут не относиться к какому-либо ресурсу, в этом случае вместо URI в стартовую строку может быть добавлена звёздочка (астериск, символ «*»). Например, это может быть запрос, который относится к самому веб-серверу, а не какому-либо конкретному ресурсу. В этом случае стартовая строка может выглядеть так:
Версия определяет, в соответствии с какой версией стандарта HTTP составлен запрос. Указывается как два числа, разделённых точкой (например 1.1).
Для того, чтобы обратиться к веб-странице по определённому адресу (в данном случае путь к ресурсу — это «/»), нам следует отправить следующий запрос:
GET / HTTP/1.1
Host: alizar.habrahabr.ru
При этом учитывайте, что для переноса строки следует использовать символ возврата каретки (Carriage Return), за которым следует символ перевода строки (Line Feed). После объявления последнего заголовка последовательность символов для переноса строки добавляется дважды.
Впрочем, в спецификации HTTP рекомендуется программировать HTTP-сервер таким образом, чтобы при обработке запросов в качестве межстрочного разделителя воспринимался символ LF, а предшествующий символ CR, при наличии такового, игнорировался. Соответственно, на практике бо́льшая часть серверов корректно обработает и такой запрос, где заголовки отделены символом LF, и он же дважды добавлен после объявления последнего заголовка.
Если вы хотите отправить запрос в точном соответствии со спецификацией, можете воспользоваться управляющими последовательностями \r и \n:
Как прочитать ответ?
Стартовая строка ответа имеет следующую структуру:
Версия протокола здесь задаётся так же, как в запросе.
Код состояния (Status Code) — три цифры (первая из которых указывает на класс состояния), которые определяют результат совершения запроса. Например, в случае, если был использован метод GET, и сервер предоставляет ресурс с указанным идентификатором, то такое состояние задаётся с помощью кода 200. Если сервер сообщает о том, что такого ресурса не существует — 404. Если сервер сообщает о том, что не может предоставить доступ к данному ресурсу по причине отсутствия необходимых привилегий у клиента, то используется код 403. Спецификация HTTP 1.1 определяет 40 различных кодов HTTP, а также допускается расширение протокола и использование дополнительных кодов состояний.
Пояснение к коду состояния (Reason Phrase) — текстовое (но не включающее символы CR и LF) пояснение к коду ответа, предназначено для упрощения чтения ответа человеком. Пояснение может не учитываться клиентским программным обеспечением, а также может отличаться от стандартного в некоторых реализациях серверного ПО.
После стартовой строки следуют заголовки, а также тело ответа. Например:
Тело ответа следует через два переноса строки после последнего заголовка. Для определения окончания тела ответа используется значение заголовка Content-Length (в данном случае ответ содержит 7 восьмеричных байтов: слово «Wisdom» и символ переноса строки).
Но вот по тому запросу, который мы составили ранее, веб-сервер вернёт ответ не с кодом 200, а с кодом 302. Таким образом он сообщает клиенту о том, что обращаться к данному ресурсу на данный момент нужно по другому адресу.
В заголовке Location передан новый адрес. Теперь URI (идентификатор ресурса) изменился на /users/alizar/, а обращаться нужно на этот раз к серверу по адресу habrahabr.ru (впрочем, в данном случае это тот же самый сервер), и его же указывать в заголовке Host.
GET /users/alizar/ HTTP/1.1
Host: habrahabr.ru
В ответ на этот запрос веб-сервер Хабрахабра уже выдаст ответ с кодом 200 и достаточно большой документ в формате HTML.
Если вы уже успели вжиться в роль, то можете теперь прочитать полученный от сервера HTML-код, взять карандаш и блокнот, и нарисовать профайл Ализара — в принципе, именно этим бы на вашем месте браузер сейчас и занялся.
А что с безопасностью?
Сам по себе протокол HTTP не предполагает использование шифрования для передачи информации. Тем не менее, для HTTP есть распространённое расширение, которое реализует упаковку передаваемых данных в криптографический протокол SSL или TLS.
Название этого расширения — HTTPS (HyperText Transfer Protocol Secure). Для HTTPS-соединений обычно используется TCP-порт 443. HTTPS широко используется для защиты информации от перехвата, а также, как правило, обеспечивает защиту от атак вида man-in-the-middle — в том случае, если сертификат проверяется на клиенте, и при этом приватный ключ сертификата не был скомпрометирован, пользователь не подтверждал использование неподписанного сертификата, и на компьютере пользователя не были внедрены сертификаты центра сертификации злоумышленника.
На данный момент HTTPS поддерживается всеми популярными веб-браузерами.
А есть дополнительные возможности?
Протокол HTTP предполагает достаточно большое количество возможностей для расширения. В частности, спецификация HTTP 1.1 предполагает возможность использования заголовка Upgrade для переключения на обмен данными по другому протоколу. Запрос с таким заголовком отправляется клиентом. Если серверу требуется произвести переход на обмен данными по другому протоколу, то он может вернуть клиенту ответ со статусом «426 Upgrade Required», и в этом случае клиент может отправить новый запрос, уже с заголовком Upgrade.
Такая возможность используется, в частности, для организации обмена данными по протоколу WebSocket (протокол, описанный в спецификации RFC 6455, позволяющий обеим сторонам передавать данные в нужный момент, без отправки дополнительных HTTP-запросов): стандартное «рукопожатие» (handshake) сводится к отправке HTTP-запроса с заголовком Upgrade, имеющим значение «websocket», на который сервер возвращает ответ с состоянием «101 Switching Protocols», и далее любая сторона может начать передавать данные уже по протоколу WebSocket.
Что-то ещё, кстати, используют?
На данный момент существуют и другие протоколы, предназначенные для передачи веб-содержимого. В частности, протокол SPDY (произносится как английское слово speedy, не является аббревиатурой) является модификацией протокола HTTP, цель которой — уменьшить задержки при загрузке веб-страниц, а также обеспечить дополнительную безопасность.
Увеличение скорости обеспечивается посредством сжатия, приоритизации и мультиплексирования дополнительных ресурсов, необходимых для веб-страницы, чтобы все данные можно было передать в рамках одного соединения.
Опубликованный в ноябре 2012 года черновик спецификации протокола HTTP 2.0 (следующая версия протокола HTTP после версии 1.1, окончательная спецификация для которой была опубликована в 1999) базируется на спецификации протокола SPDY.
Многие архитектурные решения, используемые в протоколе SPDY, а также в других предложенных реализациях, которые рабочая группа httpbis рассматривала в ходе подготовки черновика спецификации HTTP 2.0, уже ранее были получены в ходе разработки протокола HTTP-NG, однако работы над протоколом HTTP-NG были прекращены в 1998.
На данный момент поддержка протокола SPDY есть в браузерах Firefox, Chromium/Chrome, Opera, Internet Exporer и Amazon Silk.
И что, всё?
В общем-то, да. Можно было бы описать конкретные методы и заголовки, но фактически эти знания нужны скорее в том случае, если вы пишете что-то конкретное (например, веб-сервер или какое-то клиентское программное обеспечение, которое связывается с серверами через HTTP), и для базового понимания принципа работы протокола не требуются. К тому же, всё это вы можете очень легко найти через Google — эта информация есть и в спецификациях, и в Википедии, и много где ещё.
Впрочем, если вы знаете английский и хотите углубиться в изучение не только самого HTTP, но и используемых для передачи пакетов TCP/IP, то рекомендую прочитать вот эту статью.
Ну и, конечно, не забывайте, что любая технология становится намного проще и понятнее тогда, когда вы фактически начинаете ей пользоваться.