IP协议概要

IP协议服务特点

IP协议为上层提供无状态、无连接、不可靠的服务

  • 无状态:IP通信双方不同步状态传输信息,因此所有IP数据报的发送和接收都是相互独立的,所有IP数据报的发送、传输、接收都是相互独立,没有上下文关系的。这样也就造成了它无法处理乱序,重复的IP数据报。以HTTP协议为例,一个浏览器的连续两次网页请求之间没有任何关联。但它简单、高效。
  • 无连接:通信双方都不长久的维持对方的任何信息
  • 不可靠:IP协议不能保证IP数据报完整并且准确的到达接收端。因此使用IP的上层协议需要自己实现数据确认,超时重传等机制以达到可靠传输的目的。

IPv4头部结构

长度通常为20字节,除非含有可变长的选项部分
IP协议概要_第1张图片

  • 4位版本号:指定IP协议的版本。对IPv4来说,其值为4
  • 4位头部长度:标识该IP头部有多少个32bit字(4字节)。4位最大能表示15,所以IP头部最长是60字节
  • 8位服务类型(TOS):包括一个3位的优先权字段(现在已经被忽略),4位TOS字段分别表示:最小延时,最大吞吐量,最高可靠性,最小费用,其中最多有一个置为1,1位保留字段(必须置0)。以上信息决定了IP协议的可弹性。
  • 16位标识别:唯一标识主机发送的每一个数据报。初始值有系统随机生成。每发送一个数据报,该值就+1.因此同一个数据报的分片都具有相同的标识值
  • 3位标志:
    (1)第一位保留
    (2)第二位(DF)表示“禁止分片”(如果对这位进行了设置,IP模块将不会对数据报进行分片,所以可以想象一下我们刚才提到的,如果这个数据报的长度超过MTU,这段数据报就会被丢弃,返回ICMP差错报文)
    (3)第三位(MF)表示“更多分片”(除了IP数据报的最后一个分片外,其他分片都设置为1)
  • 13位偏移:是分片相对原始IP数据报开始处的偏移
  • 8位生存时间(TTL):它是数据报到达目的地前允许经过的路由跳数。在发送过程中,每经过一个路由,该值就减1.当TTL位0时,路由器会丢弃这个数据报,返回ICMP差错报文。它可以防止数据陷入路由循环。
  • 8位协议用来区分上层协议。ICMP位1,TCP为6,UDP位17
  • 16位头部校验和:它是由发送端进行填充。接收端对其进行CRC校验算法,来检验头信息在传输过程中是否被损坏。
  • 32位原端IP和32位目的IP:表示发送端IP和表示接受端IP
  • IPv4头部可变长的选项部分,最多包含40个字节,可选的IP选项包括:记录路由、时间戳、松散源路由选择、严格路由选择

IP分片

  • IP数据报的长度超过帧的MTU时,将会被分片传输。分片可能发生在发送端,也可能发生在中转路由器上,并且可能在传输过程中被多次分片。最终会在接收器上被IP模块重新组装。
  • 如下三个字段:16位数据报标识、3位的标识,13位的片偏移给分片和重组提供了足够的信息。一个IP数据报的每个分片都具有自己的头部。他们具有相同的标识值,但具有不同的片偏移。
  • 以太网的MTU位1500字节,因此它能携带的最大字节量位1480字节,因为IP头部包含20个字节。假如我们使用以太网帧传输用IP数据报封装的1481个字节的ICMP数据报。这个时候>1480字节,所以就会出现分片现象

IP路由

基本工作流程

  1. 当IP模块接受到来自网络驱动程序发来的IP数据报时,首先对头部进行CRC校验,确定这个数据包在传输过程中没有被损坏。
  2. 如果发现IP头部信息中带有源站选路选项,那么IP模块调用数据报转发子模块处理这个数据报。
    如果这个IP数据报头部结构中目标IP地址是本机的IP地址或是广播地址,就是说明这个数据报是发送给本机的,则IP模块就根据数据报的头部结构协议字段将它发给哪个上层应用。
    如果不是发送给本机的,则也调用转发子模块处理这个数据报
  3. 转发子模块首先需要检验这个数据报是否被允许转发。不允许的话这个数据报就会被丢弃。允许的话数据报转发子模块将对这个数据报执行一些操作,然后将它交给IP数据报输出子模块。
  4. IP输出队列中是所有等待发出的数据报。

路由机制

  1. 查找路由表中和数据报目的IP地址完全匹配的主机IP地址,如果找到,就使用该路由项,如果未找到,转步骤2
  2. 查找路由表中和数据报目的IP地址具有相同网络ID的网络IP地址,如果找到,就使用该路由项,如果未找到,转步骤3
  3. 选择默认路由项,这意味着下一跳的路由地址是网关

IP转发

转发操作
1. 检查数据报头部的TTL值(TTL为0丢弃这个数据报)。
2. 查看数据包的严格源路由的选择选项,如果被设置,检测数据报的目的IP地址是否和本机的某个IP地址相同, 如果不是,发送一个ICMP差错报文。
3. 给源端发送一个ICMP重定向报文(下一个文章分享)。
4. 将TTL值减1
5. 处理IP头部选项
6. 如果有必要,执行IP分片操作

重定向

ICMP重定向报文格式
IP协议概要_第2张图片
ICMP重定向报文的数据部分含义很明确,它给接收方提供了如下两个信息:
1. 引起重定向的IP数据报的源端IP地址。
2. 应该使用的路由器的IP地址。

接收主机根据这两个信息就可以断定引起重定向的IP数据报应该使用哪个路由器来转发,并且以此来更新路由表(通常是更新路由表缓冲,而不是直接更改路由表)。

一般来说,主机只能接收ICMP重定向报文,而路由器只能发送ICMP重定向报文。

IPv6头部结构

IPv6头部固定结构
IP协议概要_第3张图片

参考资料

Linux高性能服务器编程

你可能感兴趣的:(计算机网络基础)