TCP/IP 详解卷一 - 第3章 IP 网络协议

论坛 期权论坛 脚本     
已经选择匿名的用户   2021-6-10 14:10   3042   0

3.1 引言

IP 是 TCP/IP 协议族中最为核心的协议。所有的 TCP、UDP、ICMP 和 IGMP 数据都是以 IP 数据报格式传输。IP 协议处于网络层,网络层主要是实现点对点的通信。IP 协议是一种不可靠、无连接的协议。

不可靠即不能保证 IP 数据报能够成功到达目的端,在传输过程中发生某种错误时,IP 协议会丢弃数据报,然后发送 ICMP 消息给信源端,其他任何要求的可靠性必须由上层来提供。

无连接即 IP 协议并不维护任何关于后续数据报的状态信息,每个数据报都是相互独立的。因此,IP 数据报可以不按顺序接收。

IP 地址

在计算机通信中,为了识别通信对端,必须有一个类似于地址的识别码进行标识。数据链路层中使用 MAC 地址进行标识同一个链路中不同计算机的一种识别码。相同,在网络层的 IP 中,使用 IP 地址来识别通信的主机。IP 地址由 32 位整数来表示,每 8 位为一组,分成 4 组,每组以”.“隔开,再将每组数转换为十进制。

3.2 IP 首部

IP 数据报的格式如下图所示,普通的 IP 首部长为 20 字节,除非含有选项字段。

前 20 字节和紧接其后的选项部分是IP 数据报的首部,其中选项是可选的。首部的每一行是一个 32 位字的单位,最高位在左边,为 0 bit,最低位在右边,为 31 bit。4 个字节的 32 bit 值以下面的次序传输:首先是 0~7 bit,其次是 8~15 bit,然后 16~23 bit,最后是 24~31 bit。这种传输次序称为 big endian 字节序(大端字节序)。由于 TCP/IP 首部中所有二进制整数在网络中传输时都要求以这种次序,因此它又称为网络字节序。其他形式存储的二进制数据,如 little endian 格式,则必须在传输数据之前把首部转化成网络字节序。

版本号由 4 bit 来确认 IP 首部属于哪个版本,例如为IPv4 时,则其值为 4。

首部长度是指首部占 32bit 字的数目,包括任何选项。因为 4 位的最大值为 15(即从 0 开始计算),且由于是一个 4 比特段,因此首部最长为 60 字节,也即是说选项部分的最大值为 40 字节,不够 4 的倍数,要用 0 填充,使数据部分的起始地址为 4 的倍数。普通IP数据报的这个字段值是5,即没有选项这一项。

服务类型(TOS)字段包括一个 3 bit的优先权子段,4 bit 的 TOS 子字段和 1 bit 未用位但必须设为 0。4 bit 的 TOS 分别代表:最小延时、最大吞吐量、最高可靠性和最小费用。4 bit 中只能置其中 1 bit ,若所有 4 bit 均为 0,则意味着是一般服务。

总长度字段是指整个 IP 数据报的长度(即包括 IP首部和数据),以字节为单位。利用首部长度字段和总长度字段就可以确定 IP 数据报中数据内容的起始位置和长度。由于该字段是 16 比特,所有 IP 数据报总长度可达 65535 字节,但是大多数的链路层都会对其进行分片,而且,实际上还要考虑网络的最大承载能力等因素,主机并不要求接收超过 576 字节的数据报。

3.3 IP 路由选择

从概念上说, I P路由选择是简单的,特别对于主机来说。如果目的主机与源主机直接相连(如点对点链路)或都在一个共享网络上(以太网或令牌环网),那么IP数据报就直接送到目的主机上。否则,主机把数据报发往一默认的路由器上,由路由器来转发该数据报。大多数的主机都是采用这种简单机制。

发送数据报时使用网络地址(即 IP 地址),但是仅仅只有 IP 地址也不能够把数据报成功发送到达目的端地址,还需要一种类似于路由器或主机的信息,以便真正发往目的地址,这种信息存储在路由控制表中。路由控制表有两种形式:一种是管理员手动设置(即静态路由控制表);另一种是路由器与其他路由器交换信息时自动刷新(即动态路由控制表),为使动态路由控制表正常工作,必须设置好路由协议。

路由控制表记录着目的 IP 地址(网路地址)、下一步应该发送至路由器的 IP 地址标志(该标志确认目的 IP 地址是网络地址还是主机地址或下一个路由器是否为路由器接口卡)。在发送 IP 数据报时,首先要确认 IP 数据报中首部的目的地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将 IP 数据报转发给相应的下一个路由器。若路由控制表存在多个相同的网络地址记录,就选择一个相同位数最多的网络地址。若路由控制表中下一个路由器的位置记录着某个主机或路由器网卡的 IP 地址,则意味着发送端和目的端属于同一条链路。

IP 路由选择是逐跳地进行,在路由控制表中,IP 并不知道到达任何目的的完整路径。所有的 IP 路由选择只为数据报传输提供下一个路由器的 IP 地址。IP 路由选择主要按以下步骤:

1. 搜索路由表,优先搜索匹配主机(网络号和主机号都要匹配),如果能找到和 IP 地址完全一致的目标主机,则将该包发向目标主机;

2. 搜索路由表,如果匹配主机失败,则匹配同子网的路由器,这需要子网掩码的协助。如果找到路由器,则将该包发向路由器;

3. 搜索路由表,如果匹配同子网路由器失败,则匹配同网络号路由器,如果找到路由器,则将该包发向路由器;

4. 搜索路由表,如果以上都失败了,就搜索默认路由,如果默认路由存在,则发包;

5. 如果以上都失败了,就丢掉这个包;

3.4 子网寻址

现在所有的主机都要求支持子网编址( RFC 950 [Mogul and Postel 1985] )。不是把 I P地址看成由单纯的一个网络号和一个主机号组成,而是把主机号再分成一个子网号和一个主机号。这样做的原因是因为 A类和 B类地址为主机号分配了太多的空间,可分别容纳的主机数为2^ 24 - 2和2^16 - 2。事实上,在一个网络中人们并不安排这么多的主机。由于全 0或全1 的主机号都是无效的,因此我们把总数减去 2。

在InterNIC获得某类 IP网络号后,就由当地的系统管理员来进行分配,由他(或她)来决定是否建立子网,以及分配多少比特给子网号和主机号。例如,这里有一个 B 类网络地址( 1 4 0 . 2 5 2),在剩下的 16 bit中, 8 bit用于子网号, 8 bit用于主机号,格式如图所示。这样就允许有254个子网,每个子网可以有254台主机。


3.5 子网掩码

IP 地址在子网网络中不再是简单的由网络号和主机号组成,而是把主机号再分成子网号和主机号。因此,在子网网络中,IP 地址有两种识别码:一种是 IP 地址本身;另一种是表示网络部的子网掩码;子网由子网掩码与该子网中的 IP 地址相"与"得到。

给定 IP 地址和子网掩码,主机可以确定 IP 数据报的目的是:

1. 本子网上的主机;

2. 本网络中其他子网中的主机;

3. 其他网络上的主机;

如果知道本机的IP地址,那么就知道它是否为A类、 B类或C类地址(从 I P地址的高位可以得知),也就知道网络号和子网号之间的分界线。而根据子网掩码就可知道子网号与主机号之间的分界线。

假设我们的主机地址是 1 4 0 . 2 5 2 . 1 . 1 (一个B类地址) ,而子网掩码为 2 5 5 . 2 5 5. 2 5 5 . 0(其中 8 b i t为子网号, 8 bit为主机号)。
如果目的 I P地址是 1 4 0 . 25 2 . 4 . 5 ,那么我们就知道 B类网络号是相同的( 1 4 0 . 2 5 2),但是子网号是不同的( 1 和4)。

如果目的 I P地址是 1 4 0 . 2 5 2 . 1 . 2 2,那么 B类网络号还是一样的( 14 0 . 2 5 2),而且子网号也是一样的( 1 ),但是主机号是不同的。
如果目的 I P地址是 1 9 2 . 43 . 2 3 5 . 6(一个 C类地址),那么网络号是不同的,因而进一步的比较就不用再进行了。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:86
帖子:240
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP