第一节
应用程序体系结构:包括客户-服务器体系结构和P2P体系结构。
进程:运行在端系统上的程序。
套接字(socket)或应用程序编程接口(API):联系应用程序和网络的可编程接口。
应用程序可能需要的运输服务:
- 可靠数据传输:如邮件,文件,讯息等。可以发的慢,但不能有丢失的内容。
- 吞吐量:传输数据的速率有最低要求,对带宽敏感的应用,比如视频通话,或者多人在线游戏。
- 定时:对传输数据的时间有要求,比如视频或网络游戏。
- 安全性:需要对数据进行加密处理。
因特网能提供的运输服务:
- TCP:包括确认连接的服务和可靠数据传输的服务。TCP的加强版本SSL,增加了保证安全的服务。
- UDP:轻量级运输协议,啥也不保证。
第二节 Web和HTTP
HTTP:超文本传输协议,是一种无状态的协议。Web的应用层协议是HTTP。
客户与服务器两种的通信方式:
- 持续连接:是指在客户和服务器通信期间,保持一个TCP连接,直到所用信息交互完毕。
- 非持续连接:通信期间,每一个请求-响应对,都建立一个TCP连接,随开随关。
HTTP请求报文格式:
第一行是请求行,包含要请求的文件地址和HTTP版本
后面几行是首部行,包含服务器名,时间,语言等信息,除了服务器名,其他都是可选项
最后是实体体,包含用户输入的文本,比如在搜索引擎上输入的搜索内容。
HTTP响应报文格式:
第一行:初始状态行,指示返回是否成功。
后面几行:首部行,返回内容的各种信息。
最后:实体体,即返回的具体内容
cookie技术:跟踪用户行为,收集用户信息的技术,为了弥补HTTP的无状态特点而存在。
Web缓存器:也叫代理服务器,是初始Web服务器的好帮手,将用户经常访问的服务器的内容缓存进来,也会缓存最近用户访问过的内容,以方便用户快速的访问。通常在一个局域网内采用这种技术,会极大的减少服务器的响应时间,减少通信投资。
条件GET:为了解决Web缓存器中的内容可能是过时的问题,所以在用户向Web缓存器发送请求时,Web缓存器会问一下初始服务器,我的信息过没过时?
第三节 电子邮件和SMTP
电子邮件系统的组成:
- 用户代理:就像QQ邮箱,网易邮箱的客户端。用来写,查阅,接收邮件。
- 邮件服务器:用来将用户代理写的邮件通过SMTP协议,传递给收件人的邮件服务器。
- SMTP:简单邮件传输协议,用于服务器之间的传输。
当SMTP客户和SMTP服务器建立了TCP连接之后,先打声招呼,进行握手,告诉对方我的邮件从哪来到哪去,然后再发送报文。
SMTP报文的格式(四部分):
from:
to:
subject:
内容
与HTTP的对比
- HTTP是由客户端提起TCP连接的拉协议,而SMTP是要发送内容的服务器提起TCP连接的推协议。
- SMTP要求报文用ASCII码格式编写,但HTTP没有要求。
- HTTP把对象封装到响应报文中,再调用包含多媒体文件的报文; 而SMTP则把所有内容全都放在了一个报文中。
邮件访问协议:
- POP3:能将邮件从服务器上下载到用户代理上,特许阶段输入用户名和密码,事务处理阶段发送接受邮件,更新阶段更新服务器上的内容。只能下载到客户端上看。
- IMAP:邮件仍然在服务器上,,用户登录服务器查看。
- HTTP:用浏览器作为用户代理,采用HTTP协议,和当地的邮件服务器进行联系。
第四节 DNS
DNS:既是个分布式的域名系统,也是支持该系统的协议。DNS的作用:
- 把域名转化成IP地址,这是DNS最重要的作用。
- 获取主机别名对应的规范名,如www.baidu.com对应的规范名就是www.a.shifen.com。
- 邮件服务器别名,和主机别名作用类似,把不好记的邮件服务器起个好记的名字。
- 负载分配:在一个站点很繁忙时,会把资源分给多个服务器,当请求整个站点时,DNS系统会循环分配服务器。
DNS是一个分布式数据库,自顶而下分为三层:
- 根DNS服务器:全世界只有400个,用于管理顶级域服务器。
- TLD顶级域服务器:例如.com .edu这些都是顶级域服务器。
- 权威服务器:是各个公司或学校的服务器例如baidu.com , hust.edu.cn 等
在这三层之外还有一个本地DNS服务器,作为用户主机的代理,与这三层服务器进行交互。从用户主机到本地DNS服务器是递归查询,其余的都是迭代查询。
DNS缓存技术:将最近刚通过过该服务器的DNS信息缓存,下次用户再申请时该域名的IP地址时,就能直接给他,而不用再向其他的服务器发出请求。
DNS资源记录:因为DNS系统实际上就是个数据库,里面放着各种IP地址和域名的数据。DNS资源记录是一个四元组:
(Name,Value,Type,TTL)
TTL是生存周期,我们不管。
Type是资源类型,根据Type的不同,Name和Value表示的意义也不同:
- Type是A,则Name是主机名,Value是其对应的的IP地址,这个资源是我们向DNS服务器请求的最终的资源。
- Type是NS,则Name是主机名,Value是知道其IP的权威DNS服务器的名字,这个类型的资源通常储存在顶级域服务器中。
- Type是CNAME,则Name是别名,Value是其规范主机名。
- Type是MX,Name是邮件服务器的别名,Value是其规范主机名。
当我们创建了一个公司,想要注册其域名时,首先要做的就是,把公司网站服务器(例如www.baidu.com)对应的权威DNS服务器(例如dns.baidu.com)告诉TLD服务器,把权威DNS服务器的A型资源和NS资源储存进去:
例如(www.baidu.com, dns.baidu.com ,NS)
(dns.baidu.com,212.212.11.22,A)
这样就保证了权威服务器连上了服务器的分布式网络,然后只要保证权威服务器里有公司网站服务器的A资源和邮件服务器的MX资源就行了。
DNS报文:
这是一个用Wireshark捕获的报文:
前六行每一行有2字节,共12字节,
- 第一行是时标识符,就是这个DNS报文的名字
- 第二行是标志位,标志了是请求还是回答,要不要递归,是不是权威等信息。
- 第三到六行,后面几栏的数量,这里问题栏有一项,其余的回答栏,权威栏和附加栏都是0项
- 最后是问题栏,显示了要查询的域名和资源类型。
- 如果回答栏,权威栏和附加栏内容数量不是0的话,后面也会有对应的信息。
第五节 P2P文件分发
不同于客户-服务器的文件传输模式,P2P模式在对等的客户之间互相传递文件。最为流行的P2P分发协议是BitTorrent。
P2P体系的自拓展性:即不管客户有多少,把所有文件都传输给客户的时间是差不多的。原因是所有的客户除了是接收者,还是发送者。
BitTorrent:参加特定文件分发的对等方的群体称为洪流,每个洪流中的个体,选择接收哪些文件的策略是稀缺性优先,即哪些文件在洪流中数量少,就接收哪些;个体不能只是接收文件,还必须发送文件,选择发送文件的策略是,“谁给我传输的速率高,我优先给他发”,这种激励机制被称为**“一报还一报”**。
第六节 流视频和内容分发网
HTTP流:视频文件是HTTP服务器中的一个普通文件,我们想看一个视频时,建立于HTTP服务器的TCP连接,然后获得文件。缺点是获得的视频的比特率都是固定的,无法按需选择适合自己的版本。
DASH流:视频文件被编码成几个不同比特率的版本,用户可以按需选择。
内容分发网CDN: 为了面对全世界巨额视频数据的分发需求,视频流公司都用了内容分发网。有些大型的视频流公司建立了自己的内容分发网,小型公司则用别人提供的内容分发网。
CDN利用DNS服务器来分发内容:
- 当客户在网页上请求一个视频时,和DNS解析域名的步骤类似,本地DNS服务器向管理该视频域名的权威DNS服务器发送请求。
- 但是权威DNS服务器不直接返回IP地址,因为内容不在权威DNS服务器管理的主机上,而是在CDN的服务器上。所以权威DNS服务器返回一个CDN的主机名。
- 本地DNS服务器向该CDN主机的权威DNS服务器发送请求,并最终得到了存有视频的CDN的主机IP。
- 客户于该IP建立TCP连接,发送HTTP get的请求。如果用来DASH,则动态选择不同版本的视频。
第七节 套接字编程
套接字编程是创建应用层和运输层之间的接口,并利用运输层TCP或UDP协议,在客户端和服务器之间进行通信的编程。
套接字编程分为服务器端编程和客户端编程
- UDP编程:
- 客户端:创建套接字,把数据以及接收端的IP和端口号打包发出去。
- 服务器端:创建套接字,接收数据,处理完后再按客户端的IP和端口号发出去。 - TCP编程:
- 客户端:创建套接字,与服务器创建TCP连接,连接上后再发消息。
- 服务器端:创建欢迎套接字专门欢迎客户来敲门,敲门之后再创建连接套接字,与客户端连接上,接受数据,发送数据。当连接结束后,连接套接字关闭,但欢迎套接字继续等待下一个敲门的人。