W. R. Stevens UNIX : Network Programming Networking APIs Глава 2
Глава 2
Собственно протокол IP делится на 2 разновидности :
1. IPv4 - использует 32-разрядную адресацию ,
является сервисом доставки пакетов для TCP,UDP,ICMP,IGMP .
2. ipV6 - 128-битная адресация ,
является сервисом доставки для пакетов TCP,UDP,ICMPv6 .
TCP - протокол для надежного 2-стороннего транспортного потока .
Сокеты являются потоковыми сокетами - STREAM SOCKET .
UDP - протокол для ненадежной связи .
Сокеты являются датаграммными сокетами - datagram sockets .
ICMP - протокол передачи управляющей информации об ошибках маршрутизаторов
и узлов . Как правило , используется для сетевого программного обеспечения ,
а не для пользовательских программ .
IGMP - протокол широковещательной передачи .
ARP - протокол , который ставит в соответствие аппаратному адресу адрес IP .
RARP - протокол , который ставит в соответствие адресу IP аппаратный адрес .
UDP : каждый сокет упаковывается в датаграмму . Каждая датаграмма имеет
конкретную длину и называется record .
TCP : отличается прежде всего тем , что устанавливается коннект между
клиентом и сервером .
ТСР обеспечивает управление потоком - flow control - когда невозможно
переполнение буфера .
ТСР - 2-сторонний протокол(full-duplex) : в любой момент времени приложение
может как отправлять , так и принимать данные .
3-этапное рукопожатие :
|
При установлении соединения ТСР события развиваются следующим образом :
1. Сервер запускает команды socket , bind , listen и готов к
пассивному открытию - passive open .
2. Клиент вызывает активное открытие - active open - c помощью connect .
На этом этапе отсылается сегмент SYN : в него входят заголовок IP ,
заголовок ТСР и никаких данных .
3. В ответ на это сервер отсылает свои SYN и ACK в виде единого сегмента .
4. Клиент должен отослать свой ACK .
Схема для открытия соединения :
1. SYN 2. SYN+ACK 3. ACK
Для разрыва требуется уже 4 сегмента :
1. Клиент(не обязательно) вызывает closesocket - активное закрытие (active close)
и отправляет сегмент FIN .
2. Сервер вызывает пассивное закрытие - passive close - и отправляет ACK .
3. Сервер посылает FIN - выполняется команда close .
4. Клиент отсылает ACK .
Схема для закрытия соединения :
1. FIN 2. ACK 3. FIN 4. ACK
При этом клиент либо сервер может находиться в одном из следующих состояний :
1. LISTEN - ожидание (с)
2. SYN_SENT - послан SYN на коннект (к)
3. SYN_RCVD - получил SYN и послал назад (с)
4. ESTABLISHED - послал ACK , подтвердил коннект (с) (к)
5. FIN_WAIT_1 - послал FIN для разрыва коннекта (к)
6. CLOSE_WAIT - получил FIN и отослал ACK (с)
7. FIN_WAIT_2 - получил ACK (к)
8. LAST_ACK - отослал FIN (с)
9. FIN_WAIT - отослал ACK (к)
10. CLOSED - получил ACK (с)
Диаграмма состояний TCP .
Определено 11 различных состояний . Например , если приложение в состоянии CLOSED
выполняет открытие , отправляется сегмент SYN , и новым состоянием становится SYN_SENT .
затем , если получен ACK , то отправляется ACK и состояние переходит в ESTABLISHED ,
в котором происходит бОльшая часть обмена данных.
2 стрелки , идущие от состояния ESTABLISHED ,относятся к разрыву соединения .
После вызова close() , происходит переход к состоянию FIN_WAIT.
Нормальные переходы клиента помечены обычной линией , сервера - штриховой .
На следующем рисунке представлен реальный обмен пакетами , происходящий с момента
соединения до его разрыва .
К этому рисунку надо сказать , что если запрос и ответ укладывались в один сегмент ,
то будет задействовано всего 8 сегментов . В случае UDP будет вообще всего 2 сегмента -
запрос и ответ .
Time_wait - время , по истечение которого сегмент пакета будет послан повторно в случае ,
если он не достиг адресата . В разных реализациях он равняется от нескольких секунд
до нескольких минут.
ТСР может использовать номера портов 1-1024 , только если имеет права
администратора .
Диаграмма распределения портов на диапазоны :
Socket pair - это комбинация :
( локальный ip + локальный порт ) плюс ( удаленный ip + удаленный порт )
ip + порт - такую комбинацию еще называют портом .
Параллельный сервер : ситуация , когда на сервере реализована многопоточность .
При подключении очередного клиента сервер порождает процесс , называемый
дочерним сервером . При этом сам сервер продолжает оставаться прослушиваемым
сокетом .
А дочерний сервер становится присоединенным сокетом и обслуживает клиента .
Размеры буфера и ограничения .
1. Максимальный размер датаграммы IPv4 - 64 кб .
У IPv6 может быть больше - зависит от канала .
2. MTU - maximum transmition unit - максимальная единица передачи .
Для Ethernet MTU=1500 байт .
Минимальная MTU для IPv4 - 68 байт .
Минимальная MTU для IPv6 - 576 байт .
3. Наименьшая MTU в пути называется транспортной MTU (path MTU).
MTU может быть разной в обоих направлениях , т.к. маршрутизация бывает
асимметричной .
4. Если размер датаграммы превышает MTU , то происходит ее фрагментация .
5. Если бит DF (Don't Fragment) установлен , то датаграмма не фрагментируется .
Обнаружение транспортной MTU (path MTU discovery) может быть произведено
с помощью DF .
6. Минимальный размер датаграммы (minimum reassembly buffer size) для IPv4 -
576 байт ,
для IPv6 - 1500 .
7. MSS - максимальный размер сегмента (maximum segment size)
Для IPv4 - это 1460 байт, для IPv6 - это 1440 байт , но может быть и до 64 кб .
Использование протоколов приложениями интернета .
Приложение IP ICMP UDP TCP
Ping +
Traceroute + +
DHCP +
Telnet +
FTP +
HTTP +
DNS + +
NFS + +
RPC + +
|
|