IP首部学习

一. 概述

  在数据链路层中,通过MAC地址进行通信,每种数据链路的最大传输单元(MTU)都不尽相同. 而在网络层通过IP地址来进行通信.  鉴于IP层属于数据链路层的上一层,它必须不受限与不同数据链路的MTU大小.  可以说,IP抽象化了底层的数据链路. 

二. IP报文的分片与重组

  IP报文为什么要进行分片,如何分片? 下面举例来说明.

  如在以太网中,默认的MTU是1500字节, 如果是要传输4342字节的IP数据报就无法在一个帧当中发送完成.  这时,路由器将此IP数据报划分成3个分片进行发送. 而这种分片处理只要路由器认为有必要,会周而复始的进行(分片以8个字节的倍数为单位进行).

  经过分片之后的IP数据报在被重组的时候,只能由目标主机进行.  路由器虽然做分片但不会进行重组. 

三. IPv4首部

  通过IP进行通信时,需要在数据的前面加入IP首部心形.  IP首部中包含着用于IP协议进行发包控制时所要的必要信息.  

  包含以下信息:  

  1. 版本          由4比特组成,表示标识IP首部的版本号. IPv4的版本号即为4. 
  2. 首部长度    由4比特构成,表明IP首部的大小,单位为4字节(32比特).对于没有可选项的IP包,首部长度则设置为“5”. 也就是说,当没有可选项时,IP首部的长度为20字节(4*5=20).
  3. 区分服务(type of service).  由8比特构成,用来表明服务质量.
  4. 总长度 表示IP首部与数据部分合起来的总字节数. 该字段长16比特.  因此IP包的最大长度为65535(2的16次方)字节.
  5. 标识(ID) 由16比特构成,用于分片重组.同一个分片的标识值相同,不同分片的标识值不同.  通常,每发送一个IP包,它的值也逐渐递增.  此外,即使ID相同,如果目标地址,源地址或者协议不同的话,也会被认为是不同的分片
  6. 标志(flags) 由3比特构成. 标识包被分片的相关信息.
    • 比特0表示未使用.  
    • 比特1指示是否进行分片,0-可以分片,1-不可以分片.  
    • 比特2表示包被分片的情况下,表示是否为最后一个包,0-最后一个分片的包,1-分片中段的包.
  7. 片偏移 (FO:fragment offset) 由13比特构成,用来标识被分片的每一个分段相对于原始数据的位置. 
  8. 生存时间 (TTL: time to live) 由8比特构成, 它最初的意思是以秒为单位记录当前包在网络上应该生存的期限. 然而,在实际中它是指可以中转多少个路由器的意思. 每经过一个路由器,TTL会减少1,直到变成0则丢弃该包(TTL占8位,因此可以表示0~255的数字.因此一个包的中转路由的次数不会超过2的8次方256个,由此可以避免IP包在网络内无限传递的问题).
  9. 协议 由8比特构成,表示IP首部的下一个首部隶属于哪个协议.  如属于TCP,UDP,还是ICMP等可以在这个字段来指定.
  10. 首部校验和   16比特(2字节)构成. 该字段只校验数据报的首部,不校验数据部分.  它主要用来确保IP数据报文不被破坏.
  11. 源地址     32比特(4字节)构成,表示发送端IP地址.
  12. 目标地址  32比特(4字节)构成,表示接收端IP地址.
  13. 可选项   长度可变,通常指在进行实验或诊断时使用. 包括以下信息: 安全级别,源路径,路径记录,时间戳.
  14. 填充(padding) 也称作填充物.  在有可选项的情况下,首部长度可能不是32比特的整数倍. 为此,通过向字段填充0,调整为32比特的整数倍.
  15. 数据    存入数据.  将IP上层协议的首部也作为数据处理.

 

原文地址:https://www.cnblogs.com/sunnydaybyday/p/15620656.html