前言
IP协议是网络层重点协议,其重要作用是:在复杂的网络环境中确定一个合适的路径。
下面只对该协议简单介绍
🌴IP协议的概念
IP指网际互连协议,Internet Protocol的缩写,是TCP/IP体系中的网络层协议。设计IP的目的是提高网络的可扩展性:一是解决互联网问题,实现大规模、异构网络的互联互通;二是分割顶层网络应用和底层网络技术之间的耦合关系,以利于两者的独立发展。根据端到端的设计原则,IP只为主机提供一种无连接、不可靠的、尽力而为的数据包传输服务。
🌳IP数据报
🚩IPv4协议头格式
- 4位版本号(version)
指定IP协议的版本,对于IPv4来说,就是4。
- 4位头部长度(header length)
IP头部的长度是多少个32bit,也就是 length * 4 的字节数。4bit表示最大的数字是15,因此IP头部最大长度是60字节
- 8位服务类型(Type Of Service)
3位优先权字段(已经弃用),4位TOS字段,和1位保留 字段(必须置为0)
4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。
这四者相互冲突,只能选择一个。对于ssh/telnet这样的应用程序,最小延时比较重要;对 于ftp这样的程序,最大吞吐量比较重要
- 16位总长度(total length)
IP数据报整体占多少个字节
由于16位总长度表示的数据大小有限,而实际通信中,我们所传的数据大都已经超过了这个限制。为了解决这一限制带来的问题,就规定路由器必须有IP信息包分割与重组的机制,将过长的信息包进行分割,以便能在最大传输单位较小的网络上传输。分割后的IP信息包,由目的设备接收后重组,恢复成原来IP信息包。
为了IP数据报的分割和重组,IP协议中给了以下字段进行使用
- 16位标识(id):
唯一的标识主机发送的报文。如果IP报文在数据链路层被分片了,那么每一个片里面的这个id都是相同的。
- 3位标志字段:
第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到)。第二位置为1表示禁止分片,这时候如果报文长度超过MTU,IP模块就会丢弃报文。第三位表示"更多分片",如果分片了的话,最后一个分片置为1,其他是0。类似于一个结束标记。
- 13位分片偏移(framegament offset)
是分片相对于原始IP报文开始处的偏移。其实就是在表示当前分片在原报文中处在哪个位置。实际偏移的字节数是这个值 * 8得到的。因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了)。
- 8位生存时间(Time To Live,TTL)
数据报到达目的地的最大报文跳数。一般是64。每次 经过一个路由,TTL -= 1,一直减到0还没到达,那么就丢弃了。这个字段主要是用来防止出
现路由循环。
- 8位协议:
表示上层协议的类型。
- 16位头部校验和
使用CRC进行校验,来鉴别头部是否损坏。
- 32位源地址和32位目标地址
表示发送端和接收端
关于选项这里先不做描述
🚩IPv6的诞生
自从1970年代IPv4问世以来,数据通信技术日新月异有了很大发展。虽然IPv4设计得很好,但其缺点也逐渐显露出来:
- 虽说借助子网化、无类寻址和NAT技术可以提高IP地址使用效率,因特网中IP地址的耗尽仍然是一个没有彻底解决的问题;
- IPv4没有提供对实时音频和视频传输这种要求传输最小时延的策略和预留资源支持;
- IPv4不能对某些有数据加密和鉴别要求的应用提供支持。
为了克服这些缺点,IPv6(Internet working Protocol version6)被提了出来。
- 在IPv6中,IP地址格式和分组长度以及分组的格式都改变了。IPv6每个分组由必须的基本头部和其后的有效载荷组成。
- 有效载荷由可选的扩展头部和来自上层的数据组成。
- 基本头部占用40字节,有效载荷可以包含65535字节数据
🎍IP地址
IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异
🚩IP地址的格式:
IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节),如:01100100.00000100.00000101.00000110。
通常用“点分十进制”的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数)。如:100.4.5.6
🚩IP地址的分类
IP地址是用来识别网络上的设备,因此,IP地址是由网络地址与主机地址两部分所组成。
- 网络地址
网络地址可用来识别设备所在的网络,网络地址位于IP地址的前段。当组织或企业申请IP地址时,所获得的并非IP地址,而是取得一个唯一的、能够识别的网络地址。同一网络上的所有设备,都有相同的网络地址。IP路由的功能是根据IP地址中的网络地址,决定要将IP信息包送至所指明的那个网络。
- 主机地址
主机地址位于IP地址的后段,可用来识别网络上设备。同一网络上的设备都会有相同的网络地址,而各设备之间则是以主机地址来区别。
由于各个网络的规模大小不一,大型的网络应该使用较短的网络地址,以便能使用较多的主机地址;反之,较小的网络则应该使用较长的网络地址。为了符合不同网络规模的需求,IP在设计时便根据网络地址的长度,设计与划分IP地址
🎈网络号与主机号的划分
过去曾经提出一种划分网络号和主机号的方案,把所有IP 地址分为五类,如下图所示
传统IP地址的运行方式,由于以等级来划分,因此称为等级式的划分方式。相对的,后来又产生了无等级的划分方式,也就是CIDR(Classless Inter-Domain Routing)
🚩特殊的IP地址
- 将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网;
- 将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包;
- 127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1
本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。
🚩子网掩码
在上述的分类中,存在IP地址浪费的问题:
(1)单位一般会申请B类网络(C类连接主机数量有限),但实际网络架设时,连接的主机数量又常远小于65534(B类连接主机数),造成IP地址浪费;同理,A类网络的IP地址也会造成大量的浪费。
(2)当一个单位申请了一个网络号。他想将该网络能表示的IP地址再分给它下属的几个小单位时,如果在申请新的网络就会造成浪费。
为了解决以上问题,引入子网掩码来进行子网划分:
- 子网掩码的格式:
子网掩码格式和IP地址一样,也是一个32位的二进制数。其中左边是网络位,用二进制数字“1”表示,1的数目等于网络位的长度;右边是主机位,用二进制数字“0”表示,0的数目等于主机位的长度。子网掩码也可以使用二进制所有高位1相加的数值来表示,如以上子网掩码也可以表示为24。
- 子网掩码的作用
(1)划分A,B,C三类 IP 地址子网:如一个B类IP地址:191.100.0.0,按A ~ E类分类来说,网络号二进制数为16位网络号+16位主机号。假设使用子网掩码 255.255.128.0(即17) 来划分子网,意味着划分子网后,高17位都是网络位/网络号,也就是将原来16位主机号,划分为1位子网号+15位主机号
此时,IP地址组成为:网络号+子网号+主机号,网络号和子网号统一为网络标识(划分子网后的网络号/网段)
(2)网络通信时,子网掩码结合IP地址,可以计算获得网络号(划分子网后的网络号)及主机号(划分子网后的主机号)。一般用于判断目的IP与本IP是否为同一个网段
🎈计算方式
将 IP 地址和子网掩码进行“按位与”操作(二进制相同位,与操作,两个都是1结果为1,否则为0),得到的结果就是网络号。
将子网掩码二进制按位取反,再与 IP 地址位与计算,得到的就是主机号。
十进制 | 二进制 | |
IP地址 | 180.210.242.131 | 10110100.11010010.11110010.10000011 |
子网掩码 | 255.255.248.0 | 11111111.11111111.11111000.00000000 |
网络号 | 180.210.240.0 | 10110100.11010010.11110000.00000000 |
主机号 | 0.0.2.131 | 00000000.00000000.00000010.10000011 |
⭕总结
关于《【JavaEE初阶】IP协议简介》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下!