IP协议
概述
- IP协议是TCP/IP协议族的核心协议,也是socket网络编程的基础之一。
- IP头部信息出现在每个IP数据报中,用于指定IP通信的源端IP地址、目标端IP地址,指导IP分片和重组,以及指定部分通信行为。
- IP数据报的路由和转发发生在除目标机器之外的所有主机和路由器上。它们决定了数据报是否应该转发以及如何转发。
特点
- IP协议为上层协议提供无状态、无连接、不可靠的服务。
- 无状态,指IP通信双方不同步传输数据的状态信息,因此所有IP数据的发送、传输和接收都是相互独立、没有上下文关系的。
虽然IP数据报头部提供了一个标识字段用以标识一个IP数据报,但它是被用来处理IP分片和重组的,而不是用来指示接收顺序的。 - 无连接,指IP通信双方都不长久维持双方的任何信息。这样,上层协议每次发送数据的时候,都必须明确指定对方的IP地址。
- 不可靠,指IP协议不保证IP数据报准确地到达接收端,它只是承诺尽最大努力。然而有很多情况都能导致IP数据报发送失败。
无论是哪种情况导致了IP数据报发送失败了,发送端的IP模块一旦检测到IP数据报发送失败了,就通知上层协议发送失败,而不会试图重传。
因此,使用IP服务的上层协议,就需要自己实现数据确认、超时重传等机制以达到可靠传输的目的。
- 无状态,指IP通信双方不同步传输数据的状态信息,因此所有IP数据的发送、传输和接收都是相互独立、没有上下文关系的。
IPv4
- ipv4的头部通常为20个字节,除非含有可变长的选项部分。
- 格式:
- 4位版本号:对IPv4来说,是4。
- 4位头部长度:标识该IP头部有多少个32位字(也就是多少个4字节)。4位能表示的最大是15,即IP头部最长是60字节。
- 8位服务类型:包括3位优先权,4位TOS,1位保留(0)。其中,4位TOS分别表示:最小延时,最大吞吐量,最高可靠性和最小费用。
- 16位总长度:整个IP数据报的长度,最大65535。长度超过MTU的数据报都将被分片传输。
- 16位标识:唯一地标识主机发送的每一个数据报(初始值随机,每次加1)。
- 3位标志:第一位保留,第二位标识禁止分片,第三位标识更多分片。
- 13位片偏移:分片相对原始IP数据报开始处的偏移。
- 8位生存时间:数据报到达目的地之前允许经过的路由器跳数。
- 8位协议:区分上层协议。ICMP是1,TCP是6,UDP是17。
- 16位头部校验和:由发送端填充,接收端使用CRC校验数据报头部(仅校验头部)。
- 32位源端IP地址:数据报的发送端。
- 32位目的端IP地址:数据报的接收端。
- 选项:最多包含40个字节。包括记录路由、时间戳、松散源路由选择,严格源路由选择。
IP分片
- 当Ip数据报的长度超过帧的MTU时,它将被分片传输。
- 一个IP数据报的每个分片都具有自己的IP头部,它们具有相同的标识值,但具有不同的片偏移。
并且除了最后一个分片外,其他分片都将设置MF标志。
此外,每个分片的IP头部的总长度字段将被设置为该分片的长度。 - 以太网的MTU是1500字节。因此它携带的IP数据报的数据部分最多是1480字节。
- IP层传递给数据链路层的数据可能是一个完整的IP数据报,也可能是一个IP分片,它们统称为IP分组。
IP路由
- IP数据报应该发送至哪个下一跳路由(或目标机器),以及经过哪个网卡来发送,就是IP路由过程。
- IP模块实现数据报路由的核心数据结构是路由表。这个表按照数据报的目标IP地址分类,同一类型的IP数据报将被发往相同的下一跳路由器。
- IP路由策略
- 通过路由协议后者route命令调整路由表,使之更适应最新的网络拓扑结构,称为IP路由策略。
- 可以使用route或者netstat查看路由表。route也可以修改路由表。
- 关于IP地址分类:
- 查找路由表中和数据报的目标IP地址完全匹配的主机IP地址。如果找到,就使用该路由项。没找到就走第二步。
- 查找路由表中和数据报的目标IP地址具有相同网络ID的网络IP地址。如果找到,就使用该路由项。没找到就走第三步。
- 选择默认路由项,这通常意味着数据报的下一跳路由是网关。
- 通过route命令或其他工具手工修改路由表,是静态的路由更新方式。
通过BGP、OSPF等协议来发现路径,并更新字节的路由表,是动态的、自动的更新方式。
ICMP重定向
- 一般来说,主机只能接收ICMP重定向报文,二路由器只能发送ICMP重定向报文。
IPv6
- 头部由40个字节的固定头部和可变长的扩展头部组成。
- 格式:
- 4位版本号:对IPv6来说,是6。
- 8位通信类型:指示数据流通信类型或优先级
- 20流标签:用于对某些连接的服务质量有特殊要求的通信,比如音频或视频等实时数据传输。
- 16位净荷长度:Ipv6扩展头部和应用程序数据长度之和,不包括固定头部长度。
- 8位下一个包头:紧跟IPv6固定头部后的包头类型。
- 8位跳数限制:数据报到达目的地之前允许经过的路由器跳数。
- 128位地址:IPv6用128位表示IP地址。
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 51CTO:Linux C++网络编程三08/16
- ♥ Linux 基于文件指针的文件操作(缓冲)03/23
- ♥ Linux目录的作用03/16
- ♥ Linux 高性能服务器编程:I/O复用二12/12
- ♥ Linux 高性能服务器编程:高性能定时器12/18
- ♥ Linux 高性能服务器编程:HTTP相关11/27