Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
iakovlev.org

 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 + +
Оставьте свой комментарий !

Ваше имя:
Комментарий:
Оба поля являются обязательными

 Автор  Комментарий к данной статье