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})$

IPV4和IPV6的划分的更多相关文章

  1. RFC2474 - Definition of the Differentiated Services Field (DS Field) in the IPv4 and IPv6 Headers的双语版

    RFC2474 - Definition of the Differentiated Services Field (DS Field) in the IPv4 and IPv6 Headers英文版 ...

  2. 计算机网络-网络层(1)IPv4和IPv6

    IPv4数据报格式: 版本号 这4比特规定了数据报的IP 协议版本.通过查看版本号,路由器能够确定如何解释IP数据报的剩余部分. 首部长度 以4字节为单位,没有选项的首部长度为5*4=20字节 服务类 ...

  3. 一起来聊聊 IP 地址、局域网、广域网、IPV4 和 IPV6

    背景 谁都知道 IP 地址是干嘛的,但是它出现的前因后果你真的知道吗? 我觉得很有必要重新复习下计算机网络基础知识,实在太太太重要了 本篇文章素材均来自:https://www.bilibili.co ...

  4. IPv4 与 IPv6的区别

    在介绍 IPv4 到 IPv6 区别之前,我们先来简单了解一下 IPv4 和 IPv6. IPv4 网际协议版本4(英语:Internet Protocol version 4,IPv4),又称互联网 ...

  5. IP地址(IPv4)/IPv6地址的正则表达式

    原地址:http://pfeishao.blog.163.com/blog/static/18162337020112113130453/ Pv4地址正则表达式:^((25[0-5]|2[0-4]\d ...

  6. ipv4、ipv6的socket同时监听“bind: Address already in use”的解决方法

    创建ipv4和ipv6的socket,同时监听某个端口的ipv4和ipv6报文,运行时bind函数执行失败,提示“bind: Address already in use”.原因:ipv6的socke ...

  7. ios 兼容IPV4和IPV6网络通信

    前言: 苹果官方出了新的规定,要求新上架的app都必须单独支持ipv6-only的网络. 准备工作: 搭建IPV6测试环境:http://blog.csdn.net/potato512/article ...

  8. VLC测试IPv4 IGMP/IPv6 MLD协议

    1 简述 VLC既可以充当流客户端,又可以充当流服务器,并且可以跨平台使用,是一款开源.免费的软件,基于GNU GPL许可证. 2 搭建组播服务器 第一步:运行程序后选择“媒体  串流”:第二步:通过 ...

  9. TCP/IP读书笔记(4) IPv4和IPv6 路由选择

    TCP/IP读书笔记(4) IPv4和IPv6 路由选择 网络层是位于链路层之上,TCP/IP模型中网络层的核心协议是IP协议(Internet protocol). 目前主流的IP协议是IPv4(I ...

随机推荐

  1. SpringBoot:SpringBoot整合JdbcTemplate

    个人其实偏向于使用类似于JdbcTemplate这种的框架,返回数据也习惯于接受Map/List形式,而不是转化成对象,一是前后台分离转成json方便,另外是返回数据格式,数据字段可以通过SQL控制, ...

  2. 解决从github上下载代码仓库慢的问题

    一,打开命令提示符,最好之前准备一个仓库地址,这样下载下来的文件方便查看,这里打开你想要的下载根目录,进行下载. github上下载代码仓库慢的问题"> 二:复制代码仓库的地址 三:右 ...

  3. Netty学习篇②

    Channel.ChannelPipeline.ChannelHandlerContent发送数据的不同 // channel往回写数据 Channel channel = ctx.channel() ...

  4. select示例

    #include <sys/select.h> #include <sys/time.h> #include <sys/types.h> #include < ...

  5. [转帖]yaml语言格式

    yaml语言格式 YAML是"YAML Ain't a Markup Language"(YAML不是一种标记语言),强调这种语言以数据做为中心,而不是以置标语言为重点. 转载2篇 ...

  6. c# 金钱大写转小写工具类

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. 解决python语言在cmd下中文乱码的问题

    解决python语言在cmd下中文乱码的问题: a = "再见!"print (a.decode('utf-8').encode('gbk')) #解决在cmd下中文乱码的问题

  8. fiddler笔记:TimeLine时间轴选项卡

    1.TimeLine选项卡介绍 TimeLine选项卡支持使用"瀑布"模型查看1~250个选中的Session.主要用于帮助性能分析和理解请求之间的关联.选项卡的主体内容是数据流视 ...

  9. 网络编程[第三篇]基于tcp协议实现远程连接

    需要用到subprogress模块来远程控制cmd控制台程序来得到控制台的输出信息 一.服务端 —— 控制输出信息 import socket import subprocess #socket实例化 ...

  10. spark调优篇-oom 优化(汇总)

    spark 之所以需要调优,一是代码执行效率低,二是经常 OOM 内存溢出 内存溢出无非两点: 1. Driver 内存不够 2. Executor 内存不够 Driver 内存不够无非两点: 1. ...