Для идентификации соединения TCP использует порты сетевых устройств. Первые два поля расширенного заголовка TCP—это идентификаторы портов отправителя и получателя (source and destination ports). Как мы уже говорили, комбинация IP-адреса и номера порта определяет IP endpoint. Сетевое приложение использует эти значения для установления соединения. Так как много разных приложений могут одновременно работать с одним и тем же устройством, то для каждого приложения устройство должно отвести какой-то диапазон номеров портов.
Эта информация позволяет отправителю данных решить, какой порт использовать при работе с данным приложением и она же сообщает получателю, какому приложению передать пакет, пришедший в данный порт. Следующий рисунок иллюстрирует сказанное.
¨ Сетевым устройством Device A пользуются 2 серверных приложения: ServerApp1 и ServerApp2. Они ожидают прихода пакетов от удаленных устройств. Первому приложению приписан TCP-порт 8000, а второму—9000.
¨ Сетевое устройство Device B является клиентом, на котором работают два клиентских приложения (ClientApp1и ClientApp2). Они хотят соединиться с сервером и получить доступ к приложениям 1 и 2. Для того, чтобы послать данные серверному приложению, клиентские приложения тоже должны получить от операционной системы номера свободных портов. Эти порты остаются занятыми на протяжении всей сессии.
Номера клиентских портов обычно не имеют значения (они просто должны быть свободны в момент получения). Поэтому номера портов клиента на рисунке не указаны. Пакеты отправляются от свободного порта Device B к порту Device A, приписанному конкретному приложению.
Следующая таблица IANA определяет список стандартных TCP-портов, присваиваемых известным сетевым приложениям. Это гарантирует, что любой host, выполняющий указанное приложение, получит соединение по указанному порту. Таблица показывает лишь часть допустимых вариантов приписки портов.
Port |
Description |
7 |
Echo |
13 |
Daytime |
17 |
Quote of the day |
20 |
FTP (data channel) |
21 |
FTP (control channel) |
22 |
SSH |
23 |
Telnet |
25 |
SMTP |
37 |
Time |
80 |
HTTP |
110 |
POP3 |
119 |
NNTP |
123 |
Network Time Protocol (NTP) |
137 |
NETBIOS name service |
138 |
NETBIOS datagram service |
143 |
Internet Message Access Protocol (IMAP) |
389 |
Lightweight Directory Access Protocol (LDAP) |
443 |
Secure HTTP (HTTPS) |
993 |
Secure IMAP |
995 |
Secure POP3 |
Номера портов в диапазоне (0, 1023) считаются известными (well-known ports), потому что они приписаны известным, широко используемым приложениям. При создании нового приложения избегайте присвоения этих значений. На деле, если порт уже занят другим приложением, то система не позволит его использовать, но к чему лишние ветви обработки исключений и алгоритмы выбора других значений?
Номера портов в диапазоне (1024, 65535) можно использовать в любом приложении, но даже в таком широком диапазоне существует возможность того, что выбранный порт уже занят каким-то приложением. Поэтому многие приложения предоставляют выбор номера порта пользователю. При этом важно, чтобы клиентское приложение как-то учитывало факт изменения порта серверным приложением, иначе оно не сможет с ним соединиться.
После полей, описывающих порты, следует последовательность чисел, определяющих порядок следования пакетов и поле, подтверждающее факт их доставки. Эти поля TCP-заголовка позволяют отследить процесс прохождения пакетов и подтвердить получение всего блока. Если каких-то пакетов не хватает, то система может запросить повторить их передачу и заново собрать блок данных перед тем, как передать его приложению.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.