Протокол установления связи TCP

Для установления связи в сети TCP / IP используются так называемые протоколы установления связи. Это правила, которые определяют обмен данными между разнородными системами в сети общего пользования. Это похоже на l ingua franca между компьютерами, чтобы они могли понимать друг друга. Фактически это стандарт де-факто, который развивался на протяжении десятилетий с развитием Интернета. Это то, что позволяет любому устройству с поддержкой стека протоколов TCP / IP получать доступ в Интернет для отправки и получения данных.

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

Целью стека TCP является разделение проблем между разработчиком приложения и производителем оборудования. Производителю оборудования необходимо сосредоточить внимание на технических характеристиках физического уровня (PHY). Это определяет электрические характеристики, характеристики сигналов и схемы устройства. Затем разработчик приложения должен запрограммировать доступ к устройству с помощью уровня приложения (APP). Этот PHY и APP будут взаимодействовать с использованием стандартного протокола, определенного в TCP / IP.

Розетки

Чтобы PHY мог взаимодействовать с уровнем APP, должны быть установлены конечные точки, называемые сокетами. Сокет устанавливает двунаправленный канал связи либо внутри одной машины, либо между многими машинами в сети. Это обычные транспорты, которые имеют дело с сетевыми элементами. В зависимости от используемого языка программирования сокеты используют определенные классы, которые предоставляются в виде библиотечных модулей, к которым могут иметь доступ разработчики.

Теоретически служба, запущенная на сервере, идентифицируется по номеру порта. Обычно номер порта может быть назначен любой службе, работающей на сервере в сети. Комитеты по стандартизации, такие как IANA и IETF, разработали назначения портов (то есть хорошо известные порты) для наиболее часто используемых сервисов, чтобы упростить процесс. Эти порты указаны в IETF RFC 1700. Общие используемые порты включают HTTP (80), FTP (21), SMTP (25), DNS (53), Telnet (23), SSH (22) и HTTPS (443), и это лишь некоторые из них. Для доступа к службам, работающим на этих портах, создается сокет для установления соединения.

Трехстороннее рукопожатие

Метод, с помощью которого клиентский компьютер TCP / IP подключается к серверу, называется трехстороннее рукопожатие. Это включает отправку трех сигналов, называемых сообщением.

  1. Первое сообщение - это сообщение SYN или сообщение «Синхронизировать». Пакет данных SYN - это запрос на установление соединения от клиента к серверу.
  2. Сервер ответит, если он доступен, сообщением SYN / ACK или Synchronize / Acknowledge. Это означает, что порт на сервере открыт и доступен для подключения. Если сервер недоступен, произойдет тайм-аут и соединение не будет установлено.
  3. Клиент получит пакет данных SYN / ACK и ответит серверу с помощью сообщения ACK или подтверждения. Затем устанавливается канал связи, и теперь клиент может подключиться к серверу для передачи и приема данных.

Например, когда пользователь подключается к веб-сайту со своего компьютера, он действует как клиент. Сервер - это компьютер, на котором размещен веб-сайт. Каждый раз, когда этот контент загружается с веб-сайта, он проходит трехстороннее рукопожатие. Клиент будет запрашивать доступ через порт 80, который обслуживает веб-сайт по протоколу HTTP. Сервер, если он публичный, откроет соединение для клиента. Как только соединение будет установлено, оно будет обслуживать контент, и клиент загрузит его в свой интернет-браузер. После этого соединение остается открытым в зависимости от настройки заголовка keep-alive на веб-сайте. По истечении времени ожидания соединения, обычно после периода бездействия, который определяется настройками веб-сайта, соединение прерывается сервером.

Программирование сетевых сокетов

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

СЕРВЕР

Сначала импортируйте модуль библиотеки сокетов.

import socket

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

s = socket.socket()         
host = socket.gethostname() 
port = 54321               
s.bind((host, port))

Затем серверу необходимо открыть порт для клиентских подключений.

s.listen(5)

Эта последняя часть установит соединение и подтвердит его сообщением клиенту. Тогда соединение будет закрыто.

while True:
   c, addr = s.accept()     
   print('Got connection from', addr)
   c.close()                

КЛИЕНТ

Импортируйте модуль библиотеки сокетов.

import socket

Создайте объект сокета.

s = socket.socket()

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

host = socket.gethostname() 
port = 54321

Наконец, установите соединение и затем закройте его.

s.connect((host, port))
print(s.recv(1024))
s.close()

После запуска сервера и клиента вы можете подтвердить, что они работают, когда появится следующее сообщение:

Got connection from (‘192.168.1.7’, 54001)

Таблица соединений TCP

Протокол TCP / IP хранит таблицу соединений в памяти сервера. Это отслеживает все подключения от клиентов, подключенных к серверу. Сервер прослушивает только 1 порт, который мультиплексирует все входящие подключения к серверу. Мультиплексирование - это процесс разрешения нескольких подключений на одном логическом канале. Сервер отвечает, используя другой номер порта. В этом примере клиент использовал исходный порт 54001, который установил соединение с портом сервера 54321.

Ниже приводится сводка полей в таблице подключений.

Состояние: состояние соединения (например, ожидание, прослушивание, отправка, закрыто и т. д.)
Локальный адрес: IP-адрес сервера. В состоянии прослушивания он установлен на 0.0.0.0.
Локальный порт: номер порта на сервере.
Удаленный адрес: IP-адрес подключающегося клиента адрес.
Удаленный порт: Номер порта, к которому подключен клиент.

Резюме

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