各位看官,大家早安午安晚安呀~~~
如果您觉得这篇文章对您有帮助的话
欢迎您一键三连,小编尽全力做到更好
欢迎您分享给更多人哦
今天我们来学习【网络层】:IP协议的详解
目录
网络层要负责的事情有两个
1.地址管理:指定一系列的规则,通过地址,描述出网络上的位置
2.路由选择:网络环境比较复杂,从一个节点到另一个节点之间有很多条路径,通过这种方式,规划出最合适的路径进行数据传输
接下来我们直接看IP协议的数据报
1.IP协议数据报各个字段的含义
(1):
(2):
在 IP 协议中,16 位标识符、3 位标志位和13 位片偏移是用于支持 IP 数据报分片(Fragment)与重组的关键字段。
16位标识符:
作用:唯一标识一个原始数据报的所有分片。发送方为每个原始数据报分配一个唯一的 16 位标识符。(只要分片的标识符相同就是来自一个数据报)
3位标志位:
第0位(保留位):未使用,目前设置为 0。
第1位(不分片位, DF):如果设置为 1,表示该数据报不允许被分片。如果路由器需要将该数据报分片(因为其大小超过 MTU),但 DF 标志设置为 1,则路由器会丢弃该数据报并向源主机发送 ICMP“数据报太大”错误消息。
第2位(更多分片位, MF):如果设置为 1,表示后面还有更多的分片属于同一个数据报。只有当数据报是最后一个分片(没有更多的分片)时,MF 标志才设置为 0。
13位片偏移(Fragment Offset)
作用:指示每个分片在原始 IP 数据报中的位置(以 8 字节为单位)
字段长度:IP协议头中的片偏移字段只有13位。这13位的长度限制了它能表示的最大值。如果片偏移的单位是1字节,那么13位只能表示的最大偏移量是 213−1=8191 字节。这显然不足以表示较大的IP数据报的偏移量。
单位选择:为了扩大片偏移字段的表示范围,IP协议选择了8字节作为单位。这样,13位的片偏移字段可以表示的最大偏移量是 213×8=65536 字节,这足以覆盖大多数IP数据报的长度。
总之:一个IP数据报,要分片的话,这个IP数据报的DF = 0*(分片).最后一片的MF =0(这是最后一片)(片偏移决定了这几个分片的前后顺序)
如果要实现UDP的拆包组包可以参考这个思路
(3):
TTL:(单位:次数)数据包 再构造出来的时候,TTL就会被设置成一个初始值,在转发的过程中,每经历一次路由器转发,TTL就会-1
防止一个数据报一直在网络上转圈(找不到目标)
(4)8位服务类型:(就像迪迦一样可以切换形态)
2.地址管理
对于IPv4而言:IP地址一共4个字节(32位整数)(42亿9千万个数)
这个数字大家一看就会觉得不够,互联发展到今天这个地步,能上网的设备实在是太多,根本就不够一个设备分配一个IP。更不要说如今的汽车,冰箱,洗衣机都能联网了
那如何解决IP地址不够的问题呢?
1.动态分配IP:美国睡觉了(很多人不用了)我们用。这个方法是在是没话说,治标不治本,没啥用。
2.NAT机制(网络地址转化):本质上就是一个IP地址代表一批设备
接下来我给大家讲解一下NAT机制
2.1.NAT机制解释
NAT机制把IP地址分为公网IP和私网IP
1.私网IP:如果一个IP地址,是以10.开头,172.16.* ~ 172.31.* 或者192.168.*开头的(符合上述条件之一的的IP就是私网IP)
在一个局域网内部,内网IP之间不能重复,不同局域网可以重复(譬如一个公司,学校,小区构成一个局域网,这一个局域网内部就有几千几万个设备,大家公用一个公网IP即可)
2.公网IP(外网IP)不能重复
2.2.NAT机制如何实现?
但是如果两台设备一起经过路由器他们的IP都被转换成相同的公网IP,那么服务器返回的数据应该怎么区分这两台主机呢?
用端口号区分
但是如果他们分配的端口号也一样呢?
如果一个局域网中 两个电脑一起访问一个服务器(并且这两台电脑分配给这两个进程的端口号都是60),路由器岂不仅要把他们的源IP地址替换调,而且源端口号也要替换。也就是封住分用到了传输层。
譬如一个端口号替换成100,一个换成102(然后路由器记录一下哪一个进程对应的100,102都在路由表里面)。
只要不是局域网里面同一时刻访问同一个服务器的数量超过了65535,不然NAT目前肯定够用。
当前的网络环境就是以:NAT + 动态分配的方式来解决 IP地址不够用的问题
NAT机制最大的优势就在于“纯软件的方案”
也正是因为这个机制:局域网内部的设备可以主动访问局域网外部的设备,但是外网的设备不能主动访问局域网内部的设备(就像我们写的UDP TCP的服务器必须部署到云服务器上面才能让别人访问。)
但是IPV6 还是最终的解决方案!!!
3.网段划分
一个IP地址 = 网络号 + 主机号
子网掩码(Subnet Mask)是一个32位的二进制数字,
子网掩码(32位):决定了网络号的长度(网络号的长度不是固定的),用于确定IP地址中的网络部分和主机部分。子网掩码是一个与IP地址对应的32位二进制数(相与),其中连续的 1
表示网络部分,0
表示主机部分。
譬如:
IP地址
192.168.1.100
,子网掩码255.255.255.0因此(网络号表示前24位,主机号表示后8位),用CIDR表示法就是192.168.1.0/24(这个24计表示子网掩码中1的个数,也表示网络号的长度)
首先介绍一下CIDR
CIDR(Classless Inter-Domain Routing,无类别域间路由)是一种用于 IP 地址分配和路由聚合 的技术,它取代了传统的 A、B、C 类地址划分,提供了更灵活的地址管理方式。以下是 CIDR 的详细解释:
1. 传统 IP 地址划分的问题:
在 CIDR 之前,IPv4 地址被划分为 A、B、C 类,每类地址的网络号和主机号长度固定:
A 类地址:前 8 位为网络号,后 24 位为主机号(范围:
1.0.0.0
到126.0.0.0
)。B 类地址:前 16 位为网络号,后 16 位为主机号(范围
128.0.0.0
到191.255.0.0
)。C 类地址:前 24 位为网络号,后 8 位为主机号(范围
192.0.0.0
到223.255.255.0
)。问题:
地址浪费:固定划分导致地址分配不灵活,例如一个组织需要 500 个 IP 地址,只能分配一个 B 类地址(65536 个地址),造成大量浪费。(这个时候就可以让网络号占据23位,主机号占据9位(一共512个地址)“/23”)
路由表膨胀:随着网络规模增长,路由表变得庞大且难以管理
示例:
(1)192.168.1.0/24
:
网络号占前 24 位(
192.168.1
),主机号占后 8 位(0
到255
)。可用主机地址范围:
192.168.1.1
到192.168.1.254
。(192.168.1.255表示“光比地址”,给局域网中的所有设备都发送相同的数据)
(2)10.0.0.0/16
:
网络号占前 16 位(
10.0
),主机号占后 16 位(0.0
到255.255
)。可用主机地址范围:
10.0.0.1
到10.0.255.254
。
解释示例1中192.168.1.0 和192.168.1.255这两个IP地址分别表示什么?
192.168.1.0:网络地址
用途:网络地址用于标识整个网络,而不是某个具体的主机。
192.168.1.255:广播地址
用途:广播地址用于向整个子网内的所有主机发送数据包
最后:一个局域网中的设备网络号必须相同(子网掩码相同),主机号必须不同(就是说用CIDR表示法都要一样)
如果一个IP是127开头的,此时这个IP就是“环回IP”
作用:127.0.0.1(我们最长用的)表示设备自己,发送的数据也是发给自己:主要的用图就是进行一些测试的工作,可以排除网络不通的干扰因数,更好的排查网络代码的问题)
4.路由选择
路由选择:描述了IP数据报的转发过程
以上大概就是IP协议的内容啦~~
上述就是【网络层】:IP协议的详解的全部内容啦~~~
能看到这里相信您一定对小编的文章有了一定的认可。
有什么问题欢迎各位大佬指出
欢迎各位大佬评论区留言修正~~