본문으로 건너뛰기
최종 수정: 에

IP 타입으로 형 변환

IP 타입은 IPv4 및 IPv6 타입을 포함하며, IP 주소를 저장하고 처리하는 데 사용됩니다. IPv4는 uint32로 저장되고, IPv6는 uint128로 저장됩니다.

IPv4로 형 변환​

String에서 변환​

엄격 모드​

BNF 정의​
<ipv4> ::= <whitespace>* <octet> "." <octet> "." <octet> "." <octet> <whitespace>*

<octet> ::= <digit> | <digit><digit> | <digit><digit><digit>

<digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"

<whitespace> ::= " " | "\t" | "\n" | "\r" | "\f" | "\v"
규칙 설명​

IPv4 주소는 점으로 구분된 4개의 숫자 구간으로 구성됩니다. 형식은 number.number.number.number이며, 예를 들면 192.168.1.1입니다. 각 구간은 0에서 255 사이여야 합니다. 숫자 앞에 영을 붙일 수 있습니다. 주소 앞뒤에는 공백 문자(스페이스, 탭, 줄바꿈 등)를 개수 제한 없이 넣을 수 있습니다.

형식에 맞지 않으면 오류가 발생합니다.

예제​
입력 문자열파싱 결과설명
"192.168.1.1"성공표준 형식의 유효한 주소
"0.0.0.0"성공최솟값 경계
"255.255.255.255"성공최댓값 경계
"10.20.30.40"성공일반적인 주소
" 192.168.1.1 "성공앞뒤에 공백을 넣을 수 있음
"192.168.01.1"성공숫자 앞에 영을 붙일 수 있음 (01 = 1)
"1.2.3"오류구간이 3개뿐임 (4개여야 함)
"1.2.3.4.5"오류구간이 5개임 (4개여야 함)
"256.0.0.1"오류첫 번째 구간 > 255 (256은 범위를 벗어남)
"1.300.2.3"오류두 번째 구간 > 255
"1.2.3."오류네 번째 구간이 누락됨
".1.2.3"오류첫 번째 구간이 누락됨
"1..2.3"오류두 번째 구간이 누락됨
"a.b.c.d"오류숫자가 아닌 문자
"1.2.+3.4"오류부호 +는 허용되지 않음

비엄격 모드​

BNF 정의​
<ipv4> ::= <whitespace>* <octet> "." <octet> "." <octet> "." <octet> <whitespace>*

<octet> ::= <digit> | <digit><digit> | <digit><digit><digit>

<digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"

<whitespace> ::= " " | "\t" | "\n" | "\r" | "\f" | "\v"
규칙 설명​

IPv4 주소는 점으로 구분된 4개의 숫자 구간으로 구성됩니다. 형식은 number.number.number.number이며, 예를 들면 192.168.1.1입니다. 각 구간은 0에서 255 사이여야 합니다. 숫자 앞에 영을 붙일 수 있습니다. 주소 앞뒤에는 공백 문자(스페이스, 탭, 줄바꿈 등)를 개수 제한 없이 넣을 수 있습니다.

형식에 맞지 않으면 null을 반환합니다.

예제​
입력 문자열파싱 결과설명
"192.168.1.1"성공표준 형식의 유효한 주소
"0.0.0.0"성공최솟값 경계
"255.255.255.255"성공최댓값 경계
"10.20.30.40"성공일반적인 주소
" 192.168.1.1 "성공앞뒤에 공백을 넣을 수 있음
"192.168.01.1"성공숫자 앞에 영을 붙일 수 있음 (01 = 1)
"1.2.3"null구간이 3개뿐임 (4개여야 함)
"1.2.3.4.5"null구간이 5개임 (4개여야 함)
"256.0.0.1"null첫 번째 구간 > 255 (256은 범위를 벗어남)
"1.300.2.3"null두 번째 구간 > 255
"1.2.3."null네 번째 구간이 누락됨
".1.2.3"null첫 번째 구간이 누락됨
"1..2.3"null두 번째 구간이 누락됨
"a.b.c.d"null숫자가 아닌 문자
"1.2.+3.4"null부호 +는 허용되지 않음

IPv6로 형 변환​

String에서 변환​

동작 변경

4.0 이전 버전의 Doris는 IPv6 주소 형식에 대한 제약이 더 느슨했습니다. 예를 들면 다음과 같습니다.

  • 여러 개의 콜론이 연속으로 나오는 형식을 허용(예: '1:1:::1')
  • 실제로 생략되는 부분이 없어도 이중 콜론을 허용(예: '1:1:1::1:1:1:1:1')

4.0 버전부터는 이 두 가지 비표준 형식에 대해 엄격 모드에서는 오류가 발생하고, 비엄격 모드에서는 null을 반환합니다.

엄격 모드​

BNF 정의​
<ipv6> ::= <whitespace>* <ipv6-standard> <whitespace>*
| <whitespace>* <ipv6-compressed> <whitespace>*
| <whitespace>* <ipv6-ipv4-mapped> <whitespace>*

<ipv6-standard> ::= <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16>

<h16> ::= <hexdigit>{1,4}

<hexdigit> ::= <digit> | "a" | "b" | "c" | "d" | "e" | "f" | "A" | "B" | "C" | "D" | "E" | "F"

<digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"

<whitespace> ::= " " | "\t" | "\n" | "\r" | "\f" | "\v"
규칙 설명​
  1. 표준 형식: 콜론으로 구분된 8개의 십육진수 그룹으로 구성되며, 각 그룹은 십육진수 1~4자리입니다. 예: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
  2. 압축 형식:
  • 이중 콜론(::)으로 영으로만 이루어진 연속된 그룹을 하나 이상 나타낼 수 있습니다.
  • 이중 콜론(::)은 전체 주소에서 한 번만 사용할 수 있습니다.
  • ::만으로도 유효한 주소이며, 모두 영인 주소를 나타냅니다.
  • 1:1:1::1:1:1:1:1은 ::가 연속된 영을 나타내지 않으므로 유효하지 않습니다.
  • 다음 주소는 모두 유효하며 동일한 주소를 나타냅니다.
    • 2001:0db8:0000:0000:0000:0000:1428:57ab
    • 2001:0db8:0000:0000:0000::1428:57ab
    • 2001:0db8:0:0:0:0:1428:57ab
    • 2001:0db8:0::0:1428:57ab
    • 2001:0db8::1428:57ab
  1. IPv4 매핑 주소:
  • IPv6 주소의 마지막 32비트(마지막 두 그룹)에 IPv4의 점으로 구분된 십진수 형식을 사용할 수 있습니다.
  • 이 형식은 일반적으로 IPv4 주소를 IPv6에 매핑하여 나타내는 데 사용됩니다.
  • 예: ::ffff:192.168.89.9는 ::ffff:c0a8:5909와 동일합니다.
  1. 주소 앞뒤에는 공백 문자(스페이스, 탭, 줄바꿈 등)를 개수 제한 없이 넣을 수 있습니다.
  2. 십육진수에 쓰이는 영문자는 대문자(A-F) 또는 소문자(a-f)를 사용할 수 있습니다.
  3. IPv4 부분은 IPv4 규칙을 따라야 합니다. 각 구간은 0에서 255 사이여야 합니다.
  4. 주소 형식이 위 규칙에 맞지 않으면 오류가 발생합니다.
예제​
입력 문자열파싱 결과설명
2001:db8:85a3:0000:0000:8a2e:0370:7334성공표준 형식의 유효한 주소
::성공모두 영인 주소
2001:db8::성공압축 형식 사용
::ffff:192.168.1.1성공IPv4 매핑 주소
2001:db8::1성공앞뒤에 공백을 넣을 수 있음
2001:db8::1::2오류이중 콜론(::)이 두 번 나타남
2001:db8:85a3:0000:0000:8a2e:0370:7334:1234오류그룹이 8개를 초과함
2001:db8:85a3:0000:8a2e:0370오류그룹이 6개뿐임 (8개이거나 압축 형식을 사용해야 함)
2001:db8:85g3:0000:0000:8a2e:0370:7334오류유효하지 않은 십육진수 문자 'g'가 포함됨
2001:db8::ffff:192.168.1.260오류IPv4 부분이 범위를 벗어남 (260 > 255)
2001:db8::ffff:192.168..1오류IPv4 부분의 형식 오류 (구간 누락)
2001:0db8:85a3:::8a2e:0370:7334오류콜론 세 개가 연속으로 나타남
20001:db8::1오류첫 번째 그룹의 십육진수 자릿수가 4자리를 초과함

비엄격 모드​

BNF 정의​
<ipv6> ::= <whitespace>* <ipv6-standard> <whitespace>*
| <whitespace>* <ipv6-compressed> <whitespace>*
| <whitespace>* <ipv6-ipv4-mapped> <whitespace>*

<ipv6-standard> ::= <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16>

<h16> ::= <hexdigit>{1,4}

<hexdigit> ::= <digit> | "a" | "b" | "c" | "d" | "e" | "f" | "A" | "B" | "C" | "D" | "E" | "F"

<digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"

<whitespace> ::= " " | "\t" | "\n" | "\r" | "\f" | "\v"
규칙 설명​
  1. 표준 형식: 콜론으로 구분된 8개의 십육진수 그룹으로 구성되며, 각 그룹은 십육진수 1~4자리입니다. 예: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
  2. 압축 형식:
  • 이중 콜론(::)으로 영으로만 이루어진 연속된 그룹을 하나 이상 나타낼 수 있습니다.
  • 이중 콜론(::)은 전체 주소에서 한 번만 사용할 수 있습니다.
  • ::만으로도 유효한 주소이며, 모두 영인 주소를 나타냅니다.
  • 1:1:1::1:1:1:1:1은 ::가 연속된 영을 나타내지 않으므로 유효하지 않습니다.
  • 다음 주소는 모두 유효하며 동일한 주소를 나타냅니다.
    • 2001:0db8:0000:0000:0000:0000:1428:57ab
    • 2001:0db8:0000:0000:0000::1428:57ab
    • 2001:0db8:0:0:0:0:1428:57ab
    • 2001:0db8:0::0:1428:57ab
    • 2001:0db8::1428:57ab
  1. IPv4 매핑 주소:
  • IPv6 주소의 마지막 32비트(마지막 두 그룹)에 IPv4의 점으로 구분된 십진수 형식을 사용할 수 있습니다.
  • 이 형식은 일반적으로 IPv4 주소를 IPv6에 매핑하여 나타내는 데 사용됩니다.
  • 예: ::ffff:192.168.89.9는 ::ffff:c0a8:5909와 동일합니다.
  1. 주소 앞뒤에는 공백 문자(스페이스, 탭, 줄바꿈 등)를 개수 제한 없이 넣을 수 있습니다.
  2. 십육진수에 쓰이는 영문자는 대문자(A-F) 또는 소문자(a-f)를 사용할 수 있습니다.
  3. IPv4 부분은 IPv4 규칙을 따라야 합니다. 각 구간은 0에서 255 사이여야 합니다.
  4. 주소 형식이 위 규칙에 맞지 않으면 null을 반환합니다.
예제​
입력 문자열파싱 결과설명
2001:db8:85a3:0000:0000:8a2e:0370:7334성공표준 형식의 유효한 주소
::성공모두 영인 주소
2001:db8::성공압축 형식 사용
::ffff:192.168.1.1성공IPv4 매핑 주소
2001:db8::1성공앞뒤에 공백을 넣을 수 있음
2001:db8::1::2null이중 콜론(::)이 두 번 나타남
2001:db8:85a3:0000:0000:8a2e:0370:7334:1234null그룹이 8개를 초과함
2001:db8:85a3:0000:8a2e:0370null그룹이 6개뿐임 (8개이거나 압축 형식을 사용해야 함)
2001:db8:85g3:0000:0000:8a2e:0370:7334null유효하지 않은 십육진수 문자 'g'가 포함됨
2001:db8::ffff:192.168.1.260nullIPv4 부분이 범위를 벗어남 (260 > 255)
2001:db8::ffff:192.168..1nullIPv4 부분의 형식 오류 (구간 누락)
2001:0db8:85a3:::8a2e:0370:7334null콜론 세 개가 연속으로 나타남
20001:db8::1null첫 번째 그룹의 십육진수 자릿수가 4자리를 초과함

IPv4에서 변환​

모든 IPv4 주소는 IPv6로 변환할 수 있습니다. 변환은 항상 성공하며, 엄격 모드와 비엄격 모드에서 동일하게 동작합니다.

입력 IPv4변환된 IPv6
192.168.0.0::ffff:192.168.0.0
0.0.0.0::ffff:0.0.0.0