IP 协议

本文详细解析了IP协议报头的组成部分,包括版本号、首部长度、服务类型、总长度、生存时间、协议、检验和等。还介绍了IP地址的分配问题,如内网IP、外网IP、NAT转换以及IPv6的作用。此外,讨论了子网掩码在地址管理中的角色以及一些特殊的IP地址用途。
摘要由CSDN通过智能技术生成

1.IP协议报头

如下图:

版本号 代表的是当前的IP协议的版本,此处的版本一共有两个取值:v4和v6.本文着重针对v4版本进行解析.

首部长度 代表的是整个IP报头的长度,这个报头长度是可变长的,可变长的原因在于报头中的选项,这个属性是一个可有可无的属性,会改变报头长度,它的单位是32bit,比如里面存放的是1,那么整个IP报头的长度就是4个字节(32bit).

服务类型 共占8位,但是实际上只有4位是有效的,其中这4位表示当前IP协议的4种工作模式:最小延时、最大吞吐量、最高可靠性、最小成本.实际开发中可能会根据需要来选择当前的IP工作模式.

总长度 代表的是整个IP数据报的总长度(报头+载荷)

同时也说明IP数据报最多只能携载64KB的数据.但是IP协议是支持对包的拆分和组装的.

比如我要传一个100KB的数据,当传输到网络层时,网络层就会将这100KB的数据进行拆分(假设拆分成64KB和32KB),因为是拆分成了两个数据报,所以到了数据链路层就会打包成两个数据帧,以此类推......

等到接收方的数据链路层将这两个数据帧进行分用,得到两个IP数据报,再由网络层针对这两个IP数据报进行解析,将载荷合并成一个,再向后面传输.....

这一行属性都是针对数据 拆包/组包 而提供的.

标识:同一份数据的不同包里面的表示是相同的.

标志:结束标志.

片偏移:标识了拆分后每个包的顺序

生存时间 表示一个数据报在网络上传输的最大时间,这里的时间并不是以"秒"、"毫秒"这样的单位来计量的,而是以"次数"来计量.

比如有一个TTL初始值为32,此时这个数据报每经过一个路由器转发,TTL的值就会-1,当TTL的值减到0时,就会认为这份数据传输不到了,可以丢弃了.

协议 代表的是当前数据报中传输层的协议(UDP/TCP....)

首部检验和 和UDP、TCP的相同,但是此处只检验报头,因为载荷部分传输层会进行检验.

2.IP地址

这两个部分分别表示发送方的IP地址和接收方的IP地址.

在报文中是以32位的整数方式存在的,而我们日常见到的IP地址则是一串数字,比如:127.0.0.1

他们之间的转换是用点分十进制的方式转换的,也就是将32位分成4分,每一份为8位,转化为十进制0~255,中间用"."来分隔开,就得到了我们现在看到的IP地址.

这32位整数最多可以有42亿9千万中不同的变化,但是我们期望的是全世界里每台设备的IP地址都不相同,但是在生活中需要的IP地址量是非常多的,比如:智能手机、路由器、服务器、物联网等等.所以42亿9千万这个数字是远远不够的.

解决这个问题,有以下两种方法:

  1. 进行动态分配IP地址,此时虽然可以省下也配IP地址,但是总数没有增加.

  1. NAT网络地址转换.本质上是将一个地址同时给多台设备使用.可以大大提高了IP地址的利用率,在区分时也可以用端口号来区分.

在NAT背景下,IP地址可以分为两个大类:

内网IP(私有IP):以10.开头的、以172.16.~172.31.开头的、以192.168.开头的.

外网IP(共有IP):除了内网IP之外的IP地址.

内网IP是可以重复出现的,外网IP是不可以重复出现的.

如果某个私网里面的设备想访问公网里面的设备,就需要对应的NAT(路由器),将IP地址进行映射,从而完成网络访问.

公网的设备无法直接访问私网的设备,不同局域网的私网设备也无法直接互相访问.

主机与服务器之间要进行连接,则如下图:

因此,服务器能拿到的只是路由器的IP,不能拿到我电脑的内网IP,如果我的电脑不主动和服务器联系,服务器也就不知道我的端口,从而无法主动的找到我.

NAT机制虽然能够有效的解决IP不够用的问题,但是带来的副作用就是:网络环境变得更加复杂了.

而IPv6可以根本上的解决IP不够用的问题.

IPv6使用16个字节表示IP地址,也就是42亿*42亿*42亿*42亿,这个数字完全可以分配地球上的每一台设备.

但是当前实际上仍然是以 NAT+IPv4+动态分配 的方式来进行网络组建的,真正使用IPv6的地方非常少,所以不展开讨论了.

3.地址管理

一个IP地址,可以分成两个部分,一个是网络号,一个是主机号.

网络号:标识网段,保证连接的两个网段具有不同的标识.

主机号:标识主机,同一网段内,主机之间的网络号是相同的,但是主机号必须是不同的.

假如一个IP地址是:192.168.0.10

此时网络号一般为192.168.0

主机号一般为:10

那么这个网络号和主机号的分界线是怎么定的呢?

是通过子网掩码来设定的,如下图:

子网掩码也可以以一个32位的整数来表示,上图中的子网掩码换成32位整数就为:

1111 1111 1111 1111 1111 1111 0000 0000

子网掩码中,左侧都是1,右侧都是0.

其中所有的"1"位都是网络号,所有的"0"位都是主机号.

对于家用设备来说,子网掩码最常见的就是255.255.255.0了

4.一些特殊的IP地址

  1. 将IP地址中的主机地址全部设为0,就成了网络号.

  1. 将IP地址中的主机地址全部设为1,就成了广播地址,比如:192.168.0.255,使用UDP往这个地址上发送数据报,整个局域网的所有设备都能收到.

  1. 127.*的IP地址用于本机环回测试,通常为127.0.0.1.

  1. 若主机号为1(比如:192.168.0.1),通常是"网关IP"(不绝对),也就是网络的出入口.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追梦不止~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值