IP网络层

一、IP网络层概述

IP网络层

在TCP/IP协议的Internet中,网络层由IP协议实现:

  1. everything is over IP
  2. IP is over everything

IP网络是数据报网络:

  1. 无连接
  2. 简单网络,终端复杂(可靠性实现在TCP)

IP网络层核心功能还是网络层的基本功能:抓发,路由

IP协议的配套协议:

  1. ICMP协议(Internet Control Message Protocol),一般用于差错报告等,它最终会使用IP协议
  2. ARP协议(Address Resolution Protocol),地址解析协议,用于查找硬件的物理地址(链路层Mac地址),IP协议会使用它
  3. 路由协议(RIP、OSPF、BGP等),路由协议最终会填充转发表(路由表)

二、IP数据报格式

2.1 抓包

IP网络层

2.2 格式

IP网络层

首部字段:只有4位,最大值为15,所以是不够标识首部长度的,最终这个字段以4字节为单位。抓包中为5,实际为5*4为20字节。

服务类型字段:在1998年被修改为区分服务,抓包里面的Differentiated Service Field字段,一般性情况下不使用。

总长度:16比特,最大可以65535,表示IP数据报的总长度可以达到65535字节,但是实际一般最大为1500字节,因为下层链路层的MTU一般为1500字节。

生存时间(TTL) : time to live,寿命,用于确保数据报不会永远在网络中传播,每经过一个路由器,ttl减一,当TTL为0时,这个数据报会被丢弃。

标识、标志物、片偏移,这三个字段为IP数据报分片使用。

源IP地址,目的IP地址:各32位。

选项字段:一般不用

填充:当有选项字段,但是不足32位时用于补齐32位用。

由上面分析看到,一个IP数据报其IP头部长度一般为20字节。

数据部分:为TCP报文,其中TCP的头部长度一般也为20字节

最终可以得出,一个IP数据报,其有固定的头部开销40字节。

二、IP数据报分片

IP数据报最终要经过链路层进行传递,每次所能传递的数据大小取决取决于链路层的最大传输单元,英文名字叫做MTU(Maximum Transmission Unit)。比如目前主流的局域网技术以太网的MTU是1500字节。

问题:当上游IP数据报的数据长度大于下游链路层的MTU时候怎么办?

类比:IP数据报类似于一车沙子(1000KG),到了河边以后需要用船运输过河(船类似于链路层),但是船一次只能运输100KG(类似于MTU),这个就很好解决了,把沙子拆分成10份,分10次让船运输过去,等十分沙子都全部传输到河对岸后,再重新组装成一车即可。。IP数据报超过MTU后的处理办法也是类似的,也是对IP数据报进行分片,最终全部传输完毕后在进行组合。

分片示意图

IP网络层

分片相关的字段

IP网络层

在IP数据报的格式中"标识"、“标志位”、“片偏移”这三个字段用于专门处理IP数据报分片的case。

IP网络层

标识(Identification):是IP软件在存储器中的一个计数器,每生成一个IP数据报,这个计数器就+1。当IP数据报的长度大于MTU需要分片时候,被拆分的IP数据报的标识字段都被赋值为原有IP数据报的标识的值,这样这些分片就拥有了相同的标识,最终传输完毕后相同的标识用于正确的组装在一起。

标志位(Flags)

  1. DF字段(Don't fragment):0/1。DF=1,表示不能分片,此时如果IP数据报的长度大于MTU,路由器直接丢弃。DF=0,表示可以分片。
  2. MF字段(More fragment):0/1。MF=1标识后面还有分片。MF=0表示是最后一个分片或者没有分片。

片偏移(Fragment Offset):分片的偏移量,分片在原数据报里面的相对偏移量,以8字节为单位。例子(谢希仁-计算机网络)

IP网络层

以上是IPv4的分片相关的说明,实际的网络传输中很少分片,在TCP的MSS会控制大小,一般不会超过MTU。

分片的组装在端系统中进行,路由器不就行组装。

三、IP地址编制

IP地址用于标记主机和路由器的接口,IP地址和接口关联,不是标记主机本身

IP地址

32位,点分10机制标识。192.168.11.25

格式:

  1. 网络号(NetId)
  2. 子网号(SubId)
  3. 主机号(HostId)

子网掩码:相应IP地址除了主机号以外全部为1。和对应IP地址按位取add,即可得到网络号和子网号。最终用于路由。

无类域间路由CIDR(Classless InterDomain Routing)

a.b.c.d/x。x为前缀长度,系统前缀的网络代表一个子网。

  1. 方便子网划分
  2. 减少路由表的大小,进行路由聚合
上一篇:一文搞懂什么是MTU


下一篇:带你深入熟悉你所不知道的ICMP