概述---《TCP/IP协议》卷一
第1章 概述
1.1 引言
很多不同的厂家生产各种型号的计算机,它们运行完全不同的操作系统,但TCP/IP协议族允许它们互相进行通信。这一点很让人感到吃惊,因为它的作用已远远超出了起初的设想。
1.2 分层
TCP/IP的四层系统
-
链路层
- 包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。
-
网络层
- 处理分组在网络中的活动。例:分组的选路。
- 网络层协议包括IP协议(网际协议),ICMP协议(Internet互联网控制报文协议),以及IGMP协议(I nternet组管理协议)。
- IP协议是不可靠的(与传输层比较)。
-
运输层
- 主要为两台主机上的应用程序提供端到端(End system)的通信。
- 有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。
-
应用层
- 应用层负责处理特定的应用程序细节。
- Telnet远程登录。
- FTP文件传输协议。
- SMTP简单邮件传送协议。
- SNMP简单网络管理协议。
- 等等一系列协议。
-
下面将用一张图描述:
一个例子,如图:
问题是:我们列举了一个FTP客户程序和另一个FTP服务器程序。
- 图1-2的右边,我们注意到应用程序通常是一个用户进程,而下三层则一般在(操作系统)内核中执行。尽管这不是必需的,但通常都是这样处理的,例如UNIX操作系统。
- 图1-2中列举了四种不同层次上的协议。 FTP是一种应用层协议,TCP是一种运输层协议,IP是一种网络层协议,而以太网协议则应用于链路层上。
答案显而易见,任何两台计算机之间进行通信都需要经过这几个过程。
由上面的内容引出了一个问题:从表面上看,网络层和运输层之间的区别不那么明显。为什么要把它们划分成两个不同的层次呢?
在回答这个问题之前,让我们将视野从单个网络放大到一组网络(Internet)。渐渐地,我们有了Internet的概念,它是由多个路由器(老一辈的会把它叫做网关)相连组成的。
在图1-3中,我们可以划分出端系统(End system)(两边的两台主机)和中间系统(Intermediate system)(中间的路由器)。
应用层和运输层使用端到端(End-to-end)协议。在图中,只有端系统需要这两层协议。但是,网络层提供的却是逐跳(Hop-by-hop)协议,两个端系统和每个中间系统都要使用它。
在TCP/IP协议族中,网络层IP提供的是一种不可靠的服务。也就是说,它只是尽可能快地把分组从源结点送到目的结点,但是并不提供任何可靠性保证。而另一方面, TCP在不可靠的IP层上提供了一个可靠的运输层。为了提供这种可靠的服务, TCP采用了超时重传、发送和接收端到端的确认分组等机制。
由此可见,虽然传输层跟网络层看上去相同,但实际上运输层和网络层分别负责不同的功能。
1.3TCP/IP的分层
下图是本书要讨论的协议
- TCP和UDP是两种最为著名的运输层协议,二者都使用IP作为网络层协议。
- 虽然TCP使用不可靠的IP服务,但它却提供一种可靠的运输层服务。(TCP上层应用有Telnet和Rlogin、SMTP等)
- UDP为应用程序发送和接收数据报。一个数据报是指从发送方传输到接收方的一个信息单元(例如,发送方指定的一定字节数的信息)。但是与TCP不同的是,UDP是不可靠的,它不能保证数据报能安全无误地到达最终目的。(UDP上层应用有DNS、TFTP、BOOTP(DHCP的前身)、SNMP等)
- IP是网络层上的主要协议,同时被TCP和UDP使用。 TCP和UDP的每组数据都通过端系统和每个中间路由器中的IP层在互联网中进行传输。
- ICMP是I P协议的附属协议。 I P层用它来与其他主机或路由器交换错误报文和其他重要信息。(应用层程序可以访问它,比如ping和traceroute)
- IGMP是Internet组管理协议。它用来把一个UDP数据报多播到多个主机。
- ARP(地址解析协议)和RARP(逆地址解析协议)是某些网络接口(如以太网和令牌环网)使用的特殊协议,用来转换IP层和网络接口层使用的地址。
1.4互联网的地址
五类不同的互联网地址格式如下:
各类IP地址范围:
有3类IP地址
- 单播地址(目的为单个主机)
- 广播地址(目的端为给定网络上的所有主机)
- 多播地址(目的端为同一组内的所有主机)
PS:由于互联网上的每个接口必须有一个唯一的IP地址,因此必须要有一个管理机构为接入互联网的网络分配IP地址。这个管理机构就是互联网络信息中心(Internet Network InformationCentre),称作InterNIC。InterNIC只分配网络号。主机号的分配由系统管理员来负责。(中国的NIC的网址)
1.5域名系统(DNS)
- 域名系统(DNS)是一个分布的数据库,由它来提供IP地址和主机名之间的映射信息。
- 任何应用程序都可以调用一个标准的库函数来查看给定名字的主机的IP地址。类似地,系统还提供一个逆函数—给定主机的IP地址,查看它所对应的主机名。
- 大多数使用主机名作为参数的应用程序也可以把IP地址作为参数。例如,在第4章中当我们用Telnet进行远程登录时,既可以指定一个主机名,也可以指定一个IP地址。
也就是说,域名系统使得“IP地址”等同于“主机名”。
1.6封装
当应用程序用TCP传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息),该过程如图1-7所示。
- IP和网络接口层之间传送的数据单元应该是分组(packet)。分组既可以是一个IP数据报,也可以是IP数据报的一个片(fragment)。
- 以太网数据帧的物理特性是其长度必须在46~1500字节之间。
各层数据名称
- TCP报文段
- UDP数据报
- IP数据报
- 以太网数据帧
1.7分用
当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的上层协议。这个过程称作分用(Demultiplexing),图1 - 8显示了该过程是如何发生的。
1.8客户—服务器模式
服务器分为两种类型
-
重复型
- 等待一个客户请求的到来。
- 处理客户请求。
- 发送响应给发送请求的客户。
- 返回第一步。
-
并发型
- 等待一个客户请求的到来。
- 启动一个新的服务器来处理这个客户的请求。在这期间可能生成一个新的进程、任务或线程,并依赖底层操作系统的支持。这个步骤如何进行取决于操作系统。生成的新服务器对客户的全部请求进行处理。处理结束后,终止这个新服务器。
- 返回第一步。
重复型服务器在第二步的时候不能为其他客户服务(一对一服务)。
并发型服务器的优点在于它是利用生成其他服务器的方法来处理客户的请求(一对多服务)。
一般来说,TCP服务器是并发的,而UDP服务器是重复的。
1.9端口号
TCP和UDP采用16 bit的端口号来识别应用程序。
- 临时端口号:1024~5000
- 其他服务预留端口号:5001~65535
注:windows的查看进程命令:netstat -an
1.10标准化过程
1.11RFC
1.12标准的简单服务
名字 | TCP端口号 | UDP端口号 | RFC | 描述 |
---|---|---|---|---|
echo | 7 | 7 | 862 | 服务器返回客户发送的所有内容 |
discard | 9 | 9 | 863 | 服务器丢弃客户发送的所有内容 |
daytime | 13 | 13 | 867 | 服务器以可读形式返回时间和日期 |
chargen | 19 | 19 | 864 | 当客户发送一个数据报时,TCP服务器发送一串连续的字符流,知道客户中断连接。UDP服务器发送一个随即长度的数据报 |
time | 37 | 37 | 868 | 服务器返回一个二进制形式的32bit数,表示从UTC时间1900年1月1日午夜至今的秒数 |
如果仔细检查这些标准的简单服务以及其他标准的TCP/IP服务(如Telnet、FTP、SMTP等)的端口号时,我们发现它们都是奇数。这是有历史原因的,因为这些端口号都是从NCP端口号派生出来的(NCP,即网络控制协议,是ARPANET的运输层协议,是TCP的前身)。NCP是单工的,不是全双工的,因此每个应用程序需要两个连接,需预留一对奇数和偶数端口号。当TCP和UDP成为标准的运输层协议时,每个应用程序只需要一个端口号,因此就使用了NCP中的奇数。
1.13互联网
internet和Internet区别
- Internet指的是世界范围内通过TCP/IP互相通信的所有主机集合(超过100万台)。
- Internet是一个internet,但internet不等于Internet。
internet意思是用一个共同的协议族把多个网络连接在一起。
1.14实现
既成事实标准的TCP/IP软件实现来自于位于伯克利的加利福尼亚大学的计算机系统研究小组。
成长历史:
1.15应用编程接口
TCP/IP协议的应用程序通常采用两种应用编程接口(API)。
- socket(套接字)。
- TLI(运输层接口)。
- 所有关于socket和TLI的编程细节请参阅文献 [Stevens1990]。
1.16测试网络
不废话,上图:
1.17小结
本章快速地浏览了TCP/IP协议族,介绍了在后面的章节中将要详细讨论的许多术语和协议。
- TCP/IP协议族分为四层:链路层、网络层、运输层和应用层,每一层各有不同的责任。在TCP/IP中,网络层和运输层之间的区别是最为关键的:网络层(IP)提供点到点的服务,而运输层(TCP和UDP)提供端到端的服务。
- 一个互联网是网络的网络。构造互联网的共同基石是路由器,它们在IP层把网络连在一起。第一个字母大写的 Internet是指分布在世界各地的大型互联网,其中包括 1万多个网络和超过100万台主机。
- 在一个互联网上,每个接口都用IP地址来标识,尽管用户习惯使用主机名而不是IP地址。域名系统为主机名和IP地址之间提供动态的映射。
- 端口号用来标识互相通信的应用程序。服务器使用知名端口号,而客户使用临时设定的端口号。