클라이언트 IP 주소의 최대 길이
중복 가능성:
IPv6 주소의 텍스트 표현 최대 길이?
클라이언트 IP 주소를 저장하는 데이터베이스 열의 최대 크기를 선택하십시오.현재 16으로 설정되어 있습니다만, IPv6 등의 IP 주소보다 긴 IP 주소를 얻을 수 있을까요?
일반적인 39 문자 IPv6 구조에는 주의가 필요합니다.IPv4 매핑 IPv6 주소의 경우, 문자열은 39 문자보다 길 수 있습니다.예를 들어 다음과 같습니다.
IPv6(39 문자):
ABCD:ABCD:ABCD:ABCD:ABCD:ABCD:ABCD:ABCD
IPv4 매핑 IPv6(45 문자):
ABCD:ABCD:ABCD:ABCD:ABCD:ABCD:192.168.158.190
주의:하는 것)에는할 수 의 그룹을 하고, 「」: 「」」(IPv4 「」)로되어 있습니다)..
문자)의 최대값은 다음과 같습니다.DDD.DDD.DDD.DDD
를 참조해 주세요.
따라서, IPv6 문자열의 올바른 최대 길이는 45 입니다.
이것은, 실제로 제가 수강한 IPv6 트레이닝의 퀴즈 문제였습니다.(우리 모두 39개!)
IPv4 의 경우, IP 주소의 4 개의 원시 바이트를 보존할 수 있습니다(IP 주소의 기간간의 각 숫자는 0 ~255 바이트입니다).하지만 DB를 드나들거나 드나드는 것을 번역해야 하기 때문에 복잡합니다.
IPv6 주비128 ((( ( IPv4 주32 비비비비32 비 ip ip )됩니다. 즉, 콜론은 4자리 16자리 16자리입니다.2001:0db8:85a3:0000:0000:8a2e:0370:7334
. 하려면 , 39 가 적당합니다 39 문자는, IPv6 주소를 이 형식으로 격납하는 경우에 적합합니다.
편집: 단, 주의 사항이 있습니다.IPv4 매핑된 IPv6 주소에 대한 자세한 내용은 @Deepak의 답변을 참조하십시오.(IPv6 문자열의 올바른 최대 길이는 45 문자입니다).
IPV6 를 표준 표기법으로 처리하는 경우는, 4 자리수의 16 진수로 이루어진 8 개의 그룹이 있습니다.
2001:0dc5:72a3:0000:0000:802e:3370:73E4
32자리 16진수 + 7 구분 기호 = 39 문자
주의: IPV6 주소로 매핑된IPV4 주소도 유지하려면 @Deepak에서 권장하는 대로 45자를 사용하십시오.
세 가지 방법을 모두 시도해 본 사람으로부터...varchar(39)만 사용
효율성이 약간 떨어지는 스토리지는 삽입/업데이트 시 변환하고 포맷해야 하는 이점보다 훨씬 더 중요합니다.
IPv6 Wikipedia 기사에서 설명한 바와 같이
IPv6 주소는, 통상, 4 자리수의 16 진수로 이루어진 8 개의 그룹으로 기술됩니다.각 그룹은 콜론(:)으로 구분됩니다.
일반적인 IPv6 주소:
2001:0db8:85a3:0000:0000:8a2e:0370:7334
이거 39자예요.IPv6 주소의 길이는 128비트이므로 바이너리(16) 열을 사용할 수 있지만, 영숫자 표현을 사용하는 것이 좋다고 생각합니다.
참조용으로만 저장할 경우 문자열로 저장할 수 있지만 예를 들어 IP 주소가 테이블에 있는지 확인하는 등 검색을 수행하려면 "표준 표현"이 필요합니다.전체를 큰 수로 환산하는 것이 옳다IPv4 주소는 롱 int(32비트)로 저장할 수 있지만 IPv6 주소를 저장하려면 128비트 번호가 필요합니다.
예를 들어, 이러한 모든 문자열은 실제로 동일한 IP 주소입니다.127.0.0.1, 127.000.000.001, ::1, 0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:1
IPv4 는, 다음의 형태로 32 비트를 사용합니다.
255.255.255.255
데이터 타입에 따라 다르다고 생각합니다만, CHAR 타입의 문자열로서 보존하고 있는지, 숫자 타입을 사용하고 있는지를 확인합니다.
IPv6 는 128 비트를 사용합니다.IP에 다른 정보를 포함하지 않는 한 IP의 길이는 이보다 길지 않습니다.
IPv6 는, 콜론으로 구분된 4 자리수의 16 진수 세트로 그룹화 됩니다(wikipedia ) 。
2001:0db8:85a3:0000:0000:8a2e:0370:7334
39자 길이의 스트링으로 보관해도 안전합니다.주소를 쓰는 다른 약식 방법도 있습니다.0 세트를 단일 0으로 잘라내거나 0 세트를 이중 콜론으로 완전히 숨길 수 있습니다.
사람들은 IP 주소를 원시 데이터로 압축할 수 있을 때 문자를 이야기한다.
따라서 원칙적으로 IPv4(32비트) 또는 IPv6(128비트)만을 사용하기 때문에 최대 128비트 또는 128/8 = 16바이트의 공간이 필요합니다.
이는 권장되는 39바이트보다 훨씬 적은 수치입니다(문자 집합이 ASCII라고 가정).
즉, raw data에서 IP 주소를 디코딩하고 부호화해야 합니다.이것은 그 자체로 하찮은 일입니다(이전에도 했습니다만, PHP 를 참조해 주세요).ip2long()
(32비트 IP의 경우)
편집: inet_pton
(그리고 그 반대입니다.)inet_ntop()
)는, 양쪽 모두의 주소 타입으로 동작합니다.다만, Windows 에서는 PHP 5.3 이후부터 사용할 수 있습니다.
언급URL : https://stackoverflow.com/questions/1076714/max-length-for-client-ip-address
'programing' 카테고리의 다른 글
서버와의 접속은 정상적으로 확립되었지만, 로그인 프로세스중에 에러가 발생했습니다.(에러 번호: 233) (0) | 2023.04.10 |
---|---|
인스턴스 멤버를 형식에 사용할 수 없습니다. (0) | 2023.04.10 |
키/값 쌍의 파일에서 환경 변수 설정 (0) | 2023.04.10 |
WPF 이미지 리소스 저장 (0) | 2023.04.10 |
라벨 콘텐츠의 WPF 문자열 형식 (0) | 2023.04.10 |