IP协议是TCP协议栈中的核心协议,也是网络编程的基础之一。
IP数据报的长度超过帧的MTU时,将会被分片传输。分片可能发生在发送端,也可能发生在中转路由器上,并且可能在传输过程中被多次分片。最终会在接收器上被IP模块重新组装。
在IP协议解读(一)中讲述了16位数据报标识、3位的标识,13位的片偏移给分片和重组提供了足够的信息。一个IP数据报的每个分片都具有自己的头部。他们具有相同的标识值,但具有不同的片偏移。
以太网的MTU位1500字节,因此它能携带的最大字节量位1480字节,因为IP头部包含20个字节。假如我们使用以太网帧传输用IP数据报封装的1481个字节的ICMP数据报。这个时候>1480字节,所以就会出现分片现象
结构如图所示:
从以上的图片我可以分析出来,ICMP头部的8个字节被分配到第一个分片中,其中1472字节的ICMP的数据也被分配到第一个分片中,这样IP头+ICMP头部结构+部分ICMP数据组成了最大的IP分片(1500字节),剩下的一个个字节的ICMP数据被分配到第二个IP分片中(21字节)
下面我们用实例演示:
我们使用ping命令指定每次发送的大小位1473个字节
ping www.baidu.com -s 1473
我们使用tcpdump命令抓取ping过程中的icmp数据包
tcpdump -ntv -i eth0 icmp
===============查看分析抓去结果=====================
结果如图所示:
从图片中我们可以看出,前两个数据报的ip分片id(标识值)都是27300,说明这两个是同一个分片,第一个分片的offset(偏移值)为0,第二个分片的offset(偏移值)为0位1480.根据信息显示,第一个ICMP占1480个字节,第二个长度为21.
路由选择是IP协议的核心任务,指定了发送数据报到目标路径的途径
IP路由选择过程:
路由器转发模块的执行过程如下:
路由表必须具备更新,反应网络中的连接的变化,这样IP模块才能准确,高效的转发数据报。
进行实例演示。
Linux下使用明route命令查看当前主机下的路由表信息。
第一行表示子系统下的默认路由
使用route命令添加路由表
删除对应项
删除默认路由项,这样做的后果就是无法访问因特网。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/lastdays_l/article/details/47418429