网络层:IP协议详解(IP协议真的得看这篇)

1、IP协议概念

IP(Internet Protocol , 互联网协议)主要用于互联网通信。IP协议用于将多个包交换网络连接起来,他在原地址和目的地址之间传输数据报,还提供对数据大小的重新组装功能,以适应不同网络的要求。

IP协议是TCP/IP协议族的核心协议,最常用的IP协议的版本号是4,即IPV4 ,它的下一个版本就是 IPV6。

2、IP协议报文格式

IP协议报文

(1)版本 占4位,指IP协议的版本。通信双方使用的IP协议版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。关于IPv6,目前还处于草案阶段。

(2)首部长度 占4位,可表示的最大十进制数值是15。请注意,这个字段所表示数的单位是32位字长(1个32位字长是4字节),因此,当IP的首部长度为1111时(即十进制的15),首部长度就达到60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此数据部分永远在4字节的整数倍开始,这样在实现IP协议时较为方便。首部长度限制为60字节的缺点是有时可能不够用。但这样做是希望用户尽量减少开销。最常用的首部长度就是20字节(即首部长度为0101),这时不使用任何选项。

(3)区分服务 占8位,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998年IETF把这个字段改名为区分服务DS(Differentiated Services)。只有在使用区分服务时,这个字段才起作用。

(4)总长度 总长度指首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据报的最大长度为216-1=65535字节。
在IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,这称为最大传送单元MTU(Maximum Transfer Unit)。当一个数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层的MTU值。

(5)标识(identification) 占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。

(6)标志(flag) 占3位,但目前只有2位有意义。
● 标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个
● 标志字段中间的一位记为DF(Don’t Fragment),意思是“不能分片”。只有当DF=0时才允许分片。

(7)片偏移 占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。

(8)生存时间 占8位,生存时间字段常用的的英文缩写是TTL(Time To Live),表明是数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在因特网中兜圈子,因而白白消耗网络资源。最初的设计是以秒作为TTL的单位。每经过一个路由器时,就把TTL减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把TTL值减1。当TTL值为0时,就丢弃这个数据报。

(9)协议 占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。

(10)首部检验和 占16位。当收到一份IP数据包后,同样对首部的每个16位进行反码求和。由于接收方在计算过程中包含了发送发在首部中的校验和,如果传输过程中没有差错,计算结果应全为1,不是全1,即检验和错误,那么就丢弃收到的数据报,但不生成差错报文,由上层发现丢失的数据报并进行重传。这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。

3、IP地址

IP地址标识着网络中一个系统的位置。每个IP地址都是由两部分组成:网络号和主机号。网络号标识一个物理的网络,同一个网络上所有的主机需要同一个网络号,该号在整个互联网是唯一的;主机号是网络中的一个工作端、服务器、路由器其他TCP/IP主机。对于一个网络号来说主机号是唯一的。每个TCP/IP主机由一个逻辑IP地址确定。

IP地址有两种表示方法:二进制表示、点分十进制表示。
每个IP地址为4个字节,由4个8位域组成,称之为8位体。

IP地址的编址方式共经过了三个历史阶段。这三个阶段是:

分类的IP地址。最基本的编址方式。

子网的划分。对最基本的编址方式的改进。

构造超网。比较新的无分类编址方法。

IP地址

1>. A类地址( 0.0.0.0 - 127.255.255.255 )以”0”头,网络段长度为8位,其中可变部分的长度为7位;主机段长度为24位。7位的可变网络段可识别2^7=128 (0~127)个网络,其中0和127另有用途,故只有126个可用的A类网络地址。另外,主机位全”0”代表网络本身,全”1”代表网内广播,因此一个A类网络地址可识别的可分配地址有 2^24-2 个。

2>. B类地址( 128.0.0.0 - 191.255.255.255 )以”10”开头,网络段长度为16位,可变部分的长度为14位;主机段长度为16位。14位的可变网络段可以识别的网络数为 2^14 个。另外,主机位全”0”与全”1”功能同A类地址,因此一个B类网络可以分配地址有 2^16-2 个。

3>. C类地址( 192.0.0.0 - 223.255.255.255 )以”110”开头,网络段长度为24位,其中可变部分的长度为21位;主机段长度为8位。21位的可变网络段可以识别的网络数为 2^21 个。可分配的主机地址是 2^8-2 个。

4>. D类地址( 224.0.0.0 - 239.255.255.255 )为组播地址,使用”1110”开头,不分网络段和主机段,有 2^28 个组播地址。用于标识预先定义的一组主机。主机使用组播通信时,可以将组播数据报一次性发送给所有同组的主机。

5>. E类地址( 240.0.0.0 - 255.255.255.255 )是保留地址,用于研究使用。以”1111”开头,不区分网络段和主机段,其中32位全1代表本网络内广播,因此E类地址共有 2^28-1 个。

私有IP地址和特殊IP地址

根据用途和安全性级别的不同,IP地址还可以大致分为两类:公共地址和私有地址。公用地址在Internet中使用,可以在Internet中随意访问。

一个机构网络要连入Internet,必须申请公用IP地址。但是考虑到网络安全和内部实验等特殊情况,在IP地址中专门保留了三个区域作为私有地址,其地址范围如下:

A类:10.0.0.0/8(子网掩码表示) 10.0.0.0-10.255.255.255
B类:172.16.0.0/12 172.16.0.0-172.31.255.255
C类:192.168.0.0/16 192.168.0.0-192.168.255.255

使用保留地址的网络只能在内部进行通信,而不能与其他网络互连。因为本网络中的保留地址同样也可能被其它网络使用,如果进行网络互连,那么寻找路由时就会因为地址的不唯一而出现问题。但是这些使用保留地址的网络可以通过将本网络内的保留地址翻译转换(NAT)成公共地址的方式实现与外部网络的互连。这也是保证网络安全的重要方法之一。

特殊IP地址

注:127(即01111111)保留作用本地软件环回测试(loopback test)本主机的进程之间的通信之用。若主机发送一个目的地址为环回地址(例如:127.0.0.1)的IP数据报,则本主机中的协议软件就处理数据报中的数据,而不会把数据报发送给任何网络。目的地址为环回地址的IP数据报永远不会出现在任何网络上,因为网络号为127的地址根本不是一个网络地址。

网络号为0,如主机使用BOOTP协议确定本机IP地址时只能作为初始化过程中的源地址出现。

4、子网划分

1、子网划分的意义

组织不同物理媒体的使用、地址空间的保存、控制网络流量、安全性等因素。

2、子网掩码

RFC950 定义了子网掩码的使用。子网掩码是32位二进制数,其对应网络地址的位都是1,对应主机位置的都是0。

A类网络的默认子网掩码为255.0.0.0,B类网络的默认子网掩码为255.255.0.0,C类网络的默认子网掩码为255.255.255.0

子网掩码告诉路由器,地址哪一部分是网络地址,哪一部分是主机地址,是路由器正确判断任意IP地址是否是本网段的,从而进行正确的路由。

子网掩码

3、子网划分

知识点:
A类地址 0.0.0.0 ~127.255.255.255
B类地址 128.0.0.0 ~ 191.255.255.255
C类地址 192.0.0.0 ~ 223.255.255.255

A类私有地址 10.0.0.0 ~ 10.255.255.255
B类私有地址 172.16.0.0 ~ 172.31.255.255
C类私有地址 192.168.0.0 ~ 192.168.255.255

私有IP地址

CIDR(无类别域间路由,Classless Inter-Domain Routing)。CIDR最大的特点是用斜杠(/)来表示子网掩码,指出了子网掩码中有多少位1。这种表示方法我们经常在运营商给我的IP地址中看到,我们经常需要根据这种表示方法算出我们的可用IP地址是哪些。

假如电信给了我们这段地址61.168.1.32/28,我们可用的IP地址是多少呢?这个问题我们先不回答,等后面详细讲解子网划分自后再回头来看。

A类网络默认子网掩码是255.0.0.0,用CIDR表示为/8
B类网络默认子网掩码为255.255.0.0.0,用CIDR表示为/16
C类网络默认子网掩码为255.255.255.0,用CIDR表示为/24

看到这里,大家知道了吧,/8表示占用8位1,即占用一个字节,/16表示占用16位1,即2字节,/24占用24位1,即占用3字节,大家记住这个默认规则,是后面学习子网划分以及以后心算子网划分的重要技巧。
举例,子网掩码255.255.255.128,用CIDR表示是多少呢?首先这是个C类网络地址,前面三个字节都是255,转换成二进制都为1,即11111111.11111111.11111111,即24位1。128转换成二进制位10000000,即1占用了一位。整个子网掩码占用了25位1,所以用CIDR表示为/25,即255.255.255.128(/25),假如IP段为192.168.1.0,用CIDR表示则为192.168.1.0/25。

再举例,192.168.1.0,255.255.255.192,用CIDR表示?首先判断出是C类网络,前面占用了3字节(24位)1,192换算成二进制位11000000,占用了2位1,总共是26位1.所以CIDR表示为192.168.1.0/26。

子网划分的要点:
1、需要划分成多少个网络(子网)?
假如要划分4个网络,则2X=4,X=2、要划分8个网络,则2X=8,X=3,现在知道为什么要先搞懂2的幂了吧,这里X就是=2的幂值。
那么X代表什么意思呢?X就是取值多少位1,如11000000,就是借2位,即X=2,反推知道一个字节(8位)如果为11000000,则表示可以划分4个网络(22=4);如果为11110000,则表示借4位,可以划分16个网络(24=16)。

2、每个网络需要多少个IP?
计算公式:2^y-2,y代表取值多少位0,如11111000,代表取值3位0,即y=3,得出2^3=8-2=6,即每个网络可用的IP数量是6个。
假如每个网络需要60台主机的IP,那么如何计算呢?即2^y≥60,根据2的幂算法得出,2^6=64-2=62,所有y的值为6。

3、有哪些子网网络(块大小)?
计算公式:256-子网掩码。假如子网掩码为255.255.255.192,则块大小为256-192=64,即块大小为64。从0开始以64为基数不断递增,直到达到子网掩码值,中间的结果即为子网,本例中子网即0、64、128、192。
再举例,加入子网掩码为255.255.255.128,则块大小为256-128=128,即块大小为128,子网0、128。

4、每个子网的子网号和广播地址是多少?
子网号很简单,即子网块值,如掩码为192,则子网块为256-192=64,得出子网为0、64、128、192,即子网号为0、64、128、192。再如掩码为128,则子网为128,则子网好0、128。
广播地址也很简单,总是下一个子网前面的数。如子网号为0、64、128、192、则广播地址为63、127、191。再如子网号为0、128,则广播地址为127.
看到这里大家知道为啥在计算每个网络可用的IP数时,公式里要-2吗?这是因为每个子网号(子网号也是一个IP地址)和广播地址是不能配给主机用的。

5、每个子网的可用(合法)的主机地址是哪些?
规则就是除去每个每个子网的子网号、广播地址,剩下的就是可用的主机地址,如子网号为0、64、128、192,则可用的主机地址为1-62、65-126、129-190,因为0是子网地址,63是广播地址,同样128、192是子网地址,127、191是广播地址。

6、C类网络子网划分
举例,192.168.10.0,255.255.255.224
1、可划分成多少个子网?
根据前面的知识,首先把224转换成二进制,得出为11100000,1占了3位,因此2^3=8,可用划分8个子网。
2、每个子网有多少个可用的IP?
这里看0占了5位,因此2^5-2=30,可用IP数为30.
3、有哪些子网网络?
256-224=32,即以32为基数不断递增,直到224,即0、32、64、96、128、160、192、224。即192.168.10.0、192.168.10.32、192.168.10.64、192.168.10.96、192.168.10.128、192.168.10.160、192.168.10.192、192.168.10.224。
4、每个子网网络的广播地址是多少?
每个子网网络的广播地址总是下一个子网前面的数,即31、63、95、127、159、191、223,即192.168.10.31、192.168.10.63、192.168.10.95、192.168.10.127、192.168.10.159、192.168.10.191、192.168.10.223。
5、每个子网的可用地址是哪些?
即减去每个子网的子网地址和广播地址,剩下的就是可用地址。本例中的可用地址为1-30、33-62、65-94、129-158、161-190、193-222。

再举例,192.168.10.0/30
1、可划分成多少个子网?
因为CIDR表示的子网掩码,首先得算出占用了多少位1,即30-24(因为是C类网络,前面三个字节都是255,即8位1,共24位1)=6,即6位1。所以2^6=64,即64个子网。
2、每个子网有多少个可用的IP?
因为1位占了6个,0位只有2个了,得出22-2=2,所以是2个可用IP地址。
3、有哪些子网网络?
因为1位占了6个,所以得出21+22+23+24+25+26=252,即256=252=4,得出块大小为4,子网网络为0、4、8、12、16、……、240、244、248、252,即192.168.10.0、192.168.10.4、192.168.10.8、……192.168.10.248、192.168.10.252.
4、每个子网网络的广播地址是多少?
下一个子网之前的数字,即192.168.10.3、192.168.10.7、192.168.10.11、……、192.168.10.247、192.168.10 .251,你算对了吗。
5、每个子网的可用地址是哪些?
除去子网地址和广播地址就是可用地址,本例中的可用地址为1,2、5,6、……、249,250。
无论是A类、B类、C类网络,在使用子网掩码/30时,每个子网只包含2个主机地址,这种子网掩码只适合用于点到点链路。

7、B类网络子网划分
通过前面的知识我们知道B类地址中,有16位可用的主机地址,这意味着我们可将其中的14位用于子网划分,因为至少要保留2位用于主机编址。
举例,172.17.0.0 255.255.128.0
1、可划分成多少个子网?
首先128转换成二进制位10000000,因为此例是属于B类网络,至少需要保留16位掩码位(16位1)所以此处x=1,得出21=2。答案是可以划分2个子网。
2、每个子网有多少个可用的IP?
这里0位总共占了15位,215-2=32766.
3、有哪些子网网络?
256-128=128,即0.0、128.0,得出172.17.0.0、172.17.128.0
4、每个子网网络的广播地址是多少?
下一个子网之前的数字,172.17.127.255、172.17.255.255.
5、每个子网的可用地址是哪些?
子网0.0第一个可用地址为172.17.0.1,最后一个可用地址为172.17.127.254;子网128.0第一个可用地址为172.17.128.1,最后一个可用地址为172.17.255.254.

再举例,172.17.0.0/20
1、可划分成多少个子网?
因为此例是属于B类网络,至少需要保留16位掩码位(16位1)所以此处x=4,得出24=16。答案是可以划分16个子网。
2、每个子网有多少个可用的IP?
这里1位占了4位,所以这里0位总共占了12位,212-2=4094.
3、有哪些子网网络?
因为1位占了4位,得出24+25+26+27=240。
256-240=16,即0.0、16.0、……、240.0,得出172.17.0.0、172.17.16.0、……、172.17.240.0。
4、每个子网网络的广播地址是多少?
下一个子网之前的数字,172.17.15.255、……、172.17.223.255.
5、每个子网的可用地址是哪些?
子网0.0第一个可用地址为172.17.0.1,最后一个可用地址为172.17.15.254;……。
请自己算出172.16.0.0/24可划分成多少个子网?每个子网可用地址数是多少?正确答案大家可搜索QQ认证网络工程师进群讨论。

A类子网划分与B类、C类子网划分类似。

如果上面还是看不懂没关系:还有大神更详细的例子:

如何划分子网的超经典分析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/459236.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

传输层两大协议:TCP与UDP详解(两者的联系与区别)

一、TCP协议 1、TCP协议报文格式 TCP协议报文格式详解 2、TCP“三次握手”建立连接 位码即tcp标志位,有6种标示: SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急) Sequence number(顺序号码) Ac…

docker二进制安装mysql_Docker搭建MySQL读写分离主从模式 分布式数据库中间件Mycat分库分表应用...

一、MySQL读写分离主从模式1. 下载镜像docker pull mysql当前最新版本:mysql Ver 8.0.19 for Linux on x86_64 (MySQL Community Server - GPL)2. 启动主节点并修改配置文件docker run -it --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD123456 mysql bash修改/…

五种I/O模型详解

1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步: 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不…

存储过程 while is null_4.2 串的存储实现(2)

返回目录:Chilan Yu:《数据结构》目录链接​zhuanlan.zhihu.com4.2.2 堆串字符串包括串名与串值两部分,而串值采用堆串存储方式存储,串名用符号表存储。堆串存储方式:这种存储方法以一组地址连续的存储单元存放串的字符…

高光谱图像pca降维_高光谱图像的数据特性之探讨

图像是获取信息以及探知世界的重要媒介。近年来,传感科技与成像技术实现了跨越式发展,促使图像获取在质与量上均获得了显著提升。在多样化成像手段中,光谱成像技术是成像科技的重要组成部分,是人类借助光这一能量手段探测物质特性…

注册Tomcat服务为系统服务

2019独角兽企业重金招聘Python工程师标准>>> 将解压版的Tomcat服务注册为系统服务之后,就不用每次启动机器之后都要手动去启动"startup.bat",就方便多了,下面就是具体步骤(以我的机器为例,我的To…

【Spring学习笔记-MVC-17】Spring MVC之拦截器

作者:ssslinppp 1. 拦截器简介及应用场景2. 拦截器接口及拦截器适配器3. 运行流程图正常运行中断流程4. 程序实例控制层:ControllerRequestMapping(value "/test")public class TestController {RequestMapping(value "/intercept…

iOS之地理位置及定位系统 -- 入门笔记(用Swift)

前言:关于地理位置及定位系统,在iOS开发中也比较常见,比如美团外面的餐饮店铺的搜索,它首先需要用户当前手机的位置,然后在这个位置附近搜索相关的餐饮店铺的位置,并提供相关的餐饮信息,再比如最…

PHP监測memcache服务端的执行状况

. 代码例如以下,代码为memcache官方代码,引用在此。做一下简单的说明: 1、设置username和password define(ADMIN_USERNAME,admin); // Admin Username define(ADMIN_PASSWORD,123456); // Admin Password 2、配置server及其port&#xff0…

linux grep 匹配空格_17 个案例,5 分钟简单搞定 Linux 正则表达式!

正则表达式是一种字符模式,用于在查找过程中匹配制定的字符。元字符通常在Linux中分为两类:Shell元字符,由Linux Shell进行解析;正则表达式元字符,由vi/grep/sed/awk等文本处理工具进行解析;正则表达式一般…

micropython web ws2812_MicroPython实例之TPYBoard v102炫彩跑马灯WS2812B

一、实验目的了解ws2812b的工作原理学习ws2812b的驱动方法二、实验器材TPYBoard v102 1块ws2812b RGB-Ring-8 1个micro USB数据线 1条杜邦线 若干三、WS2812B的介绍WS2812B是一个集控制电路与发光电路于一体的智能外控LED光源。 其外型与一个5050LED灯珠相同, 每个元…

mysql数据库表复用_MySQL 数据库之表操作

一、创建表的完整语法create table 表(字段名1 类型 [(宽度) 约束条件],字段名2 类型 [(宽度) 约束条件],字段名3 类型 [(宽度) 约束条件]);1.类型:使用限制字段必须以什么样的数据类型传值约束条件:约束条件是在类型之…

Android有道词典查询功能

有道词典 任务要求&#xff1a;完成查词等功能 因为需要申请API key&#xff0c;这里直接给出地址供使用&#xff1a;http://fanyi.youdao.com/openapi?pathdata-mode 1、activity_main.xml基本格局&#xff08;不做任何说明&#xff09; 代码如下&#xff1a; 1 <Relative…

从零开始学Axure原型设计(高级篇)

如果你熟悉了Axure的部件库&#xff0c;那么你可以得心应手地画出心目中产品的线框图&#xff1b;如果你会用Axure的母版、动态面板功能&#xff0c;那么你应该能够画出一些简单网站的原型图&#xff1b;但只有你精通了Axure的条件逻辑、变量、函数等高级交互&#xff0c;才能将…

python vector 初始化_从零开始搭建机器学习算法框架(python)--计算框架

介绍今天开始一个新的系列&#xff0c;这个系列的目标是用python在不使用任何第三方库的情况下去实现各类机器学习或者深度学习的算法。之所以会有这种想法是因为每当我想提高编程技巧的时候&#xff0c;我总希望能够做一些简单又有趣的小项目练手。我一直对机器学习算法颇感兴…

windows phone 页面主题设计

达到如图这个效果&#xff1a; 1.保证状态栏背景色与主题栏颜色相同需设置状态栏的透明度&#xff0c;代码如下&#xff1a;shell:SystemTray.IsVisible"True" shell:SystemTray.Opacity"0.01" 2.顶部状态栏高度为25&#xff0c;字的上下要留部分空白3.内容…

JAVA如何才能导出这样的EXCEL?

2019独角兽企业重金招聘Python工程师标准>>> 最近的项目有个需求&#xff0c;需要做个报表&#xff0c;excel如上所示。没有很好的办法&#xff0c;求指教。 转载于:https://my.oschina.net/secret620/blog/611450

Xcode 修改工程名以及注意事项

1、先把整个工程文件夹名改为新的工程名。 2、打开工程&#xff0c;单击&#xff0c;输入新的工程名,会出现&#xff0c;点击确定。 3、回到工程界面&#xff0c;在中选择 Manage Schemes,然后再弹出的对话框&#xff0c;把工程名改为新的名字。 4、最好在工程中&#xff0c;把…

脚本命令配置mysql_MySQL 自动化部署脚本

一、环境说明操作系统&#xff1a;CentOS数据库版本&#xff1a;MySQL 5.7/8.0参数&#xff1a;buffer pool 会根据系统内存指定、默认双一、GTID、SlowLog脚本默认安装路径&#xff1a;/usr/local/mysql脚本默认数据路径&#xff1a;/data/mysql*(根据安装包版本适应 比如 5.7…

第2章 数字之魅——快速寻找满足条件的两个数

快速寻找满足条件的两个数 问题描述 能否快速找出一个数组中的两个数字&#xff0c;让这两个数字之和等于一个给定的数字&#xff0c;为了简化起见&#xff0c;我们假设这个数组中肯定存在这样一组或以上符合要求的解。 分析与解法 【解法一】 代码如下&#xff1a; 1 package …