linux高性能服务器编程学习笔记二:IP协议详解

来源:互联网 发布:吉他谱软件 编辑:程序博客网 时间:2024/06/08 12:35
1、IP协议是TCP/IP协议族的核心协议。要理解IP协议应当从了解它的头部信息开始。网络层主要的作用是路由选址和转发。选址当然选的是IP地址,所以头部信息应当包括源IP地址和目的IP地址。要知道以太网帧数据的最大长度为1500字节,那么在网络层传递给数据链路层的时候就需要对IP数据包进行分片,那么IP头部信息应当有分片字段。为了多个分片的数据包能够重组,应当有唯一一个标识字段来确认多个分片的包同属于一个IP数据包。网络层还可以调节各种各样的情况,例如最小延时,最大吞吐量,因此应当有个服务字段。防止IP数据包在网络流当中无限循环,应当有个生存时间字段。IP协议又分为IPV4和IPV6,所以应当有版本号字段。为了知道头部长度和总长度,应当有头部长度字段和总长度字段。为了知晓在传输的过程中IP数据包是否正确传输,应当有校验和字段。具体格式见:

这里特意强调以下几个字段

   4位头部长度字段,1位代表4个字节,4位最大为15,表示最长为60字节,也就是选项字段有40字节。

8位的服务类型字段,前3位通常被忽略,紧接着的4位TOS字段分别表示最小延时,最大吞吐量,最高可靠性和最小费用。最后一位保留字段置0。

3位标志字段,第一位保留,第二位DF(Don’t Fragment)表示“禁止分片”,如果设置了这个位就表示不进行分片,假如在这种情况下,数据包长度超过MTU,则会丢弃该包并发送一个ICMP差错报文。第三位MF(More Fragment)表示“更多分片”,表示还有其它分片。除了数据包的最后一个分片外,其它分片第三位都要置1.

   8位协议字段区分是哪个上层协议传递下来的包,1是ICMP,6是TCP,17是UDP。

   16位头部校验和字段利用CRC检验头部在传输过程中是否损坏。32位的源IP地址和目的IP地址在整个数据报的传输中都不变,即使经过了多次转发。

选项字段一般包括:记录路由(记录途径的所有路由器的IP地址)、时间戳(记录每次经过一个路由器时的转发的时间)、松散源路由选择(一个路由器IP地址表,途径过程中应当包括其所有的路由器)、严格源路由选择(一个路由器IP地址表,途径过程只能是地址表中的路由器)。

2、路由转发和选址主要的硬件设备是路由器,路由器当中有个路由表对接收到的IP数据包进行分类,主要和IP数据包的目标IP地址有关。路由机制如下:

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

(2)查找路由表中和数据包的目标IP地址的网络ID匹配的网络IP地址,如果找到,就使用该路由项。如没有找到,进行步骤2

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

3、当需要对一个数据包进行转发时,应当执行如下操作

(1)检查头部的TTL值,为0则丢弃

(2)查看数据头部的严格源路由选项,假如该选项被设置,则检测数据包的目标IP地址是否为本机的某个IP地址,若不是,则发送一个ICMP源站选路失败报文给发送端,并且有必要的的话,发送一个ICMP重定向报文,告诉源端合理的下一跳IP地址

(3)TTL值减1,处理IP头部选项,假如有必要,对其进行分片再转发。

4、IPV6与IPV4不同,其用十六进制字符串表示而不是点分十进制。例如:FE80:0000:0000:0000:1234:5678:0000:0012。每个部分2个字节。一般情况下,对于多个连续的0000可以省略,因此上述可变成:FE80::1234:5678:0000:0012。全0压缩只能使用一次,否则不知道中间省略了多少个全0组。

阅读全文
0 0