> 文章列表 > IP协议详解

IP协议详解

IP协议详解

IP协议属于网络层协议,网络层主要的工作就是:地址管理路由选择

IP协议的报文结构

  

4位版本

此处的取值只有俩个,一个是4一个是6,分别代表IPv4IPv6.

4位首部长度

描述了IP报头有多长(和TCP协议一样有选项) ,此处的单位也是4字节

8位服务类型

实际上只有4位有效,这4位中只有1位可以是1,其它的都是0,4位就表示IP协议的四种形态/四种工作模式.分别代表最小延时,最大吞吐量,最高可靠性,最小成本

16位总长度(字节数)

描述了一个IP数据包的长度(报头+载荷),这个长度减去前面的IP报头长度,剩下的就是 载荷长度,一个完整的 TCP/IP数据报长度.16位总长度意味着一个IP数据报,最大只支持64KB,但IP协议自身就支持对包的拆分和组装,不需要程序员去手动实现,一个IP数据报携带的数据载荷太长了,超过了64KB,就会在网络层针对数据进行拆分,把一个数据拆成多个IP数据报,再分别发送,接收方在重新拼装.

16位标识

同一个数据拆成的多个包标识是一样的

3位标志

数据报文的结束标志

13位片偏移

标识了多个包的先后顺序

8位生存时间

一个数据报在网络上最大存活时间,单位是次数,一个数据报被构建出来,会有一个初始的TTL数值(比如32或64),这个报文每次经过一个路由器转发TTL-1,如果一直减到0,还没有到达目标,就认为这个包永远也到不了了

8位协议

描述了当前载荷部分的内容属于哪个协议的(TCP/UDP)

16位首部校验和

只针对首部进行校验,载荷部分(TCP/IP)自身已经有校验和了.如果此处的校验和不一致,会直接丢弃

32位源IP地址和32位目的IP地址

这是IP协议中最重要的部分,这里是32位的整数,我们看到的IP地址则是一串数字,比如192.168.1.30,使用3个"."把4个字节的数字分隔开,分成四个部分,每个部分分别使用0-255 十进制整数表示(点分十进制)

32位数字只能表示42亿9千万个数字,而每个能上网的设备都需要一个IP地址,所以IP地址不够用.

如何解决IP地址不够用的问题?

1.动态分配IP地址

把不在联网的设备IP分给正在联网的设备,此时就可以省下一批IP地址了

2.NAT 网络地址转换(本质是使用一个IP代表一批设备)

 在NAT背景下,把IP地址分为俩类,一是内网IP(私有IP),如以10.*,172.16.*-172.31*,192.168.*,二是外网IP(公网IP),除了上述这些开头的,剩下的就说公网IP
NAT要求,公网IP必须是唯一的,私网IP 可以在不同的局域网中重复出现,如果某个私网里的设备想访问公网的设备,就需要对NAT设备(路由器),把IP地址进行映射,从而完成网络访问.反之,公网的设备无法直接访问私网的设备,不同的局域网的私网设备无法直接相互访问,我们可以通过cmd打开控制台,输入ipconfig查看我们的私网IP

3.使用IPv6

在IPv6中使用16个字节表示IP地址,也就是说我们会有2^128-1个地址,肯定是够用了.IPv4的地址使用权在美国,也就是说美国如果不给我们分配地址,我们就无法上网,IPv6和IPv4不兼容,是新的地址体系,也就是说IPv6的地址分配权不完全由美国掌握.因此使用IPv6就变成了保护我们网络安全的政治问题

IP协议的地址管理

IP协议中,把一个IP地址分为俩个部分:一个是网络号,一个是主机号.

比如192.168.0.10 网络号就是192.168.0,表示当前局域网的设备的网络号都是192.168.0

 一个IP地址从哪到哪是网络号,从哪到哪是主机号

这就要说子网掩码了,子网掩码表示1的部分就说网络号,表示0的部分就是主机号.如我们常见的子网掩码255.255.255.0,说明前24位都是网络号,后后8位都是主机号

特殊IP

将IP地址中的主机地址全部设为0,就成了网络号,代表整个局域网

将IP地址的主机地址全部设为1,就成了广播地址,用于给同一个链路中相互连接的所有主机发送数据

127.*的IP地址用于本机环回测试(测试程序是否能正常工作),通常是127.0.0.1

IP协议的路由选择

路由就说规划路径,由于网络环境复杂,任何一个节点(路由器),都无法感知网络环境的全貌,每个路由器都会保存一定的周围设备的信息(路由表),每次有一个IP数据报经过路由器就要匹配路由表,看看接下来怎么走,如果路由表上有匹配的项(该路由器认识路),按照要求走就可以了,如果没有匹配的项(路由器不认识路),会提供一个默认的路径,每经过一个路由器,TTL-1