IP协议是TCPIP协议族中的核心协议所有的TCP.docx
- 文档编号:8496265
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:43
- 大小:237.61KB
IP协议是TCPIP协议族中的核心协议所有的TCP.docx
《IP协议是TCPIP协议族中的核心协议所有的TCP.docx》由会员分享,可在线阅读,更多相关《IP协议是TCPIP协议族中的核心协议所有的TCP.docx(43页珍藏版)》请在冰豆网上搜索。
IP协议是TCPIP协议族中的核心协议所有的TCP
第三章IP协议
3.1IP地址
IP协议是TCP/IP协议族中的核心协议。
所有的TCP、UDP、ICMP、IGMP数据都是以IP数据报格式传输。
IP协议为高层提供不可靠、无连接的数据报通信。
IP协议提供的不可靠服务是指它不能保证IP数据报能成功地到达目的地。
IP协议仅提供尽可能好的服务。
如果发生错误,例如某个路由器暂时用尽了缓冲区,IP协议有一个简单的错误处理算法:
丢弃数据报,然后向该数据报的源地址对应的主机发送ICMP报文。
任何要求的可靠性必须由上层来提供。
无连接是指IP协议并不维护任何关于后续数据报的状态信息。
每个数据报的处理是相互独立的,IP数据报可以不按发送顺序接收。
网络中的每个独立主机的每个接口必须有一个唯一的Internet地址,也称为IP地址。
对于IPv4,IP地址长度为32位。
IP地址按照层次结构划分成五类,如图3-1所示。
图3-1IP地址分类
32位的IP地址通常写成点分的四个十进制数,其中每个十进制整数对应一个字节,这种表示方法称为“点分十进制表示法(Dotteddecimalnotation)”。
例如,某个系统是一个C类地址,它可以表示为。
区分各类地址的最简单方法是检查地址的第一个十进制数。
表3-1列出了各类地址的起止范围。
对于网络中的一些专用设备,例如路由器,它具有多个接口,其中每一个接口都对应一个对立的IP地址。
表3-1各类IP地址的范围
类型
范围
A
.0到
B
128.0.0.0到
C
192.0.0.0到
D
224.0.0.0到
E
.0到
由于Internet网络中每个接口具有一个唯一的IP地址,因此必须有一个管理机构来分配IP地址,这个机构就是互连网络信息中心(InternetNetworkInformationCentre),简称InterNIC。
InterNIC只分配网络号,主机号的分配由本地的网络管理员负责。
事实上,InterNIC由三部分组成:
注册服务()、目录和数据服务()和信息服务()。
按照通信方式来分类,IP地址分为三类:
单播地址(目的地址为单个主机)、广播地址(目的地址为指定网络上的所有主机)和多播地址(目的地址为同一组中的所有主机)。
后面章节将分别讨论广播和多播通信的细节。
3.2IP报文格式
IP数据报的格式如图11-3所示。
如果不含有选项字段,IP报头长度为20字节。
图3-2中IP报头,最高位在左边,记为0bit;最低位在右边,记为31bit。
4个字节的32bit值以下面的次序传输:
首先是0—7bit,其次是8—15bit,然后是16—23bit,最后是24—31bit。
这种传输次序称作bigendian字节序。
由于TCP/IP报头中所有的二进制整数在网络中传输时都必须按照这种次序,因此又把它称作网络字节序。
以其它形式存储二进制整数的机器,如littleendian格式,在传输数据之前必须把报头转换成网络字节序。
图3-2IP数据报格式及报头中的各个字段
●版本号。
目前IP协议的版本号为4,因此也称为IPv4。
随着Internet网络的发展,出现了新版的IP协议,称为IPv6。
●报头长度。
报头长度指的是报头占32bit字的数量,包括任选项。
由于它是一个4比特字段,因此报头最长为60个字节。
对于一般数据报(没有任何任选项),该字段的值为5,即报头长度为20字节。
●服务类型。
服务类型(TOS)字段包括一个3比特的优先权子字段,4比特的TOS子字段和1比特未用位但必须置0。
4比特的TOS分别表示:
最小延迟、最大吞吐量、最高可靠性和最小费用。
4比特只能将其中1位置1。
如果所有4比特均为0,则表示一般的服务。
RFC1340描述了所有的标准应用如何设置这些服务类型。
RFC1349则对RFC1340进行了修正,更加详细地描述了TOS的特性。
表3-2列出了对不同的网络应用建议的TOS值。
表3-2不同网络应用对应的TOS值
应用
最小延迟
最大吞吐量
最高可靠性
最小费用
16进制值
Telnet/Rlogin
1
0
0
0
0x10
FTP
控制
数据
任意块数据
1
0
0
0
1
1
0
0
0
0
0
0
0x10
0x08
0x08
TFTP
1
0
0
0
0x10
SMTP
命令阶段
数据阶段
1
0
0
1
0
0
0
0
0x10
0x08
DNS
UDP查询
TCP查询
区域传输
1
0
0
0
0
1
0
0
0
0
0
0
0x10
0x00
0x08
ICMP
差错
查询
任何IGP
0
0
0
0
0
0
0
0
1
0
0
0
0x00
0x00
0x04
SNMP
0
0
1
0
0x04
BOOTP
0
0
0
0
0x00
NNTP
0
0
0
1
0x02
Telnet和Rlogin这两个交互应用程序要求最小的传输延迟,它们主要用于传输少量的交互数据。
另一方面,FTP文件传输服务则要求最大的网络吞吐量。
网络管理(SNMP)和路由选择协议要求最高可靠性。
用户网络新闻(NNTP,Usenetnews)是要求最小费用的应用。
以前的TCP/IP实现绝大多数都不支持TOS特性。
自从以后的新版系统都对它进行了设置;另外,新的路由协议如OSPF等都能根据这些字段的值进行相应的路由决策。
●总长度。
总长度字段是指整个IP数据报的长度,以字节为单位。
利用报头长度字段和总长度字段就可以判断IP数据报中数据部分的起始位置和长度。
由于该字段长度为16比特,所以IP数据报的最大长度可达65536字节。
当数据报被分段处理时,该字段的值也随着变化。
尽管IP支持传输一个长达65536字节的数据报,但是,大多数的数据链路层都会对它进行分段处理;而且,主机也要求不能接受超过576字节的数据报。
由于TCP把用户数据报划分为若干段,因此一般来说这一点不会影响TCP的使用。
另外大量使用UDP的应用(RIP,TFTP,BOOTP,DNS,SNMP等等),它们都限制用户数据报长度为512字节,小于576字节,因此IP的这种限制也不会影响UDP的使用。
总长度字段是IP报头中的必要内容,因为有些数据链路(如以太网)需要填充一些数据以满足最小长度的要求。
尽管以太网的最小帧长为46字节,但是IP数据报可能更短。
如果没有总长度字段,那么IP层就不知道46字节中有多少是IP数据报的内容,从而导致混乱。
●标识字段。
标识字段在分段中使用。
一个数据报在通过不同网络的时候,可能被分段以适应不同网络帧的大小。
当这种情况发生的时候,同一数据报的每个分段将在这个域中使用一个相同的序列号来识别,标识字段唯一地标识主机发送的每一个数据报。
通常每发送一个报文,其值自动加1。
RFC791认为标识字段应该由让IP发送数据报的上层来选择。
假设有两个连续的IP数据报,其中一个是由TCP生成的,而另一个是由UDP生成的,那么它们可能具有相同的标识字段值。
尽管这样也可以正常工作(由重组算法来处理),但是在大多数从伯克利派生出来的系统中,每发送一个数据报,IP层都要把一个内核变量的值加1,不管交给IP的数据报来自哪一层。
内核变量的初始值根据系统引导时的时间来设置。
●标志字段。
3位标志位的第一位没有使用,第二位为DF为,该位被置1表示不要分段,它命令路由器不要将数据报分段,因为目的端不能重组分段。
第3位是MF位,该位被置1表示该分段后还有进一步的分段,除了最后一个分段外的所有分段都设置了这一位,它是用来标志是否所有分段都已到达。
●分段偏移。
分段偏移说明该分段在当前数据报的什么位置。
分段偏移以8字节为单位,这样偏移量1对应字节号8,这样偏移量2对应字节号16,依此类推。
假设网络的MTU(最大传输单位)为1400字节,因此,路由器将把到达的一个4000字节的报文分为3段,第一段有1400字节数据,分段偏移为0;第二段有1400字节数据,分段偏移为175;第二段有1200字节数据,分段偏移为350。
●生存时间。
TTL(time-to-live)生存时间字段设置了数据报可以经过的最多路由器数量,它指定了数据报的生存时间。
TTL的初始值由源主机设置(通常为32或64),一旦经过一个处理该数据报的路由器,它的值就减去1。
当该字段的值为0时,该数据报被丢弃,并发送ICMP报文通知源主机。
●协议字段。
IP使用协议字段对数据报进行分类,根据它的值可以确定是哪个协议向IP发送数据报。
如TCP为6、UDP为17、ICMP为1。
●报头检查和字段。
报头检查和字段是根据IP报头计算的检查和,它不对报头后面的数据进行计算。
ICMP、IGMP、UDP和TCP在它们各自的报头中均含有同时覆盖报头和数据的检查和。
为了计算一个数据报的IP检查和,首先把检查和字段置为0;然后,对报头中的每个16比特进行二进制反码求和(整个首部看成是由若干个16比特的字组成),然后取反,结果存放在检查和字段中。
当收到一个IP数据报后,同样对报头中每个16比特进行二进制反码的求和。
由于接收方在计算过程中包含了发送方存在报头的检查和,因此,如果报头在传输过程中没有发生任何差错,那么接收方计算的结果应该为全1。
如果结果不是全1(即检查和错误),那么IP就丢弃该数据报,但不生成差错报文,由上层去发现丢失的数据报并进行重传。
ICMP、IGMP、TCP和UDP都采用相同的检查和算法,尽管TCP和UDP除了本身的报头和数据外,在IP报头中还包含不同的字段。
RFC1071介绍了关于计算Internet检查和的实现技术。
由于路由器经常修改TTL字段(减1),因此当路由器转发一个数据报时可以增加它的检查和,而不需要对IP整个报头重新计算。
这里需要注意的是标准的BSD实现在转发数据报时并不是采用这种增加的方法。
●源IP地址和目的IP地址。
每个数据报都包含源IP地址和目的IP地址,它们的长度都是32比特。
●任选项。
最后一个字段是任选项,是数据报中一个可变长度的可选信息。
当前,这些选项定义如下:
1.安全和处理限制(用于军事领域,详见RFC1108)
2.记录路径(让每个路由器都记下该数据报的IP地址)
3.时间戳(让每个路由器都记下该数据报的IP地址和时间)
4.宽松的源站选路(为数据报指定一系列必须经过的IP地址)
5.严格的源站选路(为数据报指定一系列必须经过的IP地址,但是要求只能经过指定的这些地址,不能经过其他地址)
这些选项很少使用,并非所有的主机和路由器都支持这些选项。
选项字段都是以32比特作为界限,在必要的时候插入值为0的填充字节,这样就能保证IP首部始终是32比特的整数倍(这是首部长度字段要求的)。
3.3IP路由
IP路由选择
对于网络中的主机来说,IP路由选择是很简单的。
如果目的主机和源主机直接相连(点对点链路)或都在一个共享网络上(以太网或令牌环),那么IP数据报就直接送到目的主机上。
否则,主机把数据报发往一个默认的路由器上,由该路由器负责转发该数据报。
大多数主机都采用这种简单机制进行路由选择。
当今大多数多用户系统,包括几乎所有的Unix系统,都可以配置成路由器。
我们可以为它指定主机和路由器都可以使用的简单路由算法。
本质上的区别在于主机从不把数据报从一个接口转发到另一个接口,而路由器的主要功能是转发数据报。
在一般情况下,IP可以从IGMP、ICMP、TCP和UDP接收数据报(由本地主机上的高层产生的数据报)并进行发送,或者从一个网络接口接收数据报并进行发送。
IP层在内存中维持一个路由表。
当收到一个数据报并进行转发时,它都要对该路由表搜索一次。
当数据报来自某个网络接口时,IP首先检查目的IP地址是否为本机的IP地址之一或者IP广播地址。
如果是这样,该数据报就被送到由IP报头协议字段所指定的协议模块进行处理;否则,如果IP层被设置为路由器功能,那么就对数据报进行转发,如果IP层没有被设置为路由器功能,该数据报被丢弃。
路由表中的每一行都包含下面信息:
●目的IP地址。
它既可以是一个完整的主机地址,也可以是一个网络地址,由该表中的标志字段来指定。
主机地址有一个非0的主机号,以指定某一特定的主机,而网络地址中的主机号为0,以指定网络中的所有主机。
●下一跳路由器(next-hoprouter)的IP地址,或者有直接相连的网络IP地址。
下一跳路由器是指一个在直接相连网络上的路由器,通过它可以转发数据报。
下一跳路由器通常不是最终的目的,但是它可以把数据报转发到最终目的。
●标志。
其中一个标志指明目的IP地址是网络地址还是主机地址;另一个标志指明下一跳路由器是否为真正的下一跳路由器,还是一个直接相连的接口。
●为数据报的传输指定一个网络接口。
IP路由选择是逐跳(hop-by-hop)进行的。
从路由表信息可以看出,IP并不知道到达任何目的地址的完整路径(除了那些与主机直接相连的目的地址)。
所有的IP路由选择只为数据报传输提供下一跳路由器的IP地址。
它假定下一跳路由器相对发送数据报的主机更接近目的地址,而且下一跳路由器与该主机是直接相连的。
IP路由选择主要完成以下功能:
1.检索路由表,寻找能与目的IP地址完全匹配的表项(网络号和主机号都要匹配)。
如果找到,则把数据报发送给该表项指定的下一跳路由器或直接连接的网络接口(由标志字段值决定)。
2.检索路由表,寻找能与目的网络号相匹配的表项。
如果找到,则把数据报发送给该表项指定的下一跳路由器或直接连接的网络接口(由标志字段值决定)。
目的网络上的所有主机都可以通过这个表项来处理。
例如,一个以太网上的所有主机都是通过这个表项来寻址的。
这种检索网络的匹配方法必须考虑可能的子网掩码。
3.检索路由表,寻找标为“默认(default)”的表项。
如果找到,则把数据报发送给该表项指定的下一跳路由器。
如果上述操作都没有成功,那么该数据报就不能被传送。
如果不能传送的数据报来自本机,那么一般会向产生数据报的应用程序返回一个“主机不可达”或“网络不可达”的错误提示。
完整主机地址匹配在网络号匹配之前进行,只有当它们都失败后才选择默认路由。
默认路由,以及下一跳路由器发送的ICMP间接报文是IP路由选择机制中功能强大的特性。
为一个网络指定一个路由器,而不必为每个主机指定一个路由器,这是IP路由选择机制的另一个特性。
这样做可以大大地缩小路由表的规模,例如Internet上的路由器只有几千个表项,而不会超过100万个表项。
子网编址与子网掩码
.1子网编址
目前所有的主机都要求支持子网编址(参见RFC950)。
子网编址不是把IP地址看成由单纯的一个网络号和一个主机号组成,而是把主机号进一步划分为一个子网号和一个主机号。
这样做的原因是因为A类和B类IP地址为主机号分配了太多的空间,可分别容纳的主机数为224-2和216-2(全0和全1地址除外)。
事实上,在一个网络中不可能安排如此多的主机。
在InterNIC获得某类IP网络号后,就由网络系统管理员来进行分配。
网络系统管理员决定是否建立子网,以及分配多少比特给子网号和主机号。
例如,有一个B类网络地址(138.123),在剩余的16比特中,8比特用于子网号,8比特用于主机号,格式如图3-3所示。
这样就允许有254个子网,每个子网可以有254台主机。
许多网络管理员采用自然的划分方法,即把B类网络地址留给主机的16比特中的前8比特用于子网号,后8比特用于主机号。
这样用点分十进制方法表示的IP地址就比较容易确定子网号。
但是,并不要求A类和B类地址的子网划分都要以字节为单位进行子网划分。
图3-3B类地址的一种子网编码
大多数子网划分针对B类网络地址。
其实,子网划分也可以用于C类地址,只是C类地址可用的比特数较少而已。
很少出现A类地址的子网划分主要是因为A类地址本身的数目就很少。
子网对外部路由器来说隐藏了内部网络的细节。
.2子网掩码
任何网络中的主机在引导时都需要配置主机的IP地址。
大多数系统把IP地址存放在一个磁盘文件中,当主机启动时,自动到相关文件中读取IP地址。
但是对于X终端或无盘工作站系统,则需要采用其他方法来获得IP地址。
网络中的每个系统都具有唯一的硬件地址(例如以太网卡的MAC地址),它是由网络接口生产厂家配置的。
无盘系统从网络接口卡上读取唯一的硬件地址,然后发送一个RARP请求(一个在网络上广播的数据),请求某个主机响应该无盘系统的IP地址(在RARP应答中)。
知道了IP地址,主机还需要知道有多少比特用于子网号以及多少比特用于主机号。
这些通过在引导过程中的子网掩码来确定的。
子网掩码是一个32比特的数值,其中值为1的比特用于网络号和子网号,为0的比特留给主机号。
IP地址中与子网掩码的1相对应的位构成了网络号和子网号,IP地址中与子网掩码的0相对应的位构成了主机号。
尽管IP地址经常用点分十进制方法表示,但是子网掩码却经常用十六进制表示,特别是当分界不是一个字节时。
通过IP地址和子网掩码,主机就可以判断数据报的目的地址为:
1.本子网中的主机;
2.本网络中其他子网中的主机;
3.其他网络上的主机。
通过本机的IP地址,就可以知道它是否为A类、B类和C类地址(通过IP地址的高位可知),也就知道了网络号和子网号之间的分界线。
而根据子网掩码就可以知道子网号和主机号的分界线。
例如一个主机的IP地址为140(B类地址),而子网掩码为255(其中8比特为子网号,8比特为主机号)。
如果数据报的目的IP地址为140,我们就知道B类网络号是相同的,而子网号是不同的。
如果数据报的目的IP地址为,我们就知道B类网络号是相同的,而且子网号也是相同的,但是主机号不同。
如果数据报的目的IP地址为192(C类地址),由于网络号不同,其它的比较就不用进行了。
给定两个IP地址和子网掩码后,IP路由选择功能就一直进行这样的比较。
除了一般的IP地址外,还有一些特殊的IP地址。
在图3-4中列出了一些特殊的IP地址。
图3-4一些特殊的IP地址
IP的未来发展
目前IP地址主要存在三个方面的问题,这些问题是由于Internet网络在过去的几年中飞速发展的结果。
这几个问题为:
1.超过一半的B类地址已被分配;
2.32比特的IP地址从长期的Internet增长的角度来看,一般是不够的;
3.当前的路由结构没有层次结构,属于平面型结构,即每个网络都需要一个路由表项。
随着网络数量的增长,一个具有多个网络的网站就必须分配多个C类地址,而不是一个B类地址,从而导致路由表的规模不断增加。
许多组织和研究人员针对当前IP版本存在的问题提出了许多解决方法。
无类别的域间路由选择CIDR(ClasslessInterdomainRouting)提出了一个可以解决上面第三个问题的建议,对当前的IP版本(IPv4)进行扩充,以适应未来IP发展的要求。
对新版的IP,即IPv6,经常称作IPng,主要有四个方面的建议,我们将在后面章节详细介绍。
3.4ARP协议和RARP协议
3.4.1ARP(地址解析协议)
在计算机网络中,数据链路层如以太网都有自己的寻址机制(通常为48位MAC地址),它要求任何使用数据链路层功能的网络层都必须遵守。
一个网络如以太网可以同时被不同的网络层使用。
当一台主机把以太网数据帧发送到位于相同局域网上的另一台主机时,使用48位的以太网地址(硬件地址)进行寻址。
当通信双方位于不同的网段时,通过IP地址进行寻址。
ARP协议为IP地址到对应的硬件地址之间提供动态映射;RARP协议实现硬件地址到IP地址之间的动态映射。
ARP协议为从IP地址变换成为物理地址提供了一种可能机制,但是某些网络技术并不需要它。
如果我们能使所有的网络接口都知道它们的IP地址,那么ARP协议就不需要了。
ARP协议是一个低层协议,它把基本网络物理编址隐藏起来,允许用户为每台计算机选择分配IP地址。
.1ARP高速缓存
ARP高速运行的关键是由于每个主机上都有一个ARP高速缓存。
这个高速缓存存放了最近Internet地址到硬件地址之间的映射。
高速缓存中的每一项的生存时间通常是20分钟,起始时间从创建该记录算起。
例如我们可以使用UNIX系统中的arp命令来检查ARP高速缓存中的内容。
通过使用ARP高速缓存,可以在高速缓存中自动发现IP地址和硬件地址之间的映射,从而可以避免远程访问的开销,提高效率。
.2ARP的分组格式
在以太网环境下解析IP地址时,在ARP报文从一台计算机向另一台计算机传送过程中,这些报文必须在数据帧中进行传送。
ARP请求和应答分组的格式如图3-5所示。
当然ARP协议可以用于其他类型的网络,可以解析IP地址以外的地址。
在图中帧类型字段后面的前四个字段指定了最后四个字段的类型和长度。
图3-5用于以太网的ARP请求/应答分组格式
在以太网帧结构中,前两个字段分别是以太网的目的地址和源地址。
目的地址为全1的地址用于广播地址。
两个字节长度的以太网帧类型表示后面数据的类型,对于不同的协议该字段的值不同。
对于ARP请求或应答来说,该字段的值为0x0806。
硬件类型字段和协议类型字段用来描述ARP分组中的各个字段,例如一个ARP请求分组询问协议地址(IP地址)对应的硬件地址(以太网硬件地址)。
硬件类型字段表示硬件地址的类型,它的值为1表示是以太网地址。
协议类型字段表示要映射的协议地址类型,它的值为0x0800表示是IP地址。
接下来是两个一字节的字段,硬件地址长度和协议地址长度分别指出以字节为单位的硬件地址和协议地址的长度。
对于以太网上的ARP请求或应答来说,它们的值分别是6和4。
操作字段指定了四种操作类型,分别是ARP请求(值为1)、ARP应答(值为2)、RARP请求(值为3)和RARP应答(值为4)。
这个字段是必须的,因为ARP请求和ARP应答的帧类型字段值是相同的。
接下来的四个字段是发送端的硬件地址(本例中是以太网地址)、发送端的协议地址(IP地址)、目的端的硬件地址和目的端的协议地址。
这里需要注意的是在以太网的数据帧报头中和ARP请求数据帧中都有发送端的硬件地址。
对于一个ARP请求来说,除目的端硬件地址外的所有其他的字段都有填充值。
当系统收到一个目的端为本机的ARP请求报文后,它就把硬件地址填充进去,然后用两个目的端地址分别替换两个发送端地址,并把操作字段值设置为2,最后把它发送回去。
.3ARP实现
从功能上说,ARP分为两部分,一部分在发送一个报文分组时用来确定指定IP地址对应的物理地址;另一部分用来回答其它计算机发来的ARP请求。
对于给定的IP地址,主机检查自己的ARP高速缓存,寻找从该IP地址到物理地址的变换,如果找到,就提取相应的物理地址,把数据放到相应数据帧中转发出去。
如果没有发现,主机必须广播一个ARP请求,并等待回答。
广播ARP请求去查找地址变换可能变得比较复杂。
目标计算机可能已经停止工作,或者正在忙着而不能接收请求。
在这种情况下,发送者可能收不到回答,或者回答被延迟。
对于以太网而言,由于它是一个尽量递交系统,最初的ARP请求也可能丢失(在这种情况下,发送方必须具备重发功能,这就需要发送端主机要保存发出去的报文分组)。
下面考虑如下问题:
主机A已经得到主机B的一个捆扎(binding),也就是得到主机B的IP地址和物理地址的对应关系。
但是后来主机B的网络适配器出故障而捆扎被替换了。
尽管主机B的物理地址已经改变,但是主机A的高速缓存中的捆扎仍然没有改变,这样主机A使用不存在的物理地址,数据传递是不能正常进行的。
这种情况表明,ARP应该对高速缓
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- IP 协议 TCPIP 中的 核心 所有 TCP