前言
本章将讲解千兆以太网网络层 IP 协议的内容及算法实现。IP 层的实质是在MAC 层的基础上将原有协议进行一个更加细化的定义而得。它最核心的意义,就是让 IP 地址参与到网络数据传输中,让硬件和硬件的通信传输,从网卡号作为唯一的身份识别标志,变为以 IP 地址作为身份识别标志。而 IP 层最核心的内容,就是 IP 协议数据字段的格式。
提示:以下是本篇文章正文内容,下面案例可供参考
一、IP 协议数据字段格式
IP 是 TCP/IP 协议族中最核心的协议,所有的 TCP、UDP、ICMP、IGMP 数据都以 IP 数据报的格式传输。IP 仅提供尽力而为的传输服务,如果发生某种错误,IP 会丢失该数据,然后发送 ICMP 消息给信源端。另外,IP 数据报可以不按发送顺序接收。IP 数据报的格式如下,IP 数据报的长度/类型段的数值为 0x0800,数据和填充段包括IP 头部数据和 IP 数据两个部分。
其中,和以太网帧具有帧头一样,IP 数据报也包含了一个 IP 报头部分,与 IP 协议相关的一些信息如 IP 地址,数据包长度等会被打包进 IP 报头中,然后再与需要传输的 IP 报文数据一起,作为 MAC 帧的数据和填充字段送往 MAC 层发送,接下来,将着重介绍 IP 协议首部的详细信息。
二、IP 协议首部详解
IP 数据报的格式如下:
前 20 字节和紧接其后的选项部分是 IP 数据报的首部,前 20 个字节是固定的,可选字段可有可无。首部的每一行是一个以 32bit 为单位的数据,最高位在左边,为 0bit,最低位在右边,为 31bit。4 字节的 32bit 值按照以下次序传输:首先 0-7bit,其次 8-15 比特,然后16-23bit,最后是 24-31bit,这种传输次序称为 big endian 字节序(我们在 C 语言写位操作的算法时常用到该词)。TCP/IP 首部中的所有二进制整数在网络中传输时都要求以这种次序,因此它又称作网络字节序,其他形式存储的二进制数据,如 little endian 格式,则必须在传输数据之前把首部转化成网络字节序。首部长度是指首部占 32bit 字(4 字节)的数目,因为 4 位的最大值为 15,因此首部最长为 60(4*15=60)字节,也即是说选项部分的最大值为 40 字节,不够 4 的倍数,要用 0 填充,使数据部分的起始地址为 4 的倍数。总长度指整个 IP 数据报的长度,包括首部和数据部分,16bit,最长可达 65535 字节。尽管理论上可以传送一个长达 65535 的 IP 数据报,但协议标准规定的是 1500。3 个标志位主要用来标识分片的 IP 数据报,片位移为分片的数据报的首个字节偏离整个原始数据报的位置。
以下对 IP 报头中各个字段的内容详细介绍。
版本为当前使用的 IP 协议版本号,大家最熟悉,用的最多的是 IPv4 版本,当然现在 IPv6 版本用的也越来越多了。本实验使用的是 IPv4 版本,所以在版本字段为 4就表示版本号为 IPv4。
首部长度是指首部占 32bit 字的数目,因为 4 位的最大值为 15,因此首部最长为 60字节,也即是说选项部分的最大值为 40 字节,不够 4 的倍数,要用 0 填充,使数据部分的起始地址为 4 的倍数。
服务类型:略。可直接置0
总长度指整个 IP 数据报的长度,包括首部和数据部分,16bit,最长可达 65535 字节。尽管理论上可以传送一个长达 65535 的 IP 数据报,但实际上还要考虑网络的最大承载能力等因素,故协议标准规定的是 1500。(此处可以开启巨型帧可以达到>9000 字节的大小,在接下来UDP发送中有介绍)。
3 个标志位主要用来标识分片的 IP 数据报,片位移为分片的数据报的首个字节偏离整个原始数据报的位置。
报头校验和指 IPv4 数据报报头的校验和。这个数值用来检错用的,用以确保封包被正确无误的接收到。当封包开始进行传送后,接收端主机会利用这个检验值会来检验余下的封包,如果一切无误就会发出确认信息表示接收正常。
源 IP 地址和目的 IP 地址则是该 IP 报文的发送方和接收方的网络地址,例如在我们前面的实验中,说 FPGA 的 IP 地址为 192.168.0.2,电脑的 IP 地址为 192.168.0.3,
下表为 IP 数据报中上层协议字段常见协议与其对其应的协议号。
【注:】以上数字均为10进制数据。<