IP数据报格式_协议
 
IP报头最长为60字节,最小为20字节,IP数据报最大为65535字节。
 
1  版本字段长度为4,用来表明建立数据报的IP版本,目前的IP版本是IPv4,IPv6正在发展中。IPv4的字段为0100  二进制0100等于十进制4.

2  首部长度(报头长度)指的是首部占32 bit字的数目,包括任何选项。由于它是一个4比特字段,因此首部最长为60个字节。4bit二进制最大1111为15,15个32bit段,因此IP报头最大长度为15x32bit/8=60字节.
 
    IP首部始终是32 bit的整数倍.IP数据报报头的最小长度为20个字(不含填充字段和IP选项字段的IP报头是最常见的IP报头,为20个字节)
前5个32bit段,到目的IP地址为止,共32bit x 5=160bit/8=20字节。

3   服务类型TOS,服务类型字段长度为8比特,用于指定数据报所要求的服务质量(TOS)。
 
 
4  总长度字段是指整个I P数据报的长度,以字节为单位.由于该字段长1 6比特,所以I P数据报最长可达66535字节.   
(16位二进制全为1数值为65535,因此IP数据报总长为65535字节。) 
 
总长度字段是I P首部中必要的内容。数据长度=总长-报头长度。

5   标识符长16比特,每个数据报都必须由惟一的标识符来标识,以便使接收主机能重装被分段的数据报。

6   标志位长度为3比特。用于分段控制:第0位为预留位。
        第1位表示可否分段。当该位的值为0时,表示数据报不可分段,值为1时,表示数据报可被分段。
         (请注意:2007/8/15 注:感谢网友daerba的回复,现将RFC791关于此段的描述贴于此:
 
    Flags:  3 bits

    Various Control Flags.

      Bit 0: reserved, must be zero
      Bit 1: (DF) 0 = May Fragment,  1 = Don't Fragment.
      Bit 2: (MF) 0 = Last Fragment, 1 = More Fragments.

          0   1   2
        +---+---+---+
        |   | D | M |
        | 0 | F | F |
        +---+---+---+
也就是:第1位为0时为可分段、为1时为不可分段.非常抱歉,呵呵,不过我也是对着资料写的,为了避免引起误导,特此说明,有时间会再验证还有没有出入。
 
  RFC791  [url]http://www.ietf.org/rfc/rfc0791.txt?number=791[/url] 请过往网友查证 )

 

 
 
       第2位为段是否结束位,当该位的值为0时,表示该段是原数据报的最后一段,值为1时,表示后面还有更多的分段。
 
        当网络设备要发送的数据报长度比所在网络的最大传输单元MTU大,并且标志位的第1位设置为不能分段(1)时,网络设备会向发送方返回一个因特网控制消息协议ICMP错误消息,并丢弃该数据报。除了最后一个分段外,其余分段的第2位均设置为1。

7   段偏移13比特长度,用于指定分段在原始数据报中的位置,以8个字节为单位进行计数,表示该段数据在原始数据报数据区中的偏移量。

8   生存时间TTL长度为8比特,用于指定数据报允许保留在网络上的时间。

9   协议字段长度为8比特,用于指定数据报数据区中携带的消息是由哪种高级协议建立的。协议号分配RFC790.
ICMP为1
TCP为6
UDP为17
 
10  报头校验和16比特,仅用于IP报头校验和。

11  源IP地址及目的IP地址,长度为32比特,用于指定发送者和所期望的接收者的IP地址。在数据包通过网络传输的过程中基值不会发生变化。

12  选项,填充字段用于确保将选项字段填充为最少32个比特位,以保证IP报头以32位结束。

13   填充位:包含填充信息以确保报头是32位的倍数,该域的大小可变。(上图已经包含在选项中)
 
14  数据 包括了由源结点发送的原始数据,外加TCP信息。
 

分段:分段是将一个大的IP数据报分解成几个较小的数据报段的过程。当IP模块需要通过一个具有较小MTU的网络传送较大的数据包时,就必须将其分段。

IP协议是一种不可靠的、无连接的协议,即意味着它不保证数据的可靠传输。