LWIP应用开发|IP协议原理

IP协议原理

1. 网络地址转换

网络地址转换(Network Address Translation,NAT)诞生于1994年,它的提出是在IPv4地址资源面临枯竭的背景下,NAT在一定程度上,能够有效的解决公网地址不足的问题。

NAT的工作原理就是重写通过路由器的数据包的识别信息。NAT路由器将其管理的内部主机发送的数据包的源IP地址由局部地址变为全局地址,从外部传输过来的数据包则做相反转换以分配到合适的内部主机。

在这里插入图片描述

2. IP数据报

IP协议提供不可靠无连接的数据报传输服务,IP层提供的服务是通过IP层对数据报的封装与拆封来实现的。IP数据报是一个与硬件无关的虚拟包,由IP首部和数据区两大部分,其中IP首部是为了正确传输高层数据而加的各种控制信息,数据区包括高层协议需要传输的数据。

IP数据报的格式如下图示:

在这里插入图片描述

IP数据报各字段功能如下:

  • 版本:占据4bit空间,该字段规定了数据报的IP协议版本,对于IPv4,该值为4;对于IPv6,该值为6;通过查看版本号,路由器能够确定如何解释IP数据报的其他部分,不同的IP版本使用不同的数据报格式
  • 首部长度:占据4bit空间,用于记录IP首部的数据的长度;可表示的最大十进制数是15,但是该字段所表示的数的单位是字(32bit),即当该字段为15时,首部长度就达到15*4=60字节
  • 服务类型(TOS):占据8bit空间,包含在IPv4首部中,以便使不同类型的IP数据报(例如,一些特别要求低时延、高吞吐量或可靠性的数据报)能相互区别开来。简单来说就是路由器根据这个字段的值来为数据报提供(选择)最合理的路径
  • 数据报长度:占据16bit空间,是指整个IP数据报的长度(首部区+数据区),以字节为单位。由于该字段长度为16位二进制数,因此理论上IP数据报最长可达65536个字节(事实上受物理网络的限制,要比这个数值小很多);然而,数据报很少有超过 1500字节的,这是因为底层链路硬件不允许那么大的数据报出现在链路上,以太网数据帧的最大长度为 1500 个字节,当有一个很大的 IP 数据报出现的时候,就需要进行分片处理;而如果IP数据报的数据很少的时候,比如少于 46个字节,那么在以太网进行发送数据的时候会填充一定的字节以满足以太网帧最小长度
  • 标识:占据16bit空间,用于表示IP层发送出去的每一份IP数据报,在发送每一份报文,该值加 1,在分片的时候,该字段会被复制到每个分片数据报中,在目标接收主机中,使用该字段判断这些数据是否属于同一个IP数据报
  • 标志:占据3bit空间,第一位保留未用,第二位是不分片标志位,如果该位为 1,则表示IP数据报在发送的过程中不允许进行分片,如果这个IP数据报的大小超过链路层能承载的大小,这个IP数据报将被丢弃,如果该位为0则表示IP层在必要的时候可以对其进行分片处理;第三位为更多分片位,如果为1则表示该分片数据报不是整个IP数据报的最后一个分片,如果为0则表示是整个IP数据报的最后一个分片
  • 分片偏移量:占据13bit空间,表示当前分片所携带的数据在整个IP数据报中的相对偏移位置(以 8 字节为单位),目标主机必须受到以0偏移量开始到最高偏移量的所有分片,才能将分片进行重装为一个完整的IP数据报,并且重装IP数据报的依据就是分片的偏移量
  • 生存时间(Time-To-Live,TTL):占据8bit空间,用来确保数据报不会永远在网络中循环(例如由于长时间的路由选择环路)。每当IP数据报由一台路由器处理时,该字段的值减 1,若TTL字段减为0,则该数据报必须丢弃,同时会返回一个ICMP差错报文给源主机,这样数据就不会永远在网络中漂流而占据资源
  • 上层协议:占据8bit空间,该字段仅在一个IP数据报到达其最终目的地才会有用。该字段的值指示了IP数据报的数据部分应交给哪个特定的传输层协议。例如,值为6表明数据部分要交给 TCP,而值为17表明数据要交给UDP。在 IP 数据报中的协议号所起的作用,类似于运输层报文段中端口号字段所起的作用。常用网际协议编号如下图示:

在这里插入图片描述

  • 首部检验和:占据16bit空间,用于协议头数据有效性的校验,可以保证IP报头区在传输时的正确性和完整性。头部检验和字段是根据IP协议头计算出的检验和,它不对头部后面的数据进行计算
  • 源IP地址:占据32bit空间,表示发送端IP地址
  • 目标IP地址:占据32bit空间,表述目的端IP地址
  • 选项字段:占据0~40个字节,它允许IP首部被扩展,首部选项在日常生活中还是比较少使用的,因此在每个IP数据报首部中必须存在的字段是不包括选项字段的,这样能够节约开销,如果与选项字段就添加,而如果没有就无需理会
  • 数据区域:是IP数据报的最后的一个字段,也是最重要的内容,因为有数据区域才会有数据报首部的存在,在大多数情况下,IP数据报中的数据字段包含要交付给目标IP地址的运输层(TCP协议或UDP协议),当然数据区域也可承载其他类型的报文,如ICMP报文

3. IP协议抓包分析

使用ping -l size命令对指定IP地址ping指定大小字节的数据。如下图示,对IP地址ping了4096个字节的数据:

在这里插入图片描述
打开wireshark进行抓包,监听IP地址(192.168.1.71)后,在对该IP地址ping 4096字节的数据。可以抓取到如下数据包:

  • 由于以太网数据帧的最大长度为1500个字节,因此4096字节的数据被分为了3个片。下图中标志(Flags)字段的第三位为1表示该数据报是分片数据报,分片偏移量(Fragment offset)为0

在这里插入图片描述

  • 第二段数据报的标志(Flags)字段的第三位为1表示该数据报仍然是分片数据报,此时分片偏移量(Fragment offset)为1480

在这里插入图片描述

  • 第三段数据报的标志(Flags)字段的第三位为0表示是整个IP数据报的最后一个分片,此时分片偏移量(Fragment offset)为1480;三段组成一个完整的ICMP数据报

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Chuangke_Andy/article/details/114359127