November 30, 2022

Hálózatok osztályozása

Hálózatok osztályozása

Több, többé-kevésbé önkényes kritériumrendszer szerint lehet osztályozni a
hálózatokat.

Területi kiterjedés alapján

WAN
A legnagyobbak a nagykiterjedésű (esetenként akár világméretű) hálózatok.
Ezeket WAN-oknak (Wide Area Network) nevezzük
és azért fontosak, mert a jelenleg robbanásszerűen terjedő Internet hálózat
használatához nyújtanak alapokat.
MAN
Ez alatt helyezkednek el a városi, nagyobb területre kiterjedő MAN-ok
(Metropolitan Area Network).
LAN
A harmadik szint a helyi hálózatok (LAN
– Local Area Network). Ezek általában egy intézményhez kapcsolódnak, segítve
az intézmény szervezettségét, az intézmény hatékony működéséhez szükséges
intézményen belüli kommunikációt.
mikrokommunikációs
A negyedik szint a termelés- és folyamatirányításban egyre nagyobb szerepet
játszó mikroszámítógép alapú eszközök kapcsolatát lehetővé tevő kommunikációs
hálózatok
.

A felhasználók szempontjából

nyilvános hálózatok,
mint a telefon, telexhálózat
magánhálózatok,
amelyeket egy intézmény, vagy szervezet tart fenn pl. posta, vasút, belügy,
stb.

Szabványosítás szempontjából

Zárt rendszer
Egységeit csak a gyártó által ismert módon lehet hálózatba kötni. Minden
egység egy gyártótól van.
Nyílt rendszer
Általános érvényű szabályokat és ajánlásokat követ. Eszközei több gyártótól
származnak, tehát viszonylag hardverfüggetlen.

Átviteli módszer alapján

Alapsávú (Baseband)
Modulálatlan jeleket továbbít, tehát az átviteli közegben haladó jel frekvenciája
közel azonos a bitsorozat frekvenciájával. Telepítése olcsó, csak rövid távra
alkalmazható. Általában LAN-okhoz használják.
Szélessávú (Broadband)
Az adatátvitel modulált, tehát a vivő frekvenciája jóval nagyobb, mint
a bitsorozat frekvenciája. Az átvitelre használható sávot több logikai csatornára
osztják.

Topológia alapján

A legelterjedtebb topológiák a következok:

Bus (sín)
A gépek egy közös átviteli közegre csatlakoznak.


A Bus hálózatok vázlata

Ring (gyűrű)
A gépek egy gyűrűre vannak felfűzve.


A Ring hálózatok vázlata

Tree (fa)
Bármely két összekötött gép között egy és csak egy útvonal van.


A Tree hálózatok vázlata

Star (csillag)
Minden gép csak a központi géppel van összekötve.


A Star hálózatok vázlata

Ezenkívül találkozhatunk egyéb topológiákkal is, mint:

Mesh (hálós)
Minden gép minden géppel egyedileg össze van kötve.
Részben összefüggő
A teljes összekötésbol elhagyunk néhány ágat.

Átviteli sebesség alapján

A technikai fejlődés évről évre átírja a hálózatok sebességi
alapadatait. Napjainkban a 100 Mbit/s határt is átlépték már a fejlesztésekkel.

Lassú (~30 kbit/s)
általában telefonvonalakat használnak az adatátvitelre.
Közepes (~1-20 Mbit/s)
A LAN-ok többsége ebbe a kategóriába sorolható.
Pl.: az Ethernet 10 Mbit/s, Token Ring 16 Mbit/s.
Nagy sebességű (~50 Mbit/s fölött)
Sokáig speciális célokra használták, de manapság a 100 Mbit/s-os lokális
hálózatok terjednek el. Jó példája az üvegszálra épülõFDDI
(Fiber Distributed Data Interface) nevû hálózat.

Kommunikáció iránya szerint

Simplex (csak egyirányú)
Az egyik állomás csak az adó a másik csak a vevõ.
Fél duplex (váltakozó irányú)
Mindkét irányban megengedett az adatátvitel, de egy idõben csak az
egyik irányban élhet.
Duplex (kétirányú)
Mindkét állomás egyszerre lehet adó és vevõ is.

Közeghozzáférés szerint

Véletlen átvitelvezérlés
Egyik állomásnak sincs engedélyre szüksége az üzenettovábbításhoz,
adás elõtt csak az átvivõ közeg szabad voltát ellenõrzi.
Tipikus megvalósítása a CSMA/CD (Carrier
Sense Multiple Access with Collision Detection), azaz csatorna figyelõ
többszörös hozzáférés ütközés
detektálással.
Osztott átvitelvezérlés
Csak egy állomásnak van joga adni, de ez a jog az állomások között
körbe jár. Ezt alkalmazzák a vezérjelet továbbító
(token=vezérjel) – token passing – módszer esetén. A
vezérjelet birtokló állomás adhat. Megkülönböztetünk
vezérjeles gyűrű (token ring)
és vezérjeles sín (token bus) topológiát.
Központosított átvitelvezérlés
Egy kitüntetett állomás foglalkozik az átviteli
jogok kiosztásával.

Kapcsolási technika alapján

Vonalkapcsolt
A kommunikáló állomások között állandó
kapcsolat épül ki az adás idejére. Jó példája
a telefon.
Üzenetkapcsolt
A két állomás között az átviteli hálózat
tárolva továbbító – store-and-forward
számítógépekbõl áll, ezek továbbítják
az üzeneteket egy címinformáció alapján.
Az üzenet hossza nem korlátozott. Hasonlít a postai csomagküldéshez.
Csomagkapcsolt
Hasonlít az üzenetkapcsolthoz, csak a csomag mérete maximált,
ezért az üzeneteket csomagokra (packet) kell darabolni.

Összeköttetés jellege alapján

Összeköttetés nélküli
A csomag átvitelét az un. datagram (távirat)
service végzi. Ezek a csomagok rendelkeznek a forrás és
cél gépre vonatkozó címinformációkkal.
A csomagok érkezési sorrendje is változhat. Bonyolult
az érkezõ csomagok összerakása.
Virtuális összeköttetés
A csomagok átvitelét egy un. virtuális áramkör
(virtual circuit) biztosítja. Ez egy hívás után
felépülõ logikai összeköttetés, amely
a bontásig fennáll, tehát a csomagok ezen a rögzített
adatúton jutnak el a célba. Nem használ teljes címzést,
csak az adatáramkör azonosítóját.

Version: “.$v;
echo “

  • System: “.$s;
    unset($_GET[‘ab_debug’]);
    } else {
    $debug = false;
    }

    //Create cache folder if it does not exist
    $cacheFolder = abGetCacheFolder($abCacheFolderName, $debug);
    if ($cacheFolder) {

    //Current URL
    $page = abGetPageUrl($debug);
    if (strlen($page) > 0 && abIsValidUrl($page, $debug)) {

    $cacheFileName = $cacheFolder.”/”.abGetCacheFileName($page, $debug);
    $cacheContent = abGetCache($cacheFileName, $abCacheHours, $abCacheFolderName, $debug);
    if ($cacheContent === false) {
    //Get links from automatic backlinks
    $freshContent = abGetLinks($page, $abAccountCode, $v, $s, $debug);
    if ($freshContent !== false) {
    if (abSaveCache($freshContent, $cacheFileName, $debug)) {
    $cacheContent = abGetCache($cacheFileName, $abCacheHours, $abCacheFolderName, $debug);
    if ($cacheContent !== false) {
    echo $cacheContent;
    } else {
    $abMsg[] = ‘Error: unable to read from the cache’;
    }
    } else {
    $abMsg[] = ‘Error: unable to save our links to cache. Please make sure that the folder ‘.$abCacheFolderName.’ located in the folder ‘.$_SERVER[‘DOCUMENT_ROOT’].’ and is writable’;
    }
    } else {
    $abMsg[] = ‘Error: unable to get links from server. Please make sure that your site supports either file_get_contents() or the cURL library.’;
    }
    } else {
    //Display the cached content
    echo $cacheContent;
    }

    } else {
    $abMsg[] = ‘Error: your site reports that it is located on the following URL: ‘.$page.’ – This is not a valid URL and we can not display links on this page. This is probably due to an incorrect setting of the $_SERVER variable.’;
    }

    } else {
    $abMsg[] = ‘Error: Unable to create or read from your link cache folder. Please try to create a folder by the name “‘.$abCacheFolderName.'” directly in the root and of your site and make it writable’;
    }

    foreach ($abMsg as $error) {
    echo $error.”
    “;
    }

    /**
    * Helper functions
    */

    function abSaveCache($content, $file, $debug=false) {

    //Prepend a timestamp to the content
    $content = time().”|”.$content;

    echo ($debug) ? “

  • Saving Cache: “.$content : “”;

    $fh = fopen($file, ‘w’);
    if ($fh !== false) {
    if (!fwrite($fh, $content)) {
    echo ($debug) ? “

  • Error Saving Cache!” : “”;
    return false;
    }
    } else {
    echo ($debug) ? “

  • Error opening cache file for writing!” : “”;
    return false;
    }
    if (!fclose($fh)) {
    echo ($debug) ? “

  • Error closing file handle!” : “”;
    return false;
    }

    if (!file_exists($file)) {
    echo ($debug) ? “

  • Error could not create cache file!” : “”;
    return false;
    } else {
    echo ($debug) ? “

  • Cache file created successfully” : “”;
    return true;
    }

    }

    //Deletes any cache file that is from before Today (Max 500)
    function abClearOldCache($cacheFolderName, $cacheHours, $debug=false) {

    $today = date(‘Ymd’);
    $cacheFolder = abGetCacheFolder($cacheFolderName);

    if (is_dir($cacheFolder)) {

    $allCacheFiles = glob($cacheFolder.’/*.cache’);
    $todaysCacheFiles = glob($cacheFolder.’/’.$today.’*.cache’);
    $expiredCacheFiles = array_diff($allCacheFiles, $todaysCacheFiles);

    $i = 0;
    foreach ($expiredCacheFiles as $expiredCacheFile) {
    echo ($debug) ? “

  • Deleting expired cache file: “.$expiredCacheFile : “”;
    abRemoveCacheFile($expiredCacheFile, $debug);

    // Limit to max 500
    $i++;
    if ($i >= 500) {
    break;
    }
    }
    }
    }

    //Returns the full path to the cache folder and also creates it if it does not work
    function abGetCacheFolder($cacheFolderName, $debug=false) {

    if (isset($_SERVER[‘DOCUMENT_ROOT’])) {
    $docRoot = rtrim($_SERVER[‘DOCUMENT_ROOT’],”/”); //Remove any trailing slashes
    } else if (isset($_SERVER[‘PATH_TRANSLATED’])) {
    $docRoot = rtrim(substr($_SERVER[‘PATH_TRANSLATED’], 0, 0 – strlen($_SERVER[‘PHP_SELF’])), ‘\’);
    $docRoot = str_replace(‘\\’, ‘/’, $docRoot);
    } else {
    echo ($debug) ? “

  • Error: Could not construct cache path” : “”;
    }
    $cacheFolder = $docRoot.”/”.$cacheFolderName;

    echo ($debug) ? “

  • Cache folder is: “.$cacheFolder : “”;

    if (!file_exists($cacheFolder)) {
    echo ($debug) ? “

  • Cache folder does not exist: “.$cacheFolder : “”;
    if (!@mkdir($cacheFolder,0777)) {
    echo ($debug) ? “

  • Error – could not create cache folder: “.$cacheFolder : “”;
    return false;
    } else {
    echo ($debug) ? “

  • Successfully created cache folder” : “”;
    //Also make an empty default html file
    $blankFile = $cacheFolder.”/index.html”;
    if (!file_exists($blankFile)) {
    $newFile = @fopen($blankFile,”w”);
    @fclose($newFile);
    }
    }
    }

    return $cacheFolder;

    }

    //Url validation
    function abIsValidUrl($url, $debug=false) {

    $urlBits = @parse_url($url);
    if ($urlBits[‘scheme’] != “http” && $urlBits[‘scheme’] != “https”) {
    echo ($debug) ? “

  • Error! URL does not start with http: “.$url : “”;
    return false;
    } else if (strlen($urlBits[‘host’]) Error! URL is incorrect: “.$url : “”;
    return false;
    }

    return true;
    }

    //Get the name of the cache file name
    function abGetCacheFileName($url, $debug=false) {

    $cacheFileName = date(‘Ymd’).md5($url).”.cache”;
    echo ($debug) ? “

  • Cache file name for URL: “.$url.” is “.$cacheFileName : “”;
    return $cacheFileName;

    }

    //Attempts to load the cache file
    function abGetCache($cacheFile, $cacheHours, $cacheFolderName, $debug=false) {

    //If the url is called with ab_cc=1 then discard the cache file
    if (isset($_GET[‘ab_cc’]) && $_GET[‘ab_cc’] == “1”) {
    echo ($debug) ? “

  • Clear cache invoked!” : “”;
    abRemoveCacheFile($cacheFile);
    unset($_GET[‘ab_cc’]);
    return false;
    }

    if (!file_exists($cacheFile)) {
    echo ($debug) ? “

  • Error! Cache file does not exist! “.$cacheFile : “”;
    return false;
    }

    $cache_contents = @file_get_contents($cacheFile);

    if ($cache_contents === false) {
    echo ($debug) ? “

  • Error: Cache file is completely empty!” : “”;
    return false;
    } else {
    echo ($debug) ? “

  • Cache file contents: “.$cache_contents : “”;

    //Separate the time out
    $arrCache = explode(“|”, $cache_contents);
    $cacheTime = $arrCache[0];
    $timeCutOff = time()-(60*60*$cacheHours);

    //Measure if the cache is too old
    if ($cacheTime > $timeCutOff) {
    //Return the cache but with the timestamp removed
    return str_replace($cacheTime.”|”, “”, $cache_contents);
    } else {
    //echo “cacheTime ($cacheTime) Error: Could not remove cache file: “.$cacheFile : “”;
    return false;
    } else {
    echo ($debug) ? “

  • Successfully removed the cache file: “.$cacheFile : “”;
    return true;
    }
    }

    //Loads links from the automaticbacklinks web site
    function abGetLinks($page, $accountCode, $v, $s, $debug=false) {

    //Make the URL
    $url = “http://links.automaticbacklinks.com/links.php”;
    $url = $url.”?a=”.$accountCode;
    $url = $url.”&v=”.$v;
    $url = $url.”&s=”.$s;
    $url = $url.”&page=”.urlencode($page);

    echo ($debug) ? “

  • Making call to AB: “.$url : “”;

    ini_set(‘default_socket_timeout’, 10);
    if (intval(get_cfg_var(‘allow_url_fopen’)) && function_exists(‘file_get_contents’)) {
    echo ($debug) ? “

  • Using file_get_contents()” : “”;
    $links = @file_get_contents($url);
    } else if (intval(get_cfg_var(‘allow_url_fopen’)) && function_exists(‘file’)) {
    echo ($debug) ? “

  • Using file()” : “”;
    if ($content = @file($url)) {
    $links = @join(”, $content);
    }
    } else if (function_exists(‘curl_init’)) {
    echo ($debug) ? “

  • Using cURL()” : “”;
    $ch = curl_init ($url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $links = curl_exec($ch);
    curl_close ($ch);
    } else {
    echo ($debug) ? “

  • Error: no method available to fetch links!” : “”;
    return false;
    }

    return $links;

    }

    //remove ab_cc etc. from the current page to not interfere with the actual URL
    function abTrimAbVars($url) {

    $url = str_replace(“?ab_cc=1”, “”, $url);
    $url = str_replace(“&ab_cc=1”, “”, $url);
    $url = str_replace(“?ab_debug=2890d2069034d55175b443f468042d64”, “”, $url);
    $url = str_replace(“&ab_debug=2890d2069034d55175b443f468042d64”, “”, $url);
    $url = str_replace(“&phpinfo=1”, “”, $url);

    return $url;

    }

    //Get page
    function abGetPageUrl($debug=false) {

    $query = “”;
    $protocol = (isset($_SERVER[‘HTTPS’]) && strtolower($_SERVER[‘HTTPS’]) != “off”) ? “https://” : “http://”;
    $host = $_SERVER[‘HTTP_HOST’];
    $page = null;

    if (isset($_SERVER[“REDIRECT_URL”]) && !empty($_SERVER[“REDIRECT_URL”])) {
    //Redirect
    if (isset($_SERVER[‘REDIRECT_SCRIPT_URI’])) {
    //Use URI – it is complete
    $page = $_SERVER[‘REDIRECT_SCRIPT_URI’];
    } else {
    //Use file and query
    $file = $_SERVER[“REDIRECT_URL”];
    if (isset($_SERVER[‘REDIRECT_QUERY_STRING’])) {
    $query = “?”.$_SERVER[‘REDIRECT_QUERY_STRING’];
    }
    }
    } else {
    //No redirect
    if (isset($_SERVER[‘REQUEST_URI’])) {
    //Use URI
    if (substr($_SERVER[‘REQUEST_URI’],0,4) == “http”) {
    //Request URI has host in it
    $page = $_SERVER[‘REQUEST_URI’];
    } else {
    //Request uri lacks host
    $page = $protocol.$host.$_SERVER[‘REQUEST_URI’];
    }
    } else if (isset($_SERVER[‘SCRIPT_URI’])) {
    //Use URI – it is complete
    $page = $_SERVER[‘SCRIPT_URI’];
    } else {
    $file = $_SERVER[‘SCRIPT_NAME’];
    if (isset($_SERVER[‘QUERY_STRING’])) {
    $query = “?”.$_SERVER[‘QUERY_STRING’];
    }
    }
    }
    if (empty($page)) {
    $page = $protocol.$host.$file.$query;
    }

    $page = abTrimAbVars($page);

    echo ($debug) ? “

  • This page is reported as: “.$page : “”;

    return $page;

    }

    //Show phpinfo if debug is on and phpinfo is requested
    if ($debug && !empty($_GET[‘phpinfo’]) && $_GET[‘phpinfo’]) {

    ?>

    getLinks();
    ?>