TCP/IP详解卷一:协议(第一章:概述)

自古美人都是妖i 提交于 2021-01-11 07:55:30

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

分层
网络协议通常分不同层次进行开发,每一层分别负责不同的通信功能。一个协议族,比如TCP/IP,是一组不同层次上的多个协议的组合。TCP/IP通常被认为是一个四层协议系统,如下:
 
每一层负责不同的功能:
链路层:有时也称作数据链路层或网络接口层。通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。
网络层:有时也称作互联网层,处理分组在网络中的活动,例如分组的选路。在TCP/IP协议族中,网络层协议包括IP协议(网际协议),ICMP协议(Internet互联网控制报文协议),以及IGMP协议(Interner组管理协议)。
运输层:主要为两台主机上的应用程序提供端到端的通信。在TCP/IP协议族中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP为两台主机提供高可靠性的数据通信。它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认收到的分组,设置发送最后确认分组的超时时钟等。由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。而另一方面,UDP则为应用层提供一种非常简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必须的可靠性必须由应用层来提供。这两种运输协议分别在不同的应用程序中有不同的用途。
应用层:负责处理特定的应用程序细节。几乎各种不同的TCP/IP实现都会提供下面这些通用的应用程序:
Telnet远程登录,FTP文件传输协议,SMTP简单邮件传送协议,SNMP简单网络管理协议。另外还有许多其他应用。
TCP/IP协议族是一组不同的协议组合在一起构成的协议族。尽管通常称该协议族为TCP/IP,但TCP和IP只是其中的两种协议而已。该协议族的另一个名字是Internet协议族。
网络接口层和应用层的目的是很显然的-----前者处理有关通信媒介的细节(如以太网,令牌环网等),而后者处理某个特定的用户应用程序(FTP,Telnet等)。
在80年代,网络不断增长的原因之一是大家意识到只有一台孤立的计算机构成的"孤岛"没有太大意义,于是把这些孤立的系统组在一起形成网络。随着这样的发展,到了90年代,我们又逐渐认识到这种由单个网络构成的新的更大的"岛屿"同样没有太大的意义。于是,人们又把多个网络连在一起形成一个网络的网络,或称作互连网。一个互连网(Internet)就是一组通过相同协议族互连在一起的网络。
构成互连网最简单的方法是把两个或多个网络通过路由器进行连接。它是一种特殊的用于网络互连的硬件盒。路由器的好处是为不同类型的物理网络提供连接:以太网,令牌环网,点对点的链接和FDDI(光纤分布式数据接口)等等。
这些盒子也称作IP路由器。从历史上说,这些盒子称作网关(gateway),现在网关这个术语只用来表示应用层网关:一个连接两种不同协议族的进程(例如TCP/IP和IBM的SNA),它为某个特定的应用程序服务(常常是电子邮件或文件传输)。
下图是一个包含两个网络的互连网:一个以太网和一个令牌环网。通过一个路由器互相连接。尽管这里是两台主机通过路由器进行通信,实际上以太网中的任何主机都可以与令牌环网中的任何主机进行通信。
 
在上图中,我们可以划分出端系统(两边的两台主机)和中间系统(中间的路由器)。应用层和运输层使用端到端协议。在图中,只有端系统需要这两层协议。但是,网络层提供的却是逐跳协议,两个端系统和每个中间系统都要使用它。
在TCP/IP协议族中,网络层IP提供的是一种不可靠的服务。也就是说,它只是尽可能快的把分组从源结点送到目的结点,但是并不提供任何可靠性保证。而另一方面,TCP在不可靠的IP层上提供了一个可靠的运输层。为了提供这种可靠的服务,TCP采用了超时重发,发送和接受端到端的确认分组等机制。由此可见,运输层和网络层分别负责不同的功能。
从定义上看,一个路由器具有两个或多个网络接口层,因为它连接了两个或多个网络。
任何具有多个接口的系统,英文都称作是多接口的。一个主机也可以有多个接口,但一般不称做路由器,除非它的功能只是单纯地把分组从一个接口传送到另一个接口。同样,路由器并不一定指那种在互联网中用来转发分组的特殊硬件盒。大多数的TCP/IP实现也允许一个多接口主机来担当路由器的功能,但是主机为此必须进行特殊的配置。在这种情况下,我们既可以称该系统为主机(当它运行某一应用程序时,如FTP或Telnet),也可以称之为路由器(当它把分组从一个网络转发到另一个网络时)。在不同的场合下使用不同的术语。
互联网的目的之一是在应用程序中隐藏所有的物理细节。随着增加不同类型的物理网络,可能会有20个路由器,但应用层仍然是一样的。物理细节的隐藏使得互联网功能非常强大,也非常有用。
连接网络的另一个途径是使用网桥。网桥是在链路层上对网络进行互连,而路由器则是在网络层上对网络进行互连。网桥使得多个局域网(LAN)组合在一起,这样对上层来说就好像是一个局域网。TCP/IP倾向于使用路由器而不是网桥来连接网络。

TCP/IP的分层
在TCP/IP协议族中有很多种协议,下图是TCP/IP协议族中不同层次的协议:
 
TCP和UDP是两种最为著名的运输层协议,二者都是用IP作为网络层协议。
虽然TCP使用不可靠的IP服务,但它却提供一种可靠的运输层服务。UDP为应用程序发送和接受数据报。一个数据报是指从发送方传输到接收方的一个信息单元(例如,发送方指定的一定字节数的信息)。但是与TCP不同的是,UDP是不可靠的,它不能保证数据报能安全无误的到达最终目的。
IP是网络层上的主要协议,同时被TCP和UDP使用。TCP和UDP的每组数据都通过端系统和每个中间路由器中的IP层在互联网中进行传输。
ICMP是IP协议的附属协议。IP层用它来与其它主机或路由器交换错误报文和其它重要信息。
IGMP是Internet组管理协议。它用来把一个UDP数据报多播到多个主机。
ARP(地址解析协议)和RARP(逆地址解析协议)是某些网络接口(如以太网和令牌环网)使用的特殊协议,用来转换IP层和网络接口层使用的地址。

互联网的地址
互联网上的每个接口必须有一个唯一的Internet地址(也称作IP地址)。IP地址长32bit。Internet地址并不采用平面形式的地址空间,如1,2,3等。IP地址具有一定的结构,五类不同的互连网地址格式如下图:
 
这些32位的地址通常写成4个十进制的数,其中每个整数对应一个字节。这种表示方法称作"点分十进制表示法"。
区分各类IP地址的最简单的方法是看它的第一个十进制整数。下图列出了各类IP地址的起止范围:
 
需要再次指出的是,多接口主机具有多个IP地址,其中每个接口都对应一个IP地址。
由于互联网上的每个接口必须有一个唯一的IP地址,因此必须要有一个管理机构为接入互联网的网络分配IP地址。这个管理机构就是互联网络信息中心,称作InterNIC。InterNIC只分配网络号。主机号的分配由系统管理员来负责。
Internet注册服务(IP地址和DNS域名)过去由NIC来负责。1993年4月1日,InterNIC成立。现在NIC只负责处理国防数据网的注册请求,所有其他的Internet用户的注册请求均由InterNIC负责处理。
事实上,InterNIC由三部分组成:注册服务,目录和数据库服务,以及信息服务。
有三类IP地址:单播地址(目的为单个主机),广播地址(目的端为给定网络上的所有主机)以及多播地址(目的端为同一组内的所有主机)。

域名系统
尽管通过IP地址可以识别主机上的网络接口,进而访问主机。但是人们最喜欢使用的还是主机名。在TCP/IP领域中,域名系统(DNS)是一个分布的数据库,由它来提供IP地址和主机名之间的映射信息。
任何一个应用程序都可以调用一个标准的库函数来查看给定名字的主机的IP地址。类似地,系统还提供一个逆函数---给定主机的IP地址,查看它所对应的主机名。大多数使用主机名作为参数的应用程序也可以把IP地址作为参数。
封装
当应用程序使用TCP传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当做一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息),下图描述了数据进入协议栈时的封装过程:
 
TCP传给IP的数据单元称作TCP报文段或简称为TCP段,IP传给网络接口层的数据单元称作IP数据报。通过以太网传输的比特流称作帧(Frame)。
上图中帧头和帧尾下面所标注的数字是典型以太网帧首部的字节长度。以太网数据帧的物理特性是其长度必须在46~1500字节之间。
更准确的讲,上图中IP和网络接口层之间传递的数据单元应该是分组。分组既可以是一个IP数据报,也可以是IP数据报的一个片。
UDP数据和TCP数据基本一致。唯一的不同是UDP传给IP的数据单元称作UDP数据报,而且UDP的首部长为8字节。
由于TCP,UDP,ICMP和IGMP都要向IP传送数据,因此IP必须在生成的首部中加入某种标识,以表明数据属于哪一层。 为此,IP在首部中存入一个长度为8位的数值,称作协议域。1表示为ICMP协议,2表示为IGMP协议,6表示为TCP协议,17表示为UDP协议。
类似的,许多应用程序都可以使用TCP或UDP来传送数据。运输层协议在生成报文首部时存入一个应用程序的标识符。TCP和UDP都用一个16位的端口号来表示不同的应用程序。TCP和UDP把源端口号和目的端口号分别存入报文首部中。
网络接口分别要发送和接收IP,ARP,RARP数据,因此也必须在以太网的帧首部中加入某种形式的标识,以指明生成数据的网络层协议。为此,以太网的帧首部也有一个16位的帧类型域。
分用
当目的主机接收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的上层协议。这个过程称作分用,如下图:
 
客户---服务器模型
大部分网络应用程序在编写时都假设一端是客户,另一端是服务器,其目的是让服务器为客户提供一些特定的服务。可以将这种服务分为两种类型:重复型和并发型。重复型服务器通过以下步骤进行交互:
等待一个客户请求的到来;
处理客户请求;
发送响应给发送请求的客户;
返回第一步:等待一个客户请求的到来。
重复型服务器主要的问题发生在第二步,在这个时候,它不能为其他客户机提供服务。
相应的,并发型服务器采用以下步骤进行交互:
等待一个客户请求的到来;
启动一个新的服务器来处理这个客户请求。在这期间可能生成一个新的进程,任务或线程,并依赖底层操作系统的支持。这个步骤如何进行取决于操作系统。生成的新服务器对客户的全部请求进行处理。处理结束后,终止这个服务器。
返回第一步:等待一个客户请求的到来。
并发服务器的优点在于它是利用生成其他服务器的方法来处理客户的请求。也就是说,每个客户都有他自己对应的服务器。如果操作系统允许多任务,那么就可以同时为多个客户服务。
对服务器,而不是对客户进行分类的原因是,对于一个客户来说,它通常并不能够辨别自己是与重复型服务器或并发型服务器进行对话。
一般来说,TCP服务器是并发的,而UDP服务器是重复的,但也存在一些例外。
端口号
前面已经指出过,TCP和UDP采用16位的端口号来识别应用程序。
服务器一般都是通过知名端口号来识别的。例如,对于每个TCP/IP实现来说,FTP服务器的TCP端口号都是21;每个Telnet服务器的TCP端口号都是23;每个TFTP(简单文件传输协议)服务器的UDP端口号都是69.任何TCP/IP实现所提供的服务都用知名的1~1023之间的端口号。这些知名端口号由Internet号分配机构(IANA)来管理。
到1992年为止,知名端口号介于1~255之间。256~1023之间的端口号通常都是由Unix系统占用,以提供一些特定的Unix服务---也就是说,提供一些只有Unix系统才有的,而其他操作系统可能不提供的服务。现在IANA管理1~1023之间所有的端口号。
Internet扩展服务与Unix特定服务之间的一个差别就是Telnet和Rlogin。它们二者都允许通过计算机网络登录到其他主机上。Telnet是采用端口号为23的TCP/IP标准且几乎可以在所有操作系统上进行实现。相反,Rlogin最开始时只是为Unix系统设计的(尽管许多非Unix系统现在也提供该服务),因此在80年代初,它的知名端口号为513。
客户端通常对它所使用的端口号并不关心,只需保证该端口号在本机上是唯一的就可以了。客户端端口号又称作临时端口号(即存在时间很短暂)。这是因为它通常只是在用户运行该客户端程序时才存在。而服务器则只要主机是开着的,其服务就运行。
大多数TCP/IP实现给临时端口号分配1024~5000之间的端口号。大于5000的端口号是为其他服务器预留的(Internet上并不常用的服务)。
Unix系统有保留端口号的概念。只有具有超级用户特权的进程才允许给它自己分配一个保留端口号。这些端口号介于1~1023之间,一些应用程序将它作为客户与服务器之间身份认证的一部分。
标准化过程
有四个小组在负责Internet技术:
1.Internet协会(ISOC,Internet   Society)是一个推动,支持和促进Internet不断增长和发展的专业组织,它把Internet作为全球研究通信的基础设施。
2.Internet体系结构委员会(IAB,Internet   Architecture   Board)是一个技术监督和协调的机构。它由国际上来自不同专业的15个志愿者组成,其职责是负责Internet标准的最后编辑和技术审核。IAB隶属于ISOC。
3.Internet工程专门小组(IETF)是一个面向近期标准的组织,它分为9个领域(应用,寻径和寻址,安全等等)。IETF开发成为Internet标准的规范。为帮助IETF主席,又成立了Internet工程指导小组(IESG)。
4.Internet研究专门小组(IRIF)主要对长远的项目进行研究,IRTF和IETF都隶属于IAB。
RFC
所有关于Internet的正式标准都以RFC(Request   for   Comment)文档出版。另外,大量的RFC并不是正式的标准,出版只是为了提供信息。RFC的篇幅从1页到200页不等。每一项都用一个数字来标识,如RFC1122,数字越大说明RFC的内容越新。
标准的简单服务
有一些标准的简单服务几乎每种实现都要提供。下图描述了这些服务。从图中可以看出,当使用TCP和UDP提供相同的服务时,一般选择相同的端口号。
 
如果仔细检查这些标准的简单服务以及其他标准的TCP/IP服务(如Telnet,FTP,SMTP等)的端口号,我们发现它们都是奇数。这是有历史原因的,因为这些端口号都是从NCP端口号派生出来的(NCP,即网络控制协议,是ARPANET的运输层协议,是TCP的前身)。NCP是单工的,不是全双工的,因此每个应用程序需要两个连接,需预留一对奇数和偶数端口号。当TCP和UDP成为标准的运输层协议时,每个应用程序只需要一个端口号,因此就是用了NCP中的奇数。
互联网
internet这个词第一个字母是否大写决定了它具有不同的含义。internet意思是用一个共同的协议族把多个网络连接起来。而Internet指的是世界范围内通过TCP/IP互相通信的所有主机集合。Internet是一个internet,但internet不等于Internet。
应用编程接口
使用TCP/IP协议的应用程序通常采用两种应用编程接口(API):socket和TLI(运输层接口:Transport   Layer   Interface)。前者有时称作"Berkeley   socket",表明它是从伯克利版发展而来的。后者起初是由AT&T开发的,有时称作XTI(X/Open运输层接口),以承认X/Open这个自己定义标准的国际计算机生产商所做的工作。XTI实际上是TLI的一个超集。
小结
TCP/IP协议族分为四层:链路层,网络层,运输层,应用层,每一层各有不同的责任。在TCP/IP中,网络层和运输层之间的区别是最为关键的:网络层(IP)提供点到点的服务,而运输层(TCP和UDP)提供端到端的服务。
一个互连网是网络的网络。构建互连网的共同基石是路由器,它们在IP层把网络连在一起。第一个字母大写的Internet是指分布在世界各地的大型互连网,其中包括1万多个网络和超过100万台主机。
在一个互联网上,每个接口都用IP地址来标识。尽管用户习惯使用主机名而不是IP地址。域名系统为主机名和IP地址之间提供动态的映射。端口号用来标识互相通信的应用程序。服务器使用知名端口号,而客户使用临时设定的端口号。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!