您的位置:首页 > 理论基础 > 计算机网络

读书笔记:TCPIP详解卷一 第三章 IP:网际协议

2015-06-08 11:48 447 查看
3.1引言

IP是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输(见图1-4)。许多刚开始接触TCP/IP的人对IP提供不可靠、无连接的数据报传送服务感到很奇怪,特别是那些具有X.25或SNA背景知识的人。

不可靠(unreliable)的意思是它不能保证IP数据报能成功地到达目的地。IP仅提供最好的传输服务。如果发生某种错误时,如某个路由器暂时用完了缓冲区,IP有一个简单的错误处理算法:丢弃该数据报,然后发送ICMP消息报给信源端。任何要求的可靠性必须由上层来提供(如TCP)。

无连接(connectionless)这个术语的意思是IP并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。这也说明,IP数据报可以不按发送顺序接收。如果一信源向相同的信宿发送两个连续的数据报(先是A,然后是B),每个数据报都是独立地进行路由选择,可能选择不同的路线,因此B可能在A到达之前先到达。

3.2IP首部

在本章,我们将简要介绍IP首部中的各个字段,讨论IP路由选择和子网的有关内容。还要介绍两个有用的命令:ifconfig和netstat。关于IP首部中一些字段的细节,将留在以后使用这些字段的时候再进行讨论。RFC 791[Postel 1981a]是IP的正式规范文件。

IP头部V4版本(给出C语言代码实现):

struct ipheader

{

unsigned char ip_hl:4, ip_v:4 ; //4位首部长度/4位版本

unsigned char ip_tos ; //8位服务类型(TOS)

unsigned short int ip_len ; //16位总长度(字节数)

unsigned short int ip_id ; //16位标识

unsigned short int ip_off ; //3位标志/13位片偏移

unsigned char ip_ttl ; //8位生存时间

unsigned char ip_p ; //8位协议

unsigned short int ip_sum ; //16位首部检验和

unsigned int ip_src ; //32位源IP地址

unsigned int ip_dst ; //32位目的IP地址

};

头部有时还有选项部分()

首部检验和字段是根据IP首部计算的检验和码。它不对首部后面的数据进行计算。ICMP、IGMP、UDP和TCP在它们各自的首部中均含有同时覆盖首部和数据检验和码。

为了计算一份数据报的IP检验和,首先把检验和字段置为0。然后,对首部中每个16bit进行二进制反码求和(整个首部看成是由一串 16 bit的字组成),结果存在检验和字段中。当收到一份IP数据报后,同样对首部中每个16bit进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全1。如果结果不是全1(即检验和错误),那么IP就丢弃收到的数据报。但是不生成差错报文,由上层去发现丢失的数据报并进行重传。

3.3IP路由选择

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

在本节和第9章中,我们将讨论更一般的情况,即 IP层既可以配置成路由器的功能,也可以配置成主机的功能。当今的大多数多用户系统,包括几乎所有的 Unix系统,都可以配置成一个路由器。我们可以为它指定主机和路由器都可以使用的简单路由算法。本质上的区别在于主机从不把数据报从一个接口转发到另一个接口,而路由器则要转发数据报。内含路由器功能的主机应该从不转发数据报,除非它被设置成那样。在 9.4小节中,我们将进一步讨论配置的有关问题。

在一般的体制中,IP可以从TCP、UDP、ICMP和IGMP接收数据报(即在本地生成的数据报)并进行发送,或者从一个网络接口接收数据报(待转发的数据报)并进行发送。 IP层在内存中有一个路由表。当收到一份数据报并进行发送时,它都要对该表搜索一次。当数据报来自某个网络接口时,IP首先检查目的IP地址是否为本机的IP地址之一或者IP广播地址。如果确实是这样,数据报就被送到由 IP首部协议字段所指定的协议模块进行处理。如果数据报的目的不是这些地址,那么( 1)如果IP层被设置为路由器的功能,那么就对数据报进行转发(也就是说,像下面对待发出的数据报一样处理);否则(
2)数据报被丢弃。

路由表中的每一项都包含下面这些信息:目的IP地址;下一站(或下一跳)路由器(next-hop router)的IP地址,或者有直接连接的网络IP地址;标志;为数据报的传输指定一个网络接口。

IP路由选择主要完成以下这些功能:搜索路由表,寻找能与目的IP地址完全匹配的表目;搜索路由表,寻找能与目的网络号相匹配的表目;搜索路由表,寻找标为“默认(default)”的表目。

个人体会:对IP路由表的分析是从细到粗(先后顺序如:1.1.1.1->1.1.1.0->1.1.0.0->1.0.0.0->0.0.0.0),都没有匹配的情况下才送往默认路由,如果没有默认路由就丢弃该数据包。

3.4子网寻址

现在所有的主机都要求支持子网编址(RFC 950 [Mogul and Postel 1985])。不是把IP地址看成由单纯的一个网络号和一个主机号组成,而是把主机号再分成一个子网号和一个主机号。

这样做的原因是因为A类和B类地址为主机号分配了太多的空间,可分别容纳的主机数为224-2和216-2。事实上,在一个网络中人们并不安排这么多的主机(各类 IP地址的格式如图1 - 5所示)。由于全0或全1的主机号都是无效的,因此我们把总数减去2。

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

3.5子网掩码

任何主机在引导时进行的部分配置是指定主机 IP地址。大多数系统把IP地址存在一个磁盘文件里供引导时读用。在第5章我们将讨论一个无盘系统如何在引导时获得IP地址。

除了IP地址以外,主机还需要知道有多少比特用于子网号及多少比特用于主机号。这是在引导过程中通过子网掩码来确定的。这个掩码是一个 32bit的值,其中值为1的比特留给网络号和子网号,为0的比特留给主机号。

个人体会:IP地址一共32位,掩码中从左起全1的数量确定了子网地址,剩下的数量确定了子网内主机的数量,具体算法为ip地址与掩码与操作得出详细地址,如211.90.188.242的掩码为255.255.255.240时得出的地址段为211.90.188.241-254,240结尾的是子网地址,255结尾的是广播地址。

3.6特殊情况的IP地址

7个特殊的IP地址,全0或者全1的情况,如127.0.0.1为环回地址。

3.7指令介绍:ipconfig,netstat

windows系统cmd状态下键入:ipconfig /all,得到网络接口配置信息,如下

C:\Documents and Settings\Administrator>ipconfig /all

Windows IP Configuration

Host Name............ : QinKunming

Primary Dns Suffix .......:

Node Type............ : Unknown

IP Routing Enabled........: Yes

WINS Proxy Enabled........: No

Ethernet adapter 本地连接:

Connection-specific DNS Suffix .:

Description...........: VIA Compatable Fast Ethernet Adapter

Physical Address......... : 00-0B-6A-0E-79-5B

Dhcp Enabled........... : No

IP Address............: 10.201.104.83

Subnet Mask...........: 255.255.255.192

Default Gateway.........: 10.201.104.65

DNS Servers...........: 10.201.11.188

windows系统cmd状态下键入:netstat,得到当前网络连接情况,如下

C:\Documents and Settings\Administrator>netstat

Active Connections

Proto Local Address Foreign Address State

TCP QinKunming:1314 by2msg1204316.gateway.edge.messenger.live.com:1863 ESTABLISHED

TCP QinKunming:1347 10.201.115.124:2817 ESTABLISHED

TCP QinKunming:1375 10.201.11.84:1138 ESTABLISHED

TCP QinKunming:1376 10.201.104.188:http ESTABLISHED

TCP QinKunming:1377 10.201.104.188:http ESTABLISHED

TCP QinKunming:1378 10.201.104.188:http ESTABLISHED

3.8IP的未来

IP主要存在三个方面的问题。这是 Internet在过去几年快速增长所造成的结果。

1) 超过半数的B类地址已被分配。根据估计,它们大约在1995年耗尽。

2) 32 bit的IP地址从长期的Internet增长角度来看,一般是不够用的。

3) 当前的路由结构没有层次结构,属于平面型(flat)结构,每个网络都需要一个路由表目。随着网络数目的增长,一个具有多个网络的网站就必须分配多个 C类地址,而不是一个B类地址,因此路由表的规模会不断增长。

目前已经启用的是IPV6版本,这里不做详细介绍。

3.9小结

本章开始描述了IP首部的格式,并简要讨论了首部中的各个字段。我们还介绍了 IP路由选择,并指出主机的路由选择可以非常简单:如果目的主机在直接相连的网络上,那么就把数据报直接传给目的主机,否则传给默认路由器。

在进行路由选择决策时,主机和路由器都使用路由表。在表中有三种类型的路由:特定主机型、特定网络型和默认路由型。路由表中的表目具有一定的优先级。在选择路由时,主机路由优先于网络路由,最后在没有其他可选路由存在时才选择默认路由。

IP路由选择是通过逐跳来实现的。数据报在各站的传输过程中目的 IP地址始终不变,但是封装和目的链路层地址在每一站都可以改变。大多数的主机和许多路由器对于非本地网络的数据报都使用默认的下一站路由器。

A类和B类地址一般都要进行子网划分。用于子网号的比特数通过子网掩码来指定。我们为此举了一个实例来详细说明,即作者所在的子网,并介绍了变长子网的概念。子网的划分缩小了Internet路由表的规模,因为许多网络经常可以通过单个表目就可以访问了。接口和网络的有关信息通过ifconfig和netstat命令可以获得,包括接口的IP地址、子网掩码、广播地址以及MTU等。

在本章的最后,我们对Internet协议族潜在的改进建议—下一代IP进行了讨论。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: