今天上课讲到这,感觉老师讲的挺好的,一些设计原理也讲的比较细致,特此记录一下。
首先 IPv4 整体报文格式如下(图来自 https://wenku.baidu.com/view/78c7a218590216fc700abb68a98271fe910eaf38.html):
因为书上网上讲 IPv4 的很多了,这里主要讲一些它们可能没提到或者我感兴趣的部分,所以看之前最好已经对这部分有一定了解。不想看全文的话,可以拖到最底下,那里是我写本文的主要目的。
版本号
IPv4 这部分填 4,IPv6 填 6
报头长度
报头长度字段占 4 位。其中每位的单位是 4 字节1。报头包括任选项。由于它是一个 4 位字段,因此报头最长为 60 字节。
对于一般数据报(没有任何 IP 选项),该字段的值为 5,即报头长度为 20 字节。
报头长度的计算公式为:报头长度 = 基本长度(20 字节)+ IP 选项长度
总长度
总长度字段是指整个 IP 数据报的长度,以字节为单位,占 16 比特。
由于该字段的长度为 16 比特,所以 IP 数据报的最大长度可达到 65536 字节。但是由于底层传输时对每次传送报文的长度有限制,当 IP 数据报的长度超过这个限制的时候2,传送这个数据报就得分片传送。例如,通常较为典型的用于以太网的该字段最大长度为 1500 字节。其中每片的区分靠 标识、标志和偏移量3 这三项来区分。当数据报分片的时候,总长度字段的值也应该变化成此片的长度,而不是 IP 数据报的总长度。
尽管 IP 支持传输一个长达 65536 字节的数据报,但是大多数的数据链路层都会对它进行分片处理;而且主机也要求不能接收超过 576 字节的数据报。由于 TCP 把用户数据报划分为若干段,因此一般来说这一点不会影响 TCP 的使用。另外大量使用 UDP 的应用(RIP、TFTP、BOOTP、DNS、SNMP 等等),它们都限制用户数据报长度为 512 字节,小于 576 字节,因此 IP 的这种限制也不会影响 UDP 的使用。
总长度的计算公式为:总长度 = 报头长度 + 数据长度
标识字段
标识字段相当于每个 IP 数据报的 ID,用于唯一的标识主机发送的每一个数据报。当一