Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
 iakovlev.org 
 Books
  Краткое описание
 Linux
 W. R. Стивенс TCP 
 W. R. Стивенс IPC 
 A.Rubini-J.Corbet 
 K. Bauer 
 Gary V. Vaughan 
 Д Вилер 
 В. Сталлинг 
 Pramode C.E. 
 Steve Pate 
 William Gropp 
 K.A.Robbins 
 С Бекман 
 Р Стивенс 
 Ethereal 
 Cluster 
 Languages
 C
 Perl
 M.Pilgrim 
 А.Фролов 
 Mendel Cooper 
 М Перри 
 Kernel
 C.S. Rodriguez 
 Robert Love 
 Daniel Bovet 
 Д Джеф 
 Максвелл 
 G. Kroah-Hartman 
 B. Hansen 
NEWS
Последние статьи :
  Тренажёр 16.01   
  Эльбрус 05.12   
  Алгоритмы 12.04   
  Rust 07.11   
  Go 25.12   
  EXT4 10.11   
  FS benchmark 15.09   
  Сетунь 23.07   
  Trees 25.06   
  Apache 03.02   
 
TOP 20
 Linux Kernel 2.6...5164 
 Trees...935 
 Максвелл 3...861 
 Go Web ...815 
 William Gropp...796 
 Ethreal 3...779 
 Ethreal 4...766 
 Gary V.Vaughan-> Libtool...765 
 Rodriguez 6...756 
 Steve Pate 1...749 
 Ext4 FS...748 
 Clickhouse...748 
 Ethreal 1...736 
 Secure Programming for Li...721 
 C++ Patterns 3...712 
 Ulrich Drepper...693 
 Assembler...687 
 DevFS...655 
 Стивенс 9...644 
 MySQL & PosgreSQL...622 
 
  01.01.2024 : 3621733 посещений 

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

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

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