tcp ip各层协议,tcp ip四层结构及协议

首页 > 经验 > 作者:YD1662022-10-29 23:25:07

从右往左分析上图,当IP模块接收到来自数据链路层的IP数据报是,它首先对该数据报的头部做CRC校验,确认无误之后就分析其头部的具体信息。

如果该IP数据报的头部设置了源站选路选项(松散源路由选择或严格源路由选择),则IP模块调用数据报转发子模块来处理该数据报。如果该IP数据报的头部中目标IP地址是本机的某个IP地址,或者是广播地址,即该数据是发送给本机的,则IP模块就根据数据报头部中的协议字段来决定将它派发给哪个上层应用。如果IP模块发现这个数据报不是发送给本机的,则也调用数据报转发子模块来处理该数据报。

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

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

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

图中的虚线箭头显示了路由表更新的过程。这一过程是指通过路由协议 或者route命令调整路由表,使之更适应最新的网络拓扑结构,成为IP路由策略。

2、路由机制

首先,我们熟悉以下路由表的内容:


tcp ip各层协议,tcp ip四层结构及协议(5)

路由器是如何按照IP地址分类的呢?或者说给定数据报的目标IP地址,它将匹配路由表中的哪一项呢?这就是IP的路由机制,分为3个步骤:

查找路由表中的数据报的目标IP地址完全匹配的主机IP地址。如果找到,就是用该路由项,没找到则转步骤2.

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

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

五、IP转发

前文提到,不是发送给本机的IP数据报将由数据报转发子模块来处理。路由器都能执行数据报的转发操作,而主机一般只能发送和接受数据报,这是因为主机上/proc/sys/net/ipv4/ip_forward内核参数默认被设置为0.我们可以通过修改它来实现主机的数据报转发功能。

对于允许IP数据报转发的系统,数据报转发子模块将对期望转发的数据报执行如下操作:

检查数据报头部的TTL值。如果TTL值已是0,则丢弃该数据报。

查看数据报头部的严格源路由选择选项。如果该选项被设置,则检查数据报的目标IP地址是否是本机的某个IP地址。如果不是,则发送一个ICMP源站选路失败报文给发送端。

如果有必要,则给源端发送一个ICMP重定向报文,以告诉它一个更合理的下一跳路由器。

将TTL值减1

处理IP头部选项。

如果有必要,则执行IP分片操作。

六、ICMP重定向报文

ICMP重定向报文也能用于更新路由表。

1、ICMP重定向报文


tcp ip各层协议,tcp ip四层结构及协议(6)

前边讨论过ICMP报文头部的3个固定字段:8位类型、8位代码和16位校验和。ICMP重定向报文的类型值是5,代码字段有4个可选值,用来区分不同的重定向类型。以下介绍主机重定向,其代码值是1.

ICMP重定向报文的数据部分含义很明确,它给接收方提供了如下两个信息:

引起重定向的IP数据报的源端IP地址。

应该使用的路由器的IP地址。

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

/proc/sys/net/ipv4/conf/all/send_redirects内核参数指定是否允许发送ICMP重定向报文,而/proc/sys/net/ipv4/conf/all/accept_redirects内核参数则指定是否允许接收ICMP重定向报文。一般来说,主机只能接收ICMP重定向报文,而路由器只能发送ICMP重定向报文。

七、IPv6头部结构

IPv6协议是网络层技术发展的必然趋势。它不仅解决了IPv4地址不够用的问题,还做了很大的改进。比如,增加了多播和流的功能,为网络上多媒体内容的质量提供精细的控制;引入自动配置功能,使得局域网管理更方便;增加了专门的网络安全功能等。

1、IPv6固定头部结构

IPv6头部由40字节的固定头部和可变长的扩展头部组成。如下:


tcp ip各层协议,tcp ip四层结构及协议(7)


4位版本号指定IP协议的版本。对IPv6来说,其值是6

8位通信类型指示数据流通信类型或优先级,和IPv4中的TOS类似

20位流标签是IPv6新增加的字段,用于某些对连接的服务质量有特殊要求的通信,比如音频或视频等实时传输的数据传输

16位净荷长度指的是IPv6扩展头部和应用程序长度之和,不包括固定头部长度。

8位下一个包头指出紧跟IPv6固定头部后的包头类型,如扩展头或某个上层协议头。它类似于IPv4头部中的协议字段,且相同的取值有相同的含义。

8位跳数限制和IPv4中的TTL含义相同

IPv6用128来表示IP地址,使得IP地址的总量达到了2的128次方,足够使用。

32位表示的IPv4地址一般用点分十进制来表示,而IPv6地址则使用十六进制字符串表示,比如“FE80:0000:0000:0000:1234:5678:0000:0012”可见,IPv6地址用“:”分割成8组,每组包含2字节。但这种方法过于麻烦,通常可以使用所谓的零压缩法来将其简写,也就是省略连续的、全零的组,比如“FE80::1234:5678:0000:0012”。不过零压缩法对一个IPv6地址只能使用一次,比如上面的例子中,字节组“5678”后面的全零组就不能再省略,否则我们就无法计算每个“::”之间省略了多少个全零组。

2、IPv6扩展头部

可变长的扩展头部使得IPv6能支持更多的选项,并且很便于将来的扩展需要。它的长度可以是0,表示数据报没有使用任何扩展头部。一个数据报可以包含多个扩展头部,每个扩展头部的类型由前一个头部中的下一个报头字段指定。目前可以使用的扩展头部如下:


tcp ip各层协议,tcp ip四层结构及协议(8)

上一页1234下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.