2.1 应用层协议原理

  • 进行通信的实际上是进程而不是程序,是运行在不同端系统上的进程之间通过跨越计算机网络交换报文而相互通信

在一对进程之间通信的场景中,发起通信的进程被标识客户,在会话开始时等待联系的进程是服务器

  • 进程通过套接字(socket)这一软件接口发送报文和接受报文

套接字是应用层与传输层的接口

  • 主机由其IP地址标识。目的地端口号用于标出接收进程。

传输层协议:TCP、UDP

  • TCP服务:面向连接服务、可靠的数据传送服务

在应用层数据报文开始流动之前,TCP让客户和服务器糊相见欢运输层控制信息,即握手阶段 在握手阶段之后,一个TCP连接就在两个进程的套接字之间建立了

通信进程可以依靠TCP,无差错、按适当顺序交付所有发送的数据,没有字节的丢失和冗余。

TCP协议还具有拥塞控制机制,当双方的网络出现拥塞,TCP的拥塞控制机制会抑制发送进程

  • UDP服务:无连接的,所以没有握手过程。不提供不必要服务的轻量级运输协议。UDP协议并不保证报文到达接收进程。而且到达的报文也有可能是乱序到达的。

没有拥塞控制机制


SSL(Secure Sockets Layer):安全套接字层。在应用层运行。

SSL套接字从应用层接收未加密的数据,对其进行加密,然后将其传递给TCP套接字。如果应用程序开发人员希望使用SSL增强TCP,则必须在应用程序中包含SSL代码。

2.2 Web和HTTP

  • Web的应用层协议是超文本传输协议(HTTP)

Web页面是由对象组成的,一个对象只是一个文件,比如HTML文件、JPEG图形,他们都可以通过URL地址寻址。

HTTP定义了Web客户向Web服务器请求Web页面的方式,以及服务器向客户传送Web页面的方式。

HTTP使用TCP作为传输协议。HTTP客户首先发起一个与服务器的TCP连接,一旦建立,浏览器和服务器就可以通过套接字接口访问TCP。

HTTP是一个无状态协议,因为HTTP服务器不保存关于客户的任何信息(不存储用户的状态)。


  • 非持续连接和持续连接

非持续连接缺点:

①必须为每一个请求的对象建立和维护一个全新的连接。对于每个这样的连接,在客户和服务器中都要分配TCP的缓冲区和保持TCP变量

②没一个对象经受两倍RTT的交付时延(即一个RTT用于创建TCP,另一个RTT用于请求和接收对象)

持续连接可以通过一个TCP连接不断请求,而不必等待未决请求(流水线)的回答。


  • HTTP请求报文:

image.png

第一行是请求行,后继的行是首部行

请求行有三个字段:方法字段、URL字段、HTTP版本字段。

方法字段可以取几种不同的值,包括 GET、POST、HEAD、PUT、DELETE。绝大部分HTTP请求报文使用GET方法。

第二行指明了对象所在的主机,第三行是用户代理(即浏览器)

  • HTTP响应报文:

image.png

一个初始状态行,六个首部行,然后是实体体。

状态行有三个字段:协议版本字段、状态码和相应状态信息。

实体体部分是报文的主要部分,即它包含了所请求的对象本身。

服务器用 Connection : close 首部行告诉客户,发送完报文后将关闭该 TCP 连接。

Content Length : 首部行指示了被发送对象中的字节数。

常见状态码:

image.png


  • 用户与服务器交互:cookie

Web站点希望能够识别用户,把内容和用户身份联系起来。

用户首次访问一个站点时,需要提供一个用户标识。在后继会话中,浏览器向服务器传递一个cookie首部,从而向该服务器标识了用户。因此cookie可以在无状态的HTTP之上建立一个用户会话层


  • Web缓存 也叫代理服务器

可以配置用户浏览器,使得用户所有HTTP请求首先指向Web缓存器。

image.png


  • 条件GET方法

存放在高速缓存器中的对象副本可能是陈旧的,利用条件GET可以解决。

如果:①请求报文使用GET方法;并且②请求报文中包含一个“If-Modifued-Since:”首部行。那么这个HTTP请求报文就是条件GET请求报文。

这一部分先自行回忆,有不清楚的看原书P74~P75

2.3 电子邮件(略)

2.4 DNS提供的服务

DNS(域名系统):提供主机名到IP地址转换的目录服务

DNS协议运行在UDP上,使用53号端口。


为了使用户的主机能够将一个HTTP请求报文发送到Web服务器,该用户主机必须获得www….的IP地址:

image.png

DNS给使用它的因特网应用带来了额外的时延


  • DNS工作机理概述

为处理扩展性问题,DNS使用大量的DNS服务器,以层次方式组织,分为三种类型:根DNS服务器、顶级域(TLD)DNS服务器和权威DNS服务器。

image.png

每一个ISP都有一个本地DNS服务器,当主机与某个ISP连接时,该ISP提供一台主机的IP地址,该主机具有一台或多台其本地DNS服务器的IP地址

image.png

从cse.nyu.edu到dns.nyu.edu是递归查询,因为该查询是以自己的名义请求dns.nyu.edu来获得该映射;后继的三个都是迭代查询,因为所有的迭代都是返回给dns.nyu.edu


  • DNS缓存

在一个请求链中,当某DNS服务器接收一个DNS回答,它能将映射缓存在本地存储器中。每当接收到一个回答,它能够缓存包含在该回答中的任何信息

image.png

本地DNS服务器能够缓存TLD服务器的IP地址,因而许本地DNS绕过查询链中的根DNS服务器。事实上,因为缓存,除了少数DNS查询外,根服务器被绕过了


  • DNS记录及报文

DNS服务器存储了资源记录(RR),RR提供了主机名到IP地址的映射,资源记录是一个包括下列字段的4元组:(Name,Value,Type,TTL)

Name和Value的值取决于Type:

  1. 如果Type=A,则Name是主机名,Value是该主机名对应的IP地址。
  2. 如果Type=NS,则Name是个域,Value是直到如何获得该域中主机IP地址的权威DNS服务器的主机名
  3. 如果Type=CNAME,则Value是别名为Name的主机对应的规范主机名
  4. 如果Type=MX,则Value是别名为Name的邮件服务器的规范主机名

DNS报文

image.png

2.5 P2P

略…….

2.6 视频流和内容分发网

  • HTTP流

在HTTP流中,视频只是存储在HTTP服务器中作为一个普通文件,每个文件有一个特定的URL。当用户要看该视频时,客户与服务器创建一个TCP连接并发送对该URL的HTTP GET请求。在一个HTTP响应报文中发送该视频文件。

在客户一侧,字节被手机在客户应用缓存中,一旦超过预设门限就开始播放。特别的,流式视频应用程序周期性从客户应用程序缓存中抓取帧,对这些帧解压缩并展现。所以流式视频接受到视频就开始播放,同时缓存该视频后面部分的帧。


  • HTTP动态适应流(DASH)

因为不同客户可用带宽大小不同,所以产生了DASH。对不同的质量水平,视频编码为几个不同版本,有不同的比特率。客户用HTTP GET请求报文一次选择不同的块。

  • DASH允许客户播放不同码率的视频

  • 内容分发网(CDN)

几乎所有主要的视频流公司都利用CDN。CDN管理分布在多个地理位置上的服务器,在服务器中存储视频等内容的副本,并且将不同用户的请求定向到一个使他体验最好的一个CDN位置。

一旦CDN集群准备就绪,就可以跨集群复制内容。事实上,许多CDN没有将视频推入集群,而是等到用户请求一个集群未存储的视频时,集群向该客户传输视频并在本地保存一个副本,定期删除不经常请求的视频。


  • CDN操作

当用户主机中的一个浏览器检索一个特定视频时,CDN必须截获该请求,以便能够①确定适合该用户的CDN服务器集群②将该客户的请求重定向到该集群的某台服务器。

大多数CDN利用DNS来截获和重定向请求

image.png

image.png
image.png


  • 集群选择策略

动态地将用户定向到CDN中的某个服务器集群或数据中心的机制。

一种简单的策略:地理上最邻近

为了基于当前流量条件决定最好的集群。CDN能够对其集群和客户之间的时延和丢包性能执行周期性的实时测量

image.png

2.7 套接字编程

UDP套接字编程

当使用UDP时,必须先将目的地址附在该分组上。在该分组穿过发送方的套接字之后,因特网将使用该目的地址通过因特网为该分组选路到接收进程的套接字。

目的主机的IP地址是目的地址的一部分。因为一台主机可能运行许多网络应用进程,每个进程具有一个或多个套接字,所以在目的主机指定特定的套接字。 当生成一个套接字时,就为它分配一个称为端口号的标识符。

所以分组的目的地址包括目的主机的IP地址目的地套接字的端口号

发送方源地址由源主机的IP地址源套接字的端口号组成,该源地址也要附在分组上。这种操作不是UPD应用进程做的,而是底层OS做的

image.png

TCP套接字编程

TCP是一个面向连接的协议。用户和服务器开始互相发送数据之前,要先握手和创建一个TCP连接。

当创建TCP连接时,将其与客户套接字地址(IP地址和端口号)服务器套接字地址(IP地址和端口)关联起来。使用创建的TCP连接,发送数据时,只需经过套接字将数据丢进TCP连接。而UDP在丢进套接字之前必须要附上一个目的地址。

服务器有一个欢迎套接字,客户进程向服务器发起一个TCP连接,由客户程序创建一个TCP套接字。当生成TCP套接字时,指定了服务器中的欢迎套接字地址(即服务器主机IP地址和套接字端口号)。生成其套接字后,该客户发起了一个三次握手并创建了与服务器的一个TCP连接。

在三次握手期间,客户进程联系服务器进程的欢迎套接字,当服务器响应后将生成一个新套接字,专门用于特定的客户。

image.png