Материал: 840

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

105

Инкапсуляция

Когда приложение посылает данные с использованием TCP, данные опускаются вниз по стеку протоколов, проходя через каждый уровень, до тех пор пока они не будут отправлены в виде потока битов по сети. Каждый уровень добавляет свою информацию к данным путем пристыковки заголовков (а иногда завершителей). На рис. 6.4 показан этот процесс. Пакет который TCP посылает в IP, называется TCP-сегментом, если данные с этого уровня отправляет UDP, то они называются UDP-дейтаграммой. Блок данных, который IP посылает в сетевой интерфейс, называется IP-дейтаграммой. Поток битов, который передается по

Ethernet, называется фреймом (frame).

Одной из физических характеристик фрейма Ethernet является та, что размер данных должен быть в диапазоне между 46 и 1500 байт, это может быть как IP дейтаграмма, так и фрагмент IP дейтаграммы.

Что касается UDP данных, то картина там практически идентичная TCP-сегменту, единственное различие заключается в том, что размер UDP заголовка составляет 8 байт.

 

 

 

 

 

 

 

заголовок

 

данные

 

 

 

 

 

 

 

 

приложения

пользователя

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

заголовок

 

 

данные приложения

 

 

 

TCP

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

TCP сегмент

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

заголовок

заголовок

 

 

данные приложения

 

 

IP

TCP

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

IP дейтаграмма

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

46 -1500 байт

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

заголовок

заголовок

заголовок

 

 

данные приложения

Ethernet

Ethernet

IP

TCP

 

 

 

 

 

 

 

завершитель

14

20

20

 

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

Ethernet фрейм

 

 

Рис. 6.4 — Инкапсуляция данных стека протоколов TCP/IP

Снова обратимся к рис. 6.3, на котором показано как различные приложения могут использовать TCP или UDP. Протоколы транспортного уровня сохраняют в заголовке идентификатор

106

приложения, которое их использует. TCP и UDP используют шестнадцатибитный номер порта (port number) источника и номер порта назначения в своих заголовках, чтобы указать на требуемые приложения.

Таблица 6.2 — Номера портов популярных протоколов стека TCP/IP

TCP Transmission Control Protocol

 

UDP User Datagram Protocol

 

FTP File Transfer Protocol

21

 

TFTP Trivial File Transfer Protocol

69

HTTP Hypertext Transfer

 

 

SNMP Simple Network Manage-

161

Protocol

 

 

ment Protocol

 

SMTP Simple Mail Transfer

25

 

DHCP Dynamic Host Control Proto-

 

Protocol

 

 

col

 

TELNET Terminal Connection

23

 

DNS Domain Name System

53

 

 

 

RIP

520

Точно так же TCP, UDP, ICMP и IGMP посылают данные в IP. Протокол IP должен добавить какой-либо идентификатор к IP заголовку, который он генерирует, чтобы указать какому из протоколов принадлежат данные. IP делает это путем сохранения восьмибитного значения в своем заголовке, которое называется полем протокола (protocol). Это значение равно 1 для ICMP, 2

для IGMP, 6 для TCP и 17 для UDP.

Сетевой интерфейс посылает и принимает фреймы, принадлежащие IP, ARP и RARP. Должна существовать форма идентификации в заголовке Ethernet, которая бы указывала, какой сетевой уровень сгенерировал данные. Для этого существует шестнадцатибитное поле типа фрейма (frame type) в заголовке Ethernet.

Демультиплексирование (Demultiplexing)

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

лексированием (demultiplexing) см. рис. 6.5.

107

 

клиентский

 

клиентский

 

 

клиентский

 

 

процесс

 

процесс

 

 

процесс

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

демультеплексирование по

клиентский

 

 

 

 

 

 

 

 

 

 

 

 

номеру порта назначения

процесс

 

 

 

 

 

 

 

(port number)

 

 

 

 

 

 

 

 

 

в заголовке TCP или UDP

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

UDP (17) TCP (6) ICMP (1)

IGMP (2)

IP

демультеплексирование основывается на значении протокола (protocol)

в заголовке IP

ARP RARP

демультеплексирование

основывается на типе

Ethernet фрейма (frame type)

в заголовке Ethernet

входящий фрейм

Рис. 6.5 — Демультиплексирование полученного Ethernet фрейма

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

6.3 Протоколы транспортного уровня

Двумя основными протоколами транспортного уровня являются надежный протокол управления передачей данных TCP

(Transmission Control Protocol) и быстрый протокол дейтаграмм пользователя UDP (User Datagram Protocol). TCP реализует сетевое взаимодействие в режиме с установлением логического (виртуального) соединения, а UDP — без оного. Функции каждого протокола реализуются компонентой программного обеспечения (обычно входящей в состав операционной системы), которую будем называть модулем. Взаимодействие модулей соседних

108

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

Рис. 6.6 — Транспортный уровень TCP/IP

Протокол управления передачей TCP

Протокол управления передачей TCP является протоколом транспортного уровня и базируется на возможностях, предоставляемых межсетевым протоколом IP. Основная задача TCP — обеспечение надежной передачи данных в сети. Он осуществляет доставку дейтограмм, называемых сегментами, в виде байтовых потоков с установлением соединения. Он использует контрольные суммы пакетов для проверки их целостности и освобождает прикладные процессы от необходимости таймаутов и повторных передач для обеспечения надежности. Для отслеживания подтверждения доставки в TCP реализуется алгоритм «скользящего» окна.

Описание протокола TCP дано в RFC 793. Протокол TCP взаимодействует с одной стороны с пользователем или прикладной программой, а с другой — с протоколом более низкого уровня, таким как протокол IP.

Основные характеристики протокола TCP перечислены ниже:

реализует взаимодействие в режиме с установлением логического (виртуального) соединения;

обеспечивает двунаправленную дуплексную связь;

организует потоковый (с точки зрения пользователя) тип передачи данных;

дает возможность пересылки части данных, как «экстрен-

ных»;

109

для идентификации партнеров по взаимодействию на транспортном уровне использует 16-битовые «номера портов»;

реализует принцип «скользящего окна» (sliding window) для повышения скорости передачи;

поддерживает ряд механизмов для обеспечения надежной передачи данных.

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

Заголовок TCP-пакета

0

3

9

15

 

23

 

31

 

 

 

порт источника

 

порт приемника

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

Заголовок

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

номер подтверждения (номер следующего октета)

 

20

 

 

 

 

 

 

 

 

 

 

 

 

 

октетов

смеще-

 

резерв

U

A

P

R

S

F

 

размер окна

 

 

ние

 

R

C

S

S

Y

I

 

 

 

 

 

G

K

H

T

N

N

 

 

 

 

 

 

 

 

 

 

 

 

 

 

контрольная сумма

 

указатель

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

опции, если таковые имеются

 

данные

 

 

 

 

 

выравнивания

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

данные …

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 6.7 — Формат TCP пакета

Порт источника и порт приемника — 16-битовые поля,

содержащие номера портов, соответственно, источника и адресата TCP-пакета.

Номер в последовательности (sequence number) — 32-би-

товое поле, содержимое которого определяет (косвенно) положение данных TCP-пакета внутри исходящего потока данных, существующего в рамках текущего логического соединения.

В момент установления логического соединения каждый из двух партнеров генерирует свой начальный «номер в последовательности», основное требование к которому — не повторяться в

Источник: https://studfile.net/preview/16438503/