《用tcp/ip进行网际互联》第7章 网际协议:转发IP数据报 笔记

时间:2022-10-29 10:33:30

在上一章,我们描述了IP数据报的静态格式,同时我们讨论每个字段的意义,对IP数据报有一个本质上的认识。IP数据报从开头的字段分别是:版本,首部长度,服务类型,总长度,标识,标识符,数据报偏移,生存时间,协议,首部检验和,源站IP地址,目的站IP地址。

那么静态的IP数据报应该如何在网际之间传输那,其实这个就是整个tcp/ip协议族的基石,也可以说是当前整个网络之所以存在的基石,下面我就用这篇博文记录一下这一章的学习体会。

在IP数据报传输的过程主机和路由器都参与了IP数据报的传输。一般情况下当一个主机想要与其他主机进行通信的时候,会产一个和多个IP数据报,那么怎么将这些数据报传送出去那?偶们考虑这样的一个物理模型。《用tcp/ip进行网际互联》第7章 网际协议:转发IP数据报 笔记

那么在这个模型当中,主机产生的IP数据报应该选择哪一个路由器进行传送那?我们将问题分为两个部分,第一个部分是如果IP数据报的目的是当前的物理网络,还有一个是不在当前的物理网络,其实第一种情况是每次不在同一个物理网络传输IP数据报的最后一步。

现在来讨论第一种情况,我们要知道一点在IP数据报中的源站IP地址和目的站IP地址是永远不会变化的(当然IP数据报中的生存时间和首部检验和字段是会变化的)。我们又知道IP数据报最后都是要包装在帧中在物理网络上进行传播的,那么我们可以肯定的是必须要在物理帧上动些手脚才可以。当主机确定IP数据报的目的站是在同一个网络上(在最简单的情况下我们从IP地址中可以分析出是ABC的网络地址,再对特定的比特位进行比较我们就可以确定是否在同一个网络上,当然在后面的子网和无分类网络编码的过程中会变的有些复杂)那么就使用ARP地址转换协议将IP数据报中的目的站的IP地址转换为物理地址,再将物理地址写到帧的首部,再将IP数据报的首部和IP数据报的数据部分一起当做物理帧的数据部分填入其中,这样这个物理帧就可以在物理网络上传输到指定的主句。

当我们讨论第二种情况的时候,我们就需要了解表驱动IP转发的原理了,每个路由器和主机都会维护一个路由表,在最简单的情况下考虑,我们可以认为IP数据报的格式是这样的(<目的站的IP网络地址>,<将IP数据报交付的路由器地址>),这样的散列对。当主机或者和IP地址在第二种情况下就可以查找这个表将IP数据报传送到指定的路由器上(这个路由器一定是和要转发IP数据报的路由器在同一个网络上的)。如何在物理网络上传递数据报那,同第一种情况。

现在我们可以将两种情况合在一起思考实际的转发算法了。标准的算法如下(当然以后引入子网,CIDR的时候这个算法会变的复杂的多)

《用tcp/ip进行网际互联》第7章 网际协议:转发IP数据报 笔记

这个算法中的特定的路由器和转发错误都是和ICMP数据报有关系的,这个在之后的章节中有提到。

同时我们在这个表中也可以看出转发的优先级,首先特定的路由器优先级最高,其次是和当前主机或者路由器连在同一个网络上,再就是路由表中的网络地址三列队,最后才是默认路由,同样我们也看见因为路由表只要保存网络地址而不是主机地址大大简化了路由器的复杂性!