TCP/IP-01-概述

来源:互联网 发布:java英语怎么读 编辑:程序博客网 时间:2024/05/17 05:04

 概述
1.1 引言
很多不同的厂家生产各种型号的计算机,它们运行完全不同的操作系统,
但TCP/IP协议族允许它们互相进行通信。
这一点很让人感到吃惊,因为它的作用已远远超出了起初的设想。
TCP/IP起源于6 0年代末美国政府资助的一个分组交换网络研究项目,
到9 0年代已发展成为计算机之间最常应用的组网形式。
它是一个真正的开放系统,因为协议族的定义及其多种实现可以不用花钱或花很少的钱就可以公开地得到。
它成为被称作“全球互联网”或“因特网(Internet)”的基础,
该广域网(WAN)已包含超过1 0 0万台遍布世界各地的计算机。

1.2 分层
网络协议通常分不同层次进行开发,每一层分别负责不同的通信功能。
一个协议族,比如TCP/IP,是一组不同层次上的多个协议的组合。
TCP/IP通常被认为是一个四层协议系统

4应用层:Telnet、FTP和e-mail等
3运输层:TCP和UDP
2网络层:IP、ICMP和IGMP
1链路层:设备驱动程序及接口卡

每一层负责不同的功能:
1)链路层,有时也称作数据链路层或网络接口层,
通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。
它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。
2) 网络层,有时也称作互联网层,处理分组在网络中的活动,例如分组的选路。
TCP/IP协议族中,网络层协议包括IP协议(网际协议),ICMP协议(Internet互联网控制报文协议),
以及IGMP协议(Internet组管理协议)。
3 )运输层主要为两台主机上的应用程序提供端到端的通信。
在TCP/IP协议族中,有两个互不相同的传输协议:
TCP(传输控制协议)和UDP(用户数据报协议)。TCP为两台主机提供高可靠性的数据通信。
它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,
确认接收到的分组,设置发送最后确认分组的超时时钟等。
由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。
而另一方面, UDP则为应用层提供一种非常简单的服务。
它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。
任何必需的可靠性必须由应用层来提供。
这两种运输层协议分别在不同的应用程序中有不同的用途,这一点将在后面看到。

4 ) 应用层负责处理特定的应用程序细节。
几乎各种不同的TCP/IP实现都会提供下面这些通用的应用程序:
.Telnet 远程登录。
.FTP 文件传输协议。
.SMTP 简单邮件传送协议。
.SNMP 简单网络管理协议。
.POP3 邮局协议
.HTTP 超文本传输协议
另外还有许多其他应用,在后面章节中将介绍其中的一部分。
到了9 0年代,我们又逐渐认识到这种由单个网络构成的新的更大的“岛屿”同样没有太大的意义。
于是,人们又把多个网络连在一起形成一个网络的网络,或称作互连网( Internet )。
一个互连网就是一组通过相同协议族互连在一起的网络。
构造互连网最简单的方法是把两个或多个网络通过路由器进行连接。
路由器的好处是为不同类型的物理网络提供连接:以太网、令牌环网、点对点的链接和F D D I(光纤分布式数据接口)等等。
路由器使用( Router )这个术语。
从历史上说,这些盒子称作网关( gateway),在很多TCP/IP文献中都使用这个术语。
现在网关这个术语只用来表示应用层网关:一个连接两种不同协议族的进程,它为某个特定的应用程序服务。

一个包含两个网络的互连网:一个以太网和一个令牌环网,通过一个路由器互相连接。
尽管这里是两台主机通过路由器进行通信,实际上以太网中的任何主机都可以与令牌环网中的任何主机进行通信。
应用层和运输层使用端到端( En d - t o - e n d)协议。
网络层提供的却是逐跳( Ho p - b y - h o p)协议,两个端系统和每个中间系统都要使用它。

在TCP/IP协议族中,网络层IP提供的是一种不可靠的服务。
也就是说,它只是尽可能快地把分组从源结点送到目的结点,但是并不提供任何可靠性保证。
而TCP在不可靠的IP层上提供了一个可靠的运输层。
为了提供这种可靠的服务, TCP采用了超时重传、发送和接收端到端的确认分组等机制。
由此可见,运输层和网络层分别负责不同的功能。
从定义上看,一个路由器具有两个或多个网络接口层(因为它连接了两个或多个网络)。
连接网络的另一个途径是使用网桥。
网桥是在链路层上对网络进行互连,而路由器则是在网络层上对网络进行互连。
网桥使得多个局域网( L A N)组合在一起,这样对上层来说就好像是一个局域网。
TCP /IP倾向于使用路由器而不是网桥来连接网络,因此我们将着重介绍路由器。
文献[Perlman 1992]的第1 2章对路由器和网桥进行了比较。

1.3 TCP/IP的分层

在TCP/IP协议族中,有很多种协议。
链路层:硬件接口+ARP+RARP
网络层:ICMP+IP+IGMP
运输层:TCP+UDP
应用层:用户进程1..n
TCP和UDP是两种最为著名的运输层协议,二者都使用IP作为网络层协议。
虽然TCP使用不可靠的IP服务,但它却提供一种可靠的运输层服务。
本书第1 7~2 2章将详细讨论TCP的内部操作细节。然后,
我们将介绍一些TCP的应用,如第2 6章中的Te l n e t和R l o g i n、
第2 7章中的FTP以及第2 8章中的S M T P等。这些应用通常都是用户进程。

UDP为应用程序发送和接收数据报。
一个数据报是指从发送方传输到接收方的一个信息单元。
但是与TCP不同的是,UDP是不可靠的,它不能保证数据报能安全无误地到达最终目的。
本书第11章将讨论UDP,第1 4章(D N S :域名系统),
第1 5章( TFTP:简单文件传送协议),第1 6章(BO OT P:引导程序协议)介绍使用UDP的应用程序。
S N M P也使用了UDP协议,但是由于它还要处理许多其他的协议,因此本书把它留到第2 5章再进行讨论。
IP是网络层上的主要协议,同时被TCP和UDP使用。
TCP和UDP的每组数据都通过端系统和每个中间路由器中的IP层在互联网中进行传输。
第3章主要讨论IP协议,但是为了使内容更加有针对
性,一些细节将留在后面的章节中进行讨论。
第9章和第1 0章讨论IP如何进行选路。
ICMP是IP协议的附属协议。IP层用它来与其他主机或路由器交换错误报文和其他重要信息。
第6章对ICMP的有关细节进行讨论。尽管ICMP主要被IP使用,但应用程序也有可能访问它。
我们将分析两个流行的诊断工具,P i n g和Tr a c e r o u t e(第7章和第8章),
它们都使用了ICMP。IGMP是Internet组管理协议。
它用来把一个UDP数据报多播到多个主机。
第1 2章中描述广播(把一个UDP数据报发送到某个指定网络上的所有主机)和多播的一般特性,
然后在第1 3章中对IGMP协议本身进行描述。
ARP(地址解析协议)和R ARP(逆地址解析协议)是某些网络接口(如以太网和令牌环网)使用的特殊协议,
用来转换IP层和网络接口层使用的地址。我们分别在第4章和第5章对这两种协议进行分析和介绍。

1.4 互联网的地址
互联网上的每个接口必须有一个唯一的Internet地址(也称作IP地址)。IP地址长32 bit。
Internet地址并不采用平面形式的地址空间,如1、2、3等。
/**************************************************************************/
IP地址长32 bit,有一定的结构,五类不同的互联网地址格式如下。
类型       起止范围
A类 0 + 7位[网络号]+24位[主机号] 0.0.0.0 --127.255.255.255
B类 10 +14位[网络号]+16位[主机号] 128.0.0.0--191.255.255.255
C类 110 +21位[网络号]+ 8位[主机号] 192.0.0.0--223.255.255.255
D类 1110 .............+28位[多播组号] 224.0.0.0--239.255.255.255
E类 11110 .............+27位[留待后用] 240.0.0.0--255.255.255.255
/*************************************************************************/

这些3 2位的地址通常写成四个十进制的数,其中每个整数对应一个字节。
这种表示方法称作“点分十进制表示法( Dotted decimal notation)”。
例如,作者的系统就是一个B类地址,它表示为:1 4 0 . 2 5 2 . 1 3 . 3 3。
区分各类地址的最简单方法是看它的第一个十进制整数。

需要再次指出的是,多接口主机具有多个IP地址,其中每个接口都对应一个IP地址。
由于互联网上的每个接口必须有一个唯一的IP地址,因此必须要有一个管理机构为接入互联网的网络分配IP地址。
这个管理机构就是互联网络信息中心( Internet Network Information Centre),称作I n t e r N I C。
I n t e r N I C只分配网络号。主机号的分配由系统管理员来负责。
Internet注册服务( IP地址和D N S域名)过去由N I C来负责,其网络地址是n i c . d d n . m i l。
1 9 9 3年4月1日,I n t e r N I C成立。现在,N I C只负责处理国防数据网的注册请求,
所有其他的Internet用户注册请求均由I n t e r N I C负责处理,其网址是:r s . i n t e r n i c . n e t。
事实上I n t e r N I C由三部分组成:注册服务(r s . i n t e r n i c . n e t),目录和数据库服
务(d s . i n t e r n i c . n e t),以及信息服务(i s . i n t e r n i c . n e t)。
有三类IP地址:单播地址(目的为单个主机)、
广播地址(目的端为给定网络上的所有主机)
多播地址(目的端为同一组内的所有主机)。

1.5 域名系统
尽管通过IP地址可以识别主机上的网络接口,进而访问主机,但是人们最喜欢使用的还是主机名。
在TCP/IP领域中,域名系统( D N S)是一个分布的数据库,由它来提供IP地址和主机名之间的映射信息。
我们在第1 4章将详细讨论D N S。
任何应用程序都可以调用一个标准的库函数来查看给定名字的主机的IP地址。
类似地,系统还提供一个逆函数—给定主机的IP地址,查看它所对应的主机名。
大多数使用主机名作为参数的应用程序也可以把IP地址作为参数。
例如,在第4章中当我们用Te l n e t进行远程登录时,既可以指定一个主机名,也可以指定一个IP地址。

1.6 封装
当应用程序用TCP传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。
其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息)
UDP数据与TCP数据基本一致。

1.7 分用
当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。
每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的上层协议。
这个过程称作分当进一步描述TCP的细节时,
我们将看到协议确实是通过目的端口号、源IP地址和源端口号进行解包的。

1.8 客户-服务器模型
大部分网络应用程序在编写时都假设一端是客户,另一端是服务器,其目的是为了让服务器为客户提供一些特定的服务。
可以将这种服务分为两种类型:重复型或并发型。
重复型服务器通过以下步骤进行交互:
I1. 等待一个客户请求的到来。
I2. 处理客户请求。
I3. 发送响应给发送请求的客户。
I4. 返回I1步。
重复型服务器主要的问题发生在I 2状态。在这个时候,它不能为其他客户机提供服务。
*************************************
并发型服务器采用以下步骤:
C1. 等待一个客户请求的到来。
C2. 启动一个新的服务器来处理这个客户的请求。
在这期间可能生成一个新的进程、任务或线程,并依赖底层操作系统的支持。
这个步骤如何进行取决于操作系统。生成的新服务器对客户的全部请求进行处理。
处理结束后,终止这个新服务器。
C3. 返回C1步。
并发服务器的优点在于它是利用生成其他服务器的方法来处理客户的请求。
也就是说,每个客户都有它自己对应的服务器。
如果操作系统允许多任务,那么就可以同时为多个客户服务。
对服务器,而不是对客户进行分类的原因是因为对于一个客户来说,
它通常并不能够辨别自己是与一个重复型服务器或并发型服务器进行对话。

一般来说, TCP服务器是并发的,而UDP服务器是重复的,但也存在一些例外。
我们将在11 . 1 2节对UDP对其服务器产生的影响进行详细讨论,
并在1 8 . 11节对TCP对其服务器的影响进行讨论。

1.9 端口号
前面已经指出过, TCP和UDP采用16 bit的端口号来识别应用程序。
那么这些端口号是如何选择的呢?
服务器一般都是通过知名端口号来识别的。
例如,对于每个TCP/IP实现来说, FTP服务器的TCP端口号都是2 1,
每个Te l n e t服务器的TCP端口号都是2 3,每个TFTP (简单文件传送协议)服务器的UDP端口号都是6 9。
任何TCP/IP实现所提供的服务都用知名的1~1 0 2 3之间的端口号。
这些知名端口号由Internet号分配机构( Internet Assigned Numbers Authority, IANA)来管理。
到1 9 9 2年为止,知名端口号介于1~2 5 5之间。
2 5 6~1 0 2 3之间的端口号通常都是由U n i x系统占用,
提供一些只有U n i x系统才有的、而其他操作系统可能不提供的服务。
现在IANA管理1~1023之间所有的端口号。
Internet扩展服务与U n i x特定服务之间的一个差别就是Te l n e t和R l o g i n。
它们二者都允许通过计算机网络登录到其他主机上。
Te l n e t是采用端口号为2 3的TCP/IP标准且几乎可以在所有操作系统上进行实现。
相反,R l o g i n最开始时只是为U n i x系统设计的(尽管许多非Unix系统现在也提供该服务),
因此在80年代初,它的有名端口号为513。
客户端通常对它所使用的端口号并不关心,只需保证该端口号在本机上是唯一的就可以了。
客户端口号又称作临时端口号(即存在时间很短暂)。
这是因为它通常只是在用户运行该客户程序时才存在,而服务器则只要主机开着的,其服务就运行。
大多数TCP/IP实现给临时端口分配1 0 2 4~5 0 0 0之间的端口号。
U n i x系统有保留端口号的概念。只有具有超级用户特权的进程才允许给它自己分配一个保留端口号。
这些端口号介于1~1 0 2 3之间,
一些应用程序(如有名的R l o g i n,2 6 . 2节)将它作为客户与服务器之间身份认证的一部分。

1.11 RFC
所有关于Internet的正式标准都以RFC(Request for Comment)文档出版。
另外,大量的RFC并不是正式的标准,出版的目的只是为了提供信息。
RFC的篇幅从1页到2 0 0页不等。每一项都用一个数字来标识,如RFC 11 2 2,数字越大说明RFC的内容越新。
所有的RFC都可以通过电子邮件或用FTP从Internet上免费获取。
如果发送下面这份电子邮件,就会收到一份获取RFC的方法清单:

是一些重要的RFC文档:
1 ) 赋值RFC(Assigned Numbers RFC)列出了所有Internet协议中使用的数字和常数。
至本书出版时为止,最新RFC的编号是1340 [Reynolds 和Postel 1992] 。
所有著名的Internet端口号都列在这里。
当这个RFC被更新时,索引清单会列出RFC 1340被替换的时间。
2) Internet正式协议标准,目前是RFC 1600[Postel 1994]。
这个RFC描述了各种Internet协议的标准化现状。
每种协议都处于下面几种标准化状态之一:标准、草案标准、提议标准、实验标准、信息标准和历史标准。
另外,对每种协议都有一个要求的层次、必需的、建议的、可选择的、限制使用的或者不推荐的。
3 ) 主机需求RFC,11 2 2和1123[Braden 1989a, 1989b]。
RFC 11 2 2针对链路层、网络层和运输层;RFC 11 2 3针对应用层。
这两个RFC对早期重要的RFC文档作了大量的纠正和解释。如果要查看有关协议更详细的细节内容,它们通常是一个入口点。
它们列出了协议中关于“必须”、“应该”、“可以”、“不应该”或者“不能”等特性及其实现细节。
文献[Borman 1993b]提供了有关这两个RFC的实用内容。
RFC 1127[Braden 1989c]对工作小组开发主机需求RFC过程中的讨论内容和结论进行了非正式的总结。
4) 路由器需求RFC,目前正式版是RFC 1009[Braden and Postel 1987],但一个新版已接近完成[Almquist 1993]。
它与主机需求RFC类似,但是只单独描述了路由器的需求。

1.12 标准的简单服务
有一些标准的简单服务几乎每种实现都要提供。在本书中我们将使用其中的一些服务程
序,而客户程序通常选择Te l n e t。当使用TCP和UDP提供相同的服务时,一般选择相同的端口号。我们发现它们都是奇数。
这是有历史原因的,这些端口号都是从N C P端口号派生出来的(N C P,即网络控制协议,是TCP的前身)。
N C P是单工的,不是全双工的,因此每个应用程序需要两个连接,需预留一对奇数和偶数端口号。
当TCP和UDP成为标准的运输层协议时,每个应用程序只需要一个端口号,因此就使用了NCP中的奇数。

1.13 互联网
Internet这个词第一个字母是否大写决定了它具有不同的含义。
Internet意思是用一个共同的协议族把多个网络连接在一起。
而Internet指的是世界范围内通过TCP/IP互相通信的所有主机集合(超过1 0 0万台)。
Internet是一个Internet,但Internet不等于Internet。

1.14 实现
既成事实标准的TCP/IP软件实现来自于位于伯克利的加利福尼亚大学的计算机系统研究小组。
从历史上看,软件是随同4.x BSD系统(Berkeley SoftwareD i s t r i b u t i o n)的网络版一起发布的。
它的源代码是许多其他实现的基础,起初关于Internet的很多研究,
现在仍然在伯克利系统中应用—新的拥塞控制算法、多播、“长肥管道”修改以及其他类似的研究。

1.15 应用编程接口
使用TCP/IP协议的应用程序通常采用两种应用编程接口( A P I):
s o c k e t和T L I(运输层接口:Transport Layer Interface)。
前者有时称作“ Berkeley socket”,表明它是从伯克利版发展而来的。
后者起初是由AT & T开发的,有时称作X T I(X / O p e n运输层接口),
以承认X /Open这个自己定义标准的国际计算机生产商所做的工作。X T I实际上是T L I的一个超集。
本书不是一本编程方面的书,但是偶尔会引用一些内容来说明TCP/IP的特性,
不管大多数的API(socket)是否提供它们。
所有关于socket和TLI的编程细节请参阅文献[Stevens 1990]。

1.17 小结
本章快速地浏览了TCP/IP协议族,介绍了在后面的章节中将要详细讨论的许多术语和协议。
TCP/IP协议族分为四层:链路层、网络层、运输层和应用层,每一层各有不同的责任。
网络层和运输层之间的区别是最为关键的:
网络层( IP)提供点到点的服务,
运输层( TCP和UDP)提供端到端的服务。
一个互联网是网络的网络。构造互联网的共同基石是路由器,它们在IP层把网络连在一起。
第一个字母大写的Internet是指分布在世界各地的大型互联网,其中包括1万多个网络和超过1 0 0万台主机。
在一个互联网上,每个接口都用IP地址来标识,尽管用户习惯使用主机名而不是IP地址。
域名系统为主机名和IP地址之间提供动态的映射。端口号用来标识互相通信的应用程序。
服务器使用知名端口号,而客户使用临时设定的端口号。

习题
1.1 请计算最多有多少个A类、B类和C类网络号。
1.2 用匿名FTP从主机nic.merit.edu上获取文件nsfnet/statistics/history.netcount。
该文件包含在N S F N E T网络上登记的国内和国外的网络数。
画一坐标系,横坐标代表年,纵坐标代表网络总数的对数值。纵坐标的最大值是习题1 . 1的结果。
如果数据显示一个明显的趋势,请估计按照当前的编址体制推算,何时会用完所有的网络地址。
1.3 获取一份主机需求RFC拷贝[Braden 1989a],
阅读有关应用于TCP/IP协议族每一层的稳健性原则。这个原则的参考对象是什么?
1.4 获取一份最新的赋值RFC拷贝。“quote of the day”协议的有名端口号是什么?哪个RFC对该协议进行了定义?
1.5 如果你有一个接入TCP/IP互联网的主机帐号,它的主IP地址是多少?
这台主机是否接入了Internet?它是多接口主机吗?
1.6 获取一份RFC 1000的拷贝,了解RFC这个术语从何而来。
1.7 与Internet协会联系,
isoc@isoc.org或者+1 703 648 9888,了解有关加入的情况。
1.8 用匿名FTP从主机is.internic.net处获取文件about- internic/information-about-the-internic。


 

原创粉丝点击