【TCP/IP】:IP协议的详解

各位看官,大家早安午安晚安呀~~~

如果您觉得这篇文章对您有帮助的话

欢迎您一键三连,小编尽全力做到更好
欢迎您分享给更多人哦

今天我们来学习【网络层】:IP协议的详解

目录

1.IP协议数据报各个字段的含义

2.地址管理

2.1.NAT机制解释

2.2.NAT机制如何实现?

3.网段划分

首先介绍一下CIDR

4.路由选择


网络层要负责的事情有两个

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协议的详解的全部内容啦~~~

能看到这里相信您一定对小编的文章有了一定的认可。

有什么问题欢迎各位大佬指出
欢迎各位大佬评论区留言修正~~

您的支持就是我最大的动力​​​!!!

猜你喜欢

转载自blog.csdn.net/2302_80639556/article/details/145535033
今日推荐