IP协议是TCP协议栈中的核心协议,也是网络编程的基础之一。
网络层概述
IP服务特点:
IP协议为上层协议提供无状态,无连接,不可靠的服务。
- 无状态:IP通信双方不同步状态传输信息,因此所有IP数据报的发送和接收都是相互独立的,这样也就造成了它无法处理乱序,重复的IP数据报。相对于面向连接而设定的,例如TCP协议,它能够自己处理乱序,重复的报文段。他递交给上层的内容绝对是有序的正确的。但是IP协议的状态也是有优点的,它简单高效,因为我们无需为保证它的状态而分配一些内核数据结构。
- 无连接:通信双方都不长久的维持对方的任何信息,那么就需要上层协议去指定传输的IP地址。
- 不可靠服务:不可靠指的是IP协议不能保证IP数据报完整并且准确的到达接收端。因此使用IP的上层协议需要自己做数据确认,超时重传等可靠传输机制。
IPv4头部结构:
图一:
IPv4头部结构包含20个字节。另外最多包含40个选项字节。
- 4位版本号:指定IP协议的版本
- 4位头部长度:标识有多少个四字节。
- 8位服务类型(TOS):包括一个3位的优先权字段(现在已经被忽律),4位TOS字段(最小延时,最大吞吐量,最高可靠性,最小费用),1位保留字段。以上信息决定了IP协议的可弹性。
- 16位总长度(字节数):整个IP数据报的长度。就是说IP数据报的最大程度就是2^16-1。因为MTU的限制。最大传输不可能达到这个值。
======分片传输实现原理=========
- 16位标识别:唯一标识主机发送的每一个数据报。初始值有系统随机生成。每发送一个数据报,该值就+1.因此同一个数据报的分片都具有相同的标识值
3位标志:
(1)第一位是有保留的
(2)第二位表示禁止分片(如果对这位进行了设置,IP模块将不会对数据报进行分片,所以可以想象一下我们刚才提到的,如果这个数据报的长度超过MTU,这段数据报就会被丢弃,返回ICMP差错报文)
(3)第三位表示等多分片(除了IP数据报的最后一个分片外,其他分片都设置为1)。
- 13位偏移:是分片相对原始IP数据报开始处的偏移。
这三个字段协同工作行形成了IP分段的功能。
=======================
- 8位生存时间(TTL):它是数据报到达目的地前允许经过的路由跳数。在发送过程中,每经过一个路由,该值就减1.当TTL位0时,路由器会丢弃这个数据报,返回ICMP差错报文。它可以防止数据陷入路由循环。
- 8位协议涌来区分上层协议。ICMP位1,TCP为6,UDP位17
- 16位头部校验和:它是由发送端进行填充。接收端对其进行CRC校验算法,来检验头信息在传输过程中是否被损坏。
- 32位原端IP:表示发送端IP
- 32位目的IP:表示接受端IP
- IPv4头部可变长的选项部分,最多包含401个字节,可选的IP选项包括:(1)纪录路由,(2)时间戳,(3)松散源路由选择,(4)严格路由选择 (这些的介绍会在以后进行分享)