/***********************************************************************


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包离开每个路由器的时候记录时间。


************************************************************************/