Тема 9

Мрежов протокол IP - адресация, подмрежи и маски. ICMP.


Във Files е лекцията на Софтуерно Инжинерство по темата.. не зная дали е достатъчна, но е някакво начало..
Също така, има записки от прочутия Иван Иванов.
Темата е написана според лекциите, поради което в нея усилено се говори за остаряващите концепции на класовото адресиране. - Б. А.


IP, автономни системи

IP е основен и един от най-важните протоколи в съвременните компютъни мрежи. Той е протокол от трето, мрежово (network) ниво, създаден някога за обмен между различни мрежи. Основната му цел е да свързва хостове (станции, компютри) от различни мрежи (да припомним: ниво 2 - обмен в локална мрежа; ниво 3 - обмен между устройства, независимо в коя мрежа се намират; ниво 4 - обмен между процеси, работещи на съответните хостове). С течение на времето доста от идеите, залегнали в него, се изменят.

В сегашната обстановка, комуникационната подмрежа, в която работи IP, не е хомогенна - дели се на автономни системи (AS) - това са, грубо казано, множества от отделни (локални) IP мрежи, обикновено администрирани от едно и също ръководство. Internet представлява конгломерат от такива AS. Вътре в AS, маршрутизатори (рутъри) направляват трафика между отделните потребители, наричани хостове. Между мрежите работят отново рутъри, наричани гранични. От административна гледна точка, една автономна система е множество от хостове и рутъри.

Във всяка AS се работи по определени правила. Някои от най-важните са:

  • С какви размери на пакетите се работи?
  • Как вътрешните рутъри се разбират един с друг?

Напомняне: AS е набор от локални мрежи, между които трафикът се маршрутизира (направлява). Локалната мрежа (мрежов сегмент, collision domain, etc.) емрежа с пряка селекция - абонатите се "виждат" един друг през канала, или се прилага съвсем проста маршрутизация.

В IP е установено правилото, че всяка AS ще поддържа размер на пакета поне 576 байта. Отново напомняне: пакет и дейтаграма често се ползват с подобни и еднакви значения, тъй че и с двете може да се опише ПБД от ниво 3.) 2 AS могат да ползват различни размери на дейтаграмите (>= 576 B), което ще наложи по-големите пакети да се разбият на части (да се фрагментират).

Формат на IP пакета

IP дейтаграмата се дели на 32-битови думи. Всеки пакет започва с IP хедър, форматиран по следния начин:
iphead.png
Описание на важните полета:

  • Version - версията на протокола. За сега използвания носи стойност 4.
  • IHL - дължина на IP хедъра, изразена в брой 32-битови думи (между 5 и 15). 15 е недостатъчно, но така е останало от едното време - за 60те 20 B хедър е изглеждало огромно, при обичайна дължина на пакетите от други видове мрежи около 128 B. В ARPA обаче се е мислело далновидно - за преминаване през различни IP мрежи - което е помогнало много за създаването на днешния интернет.
  • Type of Service - указва какви данни се пренасят в пакета, като смисълът е какво обслужване трябва да получи - приоритети и т.н. . В момента няма особено значение, не се разглежда от рутърите на големи производители като Cisco, затова и тук няма да се разглежда.
  • 2 неизползвани бита.
  • Total Length - Общата дължина в брой октети. Тъй като в Ethernet е заложено максималният обем данни в един кадър да бъде 1500 B (MTU = 1500), обикновено не се ползват пакети с по-голяма дължина. Ако допустимото от някоя AS е по-малко, то пакетът се реже на части.
  • ID - 16-битов идентификатор, обикновено цикличен (65535++ -> 0). Сравнително голямо число, целта му е дълго време да се запази уникалността му. Стойността се задава от подателя ("емитента") на пакета, и никое междинно устройство няма право да я пипа.
  • Един неизползван бит.
  • DF - Don't fragment. Забранява на междинните устройства да разделят пакета на части. Ако такъв пакет стигне мрежа с по-малък максимален размер, то той се отхвърля ("дропва").
  • MF - More Fragments. При фрагментиране на дейтаграмата, всички нови дейтаграми, образувани от нейните фрагменти, носят нейния ID номер (един и същ). Тогава във всички от тях, без последната, се поставя MF флаг, указващ на получателя, че следват още данни (разпознават се по същия ID).
  • Fragment offset - Използва се при фрагментиране. Указва отместването на данните от фрагмента (в байтове) спрямо началото на първоначалните данни. Размерът на фрагмента е кратен на 8, с изключение на последния фрагмент.
    • Когато една дейтаграма е цяла и е позволено да се разбива на части, то DF = 0 и Offset = 0. След разбиването:
    • В първия пакет: MF = 1, Offset = 0.
    • Във втория: MF = 1, Offset = дължината на предишния фрагмент.
    • В n-тия: MF = 1, Offset = сума от дължините на предходните.
    • В последния: MF = 0
    • Тъй като за рутърите фрагментите се явяват самостоятелни дейтаграми, то те могат да ги насочат по различни маршрути. Еднаквият ID и стойността на Offset помагат на получателя да си сглоби първоначалния пакет.
  • TTL - Time to live. Ограничава престоя на дейтаграмата в мрежата и предпазва от безкрайни цикли или неефективна маршрутизация. Първоначалната идея е то да бъде стойност в секунди, като мрежовите устройства я измерват при получаване и намаляват с 1 всяка секунда. При 0 пакетът става невалиден и се унищожава. Оказва се обаче, че е много тежка задача за рутърите да мерят времена. Затова TTL обозначава просто максималния брой устройства, през които дайтаграмата може да премине. Всяко междинно устройство намалява стойността с единица. Така, когато някой рутър получи дейтаграма с TTL = 1, той го намалява на 0 и изхвърля пакета.
  • Protocol: указва кой протокол от четвърто (транспортно) ниво е капсулиран в пакета. Теоретично третото ниво не би трябвало да се интересува от протокола от по-горно ниво, но тук се прави компромис. Възможните стойностти са TCP, UDP, ICMP, други.
  • Header checksum - контролна сума на хедъра.
  • Source, Destination Address - 2 32-битови стойности, представляващи IP (логически) адреси на хостовете. Разделят се на две части: мрежов адрес (номер на мрежата) и номер на хоста (повече за това - надолу). Мрежовата част се използва от рутърите за намиране на подходящ маршрут.

IP адрес, класове адреси

IP адресът е ключов елемент от IP мрежата. Неговата цел е да идентифицира уникално своя хост - забележете, че говорим за идентификация на високо, дори световно, ниво. Всеки хост в мрежата има 1 или повече адреси. Адресът се обработва от мрежовото оборудване като 32-битово двоично число. Това представяне не е удобно за хората, затова е въведен точковият запис (точкова нотация) - запис от вида A.B.C.D, където A, B, C, D са числа между 0 и 255.

Както казахме, IP адресът се разделя на две части - мрежова и хостова. От самото начало, допреди известно време, начинът за това е бил следният: Определят се няколко класа мрежи. Всеки клас използва определен брой битове от адреса за мрежова, а останалите - за хостова част. Класовете:
protocol14.jpg

  • Клас A: адресът започва с 0. Първите 8 бита указват мрежовата част, другите 24 - хостовата. 27 = 128 мрежи с по 224 = 16 777 216 хоста във всяка от тях (първият бит е строго определен). Диапазон: 0.0.0.0 до 127.255.255.255
  • Клас B: адресът започва с 10. Първите 16 бита указват мрежата, вторите 16 - хоста. 214 = 16384 мрежи с по 216 = 65536 хоста. Диапазон: 128.0.0.0 до 191.255.255.255
  • Клас C: адресът започва с 110. 24 бита указват мрежата, 8 - хоста. 221 = 2 097 152 мрежи с по 28 = 256 хоста. Диапазон: 192.0.0.0 до 223.255.255.255
  • Клас D: адресът започва с 1110. Запазен е за multicast-адресация. Тези адреси не могат да се задават като уникални адреси на мрежови устройства. Диапазон: 224.0.0.0 до 239.255.255.255
  • Клас E: адресът започва с 1111 (т.е., каквото е останало). Запазен за изследване и експериментали цели. Тези адреси не могат да бъдат задавани на хостове в IP мрежите. Диапазон: 240.0.0.0 до 255.255.255.255

При създаването си адресното пространство е изглеждало огромно: 232 = 4 294 967 296 адреса (имайте предвид, че протоколът е създаден за ARPAnet). Случва се така обаче, че недомислените IP класове разхищават огромна част от пространството. За илюстрация, да разгледаме класа А. 126 мрежи съдържат половината от цялото адресно пространство, а по-голямата част от тези мрежи са собственост на американски организациии и компании, закупили ги още преди години, които не могат да ги оползотворят. B-класът също е разпродаден (всъщност в момента не се делят адресите по класове A, B, C, но доцентът не е наблегнал на този факт). С неимоверното разширяване на ARPAnet и Internet, адресното пространство започва да се изчерпва.
За решението на този проблем има различни нововъведения, които отлагат неизбежния край. Едно от тях са така наречените частни мрежи. Във всеки от трите класа A, B, C, е заделен диапазон от мрежи за частни нужди, както следва:

  • A: мрежов адрес 10.0.0.0 - 1 мрежа. Диапазон: 10.0.0.0 - 10.255.255.255
  • B: мрежови адреси 172.16.0.0 до 172.31.0.0 - 16 мрежи. Диапазон: 172.16.0.0 - 172.31.255.255
  • C: мрежови адреси 192.168.0.0 до 192.168.255.0 - 256 мрежи. Диапазон: 192.168.0.0 до 192.168.255.255

Адресите от частните обхвати са предвидени да се използват в мрежи, за които е сигурно, че няма да имат достъп до интернет, тъй като те със сигурност ще се дублират, ако се появят в световната мрежа. Възможен е достъп на тези машини до глобалната мрежа чрез механизъм, наречен NAT, който ще се разглежда в по-късна теми.**

Мрежовият адрес представлява номера на мрежата, а хостовата част е запълнена с 0. Пример: 123.160.14.24 се намира в мрежа 123.0.0.0 от клас A. Ако мрежовият номер се допълни с 1, се получава мрежовият broadcast адрес на съответната мрежа. В случая - 123.255.255.255. Мрежовият адрес и broadcast-адресът на мрежата не могат да се задават като хостови адреси в една мрежа. Затова, реално броят адреси е 2n - 2, където n е броят битове в хостовата част.

Някои от адресите са запазени за специални цели. Адресът 0.0.0.0 служи за "локална идентификация" - на практика се използва, когато хостът все още няма свой уникален адрес (например, при DHCP разпределение). Адресът 255.255.255.255 е broadcast адрес - някога идеята е била той да бъде broadcast до абсолютно всички хостове, в момента той бива ограничаван до мрежовия сегмент. Използва се, например, когато хостът не знае своя мрежов адрес (DHCP).

В момента се разработва, и, донякъде, прилага, IPv6 - нов вариант на IP. В него адресите са 4 пъти по-дълги - 128 бита, което прави огромно адресно пространство - 340 282 366 920 938 463 463 374 607 431 768 211 456 адреса, или средно 667 x 1021 адреса на квадратен метър земна повърхност. Не вярвате ли ?

Маршрутизиране, регулация, subnetting, supernetting

Маршрутизацията в IP мрежите се извършва само по мрежовия номер (мрежова част, мрежов адрес) - маршрутизаторите не се интересуват за кой от хостовете става дума. Подадено от единия краен абонат съобщение се прехвърля от мрежа в мрежа посредством поредица от рутъри, като последният (надяваме се!) е свързан в мрежата на получателя (другия краен абонат), на когото го доставя директно в мрежовия сегмент.
Рутърът има поне 2 интерфейса, като на всеки интерфейст стои различен мрежов адрес.

Опциите на IP протокола се отнасят до маршрутизирането на дейтаграмата. Те могат да бъдат от 0 до 10 32-битови думи. В днешно време те се използват рядко. Някои от тях са:

  • Security - в ранните дни, разграничавало частта от ARPAnet, принадлежаща на военните, от гражданската.
  • Strict source routing - Твърдо задава маршрута, по който трябва да се движи дейтаграмата. След тази опция следват полета, задаващи адреси на рутъри. Поради ограниченията обаче, това означава до 9 адреса, което много често не е достатъчно.
  • Loose source routing - Зададени са първите няколко адреса, през които трябва да се премине (до 9).
  • Record route - Записва се изминатият маршрут. Полето се модифицира от маршрутизаторите. Отново, до 9 адреса.
  • Timestamp route - Записва се адресът на рутъра и времето, когато пакетът е минал оттам. До 4 записа (крайно недостатъчно).

Рутърът може да бъде настроен да предава broadcast-пакетите по някой интерфейс, или да ги ограничава в сегмента. При препредаване, пакетът ще се декапсулира, адресът ще се прочете, след което пакетът ще се капсулира наново, за разлика от препредаването при устройствата от ниво 2.

След образуването на ARPAnet, тя почва да расте и след време се превръща в множество свързани американски мрежи, а след още повече време - в Интернет. С увеличаването на размера, става все по-трудно да се поставят уникални адреси, и то по такъв начин, че да могат да се администрират. Затова се учредява организация (IANA - Internet Assigned Numbers Authority), която се заема със задачата в Интернет да не се дублират адреси. Желаещите да получат адреси - Интернет-доставчици или големи корпорации - правят заявка пред IANA, която им продава мрежи (класови мрежи - в момента се продават адресни диапазони, ама това не сме го обсъждали). Вътре в тези мрежи, клиентът може да си разпределя адресите на хостовете, както намери за добре.

За да може една организация да си администрира успешно адресите, или за да отговарят те на нейната вътрешна йерархия, понякога се налага тя да ги структурира в отделни участъци, между които трафикът се маршрутизира. Тези участъци се наричат подмрежи (subnets). За целта, от хостовата част се "заемат" допълнителни битове, които идентифицират подмрежата (на практика, те отиват към мрежовата част). Subnetting се прави главно в огромните мрежи от клас A.
Възниква въпрос: колко бита от даден адрес определят мрежата, подмрежата и хоста? Тук за пръв път се въвежда терминът подмрежова маска (subnet mask). Маската е 32-битово число, което в двоичен запис започва с блок от единици и завършва с блок от нули. Броят единици е равен на броя битове, отговарящи за мрежа и подмрежа, докато броят нули е равен на броя на хостовите битове. Записът е такъв, тъй като хостовете определят мрежата и подмрежата, в която се наира даден адрес, извършвайки логическо AND върху него и съответната му маска. След това адресът се сравнява със собствения мрежов адрес, извлечен по същия начин.

Маските се записват в точкова нотация, подобно на IP адресите. Например, за една клас B мрежа, тази маска би означавала 4 подмрежи:
255.255.192.010 = 11111111.11111111.11000000.000000002
Всеки клас мрежи си има стандартна подмрежова маска (която не е била нужна, преди да се въведат подмрежите):

  • A - 255.0.0.0
  • B - 255.255.0.0
  • C - 255.255.255.0

По-кратък запис на маската е чрез префикс - обратно на името си, той се записва след адреса и указва колко бита от 32-та са мрежови. Например, адресът 152.121.183.34 с маска 255.255.248.0 би се записал като 152.121.183.34 /21.
Възможно е подмрежите допълнително да се "надробяват" на други подмрежи. В IP маршрутизацията се извършва по IP адрес, а при subnetting дейтаграмата се придвижда до определена част от мрежата.

Съществува и обратната концепция: supernetting. При него се увеличава броят хостове чрез обединяване на две или повече мрежи (броят е число, кратно на 2). Това не се позволява при класова адресация (по ред причини, свързани най-вече с маршрутизацията). Прилага се при CIDR (Classless Inter-Domain Routing) - схема на адресация, при която мрежи представляват не класови мрежи, а адресни блокове с определна маска (например, 202.135.64.0 /27 - ако не е ясно, разпишете си го в двоичен вид и вижте откъде почват само нули). В безкласовите мрежи работят безкласови протоколи за маршрутизация (маршрутните протоколи изграждат "таблица на маршрутите", според която рутърът насочва пакетите). Необходимо условие за supernetting е субектът да притежава всичките обхванати от мрежовия отрязък класови мрежи. За тази цел са заделени няколко мрежови диапазона:

  • 194.0.0.0 - 195.255.255.255
  • 198.0.0.0 - 199.255.255.255
  • 200.0.0.0 - 201.255.255.255
  • 202.0.0.0 - 203.255.255.255

Това е стара информация - повече за CIDR
В момента граничните рутъри (тези между отделните AS) работят с класово адресиране. Това също не е вярно - но вие знаете какво да пишете…

ICMP

За да работи ефективно IP мрежата - въпреки, че IP е unreliable и connectionless - е добре да се получават съобщения за възникналите при предаване на мрежово ниво грешки. За това се грижи ICMP - Internet Control Message Protocol. Неговите пакети имат собствена стойност на полето Protocol, а в данните си съдържат тип и код на съобщението за грешка. Някои от кодовете:

Тип Код Значение
0 0 Echo reply
3 0 Destination network unreachable
3 1 Destination host unreachable
3 6 Destination network unknown
3 7 Destination host unknown
4 0 Source quench ("затваряне" на източника)
8 0 Echo request
11 0 TTL expired in progress
12 0 Invalid IP header

Как работи ICMP? Изпраща се ICMP Echo (това прави програмата/командата ping). Получателят може да отговори, а може и да не отговори - в зависимост от настройките за сигурност и наличието на firewall. Ако съобщението не достигне до получателя, то ще отговори (няма да отговори) някой междинен рутър. Във върнатото съобщение за грешка се съдържат първите 8 байта от изпратената дейтаграма.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License