Chapter 2 应用层
2.1 应用层协议原理
网络应用可能有很多需求,如运行在不同端系统,通过网络进行交流等。网络应用不需要运行在网络核心设备上。
网络应用使用多种架构:客户端/服务器架构(C/S)、对等网(P2P)、混合体系结构。
客户机-服务器体系结构
服务器端总是打开,拥有一个相对固定的地址(一般固定),具有缩放的数据中心。
客户端与服务器通信,可能是间歇性连接,可能有动态的IP地址,客户端之间不能相互通信。
P2P体系结构
- 客户端不一定总是在线
- 结点之间可以相互通信
- 结点的地址以及他们之间的连接可能随时发生变化
- 任何一方既可以提供服务又可以享受服务
- 结点之间是间歇性连接,地址也是变化的
- 管理非常复杂
混合体系结构
混合体系结构将C/S模式与P2P模式结合起来,广泛应用于即时通信中,当双方在线需要传输文件时可以使用P2P模式,当有一方不在线时可以使用C/S模式首先将文件上传到服务器,然后另一方下载。
2.1.2 进程通信
进程:在端系统运行的程序,操作系统术语,一个程序可能产生多个进程。同一台主机上的不同多个进程之间采用内部进程通信方式(由操作系统决定),而不同主机之间的进程通信采用报文交换方式(应用层协议)。客户端和服务器的通信实际上是进程和进程之间的通信,客户端进程需要启动通信,服务器进程需要等待连接。
应用层协议定义了:交换的报文类型、各种报文类型的语法、字段的语义、进程何时如何发送报文以及对报文进行响应、开放的允许交互的协议、专有协议(如QQ自己定义的报文格式)
注意应用层协议≠网络应用。网络应用的本质是进程,而应用层协议只是进程和进程之间的通信方式。
套接字
每一个网络应用进程都有一个属于自己的套接字,该套接字在整个因特网上独一无二。其中包含有:
- 主机地址:表示该网络应用进程运行在因特网哪一个主机上,通常使用32位IP地址进行标识。
- 端口地址:在该主机表示该网络应用进程,通常使用16位的端口号进行标识。
- 套接字的长度为48位。
进程通过套接字来接收和发送报文,套接字相当于一个接口,依赖接口另一边的传输基础设施来投递数据到接收进程的套接字。主机IP地址和进程相关的端口号标识因特网上的进程,且为唯一标识。
2.1.3 可供应用程序使用的运输服务
不同的应用程序对网络有不同的需求,不同的需求对应的网络要求不同。
- 文件传输、email、Web网页要求数据必须完全不能出错,带宽可以有弹性要求,不要求实时性
- 实时音频和视频、交互式游戏允许数据的一定量丢失,但带宽有要求,且实时性要求很高
- 存储音频和视频允许数据的一定量丢失,实时性要求低于实时,但也有一定要求。
- 即时讯息要求数据不丢失,实时性可能有可能无。
TCP协议
- 面向连接,服务器和客户端需要建立连接
- 可靠传输,在发送和接收进程之间
- 流量控制,发送数据的速度绝不超过接收的速度
- 拥塞控制,当网络超负荷时,束紧发送端口,减缓发送速度
- 不提供:实时性和最小带宽承诺
UDP协议
- 在客户端和服务器进程之间实现不可靠的传输
- 不提供:连接建立、可靠性保证、流量控制、拥塞控制、实时性、最小带宽承诺
安全性
两个协议都不提供安全性,需要添加安全套接字SSL,其提供加密的TCP连接,并有数据的完整性检查和端点身份鉴别。SSL位于应用层和TCP之间。
2.2 Web和Http
Web(C/S模式)的构成:
- Web服务器:IIS、Apache、TomCat等
- 浏览器:IE、Maxthon、Firefox等
- 协议:信息表达的协议为HTML,信息传输的协议为HTTP
Web页面由一些对象组成,对象可以是HTML,JPEG图片、音频文件等
HTML文件是Web页面的基础,可以包括各种对象,是一个容器对象
任何一个对象都可以使用URL来定位。
客户端:浏览器请求、接收、展示Web对象。
服务器:Web服务器发送对象对请求进行响应。
2.2.1 HTTP协议概况
HTTP协议的特点:
- TCP传输服务:客户端启动TCP连接到服务器,端口80。
- 服务器接收来自客户端的TCP连接。
- HTTP报文在浏览器和Web服务器之间进行交换。
- 关闭TCP连接。
- HTTP连接无状态,服务器不保留任何访问过的请求信息。
2.2.1 持续性连接和非持续性连接
HTTP连接分为非持续性连接和持续性连接两种。非持续性连接通过TCP连接最多发送1个对象,下载多个对象时需要建立多个连接。持续性连接通过单个TCP连接可以发送多个对象。HTTP1.0的传输模式就是非持久性连接。当客户端接收到第一个HTTP对象发现其中还有引用的对象时,会再一次开启TCP连接逐一接收这些对象。
定义往返时间RTT:一个短分组从客户到服务器然后再返回到客户所花费的时间。
因此在非持续性连接中获取一个对象需要2RTTs,第一个建立连接,第二个请求资源。总时间=2RTTs+文件传输时间。在非持续性连接中只能通过多个浏览器同时打开多个并行的连接来改善性能。
在HTTP1.1时即使用了持久连接,服务器在发送相应后不再断开TCP连接,而是保持该连接,用于后续对象的传送,直至该连接“休息”了一个较长的时间之后方断开该连接。持久连接减少了服务器端连接数的需要,从而减少了对服务器端套接字资源的占用,提高了服务器的负载能力。持久连接分为非流水线模式和流水线模式。非流水线方式是一个对象传输完成之后方能传输下一个,流水线模式可以一次性发送所有请求,慢慢接收。
2.2.3 HTTP报文格式
HTTP请求报文包括:
- 请求行:标识该报文的请求方式,包含GET、POST、HEAD、PUT、DELETE共5种。其中绝大多数为GET和POST。
- 首部诸行,包含如主机、解析浏览器、编码、语言等信息(每行结束为\r\n表示换行)
- 单独一行回车、换行标识报文首部结束
- 对象内容,数据
HTTP请求行定义的方法
- GET请求用于向服务器请求指定URL的对象
- POST请求用于向服务器提交表单数据,也可以同时请求一个Web页面。注意可以不使用POST方法二使用GET方法发送表单数据以获得新的Web页面
- HEAD请求用于从服务器返回相应报文,但是该报文中并不包含请求的对象,常用于故障跟踪
- PUT请求将上传的文件放在实体主体字段中,目标路径由URL字段标明
- DELETE请求删除URL字段中指定的文件。
上面的前3种为HTTP1.0支持,下面2种为HTTP1.1新支持。上传数据除了可以使用PUT请求外也可以使用GET请求将需要上传的数据发送到URL中。
HTTP请求报文首部状态码
HTTP请求有一个状态码位于第一行,标识HTTP请求的状态。常见的请求码:
- 200:OK,请求成功,被请求的对象就在报文中
- 301:Moved Permanently,被请求的对象移动过,新的位置在报文中有说明(Location: 开头的行)
- 400:Bad Request,服务器不明白报文的意思(4开头都是客户端的问题)
- 505:HTTP Version Not Supported,服务器不支持报文使用的HTTP协议版本(5开头都是服务器的问题)
2.2.4 用户与服务器的交互:Cookie
Web站点使用Cookie的目的有:
- 限制用户的访问
- 将内容和用户身份进行关联
Cookie技术组成部分:
- 在HTTP响应报文之中有一个Cookie首部行
- 在HTTP请求报文中也有一个Cookie首部行
- 在用户端系统中保留一个Cookie文件,由用户浏览器负责管理
- 在Web站点有一个后端数据库
客户端将保存的某个网站的Cookie放在HTTP请求头中,发送到对应的网站,网站发现请求报文中含有Cookie便会进行查找,找到Cookie后网站将Cookie对应到特定的用户中,返回个性化的内容。
2.2.5 Web缓存
缓存的目的:
- 加速客户端访问Web界面的速度,减少时延
- 减少局域网与外部因特网交换的数据量,从而在达到同等服务质量的同时,可以使用较小的网络带宽,节约费用。
如果需要频繁从一个内网中访问外部某一个网站的数据,那么会对出口带宽造成很大的挑战。但如果在机构内部假设缓存服务器,那么这些对象的访问只需要在内网即可实现,不仅能够减少对外链路的压力,还能够降低时延。
2.2.6 条件GET方法
目的:更新Web缓存中的Web对象副本。
缓存服务器向网站发送条件GET请求用于确认内容是否被更新,如果没有更新,则服务器返回304报文编码,表示内容没有被更新。如果已经更新,则返回一个普通的带有对象的HTTP报文,其中头部有一行为Last-Modified。
2.2.7 FTP协议
FTP协议使用TCP协议传输数据,采用C/S模式,端口号为21/20
与HTTP的比较:
- 都使用TCP协议
- FTP的控制信息带外传送,而HTTP的控制信息带内传送。FTP有两个并行连接,控制连接21端口发送控制信息,数据连接20端口发送数据信息。
有些传输层协议具有带外(Out Of Band, OOB)数据的概念,用于迅速告知对方本端发生的重要事件。因此带外数据比普通数据(也称为带内数据)有更高的优先级,不论发送缓冲区中是否有排队等待发送的普通数据,带外数据总是被立即发送。带外数据的传输可以使用一条独立的传输层连接,也可以映射到传输层普通数据的连接中。但是在实际应用中,带外数据的使用少见,已知的仅有telnet、ftp等远程非活跃程序。
UDP没有实现带外数据传输,TCP也没有真正意义上的带外数据。但是TCP利用其头部中的紧急指针标志(URG)和紧急指针两个字段,为应用程序提供了一种紧急方式。TCP紧急方式是利用传输普通数据的连接来传输紧急数据的,这种紧急数据的含义类似于带外数据。https://blog.csdn.net/qq_29344757/article/details/78689925
- HTTP连接无状态,而FTP连接有状态,FTP服务器会在整个会话期间维持用户状态信息。
常见的FTP命令
- USER username 登录
- PASS password 登录
- LIST 返回当前目录中的文件列表
- RETR filename 取文件
- STOR filename 传文件
常见FTP应答:
- 331 Username OK,password required
- 125 data connection already open; transfer starting
- 425 cannot open data connection
- 452 error writing file
2.4 DNS:因特网的目录服务
为记忆方面,发明了DNS系统用于IP地址和域名的转换。
2.4.1 DNS提供的服务
- DNS是一个分布式数据库,由很多台DNS服务器按照层次结构组织起来
- DNS运行在端到端系统上,且使用UDP协议(53号端口)进行报文传输,因此其为应用层协议
- 以C/S模式工作
- 不直接展示在用户面前,是Internet的核心功能
2.4.2 DNS工作原理概述
用户在浏览器输入一个域名后:
- 浏览器从URL中取出域名,将其传送给DNS客户机
- DNS客户机向DNS服务器发出一个包含域名的查询请求报文
- DNS服务器向DNS客户机送回一个包含对应IP地址的响应报文
- DNS客户机将该IP地址传送给浏览器
- 浏览器向该IP地址所在Web服务器发起TCP连接
如果全世界只有一台DNS服务器,那么
- 单点故障造成的问题会很严重
- DNS服务器承载的流量过大不堪重负
- 远程集中式数据库的查询会带来严重的延时
- 维护量巨大,必须实时更新以适应互联网上主机的增减
因此现实中DNS服务器以层级结构进行设计。最高为根服务器,下面依次为顶级域名服务器(如国家域名 .cn、.jp服务器)、权威服务器(.com、.org等)
- 当本地域名服务器不能解析时,就向根域名服务器查询。
- 顶级域DNS服务器负责顶级域名和所有国家的顶级域名解析工作,如 .com、.org、.net、.gov、.uk、.jp等
- 权威DNS服务器是属于某个组织的DNS服务器,为组织的服务器提供一个权威的域名到IP地址的映射服务,如Web和Mail
- 本地DNS服务器位于权威DNS服务器之下,严格意义上并不属于DNS层次结构中的一层。每一个网络服务商都会提供一个本地DNS服务器(又称默认DNS服务器),当一台主机需要域名查询时,请求首先被发送到本地域名服务器,其作用相当于一个代理,向域名层次体系中做进一步的域名查询。
DNS查询方式:
- 发起请求使用递归查询,后续解析使用迭代查询(本地DNS服务器发送请求到根服务器,根服务器返回结果到本地DNS服务器,然后本地DNS服务器再去请求低一级的DNS服务器,即除了本地DNS服务器外所有DNS服务器都只接收一次请求发送一次请求)
- 纯递归查询(本地DNS服务器发送请求到根服务器,根服务器找到后发送请求到低一级的DNS服务器,整个请求是一个链式结构)
- 上面两种方式中第1种更好,因为第1种请求1次只需要根服务器发送1次请求,而第2种需要发送2次
DNS缓存:当域名服务器知道了某个映射,就将其缓存。
- 在一定时间间隔后缓存的条目将会过期自动删除
- 顶级域DNS服务器通常被缓存在本地的DNS服务器中
- 这样可以减少根DNS的负载
DNS可以提供的服务有:
- 域名到IP地址的转换
- 主机/邮件/服务器别名:为不好记的主机/邮件服务器名提供一个容易记忆的别名
- 负载均衡,一个域名对应于多个IP,DNS服务器在多个IP之间轮转
2.4.3 DNS记录和报文
DNS记录的格式:(name, value, type, ttl)
- type=A时,name=主机名,value=IP地址
- type=NS时,name=域,value=该域权威域名服务器的主机名
- type=CNAME时,name=别名,value=真名
- type=MX时,value=与name相关的邮件服务器域名
通过Nslookup命令可以进行域名解析
DNS服务器攻击
- DDoS攻击,通过洪泛攻击根服务器——难以成功,因为其通常配备分组过滤器,大多数本地DNS服务器都缓存了TLD DNS服务器的地址,使得洪泛攻击难以触及DNS根服务器本身
- 重定向攻击,攻击者截获来自主机的请求并返回伪造的回答(DNS劫持),或攻击者诱导服务器在缓存中接收伪造的记录(DNS毒害)
- 利用DNS服务器对目标主机采用DDoS攻击——反射攻击
2.5 P2P文件分发
P2P服务器没有始终在线的服务器,允许端系统直接通信,对等方间歇性连接并更改IP地址。如文件分发BitTorrent、视频流PPTV、VoIP Skype等。
在C/S模式下,对于一个大小为F的文件,考虑对等方下载和上传速率优先的情况,设为服务器上传速率,为对等方的下载速率。当有N台客户机连接服务器时,服务器必须按顺序发送N份文件副本,总时间为。每个客户端需要下载文件副本,设所有客户端中最小下载速率为,则客户端最长下载时间为。因此将F分配给N个客户机的时间。
在P2P模式下,服务器需要至少上传一份副本,时间为,每一个客户端需要下载文件副本,最长时间为。多有客户端整体需要下载NF比特,最大上传速率为。故将F分配给N个客户机的时间为,最后一个值随N线性增加,但每个对等方带来了服务能力。
BitTorrent基本概念
洪流:参与一个特定文件分发的所有对等方的集合
追踪器:跟踪正在参与在洪流中的对等方
文件块:256KB
BitTorrent的基本工作机制
- 向邻居请求哪些文件块——最稀罕优先
- 优先响应哪些请求——对换算法(每10秒重新确定4个最高速率对等方。每30秒随机选择1个新的邻居)
- 下载时,对等方将块上载到其他的对等方
- 对等方可能会更改与之交换块的对等方
- 对等方不稳定,会产生波动
- 一旦对等方拥有了整个文件,它可能直接离开或留在洪流中