1、001概述 word TCPIP第1章 概 述1.1 引言很多不同的厂家生产各种型号的计算机,它们运行完全不同的操作系统,但 TCP/IP协议 族允许它们互相进行通信。这一点很让人感到吃惊,因为它的作用已远远超出了起初的设想。 TCP/IP起源于60年代末美国政府资助的一个分组交换网络研究项目,到 90年代已发展成为计 算机之间最常应用的组网形式。它是一个真正的开放系统,因为协议族的定义及其多种实现 可以不用花钱或花很少的钱就可以公开地得到。它成为被称作“全球互联网”或“因特网 (Internet)”的基础,该广域网( WAN)已包含超过100万台遍布世界各地的计算机。本章主要对 TCP/IP
2、协议族进行概述,其目的是为本书其余章节提供充分的背景知识。如 果读者要从历史的角度了解有关 TCP/IP的早期发展情况,请参考文献 Lynch 1993。1.2 分层网络协议通常分不同层次进行开发,每一层分别 负责不同的通信功能。一个协议族,比如 TCP/IP,是 一组不同层次上的多个协议的组合。 TCP/IP通常被认 为是一个四层协议系统,如图 1-1所示。应用层 运输层 网络层Telnet、FTP和e-mail等,TCP和UDP IP、ICMP和IGMP每一层负责不同的功能:1) 链路层,有时也称作数据链路层或网络接口层 通常包括操作系统中的设备驱动程序和计算机链路层 设备驱动程序及接口卡
3、图1-1 TCP/IP协议族的四个层次中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。2) 网络层,有时也称作互联网层,处理分组在网络中的活动,例如分组的选路。在 TCP/IP协议族中,网络层协议包括 IP协议(网际协议),ICMP协议(Internet互联网控 制报文协议),以及IGMP协议(Internet组管理协议)。3) 运输层主要为两台主机上的应用程序提供端到端的通信。在 TCP/IP协议族中,有两个 互不相同的传输协议: TCP(传输控制协议)和 UDP(用户数据报协议)。 TCP为两台主机提供高可靠性的数据通信。它所做的工作包括把应用程序交给它的数据分
4、 成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟 等。由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。 而另一方面, UDP则为应用层提供一种非常简单的服务。它只是把称作数据报的分组 从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠 性必须由应用层来提供。 这两种运输层协议分别在不同的应用程序中有不同的用途,这一点将在后面看到。4) 应用层负责处理特定的应用程序细节。几乎各种不同的 TCP/IP实现都会提供下面这些 通用的应用程序: Telnet 远程登录。 FTP 文件传输协议。 SMTP 简单邮件传送协议。
5、SNMP 简单网络管理协议。 另外还有许多其他应用,在后面章节中将介绍其中的一部分。假设在一个局域网( LAN)如以太网中有两台主机,二者都运行 FTP协议,图 1-2列出了 该过程所涉及到的所有协议。应用层FTP客户FTP协议 FTP服务器用户进程处理应用 程序细节运输层TCP协议内核 处理通信细节网络层IP协议链路层以太网驱 动程序以太网协议以太网以太网驱 动程序图1-2 局域网上运行FTP的两台主机这里,我们列举了一个 FTP客户程序和另一个 FTP服务器程序。大多数的网络应用程序都 被设计成客户服务器模式。服务器为客户提供某种服务,在本例中就是访问服务器所在主 机上的文件。在远程登录应
6、用程序 Telnet中,为客户提供的服务是登录到服务器主机上。在同一层上,双方都有对应的一个或多个协议进行通信。例如,某个协议允许 TCP层进 行通信,而另一个协议则允许两个 IP层进行通信。在图1-2的右边,我们注意到应用程序通常是一个用户进程,而下三层则一般在(操作系 统)内核中执行。尽管这不是必需的,但通常都是这样处理的,例如 UNIX操作系统。在图1-2中,顶层与下三层之间还有另一个关键的不同之处。应用层关心的是应用程序的 细节,而不是数据在网络中的传输活动。下三层对应用程序一无所知,但它们要处理所有的 通信细节。在图1-2中列举了四种不同层次上的协议。 FTP是一种应用层协议, TC
7、P是一种运输层协 议,IP是一种网络层协议,而以太网协议则应用于链路层上。 TCP/IP 协议族是一组不同的协 议组合在一起构成的协议族。尽管通常称该协议族为 TCP/IP,但TCP和IP 只是其中的两种协 议而已(该协议族的另一个名字是 Internet协议族(Internet Protocol Suite))。网络接口层和应用层的目的是很显然的前者处理有关通信媒介的细节(以太网、令牌 环网等),而后者处理某个特定的用户应用程序( FTP、Telnet等)。但是,从表面上看,网络 层和运输层之间的区别不那么明显。为什么要把它们划分成两个不同的层次呢?为了理解这 一点,我们必须把视野从单个网络
8、扩展到一组网络。在80年代,网络不断增长的原因之一是大家都意识到只有一台孤立的计算机构成的“孤 岛”没有太大意义,于是就把这些孤立的系统组在一起形成网络。随着这样的发展,到了 90 年代,我们又逐渐认识到这种由单个网络构成的新的更大的“岛屿”同样没有太大的意义。 于是,人们又把多个网络连在一起形成一个网络的网络,或称作互连网 (internet)。一个互连 网就是一组通过相同协议族互连在一起的网络。构造互连网最简单的方法是把两个或多个网络通过路由器进行连接。它是一种特殊的用 于网络互连的硬件盒。路由器的好处是为不同类型的物理网络提供连接:以太网、令牌环网、 点对点的链接和FDDI(光纤分布式数
9、据接口)等等。这些盒子也称作IP路由器(IP Router),但我们这里使用路由器(Router)这个术语。 从历史上说,这些盒子称作网关( gateway),在很多TCP/IP文献中都使用这个术语。 现在网关这个术语只用来表示应用层网关:一个连接两种不同协议族的进程(例如, TCP/IP和IBM的SNA),它为某个特定的应用程序服务(常常是电子邮件或文件传输)。图1-3是一个包含两个网络的互连网:一个以太网和一个令牌环网,通过一个路由器互相 连接。尽管这里是两台主机通过路由器进行通信,实际上以太网中的任何主机都可以与令牌 环网中的任何主机进行通信。在图 1 - 3 中,我们可以划分出端系统(
10、 End system )(两边的两台主机)和中间系统(Intermediate system )(中间的路由器)。应用层和运输层使用端到端( End-to-end)协议。在 图中,只有端系统需要这两层协议。但是,网络层提供的却是逐跳( Hop-by-hop)协议,两 个端系统和每个中间系统都要使用它。FTP客户FTP协议 FTP服务器TCP协议IP协议路由器IP协议以太网驱 动程序以太网协议以太网驱 动程序令牌环驱 动程序令牌环协议令牌环驱 动程序以太网 令 牌 环图1-3 通过路由器连接的两个网络在TCP/IP协议族中,网络层 IP提供的是一种不可靠的服务。也就是说,它只是尽可能快 地把分
11、组从源结点送到目的结点,但是并不提供任何可靠性保证。而另一方面, TCP 在不可 靠的IP 层上提供了一个可靠的运输层。为了提供这种可靠的服务, TCP采用了超时重传、发 送和接收端到端的确认分组等机制。由此可见,运输层和网络层分别负责不同的功能。从定义上看,一个路由器具有两个或多个网络接口层(因为它连接了两个或多个网络)。任何具有多个接口的系统,英文都称作是多接口的 (multihomed)。一个主机也可以有多个接口, 但一般不称作路由器 , 除非它的功能只是单纯地把分组从一个接口传送到另一个接口。同样, 路由器并不一定指那种在互联网中用来转发分组的特殊硬件盒。大多数的 TCP/IP实现也允
12、许 一个多接口主机来担当路由器的功能,但是主机为此必须进行特殊的配置。在这种情况下, 我们既可以称该系统为主机(当它运行某一应用程序时,如 FTP或Telnet),也可以称之为路 由器(当它把分组从一个网络转发到另一个网络时)。在不同的场合下使用不同的术语。互联网的目的之一是在应用程序中隐藏所有的物理细节。虽然这一点在图 1-3由两个网络 组成的互联网中并不很明显,但是应用层不能关心(也不关心)一台主机是在以太网上,而 另一台主机是在令牌环网上,它们通过路由器进行互连。随着增加不同类型的物理网络,可 能会有 20个路由器,但应用层仍然是一样的。物理细节的隐藏使得互联网功能非常强大,也 非常有用
13、。连接网络的另一个途径是使用网桥。网桥是在链路层上对网络进行互连,而路由器则是 在网络层上对网络进行互连。网桥使得多个局域网( LAN)组合在一起,这样对上层来说就 好像是一个局域网。TCP /IP 倾向于使用路由器而不是网桥来连接网络,因此我们将着重介绍路由器。文献Perlman 1992的第12章对路由器和网桥进行了比较。1.3 TCP/IP的分层在TCP/IP协议族中,有很多种协议。图 1-4给出了本书将要讨论的其他协议。用户 用户 进程 进程用户 用户 进程 进程应用层运输层网络层硬件 链路层 接口媒体图1-4 TCP/IP协议族中不同层次的协议TCP和UDP是两种最为著名的运输层协议
14、,二者都使用 IP作为网络层协议。 虽然TCP使用不可靠的 IP服务,但它却提供一种可靠的运输层服务。本书第 1722章将详细讨论 TCP的内部操作细节。然后,我们将介绍一些 TCP 的应用,如第 26章中的 Telnet和Rlogin、第27章中的FTP以及第28章中的SMTP等。这些应用通常都是用户进程。UDP为应用程序发送和接收数据报。一个数据报是指从发送方传输到接收方的一个信息 单元(例如,发送方指定的一定字节数的信息)。但是与TCP不同的是,UDP是不可靠的,它 不能保证数据报能安全无误地到达最终目的。本书第 11章将讨论 UDP,然后在第14章(DNS: 域名系统),第15章(TF
15、TP:简单文件传送协议),以及第 16章(BO OT P:引导程序协议) 介绍使用UDP的应用程序。 SNMP也使用了UDP协议,但是由于它还要处理许多其他的协议, 因此本书把它留到第 25章再进行讨论。IP是网络层上的主要协议,同时被 TCP和UDP使用。TCP和UDP的每组数据都通过端系统 和每个中间路由器中的IP层在互联网中进行传输。在图1-4中,我们给出了一个直接访问IP的应 用程序。这是很少见的,但也是可能的(一些较老的选路协议就是以这种方式来实现的。当然 新的运输层协议也有可能使用这种方式)。第3章主要讨论IP协议,但是为了使内容更加有针对 性,一些细节将留在后面的章节中进行讨论。
16、第 9章和第10章讨论IP如何进行选路。ICMP是IP协议的附属协议。IP层用它来与其他主机或路由器交换错误报文和其他重要信息。 第6章对ICMP的有关细节进行讨论。尽管ICMP主要被IP使用,但应用程序也有可能访问它。我 们将分析两个流行的诊断工具,Ping和Traceroute(第7章和第8章),它们都使用了ICMP。IGMP是Internet组管理协议。它用来把一个 UDP数据报多播到多个主机。我们在第 12章中 描述广播(把一个 UDP 数据报发送到某个指定网络上的所有主机)和多播的一般特性,然后 在第13章中对IGMP协议本身进行描述。ARP(地址解析协议)和 RARP(逆地址解析协
17、议)是某些网络接口(如以太网和令牌环 网)使用的特殊协议,用来转换 IP层和网络接口层使用的地址。我们分别在第 4章和第 5章对 这两种协议进行分析和介绍。1.4 互联网的地址互联网上的每个接口必须有一个唯一的 Internet地址(也称作 IP 地址)。IP地址长 32 bit 。 Internet地址并不采用平面形式的地址空间,如 1、2、3等。IP地址具有一定的结构,五类不同 的互联网地址格式如图 1-5所示。7位A类 网 络 号14位24位主 机 号16位B类 网 络 号主 机 号21位 8位C类 网 络 号28位主 机 号D类 多 播 组 号27位E类 (留 待 后 用)图1-5 五
18、类互联网地址这些32位的地址通常写成四个十进制的数,其中 每个整数对应一个字节。这种表示方法称作“点分十 进制表示法(Dotted decimal notation )”。例如,作者 的系统就是一个B类地址,它表示为:140.252.13.33。 区分各类地址的最简单方法是看它的第一个十进 制整数。图 1-6列出了各类地址的起止范围,其中第一个十进制整数用加黑字体表示。类型 范 围 到到到 到到图1-6 各类IP地址的范围需要再次指出的是,多接口主机具有多个 IP地址,其中每个接口都对应一个 IP地址。 由于互联网上的每个接口必须有一个唯一的 IP地址,因此必须要有一个管理机构为接入互联网的网
19、络分配 IP地址。这个管理机构就是互联网络信息中心( Internet Network InformationCentre),称作InterNIC。InterNIC只分配网络号。主机号的分配由系统管理员来负责。Internet注册服务(IP地址和DNS域名)过去由NIC来负责,其网络地址是nic.ddn.mil。1993年4月1日,InterNIC成立。现在,NIC只负责处理国防数据网的注册请求,所有其他 的Internet用户注册请求均由InterNIC负责处理,其网址是:。事实上InterNIC由三部分组成:注册服务(),目录和数据库服 务(),以及信息服务()。有关InterNIC的其他
20、 信息参见习题1.8。有三类IP地址:单播地址(目的为单个主机)、广播地址(目的端为给定网络上的所有主 机)以及多播地址(目的端为同一组内的所有主机)。第12章和第13章将分别讨论广播和多播 的更多细节。在3.4节中,我们在介绍 IP选路以后将进一步介绍子网的概念。图 3-9给出了几个特殊的 IP地址:主机号和网络号为全 0或全1。1.5 域名系统尽管通过 IP地址可以识别主机上的网络接口,进而访问主机,但是人们最喜欢使用的还 是主机名。在 TCP/IP领域中,域名系统( DNS)是一个分布的数据库,由它来提供 IP地址和 主机名之间的映射信息。我们在第 14章将详细讨论DNS。现在,我们必须
21、理解,任何应用程序都可以调用一个标准的库函数来查看给定名字的主机 的IP地址。类似地,系统还提供一个逆函数给定主机的IP地址,查看它所对应的主机名。大多数使用主机名作为参数的应用程序也可以把 IP地址作为参数。例如,在第 4章中当我 们用Telnet进行远程登录时,既可以指定一个主机名,也可以指定一个 IP地址。1.6 封装当应用程序用 TCP传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作 一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部 信息),该过程如图 1-7所示。 TCP传给IP 的数据单元称作 TCP报文段或简称为 TCP 段(TCP s
22、egment)。IP传给网络接口层的数据单元称作 IP数据报(IP datagram) 。通过以太网传输的比特 流称作帧(Frame)。图1-7中帧头和帧尾下面所标注的数字是典型以太网帧首部的字节长度。在后面的章节中 我们将详细讨论这些帧头的具体含义。以太网数据帧的物理特性是其长度必须在 461500字节之间。我们将在 4.5节遇到最小长 度的数据帧,在2.8节中遇到最大长度的数据帧。所有的Internet标准和大多数有关TCP/IP的书都使用octet这个术语来表示字节。使 用这个过分雕琢的术语是有历史原因的,因为TCP/IP的很多工作都是在DEC-10系统上 进行的,但是它并不使用8 bi
23、t 的字节。由于现在几乎所有的计算机系统都采用8 bit 的字 节,因此我们在本书中使用字节(byte)这个术语。更准确地说,图1-7中IP和网络接口层之间传送的数据单元应该是分组( packet)。 分组既可以是一个IP数据报,也可以是IP数据报的一个片(fragment)。我们将在11.5节 讨论IP数据报分片的详细情况。用户数据Appl首部用户数据应用程序TCP首部应用数据TCP段IP首部TCP首部应用数据以太网 首部IP首部IP数据报TCP首部 以太网帧461500字节应用数据以太网 尾部以太网 驱动程序以太网图1-7 数据进入协议栈时的封装过程U D P 数据与 T C P 数据基本
24、一致。唯一的不同是 U D P 传给 I P 的信息单元称作 U D P数据报(UDP datagram),而且UDP的首部长为8字节。回想1.3节中的图1-4,由于TCP、UDP、ICMP和IGMP都要向IP传送数据,因此 IP必须在 生成的 IP首部中加入某种标识,以表明数据属于哪一层。为此, IP在首部中存入一个长度为8bit的数值,称作协议域。 1表示为ICMP协议,2表示为IGMP协议,6表示为TCP协议,17表 示为UDP协议。类似地,许多应用程序都可以使用 TCP或UDP来传送数据。运输层协议在生成报文首部 时要存入一个应用程序的标识符。 TCP和UDP都用一个16bit的端口号
25、来表示不同的应用程序。 TCP和UDP把源端口号和目的端口号分别存入报文首部中。网络接口分别要发送和接收 IP、ARP和RARP数据,因此也必须在以太网的帧首部中加入某种形式的标识,以指明生成数据的网络层协议。为此,以太网的帧首部也有一个 16 bit 的帧 类型域。1.7 分用当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各 层协议加上的报文首部。每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的 上层协议。这个过程称作分用( Demultiplexing),图1-8显示了该过程是如何发生的。应用程序 应用程序 应用程序 应用程序根据 T C P 或U D
26、 P 首 部中的端口号进行分用根据 I P 首部中的协 议值进行分用以太网 驱动程序进入的帧根据以太网首部中 的帧类型进行分用图1-8 以太网数据帧的分用过程为协议ICMP和IGMP定位一直是一件很棘手的事情。在图 1-4中,把它们与IP放在 同一层上,那是因为事实上它们是IP的附属协议。但是在这里,我们又把它们放在IP层 的上面,这是因为ICMP和IGMP报文都被封装在IP数据报中。对于ARP和RARP,我们也遇到类似的难题。在这里把它们放在以太网设备驱动程 序的上方,这是因为它们和IP数据报一样,都有各自的以太网数据帧类型。但在图 2-4 中,我们又把ARP作为以太网设备驱动程序的一部分,
27、放在 IP层的下面,其原因在逻 辑上是合理的。这些分层协议盒并不都是完美的。当进一步描述TCP的细节时,我们将看到协议确实是通过目的端口号、源 IP地址和源端口 号进行解包的。1.8 客户-服务器模型大部分网络应用程序在编写时都假设一端是客户,另一端是服务器,其目的是为了让服 务器为客户提供一些特定的服务。可以将这种服务分为两种类型:重复型或并发型。重复型服务器通过以下步骤进行交互:I1. 等待一个客户请求的到来。I2. 处理客户请求。I3. 发送响应给发送请求的客户。I4. 返回I1步。重复型服务器主要的问题发生在 I2状态。在这个时候,它不能为其他客户机提供服务。 相应地,并发型服务器采用
28、以下步骤:C1. 等待一个客户请求的到来。C2. 启动一个新的服务器来处理这个客户的请求。在这期间可能生成一个新的进程、任务 或线程,并依赖底层操作系统的支持。这个步骤如何进行取决于操作系统。生成的新服务器 对客户的全部请求进行处理。处理结束后,终止这个新服务器。C3. 返回C1步。 并发服务器的优点在于它是利用生成其他服务器的方法来处理客户的请求。也就是说,每个客户都有它自己对应的服务器。如果操作系统允许多任务,那么就可以同时为多个客户 服务。对服务器,而不是对客户进行分类的原因是因为对于一个客户来说,它通常并不能够辨 别自己是与一个重复型服务器或并发型服务器进行对话。一般来说, TCP服务
29、器是并发的,而 UDP服务器是重复的,但也存在一些例外。我们将 在11.12节对UDP对其服务器产生的影响进行详细讨论,并在 18.11节对TCP对其服务器的影响 进行讨论。1.9 端口号前面已经指出过, TCP和UDP采用16 bit 的端口号来识别应用程序。那么这些端口号是如 何选择的呢?服务器一般都是通过知名端口号来识别的。例如,对于每个 TCP/IP实现来说, FTP服务 器的TCP 端口号都是21,每个Telnet服务器的TCP端口号都是23 ,每个TFTP(简单文件传送协 议)服务器的UDP端口号都是 69。任何TCP/IP实现所提供的服务都用知名的 11023之间的端 口号。这些
30、知名端口号由 Internet号分配机构( Internet Assigned Numbers Authority, IANA ) 来管理。到1992年为止,知名端口号介于1255之间。2561023之间的端口号通常都是由 Unix系统占用,以提供一些特定的Unix服务也就是说,提供一些只有 Unix系统才 有的、而其他操作系统可能不提供的服务。现在IANA管理11023之间所有的端口号。 Internet扩展服务与Unix特定服务之间的一个差别就是Telnet和Rlogin。它们二者都 允许通过计算机网络登录到其他主机上。Telnet是采用端口号为23的TCP/IP标准且几乎 可以在所有操作系统上进行实现。相反,Rlogin最开始时只是为Unix系统设计的(尽管许多非Unix系统现在也提供该服务),因此在80年代初,它的有名端口号为513。客户端通常对它所使用的端口号并不关心,只需保证该端口号在本机上是唯一的就可以 了。客户端口号又称作临时端口号(即存在时间很短暂)。这是因为它通常只是在用户运行该 客户程序时才存在,而服务器则只要主机开着的,其服务就运行。大多数TCP/IP实现给临时端口分配 10245000之间的端口号。大于 5000的端口号是为其他服务器预留的( Internet上并不常用的服务 )。我们可以在后面看见许多这样的给临时端口分 配端口号的例子。So
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1