文章目录
引言
计算机网络在这一学科中的重要性毋庸置疑,而黑皮书又是这一学科的教科书级经典,因此本书是计算机从业者的必读书之一。笔者用一个专栏来精炼这本书的知识,帮助想了解这方面知识的同学快速打下基础。
在该专栏中,笔者不会严格按照章节的顺序来讲述,而是会直接列出知识点并进行介绍,以帮助大家理解。
正文
应用程序体系结构
应用程序体系结构是指在多台端系统上组织一个应用程序的方
式。一般有两种结构:客户-服务器体系结构和P2P体系结构。
客户-服务器体系结构
这种体系结构中,一个服务器服务于多个客户。这种情况下客户之间不相互通信,且服务器的IP地址是固定的、周知的,客户可以通过该地址来找到该服务器。
P2P体系结构
P2P体系结构由多个主机间不通过服务器直接通信,所有主机都是对等的。P2P结构一个明显的优势是自扩展性*。每个主机既可以是接收文件的客户,也可以是发送文件的服务器,这就比只有一个服务器的客户-服务器体系结构的服务能力强很多,而且可以容纳更多的主机。
进程,报文
操作系统中进行通信的是进程而非实际程序。进程是运行在端系统中的一个程序,它相当于是实际程序套了一层壳。
两个端系统中的进程通过交换报文互相通信。
客户进程,服务器进程
在两个进程的通信中,发起通信的进程是客户进程,等待通信的进程是服务器进程。
(注意:在这个定义下,P2P下的两个进程也可以分为客户进程和服务器进程)
套接字
发送主机要发送数据时,要把数据从应用层传送到运输层。这个过程就通过套接字来传输。套接字好比进程之门,我们把数据从这个门送出去,也可以从外面通过套接字把数据送入进程。注意,套接字是系统或网络编程库自带的,我们在编写网络应用程序时是直接应用套接字的。
套接字也称作应用程序和网络之间的应用程序编程接口(API)。
进程寻址
进程在发送报文时要附上目的主机的IP地址和目的进程的端口号,分别用来表示目的主机和送至该主机中的哪个进程。
应用程序选择运输层协议的标准
应用程序选择运输层协议的标准一般有四类:
- 可靠数据传输:运输层协议把报文分组完好且按照顺序传输。
- 吞吐量:运输层协议传输报文分组的速度。具有吞吐量要求的应用程序被称为带宽敏感的应用
- 定时:运输层协议传输报文分组的延迟,即传输的时间不能高于某个值。
- 安全性:运输层协议通过加密所传输的数据等方式保证传输的数据不会被恶意分子直到。
应用层协议
应用层协议定义了不同端系统上的应用程序进程相互传递报文的一套规则。应用层协议有很多,不同网络应用之间可能也会应用不同的应用层协议。
HTTP简述
HTTP,超文本传输协议,是Web的应用层协议。
Web页面
Web页面由对象组成,一个对象是一个文件,一般由HTML基本文件和几个引用对象组成。在接收时,先接收HTML基本文件,再通过这个基本文件接受其他引用对象。
HTTP概述
HTTP使用TCP协议进行其运输层协议,TCP协议能为HTTP提供数据可靠性等服务。
HTTP是一个无状态协议,就算一个客户连续多次向同一个服务器请求同一个对象,服务器也不会保留之前该客户请求过该对象的状态,而会重复发送该对象。
TCP运行方式
HTTP用非持续连接或持续连接的方式使用TCP。一般情况下,HTTP使用持续连接的方式。
非持续链接的HTTP
在非持续连接中,HTTP的运行过程如下:
- HTTP客户进程向服务器发起一个TCP连接。
- HTTP客户进程向服务器发送一个HTTP请求报文。
- 服务器接收报文,找出客户请求的对象,封装在响应报文中并发送回客户。
- HTTP客户接收响应报文并断开TCP连接。
我们考虑一下连接时间,设一个短分组从客户到服务器然后返回客户花费的时间是RTT:
在发起TCP连接过程中,客户和服务器先互相发送一个TCP短报文段,这用去一个RTT;然后客户再结合HTTP请求报文和一个TCP短报文段一起发给服务器,服务器则无需再发短报文段,直接将找到的对象发给客户即可,这又会额外消耗一个RTT。
因此,总的响应时间是两个RTT加上服务器传输HTML文件的时间。
非持续连接有一些缺点,包括需要为每一个对象维护一个链接,这会为服务器带来负担;创建连接也会为传输对象带来时延。
持续连接的HTTP
HTTP一般使用流水线的持续连接方式,使用流水线的方式允许客户不断发出请求而无需等待服务器的回答。这让一条TCP连接可以传输多个对象。
一般如果一条连接一段时间未使用,HTTP服务器关闭该连接。