前言
IP协议是位于OSI模型的第三层协议,其主要目的就是使得网络间可以相互通信。在这一层上运行的协议不止IP协议,但是使用最为广泛的就是互联网协议。
什么是IP数据报
TCP/IP协议定义了一个在因特网上传输的包,称为IP数据报(IP Datagram)。IP数据报是一个与硬件无关的虚拟包,由首部和数据两部分组成。首部部分主要包含版本、长度和IP地址等信息。数据部分一般用来传达其他协议如TCP、UDP和ICMP等。整个IP数据报的的首部表示总长度的字段位数为16位,于是可以表示的数据报最大大小为65535,减去首部的最小大小20字节,于是最大payload(负载/载荷)就为65515。但是,由于以太网数据报的payload部分最大只有1500字节,于是如果IP数据报的大小超过了1500字节,就需要分片
。
IP数据包分析
IP分片数据包分析
当IP数据报的数据部分大于1480(1500-20)字节,IP层就会对数据进行分片,封装到不同的数据包中然后发送。
使用PingPlotter软件产生数据包大小为5000字节(IP20字节首部+4980数据)的ICMP报文,发送给目的主机66.249.89.147。
5-8帧是一个完整的ping请求包。下面将详细分析5-8帧的详细信息。
第5帧数据包的标识符0x74fe,所以后面拥有此标识符的数据包原与该帧属于一个数据包。标志位的MF=1说明后面还有分片存在。因为是第一个分片,所以分段偏移为0。
在这里我们可以做一个运算,猜测后面其余分片的大小以及它们的分段偏移。
第一个分片帧的大小为1514字节,去掉共14字节的帧首部和尾部。分片IP数据包的大小为1500字节(首部20字节+数据1480字节)。原数据包的数据部分有4980字节,于是还有4980-1480=3500字节大小的数据。我们可以假设payload都尽量为最大值。那么推算:第二个分片IP数据包的payload为1480字节,其分段偏移就为第一分片长度1480/8=185。分段偏移字段一位代表8字节。第三个分片IP数据包的payload也为1480字节,其分段偏移就为370(第一个分片长度+第三个分片长度)。然后原数据包的数据部分还剩540字节。第四个分片IP数据包的payload就为540字节,其分段偏移为555(前三个分片长度),并且MF标志位为0,该数据包后面没有分片了。我们来看下后面的分片是否如此:
小结
在理解IP协议首部字段的含义之后,进行抓包分析理解会理解的更深刻。尤其是对IP分片的理解。在学习理论时,总有种不实在的感觉,在利用Wireshark抓包并进行推算后,才实在一些。