IP头部信息:

 出现在每个IP数据报中,用于指定IP通信的源端IP地址,目的端IP地址,指导IP分片和重组,以及指定部分通信行为。

IP数据报的路由和转发:

 发生在除目标机器之外的所有主机和路由器上。它们决定数据报是否应该转发以及如何转发。


IP服务的特点

 IP协议是TCP/IP协议族的动力,他为上层协议提供无状态、无连接、不可靠的服务。

无状态:

 是指IP通信双方不同步传输数据的状态信息,因此所有IP数据报的发送、传输和接受都是相互独立的、没有上下文关系的。

 缺点是无法处理乱序的和重复的IP数据报。接收端只负责将其数据部分交给上层协议,比如TCP协议,由它处理乱序的、

 重复的数据。

 虽然IP数据报头部提供了一个标识字段用以唯一标识一个IP数据报,但它是被用来处理IP分片和重组的,

 而不是用来指示接收顺序的。

 优点是简单高效。无需为保持通信状态分配内核资源,也无需每次传输数据时都携带状态信息。

无连接:

 是指IP通信双方都不长久地维持对方的任何信息。所以上层协议发送数据时,都必须明确指定对方的IP地址。

不可靠:

 是指IP协议不能保证IP数据报准确地到达接受端,他只是承诺尽最大努力。就是说,发生任何意外导致IP数据报发送失败,

 它就通知上层协议发送失败,因此,使用IP服务的上层协议需要自己实现数据确认、超时重传等机制以达到可靠传输的目

 的。


IPv4头部结构

长度通常为20字节,除非有可变长的选项部分。

IP头部_IP地址


横着一行为32个bit,为四个字节。

4位版本号

 指定IP协议的版本。对IPv4来说,为4。

4位头部长度

 标识该IP头部有多少个32bit(即多少行),四位最大表示15,所以IP头部最长为60字节。

8位服务类型

 包括一个三位的优先权字段(现在已忽略)四位的TOS字段和一位保留字段(保留需置0).四位的TOS字段分别表示:最小延时,

 最大吞吐量,最高可靠性和最小费用。这四位中最多只有一位置1。应用程序根据需要设置(比如ssh需要最小延时,ftp需要

 最大吞吐量)。

16位总长度

 是指整个IP数据报的长度,以字节为单位,因此IP数据报最大长度为65535-1字节。但由于MTU的限制,长度超过MTU的

 数据报都将被分片传输,所以实际传输的IP数据报的长度都远远没有达到最大值。

16位标识:

 唯一地标识主机发送的每一个数据报。其初始值由系统随机生成,每发送一个数据报,其值就加一。该值在数据报分片时被

 复制到每个分片中,因此同一个数据报的所有分片都具有相同的标识符。

3位标志字段:

 第一位保留。第二位标识禁止分片。设置后,IP将不对该数据报分片,当该数据报长度超过MTU时,IP模块将丢弃该数据包

 并返回一个ICMP差错报文。第三位表示更多分片。除了数据报的最后一个分片外,其他分片都要把该位置1.

13位分片偏移

 是分片相对原始IP数据报开始处(仅指数据部分)的偏移。实际的偏移值是该值左移三位(乘8)后得到的。因此,每个IP分片的

 数据部分的长度必须是8的整数倍。

8位生存时间TTL(time to live):

 是数据报到达目的地之前允许经过的路由器跳数。发送端设置(通常是64)。数据报每经过一次路由,该值就被路由器减一,

 为零时,路由器将丢弃该数据报,并向源端发送一个ICMP差错报文。TTL可以防止数据报陷入路由循环。

8位协议:

 用来区分上层协议。/etc/protocols文件定义了所有上层协议对应的字段的数值。例如,ICMP是1,TCP是6,UDP是17。

16位头部校验和:

 由发送端填充,接收端对其使用CRC算法检验头部在数据传输过程中是否损坏。

32位源端IP地址:

 用来表示IP数据报的发送端

32位目的端IP地址:

 用来表示IP数据报的接收端

选项字段:

 是可变长的可选信息。最多包含40字节,可用的选项有:

 记录路由:将途径的路由器的ip地址填入选项部分,用于跟踪数据报的传递路径。

 时间戳:告诉每个路由器将数据报被转发的时间(或时间与IP地址对)填入IP头部的选项部分,这样就可以测量途径路由

     之间数据报传输的时间。

 松散路由选择:指定路由IP地址列表,数据包发送过程必须经过其中所有路由器。

 严格路由选择:数据报只能经过被指定的路由器。