Протокол TCP/IP или как работает Интернет (для чайников). Подключение tcp


Как получить и измерить высокоскоростное соединение по TCP / Хабр

Надежная передача данных в Интернете осуществляется на базе протокола TCP (Transmission Control Protocol), спецификация к которому была опубликована почти 30 лет назад. Алгоритм TCP (RFC793), позволяет подключенному устройству адаптироваться для работы в сети на скоростях в пределах десятков мегабит в секунду и задержки до 100 секунд. С бурным развитием новых технологий передачи данных, уже через 10 лет после внедрения стало ясно что производительность протокола не будет хватать для более широких каналов.
1) Ограничения TCP
Скорость передачи данных зависит от сетевых и системных характеристик.img1 Процесс передачи данных по сети

a) Буферы Оригинальная конфигурация TCP ограничивает скорость передачи буфером (опция Window Size — «размер окна») и является полем размером в 2^16 байт (до 64 КБайт). Максимальная пропускная способность в данном случае:

Пример: У вас 100 мегабитное соединение к Интернету и до сервера задержка 100 мс. Стандартным стеком TCP, максимальная скорость передачи данных не превысит 10 Мбит/сек ( 524288 бит / 0.1 сек = 5.24 Мбит/сек не смотря на то что у вас 100 мегабитный линк).

b) Bandwidth-delay product (BDP) Производительность TCP в принципе не столько зависит от скорости канала, сколько от так называемом «bandwidth*delay product» или BDP (результат пропускная способность*задержка), который представляет собой число байт необходимых отправителю и получателю для максимального заполнения TCP соединения. Проблемы производительности возникают в случаях так называемых «длинных и широких труб» (LFN «long fat network»), так как BDP в таком случае превышает размер окна TCP, тем самым ограничивая скорость передачи.img2 Влияние задержки на максимальную пропускную способность TCP

Примером могут служить мобильный интернет или быстрый оптический линк. Пример расчетов BDP: a) широкополосный мобильный интернет: 10 Mb/s, 100 ms RTTB×D = 10^7 b/s × 10^-1 s = 10^6 b, or 1 Mb / 125 kB b) высокоскоростная наземной сеть: 1 Gb/s, 10 ms RTTB×D = 10^9 b/s × 10^-2 s = 10^7 b, or 10 Mb / 1.25 MB

Рассчитать BDP можно тут. ”Размер окна” TCP должен превышать BDP для достижение максимальной нагрузки канала.

c) Protocol Overhead По некоторым оценкам около 95% компьютеров мира подключены через технологию Ethernet. Ethernet MTU (полезная нагрузка кадра Ethernet) = макс. 1500 bytes. Если принять во внимание все заголовки Ethernet, IP, TCP, картина будет выглядеть так:img3 Передача одного Ethernet кадра

Цифры указывают размер (в байтах) заголовка для определенного протокола. IFG (Interframe gap) — обязательное межкадровое пространство. Заголовки: preamble, frame delimiter, Ethernet header/FCS – 26 bytes, IFG – 12 bytes, IP header – 20 bytes, TCP header – 20 bytes.

Если исключить VLAN tagging, TCP timestamp и другие опциональные возможности, максимальная полезная нагрузка (Payload) TCP в сетях Ethernet будет:Max TCP Payload= (MTU–TCP–IP) / (MTU+Ethernet+IFG) = (1500–40) / (1500+26+12) = 94.9 %

d) Задержка и потеря пакетов Так как речь идет о надежной передачи информации, потеря пакетов в сети вынуждает TCP передавать повторно сегменты и влияет непосредственно на понижение скорости. Зависимость скорости TCP в соотношении к потери пакетов, определяется формулой Mathis-а:

где: MSS (Maximum segment size) – максимальный размер сегмента TCP (MSS = MTU – packet headers=1460 bytes), MTU — максимальный размер передаваемого блока нижнего уровня OSI (Ethernet MTU = 1500 bytes), RTT — время двусторонней задержки (от одного конца к другому и назад, от англ. Round Trip Time) Ploss — Loss probability (вероятность потерь). Можно обратить внимание что формула не действительна с Ploss = 0. Это нормально, так как в реальном мире всегда есть потери пакетов.

img4 Влияние задержки и потеря пакетов на максимальную пропускную способность TCP

Большинство провайдеров не будет гарантировать потери менее 0.01% (1 пакет из 10`000). Проверить статистику по протоколам можно командой “netstat –s”.

2) Оптимизация TCP
a) усовершенствования протокола В связи с этим были разработаны расширения протокола, описанные в стандарте TCP Extensions for High Performance (RFC1323), которые призваны решить ограничения. Среди них: — TCP Window Scale Option: возможность увеличение Размера Окна до 2^30 (1 ГБайт), — TCP selective acknowledgment (SACK) options: принимающая сторона указывает какие именно пакеты в потоке подтверждены (положительно или отрицательно) (RFC2018), — TCP timestamps: улучшение замеров RTT (Round Trip Time Measurement — RTTM), предотвращение накладки порядковых чисел ACK (Prevention Against Wrapped Sequence numbers — PAWS), — Path MTU discovery: определение максимального MTU на всем пути, — Explicit Congestion Notification (ECN): указывает на перегрузку пути без сбрасывание пакетов (RFC3168).

Проверить текущие настройки TCP/IP компьютера можно здесь.

b) aдаптация oперационных систем Несмотря на то что документ RFC1323 был опубликован в далеком 1992 году, в ОС-ы внедряли изменения не сразу.

OS Windows Поддержка RFC1323 появилась начиная с Windows 2000 (XP, Server 2003) и для активации опции необходимо покрутить в реестре. Системы Windows Server 2008, Vista, 7 включают новую реализацию стека протоколов TCP/IP, известную как стек протоколов TCP/IP нового поколения («Next Generation TCP/IP Stack»). Он спроектирован для того, чтобы обеспечивать сетевые технологии Windows на несколько лет вперед. Среди нововведений: — aвтонастройка окна получения (Receive Window Auto-Tuning), — compound TCP: решает проблему низкой производительности в сетях с высокой пропускной способностью с помощью нового алгоритма, вместо алгоритмов, использовавшихся на других платформах, — усовершенствования для сред с высоким уровнем потерь и еще много чего. Многие опции включены по умолчанию. Конфигурация через командную строку.

С подробными процедурами настройки для различных ОС (Windows XP, FreeBSD, Linux, Solaris, Mac OS X), можно ознакомится на сайте суперкомпьютерного центра Питтсбурга.

Примечание: Хотя через маршрутизаторы в основном проходит весь трафик (между разными сетями), отношение к оптимизации TCP имеют только косвенное (в некоторых случаях), так как работают на более нижнем уровне сетевой модели OSI и выполняют функцию определение оптимальных маршрутов и лишь доставку пакетов до назначения.

3) Измерения производительности стека TCP/IP
В сети существуют множество методов измерения скорости подключения к Интернету. Здесь будет рассмотрен случай с использованием утилиты nuttcp («New TTCP»), так как она имеет несколько приятных преимуществ: — простой и эффективный метод измерения пропускной способности канала через TCP или UDP, — кроссплатформенная одно-файловая программа (CLI), — возможность проверки эффективности локального стека TCP/IP (loopback), — стабильная работа сервера (корректное завершения TCP сессий), без подвисаний и падений (как в случае с iperf), — работа клиента из NAT-а.

Немного истории: В 1980 году, Mike Muuss (автор ping-а) создал ttcp («Test TCP») — один из первых инструментов тестирования пропускной способности TCP. Многие изменения с тех пор были созданы в различных реализациях и с новыми возможностями. Nuttcp является одной из них. Последняя бета — апрель 2010.

Тестирования работает по схеме клиент-сервер. Измеряется payload — полезная нагрузка (без заголовков). Подключение по порту 5000. Передача данных — 5001 (и выше если указать многопоточный тест).

Сервер — достаточно указать #nuttcp -S Клиент — можно указывать множество опций.

Пример: Сервер FreeBSD, клиент Windows XP SP3, FastEthernet (100Mbps).server-ip# nuttcp –S

опции клиента: -w128 — TCP receive window size = 128 KB -r — receiving (прием, для клиента) -F — устраняет возможные проблемы с соединением если вы в NAT-е -i5 — показывать результат каждые 5 секунд -T15 — длительность тестирования (15 секунд).

TX% и RX% являются загрузкой процессора на передатчике и приемнике.

Проверка производительности железа и стека TCP/IP ОС:C:\> nuttcp.exe -w1m 127.0.0.1 205.0625 MB / 10.00 sec = 172.0189 Mbps 19 %TX 12 %RX

Примеры результатов: — Intel Core 2 Duo (2 core) @ 1.6 GHz/ 1 GB RAM / Windows XP = 1300/1400 Mbps — AMD Athlon X2 Dual-Core 4600 @ 2.4 GHz/ 2 GB RAM / Windows 7 = 2000/2100 Mbps — Intel XEON X5650 (24 cores) @ 2.67GHz/ 8 GB RAM / FreeBSD = 16600/18000 Mbps

Проверяем Download (от сервера к клиенту):C:\> nuttcp.exe -w128 -r -F –i5 -T15 server-ip 56.0166 MB / 5.00 sec = 93.9803 Mbps 56.0575 MB / 5.00 sec = 94.0489 Mbps 56.0338 MB / 5.00 sec = 94.0090 Mbps

168.2676 MB / 15.00 sec = 94.1020 Mbps 3 %TX 10 %RX

some-unix-client# nuttcp -r -F -i5 -T15 server-ip 429.0000 MB / 5.02 sec = 717.3541 Mbps 526.0000 MB / 5.00 sec = 882.0518 Mbps

1371.1741 MB / 15.00 sec = 766.6703 Mbps 26 %TX 39 %RX 3153 host-retrans 0.29 msRTT

Проверяем Upload (от клиента к серверу):C:\> nuttcp.exe -w128 –i5 -T15 server-ip 55.6250 MB / 5.00 sec = 93.3169 Mbps 55.8125 MB / 5.00 sec = 93.6562 Mbps 55.6875 MB / 5.00 sec = 93.4277 Mbps

167.2500 MB / 15.12 sec = 92.7664 Mbps 17 %TX 6 %RX

some-unix-client# nuttcp -i5 -T15 server-ip 422.9375 MB / 5.00 sec = 709.5294 Mbps 420.6875 MB / 5.00 sec = 705.9357 Mbps 456.3750 MB / 5.00 sec = 765.6674 Mbps

1305.3853 MB / 15.06 sec = 727.0077 Mbps 20 %TX 48 %RX 24478 host-retrans 0.29 msRTT

4) Вместо заключения
В процессе тестирования, нужно помнить что максимальная скорость отдельного TCP соединения определяется различными факторами: — максимальная пропускная способность самого медленного участка пути, — время между отправкой запроса и получением ответа (RTT), — большинство задержек на больших расстояниях вызваны скоростью света в волокне (~ 200 км/мс), — дополнительные задержки могут возникнуть в момент перегрузки сети или устройства (сервер, рутер, пк), — автоматическое понижение скорости при обнаружении потерь пакетов (стандартный механизм TCP предотвращения перегрузок), — отсутствие других негативных эффектов (минимальное количество ошибок битов на физическом уровне (Bit Error Rate — исправность сетевой карты и корректная работа драйвера), — один физический линк может нести множество одновременных TCP соединений, — один хост может иметь несколько одновременных соединений, даже с тем же удаленным хостом (быстро проверить можно с TCPView или TCPEye).

Популярные speedtest-ы обычно работают в связке browser, flash + geo-локация до ближайшего доступного сервера, что создает: — дополнительную нагрузку на локальную машину (ЦП, память) и сеть (заголовки WWW и т.п.), — выбор сервера может быть не оптимальным, — возможность ошибочных результатов.

И на последок, хотелось бы отметить часто встречаемые проблемы с низкой производительностью сети: — узкое окно TCP (Window Size), — несоответствие Ethernet Duplex, — плохой сетевой кабель.

Ссылки по теме:technet.microsoft.com/en-us/magazine/2007.01.cableguy.aspxfasterdata.es.net/fasterdata/host-tuning

habr.com

Процесс установки соединения по TCP.

Нужны новые клиенты? Тогда Вам рекомендуем посмотреть этот раздел нашего сайта_____

Если надёжность передачи данных опирается на процесс, ориентированный на соединение, то сначала должно быть установлено соединение. Соединение зависит от множества факторов, таких как устройство-источник, устройство назначения, используемое приложение и скорость передачи данных. Изучение процесса установления соединения по протоколу TCP добавит понимание принципов работы этого распространённого протокола. На атом занятии обсуждаются факторы, которые приводят к созданию успешного соединения по протоколу TCP.

УСТАНОВЛЕНИЕ СОЕДИНЕНИЯ С РАВНОПРАВНОЙ СИСТЕМОЙ.

Пользователь службы надежной доставки транспортного уровня должен установит сеанс, ориентированный на соединение с равноправной системой. Этот раздел раскрывает базовую концепцию сеанса, ориентированного на соединение.

Перед началом передачи данных отправитель и получатель информируют свои операционные системы о том, что необходимо инициировать соединение. Один компьютер инициирует соединение, согласие на которое должен дать другой компьютер. Программные модули протокола в двух операционных системах связываются посредством отправки сообщений через сеть для проверки санкционирования передачи и готовности обеих сторон.

После проведения успешной синхронизации обе оконечные системы устанавливают соединение и начинают передачу данных. В течение всей передачи, оба компьютера проводят проверку того, что соединение остаётся в силе.

ТРЕХЭТАПНОЕ КВИТИРОВАНИЕ (Three-Way Handshake)

Протокол TCP требует, что бы до начала передачи данных было установлено соединение между двумя конечными системами.

Three-Way Handshake

Процесс установки соединения по TCP.

Процесс установки соединения по TCP.

Протокол TCP устанавливает соединение, используя процесс, называемый «трёхэтапное квитирование» (three-way handshake). Этот процесс предполагает установку бита синхронизации (SYN) и бита уведомления (АСК) в передаваемом сегменте между двумя устройствами. Другая важная функция, выполняемая в течение процесса установления соединения — информирование другого устройства о начальном порядковом номере (initial sequence number — ISN), который применяется при передаче байтовых последовательностей данных в этом соединении. В таблице приводятся упрощенное объяснение этого процесса.

ПРОЦЕДУРА УСТАНОВЛЕНИЯ СОЕДИНЕНИЯ В TCP

Шаг

Действие

Комментарии

1.

Сторона, запрашивающая соединение,отправляет сегмент синхронизации на приёмное устройство (CTL=SYN), начиная тем самым процесс квитирования.

Сегмент синхронизации указывает номер порта приёмного устройства, с которым хочет установить связь отправитель. Сегмент синхронизации так же содержит значение ISN, которое будет использоваться процессом уведомления.

2.

Приёмное устройство отвечает сегментом с набором бит CTL=SYN, АСК для переговоров о соединении и подтверждения получения сегмента синхронизации от отправителя.

Приёмное устройство отвечает отправкой порядкового номера следующего байта данных ожидаемого приёмником от отправителя. Следующий порядковый номер — ISN отправителя увеличенный на единицу.

3.

Сторона, запрашивающая соединение подтверждает сегмент синхронизации, полученный от приёмника (CTL=ACK).

В заголовке TCP сбрасывается бит SYN, подтверждая, что трёхэтапное квитирование завершено.

 

 

 

www.luckycom.ru

Установка TCP соединения

⇐ ПредыдущаяСтр 9 из 27Следующая ⇒

Надёжность передачи данных по протоколу TCP обеспечивается за счёт установления логического соединения. TCP соединения является двунаправленным полнодуплексным каналом между двумя прикладными процессами в общей IP сети. TCP соединение устанавливается в три фазы (3-way handshake) (рисунок 1).

Установление TCP соединения начинается с посылки TCP узлом 1 сегмента с установленным флагом «SYN». В качестве номера последовательности указывается случайное число «ISN», в качестве номера подтверждения указывается нулевой октет, размер «окна» выставляется по умолчанию для определённой операционной системы (для Windows 16384 байт), параметр «MSS» и параметр запроса для опции «SACK» (Selective АСК - выборочные подтверждения). Опция «SACK» позволяет установить соединение с выборочным подтверждением принятых TCP сегментов, экономя тем самым полосу пропускания и аппаратные ресурсы компьютера.

 

Рисунок 1. Установление TCP соединения

 

Если TCP узел 2 готов установить TCP соединение с TCP узлом 1, то есть данный TCP порт не закрыт и ресурсов компьютера хватает для установки соединения, то узел 2 посылает ответ с установленными флагами «SYN» и «АСК». Такой ответ также содержит параметры «SN» равный ISN2, «Аск» равный ISN1+1, «Window» равный n*MSS, «MSS» и параметр «SACK-допуск», как указание на готовность использовать опцию «SACK». Перед тем, как отравить этот сегмент, TCP узел 2 должен подсчитать допустимый размер «окна». Для этого вычисляется сначала общий «MSS» минимальный «MSS» для двух узлов, затем делится размер «окна» умолчанию (16384 байта) на величину общего «MSS» и полученный результат округляется в большую сторону до целого числа «n». Допустимый размер «окна» вычисляет как произведение «n» на общий «MSS».

На завершающей стадии установления соединения TCP узел отправляет подтверждение принятых параметров от TCP узла 2.

 

mykonspekts.ru

Протокол TCP/IP или как работает Интернет (для чайников)

В основе работы глобальной сети Интернет лежит  набор (стек) протоколов TCP/IP. Но эти термины лишь на первый взгляд кажутся сложными. На самом деле стек протоколов TCP/IP — это простой набор правил обмена информацией, и правила эти на самом деле вам хорошо известны, хоть вы, вероятно, об этом и не догадываетесь. Да, все именно так, по существу в принципах, лежащих в основе протоколов TCP/IP, нет ничего нового: все новое — это хорошо забытое старое.

Человек может учиться двумя путями:

  1. Через тупое формальное зазубривание шаблонных способов  решения  типовых задач (чему сейчас в основном и учат в школе). Такое обучение малоэффективно. Наверняка вам приходилось наблюдать панику и полную беспомощность бухгалтера при смене версии офисного софта - при малейшем изменении последовательности кликов мышки, требуемых для выполнения привычных действий. Или  приходилось видеть человека, впадающего в ступор при изменении интерфейса рабочего стола? 
  2. Через понимание сути проблем, явлений, закономерностей. Через понимание принципов построения той или иной системы. В этом случае обладание энциклопедическими знаниями не играет большой роли - недостающую информацию легко найти. Главное - знать, что искать. А для этого необходимо не формальное знание предмета, а понимание сути.

В этой статье я предлагаю пойти вторым путем, так как понимание принципов, лежащих в основе работы Интернета, даст вам возможность чувствовать себя в Интернете уверенно и свободно — быстро  решать возникающие проблемы, грамотно формулировать проблемы и уверенно общаться с техподдержкой.

Итак, начнем.

Принципы работы интернет-протоколов TCP/IP по своей сути очень просты и сильно напоминают работу нашей советской почты.

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

На конверте письма будет написано примерно следующее:

Адрес отправителя: От кого: Иванов Иван Иванович Откуда: Ивантеевка, ул. Большая , д. 8, кв. 25 Адрес получателя: Кому: Петров Петр Петрович Куда: Москва, Усачевский переулок, д. 105, кв. 110

Теперь мы готовы рассмотреть взаимодействие компьютеров и приложений в сети Интернет (да и в локальной сети тоже). Обратите внимание, что аналогия с обычной почтой будет почти полной.

Каждый компьютер (он же: узел, хост) в рамках сети Интернет тоже имеет уникальный адрес, который называется IP-адрес (Internet Protocol Address), например: 195.34.32.116. IP адрес состоит из четырех десятичных чисел (от 0 до 255), разделенных точкой. Но знать только IP адрес компьютера еще недостаточно, т.к. в конечном счете обмениваются информацией не компьютеры сами по себе, а приложения, работающие на них. А на компьютере может одновременно работать сразу несколько приложений (например почтовый сервер, веб-сервер  и пр.). Для доставки обычного бумажного письма недостаточно знать только адрес дома — необходимо еще знать номер квартиры. Также и каждое программное приложение имеет подобный номер, именуемый номером порта. Большинство серверных приложений имеют стандартные номера, например: почтовый сервис привязан к порту с номером 25 (еще говорят: «слушает» порт, принимает на него сообщения), веб-сервис привязан к порту 80, FTP - к порту 21 и так далее.

Таким образом имеем следующую практически полную аналогию с нашим обычным почтовым адресом:

"адрес дома" = "IP компьютера" "номер квартиры" = "номер порта"

В компьютерных сетях, работающих по протоколам TCP/IP, аналогом бумажного письма в конверте является пакет, который содержит собственно передаваемые данные и адресную информацию — адрес отправителя и адрес получателя, например:

Адрес отправителя (Source address): IP: 82.146.49.55 Port: 2049 Адрес получателя (Destination address): IP: 195.34.32.116 Port: 53 Данные пакета: ...

Конечно же в пакетах также присутствует служебная информация, но для понимания сути это не важно.

Обратите внимание, комбинация: "IP адрес и номер порта" - называется  "сокет".

В нашем примере мы с сокета 82.146.49.55:2049 посылаем пакет на сокет 195.34.32.116:53, т.е. пакет пойдет на компьютер, имеющий IP адрес 195.34.32.116, на порт 53. А порту 53 соответствует сервер распознавания имен (DNS-сервер), который примет этот пакет. Зная адрес отправителя, этот сервер  сможет после обработки нашего запроса сформировать ответный пакет, который пойдет в обратном направлении на сокет отправителя 82.146.49.55:2049, который для DNS сервера будет являться сокетом получателя.

Как правило взаимодействие осуществляется по схеме «клиент-сервер»: "клиент" запрашивает какую-либо информацию (например страницу сайта), сервер принимает запрос, обрабатывает его и посылает результат. Номера портов серверных приложений общеизвестны, например:  почтовый SMTP сервер «слушает» 25-й порт,  POP3 сервер, обеспечивающий чтение почты из ваших почтовых ящиков «слушает» 110-порт, веб-сервер - 80-й порт и пр.

Большинство программ на домашнем компьютере являются клиентами - например почтовый клиент Outlook, веб-обозреватели IE, FireFox и пр. 

Номера портов на клиенте не фиксированные как у сервера, а назначаются операционной системой динамически. Фиксированные серверные порты как правило имеют номера до 1024 (но есть исключения), а клиентские начинаются после 1024.

Повторение - мать учения: IP — это адрес компьютера (узла, хоста) в сети, а порт — номер конкретного приложения, работающего на этом компьютере.

Однако человеку запоминать цифровые IP адреса трудно - куда удобнее работать с буквенными именами. Ведь намного легче запомнить слово, чем набор цифр. Так и сделано - любой цифровой IP адрес можно связать с  буквенно-цифровым именем. В результате например вместо 82.146.49.55 можно использовать имя www.ofnet.ru.  А преобразованием доменного имени в цифровой IP адрес занимается сервис доменных имен — DNS (Domain Name System).

Рассмотрим подробнее, как это работает. Ваш провайдер явно (на бумажке, для ручной настройки соединения) или неявно (через автоматическую настройку соединения) предоставляет вам IP адрес сервера имен (DNS). На компьютере с этим IP адресом работает приложение (сервер имен), которое знает все доменные имена в Интернете и соответствующие им цифровые IP адреса. DNS-сервер «слушает» 53-й порт, принимает на него запросы и выдает ответы, например:

Запрос от нашего компьютера: "Какой IP адрес соответствует имени www.ofnet.ru?" Ответ сервера: "82.146.49.55."

Теперь рассмотрим, что происходит, когда в своем браузере вы набираете доменное имя (URL) этого сайта (www.ofnet.ru) и, нажав <enter>, в ответ от веб-сервера получаете страницу этого сайта.

Например:

IP адрес нашего компьютера: 91.76.65.216 Браузер: Internet Explorer (IE), DNS сервер (стрима): 195.34.32.116 (у вас может быть другой), Страница, которую мы хотим открыть: www.ofnet.ru.

Набираем в адресной строке браузера доменное имя www.ofnet.ru и жмем <enter>. Далее операционная система производит примерно следующие действия:

Отправляется запрос (точнее пакет с запросом) DNS серверу на сокет 195.34.32.116:53. Как было рассмотренно выше, порт 53 соответствует DNS-серверу - приложению,  занимающемуся распознаванием имен. А DNS-сервер, обработав наш запрос, возвращает IP-адрес, который соответствует введенному имени.

Диалог примерно следующий:

- Какой IP адрес соответствует имени www.ofnet.ru? - 82.146.49.55.

Далее наш компьютер устанавливает соединение с портом 80 компьютера  82.146.49.55 и посылает запрос (пакет с запросом) на получение страницы www.ofnet.ru. 80-й порт соответствует веб-серверу. В адресной строке браузера 80-й порт как правило не пишется, т.к. используется по умолчанию, но его можно и явно указать после двоеточия - http://www.ofnet.ru:80.

Приняв от нас запрос, веб-сервер обрабатывает его и в нескольких пакетах посылает нам страницу в на языке HTML - языке разметки текста, который понимает браузер.

Наш браузер, получив страницу, отображает ее. В результате мы видим на экране главную страницу этого сайта.

Зачем эти принципы надо понимать?

Например, вы заметили странное поведение своего компьютера - непонятная сетевая активность, тормоза и пр. Что делать? Открываем консоль (нажимаем кнопку «Пуск» - «Выполнить» - набираем cmd - «Ок»). В  консоли набираем команду netstat -anи жмем <Enter>. Эта утилита отобразит список установленных соединений между сокетами нашего компьютера и сокетами удаленных узлов. Если мы видим в колонке «Внешний адрес» какие-то чужие IP адреса, а через двоеточие 25-й порт, что это может означать? (Помните, что 25-й порт соответствует почтовому серверу?) Это означает то, что ваш компьютер установил соединение с каким-то почтовым сервером (серверами) и шлет через него какие-то письма. И если ваш почтовый клиент (Outlook например) в это время не запущен, да если еще таких соединений на 25-й порт много, то, вероятно, в вашем компьютере завелся вирус, который рассылает от вашего имени спам или пересылает номера ваших кредитных карточек вкупе с паролями злоумышленникам.

Также понимание принципов работы Интернета необходимо для правильной настройки файерволла (проще говоря брандмауэра :)). Эта программа (которая часто поставляется вместе с антивирусом), предназначенна для фильтрации пакетов - "своих" и "вражеских". Своих пропускать, чужих не пущать. Например, если ваш фаерволл сообщает вам, что некто хочет установить соединение с каким-либо портом вашего компьютера. Разрешить или запретить?

Ну и самое главное — эти знания крайне полезны при общении с техподдержкой.

Напоследок приведу список портов, с которыми вам, вероятно, придется столкнуться:

135-139 — эти порты используются Windows для доступа к общим ресурсам компьютера — папкам, принтерам. Не открывайте эти порты наружу, т.е. в районную локальную сеть и Интернет. Их следует закрыть фаерволлом. Также если в локальной сети вы не видите ничего в сетевом окружении или вас не видят, то вероятно это связано с тем, что фаерволл заблокировал эти порты. Таким образом для локальной сети эти порты должны быть открыты, а для Интернета закрыты. 21 — порт FTP сервера. 25 — порт почтового SMTP сервера. Через него ваш почтовый клиент отправляет письма. IP адрес SMTP сервера и его порт (25-й) следует указать в настройках вашего почтового клиента. 110 — порт POP3 сервера. Через него ваш почтовый клиент забирает письма из вашего почтового ящика. IP адрес POP3 сервера и его порт (110-й) также следует указать в настройках вашего почтового клиента. 80 — порт WEB-сервера. 3128, 8080 — прокси-серверы (настраиваются в параметрах браузера).

Несколько специальных IP адресов:

127.0.0.1 — это localhost, адрес локальной системы, т.е. локальный адрес вашего компьютера. 0.0.0.0 - так обозначаются все IP-адреса. 192.168.xxx.xxx — адреса, которые можно произвольно использовать в локальных сетях, в глобальной сети Интернет они не используются. Они уникальны только в рамках локальной сети. Адреса из этого диапазона вы можете использовать по своему усмотрению, например, для построения домашней или офисной сети.

Что такое маска подсети и шлюз по умолчанию (роутер, маршрутизатор)?

(Эти параметры задаются в настройках сетевых подключений).

Все просто. Компьютеры объединяются в локальные сети. В локальной сети компьютеры напрямую «видят» только друг друга. Локальные сети соединяются друг с другом через шлюзы (роутеры, маршрутизаторы). Маска подсети предназначена для определения — принадлежит ли компьютер-получатель к этой же локальной сети или нет. Если компьютер-получатель принадлежит этой же сети, что и компьютер-отправитель, то пакет передается ему напрямую, в противном случае пакет отправляется на шлюз по умолчанию, который далее, по известным ему маршрутам, передает пакет в другую  сеть, т.е. в другое почтовое отделение (по аналогии с советской почтой).

Напоследок рассмотрим что же означают непонятные термины:

TCP/IP — это название набора сетевых протоколов. На самом деле передаваемый пакет проходит несколько уровней. (Как на почте: сначала вы пишете писмо, потом помещаете в конверт с адресом, затем на почте на нем ставится штамп и т.д.).

IP протокол — это протокол так называемого сетевого уровня. Задача этого уровня — доставка ip-пакетов от компьютера отправителя к компьютеру получателю. По-мимо собственно данных, пакеты этого уровня имеют ip-адрес отправителя и ip-адрес получателя. Номера портов на сетевом уровне не используются. Какому порту, т.е. приложению адресован этот пакет, был ли этот пакет доставлен или был потерян, на этом уровне неизвестно — это не его задача, это задача транспортного уровня.

TCP и UDP — это протоколы так называемого транспортного уровня. Транспортный уровень находится над сетевым. На этом уровне к пакету добавляется порт отправителя и порт получателя.

TCP — это протокол с установлением соединения и с гарантированной доставкой пакетов. Сначала производится обмен специальными пакетами для установления соединения, происходит что-то вроде рукопожатия (-Привет. -Привет. -Поболтаем? -Давай.). Далее по этому соединению туда и обратно посылаются пакеты (идет беседа), причем с проверкой, дошел ли пакет до получателя. Если пакет не дошел, то он посылается повторно («повтори, не расслышал»).

UDP — это протокол без установления соединения и с негарантированной доставкой пакетов. (Типа: крикнул что-нибудь, а услышат тебя или нет — неважно).

Над транспортным уровнем находится прикладной уровень. На этом уровне работают такие протоколы, как http, ftp и пр. Например HTTP и FTP — используют надежный протокол TCP, а DNS-сервер работает через ненадежный протокол UDP.

Как посмотреть текущие соединения?

Текущие соединения можно посмотреть с помощью команды

netstat -an

(параметр n указывает выводить IP адреса вместо доменных имен).

Запускается эта команда следующим образом:

«Пуск» - «Выполнить» - набираем cmd - «Ок». В появившейся консоли (черное окно) набираем команду netstat -an и жмем <Enter>. Результатом будет список установленных соединений между сокетами нашего компьютера и удаленных узлов.

Например получаем:

Активные подключения
Имя Локальный адрес Внешний адрес Состояние
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING
TCP 91.76.65.216:139 0.0.0.0:0 LISTENING
TCP 91.76.65.216:1719 212.58.226.20:80 ESTABLISHED
TCP 91.76.65.216:1720 212.58.226.20:80 ESTABLISHED
TCP 91.76.65.216:1723 212.58.227.138:80 CLOSE_WAIT
TCP 91.76.65.216:1724 212.58.226.8:80 ESTABLISHED
...

В этом примере 0.0.0.0:135 — означает, что наш компьютер на всех своих IP адресах слушает (LISTENING) 135-й порт и готов принимать на него соединения от кого угодно (0.0.0.0:0) по протоколу TCP.

91.76.65.216:139 — наш компьютер слушает 139-й порт на своем IP-адресе 91.76.65.216.

Третья строка означает, что сейчас установлено (ESTABLISHED) соединение между нашей машиной (91.76.65.216:1719) и удаленной (212.58.226.20:80). Порт 80 означает, что наша машина обратилась с запросом к веб-серверу (у меня, действительно, открыты страницы в браузере).

В следующих статьях мы рассмотрим, как применять эти знания, например общаясь с техподдержкой. 

www.ofnet.ru

tcp - Время соединения TCP

Я согласен с Zan Lynx. Нет никакой гарантии, но вы можете поддерживать связь практически неограниченно, отправляя данные по ней, предполагая, что нет проблем с подключением или пропускной способностью.

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

Если вы считаете, что один отказ не был подтвержден, так как сбой связи был до вас. Как правило, это то, что я делал в прошлом, хотя был случай, когда я ожидал трех неудачных ответов подряд, чтобы отказаться от соединения, потому что приложение на другом конце соединения было очень неприятным в ответе на "вы там"?" запросы.

Если соединение не удастся, что в какой-то момент, вероятно, будет, даже с машинами в той же сети, а затем попробуйте восстановить его. Если это не выполняется определенное количество раз, то у вас есть проблема. Если ваше соединение настойчиво терпит неудачу после того, как оно было подключено какое-то время, то снова возникает проблема. Скорее всего, в обоих случаях это, вероятно, проблема с сетью, а не с вашим кодом, или, может быть, проблема с стеком TCP/IP на вашем компьютере (было известно: у меня возникли проблемы с этой версией в старой версии QNX - это просто случайно выпадают). Сказав, что у вас может быть проблема с программным обеспечением, и единственный способ узнать наверняка - это часто прикреплять отладчик или получать некоторые записи. Например. если вы всегда можете успешно подключиться, но через какое-то время вы перестанете получать ACK, даже после повторного подключения, тогда, возможно, ваш сервер блокируется или застревает в цикле или что-то в этом роде.

Что действительно полезно, чтобы установить серию длительных тестов в различных условиях загрузки, просто отправляя в режим сохранения, вы там? /ack запросы и ответы, чтобы полностью избивать сервер. Это, как правило, дает вам больше уверенности в ваших программных компонентах и ​​может быть очень полезно в избавлении от некоторых действительно странных проблем, которые не обязательно вызовут проблему с вашим соединением, хотя они могут привести к проблемам с транзакциями. Например, я когда-то писал сервер приложений для телекоммуникаций, который предоставлял такие услуги, как перевод чисел, и мы просто оставим его работающим в течение нескольких дней. Дело в том, что, когда суббота наступит, на весь день, он отклонит каждый запрос на вызов, который пришел, который составил миллионы звонков, и мы понятия не имели, почему. Это оказалось из-за одной опечатки в каком-то коде конверсии даты, что только вызвало проблему по субботам.

Надеюсь, что это поможет.

qaru.site

Настройки TCP/IP

UDP и TCP

 

Наиболее широко используемые протоколы сегодня это TCP (Transport Control Protocol) и UDP (User Datagram Protocol). TCP это проверенный и надежный протокол, который на сегодняшний день, наверное, самый широко используемый протокол в сетях IP. Однако TCP имеет ряд ограничений и излишнюю функциональность, что может быть ‘слишком надежным’ или трудозатратным для множества систем. Однако когда речь о TCP ведется как о транспортном протоколе для множества приложений с последовательной передачей данных, TCP может оказаться помехой для обеспечения устойчивой связи. В то же время, UDP это более простой протокол, и используется довольно широко сегодня - особенно в областях, где пропускная способность канала передачи данных или производительность системы ограничены. В качестве примера можно привести использование UDP как транспортного протокола для беспроводной передачи данных.

 

UDP это первый протокол, который не требует установки соединения для передачи данных. Как и TCP, UDP работает как верхний слой IP сетей. Но в отличие от TCP, UDP не помогает при доставке данных и не имеет средств по контролю ошибок. Зато протокол предлагает возможность прямой отправки и приема пакетов данных, что позволяет приложениям самим контролировать целостность данных и перепосылать данные по необходимости. Одно из применений этого - отправка широковещательных пакетов данных малого размера. В настоящее время протокол UDP используется везде начиная от браузеров и заканчивая Instant Messaging, систем по передачи видео и голосовых данных в приложения IP.

 

Клиент и Сервер

 

Advanced NMEA Data Logger может быть настроен для протоколирования данных одновременно с нескольких портов на одном компьютере. Для этого в программе создаются конфигурации для каждого порта. Каждая конфигурация может иметь различные настройки для каждого TCP/IP порта и  имеет несколько параметров, которые описаны ниже.

 

Каждая конфигурация (или по другому соединение TCP/IP) в Advanced NMEA Data Logger может работать как:

 

1.Клиент. Вам необходимо указать IP адрес и порт удаленного компьютера, на котором работает сервер TCP/IP, и к которому вы хотите подсоединиться. IP адрес, который укажите в Advanced NMEA Data Logger во время конфигурации, может быть и доменным именем (типа www.yourserver.com) или именем компьютера в локальной сети. Например, если вы хотите соединиться с компьютером в локальной сети, который имеет имя "Plant1", вы можете просто указать "Plant1" в поле ввода IP адреса, вместо самого IP адреса. Это бывает полезно, когда вы настраиваете Advanced NMEA Data Logger как клиента и IP адреса в вашей сети выдаются динамически. Поэтому удобнее использовать имя вместо IP адреса;
2.Сервер. В этом режиме вы должны указать IP адрес компьютера, на котором работает программа, а также порт, который будет прослушиваться. Если ваш компьютер имеет несколько сетевых карт или сетевых интерфейсов, тогда Advanced NMEA Data Logger будет отображать список IP адресов для каждого сетевого интерфейса (NIC), установленного на вашем компьютере. Поэтому вы должны выбрать IP адрес того интерфейса, который вы хотите использовать. Для того, чтобы Advanced NMEA Data Logger мог работать как сервер необходимо, чтобы имел хотя бы одну сетевую карту, с присвоенным ей IP адресом. В Microsoft Windows, протокол TCP/может быть настроен на автоматическое получение IP адреса для компьютера. В этом случае вам необходимо связаться с администратором и попросить присвоить вашему компьютеру статический IP адрес и установить данный IP адрес выбранному сетевому интерфейсу.

 

После того, как вы настроили параметры соединения, вы должны нажать кнопку "OK" для того, чтобы установить соединение между Advanced NMEA Data Logger и выбранным портом TCP/IP. Если данная конфигурация порта настроена как клиент, то программа немедленно попытается установить соединение с удаленным IP сервером. Если сервер недоступен, то Advanced NMEA Data Logger может постоянно пробовать установить соединение. Если конфигурация настроена как сервер, то программа будет прослушивать указанный порт, и ожидать подсоединения клиента.

 

Если вы сконфигурировали несколько портов, тогда Advanced NMEA Data Logger открывает эти порты и начинает сбор данных. Если порты открыты успешно, то строка статуса в главном окне программы отображает статус порта (рис. 1.1.1). Но перед этим необходимо настроить параметры, описанные ниже.

 

Вы можете создать новую конфигурацию, нажав кнопку с плюсом на панели инструментов в главном окне программы (рис. 1.1.1) или через меню "Опции". После того, как вы нажмете эту кнопку, будет открыто диалоговое окно (рис. 2.2.2). Данное окно содержит несколько закладок с параметрами. Закладка "Настройка IP" описана в этом разделе.

 

Для того чтобы производить запись с нескольких портов TCP/IP одновременно вам необходимо создать несколько конфигураций. Для этого повторите операцию, описанную выше для каждой конфигурации. Позднее вы можете получить доступ к каждой конфигурации с помощью выпадающего меню рядом с кнопкой "Плюс" (рис. 2.2.1).

 

Рис. 2.2.1. Доступ к конфигурации порта

 

Закладка "Настройка IP" содержит несколько обязательных настроек для каждого порта TCP/IP: IP адрес и порт. Необходимо ввести или выбрать IP адрес из выпадающего списка и указать номер порта, а затем кликнуть на кнопке "Плюс".

 

Рис. 2.2.2. Параметры TCP/IP

 

Порт

 

В дополнение к IP адресу, вы должны указать порт, к которому вы хотите подсоединиться. Каждый компьютер имеет множество портов, которые позволяют связывать компьютеры по множеству каналов. Некоторые порты общеизвестны. Например, порт, который обычно используется для отправки писем через SMTP - 25, порт the telnet - 23, порт протокола NNTP - 119, и т.д. Для того, чтобы просмотреть список общеизвестных портов взгляните в файл SERVICES, который расположен в папке Windows (для Windows NT этот файл в папке  WINNT\SYSTEM32\DRIVERS\ETC). Файл SERVICES - это текстовый файл, который используется Advanced NMEA Data Logger для осуществления поиска общеизвестных портов (для того, чтобы получить имя сетевого сервиса по имени порта) и поиска имени сетевого сервиса (для того, чтобы получить номер порта по имени сетевого сервиса). Вы можете открыть этот файл в любом текстовом редакторе и посмотреть список сетевых служб и их номер портов. Это общеизвестные порты не закреплены жестко, но по традиции используются для указанных сетевых служб и их рекомендуется не использовать для своих нужд. Во время настройки программы вы должны выбрать номер порта, который не указан в этом файле, или не используются другими программами на вашем компьютере. В большинстве случаем достаточно выбрать порт, не принадлежащий к группе общеизвестных.

 

Комбинация IP адреса и порта используется для создания сокета (socket). Сокет создается перед тем как установить соединение между двумя устройствами. Как же зависит тип сокета от того, является программа сервером или клиентом. Если программа это сервер, то она создает сокет, открывает его, и затем прослушивает его, ожидая соединения от других устройств. В этот момент сервер находится в режиме ожидания соединения. Клиентское приложение, с другой стороны, создает сокет, использую IP адрес и порт соответствующего сервера, который в данный момент ожидает соединения. Клиент использует сокет для попытки установить соединение с сервером. Когда сервер получает сообщение о попытке соединения, он "просыпается" и принимает решение о том принять или отклонить соединение. Обычно проверка осуществляется проверкой IP адреса клиента со списком разрешенных адресов (некоторые сервера не проверяют клиентов и принимают все соединения). Если соединение было принято, то клиент начинаю обмениваться данными.

 

Параметры соединения

 

Если удаленный сервер (если программа работает в режиме клиента) или сетевой интерфейс (в режиме сервера) недоступны в момент подключения, то включите опцию "Пробовать соединиться после неудачной попытки", и Advanced NMEA Data Logger будет периодически пробовать установить соединение. Программа будет пробовать установить соединение каждые N секунд, которые вы можете указать в поле "Следующая попытка через (c)".

 

Разрешенные IP адреса

 

Эта опция активна в режиме сервера и позволяет определить один или несколько адресов, для которых разрешено подсоединяться к серверу. Соединения с IP адреса, который не указан в списке, будут отклонены. Эта опция очень полезна если вы передаете данные через Интернет соединение или сервер подсоединен к большой корпоративной сети. Вы можете указать несколько разрешенных адресов - один адрес в строке. Если вы оставите поле пустым, то Advanced NMEA Data Logger будет принимать соединения со всех IP адресов. Список разрешенных адресов можно задать на закладке "Опции сервера".

 

Настройки брандмауэра (firewall)

 

После установки брандмауэра или Microsoft Windows XP SP2 и выше, наш Advanced NMEA Data Logger может не работать. Windows Firewall, включенный по умолчанию, или ваш брандмауэр, блокирует сетевой доступ для непроверенных программ и может блокировать нормальную работу программы. Когда Windows Firewall определяет, что требуется сетевое соединение, которое неизвестно, то будет выведено окно Агента безопасности (Security Alert). Этот диалог выглядит похожим на диалог ниже:

 

Рис. 2.2.3. Предупреждение брандмауэра

 

Этот диалог включает следующие опции:

Разблокировать программу;
Заблокировать программу навсегда;
Заблокировать программу временно, но спросить позже.

 

Для того чтобы наша программа работала корректно, вы должны разблокировать нашу программу.

 

Замечание: Если вы использует брандмауэр другого производителя то, пожалуйста, обратитесь к документации на это ПО для того, чтобы узнать, как разблокировать нашу программу.

 

Дополнительные параметры

 

Закладка "Дополнительно" содержит дополнительные опции настройки TCP/IP соединения (рис. 2.2.4).

 

Простоя эмуляция терминала - программа реализует упрощенную поддержку ряда терминальных протоколов. При включении эмуляции терминала будут обрабатываться служебные команды и символы указанного терминала.

 

 

Следующие опции эффективны только в режиме "TCP/IP сервер":

 

Лимит одновременных подключений - можно задать лимит одновременно подключенных клиентов к серверу. Это позволяет оптимизировать нагрузку на сервер при большом количестве клиентов.

Отсоединять неактивных клиентов через (с) - если клиент подключен, но при этом не передавал и не получал никаких данных в течение указанного времени, то соединение с этим клиентом будет разорвано. Если указать значение "-1", то отключение клиента не будет производиться.

 

 

Рис. 2.2.4. Дополнительные параметры

 

Следующие опции эффективны только для протокола TCP/IP в режиме сервера или клиента:

 

Режим keep-alive TCP (режим поддержания связи) - при активации этой опции программа будет периодически, с указанным интервалом, отсылать служебные пакеты. Если в течение указанного таймаута не будет получен ответ от клиента или сервера, то программа автоматически разорвет соединение, поскольку отсутствие ответа будет означать, что связь с сервером или клиентом была потеряна. Если будет выбран "Системный" режим keep-alive, то программа будет использовать системные значения интервала и таймаута, используемые Windows.

 

Замечание: Некоторые роутеры не поддерживают передачу служебных пакетов. В этом случае функция keep-alive работать не будет.

 

Следующие опции эффективны при работе программы в режиме сервера (TCP или UDP):

 

Отсылать информацию о клиенте в парсер - при активации данной опции, к пакету данных будет добавляться служебная информация об удаленном клиенте. Это позволит парсеру разделять пакеты данных от нескольких клиентов, передающих данные одновременно.

www.aggsoft.ru

udp - TCP vs UDP - Что такое TCP-соединение?

Позвольте разбить это на части. Первая из сети основана на IP-адресе, который является протоколом, который присваивает адрес каждой сети node, и который позволяет отправлять небольшие объемы данных (обычно до 64 КБ, но обычно только 1500B) от одного node к другому.

Это само по себе не стоит многого, потому что мы не можем делать какие-либо проверки, что данные действительно прибыли, и что он прибыл в правильном порядке. Если мы хотим, чтобы абстрактный механизм передавал произвольные объемы данных и обеспечивал их прибытие, нам нужен еще один протокол поверх сети, который обрабатывает эту "передачу". И что цель TCP.

Однако параллельно с TCP существует еще один "протокол передачи", который вообще не выполняет никаких проверок и не имеет надежности, UDP. UDP - это всего лишь тонкая оболочка вокруг необработанных IP-пакетов, которая добавляет немного метаданных (например, номер порта).

UDP по-прежнему полезен, так как существует много ситуаций, когда целостность данных уже передана еще более высокому протоколу, поэтому нет необходимости в сложном протоколе передачи. Это, например, используется в виртуальных сетевых службах, где другой экземпляр TCP/IP обычно запускается по каналу UDP. (Обеспечение канала использованием надежного протокола, такого как TCP, может фактически иметь катастрофические последствия в этом случае из-за повторных каскадов.)

Таким образом, термин "TCP-соединение" относится к приложению TCProtocol. Естественно, протокол является естественным, и обычно он выполняется в последовательности SYN-ACK-данных-FIN или SYN/RST в случае отклоненной передачи; оба партнера поддерживают статус соединения (рукопожатие, установлено, закрыто, закрыто). TCP также вводит термины "сервер" и "клиент", а сервер - это одноранговый узел listen() для входящего соединения.

qaru.site