尽管通过I P地址可以识别主机上的网络接口, 进而访问主机, 但是人们最喜欢使用的还 是主机名。在 T C P / I P领域中,域名系统( D N S)是一个分布的数据库,由它来提供 I P地址和 主机名之间的映射信息。关于DNS,我在之后还会有详细的介绍。
现在,我们必须理解,任何应用程序都可以调用一个标准的库函数来查看给定名字的主机 的IP地址。类似地,系统还提供一个逆函数 —给定主机的IP地址,查看它所对应的主机名。
大多数使用主机名作为参数的应用程序也可以把 I P地址作为参数。们用Telnet进行远程登录时,既可以指定一个主机名,也可以指定一个 IP地址。
当应用程序用 T C P传送数据时, 数据被送入协议栈中, 然后逐个通过每一层直到被当作 一串比特流送入网络。 其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部 信息),该过程如图 1所示。 T C P传给I P的数据单元称作 T C P报文段或简称为 T C P段(T C P segment)。IP传给网络接口层的数据单元称作 IP数据报(IP datagram)。通过以太网传输的比特 流称作帧(Frame)。
U D P数据与 T C P数据基本一致。 唯一的不同是 U D P传给I P的信息单元称作 U D P数据报 (UDP datagram),而且UDP的首部长为8字节。
由于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表 示为UDP协议。
类似地,许多应用程序都可以使用 T C P或U D P来传送数据。 运输层协议在生成报文首部 时要存入一个应用程序的标识符。 T C P和U D P都用一个1 6 b i t的端口号来表示不同的应用程序。 TCP和UDP把源端口号和目的端口号分别存入报文首部中。网络接口分别要发送和接收 I P、A R P和R A R P数据, 因此也必须在以太网的帧首部中加入某种形式的标识,以指明生成数据的网络层协议。为此,以太网的帧首部也有一个 16 bit的帧 类型域。
协议加上的报文首部。 每层协议盒都要去检查报文首部中的协议标识, 以确定接收数据的 上层协议。这个过程称作分用( Demultiplexing),图2显示了该过程是如何发生的。
为协议ICMP和IGMP定位一直是一件很棘手的事情。在图2中,把它们与IP放在 同一层上,那是因为事实上它们是IP的附属协议。但是在这里,我们又把它们放在IP层 的上面,这是因为ICMP和IGMP报文都被封装在IP数据报中。
对于ARP和RARP,我们也遇到类似的难题。在这里把它们放在以太网设备驱动程 序的上方,这是因为它们和IP数据报一样,都有各自的以太网数据帧类型。但在图 2中,我们又把ARP作为以太网设备驱动程序的一部分,放在 IP层的下面,其原因在逻 辑上是合理的。 这些分层协议盒并不都是完美的。
当进一步描述TCP的细节时,我们将看到协议确实是通过目的端口号、源 IP地址和源端口 号进行解包的。