IP协议是TCP/IP协议族的动力,它为上层协议提供无状态、无连接、不可靠的服务。
优点:简单,高效。
无状态指:IP通信双方不同步传输数据的状态信息,所有的IP数据报的传输都是独立的,所以容易发生重复和乱序的情况,IP层不予处理,而将这些错误交给上层传输层(TCP/UDP等)来处理,将其处理成有序的,正确的。
不可靠指:IP协议不能保证IP数据报准确无误到达,对数据传输的正确性不作验证,不发确认消息。它仅仅提供ICMP报文来报告错误,一旦检测到IP数据报发送失败,则发送ICMP报文给源主机。
IP协议在间接交付的情况下,两个对等的通信实体是连接在同一个网络的路由器与路由器的网络层间通信,下面介绍IP协议头部结构:
IP头部信息:头部长度:通常20字节,有选项时更长,总共不超过60字节。 而IP数据报分组总长度不超:65535字节。
逐个分析:
4位版本号:IP协议(IPv4)版本号为4
4位头部长度:标识头部有多少个4字节,即最大共15*4个字节,最小20个字节。
8位服务类型:包含一个4位优先权字段:最小延时,最大吞吐量,最高可靠性和最小费用。
16位总长度:表示整个IP数据报分组的长度,最大表示65535,但由于MTU限制,一般无法到达这个值。
16位标识:唯一的标识数据报分组。系统采用加1的方式边发送边赋值。
3位标志(保留,DF禁止分片,MF更多分片):这三个标志是为数据报分片而设置。详见后面说明。
13位分片偏移:分片相对原始IP数据报开始处的偏移。
8位生存时间(TTL):数据报到达目的地之前允许经过的路由跳数。跳一下减1,得0丢弃。
8位协议:用来区分上层协议(ICMP为1,TCP为6,UDP为17)。
16位头部校验和:仅以CRC算法检验数据报头部在传输过程中是否损坏。
32位源端口IP地址和目的端口地址很明白。
选项(可变长):记录路由,告诉途径得所有路由把IP填进来。 时间戳,告诉每个路由器都将数据报被转发的时间传进来。松散路由选择,指定一个路由器IP地址列表,必须按这个表发送,严格路由选择,数据报经过路由表。
重点说一下中间的分片部分:上图中的第二层三个部分给IP的分片和重组提供了足够的信息:
数据报分组标识:系统用+1法为每个数据报分组唯一标识此位,如果数据分组 X 的编号为K=265,因长度超过MTU而被分片,那么所有分的小片中该标识域都是K=265。
标志:共三位,其中用两位来分别指示数据报要不要分片,分片的话是不是最后的分片。第一位保留=0,第二位DF设置=1时禁止分片,所以如果数据报太大超过MTU而且不可以分片则发送失败。第三位MF设置=1时,表示接收的分片不是最后一个分片,MF设置=0,表示接收的分片是最后一个分片。
片偏移:表示当前数据报分组在完整数据报中的偏移,这里一个单位是8字节,比如片偏移为100,则代表该片在完整数据报的偏移是100*8=800字节。
来源参考:
吴功宜,《计算机网络第二版》,清华大学出版社
Andrew S. Tanenbaum,《计算机网络第四版》,清华大学出版社
谢希仁,《计算机网络第五版》,电子工业出版社
http://blog.csdn.net/ythunder/article/details/65664309
http://blog.csdn.net/leex_brave/article/details/51971053