当前位置:文档之家› 计算机网络协议

计算机网络协议

计算机网络协议————————————————————————————————作者: ————————————————————————————————日期:计算机网络协议教案一、TCP/IP协议族的结构和协议TCP/IP协议簇是Internet的基础,也是当今最流行的组网形式。

TCP/IP是一组协议的代名词,包括许多别的协议,组成了TCP/IP协议簇。

其中比较重要的有SLIP协议、PP P协议、IP协议、ICMP协议、ARP协议、TCP协议、UDP 协议、FTP协议、DNS协议、SMTP协议等。

TCP/IP协议并不完全符合OSI的七层参考模型。

传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。

该模型的目的是使各种硬件在相同的层次上相互通信。

而TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。

(一)熟悉Internet地址结构(二)了解Internet地址的概念互联网上的每个接口必须有一个唯一的I n t e r n e t地址(也称作I P地址)。

IP地址长32bit。

I n t er n e t地址并不采用平面形式的地址空间,如1、2、3等。

I P地址具有一定的结构,五类不同的互联网地址格式如图1 - 5所示。

这些32位的地址通常写成四个十进制的数,其中每个整数对应一个字节。

这种表示方法称作“点分十进制表示法(Do tteddecimalnotation)”。

例如,作者的系统就是一个B类地址,它表示为:1 40 .25 2 .13. 3 3。

区分各类地址的最简单方法是看它的第一个十进制整数。

图1-6列出了各类地址的起止范围,其中第一个十进制整数用加黑字体表示。

需要再次指出的是,多接口主机具有多个I P地址,其中每个接口都对应一个I P地址。

由于互联网上的每个接口必须有一个唯一的I P地址,因此必须要有一个管理机构为接入互联网的网络分配I P地址。

这个管理机构就是互联网络信息中心( Internet Network Information Centre),称作I nt e r NI C。

Int er NI C只分配网络号。

主机号的分配由系统管理员来负责。

有三类I P地址:单播地址(目的为单个主机)、广播地址(目的端为给定网络上的所有主机)以及多播地址(目的端为同一组内的所有主机)。

二、熟悉Internet协议通信原理及报文格式(一)控制报文协议ICMP协议引言I C M P经常被认为是I P层的一个组成部分。

它传递差错报文以及其他需要注意的信息。

I C M P报文通常被IP层或更高层协议(T C P或U D P)使用。

一些I CM P报文把差错报文返回给用户进程。

I C MP报文是在IP数据报内部被传输的,如图6-1所示。

ICMP的正式规范参见RFC 792 [Posterl1 9 8 1 b ]。

I C M P报文的格式如图6 - 2所示。

所有报文的前4个字节都是一样的,但是剩下的其他字节则互不相同。

下面我们将逐个介绍各种报文格式。

类型字段可以有 1 5个不同的值,以描述特定类型的I C M P报文。

某些I C M P报文还使用代码字段的值来进一步描述不同的条件。

检验和字段覆盖整个I C M P报文。

使用的算法与我们在3. 2节中介绍的IP首部检验和算法相同。

I CM P的检验和是必需的。

ICMP报文的类型各种类型的ICM P报文如图6 - 3所示,不同类型由报文中的类型字段和代码字段来共同决定。

图中的最后两列表明I C M P报文是一份查询报文还是一份差错报文。

因为对I CMP差错报文有时需要作特殊处理,因此我们需要对它们进行区分。

例如,在对I C M P差错报文进行响应时,永远不会生成另一份I C M P差错报文(如果没有这个限制规则,可能会遇到一个差错产生另一个差错的情况,而差错再产生差错,这样会无休止地循环下去)。

当发送一份I C M P差错报文时,报文始终包含IP的首部和产生I C M P差错报文的I P数据报的前8个字节。

这样,接收I CM P差错报文的模块就会把它与某个特定的协议(根据IP数据报首部中的协议字段来判断)和用户进程(根据包含在I P数据报前8个字节中的TC P或U D P报文首部中的T C P或U DP端口号来判断)联系起来。

下面各种情况都不会导致产生I C M P差错报文:1)ICMP差错报文(但是,I C M P查询报文可能会产生I C M P差错报文)。

2) 目的地址是广播地址(见图3 -9)或多播地址(D类地址,见图1- 5)的I P数据报。

3)作为链路层广播的数据报。

4) 不是I P分片的第一片(将在11. 5节介绍分片)。

5)源地址不是单个主机的数据报。

这就是说,源地址不能为零地址、环回地址、广播地址或多播地址。

这些规则是为了防止过去允许I CM P差错报文对广播分组响应所带来的广播风暴。

ICMP地址掩码请求与应答I C MP地址掩码请求用于无盘系统在引导过程中获取自己的子网掩码(3. 5节)。

系统广播它的ICM P请求报文(这一过程与无盘系统在引导过程中用R A RP获取IP地址是类似的)。

无盘系统获取子网掩码的另一个方法是B O O T P协议,我们将在第1 6章中介绍。

I C M P地址掩码请求和应答报文的格式如图6 - 4所示。

ICMP报文中的标识符和序列号字段由发送端任意选择设定,这些值在应答中将被返回。

这样,发送端就可以把应答与请求进行匹配。

我们可以写一个简单的程序(取名为i c m p a d d r m ask),它发送一份ICMP地址掩码请求报文,然后打印出所有的应答。

由于一般是把请求报文发往广播地址,因此这里我们也这样做。

目的地址(1 4 0.2 5 2.1 3 .63)是子网1 40. 2 5 2. 1 3 . 3 2的广播地址(见图3-12)。

ICMP时间戳请求与应答ICM P时间戳请求允许系统向另一个系统查询当前的时间。

返回的建议值是自午夜开始计算的毫秒数,协调的统一时间( Coordinated UniversalTime, UTC)(早期的参考手册认为UT C是格林尼治时间)。

这种ICM P报文的好处是它提供了毫秒级的分辨率,而利用其他方法从别的主机获取的时间(如某些U n i x系统提供的r d ate命令)只能提供秒级的分辨率。

由于返回的时间是从午夜开始计算的,因此调用者必须通过其他方法获知当时的日期,这是它的一个缺陷。

请求端填写发起时间戳,然后发送报文。

应答系统收到请求报文时填写接收时间戳,在发送应答时填写发送时间戳。

但是,实际上,大多数的实现把后面两个字段都设成相同的值(提供三个字段的原因是可以让发送方分别计算发送请求的时间和发送应答的时间)。

(二)用户数据报协议UDP协议引言U D P是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个U D P数据报,并组装成一份待发送的I P数据报。

这与面向流字符的协议不同,如T C P,应用程序产生的全体数据与真正发送的单个I P数据报可能没有什么联系。

U D P数据报封装成一份I P数据报的格式如图11 - 1所示。

RFC 768[Postel1980] 是U D P的正式规范。

UDP不提供可靠性:它把应用程序传给I P层的数据发送出去,但是并不保证它们能到达目的地。

由于缺乏可靠性,我们似乎觉得要避免使用U DP 而使用一种可靠协议如TC P。

我们在第17章讨论完T CP后将再回到这个话题,看看什么样的应用程序可以使用U DP。

应用程序必须关心IP数据报的长度。

如果它超过网络的M TU(2.8节),那么就要对I P数据报进行分片。

如果需要,源端到目的端之间的每个网络都要进行分片,并不只是发送端主机连接第一个网络才这样做(我们在2.9节中已定义了路径M T U的概念)。

在11 .5节中,我们将讨论I P分片机制。

UDP首部UDP首部的各字段如图11 -2所示。

端口号表示发送进程和接收进程。

在图 1 -8中,我们画出了TCP和U D P用目的端口号来分用来自I P层的数据的过程。

由于I P层已经把I P数据报分配给T CP或U D P(根据IP首部中协议字段值),因此T C P端口号由T C P来查看,而UDP端口号由U DP来查看。

T C P端口号与U D P端口号是相互独立的。

U D P长度字段指的是U D P首部和U D P数据的字节长度。

该字段的最小值为8字节(发送一份0字节的U D P数据报是O K)。

这个UDP长度是有冗余的。

I P数据报长度指的是数据报全长(图3 - 1),因此UD P数据报长度是全长减去IP首部的长度(该值在首部长度字段中指定,如图3 -1所示)。

UDP检验和U D P检验和覆盖UD P首部和UDP数据。

回想I P首部的检验和,它只覆盖IP的首部—并不覆盖I P数据报中的任何数据。

U DP和T C P在首部中都有覆盖它们首部和数据的检验和。

U D P的检验和是可选的,而T C P的检验和是必需的。

尽管U DP检验和的基本计算方法与我们在 3 .2节中描述的I P首部检验和计算方法相类似(16bit字的二进制反码和),但是它们之间存在不同的地方。

首先,U D P数据报的长度可以为奇数字节,但是检验和算法是把若干个16 bit字相加。

解决方法是必要时在最后增加填充字节0,这只是为了检验和的计算(也就是说,可能增加的填充字节不被传送)。

其次,U D P数据报和T C P段都包含一个1 2字节长的伪首部,它是为了计算检验和而设置的。

伪首部包含I P首部一些字段。

其目的是让U DP两次检查数据是否已经正确到达目的地(例如,I P没有接受地址不是本主机的数据报,以及I P没有把应传给另一高层的数据报传给UDP)。

U D P数据报中的伪首部格式如图11 -3所示。

在该图中,我们特地举了一个奇数长度的数据报例子,因而在计算检验和时需要加上填充字节。

注意,U D P数据报的长度在检验和计算过程中出现两次。

如果检验和的计算结果为0,则存入的值为全1(65 5 3 5),这在二进制反码计算中是等效的。

如果传送的检验和为0,说明发送端没有计算检验和。

如果发送端没有计算检验和而接收端检测到检验和有差错,那么U D P数据报就要被悄悄地丢弃。

不产生任何差错报文(当I P层检测到I P首部检验和有差错时也这样做)。

U D P检验和是一个端到端的检验和。

它由发送端计算,然后由接收端验证。

其目的是为了发现U D P首部和数据在发送端到接收端之间发生的任何改动。

尽管U D P检验和是可选的,但是它们应该总是在用。

在80年代,一些计算机产商在默认条件下关闭U D P检验和的功能,以提高使用U D P协议的N F S(Network )的速度。

相关主题