/***********************************************************************
IPV4头部各字段的含义:
版本(Version):4位,标识了数据包的IP版本号,这个字段设置为0100表示IPV4,设置为0110表示IPV6。
报头长度(header length):4位,报头长度因为数据包的可选项的大小会发生变化,最小的报头长度为20个八位组,
最大可以扩展到60个八位组
服务类型(Type of Service ToS):8位,用来指定特殊数据包的处理方式。
这个子段可以拆分成两个部分:Precedence和TOS。TOS目前不太使用,
而Precedence则用于QOS应用(TOS字段的详细描述RFC 1340 1349)。
总长度(Total Length):16位,接受者用IP数据包总长度减去IP报头长度,就可以确定数据报数据有效载荷的大小,
IP数据包的最大长度为65535。
标识符(Identifier):16位,通常与标记字段(Flag)和分段偏移字段(Fragment offest)一起用于数据包的分段。
在数据包大于MTU时,数据要被分段,然后路由器在每片数据包的标识字段上打上相同的标记,
以便于接受设备可以识别出属于一个数据包的分段。
标记字段(Flag):3位,第一位没用;第二位是DF(不分段位)DF为1时表示路由器不能对数据包进行分段处理,
如果路由器因为不能分段而未被转发,则会丢弃该包并向向源发送错误信息;
第三位则为MF(更多分段位),当路由器对数据包进行分段时,除了最后一个MF设置为0外,
其他所有的分段MF位均设置为1,直到接受者收到MF为0的分段为止。
分段偏移(Fragment offest):13位,用于指明分段起始点相对于报头起始点的偏移量,
分段便宜字段可也使接受者按照正确的顺序重组数据包。
生存时间(TTL Time To Live):8位,当IP包进行传送时,先会对该字段赋予某个特定的值。
当IP包经过每一个沿途的路由器的时候,每个沿途的路由器会将IP包的TTL值减少1。如果TTL减少为0,则该IP包会被丢弃。
这个字段可以防止由于故障而导致IP包在网络中不停被转发。
协议(Protocol):8位,标识了上层所使用的协议,差不多有100多个不同的协议号,
例如协议号1:ICMP、2:IGMP、6:TCP、17:UDP等等。
报头校验和(Header Checksum):是针对IP报头的就错字段。
由于IP包头是变长的,所以提供一个头部校验来保证IP包头中信息的正确性。
源地址和目的地址(Source and Destination Address)
可选项:
1.松散路由选择(Loose Source Routing):给出一连串路由器接口的IP地址,IP包必须沿着这些IP地址传送,
但是允许在相继的两个IP地址之间跳过多个路由器。
2.严格路由选择(Strict Source Routing):给出一连串路由器接口的IP地址,IP包必须沿着这些IP地址传送,
如果下一跳不在IP地址表中则表示发生错误。
3:记录路由(Record Route):当IP包离开每个路由器的时候记录路由器的出站接口的IP地址。
类似于路由追踪,但是不同点在于记录了双向路径上的出站接口信息。
4:时间戳(Timestamp):当IP包离开每个路由器的时候记录时间。
************************************************************************/