我必須在 mysql 表中建立一個欄位來儲存 ip 位址。我需要知道 IP 位址的最大字元數。無論是 ipv4、ipv6 或其他一些可以呈現異常長的有效 IP 位址的類型。那麼我應該將字元限制設為多少呢?
我要求的長度是指「foo」這個字有 3 個字符,而不是位元組或類似的東西。
答案1
IPv6 位址最長為 8 組,每組 4 個字元(總共 32 個),每組以冒號分隔。總共有 39 個字元。
IPv4 位址最多為 4 組,每組 3 個數字(12 個字元),每組之間以點 (.) 分隔。總共有 15 個字元。
所有這些都假設 IP 位址應該以人類可讀的形式儲存。我更喜歡以十進制形式儲存 IP 位址,因為您永遠不知道它將如何使用。你的旅費可能會改變。
答案2
這並不像人們想像的那麼容易。
在大多數情況下你是安全的45。
普通 IPv6 位址
0000:0000:0000:0000:0000:0000:0000:0000
8 * 4 + 7 =39
IPv4 映射的 IPv6 位址
0000:0000:0000:0000:0000:ffff:192.168.100.228
(6 * 4 + 5) + 1 + (4 * 3 + 3) = 29 + 1 + 15 =45
頭檔將 INET6_ADDRSTRLEN 定義為46
具有範圍區域的 IPv6
範圍區域可以是數字,甚至可以是字串(介面名稱)。
ff02::5678%5
ff08::9abc%interface10
介面名稱的長度取決於系統。在 Linux 中,它由 IFNAMSIZ 常數定義。 16是一個共同的值。上面的 45 個字元:
45 + 1 + 16 =62