分类: 系统运维
2006-08-04 14:42:39
1. 前言
本文用于介绍TCP/IP协议的最基本内容,十分简单,也十分基本,如果希望了解详细的内容,请参阅其它资料,这只是给初学者用的。
2. TCP/IP介绍
TCP/IP通常指的是关于TCP和IP的任何东西,它是一个统称,它既可以包括其它协议,其它应用程序,还可以包括网络介质。
2.1 基本结构
为了理解这个技术,最好称理解下图:
当A发送IP包到B时,IP包头包括A的IP地址(这是源地址)和A的以太地址(这是源以太地址);同时这个包也包括B的IP地址和以太地址作为目的地址。
在这种情况下,使用IP是多余的,因为它根本没有起到什么作用,用IP只能增加多余的处理时间,占用了多余的传输带宽。B接收到这个包后,IP层检查这个包内的目的地址是不是和自己的IP地址一致,如果一致则将数据返回给上层协议。这称为直接路由。
5.2 间接路由
下面这个示意图更接近Internet真实的情况。三个小的以太网,每个网络中有三台计算机,它们有唯一以太地址,IP地址,这三个网络通过一台路由器连接,这台路由器有一个IP地址和三个以太地址,因为它和三个网络连接,当然要三个了。这里一定要记住,IP地址只有一个。
计算机D是一台路由器,它的TCP/IP协议栈内可能根本没有TCP和UDP,而可能有多个ARP模块和多个以太驱动程序(因为有多个以太适配器,所以要多个驱动程序才可以)。网络管理员为每个子网(上图中有三个子网)指定一个网络号,是这个网络的名称,这个名称在上图是没有表示。
如果计算机A希望和计算机B通信,采用直接路由就可以了。这个过程上面已经说过了。在同一个子网内均采用直接路由。如果计算机D希望和计算机A通信,这也是直接路由,直接通信就行了,D和其它所有计算机的通信都是直接通信。但是如果计算机A希望和非本子网内的计算机通信就不能采用直接路由了,它发送的IP包必须发到计算机D,由计算机D向其它网络发送,这种通信就是非直接的。
路由对于IP协议上层的协议来说是透明的,它们根本不知道有什么路由存在。
请注意下面的图,源地址是计算机A的,目的IP地址是计算机E,而目的以太地址却是计算机D的,这是因为计算机A和计算机E不处于同一个子网内,不能直接通信,需要由计算机D进行转发,因此这包只能发往计算机。
对于计算机D来说,它的以太帧地址如下:
因为计算机D和计算机E可以直接通信。我们可以看到,在直接通信时,目的IP地址和以太地址都是接收者的,而在非直接通信时,目的IP地址是接收者的,而目的以太地址却是路由器的。上面的例子比较简单,真实的路由要比这个复杂得多,因为现实中的网络十分大,要许多路由器同时工作,这时的情况就比较复杂了。
5.3 IP路由规则
对于要发出的IP包,IP必须决定如何发送,是采用直接发送还是非直接发送,这是在路由表的帮助下完成的。对于传入的IP包,IP模块必须能够识别它是不是自己需要的包,如果是自己需要的,就把数据传送到上一层协议中,如果不需要则进行转发。在IP包达到目的地址后,它不再转发了。
5.4 IP地址
IP地址是由网络管理者为一台计算机指定的地址,IP地址的一部分作为网络号,另一部分作为网络中的主机号。具体内容请大家查询相关资料。IP地址是由NIC管理的,所有直接连接到Internet上的计算机如果需要IP地址,必须和NIC联系,则它指定;如果您需要建立自己的网络,那相应的网络号也需要从NIC取得。
5.5 名称
人们喜欢使用计算机的名称,而不喜欢使用数字来标记一台计算机,对于小型网络,计算机名和IP地址的对应表可以保存在每台计算机上,如果是一个大型网络,则需要一台专用的计算机来负责IP地址到计算机名的转换。下面就是一个IP地址和计算机名的对应表。
223.1.2.1 alpha
223.1.2.2 beta
223.1.2.3 gamma
223.1.2.4 delta
223.1.3.2 epsilon
223.1.4.2 iota
前一列是IP地址,后一列是计算机名。您可以为一个计算机名指定多个IP地址,那么通过哪一个IP地址都可以访问这台计算机。这个拥有多个IP地址的计算机在接收到包后,可以根据目的地址知道是不是发向自己的包,这个目的地址可以是自己的任何一个地址。名称也用于网络号,下面就是一个例子:
223.1.2 development
223.1.3 accounting
223.1.4 factory
前一列是IP地址,后一列是网络名。我们可以这个表上面的表对比一下,看看各个计算机属于什么网络。
5.6 IP路由表
我们上面已经提到过路由表这个名词,下面我们就仔细看一下这张表。它通常是由下面几列构成的:IP网络号,直接/非直接标记,路由器IP地址和接口号。这张表一般由管理员负责维护,因为是他为你的计算机指定了IP地址。
5.7 直接路由
下面我们仔细看一下我们上面看过的直接路由的例子。
在计算机alpha内的路由表如下所示:
我们可能通过UNIX下的"netstat -r"命令看到类似这样的结果。
5.8 实例
Alpha发送IP包到beta,alpha中的IP包的目的地址是beta的地址(223.1.2.2)。IP取得网络号部分,查询路由表中的第一部分,看这个包应该包到什么地方,它发现这个网络和表中的第一个项目一致。而这个项目中的其它信息表示,目的计算机可以直接通信,于是直接进行ARP翻译(解析),通过接口1发送数据。
5.9 非直接路由
下面我们仔细看一下我们上面看过的非直接路由的例子。
计算机alpha内的路由表如下所示:
5.10 实例
Alpha发送IP包到epsilon,IP包内的目的地址是epsilon的(223.1.3.2)。IP分析目的地址的网络号部分,查询路由表中的第一列,发现第二个项目符合条件。此项目中的信息表示计算机可以由路由器devnetrouter达到,Alpha的IP模块进行ARP解析,将数据通过接口1传送到devnetrouter的IP地址上。这个包仍然包括着目的机IP地址223.1.3.2。这个包到达development网络接口,传送到delta计算机的IP模块,delta计算机发现这个包不是给它的,于是决定转发。Delta的IP模块从目的地址中解析出网络号,查询路由表,Delta的路由表如下所示:
第二条符合条件,于是IP模块接口3将数据发送到计算机epsilon,IP包到达epsilon时,epsilon的IP模块发现目的地址和自己的一致,于是将接收到的数据向上一层协议传送。
5.11 路由总结
在一个大型网络中,IP包在到达目的计算机前一般需要经过多个路由器,它前进的路线不是事先定好的,而是在各个路由器上一步步查询出来的,每个计算机只管一段,只保证把数据传送到下一站,至于下一站怎么办,它就不管了。
5.12 管理路由
在大型网络的每台机器上支持一张路由表可不是件容易事,路由器如果出了问题会对网络传输不能进行。我们也可以使用ICMP协议对网络进行监控。一台机器从一个地方移到另一个地方必须更改计算机的IP地址,如果要更新主机地址文件,这简单是不可能的,而DNS帮助解决这个问题。
6. 用户数据报协议(UDP)
UDP是在IP上的两个重要协议之一,它为用户的网络应用程序提供服务,我们经常使用的NFS,SNMP就是使用UDP协议的。UDP协议不是面向连接的。这一点是和TCP协议不同的。UDP在IP包上加上了端口号和校验码两个参数。
6.1 端口
一台计算机上的客户程序如何达到服务器呢?应用程序和UDP的通信线路是通过UDP端口一样的,这些端口是数字的,以0开始,一个端口一般和一个服务对应。服务器和客户就在这个端口等待对方的请求(或应答)。UDP保留由应用程序定义的消息边界。它决不把两个消息连接起来,或把一个消息分成两部分。
6.2 校验码
如果接收到的IP包内有一个标记“UDP”,IP模块就把数据传送到UDP,UDP检查校验码,如果运算得出的结果为0,数据是正确的。UDP的校验码可以产生也可以不产生。传送来的UDP包如果超过了上层应用程序的处理能力,就会暂时保存起来,如果保存的数据已经超过一定限制,则把UDP丢弃。
7. 传输控制协议(TCP)
TCP提供的服务不同于UDP,它们的最大区别在于TCP是面向连接的,TCP保证数据一定传送到接收者,而UDP可不保证。TCP用于一定要保证数据传输的场合,我们通常知道的FTP,TELNET是基于TCP协议的,而其它的一些TCP网络应用程序包括X-Window系统,rcp(远程复制)和R系列命令也是使用TCP的,TCP提供这样好的服务也是有代价的,它需要更多的CPU处理时间和网络带宽,TCP模块的复杂度也比UDP大得多。
与UDP相同的是,应用程序必须和TCP端口连接请求服务,接收和发送数据。在应用程序开始运行时,服务器和客户机上的TCP模块开始相互通信,这两个TCP包含了状态信息,维持一条虚链路,这条虚链路是全双工的。TCP可以任意打包数据,不必管什么边界。例如,应用程序可以在一个端口写5次,远方的应用程序可以读10次把数据读完,这和UDP不同,在UDP下,在一个端口写几次,远程应用程序就要读几次。
TCP支持滑动窗口协议,双方都进行流量控制,因此不会让缓冲区满。这也和UDP不同,在UDP的情况下,缓冲区可能因为应用程序的处理能力不足而变满。对于滑动窗口协议,它指定了一个窗口大小,这个大小指的是,在未接收到确认信息之前允许发送的数据数,在TCP中,窗口的大小是以字节为单位的。
8. 网络应用程序
TCP和UDP提供不同的服务,不同的应用程序会选择不同的协议,这里请您注意,如果您选择使用UDP进行可靠传输,那只能在UDP上层来提供可靠性。下面我们举出几个常用的应用程序。
TELNET使用TCP提供远程登录。TELNET工作得非常好,它虽然古老,但是现在仍然在广泛使用,它经常用于在不同的操作系统间进行互连。 FTP协议和TELNET岁数差不多大了,它也使用TCP服务,在FTP时,您好象登录到远程计算机上,但您能够使用的命令却不那么多,FTP提供用户在计算机间复制文件的服务。UNIX中的远程命令一般都以R开始,这些命令一般都通过网络进行,我们就称它们为R系列命令,这些命令通常在UNIX系统中使用,它对安全性考虑不多,但是非常好用。NFS由Sun公司开发,它使用UDP,它用于在不同的计算机上加载UNIX文件系统,在这一点上它做得非常好。NFS为网络加重了负担,在慢速连接的网络上工作得不好,但它的功能可却是不错。随着网络规模不断扩大,原来的网络管理协议ICMP已经不能提供满意的服务了,于是在这一要求下提出了SNMP协议,它检测网络中各种设备的情况,根据这种情况对网络进行监控。X Window系统使用X Window协议,X Window协议也使用TCP服务。