第二章IP协议详解

Posted yjds

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二章IP协议详解相关的知识,希望对你有一定的参考价值。

一、IP服务的的特点

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

  无状态是指IP通信双方不同步传输数据的状态信息,因此所有的ip数据报的发送,传出和接受都是相互独立的,没有上下文的联系。这种服务最大的缺点就是无法处理乱序和重复的IP数据报。比如,发送端发送出的第N个数据包可能逼第N+1个报文段后到达接收端,而同一个IP数据报也可能经过不同的路径多次到达接收端。IP数据报头部提供了一个标识字段用以唯一的标识一个 IP数据报,但它是被用来处理IP分片和重组的,而不是用来指示接受顺序的。

  无状态的优点也有,简单高效,我们无须为保持通信的状态而分配一些内核资源,也无需每次传输数据是都携带上状态信息。网络协议中,无状态是很常见的,比如UDP协议和HTTP协议就是无状态连接。以HTTP协议为例,一个浏览器连续俩次网页请求之间没有任何关系,他将被web服务器独立的处理。

  无连接是指IP通信双方都不长久的维持对方的任何信息,这样,上层协议每次发送数据报的时候,都必须明确指定对方的ip地址。

  不可靠是指IP协议不能保证数据报准确的到达接收端,他只是承诺尽最大努力。导致IP数据报发送失败。

二、IPV4头部结构。

  iPV4头部结构如下图,其长度通常为20字节,除非含有可变长的选项部分。

4位版本号 4位头部长度 8位服务类型 16位总长度(字节数)
8位生存时间TTL 8位协议 16位头部校验和
32位源端IP地址
32位目的端IP地址
选项,最多40个字节

4位版本号:制定IP协议的版本。

4位头部长度:标识该IP头部有多少个32bit字,因为4位是最大能表示15,所以IP头部最长是60字节。

8位服务类型:

16位总长度是指整个UP数据包的长度。

16位标识唯一标识主机发送的每一个报文段。

三、IP分片。

   前面提到,当IP数据报长度超过帧MTU时候,他将被分片传输。分片可能发送在发送端,也可能发生在中转的路由器上,而且可能在传输过程中被多次分片,但是只有在最终的目标机器上,这些分片才会被内核中的IP这些分片才会被内核中的IP模块重新组装。

  IP数据包头部:数据报标识,标志和片偏移。一个IP数据报的每个IP数据分片都有自己的IP头部,他们具有相同的标识值,但是具有不同的片偏移。并且除了最后一个分片外,其它分片都将设置MF标志。此外,每个分片的IP头部的总长度将被设置为该分片的长度。

  以太网,帧的长度为MTU1500字节,因此他携带的IP数据报的数据部分最多是1480字节,(IP头部需要占20字节)。考虑,用IP数据报文封装一个长度为1481字节的ICMP报文(包括ICMP头部8字节,所以长度是1473字节),则该数据报在使用以太网帧传输的时候必须被分片。

四、IP路由。

  IP协议的一个核心任务就是数据包的路由,即确定发送数据报到目标机器的路径。为了理解IP路由过程,我们先简要分析IP模块的基本工作流程。

1、IP模块工作流程:当IP模块接受来自数据链路层的IP数据报的时候,他首先对该数据报进行CRC校验,确认无误之后就分析其头部的具体信息。如果该数据包头部设置了源站选路选项,则,IP模块调用数据包转发子模块来处理该数据报。如果该IP数据报的头部中目标IP地址是本机的某个IP地址,或者广播地址,就是该数据报是发送给本机的,则IP模块就根据数据包头部中的协议字段来决定发给那个上层应用。如果IP模块发现这个数据包不是发送给本机的,则也调用数据包转发子模块来处理该数据报。

  数据包转发子模块将首先检测系统是够允许转发,如果不允许,IP模块就将数据包丢弃。如果允许,数据包转发子模块将对该数据包执行一些操作,然后将它交给IP数据报输出子模块。

  IP数据报应该发送给哪个下一跳路由(或者目标机器),以及经过那个网卡来发送,就是IP数据报路由过程。IP模块实现数据包路由的核心数据结构是路由表。这个表按照数据报的目标IP地址分类,同一类型的IP数据报将被发送往相同的下一跳路由(或是目标机器)。

  IP输出队列中存放的是所有等待发送的IP数据报,其中除了需要转发的IP数据报之外,还包括封装了本机上层数据(ICMP报文,TCP报文段和UDP数据报)的IP数据报。

2、路由机制:;路由表是如何按照IP地址分类的?

(1)查找路由表中和数据包的目标IP地址,完全匹配的主机ip地址。如果找到,就使用该路由项,没找到则转步骤2。

(2)查找路由表中和数据包的目标IP地址具有相同的网路ID的网络IP地址。如果找到,就使用该路由项;没找到则跳转步骤3.

(3)选择默认路由项,这通常意味着数据包的下一跳路由是网关。

3、路由表更新。

  路由表必须能够更新,以反映网络连接的变化,这样的IP模块才能更准确,高效的穿法数据报。route命令可以修改路由表。

五、IP转发。

不是发送给本机的IP数据报转发子模块来处理。路由器都能执行数据包的转发操作,而主机一般只发送和接受数据报,这是因为主机上的讷河参数默认被设置为0,。我们可以通过修改他来使能主机的数据报转发功能。

六、重定向。

1、ICMP重定向报文。

8位类型 8位代码 16位校验和
应该使用的路由器的IP地址
原始IP数据报的头部信息(包括可选字段)+数据部分的前8个字节

ICMP报文头部的三个固定字段,8位类型,8位代码,16位校验和。ICMP重定向报文的类型是5,代码段由4个可选值,用来区分不同的重定向类型。

 

以上是关于第二章IP协议详解的主要内容,如果未能解决你的问题,请参考以下文章

《TCP/IP详解 卷1:协议》读书笔记(第一章 概述 & 第二章 链路层)

《Linux高性能服务器编程》学习总结——IP协议详解

《TCP/IP协议详解 卷1》 第二章 Internet 地址结构

TCP/IP 详解 卷一 协议 (第二版)翻译问题(第一周)2018

linux架构学习第二十五天HTTP协议详解

tcp/ip协议详解!!