欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > 网络层IP协议

网络层IP协议

2025/5/10 18:28:04 来源:https://blog.csdn.net/qhy850716/article/details/142437608  浏览:    关键词:网络层IP协议

一、初识IP

IP意义:IP地址提供一种能力,将数据从一个主机跨网络发送到另一个主机的能力。但是只是有能力,不能保证每一次都能传输成功,所以就要有上层TCP协议传输层来提供策略保证可靠性。

IP = 网络号 + 主机号

主机:配有IP地址,有一定路由功能。

路由器:配有IP地址,并能路由。

节点:主机与路由器的统称。

二、IP协议格式

分离报文:4位首部长度,同TCP协议,详见传输层TCP协议-CSDN博客

分用:8位协议,TCP/UDP

4位版本:一般ipv4(用4字节表示IP地址)

8位服务类型:3位优先权字段(已弃用),4位TOS字段,1位保留字段(必须置0)。4位TOS分别是最小延时,最大吞吐量,最高可靠性,最小成本,4个只能选一个。

16位总长度:记录报文总长度。

8位生存时间:每经过一个路由器,时间--,时间等于0,报文丢弃。防止报文被环路转发积攒。

三、网段划分

首先网络IP是一个有用且有限的资源,只有经过合理的划分才能减少浪费。

路由器的功能:路由,构建子网,动态分配私有IP地址,有web功能

1、IP地址分类

但是由于A类IP太稀有,C类IP主机号太少,导致B类IP很快就被分配完了,而且A类IP的主机号也存在浪费。所以不怎么使用这种网段划分方式。

2、CIDR

可以以比特位级别来控制网络号和主机号的划分。

引入子网掩码区分主机号和网络号,子网掩码是一个32位的正整数,通常以一串0结尾(目的是与IP地址 按位与 之后能把主机号清0,得到网络号)网络号与主机号的划分与IP地址是A类还是B类无关。

例子一子网掩码有8位比特位是0,最后相应的主机号就是最后8位比特位,网络号是前24位,我们一般可以把这种IP地记成 140.252.20.68/24,24就代表子网掩码前24位是1,也代表网络号是前24位。可接入的主机个数就是 00000000 ~ 11111111,256个,但是主机号全0全1是网络号和广播地址,不可用,所以只有254个。

所以例子二IP地址记成 140.252.20.68/28,只有最后4位比特位才表示主机号。

从上面我们就能感受到 CIDR 可以以比特位级别来控制网络号和主机号的划分,利用率大大提高,但是本质并没有解决IP地址总上限只有43亿多不够用的情况。

所以为什么要网段划分?

经过精心的设计,合理的划分,可以高效支持未来报文路径查找目标主机,提高效率。

四、特殊IP地址

1、将IP地址中的主机地址全部设为 0, 就成为了网络号, 代表这个局域网。

2、 将 IP 地址中的主机地址全部设为 1, 就成为了广播地址 , 用于给同一个链路中相互连接的所有主机发送数据包。
3、127.*的 IP 地址用于本机环回 (loop back) 测试 , 通常是 127.0.0.1

五、IP地址限制问题

我们知道 , IP 地址 (IPv4) 是一个 4 字节 32 位的正整数。 那么一共只有 2 32 次方个 IP地址, 大概是 43 亿左右 . TCP/IP 协议规定 , 每个主机都需要有一个 IP 地址。 这意味着, 一共只有 43 亿台主机能接入网络么 ?
实际上 , 由于一些特殊的 IP 地址的存在 , 数量远不足 43 亿。 另外 IP 地址并非是按照主机台数来配置的, 而是每一个网卡都需要配置一个或多个 IP 地址。CIDR 在一定程度上缓解了 IP 地址不够用的问题 ( 提高了利用率 , 减少了浪费 , 但是 IP地址的绝对上限并没有增加), 仍然不是很够用。 这时候有三种方式来解决 :
1、动态分配 IP 地址 : 只给接入网络的设备分配 IP 地址。 因此同一个 MAC 地址的
设备 , 每次接入互联网中 , 得到的 IP 地址不一定是相同的。
2、NAT 技术
3、IPv6: IPv6 并不是 IPv4 的简单升级版 . 这是互不相干的两个协议 , 彼此并不兼容; IPv6 16 字节 128 位来表示一个 IP 地址 ; 但是目前 IPv6 还没有普及。

六、私有IP地址和公网IP地址

如果一个组织内部组建局域网, IP 地址只用于局域网内的通信, 而不直接连到 Internet 上, 理论上使用任意的 IP 地址都可以,但 RFC 1918 规定了用于组建局域网的私有 IP 地址范围是
1、10.*,前 8 位是网络号 , 16,777,216 个地址
2、172.16.*到 172.31.*, 12 位是网络号 , 1,048,576 个地址
3、192.168.*,前 16 位是网络号 , 65,536 个地址
包含在这个范围中的 , 都成为私有 IP, 其余的则称为 公网 IP
私有IP不能出现在公网上,私有IP可以出现在不同私网来进行重复。所以虽然存在公网,但我们上网都必须接入一个指定的内网,所有人都在内网中。
上图的子网IP也可以叫做 LAN口IP,我们说过路由器可以创建子网,创建的子网就是私有IP,可以在不同的私网重复,WAN口IP是路由器上一级连接的节点的子网IP,这样就可以把一个个节点连接起来。
在各个内网中的主机IP都是私有IP,可以重复。 网络世界 = 内网 + 公网

七、路由

1、预备知识

任何主机都有能力知道与自己直连的网络号。

报文从客户端转发到服务器过程:由于私有IP不能出现在公网上,报文在内网传递时每经过一个路由器就要把自己的 srcIP 改成路由器的WAN口IP,这样最后在公网上面的 srcIP 就被替换成了公网IP,可与公网中的服务器进行通信,这就是NAT技术(只在进出内网时作转化)

公网的末端有各个运营商持有,最后用来构建私网重复利用IP地址。

路由器可以记录与自己同级别的目标网络与子网掩码(路由表),用于判断报文是同级转发还是向上交付。

2、路由表

举例
DestinationGatewayGenmaskFlagsMetricRefUseIface
192.168.10.0*255.255.255.0U000eth0
192.168.56.0*255.255.255.0U000eth1
127.0.0.1*255.0.0.0U000lo
default192.168.10.10.0.0.0UG000eth0
这台主机有两个网络接口, 一个网络接口连到 192.168.10.0/24 网络 , 另一个网络接口连到 192.168.56.0/24 网络。
Destination: 目的网络地址
Genmask: 子网掩码
Gateway: 下一跳地址
Iface: 发送接口
Flags 中的 U 标志表示此条目有效 ( 可以禁用某些条目 ),G标志表示此条目的下一跳地址是某个路由器的地址, 没有 G 标志的条目表示目的网络地址是与本机接口直接相连的网络, 不必经路由器转发。
查路由表:用每一个条目的掩码 & dstIP,对比条目的Destination,如果不同就换下一个条目,相同就交给发送接口。

3、路由方式

数据链路层一次只会发送小于1500字节数据,所以当传输层发送大于1500字节数据时,网络层只能对数据进行分片,经过传输到达对方网络层时还要对分片进行组装向上交付。

注意:

(1)在网络中只有IP报文,不认识什么TCP,UDP

(2)传输中,分片丢失1个就代表整个报文丢失

(3)所以底层有减少分片的需求,传输层的滑动窗口大小就是以1000字节为标准发送的

所以问题变成了如何分片,组装?

4、如何区分报文是否分片?

这里我们介绍IP协议里面的16位标识符,3位标志,13位位偏移。

16位标识符:不同报文标识符不同,相同报文的分片标识符一定相同。

3位标志:第一位保留,第二位1表示禁止分片,超过MTU报文丢弃,0表示默认可以分片,第三位更多分片,1表示是除了最后一个分片的标志,0表示是报文里面最后一个分片。

13位位偏移:分片相对于数据的字节偏移量。例如下图:

规定:分片之后的报文必须有报头,所以原先报文被分成了1480,1480,20,所以13位位偏移应该是0,1480,2960

但是我们发现IP协议里面有16位报文长度,怎么能被13位位偏移表示呢?

16位报文写入13位位偏移时,原先16位的偏移量会被右移3位(除以8)

13位位偏移得16位报文时,原先13位的偏移量会被左移3位(乘以8)

所以我们要求报文长度是8的整数倍。

所以写入的不是0,1480,2960,而是0,175,370

回答问题:如何区分报文是否是分片?

分片第一片中间片最后一片
特点

更多分片 == 1

位偏移 == 0

更多分片 == 1

位偏移 > 0

更多分片 == 0

位偏移 > 0

if(更多分片 == 1 || 位偏移 > 0) 就是分片

更多分片 == 0 && 位偏移 == 0 不是分片

两个条件互斥。

5、如何保证分片收全了?

分片无第一片无中间片无最后一片
特点

位偏移没有0

所有分片位偏移升序排序

按逻辑:自己位偏移+自己长度=下一个分片位偏移,不符合就缺

更多分片没有0

6、如何组装?

按顺序,除了第一个分片,其他分片去报头,连接到第一个分片后面。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词