Google Global Cache - Метод кодирования доменов кэширующих серверов Google Video - Youtube

Материал из Wiki - Iphoster - the best ever hosting and support. 2005 - 2026
Перейти к:навигация, поиск

Google Global Cache (GGC) — это распределённая система кэширующих серверов Google, размещаемая непосредственно в сетях интернет-провайдеров (ISP). GGC является ключевым компонентом CDN Google, обеспечивающим доставку видео с YouTube и другого контента с минимальной задержкой. Серверы GGC имеют особую систему доменных имён, основанную на криптографическом шифре подстановки.

В данной статье рассматриваются три связанные системы доменных имён, используемых Google: SN-домены (8-символьное кодирование), GGC-домены (с именем провайдера) и домены 1e100.net.

Обзор инфраструктуры Google CDN

Google использует распределённую сеть доставки контента (CDN), состоящую из нескольких уровней:

  • Собственные дата-центры Google — 13+ крупных центров обработки данных по всему миру (США, Европа, Азия, Южная Америка)
  • Точки присутствия (PoP) Google — серверы на границе сети, размещённые в ключевых точках обмена трафиком
  • Google Global Cache (GGC) — кэширующие серверы, устанавливаемые у интернет-провайдеров-партнёров

Каждый физический или виртуальный сервер имеет уникальный домен в одной из трёх систем именования: SN, GGC или 1e100.net.

SN-домены (Server Number domains)

SN-домены — это 8-символьные закодированные имена, используемые для кэширующих серверов YouTube. Формат:

r1---sn-[123][45][6][78].googlevideo.com

Где:

  • [123] — трёхсимвольный код города, полученный из IATA-кода аэропорта
  • [45] — первая часть номера группы серверов (Point of Presence)
  • [6] — идентификатор протокола: n/u для IPv6, m для IPv4
  • [78] — вторая часть номера группы серверов

Также встречается форма:

r?.sn-xxxxxxxx.googlevideo.com
r?---sn-xxxxxxxx.googlevideo.com
r?.xxx??s??.googlevideo.com
r?---xxx??s??.googlevideo.com

Каждый SN-домен имеет 20 экземпляров с префиксами от r1 до r20. Соответствующие IPv6-адреса имеют 8-й сегмент в диапазоне 0x6–0x19.

Кодирование города (IATA → SN)

Город кодируется через шифр подстановки (Substitution Cipher). Таблица получена поворотом алфавитно-цифровой матрицы на 90° против часовой стрелки.

Базовый алфавит: 1023456789abcdefghijklmnopqrstuvwxyz

Таблица подстановки для IATA-кодов:

| 6 d k r y |
| --------- |
| 5 c j q x |
| 4 b i p w |
| 3 a h o v |
| 2 9 g n u |
| 0 8 f m t |
| --------- |
|   7 e l s | z

Правила:

  • 25 символов в рамке представляют буквы a–y (слева направо, сверху вниз): 5 → a, t → y
  • Символ в левом нижнем углу — 0 (не 1)
  • Символ 1 соответствует букве z

Пример: код a5m декодируется в lax — Лос-Анджелес (LAX).

Кодирование номера группы серверов

Номер группы (Point of Presence) — это двузначное число от 00 до 39, кодируемое двухсимвольной комбинацией:

| 1 2 3 4 5 6
7 | 8 9 a b c d
e | f g h i j k
l | m n o p q r
s | t u v w x y
z | 0 1 2 3 4 5
6 | 7 8 9 a b c
d | e f g h i j
k | l m n o p q
r | s t u v w x
y | z

Первый столбец (символы 7, e, l, s, z, 6, d, k, r, y) представляет цифры 0–9.

Примеры: ek → 17, 7r → 08, 7e → 01, el → 12, s7 → 30.

Идентификатор протокола

  • n — IPv6, биты 49–64: 0 – 3ff
  • u — IPv6, биты 49–64: 400 – 7ff
  • m — IPv4, без IPv6

Примеры SN-доменов

  • a5mekn7r — LAX, группа 17, IPv6, группа 08. IPv6: 2607:f8b0:4007:a::/64, IPv4: 74.125.103.0/24
  • a5m7zu7r — LAX, группа 17, IPv6 (u), группа 08. IPv6: 2607:f8b0:4007:407::/64, IPv4: 74.125.215.0/24
  • a5mekm76 — LAX, группа 17, IPv4 (m), группа 06. Только IPv4: 208.117.242.0/24
  • nwj7kned — SJC (Сан-Хосе), группа 27, IPv6, группа 03
  • q4f7dnee — DFW (Даллас), группа 07, IPv6, группа 04
  • 4g57knls — FRA (Франкфурт), группа 00, IPv6, группа 01
  • ni57dn7e — PEK (Пекин), группа 01, IPv6, группа 00
  • oguesnsy — SIN (Сингапур), группа 06, IPv6, группа 16

GGC-домены

GGC-серверы устанавливаются непосредственно у интернет-провайдеров. Их домены содержат закодированное имя провайдера.

Паттерн GGC

r?---sn-[isp name]-[loc][x].googlevideo.com
  • [isp name] — закодированное имя провайдера (ISP name), длина варьируется; правила кодирования те же, что и для SN-доменов
  • [loc] — IATA-код города (3 буквы), закодированный по тем же правилам
  • [x] — номер группы серверов (1–2 символа)

Примеры GGC-доменов

gxo5uxg-jqbe         — renater-cdg1    (Renater, Париж)
gvopm-vu2e           — ronix-otp1      (Ronix, Отопени)
oju0-u2xl            — nctu-tpe2       (NCTU, Тайбэй)
uphxqvujvh-30al      — timedotcom-kul2 (Time dotCom, Куала-Лумпур)
8xgn5uxa-quhe        — versatel-dtm1   (Versatel, Дортмунд)
585pav-ch5e          — availo-bma1     (Availo, Бромма)
a8au-xfge            — lvlt-ewr1       (LVLT, Ньюарк)
a8au-a5me            — lvlt-lax1       (LVLT, Лос-Анджелес)
9nj-4g5e             — qsc-fra1        (QSC, Франкфурт)
oxc0a5-ixae          — nebula-hel1     (Nebula, Хельсинки)
cnoa-qxae            — bsnl-del1       (BSNL, Дели)
ipoxu-u2xs           — hinet-tpe3      (HiNet, Тайбэй)
xmjxajvh-jb3e        — excelcom-cgk1   (Excelcom, Джакарта)
pqx5jxaa0a5g-2o9l    — ideacellular-pnq2 (Idea Cellular, Пуна)
f5p5-hxae            — waia-mel1       (WAIA, Мельбурн)
ibj-i3bs             — hgc-hkg3        (HGC, Гонконг)
cp1oxu-jb3e          — biznet-cgk1     (Biznet, Джакарта)
ug5onuxaxjvh-v8ce    — transtelecom-ovb1 (Транстелеком, Новосибирск)

Домены 1e100.net

1e100.net — это каноническое доменное имя Google для своих серверов, введённое в октябре 2009 года. Название происходит от числа "googol" (1 × 10¹⁰⁰).

Формат 1 (IPv6)

[a-z]{3}[0-9]{2}s[0-9]{2}-in-x[0-9a-f]{2}.1e100.net

Пример: dfw06s16-in-x1f.1e100.net

  • dfw — IATA-код аэропорта Даллас-Форт-Уэрт
  • 06s16 — номер группы
  • x — hex-обозначение
  • 1f — номер сервера в группе (0x00–0x1f, 32 сервера)
  • IPv6 4-й сегмент: 800–80f (16 групп), 8-й сегмент: 1000–101f

Формат 2 (IPv4)

[a-z]{3}[0-9]{2}s[0-9]{2}-in-f[0-9]{1-2}.1e100.net

Пример: dfw06s16-in-f31.1e100.net

  • f — десятичное обозначение
  • номер сервера: 0–31 (32 сервера)

Формат 3 (сокращённый, Тайвань)

[a-z]{2}-in-x[0-9a-f]{2}.1e100.net

Пример: tf-in-x7b.1e100.net

  • t — Taipei (Тайбэй)
  • x — hex-обозначение
  • 7b — номер сервера (0x00–0xff, до 256 серверов)
  • IPv6 4-й сегмент: c00–c0f (16 групп)

Известные IP-пулы 1e100.net

2001:4860::/32   — США
2404:6800::/32   — Австралия (Азия)
2607:f8b0::/32   — США
2a00:1450::/29   — Ирландия (Европа)

Связь между системами

Один и тот же сервер может быть представлен во всех трёх системах именования:

# 1e100.net формат
lax17s08

# SN-домен (8-символьный)
a5mekn7r

# Компоненты:
lax     → a5m     (IATA → SN)
17      → ek      (группа, первая часть)
s       → n       (разделитель/протокол)
08      → 7r      (группа, вторая часть)

Известные соответствия городов (IATA → SN-префикс):

lax (Лос-Анджелес)     → a5m
sjc (Сан-Хосе)         → nwj
dfw (Даллас)           → q4f
atl (Атланта)          → ab5 / p5q
mia (Майами)           → hp5 / nx5
lga (Нью-Йорк)         → vgq
ord (Чикаго)           → tt1
sea (Сиэтл)            → 9gv
den (Денвер)           → 5ua
yyz (Торонто)          → qxo
fra (Франкфурт)        → 4g5
lhr (Лондон)           → 1gi
par (Париж)            → 25g
ber (Берлин)           → cxg
ams (Амстердам)        → h0j
bru (Брюссель)         → f5f
sin (Сингапур)         → ogu
kul (Куала-Лумпур)     → qxa
nrt (Токио)            → i3b
hkg (Гонконг)          → h55
maa (Ченнаи)           → 30a
del (Дели)             → npo
pek (Пекин)            → ni5
cgk (Джакарта)         → cp1 / poq
gru (Сан-Паулу)        → x1x
eze (Буэнос-Айрес)     → bgo
mrs (Марсель)          → ...

Исходный код конвертера

Полный код утилиты для преобразования между системами доступен в репозитории: [1](https://github.com/lennylxx/ipv6-hosts/blob/master/tools/conv.py)

#!/usr/bin/env python3

import sys
table = '1023456789abcdefghijklmnopqrstuvwxyz'

def iata2sn(iata):
    sn = ''
    for v in iata:
        if v in table:
            i = ((ord(v) - ord('a')) * 7 + 5) % 36
            sn += table[i]
        else:
            sn += v
    return sn

def sn2iata(sn):
    iata = ''
    for v in sn:
        if v in table:
            i = table.index(v)
            i = (5 - i % 7) * 5 + i // 7 + 10
            iata += table[i]
        else:
            iata += v
    return iata

def num2code(num):
    code = ''
    for v in num:
        if v in table:
            i = ((ord(v) - ord('0') + 1) * 7) % 36
            code += table[i]
        else:
            code += v
    return code

def code2num(code):
    num = ''
    for v in code:
        if v in table:
            i = table.index(v)
            i = i // 7 + i % 7 - 1
            num += str(i)
        else:
            num += v
    return num

def main():
    if len(sys.argv) != 3:
        print('usage:\\tconv -i iata\\n\\tconv -s sn\\n\\tconv -p isp\\n\\tconv -g ggc')
        sys.exit(1)
    input = sys.argv[2]
    ret = ''
    if sys.argv[1] == '-i':
        ret += iata2sn(input[0:3])
        ret += num2code(input[3:5])
        if len(input) > 3:
            ret += 'n'
            ret += num2code(input[6:8])
    elif sys.argv[1] == '-s':
        ret += sn2iata(input[0:3])
        ret += code2num(input[3:5])
        if len(input) > 3:
            ret += 's'
            ret += code2num(input[6:8])
    elif sys.argv[1] == '-p':
        lst = input.split('-')
        ret += iata2sn(lst[0])
        if len(lst) == 2:
            ret += '-'
            ret += iata2sn(lst[1][0:3])
            ret += num2code(lst[1][3:])
    elif sys.argv[1] == '-g':
        lst = input.split('-')
        ret += sn2iata(lst[0])
        if len(lst) == 2:
            ret += '-'
            ret += sn2iata(lst[1][0:3])
            ret += code2num(lst[1][3:])
    else:
        print('Unknown option.')
        sys.exit(1)
    print(ret)
    sys.exit(0)

if __name__ == '__main__':
    main()

Примеры использования

# IATA → SN: lax17s08 → a5mekn7r
python3 conv.py -i lax17s08

# SN → IATA: a5mekn7r → lax17s08
python3 conv.py -s a5mekn7r

# ISP → SN: lax-sfo38 → a5m-6zn41
python3conv.py -p lax-sfo38

# GGC → IATA: a5m-6zn41 → lax-sfo38
python3 conv.py -g a5m-6zn41

Математическая основа шифра

Кодирование основано на линейном конгруэнтном преобразовании 36-ричного алфавита:

  • Для IATA: i = ( (ord(v) - ord('a')) × 7 + 5 ) mod 36
  • Для чисел: i = ( (ord(v) - ord('0') + 1) × 7 ) mod 36

Обратное преобразование восстанавливает исходное значение через обращение формулы по модулю 36. Такая схема обеспечивает взаимно-однозначное отображение 26 букв (a–z) и 10 цифр (0–9) на 36-символьный алфавит 1023456789abcdefghijklmnopqrstuvwxyz.

Практическое применение

Знание системы кодирования позволяет:

  • Определять географическое расположение сервера по его доменному имени
  • Сопоставлять IPv4/IPv6-адреса с конкретными серверами и их местоположением
  • Группировать серверы по точкам присутствия (PoP)
  • Идентифицировать ISP, на сетях которых установлены GGC-серверы
  • Понимать архитектуру глобальной инфраструктуры Google CDN

Ссылки

×
Реклама
ИКС