Последнее изменение файла: 2007.02.08
Скопировано с www.bog.pp.ru: 2023.02.05
Bog BOS: TCP/IP
ISO OSI (Open System Interconnect) Reference Model
Physical Layer - определяет физические характеристики носителя
Data Link Layer - обеспечивает надежную передачу данных по
физическому каналу
Network Layer - управляет соединениями через сеть для верхних уровней
Transport Layer - обеспечивает обнаружение и
исправление ошибок из конца в конец
Session Layer - управляет сессиями между приложениями
Presentation Layer - стандартизует представление данных для приложений
Application Layer - прикладные программы, использующие сеть
уровни стека протоколов TCP/IP (в скобках приводятся используемые термины)
Network Access Layer - программы доступа к физической сети (драйвера
устройств) (фрейм) - инкапсуляция датаграмм во фреймы
(например, RFC 894 - Ethernet) и отображение IP-адресов в
физические адреса (например, ARP).
Internet Layer - определяет датаграммы и
маршрутизацию данных (IP - RFC 791, RFC 1349 (ToS), RFC 2474 (Diffserv),
RFC 3168 (ECN), RFC 3260 (Diffserv); ICMP - RFC 792) (датаграмма), протокол
ненадежный и без установления соединения.
IP (заголовок: версия; ToS/DS/ECN; длина (до 64KB),
флаги (запрет фрагментации, признак последнего фрагмента),
смещение и идентификатор фрагмента;
TTL (при каждом шаге по маршруту уменьшается на 1; при достижении 0 пакет уничтожается);
транспортный протокол; контрольная сумма заголовка;
адреса отправителя и получателя; опции):
определение датаграмы
определение схемы адресации в Интернет (адрес - 32 бита)
движение данных между Network Access Layer и Host-to-Host Transport
Layer
маршрутизация датаграмм на удаленные хосты
фрагментирование и сборка датаграм
опции IP:
EOOL - End of Options List
NOP - No Operation
SEC - Security
LSR - Loose Source Route
TS - Time Stamp
E-SEC - Extended Security
CIPSO - Commercial Security
RR - Record Route
SID - Stream ID
SSR - Strict Source Route
ZSU - Experimental Measurement
MTUP - MTU Probe
MTUR - MTU Reply
FINN - Experimental Flow Control
EIP - Extended Internet Protocol
TR - Traceroute
ADDEXT - Address Extension
RTRALT - Router Alert
ICMP (Internet Control Message Protocol;
RFC 792, RFC 950, RFC 1108, RFC 1256, RFC 1393, RFC 1475, RFC 1812, RFC 2002),
заголовок (подробнее см. описание IP: версия; 0 в качестве ToS/DS/ECN;
флаги (запрет фрагментации, последний),
смещение и идентификатор фрагмента; TTL; транспортный протокол (всегда 1);
адреса отправителя (не всегда) и получателя; контрольная сумма заголовка;
контрольная сумма пакета; тип и подтип (code)):
Echo Reply (ответ на Echo request)
сообщение о невозможности доставить пакет
(содержит IP заголовок и первые 64 бита исходного пакета)
Network Unreachable
Host Unreachable
Protocol Unreachable (протокол udp, tcp и т.п.)
Port Unreachable
Fragmentation Needed and Don't Fragment was Set
Source Route Failed
Destination Network Unknown (нет маршрута)
Destination Host Unknown (нет маршрута)
Source Host Isolated (устарело)
Communication with Destination Network is Administratively Prohibited
Communication with Destination Host is Administratively Prohibited
Destination Network Unreachable for Type of Service
Destination Host Unreachable for Type of Service
Communication Administratively Prohibited
Host Precedence Violation
Precedence cutoff in effect
Source Quench (просьба замедлить передачу;
содержит IP заголовок и первые 64 бита исходного пакета)
Redirect (содержит адрес более подходящего шлюза и
IP заголовок и первые 64 бита исходного пакета)
Redirect Datagram for the Network
Redirect Datagram for the Host
Redirect Datagram for the Type of Service and Network
Redirect Datagram for the Type of Service and Host
Alternate Host Address
Echo request (проверка, а жив ли хост, ICMP Echo, ping;
пакет содержит уникальный код (Identifier) для различения нескольких
прикладных программ
и последовательный номер (Sequence number) для проверки дублирования ответа;
может содержать дополнительные данные, например, разведданные ;)
Router Advertisement
Normal router advertisement
Does not route common traffic
Router Selection
Time Exceeded (содержит IP заголовок и первые 64 бита исходного пакета)
Time to Live exceeded in Transit
Fragment Reassembly Time Exceeded
Parameter Problem (содержит IP заголовок и первые 64 бита исходного пакета)
IP header bad (содержит указатель на неправильную часть)
Missing a Required Option
IP Header Bad Length
Timestamp (устарело; пакет содержит уникальный код и последовательный номерж
милисекунды после полуночи на момент отправки)
Timestamp Reply (устарело; милисекунды после полуночи на момент отправки,
получения и отправки ответа)
Information Request (устарело)
Information Reply (устарело)
Address Mask Request
Address Mask Reply
Traceroute
Datagram Conversion Error
Host-to-Host Transport Layer - сервис доставки данных из конца в конец (TCP, UDP)
(сегмент, пакет)
TCP (RFC 793, RFC 1072, RFC 1146, RFC 1323, RFC 1644, RFC 1693, RFC 2018, RFC 2385):
установление соединения (инициатор посылает пакет с флагом SYN,
получатель отвечает пакетом с флагами SYN/ACK или SYN/RST; инициатор отвечает пакетом
с флагом ACK; при этом согласуются параметры моединения: SACK, ECN и пр.),
обеспечение надежности и правильного порядка, поток байт,
закрытие соединения (любая сторона посылает пакет с флагом FIN,
другая сторона отвечает пакетом
с флагами FIN/ACK, но может передавать остаток данных, затем она
посылает FIN и ждёт FIN/ACK), заголовок (номера портов отправителя и получателя - 16 бит;
соединение определяется по IP адресам отправителя и получателя и TCP портам;
номер пакета (Sequence Number, начальное значение выбирается случайным образом);
номер подтверждения (Acknowledgment Number, соответствует номеру полученного пакета);
размер окна (сколько отправитель может послать не ожидая подтверждения);
контрольная сумма заголовка; указатель на срочные данные;
опции:
End of Option List
No-Operation
Maximum Segment Size
WSOPT - Window Scale
SACK (Selective ACK) Permitted
SACK
Echo
Echo Reply
TSOPT - Time Stamp Option
Partial Order Connection Permitted
CC
CC.NEW
CC.ECHO
TCP Alternate Checksum Request
TCP Alternate Checksum Data
MD5 Signature Option
и флаги:
CWR - отправитель информирует получателя о замедлении пересылки
ECE - ECN Echo
URG - пакет содержит указатель на срочные данные
ACK - пакет является подтверждением на получение данных
PSH - требование доставить накопленные в промежуточных буферах данные
конечному получателю, не дожидаясь заполнения окна
RST - отказ устанавливать соединение или требование разорвать соединение или
выражение недоумения по поводу пакета вне соединения
SYN - требование начать соединение
FIN - требование или подтверждение завершения соединения
UDP (RFC 768): минимальная нагрузка, протокол передачи датаграмм без установления
соединения и обеспечения надежности передачи (контрольная сумма пакета всё же есть,
нет извещения об ошибке), номера портов отправителя и получателя - 16 бит
Application Layer - приложения и процессы,
использующие сеть (FTP, SMTP, telnet, ...) (сообщение, поток)
Каждый сетевой интерфейс должен иметь уникальный адрес (несколько сетевых
интерфейсов одного хоста могут иметь один адрес; один сетевой интерфейс может иметь
несколько адресов). IP адрес представляет собой натуральное число размером 4 байта. Обычно
записывается в виде десятичных чисел, представляющих значение каждого байта от
старшего к младшему, разделенных точками. Адрес делится на две части:
адрес сети и адрес внутри сети. Адрес сети является чисто логическим
(административным) понятием и не обязан иметь никакого отношения к
физической структуре сети (хотя для того, чтобы обеспечить
маршрутизацию и не сойти с ума, лучше, чтобы такое соответствие было).
В доисторические имена адрес делился на три части: сеть,
подсеть и адрес в подсети (с тех времен до нас дошли понятия сети класса A, B и C,
которые приходилось разбивать на подсети для лучшего использования адресного
пространства), но с времен принятия CIDRа (1992), поля сеть и подсеть слились.
Граница между сетевой частью адреса и локальной частью адреса
определяется сетевой маской (netmask). Маска записывается также как IP адрес
(4 десятичных числа, разделенных точкой) и имеет двоичные единицы в той части адреса,
которая относится к адресу сети. Модификации: старые системы иногда
требуют задания числа бит в адресе подсети, число бит в адресе сети
определяется классом сети (A, B, C); новые системы требуют задать число бит в адресе сети,
остальные биты представляют локальный адрес (все равно биты,
хранящие адрес сети должны идти подряд, так зачем хранить лишнюю информацию?).
Встречаются реализации, которые считают, что все маски в одной сети
имеют одинаковое значение (что неверно - у меня хосты на одном
интерфейсе иногда имеют разные маски ;).
Рекомендация по назначению сетевой маски с тем, чтобы в дальнейшем избежать
перенумерации сети, дается в RFC-1219 (суть в том, что биты под сетевую маску при
создании новой подсети захватываются слева, а биты под новые хосты -
справа; между ними находятся биты (равные нулю), которые можно отнести либо туда, либо сюда).
Специальные адреса (записывается в виде пары: адрес сети, адрес интерфейса в сети):
(0, 0) - данный узел данной сети;
(-1, -1) - broadcast на все узлы текущей физической сети;
(номер сети, -1) - broadcast на все узлы логической сети (в некоторых
реализациях задается отдельная битовая маска для broadcast);
(номер сети, 0) - адрес сети как единого целого;
(0, адрес интерфейса) - представляет интерфейс в текущей сети;
(127, любой адрес) - loopback
адреса вида "1110..." (224.0.0.0 - 239.255.255.255) - multicast (RFC 1112)
адреса вида "1111..." (240.0.0.0 - 255.255.255.254 ) - experimental
класс A
класс B
класс C
192.0.0 - 193.255.255 для межрегиональных организаций
194 - 195 для Европы (RIPE NCC)
196 - 197
198 - 199 для Северной Америки
200 - 201 для Центральной и Южной Америки
202 - 203 для Тихоокеанского региона
204 - 205
206 - 207
208.0.0.0 - 223.255.255.255 зарезервированы за IANA и IR
адреса, зарезервированные под локальное использование
10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255
Проблема оставшаяся с времен разделения сетевого адреса на
собственно номер сети и адрес подсети: не все могут обрабатывать адрес подсети равный нулю.
Например, в IOS (CISCO) необходимо использовать специальную команду: "ip subnet-zero".
номер протокола: /etc/protocols: 1 байт
(Internet-documents/iana/assignments/port-numbers.gz) номер
порта : /etc/services: 2 бaйта