网络分层
网络协议通常分不同层次进行开发,每一层分别负责不同的通信功能。一个协议族,比如TCP/IP,是一组不同层次上的多个协议的组合。TCP/IP通常被认为是一个四层协议系统
每一层负责不同的功能,从底层向上分别是:
(1) 链路层
有时也称作数据链路层或网络接口层,
通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。
它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。
(2) 网络层
有时也称作互联网层,处理分组在网络中的活动,例如分组的选路。
在TCP/IP协议族中,网络层协议包括 I P协议(网际协议),I C M P协议(I n t e r n e t互联网控
制报文协议),以及I G M P协议(I n t e r n e t组管理协议)。
(3 ) 运输层
主要为两台主机上的应用程序提供端到端的通信。在 T C P / I P协议族中,有两个
互不相同的传输协议:T C P(Transmission Control Protocol)和U D P(User Data Protocol)。
T C P为两台主机提供高可靠性的数据通信。它所做的工作包括把应用程序交给它的数据分
成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟
等。由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。
而另一方面,U D P则为应用层提供一种非常简单的服务。它只是把称作数据报的分组
从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠
性必须由应用层来提供。
这两种运输层协议分别在不同的应用程序中有不同的用途,这一点将在后面看到。
4 ) 应用层
负责处理特定的应用程序细节。几乎各种不同的 T C P / I P实现都会提供下面这些
通用的应用程序:
? Telnet 远程登录。
? FTP 文件传输协议。
? SMTP 简单邮件传送协议。
? SNMP 简单网络管理协议。
假设在一个局域网( L A N)如以太网中有两台主机,二者都运行
F T P协议,图1 - 2列出了该过程所涉及到的所有协议。
大多数的网络应用程序都被设计成客户—服务器模式。如图举例的是一个F T P客户程序和另一个F T P服务器程序
F T P是一种应用层协议, T C P是一种运输层协议,I P是一种网络层协议,而以太网协议则应用于链路层上。 T C P / I P协议族是一组不同的协议组合在一起构成的协议族。尽管通常称该协议族为 T C P / I P,但T C P和I P只是其中的两种协议而已(该协议族的另一个名字是 I n t e r n e t协议族(Internet Protocol Suite))。
由于单一网络的局限性,于是,人们又把多个网络连在一起形成一个网络的网络,或称作互连网 ( i n t e r n e t )。一个互连网就是一组通过相同协议族互连在一起的网络。
构造互连网最简单的方法是把两个或多个网络通过路由器进行连接。它是一种特殊的用
于网络互连的硬件盒。路由器的好处是为不同类型的物理网络提供连接:以太网、令牌环网、
点对点的链接和F D D I(光纤分布式数据接口)等等。
这些盒子也称作I P路由器(IP Router),但我们这里使用路由器( R o u t e r )这个术语。
从历史上说,这些盒子称作网关( g a t e w a y),在很多T C P / I P文献中都使用这个术语。
现在网关这个术语只用来表示应用层网关:一个连接两种不同协议族的进程(例如,
TCP/IP和IBM的SNA),它为某个特定的应用程序服务(常常是电子邮件或文件传输)。
图1 - 3是一个包含两个网络的互连网:一个以太网和一个令牌环网,通过一个路由器互相
连接。尽管这里是两台主机通过路由器进行通信,实际上以太网中的任何主机都可以与令牌
环网中的任何主机进行通信。
在图 1 - 3中,我们可以划分出端系统( End system )(两边的两台主机)和中间系统
(Intermediate system)(中间的路由器)。应用层和运输层使用端到端( En d - t o - e n d)协议。在
图中,只有端系统需要这两层协议。但是,网络层提供的却是逐跳( Ho p - b y - h o p)协议,两个端系统和每个中间系统都要使用它。
在T C P / I P协议族中,网络层 I P提供的是一种不可靠的服务。也就是说,它只是尽可能快
**地把分组从源结点送到目的结点,但是并不提供任何可靠性保证。**而另一方面, T C P在不可
靠的I P层上提供了一个可靠的运输层。为了提供这种可靠的服务, T C P采用了超时重传、发
送和接收端到端的确认分组等机制。由此可见,运输层和网络层分别负责不同的功能。
我们可以把淘宝买卖双方的关系,比作可靠的传输层TCP,因为他们之间的交易是需要确认的是可靠的。如果买家没有收到货物,肯定不能给卖家确认。但是快递公司可比作不可靠的网络层协议(IP)。卖家把一部销售给买家的手机封在一个包裹内(IP封包的过程),并且把这个包裹交给快递。对于快递的收件员,其实他并不清楚这个包裹内的东西是什么,他只用负责把这个包裹按照上面写的地址送到买家的手中(IP路由的过程)。由于网络层协议(IP)和快递一样不总是都靠谱,所以丢包是难免的。一旦出现丢包,长期没有收到快递的愤怒的买家就会找到卖家,倒霉的卖家只能把那部手机重新再发一次(一般快递都会推脱责任不予赔偿),这个过程就叫做TCP的超时重传。流着泪的卖家把新的包裹再次交给收件员,对于卖家而言这确实是再次。但是对于收件员而言,这只是一个普通的包裹,绝对不可能知道这是上次丢失包裹的一次重传。(这也是网络分层的目的,向下层隐藏上层的工作细节)。非常幸运的是,这次快递公司“不辱使命”成功完成了任务,把包裹交给了淘宝买家,买家对手机进行检查并且给卖家进行确认(TCP对数据的确认),本次会话结束。
互联网的目的之一是在应用程序中隐藏所有的物理细节。虽然这一点在图 1 - 3由两个网络
组成的互联网中并不很明显,但是应用层不能关心(也不关心)一台主机是在以太网上,而
另一台主机是在令牌环网上,它们通过路由器进行互连。随着增加不同类型的物理网络,可
能会有2 0个路由器,但应用层仍然是一样的。物理细节的隐藏使得互联网功能非常强大,也
非常有用。
连接网络的另一个途径是使用网桥。网桥是在链路层上对网络进行互连,而路由器则是
在网络层上对网络进行互连。网桥使得多个局域网( L A N)组合在一起,这样对上层来说就
好像是一个局域网。
TCP /IP倾向于使用路由器而不是网桥来连接网络,因此我们将着重介绍路由器。文献
[Perlman 1992]的第1 2章对路由器和网桥进行了比较。
(1)TCP/IP分层
T C P和U D P是两种最为著名的运输层协议,二者都使用 I P作为网络层协议。
-
虽然T C P使用不可靠的 I P服务,但它却提供一种可靠的运输层服务。 -
U D P为应用程序发送和接收数据报。一个数据报是指从发送方传输到接收方的一个信息单元(例如,发送方指定的一定字节数的信息)。但是与T C P不同的是,U D P是不可靠的,它不能保证数据报能安全无误地到达最终目的。 -
I P是网络层上的主要协议,同时被 T C P和U D P使用。T C P和U D P的每组数据都通过端系统
和每个中间路由器中的I P层在互联网中进行传输。
-
ICMP是I P协议的附属协议。I P层用它来与其他主机或路由器交换错误报文和其他重要信息。尽管I C M P主要被I P使用,但应用程序也有可能访问它。我们将分析两个流行的诊断工具,P i n g和Tr a c e r o u t e(第7章和第8章),它们都使用了I C M P。 -
IGMP是I n t e r n e t组管理协议。它用来把一个 UDP数据报多播到多个主机。 -
ARP(地址解析协议)和R A R P(逆地址解析协议)是某些网络接口(如以太网和令牌环
网)使用的特殊协议,用来转换 I P层和网络接口层使用的地址。
互联网地址
互联网上的每个接口必须有一个唯一的 I n t e r n e t地址(也称作 I P地址)。I P地址长32 bit。
I n t e r n e t地址并不采用平面形式的地址空间,如 1、2、3等。I P地址具有一定的结构,五类不同
的互联网地址格式如图1 - 5所示
这些3 2位的地址通常写成四个十进制的数,其中每个整数对应一个字节。这种表示方法称作“点分十
进制表示法(Dotted decimal notation)”。例如,作者的系统就是一个B类地址,它表示为:1 4 0 . 2 5 2 . 1 3 . 3 3。区分各类地址的最简单方法是看它的第一个十进制整数。图 1 - 6列出了各类地址的起止范围,其中第
一个十进制整数用加黑字体表示。
域名系统
尽管通过I P地址可以识别主机上的网络接口,进而访问主机,但是人们最喜欢使用的还是主机名。在 T C P / I P领域中,域名系统( D N S)是一个分布的数据库,由它来提供 I P地址和主机名之间的映射信息。现在,我们必须理解,任何应用程序都可以调用一个标准的库函数来查看给定名字的主机的I P地址。类似地,系统还提供一个逆函数—给定主机的I P地址,查看它所对应的主机名。大多数使用主机名作为参数的应用程序也可以把 I P地址作为参数。例如,在当我们用Te l n e t进行远程登录时,既可以指定一个主机名,也可以指定一个 I P地址。
封装
当应用程序用 T C P传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息),该过程如图 1 - 7所示。T C P传给I P的数据单元称作 T C P报文段或简称为 T C P段(T C Ps e g m e n t)。I P传给网络接口层的数据单元称作 I P数据报(IP datagram)。通过以太网传输的比特流称作帧(Fr a m e )
图1 - 7中帧头和帧尾下面所标注的数字是典型以太网帧首部的字节长度。
以太网数据帧的物理特性是其长度必须在 4 6~1 5 0 0字节之间。我们将在 4 . 5节遇到最小长
度的数据帧,在2 . 8节中遇到最大长度的数据帧。
U D P数据与T C P数据基本一致。唯一的不同是 U D P传给I P的信息单元称作 U D P数据报
(UDP datagram),而且U D P的首部长为8字节。
回想1 . 3节中的图1 - 4,由于T C P、U D P、I C M P和I G M P都要向I P传送数据,因此I P必须在
生成的I P首部中加入某种标识,以表明数据属于哪一层。为此, I P在首部中存入一个长度为
8 b i t的数值,称作协议域。 1表示为I C M P协议,2表示为I G M P协议,6表示为T C P协议,1 7表
示为U D P协议。
类似地,许多应用程序都可以使用 T C P或U D P来传送数据。运输层协议在生成报文首部
时要存入一个应用程序的标识符。 T C P和U D P都用一个1 6 b i t的端口号来表示不同的应用程序。
T C P和U D P把源端口号和目的端口号分别存入报文首部中。
网络接口分别要发送和接收 I P、A R P和R A R P数据,因此也必须在以太网的帧首部中加入某种形式的标识,以指明生成数据的网络层协议。为此,以太网的帧首部也有一个 16 bit的帧类型域
分用
当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各
层协议加上的报文首部。每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的
上层协议。这个过程称作分用( D e m u l t i p l e x i n g)
为协议I C M P和I G M P定位一直是一件很棘手的事情。在图1 - 4中,把它们与I P放在
同一层上,那是因为事实上它们是I P的附属协议。但是在这里,我们又把它们放在I P层
的上面,这是因为ICMP和IGMP报文都被封装在IP数据报中。
对于A R P和R A R P,我们也遇到类似的难题。在这里把它们放在以太网设备驱动程
序的上方,这是因为它们和I P数据报一样,都有各自的以太网数据帧类型。但在图 2 - 4
中,我们又把A R P作为以太网设备驱动程序的一部分,放在 I P层的下面,其原因在逻
辑上是合理的。
这些分层协议盒并不都是完美的。
当进一步描述T C P的细节时,我们将看到协议确实是通过目的端口号、源 I P地址和源端口
号进行解包的
一张图生动形象总结
|