引言
很多不同的厂家生产各种型号的计算机,它们运行完全不同的操作系统,但TCP/IP协议族允许它们通信。它是一个真正开放的系统,因为协议族的定义及其多种实现 可以不用花钱或花很少的钱就可以公开的得到。它被称作“全球互联网”或“因特网(Internet)”的基础,该广域网(WAN)已包含遍布世界的计算机。
本章主要对TCP/IP协议族进行概述,其目的是为本书的其余章节提供充分的背景知识。
分层
网络协议通常分不同层次进行开发,每一层分别负责不同的通信功能。一个协议族,比如TCP/IP,是一组不同层次上的多个协议的组合。TCP/IP通常被任务是一个四层协议系统。
层 | 应用 |
---|---|
应用层 | Telnet、FTP和e-mail等 |
运输层 | TCP和UDP |
网络层 | IP、ICMP和IGMP |
链路层 | 设备驱动程序以及接口卡 |
每一层负责不同的功能:
链路层,有时也成为数据链路层或网络接口层,通常包括操作兄台哪个中的设备驱动程序和计算机中对应网络接口卡。它们一起处理与电缆(或其他任何的传输媒介)的物理接口细节。
网络层,有时也称作互联网层,处理分组咋网络中的活动,例如分组的选路。在TCP/IP协议族中,网络层协议包括IP协议(网际协议),ICMP协议(Internet互联网控制报文协议),以及IGMP协议(Internet组管理协议)。
运输层,主要为两台主机上的应用程序提供端到端的通信。在TCP/IP协议族中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。 TCP为两台主机提供高可靠的数据通信。它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。由于运输层提供了高可靠性的端到端通信,因此应用层可以忽略所有这些细节。 UDP则为应用层提供一种非常简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠性必须由应用层来提供。
应用层,负责处理特定的应用程序细节。几乎各种不同的TCP/IP实现都会提供下面这些通用的应用程序。
- Telnet 远程登录。
- FTP 文件传输协议。
- SMTP 简单右键传送协议。
- SNMP 简单网络管理协议。
构造互联网最简单的方法是把两个或者多个网络通过路由器进行连接。它是一种特殊的用于网络互联的硬件盒。路由器的好处是为不同的物理网络提供连接:以太网、令牌环网、点对点的连接和FDDI(光纤分布式数据接口)等等。
TCP/IP的分层
TCP和UDP是两种最为著名的运输层协议,二者豆使用IP作为网络层协议。
- TCP,虽然TCP使用不可靠的IP服务,但它阙提供一种可靠的运输层服务。
- UDP,为应用程序发送和接收数据报。一个数据是指从发送方传输到接收方的一个信息单元。但是与TCP不同的是,UDP是不可靠的,它不能保证数据报能安全无误的到达最终目的地。
- IP,是网络层上主要协议,同时被TCP和UDP使用。TCP和UDP的每族数据都通过端系统和每个中间路由器中的IP层在互联网中进行传输。
- ICMP,是IP协议的附属协议,IP层用它来与其他主机或路由器交换错误报文和其他重要信息。
- IGMP,是Internet组管理协议。它用来把一个UDP数据报多到多个主机。
- ARP,地址解析协议和RARP(逆地址解析协议)是某些网络接口(如以太网和令牌环网)使用的特殊协议,用来转换IP层和网络接口层使用的地址。
互联网的地址
互联网上的每个接口必有有个唯一的Internet地址(也称作IP地址)。IP地址长32bit。Internet地址并不采用平面形式的地址空间,如1、2、3等。IP地址是具有一定结构的,五类不同的互联网地址格式如下:
类别 | 固定位(二进制) | 网络号长度 | 主机号长度 |
---|---|---|---|
A类 | 0 | 7 bit | 24 bit |
B类 | 10 | 14 bit | 16 bit |
C类 | 110 | 21 bit | 8 bit |
D类 | 1110 | 28 bit(多播组号) | |
E类 | 11110 | 27 bit(留待后用) |
这些32位的地址通写成4个十进制的数,其中每个整数对应一个字节。这种表示方法称作“点分十进制表示法(Dotted decimal notation)”。 区分各类地址的最简单方法就是看它的第一个十进制整数。如下表,其中第一个十进制整数用粗体表示。
类型 | 范围 |
---|---|
A类 | 0.0.0.0 - 127.255.255.255 |
B类 | 128.0.0.0 - 191.255.255.255 |
C类 | 192.0.0.0 - 223.255.255.255 |
D类 | 224.0.0.0 - 239.255.255.255 |
E类 | 240.0.0.0 - 255.255.255.255 |
需要指出的是,多接口主机具有多个IP地址,其中每个接口对对应一个IP地址(比如笔记本电脑的WIFI和网线有不同的IP)。
由于互联网上的每个接口都必须有一个唯一的IP地址,因此必须要有一个管理机构为接入互联网的网络分配IP地址。这个管理机构就是互联网信息中心(Internet Network Information Center),称作InterNIC。InterNIC只分配网络号。主机号的分配由系统管理员来负责。
有三类IP地址:
- 单播地址,目的端为单个主机。
- 广播地址,目的端为给定网路上的所有主机。
- 多播地址,目的端为同一个组内的所有主机。
域名系统
尽管通过IP地址可以识别主机上的网络接口,进而访问主机,但是人们最喜欢使用的还是主机名,在TCP/IP领域中,域名系统(DNS)是一个分布的数据库,由它来提供IP地址和主机名之间的映射信息。
我们可以理解为,任何应用程序都可以调用一个标准的库函数来查看给定名字的主机IP地址,反之,系统也提供一个逆函数——给定主机的IP地址,查看它所对应的主机名。例如,当我们使用Telnet进行远程登录时,既可以指定IP也可以指定主机名。
封装
当应用程序用TCP传送数据时,数据被送入协议栈中,然后逐个通过每一层知道被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部或者尾部信息。过程如下图,TCP传给IP的数据单元称作TCP报文段或简成为TCP段(TCP segment)。IP传给网络接口的数据单元称作IP数据报(IP datagram)。通过以太网传输的比特流称作为帧(Frame)。
UDP数据与TCP的数据基本一致。唯一不同的是UDP传给IP的信息单元称作UDP数据报(UDP datagram),而且UDP的首部长为8字节。
由于TCP、UDP、ICMP、IGMP都要像IP传送数据,一次IP必须在IP的首部加入某种标识,以表明数据属于哪一层。为此,IP在首部加入一个长度为8bit的数值,称之为协议域。其中
- 1表示为ICMP协议。
- 2表示为IGMP协议。
- 6表示为TCP协议。
- 17表示为UDP协议。
类似的,许多的应用程序都可以使用TCP或者UDP来传送数据。运输层协议在生成报文首部时要存入一个应用程序的标识符。TCP和UDP都用一个16bit的端口号来表示不同的应用程序。TCP和UDP把端口号和目的端口号分别存入报文首部中。
网络接口分别要发送和接收IP、ARP和RARP数据,因此也必须在以太网的帧首部加入某种形式的标识,以指明生成数据的网络层协议。为此,以太网的帧首部也有一个16bit的帧类型域。
分用
当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议都要检查报文首部中的协议标识,以确定接收数据的上层协议。这个过程被称作分用(Demultiplexing)
客户-服务器模型
大部分网络应用程序在编写时都假设一端是客户,一端是服务器,目的是为了让服务器为客户提供某些服务。
可以将这种服务分为两种类型:重复型或并发型。简而言之,重复型一般是同步当线程的;并发是异步多线程的。