网络协议分层之网络层
IPv4协议:Internet网络层最核心的协议。定义了如何封装上层协议( 如UDP、 TCP) 的报文段;定义了Internet网络层寻址( IP地址) 以及如何转发IP数据报等内容。
协议头格式简单介绍
版本(4位):4位能表示 0到15
4位首部长度:0-15 单位是4个字节
IP数据报的首部长度和数据长度都是可变长的,但总是4字节的整数倍。对于IPv4,4位版本字段是4。4位首部长度的数值是以4字节为单位的,最小值为5,也就是说首部长度最小是4x5=20字节,也就是不带任何选项的IP首部,4位能表示的最大值是15,也就是说首部长度最大是60字节。
区分服务(8位):
8位TOS字段有3个位用来指定IP数据报的优先级(目前已经废弃不用),还有4个位表示可选的服务类型(最小延迟、最大呑吐量、最大可靠性、最小成本),还有一个位总是0。
16位总长度(字节数):
总长度是整个数据报(包括IP首部和IP层payload)的字节数。每传一个IP数据报,16位的标识加1,可用于分片和重新组装数据报。
16位标识,3位标志,13位片偏移:这三个字段辅助进行实现 拆包组包
16位标识,相当于IP数据报的身份标识
把一个数据拆成多个IP数据报的时候,这三个IP数据报的标识是相同的。
3位标志和13位片偏移用于分片。
13位片偏移,描述了当前这个包的顺序。
3位标志,第二位表示“禁止分片”,第三位表示“更多分片”,如果这一位为1表示当前这个分片就是最后一个分片,如果这一位为0表示当前这个分片不是最后一个分片。
8位生存时间(TTL):
这个字段表示一个IP数据报最多在网络上存活多久,这个TTL不是一个“时间”概念,而是一个“次数”
源主机为数据包设定一个生存时间,比如64,每过一个路由器就把该值减1,如果减到0就表示路由已经太长了仍然找不到目的主机的网络,就丢弃该包,因此这个生存时间的单位不是秒,而是跳(hop)。协议字段指示上层协议是TCP、UDP、ICMP还是IGMP。然后是校验和,只校验IP首部,数据的校验由更高层协议负责。IPv4的IP地址长度为32位。
TTL的目的是为了防止这个IP数据报出现环路转发的情况
8位协议:
通过8位协议来指定传输层使用哪个协议来解析数据。
类似,传输层(例如TCP,UDP)的报头中的 目的端口就是在指定应用层使用哪个协议。
16位首部校验和:
类似于crc循环检验,只需要校验首部即可,载荷部分(就是一个完整的TCP/UDP数据报)其实已经由TCP或者UDP进行校验了。
32位源IP地址:发送人地址
32位目的IP地址:接收人地址
IP协议核心功能
1.地址管理:能够通过一系列的规则,把网络上的设备的地址给描述出来。
2.路由选择:根据当下的源地址和目的地址,规划处一条合适的路径。
在IPV4协议,ip地址是通过32位的整数表示,通过“点分十进制”,把一个32位的数字分成4份,每一份就是8bit(一个字节),八个比特位能表示的范围是【0,255】
如何解决IP地址不能分配的问题?
1.动态分配IP
接入网络的设备分配IP地址,没接入网络的设备就不分配,但是这种方法并不能从根本上解决问题。
2.NAT机制,网络地址替换
不同局域网中的ip地址可以重复,但是经过路由器到达公网的ip地址不能重复。(如图所示)
同一个局域网里的足迹,网络号要相同,主机号不能相同。
IP地址子网掩码都是32位的2进制,为了方便记忆转成10进制,通过子网掩码来区分网络位和主机位,子网掩码跟IP地址一一对应,子网掩码为1的是网络位,为0的是主机位。
如:192.168.1.2 掩码255.255.255.0 。网络位192.168.1 主机位是2
路由选择
这里的路由指的是IP协议中的“路径规划功能”
IP协议中,数据到达某个路由器之后,当前路由器并不知道网络整体的环境,当前路由器只是知道它附近的情况,IP协议寻路的过程,是一个“探索式”的过程。