什么是TCP/IP
Intemet采用TCP/IP协议。TCP/IP是一种网际互联通信协议,它包括两个核心协议TCP和IP。TCP称为传输控制协议,IP称为互联网络协议。
TCP/IP的基本工作原理
TCP/IP模型有四层(应用层、传输层、网际层、网络接口层),每层分别具有不同的协议和功能,TCP/IP协议族是一组在不同层上的多个协议的组合。各层在实现自身的功能时,使用它的直接下层提供的服务,同时也为它的直接上层提供服务。下面说明这些协议进行协调工作的基本原理。
1.TCP/IP协议族中各协议之间的关系
TCP/IP协议族中有很多协议,这些协议处于不同的层,它们之间的关系如下图所示。
每个应用层协议都是为了解决某一类应用问题而定义的,各种应用进程就是通过不同的应用层协议来使用网络所提供的服务。图1-4中的应用进程代表实现不同应用层协议功能的进程。例如,实现文件传输协议的FTP应用进程可以为用户提供计算机之间的文件传输服务,实现超文本传输协议的HTTP应用进程可以为用户提供浏览Web网页的功能等。
TCP和UDP是两个传输层协议。一般地,应用进程可以选择使用TCP或者UDP协议。如果应用层协议要求传输层提供可靠的服务,则应该选择TCP协议;否则,如果应用层协议要求较高的数据传输速率,但是可以容忍一定的数据丢失,则可以选择UDP协议。TCP协议的数据单元称为TCP报文段或简称TCP段(TCPsegment),UDP协议的数据单元称为UDP数据报(UDPdatagram)。
IP协议是网际层上的一个主要协议。TCP和UDP协议都可以直接使用IP协议所提供的服务。IP协议的数据传送单位称为IP数据报或IP分组。TCP报文段或UDP数据报都可以封装在IP数据报中,以便在互联网上传输。除IP协议外,网际层还有其他协议,例如ICMP协议用于报告差错和其他重要信息;IGMP是多播组管理协议,是一个与多播有关的协议;ARP(地址解析协议)和RARP(逆向地址解析协议)用于提供ⅡP地址与物理地址的映射功能。IP数据报可以在不同的物理网络上进行传送。通过以太网传送的数据单元称为以太网帧,或简称为帧(frame)。
2.封装和拆封
在发送方(也称为源主机),当应用程序使用TCP或UDP传送用户数据时,将用户数据送人TCP/IP协议栈,然后自上而下地逐个通过每一层,直到被当做一串比特流送入网络。其中每一层对收到的数据都需要增加一些首部信息,有时还需要增加尾部信息。这些操作过程称为封装,如图所示。
TCP、UDP、ICMP和IGMP等协议都要使用IP数据报传送数据,所以必须在IP数据报的首部加入某种标识,以说明是哪个协议的数据封装到了IP数据报中。IP数据报首部定义的一个8位的“协议”宇段就是为此目的而设置的。协议宇段的值为1表示ICMP,为2表示IGMP,为6表示TCP,为17表示UDP。
类似地,许多应用进程使用TCP或UDP传送数据,则需要在TCP段或UDP数据报首部定义一个应用程序标识符。TCP和UDP都使用一个16位的端口号来标识不同的应用程序,TCP和UDP把“源端口号”和“目的端口号”分别存人TCP段首部和UDP数据报首部。网络接口分别发送和接收IP、ARP、RARP的数据,同理,也必须在以太网(假定物理网络是一个以太网)的首部加入一个字段,用来说明是哪个协议的数据。为此,以太网帧首部定义了一个16位的“类型”字段。当接收方(也称目的主机)收到一个以太网帧时,数据就开始在协议栈中自下而上传送。各层协议利用报文首部所携带的协议控制信息做相应的处理,然后去掉各层协议数据单元的首部,将封装的数据交给上层协议。每层协议都要检查协议首部中的协议标识,以确定让哪一个协议接收数据,这个过程称为拆封。下图说明了以太网数据帧的拆封过程。
总而言之,发送数据时需要自上而下,层层封装。接收数据时需要自下而上,层层拆封。
3.两个端系统的TCP/IP通信
两个端系统的通信会涉及不同层的协议。如下图所示,主机A和主机B在同一个局域网(以太网)上,两台主机都运行实现FTP协议的应用进程,它们的通信过程所涉及到的主要协议都标识在下图中。
主机A主机B大多数网络应用程序都设计成客户—服务器方式,客户是服务请求方,服务器是服务提供方,服务器为客户提供某种服务。例如,FTP服务器允许客户访问FTP服务器所在主机上的文件,WWW服务器允许客户(浏览器)访问WWW服务器所在主机上的网页,等等。在两个端系统的同一层上,双方都有对应的一个或多个协议进行通信。例如传输层利用TCP或UDP等进行通信,网际层利用IP进行通信。
上图局域网上运行FTP的两台主机从前面的讲述可知,应用进程的数据要经过主机A(源主机)自上而下的封装,然后在网络中传输,最后在主机B(目的主机)经过自下而上的拆封这样复杂的处理过程,才能到达目的主机的应用进程。但是,对用户来说,这些复杂的处理过程都屏蔽掉了,好像是主机A的应用进程直接把数据交给了主机B的应用进程。同理,我们可以认为,任何两个对等层(peerlayer),例如传输层、网际层、网络接口层之间的通信,如同上图中标识的一样,好像是将数据通过水平虚线直接传递给对方,这就是所谓的对等层之间的通信。实际上,协议就是在两个对等层之间传递数据时的各种规定。由此可以这样认为:实际通信是按垂直方向进行的,层与层之间经过封装和拆封这样的操作实现物理通信。但是逻辑上,却是在水平方向上利用协议进行的对等层通信。在协议的控制下,对等层的通信使得本层能够向上层提供服务。为了实现本层协议,还需要使用下面一层所提供的服务。如果两个端系统不在同一个网络上,例如它们分别是在路由器连接起来的两个不同的网络上,主机A在以太网上,主机B在令牌环网上,通过一个路由器使这两个网络连接起来。以太网上的任何主机都可以与令牌环网上的任何主机进行通信,如下图所示。
应用层和传输层使用端到端(end-to-end)协议,路由器中没有这两层协议,只有端系统才有这两层协议。网际层是逐跳(hop-by-hop)协议,端系统和路由器都有网际层协议。一个路由器具有两个或多个网络接口,这样才能连接两个或多个网络。互联网的目的之一是在应用程序中屏蔽所有的物理网络细节。在上图中,应用层不需要关心一个端系统是在以太网上还是在令牌环网上,它们通过路由器进行通信。随着不同类型物理网络的增加,互联网的规模变得越来越大,也需要增加路由器,但是应用层仍然是一样的。物理网络细节的屏蔽使得互联网功能非常强大,也非常有用。