Vazba Oblast - Node - Router - IP

Definice tabulek

subnets2

Tabulka ukazuje existujici podsite zachycene z pravidelneho sberu informaci o siti Klfree.
+-----------------+------------------+------+-----+---------+----------------+
| Field           | Type             | Null | Key | Default | Extra          |
+-----------------+------------------+------+-----+---------+----------------+
| id              | int(11)          |  Ne  | PRI |         | auto_increment |
| ip_v4           | varchar(32)      |  Ne  |     |         |                |
| bits            | int(11)          |  Ne  |     | 0       |                |
| ip_v4_num_first | int(10) unsigned |  Ne  |     | 0       |                |
| ip_v4_num_last  | int(10) unsigned |  Ne  |     | 0       |                |
| id_subnettype   | int(11)          |  Ne  |     | 0       |                |
| description     | varchar(128)     |  Ne  |     |         |                |
| status          | enum('A,'N')     |  Ano |     | 'A'     |                |
+-----------------+------------------+------+-----+---------+----------------+
  • id - jednoznačný identifikátor
  • ip_v4 - adresa sítě, v notaci a.b.c.d
  • bits - síťový prefix (číslo za /)
  • ip_v4_num_first - prvni IP patrici do subnetu, jako cislo
  • ip_v4_num_last - posledni IP patrici do subnetu, jako cislo
  • description - jméno sítě, řetězcový identifikátor (alfanumerické a _) (Obsahuje jméno routeru, jak se tvoří QUESTION? )
  • id_subnettype - QUESTION?
  • status - active/not-nactive: při strojovém update se podsíť pouze nastaví jako inactive místo smazání

Pozor, více podsítí by MOHLO mít stejné network ip (ackoliv je to pravdepodobne chyba). Proto je klicem network_ip/prefix.

IP se přepočítává na číselné vyjádření tak, že:

  • každý byte IP se bere jako jeho číselná hodnota
  • IP ve tvaru a.b.c.d se prevede na (((a << 8) + b) << 8 + c) << 8 + d
Číselná IP lze číselně porovnavat s hodnotami v ostatních tabulkách IS, pro zjištění příslušnosti do podsítě.

subnet_types

Tabulka ukazuje typy subnetů.
+-----------------+--------------------+------+-----+---------+----------------+
| Field           | Type               | Null | Key | Default | Extra          |
+-----------------+--------------------+------+-----+---------+----------------+
| id              | int(11)            |  Ne  | PRI |         | auto_increment |
| name            | varchar(32)        |  Ne  |     |         |                |
| type            | enum('PEER', 'LAN')|  Ne  |     | 'PEER'  |                |
| weight          | int(11)            |  Ne  |     | 0       |                |
+-----------------+--------------------+------+-----+---------+----------------+
  • id - jednoznačný identifikátor, propojení do jiných tabulek (subnets2)
  • name - Popis typu subnetu
  • type - PEER nebo LAN
  • weight - důležitost

subnet_routers

Popisuje přiřazení subnetu routerům. Jeden router může mít i více subnetů, jeden subnet může patřit více routerům (např. peer, link nebo backbone).
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id_subnet | int(6)      | Ano  |     | NULL    |       |
| id_router | int(6)      | Ano  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
  • id_router - klíč do tabulky "routers", identifikace routerů
  • id_subnet - klíč do tabulky "subnets2", identifikace subnetů

routers

Popisuje každý router v síti Klfree. Každý router patří právě k jednomu bodu sítě a má nějakou adresu.
+-----------------+-------------+------+-----+---------+---------------+
| Field           | Type        | Null | Key | Default | Extra         |
+-----------------+-------------+------+-----+---------+---------------+
| id              | int(11)unsig| Ano  | PRI |         | auto_increment|
| id_network_point| int(11)unsig| Ano  |     | 0       |               |
| id_address      | int(11)unsig| Ano  |     | 0       |               |
| name            | varchar(255)| Ano  |     |         |               |
| description     | text        | Ano  |     |         |               |
+-----------------+-------------+------+-----+---------+---------------+
  • id - jednoznačný identifikátor, propojení do jiných tabulek (routers_subnet, ...)
  • id_network_point - klíč do tabulky "network_points", identifikace bodu sítě
  • id_address - klíč do tabulky "addr_streets", identifikace ulice, přes kterou se dohledá celá adresa bodu sítě (u bodu sítě je stejná informace, některá asi bude zbytečná QUESTION?)
  • name - jméno routeru - musí být unikátní mezi routery i mezi členy
  • description - textový popis routeru (informace)

Použití tabulek

Do ktere podsite patri IP

select * from subnets2 where XXXX between ip_v4_num_first and ip_v4_num_last order by bits DESC limit 1;
  • nalezne nejvice specifickou podsit, ktera obsahuje dane IP

Urceni oblasti IP

Pozor, nefunguje pro peery, ktere mohou prochazet z bodu na bod (tam takovy navic dotaz postrada vyznam). Funguje pro LAN, uzivatele, ne-peer IPcka routeru (tzn. lan, gateway pro uzivatele, backbone).

select region from network_points as np, 
   routers as r 
   where r.id_network_point = np.id and r.id in (
      select id_router from subnets2 as na, subnet_routers as nr where
         na.id = nr.id_subnet and nr.status = 'A' and
         X between between na.ip_v4_num_first and na.ip_v4_num_last order by na.prefix descending limit 1
      );
Vilik1 spravnejsi verze
select region from network_points as np, 
   routers as r 
   where r.id_network_point = np.id and r.id = (
      select id_router from subnets2 as na, subnet_routers as nr where
         na.id = nr.id_subnet and
         174474307   between na.ip_v4_num_first and na.ip_v4_num_last order by na.bits desc
         LIMIT 1
   )

Prirazeni verejneho IP

select * from public_ip_addresses where system != 'Y' region = (       
   select region from network_points as np, routers as r
      where r.id_network_point = np.id and r.id in (
         select id_router from subnets2 as na, subnet_routers as nr 
            where na.id = nr.id_subnet and na.status = 'A' and 
            X between na.ip_v4_num_first and na.ip_v4_num_last order by na.bits desc )) 
order by ip_v4_numeric asc limit 1;
Vilikova verze z ISka ke skouknuti - tabulky v ISku neexistuji nebo je nevidim
    $sql="SELECT
                                                        PublicIpAddresses.id,
                                                        PublicIpAddresses.ip_v4
                                                FROM ".$this->db->GetTable('public_ip_addresses')." AS PublicIpAddresses
                                                LEFT JOIN ".$this->db->GetTable('ip_addresses')." AS IpAddresses
                                                        ON IpAddresses.id_public_ip=PublicIpAddresses.id
                                                WHERE
                                                        IpAddresses.id IS NULL
                                                        AND
                                                        PublicIpAddresses.system='N'
AND region in (
      select region from network_points as np, 
         routers as r 
         where r.id_network_point = np.id and r.id in (
            select id_router from subnets as na, subnet_routers as nr where
               (na.net_ip_v4 = nr.net_ip_v4 and na.prefix = nr.prefix) and
               X between na.ip_v4_num_first and na.ip_v4_num_last order by na.prefix descending limit 1
            )
      )
                                                ORDER BY
                                                        PublicIpAddresses.ip_v4_numeric
                                                LIMIT 1

-- SvataDedic - 22 Sep 2006

Topic revision: r15 - 2008-08-14 - 09:34:19 - VitHauptman
 
This site is powered by the TWiki collaboration platformCopyright &Š by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback