Jak odróżnić hosta i port w adresie IPv6?

87

Adresy URL zawsze mają ten format:

<protocol>://<host>[:<port>]/[<path>][#<hash>]

Problem polega na tym, że IPv6 używa dwukropków, podobnie jak separator portu i hosta, np .:

2001:db8:1f70::999:de8:7648:6e8

Ale co, jeśli jest to host i chcę się z nim połączyć za pomocą protokołu HTTP na porcie 100?

http://2001:db8:1f70::999:de8:7648:6e8:100/

Problemem jest ostatni dwukropek. Ponieważ zero jest pomijane w podwójnych dwukropkach (między 1f70 a 999), nie wiadomo, czy „: 100” należy do adresu IP lub numeru portu. Skąd możemy to wiedzieć?

po prawej stronie
źródło

Odpowiedzi:

118

W takim przypadku należy zapisać kod IP IPv6 w nawiasach kwadratowych:

http://[2001:db8:1f70::999:de8:7648:6e8]:100/

To jest RFC 3986 , sekcja 3.2.2: Host

Host identyfikowany przez adres dosłowny protokołu internetowego, wersja 6 [RFC3513] lub nowszy, wyróżnia się tym, że literał IP zawiera się w nawiasach kwadratowych („[” i „]”). Jest to jedyne miejsce, w którym dozwolone są znaki nawiasów kwadratowych w składni URI. W oczekiwaniu na przyszłe, jeszcze nie zdefiniowane formaty dosłownych adresów IP, implementacja może użyć opcjonalnej flagi wersji, aby wyraźnie wskazać taki format, zamiast polegać na określeniu heurystycznym.

sysadmin1138
źródło
38
Warto zauważyć, że nawiasy klamrowe nie są opcjonalne. Jest to jedyny jednoznaczny mechanizm, za pomocą którego przeglądarka może zidentyfikować numeryczny adres IPv6.
tylerl
Czy port nie powinien znajdować się w nawiasach?
jayarjo,
2
@jayarjo Nie, ponieważ nawiasy klamrowe służą do zapewnienia jednoznaczności między adresem IP zawierającym dwukropki a portem oddzielonym od adresu IP dwukropkiem.
sysadmin1138