网络层从 网络层 、IP与子网掩码 前前后后我们也说了两次了,IP
这个东西絮絮叨叨的也一直在提。今天我们来解开IP协议的面纱,还记得我们之前在数据链路层说的物理帧的结构吗?就是这样:
其中Head叫标头,包含源和目的MAC地址,那时我们还没有IP的概念,但是我们用广播的方式也已经能实现全世界范围的通信,但之后我们否定了这种方式,因为会造成网络拥堵,浪费资源。因此就有了子网络,自此,MAC地址和IP地址就随机的结合在了一起,网络通信发送的数据包中也就有了IP地址。但是上面说的帧头部(Head)中只包含MAC地址,并没有IP地址的栏位,那么是否需要修改数据定义,再添加一个栏位呢?
回答是不需要,我们可以把IP数据包直接放进以太网数据包的”数据”部分,因此完全不用修改数据链路层帧的结构。这就是互联网分层结构的好处:上层的变动完全不涉及下层的结构。我们先来说IP数据包,具体来说,IP数据包也分为”标头”和”数据”两个部分。
“标头”部分主要包括版本、长度、IP地址等信息,”数据”部分则是IP数据包的具体内容。IP数据包的”标头”部分的长度为20到60字节(下次我们仔细研究),整个数据包的总长度最大为65,535字节。因此,理论上,一个IP数据包的”数据”部分,最长为65,515(65,535-20)字节。前面说过,以太网数据包的”数据”部分,最长只有1500(MTU)字节。因此,如果IP数据包超过了1500字节,它就需要分割成几个以太网数据包,分开发送了。我们将它放进以太网数据包后,以太网数据包就变成了下面这样。
上面红色的是网络层的IP数据包,它又作为了数据链路层“帧”的数据部分。是不是就能感受到这种从上向下逐层包装的意思,上层的数据包作为下层的数据部分,下层加入自己的包头组成自己本层完整的数据包。再往下层传递又作为下层的数据包,直到数据链路层的帧,最后被转换成高低电位发送。下面我们研究下IP数据包的包头,如图:
来看看每个字段的具体含义:
- 版本号 占4位,指IP协议的版本。IPv4的值为 4
- 头部长度 占4位,标识有多少个32bit字(4字节),4位最大为1111,能表示15,因此IP头部最长为15*4=60字节。
- 服务类型 占8位,可以设置不同的服务功能,例如小延迟和大吞吐量。
- 数据报总长度 总长度指首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据报的最大长度为2^16-1=65535字节。
- 序列号 占16位。能唯一标识主机发送的每一个数据报。
- 分片标志 三个bit位。第一位保留,未使用。第二位是DF(Don’t Fragment),如果为1,表示未发生分片。第三位是MF(More Fragment),如果为1,表示发生了分片,并且除了分片出的最后一个报文中此标志为0,其余报文中此标志均为1。
- 偏移量 占13位。分片相对于原始IP数据报开始处的偏移。
- 生存时间 占8位,生存时间字段常用的的英文缩写是TTL(Time To Live),表明是数据报在网络中的寿命。每经过一个路由器时,就把 TTL值减1。当TTL值为0时,就丢弃这个数据报。
- 上层协议 占8位,协议字段指出此数据报携带的数据是使用何种上层协议,以便使目的主机的IP层知道应将数据部分上交给上层哪个处理过程。
- 首部检验和 占16位。由发送端填充,接收端对其CRC检验以确定头部是否损坏。
- 源IP地址 占32位。标识源IP。
- 目的IP地址 占32位。标识目的IP。
可以看到IP数据包头部还有许多除过IP之外的字段,他们一起配合才实现了网络层的重要功能。