###IPv4地址
IPv4地址分成网络部分和主机部分
IPv4地址根据定义可分为:
- A类地址
a. 第一字节的第一位为0
b. 第一字节的数值范围为1-126 - B类地址
a. 第一字节的第一和第二位为10的一组地址
b. 第一字节的数值范围为128-191 - C类地址
a. 第一字节的第一、第二和第三位为110的一组地址
b. 第一字节的数值范围192-223
主网以及子网划分
主网采用自然掩码
- A类网络中使用8位掩码 1-126 255.0.0.0
- B类网络中使用16位掩码 128-191 255.255.0.0
- C类网络中使用24位掩码 192-223 255.255.255.0
子网划分是把整个主类网络地址继续划分为更多的子网地址,属于在主网内部重新划分不同子网行为
IPv4报文
- 版本号(Version):长度4bit 标识目前采用的IP协议和版本号
a. 0100代表IPv4
b. 0110代表IPv6 - 报文头长度(Header Length):长度4bit 这个字段的作用是为了描述IP报文头的长度
a. IP报文头的长度最长为60Byte 最小长度为20Byte - 服务类型(Type of Service):长度8bit 用于实施QoS
a. RFC 791中TOS的IP precedence将数据流分为8个优先级,取值越大优先级越高
b. RFC 2474中又对TOS进行了重新的定义,把前6位定义成DSCP,可以标识64中等级,后两位保留 - 报文总长度(Total length):长度16bit 以Byte为单位计算IP报文的长度(包括报文头部和数据),所以IP报文最大长度位65535Byte
- 标识符(identifier):长度16bit 该字段与Flags和Fragment Offset字段联合使用,对较大的上层数据包进行分段操作,路由器将一个包拆分后,所有拆分开的小包被标记相同的值,以便目的端设备能够区分那个包属于被拆分开的包的一部分
- 标记(Flags):长度3bit
a. 该字段第一位不使用
b. 第二位是DF(Don’t Fragment)位,DF位为1时表明路由器不能对该上层数据包分段。如果一个上层数据包无法在不分段的情况下进行转发,则路由器会丢弃该上层数据包并返回一个ICMP错误信息
c. 第三位是MF(More Fragment)位,当路由器对一个上层数据包分段,则路由器会在除了最后一个分段的IP报文的头中将MF位设为1 - 片偏移(Fragment Offset):长度3bit 表示该IP报文在矮族分片中的位置,接收端靠此来组装还原IP报文
- 生存时间(TTL):长度8bit 当IP报文经过每一个沿途的路由器的时候,TTL值减一,如果TTL减少为0,则该IP报文会被丢弃。这个字段可以防止由于路由环路导致IP报文在网络中不停被转发
- 协议(Protocol):长度8bit 标识了上层所使用的协议。例如ICMP(协议号为1)、OSPF(协议号89)
- 头部校验(Header Checksum):长度16bit 用来做IP头部的正确性检测,但不包含数据部分
- 源和目标地址(Source and Destination Address):这两个字段都是32bit 标识了IP报文的源地址和目的地址
- 可选项(Options):一个可变长字段,该字段属于可选项
a. 松散源路由(Loose Source Routing):给出一连串路由器接口的IP地址。IP包必须沿着这些IP地址传送,但是允许在相继的两个IP地址之间跳过多个路由器
b. 严格源路由(Strict Source Routing):给出一连串路由器接口的IP地址。IP包必须沿着这些IP地址传送,如果下一跳不在IP地址表中表示发生错误
c. 路有记录(Record Route):当IP包离开每隔路由器的时候记录路由器的出站接口的IP地址
d. 时间戳(Timestamps):当IP包离开每隔路由器的时候记录时间 - 填充(Padding):因为IP报文头长度部分的单位为32bit,所以IP报文头长度必须为32bit的整数倍,因此,在可选项后面,IP协议会填充若干个0,以达到32bit的整数倍