一、网络层
1、IP报文头
版本(Version):长度为4比特,有IPv4和IPv6这两个版本。因为这两个版本的报头格式不同,所以这个位置是很重要的,它直接影响了主机在解析报文时按照什么版本来读取哪些位置的数据。
报头长度(Header Length):长度为4比特,表示 IP报文头部的长度,以32比特(4字节)为单位递增,该字段的最小值为5,也就是说报文长度的最小值为5×32比特(4字节)=20字节。如此演算,如果该字段4比特都置位,等于十进制的15,15×32比特(4字节)=60字节,也就是说,IP报文的头部长度最大为60字节。
服务类型(Type of Service):长度为8比特。该字段指出应该如何处理数据报文,也有文献称其为差分服务、区分服务。
总长度(Total Length):长度为16比特,表示该IP报文的总大小,包括报头和携带的数据。
标识(Identification):标识符用于是否属于统一个数据包的分片,以区别同一主机或其他主机发送的其他数据包的分片,保证分片被正确的重新组合
标志位(Flag):标志字段用于判断是否已经收到最后一个分片,最后一个分片的标志字段为0,其他分片的标志字段为1,目的端在收到标志字段为0的分片,开始重组保文。
分片偏移(Fragment Offset):片偏移表示每个在原始报文中的位置,第一个分片的片偏移为0,第二个分片的片偏移紧跟第一个分片的第一个比特的位置
存活时间(Time To Live,TTL):长度为8比特,表示报文在网络中可以生存的时间,当计时器到期时该报文将被网络丢弃。有趣的是,虽然设计之初是按照时间这个概念来设计的,然而在现代网络环境中设备的转发速度很快,一般经过一台转发设备的时间都非常短(一般不会超过1秒),于是就直接在生存时间上减少1秒,最后,这一设计就变成了实际上是计算报文经过的转发设备数量了,也就是我们将要在路由部分了解的“跳数”。一般情况下,该值始发时根据设备和环境不同,可能是64、128或255。当TTL为0时会丢弃数据包。
协议(Protocol):长度为8比特,标识承载数据使用什么协议,以便于接收者将数据交给相应的协议或者程序来处理;支持网络层协议和上层协议,比如TCP/UDP/ICMP/ARP/OSPF,等等。
报头校验和(Header Checksum):长度为16比特,是对报头进行循环冗余校验(Cyclic Redundancy Check,CRC)的结果。
源 IP地址(Source Address):长度为32比特,表示发送者的 IP地址。
目的 IP地址(Destination Address):长度为32比特,表示接收者的 IP地址。
选项(Options):用于安全、测试等目的。需要注意的是,根据在 RFC 791中的定义,该字段的长度必须为32比特的倍数。当没有选项时,可以为0;如果有且不足32比特时,则需要以0来填充至32比特的倍数。
2、网络通信
源主机向其他主机发送报文之前需要检查源ip和目的ip是否属于同一个网段,如果是同一个网段则将报文下发到底层协议进行以太网的封装处理,如果目的地址和原地址在不同网段则主机需要获取下一跳路由的ip地址然后将报文下发到底层协议封装
3、无类域间路由
将路由表中若干条路由汇聚成一条路由
4、网关
网关用来转发来自不同网段之间的数据包
跨网段需要路由功能
5、IP包分片
标识(Identification):标识符用于是否属于统一个数据包的分片,以区别同一主机或其他主机发送的其他数据包的分片,保证分片被正确的重新组合
标志位(Flag):标志字