IP(Internet Protocol,网络互联协议)地址就是连接互联网的主机被分配或指派的一段数字标识,是传输报文组装时最重要的组成部分,用来在互联网中数据传输时标识源和目标主机。

IPv4

IPv4地址长度为32位(bit),每8位为一个字节,用十进制表示值从0到255,共四段。

IP地址按作用范围分为两类:一类是公网IP地址,另一类为私网IP地址

IP按用途可分五大类:A类(政府)、B类(公司)、C类(公用)、D类(组播)和E类(实验),地址格式为网络地址+主机地址或网络地址+子网地址+主机地址形式。 它们之间的区别和特征如下表所示:

地址类型 特征 介绍
A类地址 第一位为0,注意是位

1、第1字节为网络地址,其它3个字节为主机地址
2、地址范围:1.0.0.1—126.255.255.254
3、10.X.X.X是私有地址,范围从10.0.0.0-10.255.255.255
4、127.X.X.X是保留地址,用做环回测试。
5、默认子网掩码255.0.0.0

B类地址 前两位为10,注意是位

1、 第1字节和第2字节为网络地址,后2个字节为主机地址
2、地址范围:128.0.0.1—191.255.255.254
3、私有地址范围:172.16.0.0—172.31.255.255
4、保留地址:169.254.X.X
5、默认子网掩码255.255.0.0

C类地址 前三位为110,注意是位

1、前三个字节为网络地址,最后字节为主机地址
2、地址范围:192.0.0.1—223.255.255.254
3、私有地址:192.168.X.X,范围从192.168.0.0-192.168.255.255
4、默认子网掩码255.255.255.0

D类地址 前四位为1110,注意是位

1、不分网络地址和主机地址。
2、地址范围:224.0.0.1—239.255.255.254

E类地址 前五位为11110,注意是位

1、不分网络地址和主机地址
2、地址范围:240.0.0.1—255.255.255.254

此外还有几个特殊IP地址:

  1、0.0.0.0只能做源地址 

  2、255.255.255.255是广播地址

  3、127.x.x.x为环回地址,本机使用 

  4、专用地址: 

    10/8 地址范围:10.0.0.0——10.255.255.255, 

    172.16/12 地址范围:172.16.0.0——172.31.255.255, 

    192.168/16地址范围:192.168.0.0——192.168.255.255。

匹配IPv4的正则表达式

IPv4地址由4个这样的数字组成,中间用"."隔开,所以可以匹配IPv4的正则表达式为:

(((\d{1,2})|(1\d{1,2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{1,2})|(2[0-4]\d)|(25[0-5]))

使用边界匹配,不然256.1.1.1也会匹配成功,会匹配成56.1.1.1,那么最终正确的匹配IPv4的正则表达式为:

(?=(\b|\D))(((\d{1,2})|(1\d{1,2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{1,2})|(2[0-4]\d)|(25[0-5]))(?=(\b|\D))

用python实现

import re
pattern = re.compile(r'(2(5[0-5]{1}|[0-4]\d{1})|[0-1]?\d{1,2})(\.(2(5[0-5]{1}|[0-4]\d{1})|[0-1]?\d{1,2})){3}')
str = ''
print(pattern.search(str))

IPv6

IPv6地址长度为128位(bit),每16位为一个字节,使用十六进制表示,用十进制表示的话值为从0到65535,共八段

IPv6按照传输类型分为单播地址、任播地址和多播地址,其表示方法如下:

  1.冒号分隔的形式:x:x:x:x:x:x:x:x,其中x是16进制数,值为0x0000-0xFFFF。示例:FB21:1233:55B2:AA44:12B8:6761:890F:AB31。

  2.同0压缩形式:就是地址中如果出现连续两个或两个以上0时,可以采用压缩表示形式::(双冒号表示),但只能出现一次,因为如果出现两个或以上双冒号,技术上无法识别出实际的地址,比如FB21:0:0:0:12B8:6761:0:0,就可表示成FB21::12B8:6761:0:0,或FB21:0:0:0:12B8:6761::,不能表示成FB21::12B8:6761::。如果8个段值都是0,可以用::表示。

  3.混合形式:用来组合IPv4和IPv6地址,x:x:x:x:x:x:d.d.d.d,前6个段表示IPv6高序位,后面四段表示IPv4地址。

  IPv6作为IPv4的下一个版本,由RFC 2373 和RFC 2374定义。优点主要有:更大的地址空间、更小的路由表、增强的组播和流控制、自动配置和更高的安全性。

IPv6的正则表达式

支持IPv6基本格式的正则表达式:

^([\\da-fA-F]{1,4}:){7}([\\da-fA-F]{1,4})$

最新文章

  1. html5 canvas常用api总结(二)--绘图API
  2. u-boot-2015.04 在tq2440上的移植(使用spl引导u-boot)
  3. Elasticsearch5.0.1 + Kibana5.0.1 + IK 5.0.1安装记录
  4. 其他信息: 未找到源,不过,未能搜索部分或所有事件日志。 若要创建源,您需要用于读取所有事件日志的权限以确保新的源名称是唯一的。 不可访问的日志: Security。
  5. Rubix - ReactJS Powered Admin Template 后台管理框架
  6. [cocos2dx]利用NDK崩溃日志查找BUG
  7. ThreadLocal知识总结
  8. JAVA EE 第一阶段项目问题
  9. 【转】Linux(ubuntu14.04)上编译Android4.4源码的环境搭建及编译全过程
  10. Unity3d 4.3.4f1执行项目
  11. IBatis.net初步使用
  12. python自带的web服务器
  13. java利用poi来读取execl表格返回对象
  14. Web of science数据下载以数据处理
  15. 2019 Power BI最Top50面试题,助你面试脱颖而出系列<中>
  16. Chrome浏览器JSON格式化插件
  17. BZOJ1084_最大子矩阵_KEY
  18. 【Scipy】初步认识
  19. eclipse ndk 配置和简单开发demo
  20. pycharm 常用配置

热门文章

  1. Js 集合运用
  2. sql语句 两表关联查询计算数量
  3. Linux用户管理重要初始化目录login
  4. 数组工具类 Arrays
  5. windows下使用命令行编译、链接C++源文件
  6. oracle常用命令(1)
  7. HDU 1811 并查集+拓扑排序
  8. Thinking In Java 4th Chap5 初始化和清理
  9. python学习-2 python安装和环境变量的设置
  10. 第六章 ZYNQ-MIZ701 GPIO使用之MIO