企业网络安全致胜宝典
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3.2 TCP/IP的分层

1.TCP/IP组件中不同层次的协议

TCP和UDP是两种最为著名的传输层协议,两者都使用IP作为网络层协议。

虽然TCP使用不可靠的IP服务,但它却提供一种可靠的传输层服务。

UDP为应用程序发送和接收数据报。一个数据报是指从发送方传输到接收方的一个信息单元(例如,发送方指定的一定字节数的信息)。但是与TCP不同的是,UDP是不可靠的,它不能保证数据报能安全无误地到达最终目的。

IP是网络层上的主要协议,同时被TCP和UDP使用。TCP和UDP的每组数据都通过端系统和每个中间路由器中的IP层在互联网中进行传输。

ICMP是IP协议的附属协议。IP层用它来与其他主机或路由器交换错误报文和其他重要信息。尽管ICMP主要被IP使用,但应用程序也有可能访问它。

IGMP是Internet组管理协议。它用来把一个UDP数据报传播到多个主机。

ARP(地址解析协议)和RARP(逆地址解析协议)是某些网络接口(如以太网和令牌环网)使用的特殊协议,用来转换IP层和网络接口层使用的地址。

2.域名系统

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

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

3.封装

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

以太网数据帧的物理特性是其长度必须在46~1500字节之间。

所有的Internet标准和大多数有关TCP/IP的书都使用octet这个术语来表示字节。使用这个过分雕琢的术语是有历史原因的——因为TCP/IP的很多工作都是在DEC-10系统上进行的,但是它并不使用8位的字节。

UDP数据与TCP数据基本一致。唯一的不同是UDP传给IP的信息单元叫做UDP数据报(UDP datagram),而且UDP的头部长为8字节。

4.数据进入协议栈时的封装过程

由于TCP、UDP、ICMP和IGMP都要向IP传送数据,因此IP必须在生成的IP头部中加入某种标志,以表明数据属于哪一层。为此,IP在头部中存入一个长度为8位的数值,叫协议域。该域的1表示为ICMP协议,2表示为IGMP协议,6表示为TCP协议,17表示为UDP协议。

类似的许多应用程序都可以使用TCP或UDP来传送数据。传输层协议在生成报文头部时要存入一个应用程序的标识符。TCP和UDP都用一个16位的端口号来表示不同的应用程序。TCP和UDP把源端口号和目的端口号分别存入报文首部中。

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

5.分用(Demultiplexing)

当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文头部。每层协议盒都要去检查报文头部中的协议标志,以确定接收数据的上层协议。这个过程称为分用。

6.以太网数据帧的分用过程

对于ARP和RARP,也遇到了类似的难题。在这里把它们放在以太网设备驱动程序的上方,这是因为它们和IP数据报一样,都有各自的以太网数据帧类型。把ARP作为以太网设备驱动程序的一部分,放在IP层的下面,这在逻辑上这是合理的。

当进一步描述TCP细节时,将看到协议确实是通过目的端口号、源IP地址和源端口号进行解包的。

7.客户服务器模型

大部分网络应用程序在编写时都假设一端是客户,另一端是服务器,其目的是为了让服务器为客户提供一些特定的服务。

可以将这种服务分为两种类型:重复型和并发型。重复型服务器通过以下步骤进行交互:

(1)等待一个客户请求的到来。

(2)处理客户请求。

(3)发送响应给发送请求的客户。

(4)返回步骤(1)。

相应地,并发型服务器采用以下步骤:

(1)等待一个客户请求的到来。

(2)启动一个新的服务器来处理这个客户的请求。在这期间可能生成一个新的进程、任务或线程,并依赖底层操作系统的支持。这个步骤如何进行取决于操作系统。生成的新服务器对客户的全部请求进行处理。处理结束后,终止这个新服务器。

(3)返回步骤(1)。

并发服务器的优点在于它是利用生成其他服务器的方法来处理客户的请求的。也就是说,每个客户都有它自己对应的服务器。如果操作系统允许多任务,那么就可以同时为多个客户同时服务。

对服务器分类,而不对客户进行分类的原因是因为对于一个客户来说,它通常并不能够辨别自己正与一个重复型服务器还是并发型服务器进行对话。

一般来说,TCP服务器是并发的,而UDP服务器是重复的,但也存在一些例外。

8.端口号

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

服务器一般都是通过人们所熟知的端口号来识别的。例如,对于每个TCP/IP实现来说,FTP服务器的TCP端口号都是21,每个Telnet服务器的TCP端口号都是23,每个FTTP(简单文件传输协议)服务器的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系统现在也提供该服务),因此在20世纪80年代初,它的有名端口号为513。

客户端通常对它所使用的端口号并不关心,只需保证该端口号在本机上是唯一的就可以了。客户端口号又称做临时端口号(即存在的时间很短暂)。这是因为它通常只是在用户运行该客户程序时才存在,而服务器则只要主机是开着的,其服务就运行。

大多数TCP/IP协议实现给临时端口分配1024~5000之间的端口号。大于5000的端口号是为其他服务器预留的(Internet上并不常用的服务)。在本章后面还有许多给临时端口分配端口号的例子。