网络层——IP协议

发布于:2024-06-02 ⋅ 阅读:(125) ⋅ 点赞:(0)

一、IP协议

IP协议,主要完成的工作,是两方面:

1. 地址管理.使用一套地址体系,来描述互联网上每个设备所处的位置.

2.路由选择   ->   一个数据包,如何从网络中的某个地址,传输到另一个地址.

1.1 IP协议的报头

其中的选项可以有一个,也可以有多个.

4位版本:

取值只有两种:  4     6

对应的IPv4      IPv6

4位首部长度:

IP报头,也是可变长的,单位也是4字节

8位服务类型(TOS):

type of service,实际上只有4位有效,这4位彼此是冲突的

其中只有1位为1,剩下的都是0.

表示当前IP协议所处的模式.

最小延迟,最大吞吐量,最高可靠性,最小成本.

16位总长度(字节数):

描述了一个IP数据报的长度.(包含 报头 + 载荷 )

ps:

虽然IP自身有长度限制,但是IP也提供了 拆包/组包 这样的功能.

此时.载荷就可以搞一个很大的,超过64KB也没关系.

在IP这一层会自动拆成多个IP数据报,每个IP数据报来携带载荷的一部分.

拆包过程都是IP(系统内核)自动完成的,程序员通过软件代码无法干预到.

IP拆包并不是因为数据达到64K,而是在数据链路层还有限制.

那么拆包之后,未来如何组包呢?

在IP报头中:

16位标识   ->   表示哪些IP数据报的载荷应该一起组装

3位标志   ->   只有2位有效      其中1位表示这次的IP数据是否拆包了    还有一位表示结束标记.

13位片移位   ->   描述了这些包之间的先后顺序.

ps:

如果确实需要基于UDP手动实现应用层的数据包拆包,此时也就可以参考IP的做法.

8位生存时间(TTL):

单位不是 s / ms ,而是次数,这里存储的是一个整数.一个IP数据报,每次经过一个路由器转发,TTL就-1,如果这个数值减到0了,此时就说明数据包要被丢弃了.

TTL一般是32 / 64 这样的整数.

8位协议:

表示在传输层使用哪个协议

16位首部检验和:

只是针对IP的首部校验的.

载荷部分不管了.

载荷中的 TCP / UDP 都自带了校验和

32位源IP地址、32位目的IP地址:

表示法发送方了接收方的地址.

二、IP协议如何管理的地址

IP地址本质上就是一个32位整数(int)

为了方便,就会把IP表示为 点分十进制 的方式

通过3个点分成4部分,每个部分1个字节,每个部分的取值是0-255

为了防止IP地址不够用,带用了以下几种方法:

1. 动态分配IP地址

全世界的设备,也不是同一时刻都在上网的,可以在使用时再分配IP地址.

2. NAT机制(网络地址映射)

先把IP地址分为两大类

1. 私网IP / 局域网IP

IP地址是以10.*,172.16-172.31.*,192.168.*    这三类都是私网IP

2. 公网IP / 广域网IP

要求公网上的设备,,对应的公网IP,都必须是唯一的.

但是私网上/局域网上的设备,使用私网IP,只要保证局域网内部的IP不重复即可.不同的局域网之间的IP允许重复.

由于上述设定,就有一个重要的限制:

1. 公网设备访问公网设备,没有任何问题,直接访问即可.

2. 局域网设备访问局域网设备(同一个局域网中),也没有任何问题

3. 局域网设备访问局域网设备(不同局域网中),不允许访问.

4. 局域网设备访问公网设备,就需要对局域网设备的IP进行 地址转换.

5. 公网设备访问局域网设备,不允许主动访问.

比如,自己的设备网络传输经过家里的路由器,路由器在把数据发送出去的时候,会把源IP从自己电脑的IP改成路由器的IP.

如果局域网的各个设备访问的都是不同的服务器,路由器就可以很简单的通过服务器IP地址,来进行区分.本质上都是通过查表.

路由器进行NAT替换的时候,会把这次通信的相关信息记录下来,记录这次通信过程中的

替换前源IP,替换后的源IP,目的IP,源端口和目的端口

如果出现两个源端口相同的情况,NAT会进行修改用以区分.

大部分情况下,局域网内的不同设施,访问的是不同网站,这个时候直接通过服务器IP就能区分了.

少数情况下,如果访问的是同一个服务器,就可以按照端口号来区分.

极少数情况,碰巧访问的是同一个服务器并且端口号相同,就可以在路由器这边自动映射成不同的端口了,仍然能够区分.

因此,再NAT机制下,当前的网络是足够使用了.

当前互联网就是 动态分配 + NAT相结合产生的方案.

3. IPv6

IPv6 从根本上解决了问题.,增加了IP地址的个数.

IPv6使用16个字节表示IP地址.

他的地址数使用16字节表示,是一个天文数字.


网站公告

今日签到

点亮在社区的每一天
去签到