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-пакета внутри исходящего потока данных, существующего в рамках текущего логического соединения.
В момент установления логического соединения каждый из двух партнеров генерирует свой начальный «номер в последовательности», основное требование к которому — не повторяться в