TCP/IP详解 第一章 概述

2 分层

2.1 分层的理解

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

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

2.2 一个例子

假设在一个局域网(LAN)如以太网中有两台主机,二者都运行FTP协议,图1-2列出了该过程所涉及到的所有协议.
例子

2.3 为什么要区分网络层和运输层呢?

网络接口层和应用层的目的是很显然的——前者处理有关通信媒介的细节(以太网、令牌环网等),而后者处理某个特定的用户应用程序(FTP、Telnet等)。但是,从表面上看,网络层和运输层之间的区别不那么明显。为什么要把它们划分成两个不同的层次呢?为了理解这一点,我们必须把视野从单个网络扩展到一组网络.

在80年代,网络不断增长的原因之一是大家都意识到只有一台孤立的计算机构成的“孤岛”没有太大意义,于是就把这些孤立的系统组在一起形成网络。随着这样的发展,到了90年代,我们又逐渐认识到这种由单个网络构成的新的更大的“岛屿”同样没有太大的意义。于是,人们又把多个网络连在一起形成一个网络的网络,或称作互连网 (internet)。一个互连网就是一组通过相同协议族互连在一起的网络。

构造互连网最简单的方法是把两个或多个网络通过路由器进行连接。它是一种特殊的用于网络互连的硬件盒。路由器的好处是为不同类型的物理网络提供连接:以太网、令牌环网、点对点的链接和FDDI(光纤分布式数据接口)等等.

这些盒子也称作IP路由器(IP Router),但我们这里使用路由器(Router)这个术语。从历史上说,这些
盒子称作网关( gateway),在很多TCP/IP文献中都使用这个术语。现在网关这个术语只用来表示应用层网关:一个连接两种不同协议族的进程(例如,TCP/IP和IBM的SNA),它为某个特定的应用程序服务(常常是电子邮件或文件传输).
路由器连接的两个网络
图1-3是一个包含两个网络的互连网:一个以太网和一个令牌环网,通过一个路由器互相连接。尽管这里是两台主机通过路由器进行通信,实际上以太网中的任何主机都可以与令牌环网中的任何主机进行通信。

在图1-3中,我们可以划分出端系统(End system)(两边的两台主机)和中间系统(Intermediate system)
(中间的路由器). 应用层和运输层使用端到端(End-to-end)协议. 在图中,只有端系统需要这两层协议。但是,网络层提供的却是逐跳( Hop-by-hop)协议,两个端系统和每个中间系统都要使用它.

在TCP/IP协议族中,网络层IP提供的是一种不可靠的服务。也就是说,它只是尽可能快地把分组从源结点送到目的结点,但是并不提供任何可靠性保证。而另一方面,TCP在不可靠的IP层上提供了一个可靠的运输层。为了提供这种可靠的服务,TCP采用了超时重传、发送和接收端到端的确认分组等机制。由此可见,运输层和网络层分别负责不同的功能。

从定义上看,一个路由器具有两个或多个网络接口层(因为它连接了两个或多个网络)。
任何具有多个接口的系统,英文都称作是多接口的(multihomed)。一个主机也可以有多个接口,但一般不称作路由器,除非它的功能只是单纯地把分组从一个接口传送到另一个接口。同样,路由器并不一定指那种在互联网中用来转发分组的特殊硬件盒。大多数的TCP/IP实现也允许一个多接口主机来担当路由器的功能,但是主机为此必须进行特殊的配置。在这种情况下,我们既可以称该系统为主机(当它运行某一应用程序时,如FTP或Telnet),也可以称之为路由器(当它把分组从一个网络转发到另一个网络时). 在不同的场合下使用不同的术语。

连接网络的另一个途径是使用网桥。网桥是在链路层上对网络进行互连,而路由器则是在网络层上对网络进行互连。网桥使得多个局域网(LAN)组合在一起,这样对上层来说就好像是一个局域网.

TCP/IP倾向于使用路由器而不是网桥来连接网络,因此我们将着重介绍路由器. 文献[ Perlman 1992]
的第12章对路由器和网桥进行了比较。

3 TCP/IP的分层

在TCP/IP协议族中,有很多种协议。图1-4给出了本书将要讨论的其他协议。
分层协议
TCP和UDP是两种最为著名的运输层协议,二者都使用IP作为网络层协议.

虽然TCP使用不可靠的IP服务,但它却提供一种可靠的运输层服务.本书第 17~22章将详细讨论TCP的内部操作细节. 然后,我们将介绍一些TCP的应用,如第26章中的Telnet和Rlogin、第27章中的FTP以及第28章中的SMTP等。这些应用通常都是用户进程.

UDP为应用程序发送和接收数据报。一个数据报是指从发送方传输到接收方的一个信息单元(例如,发送方指定的一定字节数的信息)。但是与TCP不同的是,UDP是不可靠的,它不能保证数据报能安全无误地到达最终目的。本书第11章将讨论UDP,然后在第14章(DNS:域名系统),第15章(TFTP:简单文件传送协议),以及第16章(BOOTP:引导程序协议)介绍使用UDP的应用程序。SNMP也使用了UDP协议,但是由于它还要处理许多其他的协议,因此本书把它留到第25章再进行讨论.

IP是网络层上的主要协议,同时被TCP和UDP使用。TCP和UDP的每组数据都通过端系统和每个中间路由器中的IP层在互联网中进行传输。在图1-4中,我们给出了一个直接访问IP的应用程序。这是很少见的,但也是可能的(一些较老的选路协议就是以这种方式来实现的。当然新的运输层协议也有可能使用这种方式)。第3章主要讨论IP协议,但是为了使内容更加有针对性,一些细节将留在后面的章节中进行讨论。第9章和第10章讨论IP如何进行选路。

ICMP是IP协议的附属协议。IP层用它来与其他主机或路由器交换错误报文和其他重要信息。第6章对ICMP的有关细节进行讨论。尽管ICMP主要被IP使用,但应用程序也有可能访问它。我们将分析两个流行的诊断工具,Ping和Traceroute(第7章和第8章),它们都使用了ICMP。

IGMP是Internet组管理协议。它用来把一个UDP数据报多播到多个主机。我们在第12章中描述广播(把一个UDP数据报发送到某个指定网络上的所有主机)和多播的一般特性,然后在第13章中对IGMP协议本身进行
描述。

ARP(地址解析协议)和RARP(逆地址解析协议)是某些网络接口(如以太网和令牌环网)使用的特殊协议,用来转换IP层和网络接口层使用的地址。我们分别在第4章和第5章对这两种协议进行分析和介绍。

4 互联网的地址

互联网上的每个接口必须有一个唯一的 Internet地址(也称作IP地址)。IP地址长32 bitoInternet地址
并不采用平面形式的地址空间,如1、2、3等。IP地址具有一定的结构,五类不同的互联网地址格式如图1-5所示。
五类地址

IP地址范围
需要再次指出的是,多接口主机具有多个IP地址,其中每个接口都对应一个IP地址.

由于互联网上的每个接口必须有一个唯一的IP地址,因此必须要有一个管理机构为接入互联网的
网络分配IP地址。这个管理机构就是互联网络信息中心( Internet Network InformationCentre),
称作InterNIC。InterNIC只分配网络号。主机号的分配由系统管理员来负责。

Internet注册服务(IP地址和DNS域名)过去由NIC来负责,其网络地址是nic.ddn.mil。
1993年4月1日,InterNIC成立。现在,NIC只负责处理国防数据网的注册请求,所有其他的Internet
用户注册请求均由InterNIC负责处理,其网址是: rs.internic.net.

有三类IP地址:单播地址(目的为单个主机)、广播地址(目的端为给定网络上的所有主机)以及多播地址(目的端为同一组内的所有主机).第12章和第13章将分别讨论广播和多播的更多细节.

在3.4节中,我们在介绍IP选路以后将进一步介绍子网的概念. 图3-9给出了几个特殊的IP地址:主机号和网络号为全0或全1.

5 域名系统

尽管通过IP地址可以识别主机上的网络接口,进而访问主机,但是人们最喜欢使用的还是主机名。
在TCP/IP领域中,域名系统( DNS)是一个分布的数据库,由它来提供IP地址和主机名之间的映
射信息。我们在第14章将详细讨论DNS。

现在,我们必须理解,任何应用程序都可以调用一个标准的库函数来查看给定名字的主机的IP地址。
类似地,系统还提供一个逆函数——给定主机的IP地址,查看它所对应的主机名。

大多数使用主机名作为参数的应用程序也可以把IP地址作为参数。例如,在第4章中当我们用Telnet
进行远程登录时,既可以指定一个主机名,也可以指定一个IP地址。

6 封装

当应用程序用TCP传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息),该过程如图1-7所示。TCP传给IP的数据单元称作TCP报文段或简称为TCP段(TCPsegment)。IP传给网络接口层的数据单元称作IP数据报(IP datagram)。通过以太网传输的比特流称作帧(Frame)。

封装过程
图1-7中帧头和帧尾下面所标注的数字是典型以太网帧首部的字节长度。

以太网数据帧的物理特性是其长度必须在46~1500字节之间。我们将在4.5节遇到最小长度的数据帧,
在2.8节中遇到最大长度的数据帧。

所有的Internet标准和大多数有关TCP/IP的书都使用octet这个术语来表示字节。使用这个过分雕琢的
术语是有历史原因的,因为TCP/IP的很多工作都是在DEC-10系统上进行的,但是它并不使用8bit的字节。由于现在几乎所有的计算机系统都采用8bit的字节,因此我们在本书中使用字节(byte)这个术语。

更准确地说,图1-7中IP和网络接口层之间传送的数据单元应该是分组( packet)。分组既可以是一个
IP数据报,也可以是IP数据报的一个片(fragment)。我们将在11.5节讨论IP数据报分片的详细情况。

UDP数据与TCP数据基本一致。唯一的不同是UDP传给IP的信息单元称作UDP数据报(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的端口号来表示不同的应用程序。TCP和UDP把源端口号和目的端口号分别存入报文首部中.

网络接口分别要发送和接收IP、ARP和RARP数据,因此也必须在以太网的帧首部中加入某种形式的标识,以指明生成数据的网络层协议。为此,以太网的帧首部也有一个16bit的帧类型域.

7 分用

当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上
的报文首部。每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的上层协议。这个过
程称作分用( Demultiplexing),图1-8显示了该过程是如何发生的。
分用过程

8 客户-服务器模型

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

9 端口号

前面已经指出过,TCP和UDP采用16 bit的端口号来识别应用程序。那么这些端口号是如何选择的呢?

服务器一般都是通过知名端口号来识别的。例如,对于每个TCP/IP实现来说,FTP服务器的TCP端口号都是21,每个Telnet服务器的TCP端口号都是23,每个TFTP(简单文件传送协议)服务器的UDP端口号都是69。任何TCP/IP实现所提供的服务都用知名的1~1023之间的端口号。这些知名端口号由Internet号分配机构(Internet Assigned Numbers Authority,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上并不常用的服务)。我们可以在后面看见许多这样的给临时端口分配端口号的例子。

10 标准化过程

究竟是谁控制着TCP/IP协议族,又是谁在定义新的标准以及其他类似的事情?事实上,有四个小组在负责Internet技术。
(1)ISOC;
(2)IAB;
(3)IETF;
(4)IRIF.

11 RFC

所有关于Internet的正式标准都以RFC (Request for Comment)文档出版。另外,大量的RFC并不是正式的标准,出版的目的只是为了提供信息。RFC的篇幅从1页到200页不等。每一项都用一个数字来标识,如RFC 1122,数字越大说明RFC的内容越新。

12 标准的简单服务

13 互联网

在图1-3中,我们列举了一个由两个网络组成的互联网——一个以太网和一个令牌环网。在1.4节和1.9节中,我们讨论了世界范围内的互联网——Internet,以及集中分配IP地址的需要( InterNIC),还讨论了知名端口号(IANA)。internet这个词第一个字母是否大写决定了它具有不同的含义。

internet意思是用一个共同的协议族把多个网络连接在一起。而Internet指的是世界范围内通过TCP/IP
互相通信的所有主机集合(超过100万台)。Internet是一个internet,但internet不等于Internet。

14 实现

15 应用编程接口

使用TCP/IP协议的应用程序通常采用两种应用编程接口(API): socket和TLI(运输层接
口:Transport Layer Interface)。前者有时称作“Berkeley socket”,表明它是从伯
克利版发展而来的。后者起初是由AT&T开发的,有时称作XTI (X/Open运输层接口),以承
认X/Open这个自己定义标准的国际计算机生产商所做的工作。XTI实际上是TLI的一个超集。

本书不是一本编程方面的书,但是偶尔会引用一些内容来说明TCP/IP的特性,不管大多数
的API ( socket)是否提供它们。所有关于socket和TLI的编程细节请参阅文献
[Stevens1990]。

16 测试网络

图1-11是本书中所有的例子运行的测试网络。
测试网络

在这个图中(作者的子网),大多数的例子都运行在下面四个系统中。图中所有的IP地址属于B类地址,网络号为140.252。所有的主机名属于.tuc.noao .edu这个域(noao代表National Optical Astronomy Observatories,tuc代表Tucson)。例如,右下方的系统有一个完整的名字: svr4.tuc.noao.edu,其IP地址是: 140.252.13.34。每个方框上方的名称是该主机运行的操作系统。这一组系统和网络上的主机及路由器运行于不同的TCP/IP实现。

需要指出的是,noao.edu这个域中的网络和主机要比图1-11中的多得多。这里列出来的只是本书中将要用到的系统。

在3.4节中,我们将描述这个网络所用到的子网形式。在4.6节中将介绍sun与netb之间的拨号SLIP的有关细节。2.4节将详细讨论SLIP。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值